userHobit.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import {UserVO} from "@/api/system/user/types";
  2. import {getPersonalize, savePersonalize, getPersonalizeByCode} from "@/api/system/user/index";
  3. import { columnTypes } from "@/components/Table/types";
  4. export const userHobit = defineStore('userHobit', () => {
  5. const cloumnListMap = reactive<Map<string, string[]>>(new Map());
  6. const setAllTableCloumn = (data) => {
  7. Object.keys(data).forEach(key => {
  8. cloumnListMap.set(key, data[key] ? JSON.parse(data[key]) : [])
  9. });
  10. }
  11. const gethobit = async () => {
  12. // const res = await getPersonalize()
  13. // setAllTableCloumn(res.result)
  14. }
  15. const getCloumnByCode = (code: string) => {
  16. return cloumnListMap.get(code)
  17. }
  18. const saveCloumn = (code: string, cloumn: columnTypes[]) => {
  19. if (!code || !cloumn || cloumn.length === 0) return cloumn
  20. //只获取show为true的cloumn的prop
  21. let disabledMoveColumnList = cloumn.filter(item => item.show && item.disabledMove).map(item => item.prop)
  22. let columnList = cloumn.filter(item => item.show && !item.disabledMove).map(item => item.prop)
  23. cloumnListMap.set(code, disabledMoveColumnList.concat(columnList))
  24. let columnJson = JSON.stringify(columnList)
  25. savePersonalize({ code, columnJson })
  26. }
  27. const sortCloumn = async (code: string, preCloumn: columnTypes[]) => {
  28. let cloumn = preCloumn.filter(item => !item.disabledMove )
  29. let noSortColumn = preCloumn.filter(item => item.disabledMove && item.label != '操作')
  30. let operationCloumn = preCloumn.filter(item => item.disabledMove && item.label == '操作')
  31. if(!code) return noSortColumn.concat(cloumn).concat(operationCloumn)
  32. //根据cloumn中的prop 按照cloumnListMap
  33. const sortList = cloumnListMap.get(code)
  34. if (sortList) {
  35. // 排序函数
  36. cloumn.sort((a, b) => {
  37. const indexA = sortList.indexOf(a.prop);
  38. const indexB = sortList.indexOf(b.prop);
  39. // 如果 a 或 b 不在 baseOrder 数组中,默认排在后面
  40. if (indexA === -1) return 1;
  41. if (indexB === -1) return -1;
  42. // 按 baseOrder 数组的索引排序
  43. return indexA - indexB;
  44. });
  45. //将cloumn的show设置为true
  46. cloumn.forEach(item => {
  47. item.show = sortList.includes(item.prop) || item.label === '操作' || item.disabledMove
  48. })
  49. preCloumn = noSortColumn.concat(cloumn).concat(operationCloumn)
  50. } else {
  51. const response = await getPersonalizeByCode(code)
  52. const sortListRes = response.result
  53. //判断sortListRes是否是空对象
  54. if(Object.keys(sortListRes).length === 0) {
  55. return preCloumn = noSortColumn.concat(cloumn).concat(operationCloumn)
  56. }
  57. let sortList = sortListRes[code] ? JSON.parse(sortListRes[code]) : []
  58. cloumnListMap.set(code, sortList)
  59. if(sortList && sortList.length > 0) {
  60. // 排序函数
  61. cloumn.sort((a, b) => {
  62. const indexA = sortList.indexOf(a.prop);
  63. const indexB = sortList.indexOf(b.prop);
  64. // 如果 a 或 b 不在 baseOrder 数组中,默认排在后面
  65. if (indexA === -1) return 1;
  66. if (indexB === -1) return -1;
  67. // 按 baseOrder 数组的索引排序
  68. return indexA - indexB;
  69. });
  70. }
  71. preCloumn = noSortColumn.concat(cloumn).concat(operationCloumn)
  72. //将cloumn的show设置为true
  73. preCloumn.forEach(item => {
  74. item.show = sortList.includes(item.prop) || item.label === '操作' || item.disabledMove
  75. })
  76. }
  77. return preCloumn
  78. // return cloumn.concat(noSortColumn)
  79. }
  80. return {
  81. gethobit,
  82. cloumnListMap,
  83. setAllTableCloumn,
  84. getCloumnByCode,
  85. sortCloumn,
  86. saveCloumn
  87. // state,
  88. // setUser,
  89. // getUser
  90. };
  91. }, {
  92. persist: {
  93. key: 'userHobit',
  94. storage: sessionStorage,
  95. paths: ['cloumnListMap']
  96. } as any
  97. });
  98. export default userHobit;