fix: 【团队成员】修复全选的问题 (#1558)

This commit is contained in:
wangdan-fit2cloud 2024-11-06 16:57:53 +08:00 committed by wangdan-fit2cloud
parent b2ac658c4f
commit f30d3d736b

View File

@ -33,15 +33,15 @@
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="allChecked[TeamEnum.MANAGE]" v-model="allChecked[TeamEnum.MANAGE]"
:indeterminate="allIndeterminate[TeamEnum.MANAGE]"
label="管理" label="管理"
@change="handleCheckAllChange($event, TeamEnum.MANAGE)"
/> />
</template> </template>
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="row.operate[TeamEnum.MANAGE]" v-model="row.operate[TeamEnum.MANAGE]"
@change="checkedOperateChange(TeamEnum.MANAGE, row)" @change="(e: boolean) => checkedOperateChange(TeamEnum.MANAGE, row, e)"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -50,15 +50,15 @@
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="allChecked[TeamEnum.USE]" v-model="allChecked[TeamEnum.USE]"
:indeterminate="allIndeterminate[TeamEnum.USE]"
label="查看" label="查看"
@change="handleCheckAllChange($event, TeamEnum.USE)"
/> />
</template> </template>
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox <el-checkbox
:disabled="props.manage" :disabled="props.manage"
v-model="row.operate[TeamEnum.USE]" v-model="row.operate[TeamEnum.USE]"
@change="checkedOperateChange(TeamEnum.USE, row)" @change="(e: boolean) => checkedOperateChange(TeamEnum.USE, row, e)"
/> />
</template> </template>
</el-table-column> </el-table-column>
@ -85,58 +85,67 @@ const isApplication = computed(() => props.type === TeamEnum.APPLICATION)
const emit = defineEmits(['update:data']) const emit = defineEmits(['update:data'])
const allChecked: any = ref({ const allChecked: any = ref({
[TeamEnum.MANAGE]: false, [TeamEnum.MANAGE]: computed({
[TeamEnum.USE]: false get: () => {
return filterData.value.some((item: any) => item.operate[TeamEnum.MANAGE])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
item.operate[TeamEnum.MANAGE] = true
})
} else {
filterData.value.map((item: any) => {
item.operate[TeamEnum.MANAGE] = false
})
}
}
}),
[TeamEnum.USE]: computed({
get: () => {
return filterData.value.some((item: any) => item.operate[TeamEnum.USE])
},
set: (val: boolean) => {
if (val) {
filterData.value.map((item: any) => {
item.operate[TeamEnum.USE] = true
})
} else {
filterData.value.map((item: any) => {
item.operate[TeamEnum.USE] = false
})
}
}
})
}) })
const filterText = ref('') const filterText = ref('')
const filterData = computed(() => props.data.filter((v: any) => v.name.includes(filterText.value))) const filterData = computed(() => props.data.filter((v: any) => v.name.includes(filterText.value)))
watch( const allIndeterminate: any = ref({
() => props.data, [TeamEnum.MANAGE]: computed(() => {
(val) => { const all_not_checked = filterData.value.every((item: any) => !item.operate[TeamEnum.MANAGE])
Object.keys(allChecked.value).map((item) => { if (all_not_checked) {
allChecked.value[item] = compare(item) return false
}) }
emit('update:data', val) return !filterData.value.every((item: any) => item.operate[TeamEnum.MANAGE])
}, }),
{ [TeamEnum.USE]: computed(() => {
deep: true const all_not_checked = filterData.value.every((item: any) => !item.operate[TeamEnum.USE])
} if (all_not_checked) {
) return false
}
function handleCheckAllChange(val: string | number | boolean, Name: string | number) { return !filterData.value.every((item: any) => item.operate[TeamEnum.USE])
if (val) {
props.data.map((item: any) => {
item.operate[Name] = true
})
} else {
props.data.map((item: any) => {
item.operate[Name] = false
})
}
}
function checkedOperateChange(Name: string | number, row: any) {
if (Name === TeamEnum.MANAGE && row.operate[TeamEnum.MANAGE]) {
props.data.map((item: any) => {
if (item.id === row.id) {
item.operate[TeamEnum.USE] = true
}
})
}
allChecked.value[Name] = compare(Name)
}
function compare(attrs: string | number) {
const filterData = props.data.filter((item: any) => item?.operate[attrs])
return props.data.length > 0 && filterData.length === props.data.length
}
onMounted(() => {
Object.keys(allChecked.value).map((item) => {
allChecked.value[item] = compare(item)
}) })
}) })
function checkedOperateChange(Name: string | number, row: any, e: boolean) {
props.data.map((item: any) => {
if (item.id === row.id) {
item.operate[Name] = e
}
})
}
</script> </script>
<style lang="scss" scope></style> <style lang="scss" scope></style>