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 >
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
8686const emit = defineEmits ([' update:data' ])
8787const 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
92122const filterText = ref (' ' )
93123
94124const 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