33
33
<el-checkbox
34
34
:disabled =" props.manage"
35
35
v-model =" allChecked[TeamEnum.MANAGE]"
36
+ :indeterminate =" allIndeterminate[TeamEnum.MANAGE]"
36
37
label =" 管理"
37
- @change =" handleCheckAllChange($event, TeamEnum.MANAGE)"
38
38
/>
39
39
</template >
40
40
<template #default =" { row } " >
41
41
<el-checkbox
42
42
:disabled =" props.manage"
43
43
v-model =" row.operate[TeamEnum.MANAGE]"
44
- @change =" checkedOperateChange(TeamEnum.MANAGE, row)"
44
+ @change =" (e: boolean) => checkedOperateChange(TeamEnum.MANAGE, row, e )"
45
45
/>
46
46
</template >
47
47
</el-table-column >
50
50
<el-checkbox
51
51
:disabled =" props.manage"
52
52
v-model =" allChecked[TeamEnum.USE]"
53
+ :indeterminate =" allIndeterminate[TeamEnum.USE]"
53
54
label =" 查看"
54
- @change =" handleCheckAllChange($event, TeamEnum.USE)"
55
55
/>
56
56
</template >
57
57
<template #default =" { row } " >
58
58
<el-checkbox
59
59
:disabled =" props.manage"
60
60
v-model =" row.operate[TeamEnum.USE]"
61
- @change =" checkedOperateChange(TeamEnum.USE, row)"
61
+ @change =" (e: boolean) => checkedOperateChange(TeamEnum.USE, row, e )"
62
62
/>
63
63
</template >
64
64
</el-table-column >
@@ -85,58 +85,67 @@ const isApplication = computed(() => props.type === TeamEnum.APPLICATION)
85
85
86
86
const emit = defineEmits ([' update:data' ])
87
87
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
+ })
90
120
})
91
121
92
122
const filterText = ref (' ' )
93
123
94
124
const filterData = computed (() => props .data .filter ((v : any ) => v .name .includes (filterText .value )))
95
125
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 ])
139
140
})
140
141
})
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
+ }
141
150
</script >
142
151
<style lang="scss" scope></style >
0 commit comments