|
@@ -12,7 +12,6 @@
|
|
>
|
|
>
|
|
<el-row type="flex" :gutter="10">
|
|
<el-row type="flex" :gutter="10">
|
|
<el-col :span="12">
|
|
<el-col :span="12">
|
|
- <div class="user-part-title">组织架构</div>
|
|
|
|
<div class="user-search">
|
|
<div class="user-search">
|
|
<el-input
|
|
<el-input
|
|
v-model="filterLabel"
|
|
v-model="filterLabel"
|
|
@@ -23,6 +22,20 @@
|
|
@input="labelChange"
|
|
@input="labelChange"
|
|
></el-input>
|
|
></el-input>
|
|
</div>
|
|
</div>
|
|
|
|
+ <div class="user-types">
|
|
|
|
+ <div
|
|
|
|
+ :class="['user-type', { 'is-active': userType === 'org' }]"
|
|
|
|
+ @click="switchUserType('org')"
|
|
|
|
+ >
|
|
|
|
+ 组织架构
|
|
|
|
+ </div>
|
|
|
|
+ <div
|
|
|
|
+ :class="['user-type', { 'is-active': userType === 'role' }]"
|
|
|
|
+ @click="switchUserType('role')"
|
|
|
|
+ >
|
|
|
|
+ 角色
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<div class="user-tree">
|
|
<div class="user-tree">
|
|
<el-tree
|
|
<el-tree
|
|
ref="UserTree"
|
|
ref="UserTree"
|
|
@@ -46,8 +59,7 @@
|
|
<div class="user-list">
|
|
<div class="user-list">
|
|
<div v-for="user in selectedUsers" :key="user.id" class="user-item">
|
|
<div v-for="user in selectedUsers" :key="user.id" class="user-item">
|
|
<p class="user-cont">
|
|
<p class="user-cont">
|
|
- <span>{{ user.name }}</span
|
|
|
|
- ><span>{{ user.phoneNumber }}</span>
|
|
|
|
|
|
+ <span>{{ user.label }}</span>
|
|
</p>
|
|
</p>
|
|
<el-button
|
|
<el-button
|
|
class="user-delete"
|
|
class="user-delete"
|
|
@@ -91,7 +103,9 @@ export default {
|
|
return {
|
|
return {
|
|
modalIsShow: false,
|
|
modalIsShow: false,
|
|
filterLabel: "",
|
|
filterLabel: "",
|
|
|
|
+ userType: "org",
|
|
orgUsers: [],
|
|
orgUsers: [],
|
|
|
|
+ roleUsers: [],
|
|
userTree: [],
|
|
userTree: [],
|
|
userList: [],
|
|
userList: [],
|
|
selectedUsers: [],
|
|
selectedUsers: [],
|
|
@@ -99,7 +113,7 @@ export default {
|
|
selectValid: true,
|
|
selectValid: true,
|
|
defaultProps: {
|
|
defaultProps: {
|
|
children: "children",
|
|
children: "children",
|
|
- label: "name"
|
|
|
|
|
|
+ label: "label"
|
|
}
|
|
}
|
|
};
|
|
};
|
|
},
|
|
},
|
|
@@ -109,11 +123,12 @@ export default {
|
|
methods: {
|
|
methods: {
|
|
async getOrgUser() {
|
|
async getOrgUser() {
|
|
const data = await organizationList();
|
|
const data = await organizationList();
|
|
|
|
+ let roleUserMap = {};
|
|
const parseUser = list => {
|
|
const parseUser = list => {
|
|
return list.map(item => {
|
|
return list.map(item => {
|
|
let nitem = {
|
|
let nitem = {
|
|
id: item.id,
|
|
id: item.id,
|
|
- name: item.name,
|
|
|
|
|
|
+ label: item.name,
|
|
isUser: false,
|
|
isUser: false,
|
|
children: []
|
|
children: []
|
|
};
|
|
};
|
|
@@ -123,12 +138,24 @@ export default {
|
|
}
|
|
}
|
|
if (item["sysUserList"] && item["sysUserList"].length) {
|
|
if (item["sysUserList"] && item["sysUserList"].length) {
|
|
const users = item.sysUserList.map(user => {
|
|
const users = item.sysUserList.map(user => {
|
|
- return {
|
|
|
|
|
|
+ const nuser = {
|
|
id: user.id,
|
|
id: user.id,
|
|
|
|
+ label: user.realName,
|
|
name: user.realName,
|
|
name: user.realName,
|
|
orgName: item.name,
|
|
orgName: item.name,
|
|
isUser: true
|
|
isUser: true
|
|
};
|
|
};
|
|
|
|
+ if (!roleUserMap[user.roleId]) {
|
|
|
|
+ roleUserMap[user.roleId] = {
|
|
|
|
+ id: user.roleId,
|
|
|
|
+ label: user.roleName,
|
|
|
|
+ children: []
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+ let ruser = { ...nuser };
|
|
|
|
+ ruser.label = `${ruser.name}(${ruser.orgName})`;
|
|
|
|
+ roleUserMap[user.roleId].children.push(ruser);
|
|
|
|
+ return nuser;
|
|
});
|
|
});
|
|
nitem.children = [...nitem.children, ...users];
|
|
nitem.children = [...nitem.children, ...users];
|
|
}
|
|
}
|
|
@@ -136,6 +163,7 @@ export default {
|
|
});
|
|
});
|
|
};
|
|
};
|
|
this.orgUsers = parseUser(data);
|
|
this.orgUsers = parseUser(data);
|
|
|
|
+ this.roleUsers = Object.values(roleUserMap);
|
|
this.userTree = this.orgUsers;
|
|
this.userTree = this.orgUsers;
|
|
this.getUserList();
|
|
this.getUserList();
|
|
},
|
|
},
|
|
@@ -166,7 +194,7 @@ export default {
|
|
.filter(item => reg.test(item.name))
|
|
.filter(item => reg.test(item.name))
|
|
.map(item => {
|
|
.map(item => {
|
|
let nitme = { ...item };
|
|
let nitme = { ...item };
|
|
- nitme.name = `${nitme.name}(${nitme.orgName})`;
|
|
|
|
|
|
+ nitme.label = `${nitme.name}(${nitme.orgName})`;
|
|
return nitme;
|
|
return nitme;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
@@ -188,8 +216,47 @@ export default {
|
|
open() {
|
|
open() {
|
|
this.modalIsShow = true;
|
|
this.modalIsShow = true;
|
|
},
|
|
},
|
|
|
|
+ switchUserType(type) {
|
|
|
|
+ this.userType = type;
|
|
|
|
+ this.userTree = type === "org" ? this.orgUsers : this.roleUsers;
|
|
|
|
+ },
|
|
userChange() {
|
|
userChange() {
|
|
- this.selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
|
|
|
|
|
|
+ if (this.filterLabel) {
|
|
|
|
+ let prevSelectUserIds = this.selectedUsers.map(item => item.id);
|
|
|
|
+ const prevUserListSelectUserIds = this.userTree
|
|
|
|
+ .filter(user => prevSelectUserIds.includes(user.id))
|
|
|
|
+ .map(user => user.id);
|
|
|
|
+ const selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
|
|
|
|
+ const sIds = selectedUsers.map(user => user.id);
|
|
|
|
+ const prevDeletedUserIds = prevUserListSelectUserIds.filter(
|
|
|
|
+ uid => !sIds.includes(uid)
|
|
|
|
+ );
|
|
|
|
+ this.selectedUsers = this.selectedUsers.filter(
|
|
|
|
+ user => !prevDeletedUserIds.includes(user.id)
|
|
|
|
+ );
|
|
|
|
+ prevSelectUserIds = this.selectedUsers.map(item => item.id);
|
|
|
|
+
|
|
|
|
+ selectedUsers.forEach(user => {
|
|
|
|
+ if (prevSelectUserIds.includes(user.id)) return;
|
|
|
|
+ const nuser = {
|
|
|
|
+ id: user.id,
|
|
|
|
+ name: user.name,
|
|
|
|
+ label: `${user.name}(${user.orgName})`
|
|
|
|
+ };
|
|
|
|
+ this.selectedUsers.push(nuser);
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ const selectedUsers = this.$refs.UserTree.getCheckedNodes(true);
|
|
|
|
+ this.selectedUsers = selectedUsers.map(user => {
|
|
|
|
+ const nuser = {
|
|
|
|
+ id: user.id,
|
|
|
|
+ name: user.name,
|
|
|
|
+ label: `${user.name}(${user.orgName})`
|
|
|
|
+ };
|
|
|
|
+ return nuser;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ // console.log(this.selectedUsers);
|
|
this.selectedUserIds = this.selectedUsers.map(item => item.id);
|
|
this.selectedUserIds = this.selectedUsers.map(item => item.id);
|
|
this.checkValid();
|
|
this.checkValid();
|
|
},
|
|
},
|