|
@@ -14,7 +14,7 @@ const props = defineProps({
|
|
|
departArr:Array,
|
|
|
roleArr:Array
|
|
|
})
|
|
|
-const emit = defineEmits(["closeDia"],["save"])
|
|
|
+const emit = defineEmits(["closeDia","submitForm"])
|
|
|
|
|
|
//用户表单原始信息
|
|
|
const baseForm = {
|
|
@@ -37,17 +37,23 @@ const baseForm = {
|
|
|
}
|
|
|
let userForm = reactive({})
|
|
|
let hasEmployeeNo = ref(false)
|
|
|
+let formShow = ref(false) //控制表单暂缓加载,直接加载弹窗弹出会卡顿
|
|
|
+let type = ref('add')
|
|
|
watch(()=>props.isShow,(newval)=>{
|
|
|
- //初始化userForm
|
|
|
- Object.assign(userForm,baseForm)
|
|
|
- //清除表单校验
|
|
|
- formRef.value?.resetFields()
|
|
|
- if(newval&&props.type==='edit'){
|
|
|
+ if(newval){
|
|
|
+ //工号一旦填写了就不允许更改
|
|
|
+ hasEmployeeNo.value = props.type==='add'?false:!!props.userInfo.EmployeeId
|
|
|
setUserForm()
|
|
|
+ type.value = props.type
|
|
|
+ }else{
|
|
|
+ //清除表单校验
|
|
|
+ formRef.value?.resetFields()
|
|
|
+ Object.assign(userForm,baseForm)
|
|
|
+ hasEmployeeNo.value = false
|
|
|
}
|
|
|
- hasEmployeeNo.value = props.type==='add'?false:!!props.userInfo.EmployeeId
|
|
|
+
|
|
|
})
|
|
|
-//编辑用户信息时,设置userForm的值
|
|
|
+//设置userForm的值
|
|
|
async function setUserForm(){
|
|
|
const {
|
|
|
AdminId,AdminName,Password,EmployeeId,Authority,Position,RealName,RoleId,Enabled,Email,
|
|
@@ -55,17 +61,10 @@ async function setUserForm(){
|
|
|
} = props.userInfo
|
|
|
|
|
|
let departArr = [];
|
|
|
- departArr.push(DepartmentId)
|
|
|
+ DepartmentId?departArr.push(DepartmentId):''
|
|
|
GroupId?departArr.push(GroupId):''
|
|
|
TeamId ?departArr.push(TeamId):''
|
|
|
|
|
|
- let ResearchGroupIds = []
|
|
|
- const res = await departInterence.getResearchGroupByAdminId({AdminId})
|
|
|
- if(res.Ret===200&&res.Data){
|
|
|
- res.Data.forEach(item=>{
|
|
|
- ResearchGroupIds.push(item.research_group_id)
|
|
|
- })
|
|
|
- }
|
|
|
|
|
|
Object.assign(
|
|
|
userForm,
|
|
@@ -75,22 +74,38 @@ async function setUserForm(){
|
|
|
pwd:Password||'',
|
|
|
employeeNumber:EmployeeId||'',
|
|
|
name:RealName||'',
|
|
|
- depart:departArr,
|
|
|
+ depart:departArr.length?departArr:'',
|
|
|
role:RoleId||'',
|
|
|
province:Province||'',
|
|
|
city:City||'',
|
|
|
post:Position||'',
|
|
|
mobile:Mobile||'',
|
|
|
- auth:Authority,
|
|
|
- status:Enabled,
|
|
|
- direct:changeResearchGroupIdsToDirect(ResearchGroupIds,'tag_id'),
|
|
|
- email:Email,
|
|
|
+ auth:Authority||0,
|
|
|
+ status:Enabled||1,
|
|
|
+ direct:'',
|
|
|
+ email:Email||'',
|
|
|
areacode:TelAreaCode||'86'
|
|
|
}
|
|
|
)
|
|
|
+ console.log('setform')
|
|
|
+ if(props.type==='add') return
|
|
|
+ let ResearchGroupIds = []
|
|
|
+ const res = await departInterence.getResearchGroupByAdminId({AdminId})
|
|
|
+ if(res.Ret===200&&res.Data){
|
|
|
+ res.Data.forEach(item=>{
|
|
|
+ ResearchGroupIds.push(item.research_group_id)
|
|
|
+ userForm.direct = changeResearchGroupIdsToDirect(ResearchGroupIds,'tag_id')
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+function roleChange(value){
|
|
|
+ if([2,6,18].includes(value)) return
|
|
|
+ formRef.value?.clearValidate(['city'])
|
|
|
+}
|
|
|
+function selectRegion(data){
|
|
|
+ userForm.province = data.province.value;
|
|
|
+ userForm.city = data.city.value =='市'?'':data.city.value;
|
|
|
}
|
|
|
-function roleChange(){}
|
|
|
-function selectRegion(){}
|
|
|
//表单校验
|
|
|
let formRef = ref(null)
|
|
|
const formRules = reactive({
|
|
@@ -99,7 +114,7 @@ const formRules = reactive({
|
|
|
if(value===''){
|
|
|
callback(new Error('请输入新密码'))
|
|
|
}
|
|
|
- if(!checkPassWord(value)){
|
|
|
+ if(!checkPassWord(value||'')){
|
|
|
callback(new Error('密码要求8位及以上,包含数字、大写字母、小写字母、特殊字符中的三个类型'))
|
|
|
}else{
|
|
|
callback()
|
|
@@ -109,9 +124,9 @@ const formRules = reactive({
|
|
|
mobile:[{ validator: (rule, value, callback) => {
|
|
|
if (value === ''&&!userForm.email) {
|
|
|
callback(new Error('手机号码和邮箱至少填一个'));
|
|
|
- }else if(value&&userForm.areacode==='86'&&!isMobileNo(value)) {
|
|
|
+ }else if(value&&userForm.areacode==='86'&&!isMobileNo(value||'')) {
|
|
|
callback(new Error('请输入正确的手机号格式'));
|
|
|
- } else if(userForm.areacode!=='86'&&isNaN(value.trim())){
|
|
|
+ } else if(userForm.areacode!=='86'&&isNaN(value?.trim())){
|
|
|
callback(new Error('请输入正确的手机号格式'));
|
|
|
}else {
|
|
|
callback();
|
|
@@ -150,8 +165,8 @@ async function handleSubmitForm(){
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- //通过
|
|
|
- emit("save",{
|
|
|
+ //通过校验
|
|
|
+ emit("submitForm",{
|
|
|
type:props.type,
|
|
|
userForm
|
|
|
})
|
|
@@ -183,48 +198,53 @@ function getResearchGroupByKeyword(GroupId,keyWord = "research_group_id"){
|
|
|
return answer.map((i) => i[keyWord]).reverse();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+function DiaOpened(){
|
|
|
+ nextTick(()=>{
|
|
|
+ //console.log("表单加载")
|
|
|
+ formShow.value = true
|
|
|
+ })
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<el-dialog
|
|
|
:model-value="props.isShow"
|
|
|
:close-on-click-modal="false"
|
|
|
+ :modal-append-to-body="false"
|
|
|
width="886px"
|
|
|
+ @opened="DiaOpened"
|
|
|
@close="emit('closeDia')"
|
|
|
center>
|
|
|
<template #header style="display:flex;align-items:center;">
|
|
|
<img :src="type==='add'?$icon.add:$icon.edit"
|
|
|
style="color:#fff;width:16px;height:16px;margin-right:5px;">
|
|
|
- <span style="font-size:16px;">{{props.type==='add'?'添加用户':'编辑用户'}}</span>
|
|
|
+ <span style="font-size:16px;">{{type==='add'?'添加用户':'编辑用户'}}</span>
|
|
|
</template>
|
|
|
- <div class="form-content">
|
|
|
- <el-form label-width="100px" class="user-form"
|
|
|
+ <div class="form-content" v-loading="!formShow">
|
|
|
+ <el-form label-width="100px" class="user-form" v-if="formShow"
|
|
|
:hide-required-asterisk="true"
|
|
|
ref="formRef"
|
|
|
:model="userForm"
|
|
|
:rules="formRules"
|
|
|
>
|
|
|
<el-form-item label="登录账号" prop="account">
|
|
|
- <el-input v-model="userForm.account" placeholder="建议使用邮箱前缀或者手机号码" clearable>
|
|
|
- </el-input>
|
|
|
+ <el-input v-model="userForm.account" placeholder="建议使用邮箱前缀或者手机号码" clearable />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="登录密码" prop="pwd" v-if="props.type==='add'">
|
|
|
- <el-input v-model.trim="userForm.pwd" placeholder="6-12位数字与字母的组合"
|
|
|
- :type="props.type==='add' ? 'text' : 'password' " clearable></el-input>
|
|
|
+ <el-form-item label="登录密码" prop="pwd" v-if="type==='add'">
|
|
|
+ <el-input v-model.trim="userForm.pwd" placeholder="6-12位数字与字母的组合" type="password" clearable />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="姓名" prop="name">
|
|
|
- <el-input v-model="userForm.name" placeholder="请输入用户名称" clearable>
|
|
|
- </el-input>
|
|
|
+ <el-input v-model="userForm.name" placeholder="请输入用户名称" clearable />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="手机号码" prop="mobile" class="mobile-input-item">
|
|
|
- <el-input v-model.trim="userForm.mobile" placeholder="请输入手机号码" clearable class="mobile-input">
|
|
|
- </el-input>
|
|
|
+ <el-input v-model.trim="userForm.mobile" placeholder="请输入手机号码" clearable class="mobile-input" />
|
|
|
<el-select v-model="userForm.areacode" class="mobile-select" placeholder="请选择">
|
|
|
<el-option v-for="item in areaCode" :key="item.Value"
|
|
|
:label="item.Name" :value="item.Value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="所属部门" prop="depart" v-if="props.type==='add'">
|
|
|
+ <el-form-item label="所属部门" prop="depart" v-if="type==='add'">
|
|
|
<el-cascader :options="departArr"
|
|
|
:props="{
|
|
|
value:'DepartmentId',
|
|
@@ -237,10 +257,10 @@ function getResearchGroupByKeyword(GroupId,keyWord = "research_group_id"){
|
|
|
</el-cascader>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="邮箱" prop="email">
|
|
|
- <el-input v-model="userForm.email" placeholder="请输入邮箱"></el-input>
|
|
|
+ <el-input v-model="userForm.email" placeholder="请输入邮箱" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="工号" prop="employeeNumber">
|
|
|
- <el-input :disabled="hasEmployeeNo" v-model="userForm.employeeNumber" placeholder="请输入工号"></el-input>
|
|
|
+ <el-input :disabled="hasEmployeeNo" v-model="userForm.employeeNumber" placeholder="请输入工号" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="分配角色" prop="role">
|
|
|
<el-select v-model="userForm.role" placeholder="分配角色" @change="roleChange">
|
|
@@ -261,8 +281,7 @@ function getResearchGroupByKeyword(GroupId,keyWord = "research_group_id"){
|
|
|
clearable></el-cascader>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="职务" prop="post">
|
|
|
- <el-input v-model="userForm.post" placeholder="请输入职务" clearable>
|
|
|
- </el-input>
|
|
|
+ <el-input v-model="userForm.post" placeholder="请输入职务" clearable />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="工作地点" prop="city"
|
|
|
:rules="[2,6,18].includes(userForm.role)?{ required: true, message: '工作地点不能为空', trigger: 'change' }:{}">
|
|
@@ -279,16 +298,20 @@ function getResearchGroupByKeyword(GroupId,keyWord = "research_group_id"){
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
- <div class="btn-content">
|
|
|
- <el-button type="primary" style="width:80px;margin-right:24px;" @click="handleSubmitForm">保存</el-button>
|
|
|
- <el-button style="width:80px;" @click="emit('closeDia')">取消</el-button>
|
|
|
- </div>
|
|
|
+ <template #footer>
|
|
|
+ <div class="btn-content">
|
|
|
+ <el-button type="primary" style="width:80px;margin-right:24px;" @click="handleSubmitForm">保存</el-button>
|
|
|
+ <el-button style="width:80px;" @click="emit('closeDia')">取消</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
</template>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
|
.el-dialog{
|
|
|
.form-content{
|
|
|
+ min-height: 200px;
|
|
|
.user-form{
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|