123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { reactive, ref, computed, /*getCurrentInstance,*/ unref, watch, nextTick, shallowRef } from 'vue'
- import { $log } from '@/utils'
- // import { ObjectOpts } from '@/components/FormConfig/formConfig.types.ts'
- import { LeTableColumnProps, LeTableProps, SearchParams } from '@/components/Table'
- type SearchData = { [prop: string]: any }
- export type UseTableConfig = {
- // 搜索表单数据
- searchData: SearchData
- // 更新searchParams参数数据
- updateParams: () => void
- // 请求表格数据方法
- queryList: () => void
- // 是否初始化请求
- fetchImmediate?: boolean
- }
- export const useTablePage = (tableProps: Partial<LeTableProps> = {}, config: Partial<UseTableConfig> = {}) => {
- const localConfig: UseTableConfig = Object.assign(
- {
- searchData: {},
- fetchImmediate: true,
- queryList: () => $log('请添加queryList', JSON.stringify(tableOpts.searchParams)),
- updateParams: () => {
- tableOpts.searchParams = {
- ...(tableOpts.searchParams as SearchParams),
- ...searchData.value,
- // ...todo 若有更多操作 searchData 进行请求,请覆盖updateParams 方法
- page: 1
- }
- }
- },
- config
- )
- const curSelectionRows = ref<any[]>([])
- const selectionChange = (rows: any[]) => {
- // console.error('rows...', rows)
- curSelectionRows.value = rows
- }
- const tableOpts = reactive<LeTableProps>({
- total: 0,
- list: [],
- columns: [],
- /*columnsConfig: {
- columns: [],
- defaultCheckedOptions: []
- }*/
- ...tableProps,
- searchParams: {
- page: 1,
- pageSize: 20,
- ...(tableProps.searchParams || {})
- },
- options: {
- loading: false,
- showOverflowTooltip: false,
- multipleSelect: true, // 是否支持列表项选中功能
- // 多选变更
- onSelectionChange: selectionChange,
- // stripe: true, // 是否为斑马纹 table
- // highlightCurrentRow: true, // 是否支持当前行高亮显示
- ...(tableProps.options || {})
- }
- })
- const searchData = ref<SearchData>({
- ...config.searchData
- })
- const checkedColumns = shallowRef(tableOpts.columns)
- const activeColumns = computed(() => {
- const _checkedColumns = unref(checkedColumns) as LeTableColumnProps[]
- if (!_checkedColumns.length) return tableOpts.columns
- return _checkedColumns
- .map(v => {
- const cur = tableOpts.columns.find(column => column.prop === v.prop)
- if (cur) {
- const fixedFlag = cur.fixed
- if (fixedFlag) {
- // eslint-disable-next-line
- // @ts-ignore
- v.fixed = fixedFlag
- }
- return cur
- }
- })
- .filter(Boolean)
- })
- /*const instance = getCurrentInstance()
- console.error(instance, 'instance.proxy')*/
- watch(
- () => searchData.value,
- () => {
- nextTick().then(localConfig.updateParams)
- },
- {
- immediate: localConfig.fetchImmediate
- }
- )
- // watch(() => tableOpts.searchParams.custName, (v, oldv) => {
- // watch(tableOpts.searchParams, (v, oldv) => {
- watch(
- () => tableOpts.searchParams,
- // (v, oldV) => {
- /*() => {
- nextTick(() => {
- localConfig.queryList?.()
- })
- },*/
- localConfig.queryList,
- {
- // immediate: localConfig.fetchImmediate
- }
- )
- return {
- tableOpts,
- checkedColumns,
- activeColumns,
- // 多选数据
- curSelectionRows,
- // 搜索表单数据
- searchData,
- // 刷新数据方法
- updateParams: localConfig.updateParams
- }
- }
|