useTableHook.ts 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { computed, ref } from 'vue';
  2. import { SceneListInfo, SortSceneItemParam, SortSceneDataParam } from '@/types/business-scene/type';
  3. import { getSceneList, deleteSceneData, sortSceneData } from '@/api/sys-config/business-scene';
  4. export const useTableHook = () => {
  5. const tableData = ref<SceneListInfo[]>([]);
  6. const getTableData = async () => {
  7. tableData.value = await getSceneList();
  8. };
  9. const deleteTableData = async (id: number) => {
  10. await deleteSceneData(id);
  11. await getTableData();
  12. };
  13. const orderNums = computed(() => {
  14. const length = tableData.value.length;
  15. const firstOrderNum = length > 0 ? tableData.value[0].orderNum : null;
  16. const lastOrderNum = length > 0 ? tableData.value[length - 1].orderNum : null;
  17. return [firstOrderNum, lastOrderNum];
  18. });
  19. const getSwapParam = (id: number, sortType: 'increase' | 'decrease') => {
  20. const index = tableData.value.findIndex((item) => item.id === id);
  21. if (index === -1) return;
  22. let idAndOrderDTOList: SortSceneItemParam[] = [];
  23. const currentOrder = tableData.value[index].orderNum; //当前的顺序
  24. if (sortType === 'increase') {
  25. /**
  26. * @description prevId -- 上一个的ID prevOrder -- 上一个的oderNum
  27. */
  28. const prevData = tableData.value[index - 1];
  29. const prevId = prevData.id;
  30. const prevOrder = prevData.orderNum;
  31. idAndOrderDTOList = [
  32. { sceneId: prevId, orderNum: currentOrder },
  33. { sceneId: id, orderNum: prevOrder },
  34. ];
  35. } else {
  36. /**
  37. * @description nextId -- 下一个的ID nextOrder -- 下一个的oderNum
  38. */
  39. const nextData = tableData.value[index + 1];
  40. const nextId = nextData.id;
  41. const nextOrder = nextData.orderNum;
  42. idAndOrderDTOList = [
  43. { sceneId: nextId, orderNum: currentOrder },
  44. { sceneId: id, orderNum: nextOrder },
  45. ];
  46. }
  47. const sortSceneDataParam: SortSceneDataParam = {
  48. idAndOrderDTOList,
  49. };
  50. return sortSceneDataParam;
  51. };
  52. const sortTableData = async (id: number, sortType: 'increase' | 'decrease') => {
  53. const idAndOrderDTOList = getSwapParam(id, sortType);
  54. await sortSceneData(idAndOrderDTOList!);
  55. await getTableData();
  56. };
  57. return { orderNums, tableData, getTableData, deleteTableData, sortTableData };
  58. };