Skip to content

Commit f30d3d7

Browse files
fix: 【团队成员】修复全选的问题 (#1558)
1 parent b2ac658 commit f30d3d7

File tree

1 file changed

+58
-49
lines changed

1 file changed

+58
-49
lines changed

ui/src/views/team/component/PermissionSetting.vue

Lines changed: 58 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@
3333
<el-checkbox
3434
:disabled="props.manage"
3535
v-model="allChecked[TeamEnum.MANAGE]"
36+
:indeterminate="allIndeterminate[TeamEnum.MANAGE]"
3637
label="管理"
37-
@change="handleCheckAllChange($event, TeamEnum.MANAGE)"
3838
/>
3939
</template>
4040
<template #default="{ row }">
4141
<el-checkbox
4242
:disabled="props.manage"
4343
v-model="row.operate[TeamEnum.MANAGE]"
44-
@change="checkedOperateChange(TeamEnum.MANAGE, row)"
44+
@change="(e: boolean) => checkedOperateChange(TeamEnum.MANAGE, row, e)"
4545
/>
4646
</template>
4747
</el-table-column>
@@ -50,15 +50,15 @@
5050
<el-checkbox
5151
:disabled="props.manage"
5252
v-model="allChecked[TeamEnum.USE]"
53+
:indeterminate="allIndeterminate[TeamEnum.USE]"
5354
label="查看"
54-
@change="handleCheckAllChange($event, TeamEnum.USE)"
5555
/>
5656
</template>
5757
<template #default="{ row }">
5858
<el-checkbox
5959
:disabled="props.manage"
6060
v-model="row.operate[TeamEnum.USE]"
61-
@change="checkedOperateChange(TeamEnum.USE, row)"
61+
@change="(e: boolean) => checkedOperateChange(TeamEnum.USE, row, e)"
6262
/>
6363
</template>
6464
</el-table-column>
@@ -85,58 +85,67 @@ const isApplication = computed(() => props.type === TeamEnum.APPLICATION)
8585
8686
const emit = defineEmits(['update:data'])
8787
const allChecked: any = ref({
88-
[TeamEnum.MANAGE]: false,
89-
[TeamEnum.USE]: false
88+
[TeamEnum.MANAGE]: computed({
89+
get: () => {
90+
return filterData.value.some((item: any) => item.operate[TeamEnum.MANAGE])
91+
},
92+
set: (val: boolean) => {
93+
if (val) {
94+
filterData.value.map((item: any) => {
95+
item.operate[TeamEnum.MANAGE] = true
96+
})
97+
} else {
98+
filterData.value.map((item: any) => {
99+
item.operate[TeamEnum.MANAGE] = false
100+
})
101+
}
102+
}
103+
}),
104+
[TeamEnum.USE]: computed({
105+
get: () => {
106+
return filterData.value.some((item: any) => item.operate[TeamEnum.USE])
107+
},
108+
set: (val: boolean) => {
109+
if (val) {
110+
filterData.value.map((item: any) => {
111+
item.operate[TeamEnum.USE] = true
112+
})
113+
} else {
114+
filterData.value.map((item: any) => {
115+
item.operate[TeamEnum.USE] = false
116+
})
117+
}
118+
}
119+
})
90120
})
91121
92122
const filterText = ref('')
93123
94124
const filterData = computed(() => props.data.filter((v: any) => v.name.includes(filterText.value)))
95125
96-
watch(
97-
() => props.data,
98-
(val) => {
99-
Object.keys(allChecked.value).map((item) => {
100-
allChecked.value[item] = compare(item)
101-
})
102-
emit('update:data', val)
103-
},
104-
{
105-
deep: true
106-
}
107-
)
108-
109-
function handleCheckAllChange(val: string | number | boolean, Name: string | number) {
110-
if (val) {
111-
props.data.map((item: any) => {
112-
item.operate[Name] = true
113-
})
114-
} else {
115-
props.data.map((item: any) => {
116-
item.operate[Name] = false
117-
})
118-
}
119-
}
120-
function checkedOperateChange(Name: string | number, row: any) {
121-
if (Name === TeamEnum.MANAGE && row.operate[TeamEnum.MANAGE]) {
122-
props.data.map((item: any) => {
123-
if (item.id === row.id) {
124-
item.operate[TeamEnum.USE] = true
125-
}
126-
})
127-
}
128-
allChecked.value[Name] = compare(Name)
129-
}
130-
131-
function compare(attrs: string | number) {
132-
const filterData = props.data.filter((item: any) => item?.operate[attrs])
133-
return props.data.length > 0 && filterData.length === props.data.length
134-
}
135-
136-
onMounted(() => {
137-
Object.keys(allChecked.value).map((item) => {
138-
allChecked.value[item] = compare(item)
126+
const allIndeterminate: any = ref({
127+
[TeamEnum.MANAGE]: computed(() => {
128+
const all_not_checked = filterData.value.every((item: any) => !item.operate[TeamEnum.MANAGE])
129+
if (all_not_checked) {
130+
return false
131+
}
132+
return !filterData.value.every((item: any) => item.operate[TeamEnum.MANAGE])
133+
}),
134+
[TeamEnum.USE]: computed(() => {
135+
const all_not_checked = filterData.value.every((item: any) => !item.operate[TeamEnum.USE])
136+
if (all_not_checked) {
137+
return false
138+
}
139+
return !filterData.value.every((item: any) => item.operate[TeamEnum.USE])
139140
})
140141
})
142+
143+
function checkedOperateChange(Name: string | number, row: any, e: boolean) {
144+
props.data.map((item: any) => {
145+
if (item.id === row.id) {
146+
item.operate[Name] = e
147+
}
148+
})
149+
}
141150
</script>
142151
<style lang="scss" scope></style>

0 commit comments

Comments
 (0)