import { message } from "@/utils/message"; import { tableDataEdit } from "../../data"; import type { PaginationProps } from "@pureadmin/table"; import { cloneDeep, isAllEmpty } from "@pureadmin/utils"; import { type Ref, ref, reactive, watch, nextTick } from "vue"; export function useColumns(selectRef: Ref, formRef: Ref, tableRef: Ref) { const tableData = ref(tableDataEdit); const cloneTableData = cloneDeep(tableData.value); const selectValue = ref([1, 3, 4]); const searchForm = reactive({ sexValue: "", searchDate: "" }); const sexOptions = [ { value: 0, label: "男" }, { value: 1, label: "女" } ]; const columns: TableColumnList = [ { type: "selection", reserveSelection: true, align: "left" }, { label: "ID", prop: "id", width: 50 }, { label: "姓名", prop: "name" }, { label: "性别", prop: "sex" }, { label: "地址", prop: "address" }, { label: "日期", prop: "date", minWidth: 120 } ]; /** 分页配置 */ const pagination = reactive({ pageSize: 5, currentPage: 1, layout: "prev, pager, next", total: tableData.value.length, background: true, small: true }); const handleSelectionChange = val => { const arr = []; val.forEach(v => { arr.push({ label: v.name, id: v.id }); }); selectValue.value = arr; }; const onSearch = () => { tableData.value = cloneTableData; if (!isAllEmpty(searchForm.sexValue)) { let sex = sexOptions .map(sex => sex.value === Number(searchForm.sexValue) && sex.label) .filter(Boolean)[0]; tableData.value = tableData.value.filter(data => data.sex === sex); } if (!isAllEmpty(searchForm.searchDate)) { tableData.value = tableData.value.filter( data => data.date === searchForm.searchDate ); } pagination.total = tableData.value.length; }; const onReset = () => { formRef.value.resetFields(); onClear(); tableData.value = cloneTableData; pagination.total = tableData.value.length; }; const removeTag = ({ id }) => { const { toggleRowSelection } = tableRef.value.getTableRef(); toggleRowSelection(tableData.value.filter(v => v.id == id)?.[0], false); }; const onClear = () => { const { clearSelection } = tableRef.value.getTableRef(); clearSelection(); }; const onSure = () => { selectRef.value.blur(); message(`当前选中的数据为:${JSON.stringify(selectValue.value)}`, { type: "success" }); }; watch( selectValue, async () => { await nextTick(); const { toggleRowSelection } = tableRef.value.getTableRef(); selectValue.value.forEach(val => { tableData.value.forEach(row => { // 默认回显 row.id === val ? toggleRowSelection(row) : undefined; }); }); }, { immediate: true } ); return { searchForm, sexOptions, columns, pagination, selectValue, tableData, onSure, onClear, onReset, onSearch, removeTag, handleSelectionChange }; }