|
@@ -41,15 +41,19 @@
|
|
ref="UserTree"
|
|
ref="UserTree"
|
|
:data="userTree"
|
|
:data="userTree"
|
|
node-key="id"
|
|
node-key="id"
|
|
- :default-checked-keys="selectedUserIds"
|
|
|
|
:props="defaultProps"
|
|
:props="defaultProps"
|
|
@check-change="userChange"
|
|
@check-change="userChange"
|
|
>
|
|
>
|
|
- <span slot-scope="{ node, data }">
|
|
|
|
|
|
+ <span class="custom-tree-node" slot-scope="{ node, data }">
|
|
<el-checkbox v-if="data.isUser" v-model="node.checked">
|
|
<el-checkbox v-if="data.isUser" v-model="node.checked">
|
|
{{ node.label }}
|
|
{{ node.label }}
|
|
</el-checkbox>
|
|
</el-checkbox>
|
|
<span v-else>{{ node.label }}</span>
|
|
<span v-else>{{ node.label }}</span>
|
|
|
|
+ <el-checkbox
|
|
|
|
+ v-if="!data.isUser && canSelectAll && data.children.length"
|
|
|
|
+ v-model="data.selected"
|
|
|
|
+ @change="val => selectNodeAll(val, data)"
|
|
|
|
+ ></el-checkbox>
|
|
</span>
|
|
</span>
|
|
</el-tree>
|
|
</el-tree>
|
|
</div>
|
|
</div>
|
|
@@ -97,6 +101,10 @@ export default {
|
|
userLimitCount: {
|
|
userLimitCount: {
|
|
type: Number,
|
|
type: Number,
|
|
default: 5
|
|
default: 5
|
|
|
|
+ },
|
|
|
|
+ canSelectAll: {
|
|
|
|
+ type: Boolean,
|
|
|
|
+ default: false
|
|
}
|
|
}
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
@@ -130,6 +138,7 @@ export default {
|
|
id: item.id,
|
|
id: item.id,
|
|
label: item.name,
|
|
label: item.name,
|
|
isUser: false,
|
|
isUser: false,
|
|
|
|
+ selected: false,
|
|
children: []
|
|
children: []
|
|
};
|
|
};
|
|
|
|
|
|
@@ -143,12 +152,14 @@ export default {
|
|
label: user.realName,
|
|
label: user.realName,
|
|
name: user.realName,
|
|
name: user.realName,
|
|
orgName: item.name,
|
|
orgName: item.name,
|
|
|
|
+ selected: false,
|
|
isUser: true
|
|
isUser: true
|
|
};
|
|
};
|
|
if (!roleUserMap[user.roleId]) {
|
|
if (!roleUserMap[user.roleId]) {
|
|
roleUserMap[user.roleId] = {
|
|
roleUserMap[user.roleId] = {
|
|
id: user.roleId,
|
|
id: user.roleId,
|
|
label: user.roleName,
|
|
label: user.roleName,
|
|
|
|
+ selected: false,
|
|
children: []
|
|
children: []
|
|
};
|
|
};
|
|
}
|
|
}
|
|
@@ -225,6 +236,33 @@ export default {
|
|
open() {
|
|
open() {
|
|
this.modalIsShow = true;
|
|
this.modalIsShow = true;
|
|
},
|
|
},
|
|
|
|
+ selectNodeAll(checked, data) {
|
|
|
|
+ let userIds = [];
|
|
|
|
+ const getUserIds = list => {
|
|
|
|
+ list.forEach(item => {
|
|
|
|
+ item.selected = checked;
|
|
|
|
+ if (item.children && item.children.length) {
|
|
|
|
+ getUserIds(item.children);
|
|
|
|
+ } else {
|
|
|
|
+ if (item.isUser) userIds.push(item.id);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ };
|
|
|
|
+ getUserIds(data.children);
|
|
|
|
+
|
|
|
|
+ userIds.forEach(userId => {
|
|
|
|
+ const userPos = this.selectedUserIds.indexOf(userId);
|
|
|
|
+ const includeUser = userPos !== -1;
|
|
|
|
+ if (checked) {
|
|
|
|
+ if (!includeUser) this.selectedUserIds.push(userId);
|
|
|
|
+ } else {
|
|
|
|
+ if (includeUser) {
|
|
|
|
+ this.selectedUserIds.splice(userPos, 1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ this.$refs.UserTree.setCheckedKeys(this.selectedUserIds);
|
|
|
|
+ },
|
|
switchUserType(type) {
|
|
switchUserType(type) {
|
|
this.userType = type;
|
|
this.userType = type;
|
|
this.userTree = type === "org" ? this.orgUsers : this.roleUsers;
|
|
this.userTree = type === "org" ? this.orgUsers : this.roleUsers;
|