【bug修改】添加用户报角色不能为空 组织机构不能为空

This commit is contained in:
fengachen
2021-10-15 14:49:34 +08:00
parent 2fdcba6b72
commit 3c33fa04d9
+162 -146
View File
@@ -1,13 +1,13 @@
<template>
<a-drawer
:title="title"
:maskClosable="true"
:width="drawerWidth"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
style="height: 100%;overflow: auto;padding-bottom: 53px;">
:title="title"
:maskClosable="true"
:width="drawerWidth"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
style="height: 100%;overflow: auto;padding-bottom: 53px;">
<template slot="title">
<div style="width: 100%;">
@@ -23,26 +23,32 @@
<a-form :form="form">
<a-form-item label="用户账号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入用户账号" @change="event => event.target.value = event.target.value.trim()" :maxLength="50" v-decorator.trim="[ 'username', validatorRules.username]"
:readOnly="!!model.id" :disabled="disableSubmit || disabledEdit" />
<a-input placeholder="请输入用户账号" @change="event => event.target.value = event.target.value.trim()"
:maxLength="50" v-decorator.trim="[ 'username', validatorRules.username]"
:readOnly="!!model.id" :disabled="disableSubmit || disabledEdit"/>
</a-form-item>
<template v-if="!model.id">
<a-form-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input-password type="password" placeholder="请输入登录密码" :maxLength="50" autocomplete='new-password'
@paste.native.capture.prevent="handleOperate"
@change="event => event.target.value = event.target.value.trim()" :disabled="disableSubmit" v-decorator="[ 'password',validatorRules.password]"/>
@paste.native.capture.prevent="handleOperate"
@change="event => event.target.value = event.target.value.trim()"
:disabled="disableSubmit" v-decorator="[ 'password',validatorRules.password]"/>
</a-form-item>
<a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input-password type="password" @blur="handleConfirmBlur" :maxLength="50" placeholder="请输入确认密码" :disabled="disableSubmit"
@paste.native.capture.prevent="handleOperate"
@change="event => event.target.value = event.target.value.trim()" v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/>
<a-input-password type="password" @blur="handleConfirmBlur" :maxLength="50" placeholder="请输入确认密码"
:disabled="disableSubmit"
@paste.native.capture.prevent="handleOperate"
@change="event => event.target.value = event.target.value.trim()"
v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/>
</a-form-item>
</template>
<a-form-item label="用户姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入用户姓名" :disabled="disableSubmit" @change="event => event.target.value = event.target.value.trim()" :maxLength="50" v-decorator.trim="[ 'realname', validatorRules.realname]"/>
<a-input placeholder="请输入用户姓名" :disabled="disableSubmit"
@change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator.trim="[ 'realname', validatorRules.realname]"/>
</a-form-item>
<!--<a-form-item label="工号" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
@@ -53,101 +59,105 @@
<!--<j-select-position placeholder="请选择职务" :multiple="false" v-decorator="['post', {}]"/>-->
<!--</a-form-item>-->
<!-- <a-form-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled">-->
<!-- <a-select-->
<!-- mode="multiple"-->
<!-- :disabled="departDisabled || disableSubmit"-->
<!-- style="width: 100%"-->
<!-- placeholder="请选择用户角色"-->
<!-- optionFilterProp="children"-->
<!-- v-model="selectedRole"-->
<!-- :getPopupContainer="(target) => target.parentNode">-->
<!-- <a-select-option v-for="(role,roleindex) in roleList" :key="roleindex.toString()" :value="role.id">-->
<!-- {{ role.roleName }}-->
<!-- </a-select-option>-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="角色分配" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!roleDisabled">-->
<!-- <a-select-->
<!-- mode="multiple"-->
<!-- :disabled="departDisabled || disableSubmit"-->
<!-- style="width: 100%"-->
<!-- placeholder="请选择用户角色"-->
<!-- optionFilterProp="children"-->
<!-- v-model="selectedRole"-->
<!-- :getPopupContainer="(target) => target.parentNode">-->
<!-- <a-select-option v-for="(role,roleindex) in roleList" :key="roleindex.toString()" :value="role.id">-->
<!-- {{ role.roleName }}-->
<!-- </a-select-option>-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- update--begin--autor:wangshuai-----date:20200108------for新增身份和负责部门------ -->
<!-- <a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <a-radio-group-->
<!-- v-model="identity"-->
<!-- @change="identityChange">-->
<!-- <a-radio value="1">普通用户</a-radio>-->
<!-- <a-radio value="2">上级</a-radio>-->
<!-- </a-radio-group>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="组织机构" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <a-select-->
<!-- mode="multiple"-->
<!-- style="width: 100%"-->
<!-- placeholder="请选择组织机构"-->
<!-- v-model="departIds"-->
<!-- optionFilterProp="children"-->
<!-- :getPopupContainer="(target) => target.parentNode"-->
<!-- :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"-->
<!-- :disabled="disableSubmit"-->
<!-- >-->
<!-- <a-select-option v-for="item in resultDepartOptions" :key="item.key" :value="item.key"-->
<!-- >{{ item.title }}-->
<!-- </a-select-option-->
<!-- >-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <a-radio-group-->
<!-- v-model="identity"-->
<!-- @change="identityChange">-->
<!-- <a-radio value="1">普通用户</a-radio>-->
<!-- <a-radio value="2">上级</a-radio>-->
<!-- </a-radio-group>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="组织机构" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <a-select-->
<!-- mode="multiple"-->
<!-- style="width: 100%"-->
<!-- placeholder="请选择组织机构"-->
<!-- v-model="departIds"-->
<!-- optionFilterProp="children"-->
<!-- :getPopupContainer="(target) => target.parentNode"-->
<!-- :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"-->
<!-- :disabled="disableSubmit"-->
<!-- >-->
<!-- <a-select-option v-for="item in resultDepartOptions" :key="item.key" :value="item.key"-->
<!-- >{{ item.title }}-->
<!-- </a-select-option-->
<!-- >-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol" v-has="'user:sex'">-->
<!-- <a-select v-decorator="[ 'sex', {}]" placeholder="请选择性别" :disabled="disableSubmit" :getPopupContainer="(target) => target.parentNode">-->
<!-- <a-select-option :value="1"></a-select-option>-->
<!-- <a-select-option :value="2"></a-select-option>-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol" v-has="'user:sex'">-->
<!-- <a-select v-decorator="[ 'sex', {}]" placeholder="请选择性别" :disabled="disableSubmit" :getPopupContainer="(target) => target.parentNode">-->
<!-- <a-select-option :value="1"></a-select-option>-->
<!-- <a-select-option :value="2"></a-select-option>-->
<!-- </a-select>-->
<!-- </a-form-item>-->
<a-form-item
label="角色类型"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-tree-select
multiple
show-search
tree-default-expand-all
tree-node-filter-prop="title"
style="width:100%"
:dropdownStyle="{ maxHeight: '200px', overflow: 'auto' }"
:treeData="treeRoleData"
v-decorator="[ 'selectedroles', validatorRules.selectedroles]"
placeholder="请选择角色类型"
>
</a-tree-select>
</a-form-item>
<a-form-item
label="角色类型"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-tree-select
multiple
show-search
tree-default-expand-all
tree-node-filter-prop="title"
style="width:100%"
:dropdownStyle="{ maxHeight: '200px', overflow: 'auto' }"
:treeData="treeRoleData"
v-decorator="[ 'selectedroles', validatorRules.selectedroles]"
placeholder="请选择角色类型"
>
</a-tree-select>
</a-form-item>
<a-form-item
label="组织机构"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-tree-select
:multiple="false"
show-search
tree-default-expand-all
tree-node-filter-prop="title"
style="width:100%"
:dropdownStyle="{ maxHeight: '200px',maxWidth:'100px','overflow-x':'hidden',' overflo-y': 'auto' }"
:treeData="treeDepartData"
v-decorator="[ 'selecteddeparts', validatorRules.selecteddeparts]"
placeholder="请选择组织机构">
</a-tree-select>
</a-form-item>
<a-form-item
label="组织机构"
:labelCol="labelCol"
:wrapperCol="wrapperCol">
<a-tree-select
:multiple="false"
show-search
tree-default-expand-all
tree-node-filter-prop="title"
style="width:100%"
:dropdownStyle="{ maxHeight: '200px',maxWidth:'100px','overflow-x':'hidden',' overflo-y': 'auto' }"
:treeData="treeDepartData"
v-decorator="[ 'selecteddeparts', validatorRules.selecteddeparts]"
placeholder="请选择组织机构">
</a-tree-select>
</a-form-item>
<a-form-item label="邮箱" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入邮箱" :disabled="disableSubmit" @change="event => event.target.value = event.target.value.trim()" v-decorator="[ 'email', validatorRules.email]" :maxLength="50"/>
<a-input placeholder="请输入邮箱" :disabled="disableSubmit"
@change="event => event.target.value = event.target.value.trim()"
v-decorator="[ 'email', validatorRules.email]" :maxLength="50"/>
</a-form-item>
<a-form-item label="邮箱密码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input-password placeholder="请输入邮箱密码" @change="event => event.target.value = event.target.value.trim()" v-decorator="[ 'emailPassword', validatorRules.emailPassword]" :maxLength="50"/>
<a-input-password placeholder="请输入邮箱密码" @change="event => event.target.value = event.target.value.trim()"
v-decorator="[ 'emailPassword', validatorRules.emailPassword]" :maxLength="50"/>
</a-form-item>
<a-form-item label="手机号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入手机号码" @change="event => event.target.value = event.target.value.trim()" :disabled="isDisabledAuth('user:form:phone') || disableSubmit"
<a-input placeholder="请输入手机号码" @change="event => event.target.value = event.target.value.trim()"
:disabled="isDisabledAuth('user:form:phone') || disableSubmit"
v-decorator="[ 'phone', validatorRules.phone]" :maxLength="11"/>
</a-form-item>
@@ -155,10 +165,10 @@
<!--<a-input placeholder="请输入座机" v-decorator="[ 'telephone', validatorRules.telephone]"/>-->
<!--</a-form-item>-->
<!-- <a-form-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <j-dict-select-tag v-decorator="['activitiSync', {}]" placeholder="请选择是否同步工作流引擎" :type="'radio'"-->
<!-- :triggerChange="true" dictCode="activiti_sync"/>-->
<!-- </a-form-item>-->
<!-- <a-form-item label="工作流引擎" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <j-dict-select-tag v-decorator="['activitiSync', {}]" placeholder="请选择是否同步工作流引擎" :type="'radio'"-->
<!-- :triggerChange="true" dictCode="activiti_sync"/>-->
<!-- </a-form-item>-->
</a-form>
</a-spin>
@@ -179,11 +189,11 @@ import moment from 'moment'
import Vue from 'vue'
import {ACCESS_TOKEN} from '@/store/mutation-types'
import {getAction} from '@/api/manage'
import {addUser, editUser, queryUserRole, queryall,queryallRoles, queryDepartTreeList} from '@/api/api'
import {addUser, editUser, queryUserRole, queryall, queryallRoles, queryDepartTreeList} from '@/api/api'
import {disabledAuthFilter} from '@/utils/authFilter'
import { passwordReg} from '@/utils/validate'
import {checkPhone,checkEmail,checkUserName} from '@/utils/validateOnly'
import { getRSAPublicKey } from '@/api/login.js'
import {passwordReg} from '@/utils/validate'
import {checkPhone, checkEmail, checkUserName} from '@/utils/validateOnly'
import {getRSAPublicKey} from '@/api/login.js'
import {encrypt} from '@/utils/util'
@@ -198,9 +208,9 @@ export default {
modaltoggleFlag: true,
confirmDirty: false,
// 组织机构 下拉数据
treeDepartData:[],
treeDepartData: [],
// 角色类型下拉数据
treeRoleData:[],
treeRoleData: [],
selectedDepartKeys: [], //保存用户选择部门id
checkedDepartKeys: [],
checkedDepartNames: [], // 保存部门的名称 =>title
@@ -217,7 +227,7 @@ export default {
}],
validateTrigger: 'blur'
},
emailPassword:{
emailPassword: {
rules: [{
required: true,
message: '请输入邮箱密码'
@@ -242,7 +252,7 @@ export default {
validateTrigger: 'blur'
},
realname: {rules: [{required: true, message: '请输入用户姓名'}], validateTrigger: 'blur'},
phone: {rules: [{required: true,validator: this.validatePhone}], validateTrigger: 'blur'},
phone: {rules: [{required: true, validator: this.validatePhone}], validateTrigger: 'blur'},
email: {
rules: [{
required: true,
@@ -250,8 +260,8 @@ export default {
},],
validateTrigger: 'blur'
},
selectedroles:{rules: [{required: true, message:'请选择角色类型'}], validateTrigger: ['change']},
selecteddeparts:{rules: [{required: true, message:'请选择组织机构'}], validateTrigger: ['change']}
selectedroles: {rules: [{required: true, message: '请选择角色类型'}], validateTrigger: ['change']},
selecteddeparts: {rules: [{required: true, message: '请选择组织机构'}], validateTrigger: ['change']}
// sex:{initialValue:((!this.model.sex)?"": (this.model.sex+""))}
},
departIdShow: false,
@@ -286,7 +296,7 @@ export default {
tenantList: [],
currentTenant: [],
// 公钥
rsaPublicKey:'',
rsaPublicKey: '',
disabledEdit: false, // 用户账号是否可编辑
}
},
@@ -372,7 +382,7 @@ export default {
// eslint-disable-next-line no-prototype-builtins
if (record.hasOwnProperty('id')) {
that.loadUserRoles(record.id).then(res => {
that.form.setFieldsValue({selectedroles:res})
that.form.setFieldsValue({selectedroles: res})
})
setTimeout(() => {
this.fileList = record.avatar
@@ -387,9 +397,9 @@ export default {
that.disabledEdit = false
}
// 组织机构修改成了单选,此处不需要了
if(record.departIds !== '' && record.id){
if (record.departIds !== '' && record.id) {
// 部门是数组的时候以逗号拼接
if(Object.prototype.toString.call(record.departIds) === '[object Array]') {
if (Object.prototype.toString.call(record.departIds) === '[object Array]') {
that.model.selecteddeparts = record.departIds.split(',')
} else {
that.model.selecteddeparts = record.departIds
@@ -397,7 +407,7 @@ export default {
}
that.$nextTick(() => {
that.form.setFieldsValue(pick(this.model, 'username', 'realname', 'email', 'phone', 'post','selecteddeparts','emailPassword'))
that.form.setFieldsValue(pick(this.model, 'username', 'realname', 'email', 'phone', 'post', 'selecteddeparts', 'emailPassword'))
})
//身份为上级显示负责部门,否则不显示
if (this.model.userIdentity == '2') {
@@ -420,13 +430,13 @@ export default {
//update-end-author:taoyan date:2020710 for:多租户配置
},
// 组织机构下拉数据
loadDepartTreeData(){
loadDepartTreeData() {
const that = this
queryDepartTreeList().then((res) => {
if(res.success){
if (res.success) {
that.treeDepartData = []
let treeList = res.result
for(let a=0;a<treeList.length;a++){
for (let a = 0; a < treeList.length; a++) {
let temp = treeList[a]
temp.isLeaf = temp.leaf
that.treeDepartData.push(temp)
@@ -438,10 +448,10 @@ export default {
loadRolesTreeData() {
const that = this
queryallRoles().then((res) => {
if(res.success){
if (res.success) {
that.treeRoleData = []
let treeList = res.result
for(let a=0;a<treeList.length;a++){
for (let a = 0; a < treeList.length; a++) {
let temp = treeList[a]
temp.isLeaf = temp.leaf
that.treeRoleData.push(temp)
@@ -507,7 +517,7 @@ export default {
},
moment,
handleSubmit() {
console.log('username',this.form.getFieldValue('username'))
console.log('username', this.form.getFieldValue('username'))
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
@@ -523,28 +533,34 @@ export default {
// 公钥参数
formData.rsaPublicKey = that.rsaPublicKey
// 新建 JSEncrypt 对象
formData.password =encrypt(that.rsaPublicKey,values.password)
formData.confirmpassword = formData.password
formData.phone = encrypt(that.rsaPublicKey,values.phone)
formData.email = encrypt(that.rsaPublicKey,values.email)
formData.password = encrypt(that.rsaPublicKey, values.password)
formData.confirmpassword = formData.password
formData.phone = encrypt(that.rsaPublicKey, values.phone)
formData.email = encrypt(that.rsaPublicKey, values.email)
// 加密邮箱密码
formData.emailPassword = encrypt(that.rsaPublicKey,values.emailPassword)
formData.emailPassword = encrypt(that.rsaPublicKey, values.emailPassword)
//update-begin-author:taoyan date:2020710 for:多租户配置
formData.relTenantIds = this.currentTenant.length > 0 ? this.currentTenant.join(',') : ''
//update-end-author:taoyan date:2020710 for:多租户配置
formData.selectedroles = values.selectedroles.length > 0 ? values.selectedroles.join(',') : ''
// 部门由多选改成单选 所以不需要单独处理了,但为了历史数据可以使用,对values.selecteddeparts类型进行判断,如果是数组则以逗号分隔转成字符串,若是字符串则直接显示
if(Object.prototype.toString.call(values.selecteddeparts) === '[object Array]') {
if (Object.prototype.toString.call(values.selecteddeparts) === '[object Array]') {
formData.selecteddeparts = values.selecteddeparts.length > 0 ? values.selecteddeparts.join(',') : ''
}
// formData.selecteddeparts = values.selecteddeparts.length > 0 ? values.selecteddeparts.join(',') : ''
// 不知道为啥 之前不要这两个字段 后面出bug了 说是这两个没传
formData.departIds = values.selecteddeparts
formData.roleIds = formData.selectedroles
//
formData.userIdentity = this.identity
//如果是上级择传入departIds,否则为空
if (this.identity === '2') {
formData.departIds = this.departIds.join(',')
} else {
formData.departIds = ''
}
// if (this.identity === '2') {
// formData.departIds = this.departIds.join(',')
// } else {
// formData.departIds = ''
// }
// that.addDepartsToUser(that,formData); // 调用根据当前用户添加部门信息的方法
let obj
if (!this.model.id) {
@@ -567,7 +583,7 @@ export default {
that.userDepartModel.departIdList = {userId: '', departIdList: []}
})
}else {
} else {
that.confirmLoading = false
}
})
@@ -600,29 +616,29 @@ export default {
}
},
validatePhone(rule, value, callback) {
checkPhone(value,this.userId).then(res => {
if(res.success){
checkPhone(value, this.userId).then(res => {
if (res.success) {
callback()
}else {
callback(res.code === 500 ? '手机号已存在': res)
} else {
callback(res.code === 500 ? '手机号已存在' : res)
}
})
},
validateEmail(rule, value, callback) {
checkEmail(value,this.userId).then(res => {
if(res.success){
checkEmail(value, this.userId).then(res => {
if (res.success) {
callback()
}else {
callback(res.code === 500 ? '邮箱已存在': res)
} else {
callback(res.code === 500 ? '邮箱已存在' : res)
}
})
},
validateUsername(rule, value, callback) {
checkUserName(value,this.userId).then(res => {
if(res.success){
checkUserName(value, this.userId).then(res => {
if (res.success) {
callback()
}else {
callback(res.code === 500 ? '用户账号已存在': res)
} else {
callback(res.code === 500 ? '用户账号已存在' : res)
}
})
},