81c5a74b创建于 2023年12月13日历史提交
import { reactive, toRefs } from 'vue';
import { ElMessage } from 'element-plus';
import { useI18n } from 'vue-i18n';
import { TableDataHooksOptions, RowInfo } from './types';
export const useTableDataHooks = (
  options: TableDataHooksOptions = {
    idKey: '',
    rowStatusKey: '',
    editingSuffix: '',
    editedSuffix: '',
    barStatus: {},
  },
  getRowInfo,
  getTableRowIndex,
  handleCellDataChange,
  getData,
) => {
  const { t } = useI18n();
  const state = reactive({
    globalEditing: false,
    editingElement: null,
    editingData: {
      row: {},
      column: {} as any,
    },
    page: {
      pageNum: 1,
      pageSize: 100,
      pageTotal: 0,
      winId: '',
    },
  });
  function generateRandomNumber() {
    return Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
  }
  const handleCopyLine = () => {
    const { data, idKey, rowStatusKey, selectionRows } = getRowInfo() as RowInfo;
    if (selectionRows.length) {
      selectionRows.forEach((item) => {
        const rowIndex = getTableRowIndex(data, item, idKey);
        data.splice(rowIndex + 1, 0, {
          ...item,
          [idKey]: Date.now() * 1000 + generateRandomNumber(),
          [rowStatusKey]: 'add',
        });
      });
      handleCellDataChange();
    } else {
      ElMessage.info(t('message.selectedData'));
    }
  };
  const handleFirstPage = () => {
    state.page.pageNum = 1;
    getData('DataTab');
  };
  const handlePreviousPage = () => {
    state.page.pageNum--;
    getData('DataTab');
  };
  const handleNextPage = () => {
    state.page.pageNum++;
    getData('DataTab');
  };
  const handleLastPage = () => {
    state.page.pageNum = state.page.pageTotal;
    getData('DataTab');
  };
  const handlePage = (pageNum) => {
    state.page.pageNum = Number(pageNum || 1);
    getData('DataTab');
  };
  const changePageSize = (pageSize) => {
    state.page.pageSize = pageSize;
    state.page.pageNum = 1;
    getData('DataTab');
  };
  return {
    ...toRefs(state),
    handleCopyLine,
    handlePreviousPage,
    handleNextPage,
    handleLastPage,
    handleFirstPage,
    handlePage,
    changePageSize,
  };
};