表格数据多选回显
import { ref } from 'vue'
export const useTableEcho = (onlyValue: any) => {
const arr = ref<any>([])
const tableData = ref<any>([])
const tableRef = ref()
const allTableList = ref<any>([])
const change = (selection: any, row: any) => {
if (arr.value.some((item: any) => item === row[onlyValue])) {
arr.value.splice(
arr.value.findIndex((item: any) => item == row[onlyValue]),
1
)
} else {
arr.value.push(row[onlyValue])
}
arr.value = [...new Set(arr.value)]
}
const allChange = (selection: any) => {
if (selection.length > 0) {
arr.value = [...new Set([...arr.value, ...selection.map((item: any) => item[onlyValue])])]
} else {
tableData.value.filter((item: any) => {
if (arr.value.includes(item[onlyValue])) {
arr.value.splice(
arr.value.findIndex((domain: any) => domain == item[onlyValue]),
1
)
}
})
}
}
const toggleSelection = (rows?: any[]) => {
if (rows) {
rows.forEach((row) => {
tableRef.value!.toggleRowSelection(row, undefined, false)
})
} else {
tableRef.value!.clearSelection()
}
}
const addEchoData = (echoData: any, flag?: boolean) => {
if (echoData.value.length && flag) {
echoData.value.forEach((item: any) => {
arr.value.push(item[onlyValue])
})
}
}
const addAllData = () => {
nextTick(() => {
tableData.value.forEach((item: any) => {
if (!allTableList.value.some((domian: any) => domian[onlyValue] == item[onlyValue])) {
allTableList.value.push(item)
}
})
const newArr = tableData.value.filter((item: any) =>
arr.value.filter((item1: any) => tableData.value.some((item2: any) => item1 === item2[onlyValue])).includes(item[onlyValue])
)
toggleSelection(newArr)
})
}
const changeData = () => allTableList.value.filter((item: any) => arr.value.includes(item[onlyValue]))
return {
change,
allChange,
toggleSelection,
arr,
tableData,
tableRef,
addAllData,
addEchoData,
allTableList,
changeData,
}
}