pc_vue_admin/src/hook/useTableManagement.js

113 lines
2.8 KiB
JavaScript
Raw Normal View History

2024-07-27 05:33:36 +00:00
import { cloneDeep } from 'lodash-es'
import { hasPerm } from '@/utils/permission'
import { useRouter } from 'vue-router'
import useTabs from '@/utils/useTabs'
/**
* 列表页面表格信息 hook 封装数据操作
* @param apiModule 调用接口
* @param tableColumns 表格头部信息
* @returns {{searchFormRef: Ref<UnwrapRef<{}>>, toolConfig: {columnSetting: boolean, striped: boolean, refresh: boolean, height: boolean}, searchFormState: Ref<UnwrapRef<{}>>, tableRef: Ref<UnwrapRef<null>>, selectedRowKeys: Ref<UnwrapRef<*[]>>, columns: Ref<UnwrapRef<unknown>>, options: {rowSelection: {onChange: options.rowSelection.onChange}, alert: {show: boolean, clear: options.alert.clear}}, reset: reset, loadData: (function(*): *), deleteBatchRecords: deleteBatchRecords, deleteRecord: deleteRecord}}
*/
export function useTableManagement(apiModule = {}, tableColumns, hasPermData) {
const searchFormState = ref({})
const searchFormRef = ref({})
const tableRef = ref(null)
const selectedRowKeys = ref([])
const router = useRouter()
// 动态列配置
const columns = ref(tableColumns)
const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
// 根据权限添加操作列
if (hasPerm(hasPermData)) {
// 判断columns 是否有操作
const columnsFilter = columns.value.filter((item) => item.dataIndex === 'action')
if (columnsFilter.length === 0)
columns.value.push({
title: '操作',
dataIndex: 'action',
align: 'center',
width: 200,
fixed: 'right',
max_width: 100
})
}
// 加载数据
const loadData = (parameter) => {
const searchFormParam = cloneDeep(searchFormState.value)
return apiModule.page(Object.assign(parameter, searchFormParam)).then((data) => {
return data
})
}
// 重置
const reset = () => {
if (tableRef.value) {
tableRef.value.resetFields()
tableRef.value.refresh(true)
}
}
// 删除
const deleteRecord = (record) => {
let params = [{ id: record.id }]
apiModule.delete(params).then(() => {
if (tableRef.value) {
tableRef.value.refresh(true)
}
})
}
// 批量删除
const deleteBatchRecords = (params) => {
apiModule.delete(params).then(() => {
if (tableRef.value) {
tableRef.value.clearRefreshSelected()
}
})
}
// 选择配置
const options = {
alert: {
show: true,
clear: () => {
selectedRowKeys.value = []
}
},
rowSelection: {
onChange: (selectedRowKey, selectedRows) => {
selectedRowKeys.value = selectedRowKey
}
}
}
// 页面跳转
const navigateTo = (to, params) => {
router.push({
path: to,
query: params
})
}
// 返回Hook的值
return {
searchFormState,
searchFormRef,
tableRef,
selectedRowKeys,
columns,
loadData,
reset,
deleteRecord,
deleteBatchRecords,
options,
toolConfig,
navigateTo
}
}