@lx-frontend/wrap-element-ui 1.0.26 → 1.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +4 -54
  2. package/package.json +8 -38
  3. package/src/components/AddMembers/index.vue +149 -0
  4. package/src/components/AuditSteps/index.vue +140 -0
  5. package/src/components/DemoComponent/index.vue +21 -0
  6. package/src/components/EditableTable/README.md +147 -0
  7. package/{dist/vue2/types/components/EditableTable/bizHooks/index.d.ts → src/components/EditableTable/bizHooks/index.ts} +1 -1
  8. package/src/components/EditableTable/bizHooks/useCellHover.ts +72 -0
  9. package/src/components/EditableTable/bizHooks/useColumnHeaderOperation.ts +339 -0
  10. package/src/components/EditableTable/bizHooks/useDefaultOperation.ts +96 -0
  11. package/src/components/EditableTable/bizHooks/useDragSort.ts +291 -0
  12. package/src/components/EditableTable/bizHooks/usePagination.ts +31 -0
  13. package/src/components/EditableTable/bizHooks/useRowBgColor.ts +44 -0
  14. package/src/components/EditableTable/bizHooks/useViewSetting.ts +206 -0
  15. package/src/components/EditableTable/features/bizColorSelect.vue +63 -0
  16. package/src/components/EditableTable/features/bizEditCell.vue +44 -0
  17. package/src/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue +40 -0
  18. package/src/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue +56 -0
  19. package/src/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue +94 -0
  20. package/src/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue +26 -0
  21. package/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.ts +131 -0
  22. package/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue +115 -0
  23. package/src/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue +39 -0
  24. package/src/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue +50 -0
  25. package/src/components/EditableTable/features/bizTableHeaderPopover/index.vue +160 -0
  26. package/src/components/EditableTable/features/bizTableOperatePopover.vue +67 -0
  27. package/src/components/EditableTable/features/bizViewSettingDialog.vue +137 -0
  28. package/src/components/EditableTable/index.less +820 -0
  29. package/src/components/EditableTable/index.vue +682 -0
  30. package/src/components/EditableTable/pin-top.png +0 -0
  31. package/src/components/EditableTable/types/index.ts +212 -0
  32. package/src/components/Ellipsis/MultilineEllipsis.vue +141 -0
  33. package/src/components/Ellipsis/index.vue +119 -0
  34. package/src/components/LxTable/index.vue +296 -0
  35. package/src/components/PopoverForm/index.vue +66 -0
  36. package/src/components/SearchForm/index.vue +262 -0
  37. package/src/components/SearchForm/types/index.ts +81 -0
  38. package/src/components/SearchSelect/index.vue +153 -0
  39. package/src/components/helper.ts +37 -0
  40. package/src/components/index.ts +24 -0
  41. package/src/components/singleMessage/index.ts +44 -0
  42. package/dist/auto/index.mjs +0 -21
  43. package/dist/auto/types/index.d.ts +0 -9
  44. package/dist/vue2/index.css +0 -1
  45. package/dist/vue2/index.mjs +0 -3017
  46. package/dist/vue2/types/components/AddMembers/index.vue.d.ts +0 -31
  47. package/dist/vue2/types/components/AuditSteps/index.vue.d.ts +0 -46
  48. package/dist/vue2/types/components/DemoComponent/index.vue.d.ts +0 -2
  49. package/dist/vue2/types/components/EditableTable/bizHooks/useCellHover.d.ts +0 -11
  50. package/dist/vue2/types/components/EditableTable/bizHooks/useColumnHeaderOperation.d.ts +0 -34
  51. package/dist/vue2/types/components/EditableTable/bizHooks/useDefaultOperation.d.ts +0 -22
  52. package/dist/vue2/types/components/EditableTable/bizHooks/useDragSort.d.ts +0 -14
  53. package/dist/vue2/types/components/EditableTable/bizHooks/usePagination.d.ts +0 -12
  54. package/dist/vue2/types/components/EditableTable/bizHooks/useRowBgColor.d.ts +0 -15
  55. package/dist/vue2/types/components/EditableTable/bizHooks/useViewSetting.d.ts +0 -26
  56. package/dist/vue2/types/components/EditableTable/features/bizColorSelect.vue.d.ts +0 -25
  57. package/dist/vue2/types/components/EditableTable/features/bizEditCell.vue.d.ts +0 -21
  58. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue.d.ts +0 -21
  59. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue.d.ts +0 -21
  60. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue.d.ts +0 -21
  61. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue.d.ts +0 -21
  62. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.d.ts +0 -48
  63. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue.d.ts +0 -21
  64. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue.d.ts +0 -21
  65. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue.d.ts +0 -23
  66. package/dist/vue2/types/components/EditableTable/features/bizTableHeaderPopover/index.vue.d.ts +0 -311
  67. package/dist/vue2/types/components/EditableTable/features/bizTableOperatePopover.vue.d.ts +0 -32
  68. package/dist/vue2/types/components/EditableTable/features/bizViewSettingDialog.vue.d.ts +0 -30
  69. package/dist/vue2/types/components/EditableTable/index.vue.d.ts +0 -472
  70. package/dist/vue2/types/components/EditableTable/types/index.d.ts +0 -235
  71. package/dist/vue2/types/components/Ellipsis/MultilineEllipsis.vue.d.ts +0 -91
  72. package/dist/vue2/types/components/Ellipsis/index.vue.d.ts +0 -89
  73. package/dist/vue2/types/components/LxTable/index.vue.d.ts +0 -2
  74. package/dist/vue2/types/components/PopoverForm/index.vue.d.ts +0 -50
  75. package/dist/vue2/types/components/SearchForm/index.vue.d.ts +0 -116
  76. package/dist/vue2/types/components/SearchForm/types/index.d.ts +0 -65
  77. package/dist/vue2/types/components/SearchSelect/index.vue.d.ts +0 -53
  78. package/dist/vue2/types/components/helper.d.ts +0 -8
  79. package/dist/vue2/types/components/index.d.ts +0 -12
  80. package/dist/vue2/types/components/singleMessage/index.d.ts +0 -4
  81. package/dist/vue2/types/vue2/index.d.ts +0 -1363
  82. package/dist/vue3/index.css +0 -1
  83. package/dist/vue3/index.mjs +0 -2306
  84. package/dist/vue3/index.mjs.map +0 -1
  85. package/dist/vue3/types/components/EditableTable/features/bizColorSelect.vue.d.ts +0 -31
  86. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue.d.ts +0 -23
  87. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue.d.ts +0 -23
  88. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue.d.ts +0 -23
  89. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue.d.ts +0 -23
  90. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.d.ts +0 -48
  91. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue.d.ts +0 -23
  92. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue.d.ts +0 -23
  93. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue.d.ts +0 -25
  94. package/dist/vue3/types/components/EditableTable/features/bizTableHeaderPopover/index.vue.d.ts +0 -77
  95. package/dist/vue3/types/components/EditableTable/features/bizTableOperatePopover.vue.d.ts +0 -36
  96. package/dist/vue3/types/components/EditableTable/features/bizViewSettingDialog.vue.d.ts +0 -35
  97. package/dist/vue3/types/components/EditableTable/hooks/index.d.ts +0 -9
  98. package/dist/vue3/types/components/EditableTable/hooks/useCellHover.d.ts +0 -19
  99. package/dist/vue3/types/components/EditableTable/hooks/useColumnHeaderOperation.d.ts +0 -37
  100. package/dist/vue3/types/components/EditableTable/hooks/useDefaultOperation.d.ts +0 -22
  101. package/dist/vue3/types/components/EditableTable/hooks/useDragSort.d.ts +0 -15
  102. package/dist/vue3/types/components/EditableTable/hooks/usePagination.d.ts +0 -12
  103. package/dist/vue3/types/components/EditableTable/hooks/useRowBgColor.d.ts +0 -18
  104. package/dist/vue3/types/components/EditableTable/hooks/useRowEdit.d.ts +0 -14
  105. package/dist/vue3/types/components/EditableTable/hooks/useTableRender.d.ts +0 -41
  106. package/dist/vue3/types/components/EditableTable/hooks/useViewSetting.d.ts +0 -26
  107. package/dist/vue3/types/components/EditableTable/index.vue.d.ts +0 -4478
  108. package/dist/vue3/types/components/EditableTable/types.d.ts +0 -419
  109. package/dist/vue3/types/components/helper.d.ts +0 -8
  110. package/dist/vue3/types/index.d.ts +0 -7
  111. package/dist/vue3/types/stories/EditableTable.fake.d.ts +0 -33
  112. package/dist/vue3/types/stories/EditableTable.hook.d.ts +0 -12
  113. package/dist/vue3/types/stories/EditableTable.stories.d.ts +0 -18
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../../node_modules/.pnpm/element-plus@2.13.7_typescript@5.4.2_vue@3.5.33/node_modules/element-plus/dist/locale/zh-cn.mjs","../../packages/vue3/src/components/EditableTable/hooks/usePagination.ts","../../packages/vue3/src/components/EditableTable/hooks/useTableRender.ts","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObject.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_freeGlobal.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_root.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/now.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_trimmedEndIndex.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseTrim.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_Symbol.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_getRawTag.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_objectToString.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/_baseGetTag.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isObjectLike.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/isSymbol.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/toNumber.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/debounce.js","../../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash/throttle.js","../../packages/vue3/src/components/EditableTable/hooks/useDragSort.ts","../../packages/vue3/src/components/EditableTable/hooks/useRowBgColor.ts","../../packages/vue3/src/components/EditableTable/hooks/useCellHover.ts","../../packages/vue3/src/components/EditableTable/hooks/useDefaultOperation.ts","../../packages/vue3/src/components/EditableTable/hooks/useColumnHeaderOperation.ts","../../packages/vue3/src/components/EditableTable/hooks/useViewSetting.ts","../../packages/vue3/src/components/EditableTable/features/bizViewSettingDialog.vue","../../packages/vue3/src/components/EditableTable/features/bizColorSelect.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizCheckboxFilter.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizColorRadioFilter.vue","../../packages/vue3/src/components/helper.ts","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizDoubleDatePickerFilter.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizInputFilter.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.helper.ts","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizMonthDayPicker.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizSortFilter.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/BizRadioFilter.vue","../../packages/vue3/src/components/EditableTable/features/bizTableHeaderPopover/index.vue","../../packages/vue3/src/components/EditableTable/features/bizTableOperatePopover.vue","../../packages/vue3/src/components/EditableTable/index.vue","../../packages/vue3/src/index.ts"],"sourcesContent":["/*! Element Plus v2.13.7 */\n\n//#region ../../packages/locale/lang/zh-cn.ts\nvar zh_cn_default = {\n\tname: \"zh-cn\",\n\tel: {\n\t\tbreadcrumb: { label: \"面包屑\" },\n\t\tcolorpicker: {\n\t\t\tconfirm: \"确定\",\n\t\t\tclear: \"清空\",\n\t\t\tdefaultLabel: \"颜色选择器\",\n\t\t\tdescription: \"当前颜色 {color},按 Enter 键选择新颜色\",\n\t\t\talphaLabel: \"选择透明度的值\",\n\t\t\talphaDescription: \"透明度 {alpha}, 当前颜色 {color}\",\n\t\t\thueLabel: \"选择色相值\",\n\t\t\thueDescription: \"色相 {hue}, 当前颜色 {color}\",\n\t\t\tsvLabel: \"选择饱和度与明度的值\",\n\t\t\tsvDescription: \"饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}\",\n\t\t\tpredefineDescription: \"选择 {value} 作为颜色\"\n\t\t},\n\t\tdatepicker: {\n\t\t\tnow: \"此刻\",\n\t\t\ttoday: \"今天\",\n\t\t\tcancel: \"取消\",\n\t\t\tclear: \"清空\",\n\t\t\tconfirm: \"确定\",\n\t\t\tdateTablePrompt: \"使用方向键与 Enter 键可选择日期\",\n\t\t\tmonthTablePrompt: \"使用方向键与 Enter 键可选择月份\",\n\t\t\tyearTablePrompt: \"使用方向键与 Enter 键可选择年份\",\n\t\t\tselectedDate: \"已选日期\",\n\t\t\tselectDate: \"选择日期\",\n\t\t\tselectTime: \"选择时间\",\n\t\t\tstartDate: \"开始日期\",\n\t\t\tstartTime: \"开始时间\",\n\t\t\tendDate: \"结束日期\",\n\t\t\tendTime: \"结束时间\",\n\t\t\tprevYear: \"前一年\",\n\t\t\tnextYear: \"后一年\",\n\t\t\tprevMonth: \"上个月\",\n\t\t\tnextMonth: \"下个月\",\n\t\t\tyear: \"年\",\n\t\t\tmonth1: \"1 月\",\n\t\t\tmonth2: \"2 月\",\n\t\t\tmonth3: \"3 月\",\n\t\t\tmonth4: \"4 月\",\n\t\t\tmonth5: \"5 月\",\n\t\t\tmonth6: \"6 月\",\n\t\t\tmonth7: \"7 月\",\n\t\t\tmonth8: \"8 月\",\n\t\t\tmonth9: \"9 月\",\n\t\t\tmonth10: \"10 月\",\n\t\t\tmonth11: \"11 月\",\n\t\t\tmonth12: \"12 月\",\n\t\t\tweeks: {\n\t\t\t\tsun: \"日\",\n\t\t\t\tmon: \"一\",\n\t\t\t\ttue: \"二\",\n\t\t\t\twed: \"三\",\n\t\t\t\tthu: \"四\",\n\t\t\t\tfri: \"五\",\n\t\t\t\tsat: \"六\"\n\t\t\t},\n\t\t\tweeksFull: {\n\t\t\t\tsun: \"星期日\",\n\t\t\t\tmon: \"星期一\",\n\t\t\t\ttue: \"星期二\",\n\t\t\t\twed: \"星期三\",\n\t\t\t\tthu: \"星期四\",\n\t\t\t\tfri: \"星期五\",\n\t\t\t\tsat: \"星期六\"\n\t\t\t},\n\t\t\tmonths: {\n\t\t\t\tjan: \"一月\",\n\t\t\t\tfeb: \"二月\",\n\t\t\t\tmar: \"三月\",\n\t\t\t\tapr: \"四月\",\n\t\t\t\tmay: \"五月\",\n\t\t\t\tjun: \"六月\",\n\t\t\t\tjul: \"七月\",\n\t\t\t\taug: \"八月\",\n\t\t\t\tsep: \"九月\",\n\t\t\t\toct: \"十月\",\n\t\t\t\tnov: \"十一月\",\n\t\t\t\tdec: \"十二月\"\n\t\t\t}\n\t\t},\n\t\tinputNumber: {\n\t\t\tdecrease: \"减少数值\",\n\t\t\tincrease: \"增加数值\"\n\t\t},\n\t\tselect: {\n\t\t\tloading: \"加载中\",\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\tplaceholder: \"请选择\"\n\t\t},\n\t\tmention: { loading: \"加载中\" },\n\t\tdropdown: { toggleDropdown: \"切换下拉选项\" },\n\t\tcascader: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tloading: \"加载中\",\n\t\t\tplaceholder: \"请选择\",\n\t\t\tnoData: \"暂无数据\"\n\t\t},\n\t\tpagination: {\n\t\t\tgoto: \"前往\",\n\t\t\tpagesize: \"条/页\",\n\t\t\ttotal: \"共 {total} 条\",\n\t\t\tpageClassifier: \"页\",\n\t\t\tpage: \"页\",\n\t\t\tprev: \"上一页\",\n\t\t\tnext: \"下一页\",\n\t\t\tcurrentPage: \"第 {pager} 页\",\n\t\t\tprevPages: \"向前 {pager} 页\",\n\t\t\tnextPages: \"向后 {pager} 页\",\n\t\t\tdeprecationWarning: \"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档\"\n\t\t},\n\t\tdialog: { close: \"关闭此对话框\" },\n\t\tdrawer: { close: \"关闭此对话框\" },\n\t\tmessagebox: {\n\t\t\ttitle: \"提示\",\n\t\t\tconfirm: \"确定\",\n\t\t\tcancel: \"取消\",\n\t\t\terror: \"输入的数据不合法!\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\tupload: {\n\t\t\tdeleteTip: \"按 Delete 键可删除\",\n\t\t\tdelete: \"删除\",\n\t\t\tpreview: \"查看图片\",\n\t\t\tcontinue: \"继续上传\"\n\t\t},\n\t\tslider: {\n\t\t\tdefaultLabel: \"滑块介于 {min} 至 {max}\",\n\t\t\tdefaultRangeStartLabel: \"选择起始值\",\n\t\t\tdefaultRangeEndLabel: \"选择结束值\"\n\t\t},\n\t\ttable: {\n\t\t\temptyText: \"暂无数据\",\n\t\t\tconfirmFilter: \"筛选\",\n\t\t\tresetFilter: \"重置\",\n\t\t\tclearFilter: \"全部\",\n\t\t\tsumText: \"合计\",\n\t\t\tselectAllLabel: \"选择所有行\",\n\t\t\tselectRowLabel: \"选择当前行\",\n\t\t\texpandRowLabel: \"展开当前行\",\n\t\t\tcollapseRowLabel: \"收起当前行\",\n\t\t\tsortLabel: \"按 {column} 排序\",\n\t\t\tfilterLabel: \"按 {column} 过滤\"\n\t\t},\n\t\ttag: { close: \"关闭此标签\" },\n\t\ttour: {\n\t\t\tnext: \"下一步\",\n\t\t\tprevious: \"上一步\",\n\t\t\tfinish: \"结束导览\",\n\t\t\tclose: \"关闭此对话框\"\n\t\t},\n\t\ttree: { emptyText: \"暂无数据\" },\n\t\ttransfer: {\n\t\t\tnoMatch: \"无匹配数据\",\n\t\t\tnoData: \"无数据\",\n\t\t\ttitles: [\"列表 1\", \"列表 2\"],\n\t\t\tfilterPlaceholder: \"请输入搜索内容\",\n\t\t\tnoCheckedFormat: \"共 {total} 项\",\n\t\t\thasCheckedFormat: \"已选 {checked}/{total} 项\"\n\t\t},\n\t\timage: { error: \"加载失败\" },\n\t\tpageHeader: { title: \"返回\" },\n\t\tpopconfirm: {\n\t\t\tconfirmButtonText: \"确定\",\n\t\t\tcancelButtonText: \"取消\"\n\t\t},\n\t\tcarousel: {\n\t\t\tleftArrow: \"上一张幻灯片\",\n\t\t\trightArrow: \"下一张幻灯片\",\n\t\t\tindicator: \"幻灯片切换至索引 {index}\"\n\t\t}\n\t}\n};\n\n//#endregion\nexport { zh_cn_default as default };","import { ref, watch } from \"vue\";\nimport type { EditableTableProps, EditableTableEmits } from \"../types\";\n\n/**\n * 分页 Hook\n * 负责管理分页状态和事件处理\n */\nexport function usePagination(\n props: EditableTableProps,\n emit: EditableTableEmits\n) {\n const currentPage = ref(props.currentPage || 1);\n const pageSize = ref(props.pageSize || 10);\n\n // 监听外部传入的分页参数变化\n watch(\n () => props.currentPage,\n (val) => {\n if (val !== undefined) {\n currentPage.value = val;\n }\n }\n );\n\n watch(\n () => props.pageSize,\n (val) => {\n if (val !== undefined) {\n pageSize.value = val;\n }\n }\n );\n\n /**\n * 处理页码变化\n */\n const handlePageChange = (page: number) => {\n currentPage.value = page;\n emit(\"update:currentPage\", page);\n emit(\"page-change\", { page, size: pageSize.value });\n };\n\n /**\n * 处理每页条数变化\n */\n const handleSizeChange = (size: number) => {\n pageSize.value = size;\n emit(\"update:pageSize\", size);\n // 改变每页条数时,重置到第一页\n emit(\"page-change\", { page: 1, size });\n };\n\n return {\n currentPage,\n pageSize,\n handlePageChange,\n handleSizeChange,\n };\n}\n","import { computed, type Ref } from \"vue\";\nimport type { ColumnConfig, EditableTableProps } from \"../types\";\n\n/**\n * 表格渲染 Hook\n * 负责计算实际渲染的列配置\n */\nexport function useTableRender(\n props: EditableTableProps,\n visibleColumns: Ref<string[]>,\n leftFixedCount: Ref<number>\n) {\n /**\n * 计算实际渲染的列配置\n */\n const renderedColumns = computed(() => {\n return visibleColumns.value\n .map((prop) => props.columns.find((c) => c.prop === prop))\n .filter(Boolean)\n .map((column, index) => ({\n ...(column as ColumnConfig),\n // 设置固定列\n fixed: index < leftFixedCount.value ? \"left\" : column?.fixed,\n }));\n });\n\n /**\n * 判断列是否有自定义插槽\n */\n const hasSlot = (column: ColumnConfig) => !!column.slotName;\n\n /**\n * 判断列是否有编辑插槽\n */\n const hasEditSlot = (column: ColumnConfig) => !!column.editSlotName;\n\n /**\n * 判断列是否有 hover 插槽\n */\n const hasHoverSlot = (column: ColumnConfig) => !!column.hoverSlotName;\n\n /**\n * 格式化单元格值\n */\n const formatCellValue = (row: any, column: ColumnConfig, index: number) => {\n const value = row[column.prop];\n if (column.formatter) {\n return column.formatter(row, column, value, index);\n }\n return value;\n };\n\n return {\n renderedColumns,\n hasSlot,\n hasEditSlot,\n hasHoverSlot,\n formatCellValue,\n };\n}\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var debounce = require('./debounce'),\n isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\nmodule.exports = throttle;\n","import { onBeforeUnmount, onMounted, ref, type Ref } from \"vue\";\nimport type { IColumnConfig, IDraggingData, IEmits, IProps } from \"../types\";\nimport throttle from \"lodash/throttle\";\n\ninterface IUseDragSortParams {\n props: IProps;\n emit: IEmits;\n viewSettingDragSortOptions: Ref<IColumnConfig[]>;\n beforeDragStart: () => boolean;\n currScope: Ref<any>;\n currentPage: Ref<number>;\n pageSize: Ref<number>;\n tableDomRef: Ref<any>;\n}\nexport function useDragSort({\n props,\n emit,\n viewSettingDragSortOptions,\n currentPage,\n pageSize,\n beforeDragStart,\n currScope,\n tableDomRef,\n}: IUseDragSortParams) {\n const draggingData = ref<IDraggingData>({}); // 拖拽相关数据\n const isMouseDown = ref(false);\n const dragType = ref<\"row\" | \"view-setting\">(\"row\");\n // 如果页面存在多个table实例,如果没有这个值来区分正在操作哪个表格,拖拽功能会有异常\n const isOperating = ref(false);\n\n onMounted(() => {\n tableDomRef.value.$el.addEventListener(\"mousedown\", () => {\n isOperating.value = true;\n });\n document.addEventListener(\"mousedown\", handleDocumentMouseDown);\n document.addEventListener(\"mousemove\", handleDocumentMouseMove);\n document.addEventListener(\"mouseup\", handleDocumentMouseUp);\n });\n\n onBeforeUnmount(() => {\n tableDomRef.value.$el.removeEventListener(\n \"mousedown\",\n () => (isOperating.value = true)\n );\n document.removeEventListener(\"mousedown\", handleDocumentMouseDown);\n document.removeEventListener(\"mousemove\", handleDocumentMouseMove);\n document.removeEventListener(\"mouseup\", handleDocumentMouseUp);\n });\n\n const handleDocumentMouseDown = (e: MouseEvent) => {\n isMouseDown.value = true;\n const target = e.target as HTMLElement;\n\n if (typeof target.dataset?.index === \"undefined\") return;\n\n if ([...target.classList].includes(\"row-drag-target\")) {\n dragType.value = \"row\";\n if (!isOperating.value) return;\n // 处理列表行拖拽\n handleDragMouseDown(e, +target.dataset.index);\n }\n\n if (\n [...target.classList].includes(\"editable-table-view-setting-drag-target\")\n ) {\n dragType.value = \"view-setting\";\n // 处理显示设置拖拽\n handleViewSettingDragMouseDown(e, +target.dataset.index);\n }\n };\n\n const handleDocumentMouseMove = (e: MouseEvent) => {\n if (\n !isMouseDown.value ||\n typeof draggingData.value.draggingIndex === \"undefined\"\n ) {\n return;\n }\n\n throttledMoveHandler(e);\n };\n\n const handleDocumentMouseUp = (e: MouseEvent) => {\n isOperating.value = false;\n isMouseDown.value = false;\n if (typeof draggingData.value.draggingIndex === \"undefined\") {\n return;\n }\n if (dragType.value === \"row\") {\n handleDragDrop(e, currScope.value);\n }\n\n if (dragType.value === \"view-setting\") {\n handleViewSettingDragDrop();\n }\n };\n\n const handleDragMouseDown = (event: MouseEvent, draggingIndex: number) => {\n if (!beforeDragStart()) return;\n const rows = [\n ...document.getElementsByClassName(`custom-row-classname`),\n ] as HTMLElement[];\n const rowDoms: Record<number, HTMLElement[]> = [];\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const clsIndex =\n (\n [...row.classList].find((cls) =>\n cls.startsWith(`custom-row-classname-`)\n ) ?? \"\"\n )\n .split(\"-\")\n .pop() ?? \"NaN\";\n if (typeof +clsIndex === \"number\") {\n rowDoms[+clsIndex] = rowDoms[+clsIndex] || [];\n rowDoms[+clsIndex].push(row);\n }\n }\n\n draggingData.value.isDragging = true;\n draggingData.value.rowDoms = rowDoms;\n draggingData.value.draggingIndex = +draggingIndex;\n draggingData.value.rowsRange = [];\n\n draggingData.value.startPosition = {\n x: event.clientX,\n y: event.clientY,\n };\n\n // 列表过大时拖拽有性能问题,所以拖拽范围限制在拖拽元素的上下15个元素内\n const dragSemiRange = props.dragSemiRange ?? 15;\n for (const i of Object.keys(rowDoms).map(Number)) {\n if (\n i < draggingIndex - dragSemiRange ||\n i > draggingIndex + dragSemiRange\n ) {\n draggingData.value.rowsRange[i] = undefined;\n continue;\n }\n const rowdom = rowDoms[i];\n // 在Chrom中,relative加z-index可以让拖拽更流畅,然而在Safari中无效\n // 如果在Safari中relative有效,其实蒙层都没有必要了\n rowdom.forEach((el) => el.style.setProperty(\"position\", \"relative\"));\n\n if (i !== draggingData.value.draggingIndex) {\n rowdom.forEach((el) =>\n el.style.setProperty(\"transition\", \"transform 0.25s ease\")\n );\n } else {\n rowdom.forEach((el) => el.style.setProperty(\"z-index\", \"100\"));\n // 当有固定列时,一行的内容并不是一个tr,而是两个或多个tr的叠加显示,其中有的列内容被隐藏\n // 所以拖拽时,需要同时拖拽所有的tr,并显示所有内容,否则拖拽效果会显示异常\n const tds = rowdom\n .map((dom) => dom.querySelectorAll(\"td\"))\n .reduce((pre, curr) => [...pre, ...curr], [] as HTMLElement[])\n .filter((td) => td.classList.contains(\"is-hidden\"));\n draggingData.value.hiddenTds = tds;\n tds.forEach((td) => td.classList.remove(\"is-hidden\"));\n\n // 生成一个蒙层,防止拖动时文字被选中\n const fullScreenDiv = document.createElement(\"div\");\n fullScreenDiv.style.position = \"fixed\";\n fullScreenDiv.style.top = \"0\";\n fullScreenDiv.style.left = \"0\";\n fullScreenDiv.style.right = \"0\";\n fullScreenDiv.style.bottom = \"0\";\n fullScreenDiv.style.zIndex = \"999\";\n fullScreenDiv.style.cursor = \"grabbing\";\n document.body.appendChild(fullScreenDiv);\n draggingData.value.fullScreenDiv = fullScreenDiv;\n }\n // 计算每一行的高度范围\n const rect = rowdom[0].getBoundingClientRect();\n draggingData.value.rowsRange = draggingData.value.rowsRange || [];\n draggingData.value.rowsRange[i] = [rect.top, rect.bottom];\n }\n };\n\n const calcPositionRowShouldBePlace = (\n rowsRange: [number, number][],\n draggingClientY: number\n ) => {\n if (\n !draggingData.value.rowsRange ||\n typeof draggingData.value.draggingIndex === \"undefined\" ||\n typeof props.dragSemiRange === \"undefined\"\n )\n return;\n const rangeLeft =\n draggingData.value.draggingIndex - props.dragSemiRange <= 0\n ? 0\n : draggingData.value.draggingIndex - props.dragSemiRange;\n const rangeRight =\n draggingData.value.draggingIndex + props.dragSemiRange >=\n draggingData.value.rowsRange.length\n ? draggingData.value.rowsRange.length - 1\n : draggingData.value.draggingIndex + props.dragSemiRange;\n if (!rowsRange) return -1;\n if (draggingClientY <= rowsRange[rangeLeft][0]) return rangeLeft;\n if (draggingClientY >= rowsRange[rangeRight][1]) return rangeRight;\n for (let i = rangeLeft; i <= rangeRight; i++) {\n const [top, bottom] = rowsRange[i];\n if (draggingClientY > top && draggingClientY < bottom) {\n return i;\n }\n }\n return -1;\n };\n\n const clearMovingData = () => {\n const rowdoms = draggingData.value.rowDoms || [];\n const draggingIndex = draggingData.value.draggingIndex ?? -1;\n const dragSemiRange = props.dragSemiRange ?? 15;\n for (const i of Object.keys(rowdoms).map(Number)) {\n if (\n i < draggingIndex - dragSemiRange ||\n i > draggingIndex + dragSemiRange\n )\n continue;\n const doms = rowdoms[i];\n doms.forEach((el) => {\n el.style.removeProperty(\"position\");\n el.style.removeProperty(\"transition\");\n el.style.removeProperty(\"transform\");\n el.style.removeProperty(\"z-index\");\n });\n }\n draggingData.value.fullScreenDiv?.parentNode?.removeChild(\n draggingData.value.fullScreenDiv\n );\n draggingData.value.hiddenTds?.forEach((el) =>\n el.classList.add(\"is-hidden\")\n );\n draggingData.value = {};\n currScope.value = null;\n };\n\n const handleDragDrop = (event: MouseEvent, scope: any) => {\n if (!scope) return;\n const { draggingIndex = 0, dropIndex = draggingIndex } = draggingData.value;\n\n // 在更新数据之前先清理 DOM 状态\n const rowdoms = draggingData.value.rowDoms || [];\n const dragIndex = draggingData.value.draggingIndex ?? -1;\n const dragSemiRange = props.dragSemiRange ?? 15;\n for (const i of Object.keys(rowdoms).map(Number)) {\n if (i < dragIndex - dragSemiRange || i > dragIndex + dragSemiRange)\n continue;\n const doms = rowdoms[i];\n doms.forEach((el) => {\n el.style.removeProperty(\"position\");\n el.style.removeProperty(\"transition\");\n el.style.removeProperty(\"transform\");\n el.style.removeProperty(\"z-index\");\n });\n }\n\n // 移除蒙层\n if (draggingData.value.fullScreenDiv?.parentNode) {\n draggingData.value.fullScreenDiv.parentNode.removeChild(\n draggingData.value.fullScreenDiv\n );\n }\n\n // 恢复隐藏的单元格\n draggingData.value.hiddenTds?.forEach((el) =>\n el.classList.add(\"is-hidden\")\n );\n\n // 清空拖拽数据\n const savedDraggingData = { ...draggingData.value };\n draggingData.value = {};\n currScope.value = null;\n\n // 更新数据 - Element Plus 使用 Ref,需要访问 .value\n const dataList = scope.store?.states?.data?.value || scope.store?.states?.data || [];\n\n if (!Array.isArray(dataList) || dataList.length === 0) {\n console.warn('无法获取表格数据');\n return;\n }\n\n const movedRow = dataList[draggingIndex];\n\n if (!movedRow) {\n console.warn('无法找到拖拽的行数据');\n return;\n }\n\n const newList = [\n ...dataList.slice(0, +draggingIndex),\n ...dataList.slice(draggingIndex + 1),\n ];\n newList.splice(dropIndex, 0, movedRow);\n\n // Element Plus 使用 Ref,需要更新 .value\n if (scope.store?.states?.data?.value !== undefined) {\n scope.store.states.data.value = newList;\n } else {\n scope.store.states.data = newList;\n }\n\n emit(\"row-drag-drop\", {\n row: movedRow,\n fromIndex: draggingIndex,\n toIndex: dropIndex,\n page: currentPage.value,\n size: pageSize.value,\n });\n };\n\n const handleViewSettingDragMouseDown = (event: MouseEvent, index: number) => {\n const rowDoms = [\n ...document.getElementsByClassName(\n \"editable-table-view-setting-draggable-item\"\n ),\n ].reduce((pre, item, index) => ({ ...pre, [index]: [item] }), {});\n draggingData.value.isDragging = true;\n draggingData.value.rowDoms = rowDoms;\n draggingData.value.draggingIndex = +index;\n draggingData.value.startPosition = {\n x: event.clientX,\n y: event.clientY,\n };\n\n for (const i of Object.keys(rowDoms).map(Number)) {\n const rowdoms = rowDoms[i];\n rowdoms.forEach((el) => {\n el.style.setProperty(\"position\", \"relative\");\n });\n\n if (i !== draggingData.value.draggingIndex) {\n rowdoms.forEach((el) =>\n el.style.setProperty(\"transition\", \"transform 0.25s ease\")\n );\n }\n const rect = rowdoms[0].getBoundingClientRect();\n draggingData.value.rowsRange = draggingData.value.rowsRange || [];\n draggingData.value.rowsRange.push([rect.top, rect.bottom]);\n }\n };\n\n const handleMove = (event: MouseEvent) => {\n if (!draggingData.value.isDragging) return;\n const { y = 0 } = draggingData.value.startPosition || {};\n const { draggingIndex = -1, rowDoms = {} } = draggingData.value;\n const draggingRow = rowDoms?.[draggingIndex ?? 0];\n for (let i = 0; i < draggingRow.length; i++) {\n const dom = draggingRow[i];\n dom?.style.setProperty(\"transform\", `translateY(${event.clientY - y}px)`);\n }\n\n // 判断应该落在第几行\n const idx = calcPositionRowShouldBePlace(\n draggingData.value.rowsRange as [number, number][],\n event.clientY\n );\n if (typeof idx !== \"number\") return;\n const [top, bottom] = draggingData.value.rowsRange![draggingIndex] as [\n number,\n number\n ];\n draggingData.value.dropIndex = idx;\n const rowHeight = bottom - top;\n const dragSemiRange = props.dragSemiRange ?? 15;\n for (const i of Object.keys(rowDoms).map(Number)) {\n if (\n i < draggingIndex - dragSemiRange ||\n i > draggingIndex + dragSemiRange ||\n draggingIndex === i\n )\n continue;\n const doms = rowDoms[i];\n if (idx < draggingIndex) {\n if (i >= idx && i < draggingIndex) {\n doms.forEach((el) =>\n el.style.setProperty(\"transform\", `translateY(${rowHeight}px)`)\n );\n } else {\n doms.forEach((el) => el.style.removeProperty(\"transform\"));\n }\n } else if (idx > draggingIndex) {\n if (i <= idx && i > draggingIndex) {\n doms.forEach((el) =>\n el.style.setProperty(\"transform\", `translateY(${-rowHeight}px)`)\n );\n } else {\n doms.forEach((el) => el.style.removeProperty(\"transform\"));\n }\n } else {\n doms.forEach((el) => el.style.removeProperty(\"transform\"));\n }\n }\n };\n\n const handleViewSettingDragDrop = () => {\n const { draggingIndex = 0, dropIndex = draggingIndex } = draggingData.value;\n const movedRow = viewSettingDragSortOptions.value[draggingIndex];\n const newList = [\n ...viewSettingDragSortOptions.value.slice(0, draggingIndex),\n ...viewSettingDragSortOptions.value.slice(draggingIndex + 1),\n ];\n newList.splice(dropIndex, 0, movedRow);\n viewSettingDragSortOptions.value = newList;\n // 清理工作\n clearMovingData();\n };\n\n const throttledMoveHandler = throttle(handleMove, 10);\n}\n","import type { IColorList, IEmits } from \"../types\";\n\ninterface IUseRowBgColorParams {\n colorList: IColorList;\n emit: IEmits;\n}\n\nexport function useRowBgColor({ colorList, emit }: IUseRowBgColorParams) {\n const isDefaultColor = (id: number) => {\n if (!id) {\n // 没有颜色id,则认为是默认色\n return true;\n }\n return colorList.find((c) => +c.id === +id)?.default;\n };\n\n const getColorById = (id: number, type: \"bg\" | \"sample\" = \"bg\") => {\n return colorList.find((c) => +c.id === +id)?.[`${type}Color`] || \"\";\n };\n\n const setRowStyle = (scope: { row: any; rowIndex: number }) => {\n const row = scope.row;\n return {\n backgroundColor:\n row.__static_bg_color__ ??\n (row.colorId ? getColorById(row.colorId) : \"\"),\n };\n };\n\n const handleColorChange = async (colorId: number, scope: any) => {\n const { row, $index: rowIndex } = scope;\n\n // 立即更新行的 colorId(触发响应式更新)\n if (row) {\n row.colorId = +colorId;\n }\n\n // 触发事件让父组件处理数据持久化\n emit(\"row-bg-change\", {\n colorId: +colorId,\n row,\n rowIndex\n });\n };\n\n return {\n isDefaultColor,\n getColorById,\n setRowStyle,\n handleColorChange,\n };\n}\n","import debounce from 'lodash/debounce';\nimport throttle from 'lodash/throttle';\nimport { onBeforeUnmount, onMounted, ref, type Ref } from 'vue'\n\nexport function useCellHover(tableDomRef: Ref<any>) {\n\n // 鼠标悬浮的行\n const hoveringCellInfo = ref<{\n rowIndex: number;\n columnProperty: string;\n }>({ rowIndex: -1, columnProperty: ''});\n\n const isMouseWheeling = ref(false);\n\n onMounted(() => {\n tableDomRef.value.$el.addEventListener('mouseleave', resetHoveringCellInfo);\n document.addEventListener('wheel', throttledHandleMouseWheel);\n })\n\n onBeforeUnmount(() => {\n tableDomRef.value.$el.removeEventListener('mouseleave', resetHoveringCellInfo);\n document.removeEventListener('wheel', throttledHandleMouseWheel);\n })\n\n const setCellClassName = ({ column, rowIndex }: { column: any; rowIndex: number }) => {\n // hoving-cell-[name]-[rowIndex]\n if (!column.property) return '';\n return `hoving-cell-(${column.property})-(${rowIndex})`;\n }\n\n const resetHoveringCellInfo = () => {\n hoveringCellInfo.value = {\n rowIndex: -1,\n columnProperty: ''\n };\n }\n\n let timerHandler: any = null\n // 性能考虑,在鼠标滚动时,停止处理cell的hover事件\n const handleMouseWheel = () => {\n isMouseWheeling.value = true;\n clearTimeout(timerHandler);\n // 停止滚动后,恢复hover事件\n timerHandler = setTimeout(() => {\n isMouseWheeling.value = false;\n }, 100)\n }\n const throttledHandleMouseWheel = throttle(handleMouseWheel, 50);\n\n const handleCellMouseEnter = (row: any, column: any, cell: any, event: MouseEvent) => {\n // 性能考虑,表格滚动时会不断触发该事件,导致滚动性能变差\n if (isMouseWheeling.value) return\n\n // 向上查找带有 hoving-cell- 类名的元素\n let targetElement = event.target as HTMLElement;\n let className = '';\n\n while (targetElement && targetElement !== tableDomRef.value?.$el) {\n const foundClass = [...targetElement.classList].find(c => /hoving-cell-\\(\\w+\\)-\\(\\d+\\)/.test(c));\n if (foundClass) {\n className = foundClass;\n break;\n }\n targetElement = targetElement.parentElement as HTMLElement;\n }\n\n if (!className) return;\n // 正则匹配括号中的内容\n const matchArr = className.match(/hoving-cell-\\((\\w+)\\)-\\((\\d+)\\)/);\n\n if (!matchArr || matchArr.length < 3) return;\n\n hoveringCellInfo.value = {\n rowIndex: +matchArr[2],\n columnProperty: matchArr[1]\n }\n }\n\n const debouncedHoverHandler = debounce(handleCellMouseEnter, 10);\n\n return {\n hoveringCellInfo,\n setCellClassName,\n debouncedHoverHandler\n }\n}","import { ref, type Ref } from \"vue\"\nimport type { IEmits, IProps } from \"../types\"\n\ninterface IParams {\n emit: IEmits;\n pageSize: Ref<number>;\n props: IProps\n tableDomRef: Ref<any>;\n hasExpandRow: boolean\n}\n\nexport function useDefaultOperation({ emit, pageSize, props, tableDomRef, hasExpandRow }: IParams) {\n const operationPopoverRef = ref<any>(null);\n const editingRowData = ref<Record<string, any>>({});\n const editingRowIndex = ref<number>(-1);\n\n const handleDelete = (row: any, index: number) => {\n emit('row-delete', {\n row,\n index,\n page: props.currentPage,\n size: pageSize.value\n } as any)\n closeOperationPopover();\n }\n\n const closeOperationPopover = () => {\n operationPopoverRef.value?.forEach((item) => item?.doClose());\n }\n\n const closeAllExpandedRows = () => {\n if (!hasExpandRow) return\n tableDomRef.value?.data.forEach((item) => {\n tableDomRef.value?.toggleRowExpansion(item, false)\n })\n }\n\n const handleEdit = (scope: any) => {\n // 折叠所有展开的行\n closeAllExpandedRows();\n const { row, $index: index } = scope;\n editingRowData.value = { ...row };\n editingRowIndex.value = index;\n emit('row-edit', { row, index, page: props.currentPage, size: pageSize.value } as any);\n closeOperationPopover();\n }\n\n const handleRowPinToTop = (scope: any) => {\n const { row, $index: index, store } = scope;\n\n // Element Plus 使用 Ref,需要访问 .value\n const dataList = store?.states?.data?.value || store?.states?.data || [];\n\n if (!Array.isArray(dataList) || dataList.length === 0) {\n console.warn('无法获取表格数据');\n return;\n }\n\n const newList = [\n ...dataList.slice(0, index),\n ...dataList.slice(index + 1)\n ];\n newList.unshift({ ...row, isPinned: true });\n\n // Element Plus 使用 Ref,需要更新 .value\n if (store?.states?.data?.value !== undefined) {\n store.states.data.value = newList;\n } else {\n store.states.data = newList;\n }\n\n emit('row-pin-to-top', { row, rawIndex: index, page: props.currentPage, size: pageSize.value } as any);\n closeOperationPopover();\n }\n\n const handleEditSave = (row: any) => {\n editingRowIndex.value = -1;\n const changedData: Record<string, any> = {}\n for (const key of Object.keys(row)) {\n if (row[key] !== editingRowData.value[key]) {\n changedData[key] = editingRowData.value[key]\n }\n }\n\n emit('row-edit-save', {\n page: props.currentPage,\n size: pageSize.value,\n row,\n changedData\n } as any);\n editingRowData.value = {};\n }\n\n const handleEditCancel = (row: any) => {\n editingRowIndex.value = -1;\n editingRowData.value = {};\n emit('row-edit-cancel', { row, page: props.currentPage, size: pageSize.value } as any);\n }\n\n return {\n operationPopoverRef,\n editingRowData,\n editingRowIndex,\n handleDelete,\n closeAllExpandedRows,\n handleEdit,\n handleEditSave,\n handleEditCancel,\n handleRowPinToTop\n }\n}","import { computed, nextTick, ref, watch, type Ref } from \"vue\";\nimport type {\n FilterItem,\n FilterListType,\n IColumnConfig,\n IEmits,\n IProps,\n SlotFilterConfig,\n InputFilterConfig,\n} from \"../types\";\n\ninterface IUseColumnHeaderOperationParams {\n props: IProps;\n tableDomRef: Ref<any>;\n emit: IEmits;\n showingColumns: Ref<string[]>;\n}\n\nexport function useColumnHeaderOperation({\n props,\n tableDomRef,\n emit,\n showingColumns,\n}: IUseColumnHeaderOperationParams) {\n // column如果有sortable属性,点击列头部,会直接触发排序,为了在弹窗点确定时再触发排序,需要阻止点击立即排序\n // 所以,初始渲染时,将sortable设置为false,在触发排序逻辑时再设置成真实的值,再利用el-table自身的排序逻辑触发排序\n const inSorting = ref(false);\n\n // 生效中的排序配置\n const sortType = ref<\"ascending\" | \"descending\" | null>(null);\n const sortProp = ref(\"\");\n\n // 临时的排序配置\n const tempSortType = ref<\"ascending\" | \"descending\" | \"\">(\"\");\n const tempSortProp = ref(\"\");\n\n // 生效中的过滤配置 和 临时过滤配置\n const filteredValue = ref<\n Record<string, string | number | number[] | string[]>\n >({});\n const tempFilteredValue = ref<\n Record<string, string | number | number[] | string[]>\n >({});\n\n // 生效中的统计配置 和 临时统计配置\n const tempSummaryList = ref<string[]>([]);\n const summaryList = ref<string[]>([]);\n\n const isColumnFiltering = computed(() => {\n return Object.keys(tempFilteredValue.value).some((key) => {\n const value = tempFilteredValue.value[key];\n if (Array.isArray(value)) return value.length;\n return value;\n });\n });\n\n const showColumnHeadSortIcon = ({\n isColumnSortable,\n filters,\n }: IColumnConfig) => {\n return (\n isColumnSortable ||\n (filters && Array.isArray(filters) && filters.length > 0)\n );\n };\n\n watch(\n () => props.columnConfig,\n (val) => {\n val?.forEach((v) => handleResetFilterValue(v));\n tempFilteredValue.value = { ...filteredValue.value };\n },\n { immediate: true }\n );\n\n const tableSummaryMethod = (param: { columns: any[]; data: any[] }) => {\n const { columns, data } = param;\n const sums: string[] = [];\n columns.forEach((column, index) => {\n if (index === 0) {\n sums[index] = \"合计\";\n return;\n }\n if (!summaryList.value.includes(column.property)) {\n sums[index] = \"\";\n } else {\n const values = data.map((item) => item[column.property]);\n // 找到对应列的summaryMethod函数\n const summaryMethod =\n props.columnConfig?.find((c) => c.prop === column.property)\n ?.summaryMethod ?? (() => \"\");\n const result = summaryMethod(values);\n // 将数值转换为字符串以符合 Element Plus 的类型要求\n sums[index] = typeof result === \"number\" ? String(result) : result;\n }\n });\n\n return sums;\n };\n\n const isColumnHeadActive = ({ prop, filters, _sortable }: IColumnConfig) => {\n const hasFilters = filters && Array.isArray(filters) && filters.length > 0;\n const currentFilterActive =\n hasFilters &&\n filters?.some((item) => {\n if (item.type === \"dateRange\") {\n const [start, end] = item.prop;\n return !!(filteredValue.value[start] || filteredValue.value[end]);\n }\n\n if (item.type === \"select\" && item.multiple) {\n return !!(filteredValue.value[item.prop] as any[])?.length;\n }\n\n if (item.type === \"slot\") {\n return typeof item.isActive === 'function' && item.isActive();\n }\n\n return !!filteredValue.value[item.prop];\n });\n\n const isUseSort = Array.isArray(_sortable)\n ? _sortable.some((v) => v.prop === sortProp.value)\n : sortProp.value === prop;\n\n return currentFilterActive || isUseSort || summaryList.value.includes(prop);\n };\n\n const handleHeaderPopoverShow = (column: IColumnConfig) => {\n // 关闭其他的排序和筛选弹窗(理论上不写也能关闭其他,但是就是有些列会出现两个弹窗同时出现的情况)\n closeSortAndFilterPopover(column.prop);\n tempFilteredValue.value = { ...filteredValue.value };\n tempSortType.value = sortType.value || \"\";\n tempSortProp.value = sortProp.value || \"\";\n // 临时合计项设置成实际的合计项\n tempSummaryList.value = [...summaryList.value];\n };\n\n const closeSortAndFilterPopover = (exceptProp?: string) => {\n document.querySelectorAll(\"span[data-popper-name]\").forEach((item: any) => {\n if (!exceptProp || exceptProp !== item.dataset.prop) {\n item?.__vue__?.doClose?.();\n }\n });\n };\n\n const handleSort = (type: \"ascending\" | \"descending\", prop: string) => {\n tempSortType.value = type;\n tempSortProp.value = prop;\n };\n\n const columnMap = computed(() => {\n const obj: Record<string, IColumnConfig> = {};\n props.columnConfig?.forEach((column) => {\n obj[column.prop] = column;\n });\n\n return obj;\n });\n\n const emitSearch = () => {\n const params: Record<string, any> = {};\n\n const processFilter = (filters: FilterListType) => {\n filters\n .filter(\n (item): item is Exclude<FilterItem, SlotFilterConfig> =>\n item.type !== \"slot\"\n )\n .forEach((item) => {\n if (item.type === \"dateRange\") {\n const [start, end] = item.prop;\n params[start] = filteredValue.value[start];\n params[end] = filteredValue.value[end];\n } else {\n params[item.prop] = filteredValue.value[item.prop];\n }\n });\n };\n\n // 仅提交显示的列的相关数据\n showingColumns.value.forEach((prop) => {\n const { filters = [] } = columnMap.value[prop] as IColumnConfig;\n processFilter(filters);\n });\n\n if (props.colorFilterConfig) {\n const { filters = [] } = props.colorFilterConfig;\n processFilter(filters);\n }\n\n Object.keys(params).forEach((key) => {\n if (params[key] === undefined) delete params[key];\n });\n\n emit(\"search\", {\n ...params,\n page: 1,\n });\n };\n\n const handleHeaderOperationConfirm = async (column: IColumnConfig) => {\n const inputFilters = (column.filters ?? []).filter(\n (item): item is InputFilterConfig => item.type === \"input\"\n );\n\n const hasValidatorError = inputFilters.some(\n (item) =>\n item.validator &&\n !item.validator((tempFilteredValue.value[item.prop] as string).trim())\n );\n\n if (hasValidatorError) {\n return;\n }\n\n inputFilters.forEach((item) => {\n if (!tempFilteredValue.value[item.prop])\n tempFilteredValue.value[item.prop] = \"\";\n });\n\n summaryList.value = [...tempSummaryList.value];\n sortProp.value = tempSortProp.value || \"\";\n sortType.value = tempSortType.value || null;\n\n if (sortProp.value) {\n // 确认时提交排序\n if (props.localSort) {\n // 恢复列配置的sortable属性,只有列配置的sortable为true,才能用下面的sort方法\n inSorting.value = true;\n await nextTick();\n tableDomRef.value?.sort(sortProp.value, sortType.value);\n inSorting.value = false;\n } else {\n emit(\"sort-change\", { order: sortType.value, prop: sortProp.value });\n }\n }\n\n filteredValue.value = { ...tempFilteredValue.value };\n\n emitSearch();\n closeSortAndFilterPopover();\n await nextTick();\n tableDomRef.value?.doLayout();\n };\n\n const clearSort = () => {\n sortProp.value = \"\";\n sortType.value = null;\n if (props.localSort) {\n // 前端过滤\n tableDomRef.value?.clearSort();\n } else {\n // 接口过滤\n emit(\"sort-change\", { order: null, prop: \"\" });\n }\n };\n\n const setSort = (params: {\n order: \"ascending\" | \"descending\";\n prop: string;\n }) => {\n const column = props.columnConfig?.find((c) =>\n Array.isArray(c.sortable)\n ? c.sortable.some((v) => v.prop === params.prop)\n : c.prop === params.prop\n );\n\n if (column) {\n sortProp.value = params.prop;\n sortType.value = params.order;\n if (props.localSort) {\n tableDomRef.value?.sort(params.prop, params.order);\n }\n }\n };\n\n function handleResetFilterValue(column: IColumnConfig) {\n (column.filters || [])\n .filter(\n (item): item is Exclude<FilterItem, SlotFilterConfig> =>\n item.type !== \"slot\"\n )\n .forEach((item) => {\n if (item.type === \"select\") {\n if (item.defaultValue) {\n filteredValue.value[item.prop] = item.defaultValue;\n } else {\n filteredValue.value[item.prop] = item.multiple ? [] : \"\";\n }\n } else if (item.type === \"dateRange\") {\n const [start, end] = item.prop;\n filteredValue.value[start] = \"\";\n filteredValue.value[end] = \"\";\n } else {\n filteredValue.value[item.prop] = \"\";\n }\n });\n }\n\n const handleHeaderOperationReset = async (column: IColumnConfig) => {\n if (\n sortProp.value &&\n (Array.isArray(column._sortable)\n ? column._sortable.some((v) => v.prop === sortProp.value)\n : sortProp.value === column.prop)\n ) {\n clearSort();\n }\n\n // 合计\n summaryList.value = summaryList.value.filter(\n (item) => item !== column.prop\n );\n\n handleResetFilterValue(column);\n emitSearch();\n closeSortAndFilterPopover();\n await nextTick();\n tableDomRef.value?.doLayout();\n };\n\n const setSearchParams = (params: Record<string, any>) => {\n const _filteredValue = {};\n\n // 设置搜索和过滤参数时,如果使用 showingColumns 遍历,会导致通过外部设置未显示的列的搜索和过滤参数丢失\n [props.colorFilterConfig, ...(props.columnConfig ?? [])].forEach(\n (column) => {\n (column?.filters ?? [])\n .filter(\n (item): item is Exclude<FilterItem, SlotFilterConfig> =>\n item.type !== \"slot\"\n )\n .forEach((item) => {\n if (item.type === \"dateRange\") {\n const [start, end] = item.prop;\n _filteredValue[start] = params[start];\n _filteredValue[end] = params[end];\n } else if (item.type === \"select\" && item.multiple) {\n _filteredValue[item.prop] =\n params[item.prop] ?? item.defaultValue ?? [];\n } else {\n _filteredValue[item.prop] = params[item.prop] ?? \"\";\n }\n });\n }\n );\n\n filteredValue.value = { ...filteredValue.value, ..._filteredValue };\n };\n\n return {\n setSort,\n clearSort,\n setSearchParams,\n isColumnHeadActive,\n handleHeaderPopoverShow,\n handleSort,\n handleHeaderOperationConfirm,\n handleHeaderOperationReset,\n summaryList,\n tableSummaryMethod,\n filteredValue,\n showColumnHeadSortIcon,\n tempSortProp,\n tempFilteredValue,\n tempSummaryList,\n tempSortType,\n sortProp,\n isColumnFiltering,\n inSorting,\n };\n}\n","import { ref, watch, computed, nextTick } from \"vue\";\nimport type { Ref } from \"vue\";\nimport type { IColumnConfig, IProps, SettingStorgeConfig } from \"../types\";\n\ninterface IViewSettingParams {\n showingColumns: Ref<string[]>;\n actualColumns: Ref<IColumnConfig[]>;\n viewSettingDragSortOptions: Ref<IColumnConfig[]>;\n props: IProps;\n emit: {\n (e: \"update:leftFixedColumnCount\", val: number): void;\n (e: \"update:showingColumns\", val: string[]): void;\n (e: \"update:viewSettingDragSortOptions\", val: IColumnConfig[]): void;\n (e: \"tableDoLayout\"): void;\n };\n}\n\n/** 默认迁移配置 */\nconst storgeSchemaMigrationConfig: Record<\n number,\n {\n /** 迁移方法 */\n migration: (\n /** 当前本地配置 */\n currentConfig: any,\n /** 当前的列配置 */\n columns: IColumnConfig[]\n ) => { schemaVersion: number; config: any; version?: string };\n /** 迁移到的下一个版本号 */\n nextSchemaVersion?: number;\n }\n> = {\n \"0\": {\n migration: (\n config: { showingColumns: string[]; leftFixedColumnCount: number },\n columns: IColumnConfig[]\n ) => {\n return {\n config: {\n fields: columns.reduce((acc, curr) => {\n acc[curr.prop] = {\n hidden: config.showingColumns.find((v) => v === curr.prop)\n ? false\n : true,\n order:\n config.showingColumns.findIndex((v) => v === curr.prop) ?? 0,\n };\n return acc;\n }, {} as Record<string, { hidden: boolean; order: number }>),\n leftFixedColumnCount: config.leftFixedColumnCount,\n },\n schemaVersion: 1,\n };\n },\n nextSchemaVersion: 1,\n },\n};\n\nexport function useViewSetting({\n showingColumns,\n actualColumns,\n props,\n viewSettingDragSortOptions,\n emit,\n}: IViewSettingParams) {\n const columnsToBeShown = ref<string[]>([]); // 显示设置弹窗中勾选的列\n const viewSettingVisible = ref(false);\n const leftFixedColumnCount = ref(0);\n const tempLeftFixedColumnCount = ref(0);\n\n const updateShowingColumns = (val: string[]) =>\n emit(\"update:showingColumns\", val);\n\n const storageKey = computed(\n () =>\n `@lx-frontend/wrap-element-ui/table_setting_cloumns/${\n props.settingStorgeKey ||\n (location.pathname === \"/\" ? location.hash : location.pathname)\n }`\n );\n\n const saveSettingToStorge = async () => {\n await nextTick();\n\n const settingStorgeMigrationConfigs =\n props.settingStorgeMigrationConfigs ?? [];\n const len = settingStorgeMigrationConfigs.length;\n const version = len\n ? settingStorgeMigrationConfigs[len - 1].version.to\n : undefined;\n\n localStorage.setItem(\n storageKey.value,\n JSON.stringify({\n config: {\n fields: props.columnConfig.reduce((acc, curr, index) => {\n const _index = showingColumns.value.findIndex(\n (v) => v === curr.prop\n );\n acc[curr.prop] = {\n hidden: showingColumns.value.find((v) => v === curr.prop)\n ? false\n : true,\n order: _index === -1 ? index : _index,\n };\n return acc;\n }, {} as Record<string, { hidden: boolean; order: number }>),\n leftFixedColumnCount: leftFixedColumnCount.value,\n },\n version,\n schemaVersion: 1,\n })\n );\n };\n\n const handleViewSettingShow = () => {\n emit(\"update:viewSettingDragSortOptions\", [\n ...actualColumns.value.filter((v) => v?.prop !== \"$$operation\"),\n ]);\n tempLeftFixedColumnCount.value = leftFixedColumnCount.value;\n viewSettingVisible.value = true;\n columnsToBeShown.value = [...showingColumns.value];\n };\n\n const handleViewSettingClose = () => {\n viewSettingVisible.value = false;\n };\n\n const handleViewSettingConfirm = async () => {\n viewSettingVisible.value = false;\n updateShowingColumns(viewSettingDragSortOptions.value.map((c) => c.prop));\n leftFixedColumnCount.value = tempLeftFixedColumnCount.value;\n await saveSettingToStorge();\n emit(\"tableDoLayout\");\n };\n\n const handleInputTempLeftFixedColumnCount = (value: string) => {\n const _value = Number(value);\n if (isNaN(_value)) return;\n tempLeftFixedColumnCount.value = Math.max(\n 0,\n Math.min(columnsToBeShown.value.length, Math.floor(_value))\n );\n };\n\n watch(\n () => props.columnConfig,\n async (val) => {\n const _cache = localStorage.getItem(storageKey.value);\n const setColumns = () =>\n updateShowingColumns(\n val.filter((v) => !v.defaultHide).map((c) => c.prop)\n );\n if (!_cache) {\n setColumns();\n leftFixedColumnCount.value = props.leftFixedCount as number;\n } else {\n try {\n const handleMigration = (_cache: any) => {\n const schemaVersion = _cache?.schemaVersion ?? 0;\n if (!storgeSchemaMigrationConfig[schemaVersion]) {\n // 没有 schema 变动时,查找需要处理的业务迁移配置\n const bizMigrationConfigs = (\n props.settingStorgeMigrationConfigs ?? []\n ).filter((v) => (v.schemaVersion ?? 1) === _cache.schemaVersion);\n\n const _versionIndex = bizMigrationConfigs.findIndex(\n (v) => v.version.form === _cache.version\n );\n if (_versionIndex > -1) {\n for (\n let i = _versionIndex;\n i < bizMigrationConfigs.length;\n i++\n ) {\n const curr = bizMigrationConfigs[i];\n _cache = curr.migration(_cache.config, val);\n }\n }\n return _cache;\n } else {\n let __cache = storgeSchemaMigrationConfig[\n schemaVersion\n ].migration(_cache, val);\n\n // 处理当前schema版本需要处理的变更\n const bizMigrationConfigs = (\n props.settingStorgeMigrationConfigs ?? []\n ).filter((v) => (v.schemaVersion ?? 1) === __cache.schemaVersion);\n if (bizMigrationConfigs.length) {\n __cache = bizMigrationConfigs.reduce(\n (acc, curr) => ({\n ...curr.migration(acc.config, val),\n schemaVersion: __cache.schemaVersion,\n }),\n __cache\n );\n }\n\n return storgeSchemaMigrationConfig[schemaVersion]\n .nextSchemaVersion\n ? handleMigration(__cache)\n : __cache;\n }\n };\n\n const cache = handleMigration(\n JSON.parse(_cache)\n ) as SettingStorgeConfig;\n\n updateShowingColumns(\n val\n .filter((v) => {\n return cache.config.fields[v.prop]\n ? !cache.config.fields[v.prop].hidden\n : !v.defaultHide;\n })\n .sort((a, b) => {\n return (\n (cache.config.fields[a.prop]?.order ?? 0) -\n (cache.config.fields[b.prop]?.order ?? 0)\n );\n })\n .map((v) => v.prop)\n );\n\n const _leftFixedColumnCount = Number(\n cache?.config?.leftFixedColumnCount\n );\n leftFixedColumnCount.value = isNaN(_leftFixedColumnCount)\n ? (props.leftFixedCount as number)\n : _leftFixedColumnCount;\n // 写入清理后的数据\n saveSettingToStorge();\n } catch (error) {\n console.error(error);\n localStorage.removeItem(storageKey.value);\n setColumns();\n }\n }\n },\n { immediate: true }\n );\n\n watch(\n columnsToBeShown,\n (val, oldVal) => {\n if (val.length === oldVal?.length) return; // 排序调整时不做处理,避免出现死循环\n const _map = new Map<string, IColumnConfig>();\n props.columnConfig.forEach((c) => _map.set(c.prop, c));\n // 展示时保留顺序\n emit(\n \"update:viewSettingDragSortOptions\",\n val.map((prop) => _map.get(prop)!)\n );\n if (tempLeftFixedColumnCount.value > val.length)\n tempLeftFixedColumnCount.value = val.length;\n },\n { immediate: true }\n );\n\n // 拖拽调整排序时,同时更新勾选数组的顺序,避免出现拖拽排序操作过程后再勾选新列时被还原成拖拽前的顺序的问题\n watch(\n viewSettingDragSortOptions,\n (val, oldVal) => {\n if (!val.length || val.length !== oldVal?.length) return; // 不是排序调整\n columnsToBeShown.value = val.map((c) => c.prop);\n },\n { deep: true }\n );\n\n watch(\n leftFixedColumnCount,\n (val) => emit(\"update:leftFixedColumnCount\", val),\n { immediate: true }\n );\n\n return {\n columnsToBeShown,\n viewSettingVisible,\n leftFixedColumnCount,\n tempLeftFixedColumnCount,\n handleInputTempLeftFixedColumnCount,\n handleViewSettingShow,\n handleViewSettingClose,\n handleViewSettingConfirm,\n };\n}\n","<template>\n <el-dialog\n title=\"显示设置\"\n v-model=\"viewSettingVisible\"\n width=\"750px\"\n top=\"12vh\"\n :close-on-click-modal=\"false\"\n :modal=\"true\"\n :modal-append-to-body=\"true\"\n append-to-body\n destroy-on-close\n custom-class=\"editable-table-view-setting__dialog\"\n >\n <div class=\"editable-table-view-setting__content\">\n <div class=\"editable-table-view-setting__content-left\">\n <div class=\"editable-table-view-setting__checkbox-wrapper\">\n <el-checkbox-group v-model=\"columnsToBeShown\">\n <el-checkbox\n v-for=\"item in props.columnConfig\"\n :key=\"item.label\"\n :label=\"item.prop\"\n :disabled=\"item.alwaysShow || item.isAlwaysShow\"\n >\n <div class=\"editable-table-view-setting__content-left-item\">\n {{ item.label }}\n </div>\n </el-checkbox>\n </el-checkbox-group>\n </div>\n </div>\n <div class=\"editable-table-view-setting__content-right\">\n <div class=\"editable-table-view-setting__content-right-title\">\n 已选择\n <div class=\"editable-table-view-setting__selected-count\">\n {{ columnsToBeShown.length }}\n </div>\n </div>\n <div class=\"editable-table-view-setting__content-right-frize\">\n 冻结前\n <el-input\n class=\"editable-table-view-setting__content-right-input\"\n :value=\"tempLeftFixedColumnCount\"\n @input=\"handleInputTempLeftFixedColumnCount\"\n />\n 列\n </div>\n <div class=\"editable-table-view-setting__content-right-selected\">\n <div\n v-for=\"(item, index) in viewSettingDragSortOptions\"\n :key=\"item.prop\"\n class=\"editable-table-view-setting__selected-item editable-table-view-setting-draggable-item\"\n >\n <div class=\"editable-table-view-setting__selected-item-left\">\n <div\n class=\"editable-table-view-setting-drag-target editable-table-view-setting__icon-wrapper\"\n :data-index=\"index\"\n >\n <div\n class=\"editable-table-view-setting-drag-target editable-table-drag-icon\"\n :data-index=\"index\"\n />\n </div>\n <div class=\"editable-table-view-setting__selected-item-name\">\n {{ item.label }}\n </div>\n </div>\n <div\n :class=\"[\n 'editable-table-view-setting__selected-item-close',\n item.alwaysShow || item.isAlwaysShow\n ? 'editable-table-view-setting__selected-item-close--disabled'\n : '',\n ]\"\n @click=\"handleColumnClose(item)\"\n >\n <el-icon><Close /></el-icon>\n </div>\n </div>\n </div>\n </div>\n </div>\n <template #footer>\n <el-button @click=\"handleViewSettingClose\"> 取消 </el-button>\n <el-button\n type=\"primary\"\n @click=\"handleViewSettingConfirm\"\n >\n 确认\n </el-button>\n </template>\n </el-dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { toRefs } from \"vue\";\nimport { ElDialog, ElButton, ElCheckboxGroup, ElCheckbox, ElInput, ElIcon } from \"element-plus\";\nimport { Close } from \"@element-plus/icons-vue\";\nimport { useViewSetting } from \"../hooks\";\nimport type { IColumnConfig, IProps } from \"../types\";\n\nconst emit = defineEmits<{\n (e: \"update:leftFixedColumnCount\", val: number): void;\n (e: \"update:showingColumns\", val: string[]): void;\n (e: \"update:viewSettingDragSortOptions\", val: IColumnConfig[]): void;\n (e: \"tableDoLayout\"): void;\n}>();\n\nconst _props = defineProps<{\n actualColumns: IColumnConfig[];\n viewSettingDragSortOptions: IColumnConfig[];\n showingColumns: string[];\n props: IProps;\n}>();\n\nconst { actualColumns, showingColumns, viewSettingDragSortOptions } =\n toRefs(_props);\n\nconst {\n columnsToBeShown,\n viewSettingVisible,\n tempLeftFixedColumnCount,\n handleInputTempLeftFixedColumnCount,\n handleViewSettingShow,\n handleViewSettingClose,\n handleViewSettingConfirm,\n} = useViewSetting({\n showingColumns,\n actualColumns,\n viewSettingDragSortOptions,\n props: _props.props,\n emit,\n});\n\nconst handleColumnClose = (item: IColumnConfig) => {\n if (item.alwaysShow || item.isAlwaysShow) return;\n columnsToBeShown.value = columnsToBeShown.value.filter(\n (c) => c !== item.prop\n );\n};\n\ndefineExpose({\n open: handleViewSettingShow,\n});\n</script>\n","<!-- 行颜色选择组件 -->\n<template>\n <el-popover\n :visible=\"visible\"\n placement=\"right\"\n trigger=\"click\"\n popper-class=\"editable-table-color-popover\"\n @update:visible=\"visible = $event\"\n >\n <div class=\"color-list\">\n <div\n v-for=\"color in colorList\"\n :key=\"color.id\"\n class=\"color-list__item\"\n :style=\"{ backgroundColor: color.sampleColor }\"\n @click=\"handleClick(color.id)\"\n >\n <span :style=\"{ color: color.textColor }\">{{ color.name }}</span>\n </div>\n </div>\n\n <template #reference>\n <div\n v-if=\"isDefaultColor(scope.row.colorId)\"\n class=\"editable-table__color-icon\"\n />\n <div\n v-else\n class=\"editable-table__selected-color\"\n :style=\"{ backgroundColor: getColorById(scope.row.colorId, 'sample') }\"\n />\n </template>\n </el-popover>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport type { IColorList, IEmits, ITableDataItem } from \"../types\";\nimport { useRowBgColor } from \"../hooks\";\n\nconst props = defineProps<{\n colorList: IColorList;\n scope: any;\n}>();\n\nconst emit = defineEmits<{\n (\n e: \"row-bg-change\",\n param: { colorId: number; row: ITableDataItem; rowIndex: number }\n ): void;\n}>();\n\nconst { getColorById, isDefaultColor, handleColorChange } = useRowBgColor({\n colorList: props.colorList,\n emit: emit as IEmits,\n});\n\nconst visible = ref(false);\n\nconst handleClick = (colorId: number) => {\n visible.value = false;\n handleColorChange(colorId, props.scope);\n};\n</script>\n\n<style lang=\"less\">\n.editable-table {\n &__selected-color {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n &__color-icon {\n padding: 0 !important;\n margin-left: 8px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n position: relative;\n background-color: #fcae46;\n cursor: pointer;\n overflow: visible !important;\n\n &::before {\n background-color: #fc6559;\n left: -10px;\n z-index: 2;\n }\n\n &::after {\n background-color: #409eff;\n left: -5px;\n z-index: 1;\n }\n\n &::before,\n &::after {\n content: \"\";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n position: absolute;\n top: 0;\n }\n }\n}\n\n.color-list {\n color: #fff;\n width: 102px;\n border-radius: 5px;\n overflow: hidden;\n\n &__item {\n display: inline-block;\n width: 100%;\n height: 27px;\n line-height: 27px;\n padding-left: 6px;\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n }\n\n span {\n font-size: 12px;\n }\n }\n}\n</style>\n","<!-- 复选框 -->\n<template>\n <div class=\"editable-table-sort-filter__filter\">\n <div class=\"editable-table-sort-filter__filter-title\">\n {{ config.label || \"筛选\" }}\n </div>\n <el-checkbox-group\n class=\"editable-table-sort-filter__filter-checkbox-group\"\n :value=\"tempFilteredValue[config.prop]\"\n @input=\"(val) => emit('update:tempFilteredValue', config.prop, val)\"\n >\n <el-checkbox\n v-for=\"item in config.options\"\n :key=\"item.value\"\n :label=\"item.value\"\n :title=\"item.text\"\n class=\"editable-table-sort-filter__filter-checkbox\"\n >\n {{ item.text }}\n </el-checkbox>\n </el-checkbox-group>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFilterSelect } from \"../../types\";\n\ndefineProps<{\n config: IFilterSelect;\n tempFilteredValue: Record<string, string>;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n</script>\n\n<style scoped lang=\"less\"></style>\n","<!-- 单选框 -->\n<template>\n <div class=\"editable-table-sort-filter__filter\">\n <div class=\"editable-table-sort-filter__filter-title\">\n {{ config.label || \"筛选\" }}\n </div>\n <el-radio-group\n style=\"display: flex; flex-direction: column; gap: 6px\"\n :value=\"tempFilteredValue[config.prop]\"\n @input=\"(val) => emit('update:tempFilteredValue', config.prop, val)\"\n >\n <el-radio\n v-for=\"item in config.options\"\n :key=\"item.value\"\n :label=\"item.value\"\n :title=\"item.text\"\n >\n <span class=\"color-option\">\n <span\n class=\"icon\"\n :style=\"{ background: item.color }\"\n />\n <span>{{ item.text }}</span>\n </span>\n </el-radio>\n </el-radio-group>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFilterColorRadio } from \"../../types\";\n\ndefineProps<{\n config: IFilterColorRadio;\n tempFilteredValue: Record<string, string>;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n</script>\n\n<style scoped lang=\"less\">\n.color-option {\n display: flex;\n align-items: center;\n\n .icon {\n border-radius: 50%;\n width: 1em;\n height: 1em;\n margin-right: 0.3em;\n border: 1px solid #ccc;\n }\n}\n</style>\n","import dayjs from \"dayjs\";\n\n/** 开始日期禁用配置 */\nexport function genStartDateDisabledOptions(endDate: string, limit: number = 0) {\n return {\n disabledDate: (time: Date) => {\n if (!endDate) return false;\n \n const currentDate = dayjs(time);\n const baseOption = currentDate.isAfter(dayjs(endDate), 'day');\n\n if (!limit) {\n return baseOption\n }\n\n return baseOption || currentDate.isBefore(dayjs(endDate).subtract(limit - 1, 'day'), 'day');\n }\n };\n}\n\n/** 结束日期禁用配置 */\nexport function genEndDateDisabledOptions(startDate: string, limit: number = 0) {\n return {\n disabledDate: (time: Date) => {\n if (!startDate) return false;\n \n const currentDate = dayjs(time);\n const baseOption = currentDate.isBefore(dayjs(startDate), 'day');\n\n if (!limit) {\n return baseOption\n }\n \n return baseOption || currentDate.isAfter(dayjs(startDate).add(limit - 1, 'day'), 'day');\n }\n };\n}","<!-- 日期范围选择(分开的两个日期选择器) -->\n<template>\n <div class=\"editable-table-sort-filter__sort\">\n <div class=\"editable-table-sort-filter__search-title\">\n {{ config.label || \"筛选\" }}\n </div>\n <div class=\"editable-table-sort-filter__date-picker-content\">\n <el-date-picker\n v-bind=\"datePickerCommonProps\"\n placeholder=\"开始日期\"\n :value=\"tempFilteredValue[config.prop[0]]\"\n :picker-options=\"pickerStartOptions\"\n @input=\"handleStartDateChange\"\n />\n <el-date-picker\n v-bind=\"datePickerCommonProps\"\n placeholder=\"结束日期\"\n :value=\"tempFilteredValue[config.prop[1]]\"\n :picker-options=\"pickerEndOptions\"\n @input=\"handleEndDateChange\"\n />\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type {\n IFilterDoubleDatePicker,\n IFilterDoubleDatePickerLimit,\n} from \"../../types\";\nimport {\n genStartDateDisabledOptions,\n genEndDateDisabledOptions,\n} from \"../../../helper\";\nimport { computed, toRefs } from \"vue\";\n\ninterface IFilterDoubleDatePickerProps {\n /** 日期选择器配置 */\n config: IFilterDoubleDatePicker | IFilterDoubleDatePickerLimit;\n /** 临时筛选值 */\n tempFilteredValue: Record<string, string>;\n}\n\nconst props = defineProps<IFilterDoubleDatePickerProps>();\nconst { config, tempFilteredValue } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n\n/** 日期选择器通用配置 */\nconst datePickerCommonProps = {\n valueFormat: \"yyyy-MM-dd\",\n format: \"yyyy-MM-dd\",\n type: \"date\",\n size: \"small\",\n editable: false,\n} as const;\n\nconst pickerStartOptions = computed(() => {\n // 自定义禁用选项优先级最高\n if (\"pickerOptions\" in config.value && config.value.pickerOptions?.start) {\n return config.value.pickerOptions.start;\n }\n\n // 限制天数范围 自动生成禁用选项\n if (\"limit\" in config.value) {\n return genStartDateDisabledOptions(\n tempFilteredValue.value[config.value.prop[1]],\n config.value.limit\n );\n }\n\n // 默认(只限制起止时间,不限制范围)\n return genStartDateDisabledOptions(\n tempFilteredValue.value[config.value.prop[1]]\n );\n});\n\nconst pickerEndOptions = computed(() => {\n // 自定义禁用选项优先级最高\n if (\"pickerOptions\" in config.value && config.value.pickerOptions?.end) {\n return config.value.pickerOptions.end;\n }\n\n // 限制天数范围 自动生成禁用选项\n if (\"limit\" in config.value) {\n return genEndDateDisabledOptions(\n tempFilteredValue.value[config.value.prop[0]],\n config.value.limit\n );\n }\n\n // 默认(只限制起止时间,不限制范围)\n return genEndDateDisabledOptions(\n tempFilteredValue.value[config.value.prop[0]]\n );\n});\n\n/** 处理开始日期变更 */\nconst handleStartDateChange = (val: string | null) => {\n emit(\"update:tempFilteredValue\", config.value.prop[0], val || \"\");\n};\n\n/** 处理结束日期变更 */\nconst handleEndDateChange = (val: string | null) => {\n emit(\"update:tempFilteredValue\", config.value.prop[1], val || \"\");\n};\n</script>\n","<template>\n <div class=\"editable-table-sort-filter__search\">\n <div class=\"editable-table-sort-filter__search-title\">\n {{ config.label || \"搜索\" }}\n </div>\n <el-input\n class=\"editable-table-sort-filter__search-input\"\n :placeholder=\"config.placeholder || '请输入内容'\"\n :value=\"tempFilteredValue[config.prop]\"\n @input=\"(val) => emit('update:tempFilteredValue', config.prop, val)\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFilterInput } from \"../../types\";\n\ndefineProps<{\n config: IFilterInput;\n tempFilteredValue: Record<string, string>;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n</script>\n","import dayjs from 'dayjs';\n\n// 月份配置 - 月份对应的天数\nconst monthConfig = [\n\t{ month: 1, day: 31 },\n\t{ month: 2, day: 29 },\n\t{ month: 3, day: 31 },\n\t{ month: 4, day: 30 },\n\t{ month: 5, day: 31 },\n\t{ month: 6, day: 30 },\n\t{ month: 7, day: 31 },\n\t{ month: 8, day: 31 },\n\t{ month: 9, day: 30 },\n\t{ month: 10, day: 31 },\n\t{ month: 11, day: 30 },\n\t{ month: 12, day: 31 },\n];\n\n/**\n * 组装极联选择组件默认选项\n * example: [\n * {\n * value: '1',\n * label: '1月',\n * children: [\n * { value: '1', label: '1日' },\n * ... // 1月份的每一天\n * ]\n * },\n * ... // 其他月份的选项\n * ]\n */\nexport function getMonthDayPickerDefaultOptions() {\n\treturn monthConfig.map(\n\t\t(item) => ({\n\t\t\tvalue: item.month.toString(),\n\t\t\tlabel: `${ item.month }月`,\n\t\t\tchildren: Array.from(\n\t\t\t\t{ length: item.day },\n\t\t\t\t(_, i) => (\n\t\t\t\t\t{ value: `${ i + 1 }`, label: `${ i + 1 }日` }\n\t\t\t\t)\n\t\t\t)\n\t\t})\n\t);\n}\n\n/**\n * 组装日期范围级联选择组件禁用选项\n * @param date 日期 - 级联选择组件值\n * @param isStartDate 区分传递的date是 开始日期 / 结束日期\n * @param digits 时间范围 n个月\n */\nexport function disableOutOfRangeOptions({\n\tdate = [],\n\tisStartDate = false,\n\tdigits = 3\n}: { date: string[], isStartDate?: boolean, digits: number }) {\n\t// 写死一个闰年年份 仅用于比较时间\n\t// 如果非闰年 dayjs('year-02-29') 会输出 year-3-1 导致日期范围选择器出错\n\tconst year = 2024;\n\tconst baseMonthDay = 30;\n\tconst options = getMonthDayPickerDefaultOptions();\n\t\n\treturn options.map(\n\t\t(month) => {\n\t\t\tconst children = month.children.map(\n\t\t\t\t(day) => {\n\t\t\t\t\t// 组装日期 - 当前这个选项对应的完整日期\n\t\t\t\t\tconst currentDate = dayjs([year, month.value, day.value].join('-'));\n\t\t\t\t\t\n\t\t\t\t\t// 是否需要禁用当前日期\n\t\t\t\t\tlet disabled = false;\n\t\t\t\t\t\n\t\t\t\t\t// 如果有传入日期,则判断是否在禁用日期范围内\n\t\t\t\t\tif (date.length > 0) {\n\t\t\t\t\t\t// 组装日期 - 传入日期对应的完整日期\n\t\t\t\t\t\tconst baseDate = dayjs([year, ...date].join('-'));\n\t\t\t\t\t\t\n\t\t\t\t\t\t// 如果是开始时间,则结束时间范围为 baseDate + digits\n\t\t\t\t\t\t// 如果是结束时间,则开始时间范围为 baseDate - digits\n\t\t\t\t\t\tif (isStartDate) {\n\t\t\t\t\t\t\tconst maxDate = baseDate.add(digits * baseMonthDay - 1, 'day');\n\t\t\t\t\t\t\t// 推算时间范围超过12月31号,结束时间可选年初时间\n\t\t\t\t\t\t\tif (maxDate.year() > year) {\n\t\t\t\t\t\t\t\tdisabled = currentDate.isAfter(maxDate.subtract(366, 'day'), 'day') && currentDate.isBefore(baseDate, 'day');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdisabled = currentDate.isAfter(maxDate, 'day') || currentDate.isBefore(baseDate, 'day');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst minDate = baseDate.subtract(digits * baseMonthDay - 1, 'day');\n\t\t\t\t\t\t\t// 推算时间范围在1月1号前,开始时间可选年末时间\n\t\t\t\t\t\t\tif (minDate.year() < year) {\n\t\t\t\t\t\t\t\tdisabled = currentDate.isBefore(minDate.add(366, 'day'), 'day') && currentDate.isAfter(baseDate, 'day');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdisabled = currentDate.isBefore(minDate, 'day') || currentDate.isAfter(baseDate, 'day');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...day,\n\t\t\t\t\t\tdisabled\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t);\n\t\t\t\n\t\t\t// 如果当前月份每天都是禁用日期,则整个月份禁用\n\t\t\tconst disabled = children.every((day) => day.disabled);\n\t\t\t\n\t\t\treturn {\n\t\t\t\t...month,\n\t\t\t\tdisabled,\n\t\t\t\tchildren\n\t\t\t};\n\t\t}\n\t);\n}\n\n/**\n * 格式化月日级联选择组件值 MM-dd\n * @param date 日期 - 级联选择组件值\n * @returns 格式化后的日期字符串\n */\nexport function formatMonthDayPickerValue(date: string[]) {\n\treturn date\n\t\t.map(\n\t\t\t(str) => str.padStart(2, '0')\n\t\t)\n\t\t.join('-');\n}\n","<!-- 月/日选择器 -->\n<template>\n <div class=\"editable-table-sort-filter__sort\">\n <div class=\"editable-table-sort-filter__search-title\">\n {{ config.label || \"筛选\" }}\n </div>\n <div class=\"editable-table-sort-filter__date-picker-content\">\n <el-cascader\n clearable\n :value=\"startDate\"\n separator=\"\"\n size=\"small\"\n placeholder=\"开始日期\"\n popper-class=\"month-day-picker\"\n :options=\"startDateOptions\"\n @change=\"(value) => handleDateChange(config.prop[0], value)\"\n />\n <el-cascader\n clearable\n :value=\"endDate\"\n separator=\"\"\n size=\"small\"\n placeholder=\"结束日期\"\n popper-class=\"month-day-picker\"\n :options=\"endDateOptions\"\n @change=\"(value) => handleDateChange(config.prop[1], value)\"\n />\n </div>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport {\n disableOutOfRangeOptions,\n formatMonthDayPickerValue,\n getMonthDayPickerDefaultOptions,\n} from \"./BizMonthDayPicker.helper\";\nimport { computed, toRefs } from \"vue\";\nimport type { IFilterMonthDayPicker } from \"../../types\";\n\nconst props = defineProps<{\n config: IFilterMonthDayPicker;\n tempFilteredValue: Record<string, string>;\n}>();\nconst { config, tempFilteredValue } = toRefs(props);\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n\nconst formatDate = (date: string) => {\n if (date) {\n return (\n date\n .split(\"-\")\n // 01 -> 1\n .map((v) => String(Number(v)))\n );\n }\n\n return [];\n};\n\nconst startDate = computed(() => {\n const { prop } = config.value;\n return formatDate(tempFilteredValue.value[prop[0]]);\n});\n\nconst endDate = computed(() => {\n const { prop } = config.value;\n return formatDate(tempFilteredValue.value[prop[1]]);\n});\n\n// 开始日期范围限制\nconst startDateOptions = computed(() => {\n if (endDate.value.length === 0) {\n return getMonthDayPickerDefaultOptions();\n }\n\n return disableOutOfRangeOptions({\n date: endDate.value,\n isStartDate: false,\n digits: config.value.limit,\n });\n});\n\n// 结束日期范围限制\nconst endDateOptions = computed(() => {\n if (startDate.value.length === 0) {\n return getMonthDayPickerDefaultOptions();\n }\n\n return disableOutOfRangeOptions({\n date: startDate.value,\n isStartDate: true,\n digits: config.value.limit,\n });\n});\n\n/**\n * 选择时间更改统一回调\n */\nconst handleDateChange = (key: string, value: string[]) => {\n const currentValue =\n value.length === 0 ? \"\" : formatMonthDayPickerValue(value);\n emit(\"update:tempFilteredValue\", key, currentValue);\n};\n</script>\n\n<style scoped lang=\"less\"></style>\n","<template>\n <div class=\"editable-table-sort-filter__sort\">\n <div\n v-for=\"item in sortConfigs\"\n :key=\"item.prop\"\n >\n <div class=\"editable-table-sort-filter__sort-title\">\n {{ item.label || \"排序\" }}\n </div>\n <div class=\"editable-table-sort-filter__sort-btns\">\n <el-button\n :class=\"[\n 'editable-table-sort-filter__sort-btn',\n checkActiveProp('ascending', item.prop) &&\n 'editable-table-sort-filter__sort-btn--active',\n ]\"\n @click=\"() => emit('update:sort', 'ascending', item.prop)\"\n >\n 升序\n </el-button>\n <el-button\n :class=\"[\n 'editable-table-sort-filter__sort-btn',\n checkActiveProp('descending', item.prop) &&\n 'editable-table-sort-filter__sort-btn--active',\n ]\"\n @click=\"() => emit('update:sort', 'descending', item.prop)\"\n >\n 降序\n </el-button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { IColumnConfig } from \"../../types\";\n\nconst props = defineProps<{\n column: IColumnConfig;\n tempSortType: \"ascending\" | \"descending\" | \"\";\n tempSortProp: string;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:sort\", type: \"ascending\" | \"descending\", prop: string): void;\n}>();\n\nconst checkActiveProp = (type: \"ascending\" | \"descending\", prop: string) => {\n return props.tempSortType === type && props.tempSortProp === prop;\n};\n\nconst sortConfigs = computed(() => {\n if (Array.isArray(props.column._sortable)) return props.column._sortable;\n return [{ ...props.column, label: \"排序\" }];\n});\n</script>\n","<!-- 单选框 -->\n<template>\n <div class=\"editable-table-sort-filter__filter\">\n <div class=\"editable-table-sort-filter__filter-title\">\n {{ config.label || \"筛选\" }}\n </div>\n <el-radio-group\n style=\"display: flex; flex-direction: column; gap: 6px\"\n :value=\"tempFilteredValue[config.prop]\"\n @input=\"(val) => emit('update:tempFilteredValue', config.prop, val)\"\n >\n <el-radio\n v-for=\"item in config.options\"\n :key=\"item.value\"\n :label=\"item.value\"\n :title=\"item.text\"\n >\n {{ item.text }}\n </el-radio>\n </el-radio-group>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { IFilterSelect } from \"../../types\";\n\ndefineProps<{\n config: IFilterSelect;\n tempFilteredValue: Record<string, string>;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n}>();\n</script>\n\n<style scoped lang=\"less\"></style>\n","<template>\n <el-popover\n ref=\"popoverRef\"\n placement=\"bottom\"\n trigger=\"click\"\n popper-class=\"editable-table-sort-filter\"\n data-popper-name=\"editable-table-sort-filter\"\n :data-prop=\"column.prop\"\n @show=\"() => emit('popover-show')\"\n >\n <template #reference>\n <slot name=\"custom\">\n <!-- 筛选中,或排序中,高亮 -->\n <span\n :class=\"[\n 'editable-table__sort-reference',\n headActive && 'editable-table__sort-reference--active',\n ]\"\n >\n {{ column.label }}\n <div\n :class=\"[\n 'editable-table__sort-icon',\n headActive && 'editable-table__sort-icon--active',\n ]\"\n />\n </span>\n </slot>\n </template>\n <div class=\"editable-table-sort-filter\">\n <div class=\"editable-table-sort-filter__column-title\">\n {{ column.label }}\n </div>\n\n <div class=\"editable-table-sort-filter__item\">\n <BizSortFilter\n v-if=\"column.isColumnSortable\"\n :column=\"column\"\n :temp-sort-prop=\"tempSortProp\"\n :temp-sort-type=\"tempSortType\"\n @update:sort=\"(type, prop) => emit('update:sort', type, prop)\"\n />\n </div>\n\n <template v-if=\"column.filters\">\n <div\n v-for=\"(filterItem, index) in column.filters\"\n :key=\"index\"\n class=\"editable-table-sort-filter__item editable-table__filter-group__filter\"\n >\n <slot\n v-if=\"filterItem.type === 'slot'\"\n :name=\"filterItem.slotName\"\n />\n <component\n v-else\n :is=\"componentMap[filterItem.type]\"\n :config=\"filterItem\"\n :temp-filtered-value=\"tempFilteredValue\"\n @update:tempFilteredValue=\"onUpdate\"\n />\n </div>\n </template>\n\n <div\n v-if=\"column.summary\"\n class=\"editable-table-sort-filter__item editable-table-sort-filter__filter\"\n >\n <div class=\"editable-table-sort-filter__filter-title\">统计</div>\n <el-checkbox-group\n class=\"editable-table-sort-filter__filter-checkbox-group\"\n :value=\"tempSummaryList\"\n @input=\"(val) => emit('update:tempSummaryList', val)\"\n >\n <el-checkbox\n :label=\"column.prop\"\n class=\"editable-table-sort-filter__filter-checkbox\"\n >\n <slot\n name=\"summay-item\"\n v-bind=\"column\"\n >\n {{ column.label }}\n </slot>\n </el-checkbox>\n </el-checkbox-group>\n </div>\n\n <div class=\"editable-table-sort-filter__footer\">\n <el-button\n class=\"editable-table-sort-filter__reset-btn\"\n @click=\"() => emit('reset')\"\n >\n 重置\n </el-button>\n <el-button\n class=\"editable-table-sort-filter__confirm-btn\"\n type=\"primary\"\n @click=\"() => emit('confirm')\"\n >\n 确定\n </el-button>\n </div>\n </div>\n </el-popover>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n\nimport BizCheckboxFilter from \"./BizCheckboxFilter.vue\";\nimport BizColorRadioFilter from \"./BizColorRadioFilter.vue\";\nimport BizDoubleDatePickerFilter from \"./BizDoubleDatePickerFilter.vue\";\nimport BizInputFilter from \"./BizInputFilter.vue\";\nimport BizMonthDayPicker from \"./BizMonthDayPicker.vue\";\nimport BizSortFilter from \"./BizSortFilter.vue\";\nimport BizRadioFilter from \"./BizRadioFilter.vue\";\nimport type { FilterItem, IColumnConfig } from \"../../types\";\n\ndefineProps<{\n headActive: boolean;\n column: IColumnConfig;\n tempSummaryList: string[];\n tempSortType: \"ascending\" | \"descending\" | \"\";\n tempSortProp: string;\n tempFilteredValue: Record<string, string | number | number[] | string[]>;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:tempFilteredValue\", key: string, value: string): void;\n (e: \"update:tempSummaryList\", value: string[]): void;\n (e: \"update:sort\", type: \"ascending\" | \"descending\", prop: string): void;\n (e: \"popover-show\"): void;\n (e: \"reset\"): void;\n (e: \"confirm\"): void;\n}>();\n\n// 把 filterItem.type 映射到组件\nconst componentMap: Record<Exclude<FilterItem[\"type\"], \"slot\">, any> = {\n /** 输入框 */\n input: BizInputFilter,\n /** 日期范围 */\n doubleDatePicker: BizDoubleDatePickerFilter,\n /** 单选框 */\n radio: BizRadioFilter,\n /** 复选框 */\n checkbox: BizCheckboxFilter,\n /** 月日选择器 */\n monthDayPicker: BizMonthDayPicker,\n /** 颜色选择器 */\n colorRadio: BizColorRadioFilter,\n};\n\nconst popoverRef = ref(null as any);\n\n// 统一的事件派发\nfunction onUpdate(key: string, val: any) {\n emit(\"update:tempFilteredValue\", key, val);\n}\n\ndefineExpose({\n close: () => {\n popoverRef.value?.doClose();\n },\n});\n</script>\n","<template>\n <el-popover\n ref=\"operationPopoverRef\"\n placement=\"bottom\"\n trigger=\"click\"\n popper-class=\"editable-table-operation-popover\"\n >\n <template #reference>\n <div\n class=\"editable-table-operation-popover__operation-reference btn-pointer\"\n >\n <el-button class=\"editable-table-operation-popover__operation-btn\">\n 操作\n </el-button>\n </div>\n </template>\n <div class=\"editable-table-operation-popover__operation\">\n <div\n v-if=\"defaultOperations.includes('delete')\"\n class=\"editable-table-operation-popover__operation-item btn-pointer\"\n @click=\"() => emit('delete')\"\n >\n 删除\n </div>\n <div\n v-if=\"defaultOperations.includes('edit')\"\n class=\"editable-table-operation-popover__operation-item btn-pointer\"\n @click=\"() => emit('edit')\"\n >\n 编辑\n </div>\n <div\n v-if=\"defaultOperations.includes('top')\"\n class=\"editable-table-operation-popover__operation-item btn-pointer\"\n @click=\"() => emit('rowPinToTop')\"\n >\n 置顶\n </div>\n <slot />\n </div>\n </el-popover>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport type { IDefaultOperationType } from \"../types\";\n\ndefineProps<{\n defaultOperations: IDefaultOperationType[];\n // hoveringCellInfo: {\n // rowIndex: number\n // columnProperty: string\n // }\n scope: any;\n}>();\n\nconst emit = defineEmits<{\n (e: \"edit\"): void;\n (e: \"delete\"): void;\n (e: \"rowPinToTop\"): void;\n}>();\n\nconst operationPopoverRef = ref(null as any);\n\ndefineExpose({\n doClose: () => operationPopoverRef.value?.doClose?.(),\n});\n</script>\n","<template>\n <el-config-provider :locale=\"zhCn\">\n <div class=\"editable-table\">\n <div\n v-if=\"!adaptedProps.hideViewSettingBtn\"\n class=\"editable-table__toolbar\"\n >\n <el-button @click=\"handleViewSettingShow\">\n <el-icon><Setting /></el-icon>\n 显示设置\n </el-button>\n </div>\n\n <biz-view-setting-dialog\n ref=\"bizViewSettingDialogRef\"\n :props=\"adaptedProps\"\n :actual-columns=\"actualColumns\"\n :showing-columns=\"showingColumns\"\n :view-setting-drag-sort-options=\"viewSettingDragSortOptions\"\n @update:leftFixedColumnCount=\"\n (val) => {\n leftFixedColumnCount = val;\n }\n \"\n @update:showingColumns=\"\n (val) => {\n showingColumns = val;\n }\n \"\n @update:viewSettingDragSortOptions=\"\n (val) => {\n viewSettingDragSortOptions = val;\n }\n \"\n @tableDoLayout=\"doTableLayout\"\n />\n\n <!-- 表格主体 -->\n <el-table\n ref=\"tableRef\"\n v-loading=\"loading\"\n :data=\"adaptedProps.dataList\"\n :row-style=\"setRowStyle\"\n :row-class-name=\"setRowClassName\"\n :cell-class-name=\"setCellClassName\"\n :show-summary=\"summaryList.length > 0\"\n :summary-method=\"tableSummaryMethod\"\n v-bind=\"$attrs\"\n @selection-change=\"handleSelectionChange\"\n @cell-mouse-enter=\"debouncedHoverHandler\"\n @header-dragend=\"doTableLayout\"\n @row-dblclick=\"\n (row, column, event) => emit('row-dblclick', { row, column, event })\n \"\n >\n <!-- 拖拽列 -->\n <el-table-column\n v-if=\"adaptedProps.rowDragAble\"\n width=\"30\"\n class-name=\"editable-table__drag-cell\"\n :fixed=\"leftFixedColumnCount > 0 ? 'left' : false\"\n >\n <template #default=\"scope\">\n <div\n class=\"row-drag-target editable-table__drag-icon\"\n :data-index=\"scope.$index\"\n @mousedown=\"currScope = scope\"\n >\n <div\n :data-index=\"scope.$index\"\n class=\"row-drag-target editable-table-drag-icon\"\n />\n </div>\n </template>\n </el-table-column>\n\n <!-- 展开行 -->\n <el-table-column\n v-if=\"adaptedProps.showExpand\"\n type=\"expand\"\n :fixed=\"leftFixedColumnCount > 0 ? 'left' : false\"\n class-name=\"no-inner-cell-border\"\n >\n <template #default=\"scope\">\n <slot\n name=\"expand\"\n :row=\"scope.row\"\n :$index=\"scope.$index\"\n />\n </template>\n </el-table-column>\n\n <!-- 序号列 -->\n <el-table-column\n v-if=\"showIndex\"\n type=\"index\"\n :fixed=\"leftFixedColumnCount > 0 ? 'left' : false\"\n width=\"60\"\n align=\"center\"\n />\n\n <!-- 颜色选择列 -->\n <el-table-column\n v-if=\"adaptedProps.colorList && adaptedProps.colorList.length > 0\"\n width=\"40px\"\n class-name=\"editable-table__color-column no-inner-cell-border\"\n :fixed=\"leftFixedColumnCount > 0 ? 'left' : false\"\n :filtered-value=\"\n Array.isArray(filteredValue[colorFilterConfig?.prop])\n ? (filteredValue[colorFilterConfig?.prop] as string[])\n : []\n \"\n >\n <template #header>\n <biz-table-header-popover\n v-if=\"colorFilterConfig\"\n :head-active=\"isColumnHeadActive(colorFilterConfig)\"\n :column=\"colorFilterConfig\"\n :temp-summary-list=\"tempSummaryList\"\n :temp-sort-prop=\"tempSortProp\"\n :temp-sort-type=\"tempSortType\"\n :temp-filtered-value=\"tempFilteredValue\"\n @update:tempSummaryList=\"(val) => (tempSummaryList = val)\"\n @update:tempFilteredValue=\"\n (key, value) => (tempFilteredValue[key] = value)\n \"\n @popover-show=\"() => handleHeaderPopoverShow(colorFilterConfig)\"\n @update:sort=\"handleSort\"\n @reset=\"() => handleHeaderOperationReset(colorFilterConfig)\"\n @confirm=\"() => handleHeaderOperationConfirm(colorFilterConfig)\"\n >\n <template #custom>\n <div class=\"editable-table__color-icon\" />\n </template>\n </biz-table-header-popover>\n <div\n v-else\n class=\"editable-table__color-icon\"\n />\n </template>\n <template #default=\"scope\">\n <biz-color-select\n :color-list=\"adaptedProps.colorList\"\n :scope=\"scope\"\n @row-bg-change=\"(params) => emit('row-bg-change', params)\"\n />\n </template>\n </el-table-column>\n\n <!-- 选择列 -->\n <el-table-column\n v-if=\"showSelection\"\n type=\"selection\"\n width=\"45\"\n align=\"center\"\n />\n\n <!-- 数据列 -->\n <el-table-column\n v-for=\"(column, index) in actualColumns\"\n :key=\"column.prop + index\"\n resizable\n class-name=\"editable-table__data-column\"\n :filtered-value=\"\n Array.isArray(filteredValue[column.prop])\n ? filteredValue[column.prop]\n : []\n \"\n v-bind=\"getColumnBindProps(column)\"\n >\n <!-- 列头弹窗 -->\n <template\n #header\n v-if=\"showColumnHeadSortIcon(column)\"\n >\n <biz-table-header-popover\n :head-active=\"isColumnHeadActive(column)\"\n :column=\"column\"\n :temp-summary-list=\"tempSummaryList\"\n :temp-sort-prop=\"tempSortProp\"\n :temp-sort-type=\"tempSortType\"\n :temp-filtered-value=\"tempFilteredValue\"\n @update:tempSummaryList=\"(val) => (tempSummaryList = val)\"\n @update:tempFilteredValue=\"\n (key, value) => (tempFilteredValue[key] = value)\n \"\n @popover-show=\"() => handleHeaderPopoverShow(column)\"\n @update:sort=\"handleSort\"\n @reset=\"() => handleHeaderOperationReset(column)\"\n @confirm=\"() => handleHeaderOperationConfirm(column)\"\n >\n <template #summay-item>\n <slot\n :name=\"column.prop + '-summay-item'\"\n v-bind=\"column\"\n >\n {{ column.label }}\n </slot>\n </template>\n <!-- 插槽透传 -->\n <template\n v-for=\"(_, name) in $slots\"\n #[name]=\"slotProps\"\n :key=\"name\"\n >\n <slot\n :name=\"name\"\n v-bind=\"slotProps || column\"\n />\n </template>\n </biz-table-header-popover>\n </template>\n\n <template #default=\"scope\">\n <!-- 操作列 -->\n <template v-if=\"column.prop === '$$operation'\">\n <!-- 非编辑状态 -->\n <template v-if=\"editingRowIndex !== scope.$index\">\n <biz-table-operate-popover\n ref=\"operationPopoverRef\"\n :default-operations=\"adaptedProps.defaultOperations\"\n :scope=\"scope\"\n @edit=\"() => handleEdit(scope)\"\n @delete=\"() => handleDelete(scope.row, scope.$index)\"\n @rowPinToTop=\"() => handleRowPinToTop(scope)\"\n >\n <slot\n name=\"custom-operation\"\n v-bind=\"scope\"\n />\n </biz-table-operate-popover>\n </template>\n <!-- 编辑状态 -->\n <template v-else>\n <div class=\"editable-table-operation-popover__save-cancel\">\n <el-button\n type=\"primary\"\n size=\"small\"\n @click=\"handleEditSave(scope.row)\"\n >\n 保存\n </el-button>\n <el-button\n size=\"small\"\n @click=\"handleEditCancel(scope.row)\"\n >\n 取消\n </el-button>\n </div>\n </template>\n </template>\n\n <!-- 普通列 - 编辑状态 -->\n <template v-else-if=\"editingRowIndex !== -1\">\n <!-- 当前行编辑中,内置编辑类型 -->\n <template\n v-if=\"editingRowIndex === scope.$index && column.editType\"\n >\n <el-input\n v-if=\"column.editType === 'input'\"\n v-model=\"editingRowData[column.prop]\"\n />\n <el-select\n v-else-if=\"column.editType === 'select'\"\n v-model=\"editingRowData[column.prop]\"\n >\n <el-option\n v-for=\"option in column.editOptions\"\n :key=\"option.value\"\n :label=\"option.label\"\n :value=\"option.value\"\n />\n </el-select>\n <el-date-picker\n v-else-if=\"column.editType === 'date'\"\n v-model=\"editingRowData[column.prop]\"\n type=\"date\"\n />\n </template>\n <!-- 当前行编辑中,自定义编辑类型 -->\n <template\n v-else-if=\"\n column.editSlotName && scope.$index === editingRowIndex\n \"\n >\n <slot\n :name=\"column.editSlotName\"\n :row=\"editingRowData\"\n :column=\"column\"\n :$index=\"scope.$index\"\n />\n </template>\n <!-- 当前行非编辑中 -->\n <template v-else>\n {{\n column.formatter\n ? column.formatter(\n scope.row,\n column,\n scope.row[column.prop],\n scope.$index\n )\n : scope.row[column.prop]\n }}\n </template>\n </template>\n\n <!-- hover状态渲染 -->\n <template v-else-if=\"column.hoverSlotName\">\n <slot\n v-if=\"\n scope.$index === hoveringCellInfo.rowIndex &&\n column.prop === hoveringCellInfo.columnProperty\n \"\n :name=\"column.hoverSlotName\"\n v-bind=\"scope\"\n />\n <slot\n v-else-if=\"column.slotName\"\n :name=\"column.slotName\"\n v-bind=\"scope\"\n />\n <template v-else>\n {{\n column.formatter\n ? column.formatter(\n scope.row,\n column,\n scope.row[column.prop],\n scope.$index\n )\n : scope.row[column.prop]\n }}\n </template>\n </template>\n\n <!-- 默认渲染列 -->\n <template v-else>\n <!-- 自定义显示插槽 -->\n <template v-if=\"column.slotName\">\n <slot\n :name=\"column.slotName\"\n v-bind=\"scope\"\n />\n </template>\n <!-- 默认显示 -->\n <template v-else>\n {{ formatCellValue(scope.row, column, scope.$index) }}\n </template>\n </template>\n </template>\n </el-table-column>\n </el-table>\n\n <!-- 分页 -->\n <div\n v-if=\"total\"\n class=\"editable-table__pagination\"\n >\n <el-pagination\n v-model:current-page=\"currentPage\"\n v-model:page-size=\"pageSize\"\n :total=\"total\"\n :page-sizes=\"pageSizes\"\n :layout=\"paginationLayout\"\n @current-change=\"handlePageChange\"\n @size-change=\"handleSizeChange\"\n />\n </div>\n </div>\n </el-config-provider>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, toRefs, nextTick, useSlots } from \"vue\";\n// @ts-ignore\nimport zhCn from \"element-plus/dist/locale/zh-cn.mjs\";\n\nimport BizViewSettingDialog from \"./features/bizViewSettingDialog.vue\";\nimport BizColorSelect from \"./features/bizColorSelect.vue\";\nimport BizTableHeaderPopover from \"./features/bizTableHeaderPopover/index.vue\";\nimport BizTableOperatePopover from \"./features/bizTableOperatePopover.vue\";\n\nimport \"./styles/index.less\";\n\nimport {\n ElTable,\n ElTableColumn,\n ElPagination,\n ElButton,\n ElInput,\n ElSelect,\n ElOption,\n ElDatePicker,\n ElIcon,\n ElConfigProvider,\n} from \"element-plus\";\nimport { Setting } from \"@element-plus/icons-vue\";\nimport type { EditableTableProps, EditableTableEmits } from \"./types\";\nimport {\n usePagination,\n useTableRender,\n useDragSort,\n useRowBgColor,\n useCellHover,\n useColumnHeaderOperation,\n useDefaultOperation,\n useViewSetting,\n} from \"./hooks\";\n\n// 定义组件选项\ndefineOptions({\n name: \"EditableTable\",\n inheritAttrs: false,\n});\n\n// 定义 Props\nconst props = withDefaults(defineProps<EditableTableProps>(), {\n data: () => [],\n columns: () => [],\n showIndex: false,\n showSelection: false,\n showExpand: false,\n hasExpandRow: false,\n draggable: false,\n loading: false,\n operations: () => [],\n colorOptions: () => [],\n colorFilterConfig: undefined,\n hideColumnSetting: false,\n leftFixedCount: 1,\n currentPage: 1,\n pageSize: 10,\n pageSizes: () => [10, 20, 50, 100],\n total: 0,\n dragRange: 15,\n paginationLayout: \"total, sizes, prev, pager, next, jumper\",\n // 兼容旧版本属性\n dataList: () => [],\n columnConfig: () => [],\n rowDragAble: false,\n colorList: () => [],\n defaultOperations: () => [],\n hideViewSettingBtn: false,\n settingStorgeKey: \"\",\n columnSettingKey: \"\",\n});\n\nconst bizViewSettingDialogRef = ref(\n null as unknown as InstanceType<typeof BizViewSettingDialog>\n);\n\n/**\n * 打开列显示设置\n */\nconst handleViewSettingShow = () => {\n bizViewSettingDialogRef.value?.open();\n};\n\n// 定义 Emits\nconst emit = defineEmits<EditableTableEmits>();\n\n// 获取插槽\nconst $slots = useSlots();\n\n// Props 适配:兼容旧版本字段名\nconst adaptedProps = computed(() => ({\n ...props,\n columnConfig: props.columns?.length\n ? props.columns\n : props.columnConfig || [],\n settingStorgeKey: props.columnSettingKey || props.settingStorgeKey,\n dragSemiRange: props.dragRange || props.dragSemiRange,\n dataList: props.data?.length ? props.data : props.dataList || [],\n rowDragAble: props.draggable || props.rowDragAble,\n colorList: props.colorOptions?.length\n ? props.colorOptions\n : props.colorList || [],\n defaultOperations: props.operations?.length\n ? props.operations\n : props.defaultOperations || [],\n hideViewSettingBtn: props.hideColumnSetting || props.hideViewSettingBtn,\n showExpand: props.showExpand || props.hasExpandRow,\n}));\n\n// 表格引用\nconst tableRef = ref<InstanceType<typeof ElTable>>();\n\n// 拖拽相关\nconst currScope = ref<any>(null);\n\n// 可见的列(由useViewSetting管理)\nconst showingColumns = ref<string[]>([]);\n\n// 左侧固定列数量(由useViewSetting管理)\nconst leftFixedColumnCount = ref(0);\n\n// 显示设置弹窗中的拖拽排序选项(由useViewSetting管理)\nconst viewSettingDragSortOptions = ref<any[]>([]);\n\n// 使用 Hooks\nconst { currentPage, pageSize, handlePageChange, handleSizeChange } =\n usePagination(props, emit as any);\n\n/**\n * 刷新表格布局\n */\nconst doTableLayout = async () => {\n await nextTick();\n tableRef.value?.doLayout();\n};\n\n// 列头部操作(排序、筛选、统计)- 需要在actualColumns之前调用,因为actualColumns依赖inSorting\nconst {\n setSort,\n clearSort,\n setSearchParams,\n isColumnHeadActive,\n handleSort,\n handleHeaderPopoverShow,\n handleHeaderOperationConfirm,\n handleHeaderOperationReset,\n summaryList,\n tableSummaryMethod,\n filteredValue,\n showColumnHeadSortIcon,\n sortProp,\n tempFilteredValue,\n tempSummaryList,\n tempSortType,\n tempSortProp,\n isColumnFiltering,\n inSorting,\n} = useColumnHeaderOperation({\n tableDomRef: tableRef,\n props: adaptedProps.value,\n emit: emit as any,\n showingColumns,\n});\n\n// 实际渲染的列(基于显示列和固定列数量计算)\nconst actualColumns = computed(() => {\n const res: any[] = [];\n let cnt = leftFixedColumnCount.value;\n\n // 根据显示列和固定列数量生成实际列配置\n for (const prop of showingColumns.value) {\n const rawItem = adaptedProps.value.columnConfig.find(\n (c) => c.prop === prop\n );\n if (!rawItem) continue;\n\n const item = { ...rawItem };\n // 添加排序逻辑支持\n item.isColumnSortable = !!rawItem.sortable;\n item.sortable = inSorting.value ? !!rawItem.sortable : false;\n item._sortable = rawItem.sortable;\n\n if (cnt > 0) {\n item.fixed = \"left\";\n cnt--;\n } else {\n item.fixed = undefined;\n }\n res.push(item);\n }\n\n // 如果有操作按钮,添加操作列\n if (\n adaptedProps.value.defaultOperations &&\n adaptedProps.value.defaultOperations.length > 0\n ) {\n res.push({\n label: \"操作\",\n prop: \"$$operation\",\n minWidth: \"100px\",\n fixed: \"right\",\n });\n }\n\n return res;\n});\n\n// 列显示设置管理(持久化)\nconst viewSettingEmit = (event: string, value?: any) => {\n switch (event) {\n case \"update:leftFixedColumnCount\":\n leftFixedColumnCount.value = value;\n break;\n case \"update:showingColumns\":\n showingColumns.value = value;\n break;\n case \"update:viewSettingDragSortOptions\":\n viewSettingDragSortOptions.value = value;\n break;\n case \"tableDoLayout\":\n doTableLayout();\n break;\n }\n};\n\nuseViewSetting({\n showingColumns,\n actualColumns,\n props: adaptedProps.value,\n viewSettingDragSortOptions,\n emit: viewSettingEmit as any,\n});\n\nconst { hasSlot, hasEditSlot, formatCellValue } = useTableRender(\n props,\n showingColumns,\n leftFixedColumnCount\n);\n\nconst {\n operationPopoverRef,\n editingRowData,\n editingRowIndex,\n handleDelete,\n closeAllExpandedRows,\n handleEdit,\n handleEditSave,\n handleEditCancel,\n handleRowPinToTop,\n} = useDefaultOperation({\n emit: emit as any,\n tableDomRef: tableRef,\n pageSize,\n props,\n hasExpandRow: adaptedProps.value.showExpand,\n});\n\n// 行背景色\nconst { setRowStyle } = useRowBgColor({\n colorList: adaptedProps.value.colorList || [],\n emit: emit as any,\n});\n\n// 行类名\nconst setRowClassName = ({ row, rowIndex }: { row: any; rowIndex: number }) => {\n return [\n \"custom-row-classname\",\n `custom-row-classname-${rowIndex}`,\n row.isPinned ? \"custom-row-classname-pinned\" : \"\",\n ].join(\" \");\n};\n\n// 单元格悬浮\nconst { hoveringCellInfo, setCellClassName, debouncedHoverHandler } =\n useCellHover(tableRef);\n\n/**\n * 拖拽前的检查\n */\nconst beforeDragStart = () => {\n // 关闭编辑状态\n editingRowIndex.value = -1;\n\n // 如果有列存在排序,不允许拖拽\n if (sortProp.value) {\n console.warn(\"已有列正在排序,不允许拖拽。\");\n return false;\n }\n\n // 如果有列存在筛选,不允许拖拽\n if (isColumnFiltering.value) {\n console.warn(\"已有列正在筛选,不允许拖拽。\");\n return false;\n }\n\n return true;\n};\n\n// 拖拽排序(需要旧字段名的 hook)\nuseDragSort({\n props: adaptedProps.value,\n emit: emit as any,\n viewSettingDragSortOptions,\n beforeDragStart,\n currScope,\n currentPage,\n pageSize,\n tableDomRef: tableRef,\n});\n\n/**\n * 处理选择变化\n */\nconst handleSelectionChange = (selection: any[]) => {\n emit(\"selection-change\", selection);\n};\n\n/**\n * 获取列绑定属性(过滤自定义属性)\n */\nconst getColumnBindProps = (column: any) => {\n const {\n editType,\n editSlotName,\n editOptions,\n slotName,\n hoverSlotName,\n formatter,\n filters,\n showFilterIcon,\n summary,\n summaryMethod,\n alwaysShow,\n defaultHide,\n isColumnSortable,\n _sortable,\n ...rest\n } = column;\n\n // 处理 sortable,如果是数组则不允许排序\n if (Array.isArray(rest.sortable)) {\n rest.sortable = false;\n }\n\n return rest;\n};\n\n// 暴露方法\ndefineExpose({\n tableRef,\n clearSelection: () => tableRef.value?.clearSelection(),\n toggleRowSelection: (row: any, selected?: boolean) =>\n tableRef.value?.toggleRowSelection(row, selected),\n toggleAllSelection: () => tableRef.value?.toggleAllSelection(),\n setCurrentRow: (row: any) => tableRef.value?.setCurrentRow(row),\n clearSort: () => tableRef.value?.clearSort(),\n clearFilter: (columnKey?: string) => tableRef.value?.clearFilter(columnKey),\n doLayout: () => tableRef.value?.doLayout(),\n sort: (prop: string, order: string) => tableRef.value?.sort(prop, order),\n // 新增暴露方法\n setSort,\n setSearchParams,\n closeAllExpandedRows,\n});\n</script>\n\n<style scoped lang=\"less\">\n.editable-table {\n width: 100%;\n\n &__toolbar {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 16px;\n }\n\n &__pagination {\n display: flex;\n justify-content: flex-end;\n margin-top: 16px;\n padding: 16px 0;\n }\n\n &__color-column {\n padding: 0 !important;\n\n & .cell {\n padding: 0 !important;\n height: 100%;\n display: flex !important;\n justify-content: center;\n align-items: center;\n text-align: center;\n border: none !important;\n }\n }\n\n &__color-icon {\n padding: 0 !important;\n margin-left: 8px;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n position: relative;\n background-color: #fcae46;\n cursor: pointer;\n overflow: visible !important;\n\n &::before {\n background-color: #fc6559;\n left: -10px;\n z-index: 2;\n }\n\n &::after {\n background-color: #409eff;\n left: -5px;\n z-index: 1;\n }\n\n &::before,\n &::after {\n content: \"\";\n width: 8px;\n height: 8px;\n border-radius: 50%;\n position: absolute;\n top: 0;\n }\n }\n\n &__selected-color {\n position: absolute;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n }\n\n &__drag-cell {\n cursor: move;\n }\n}\n\n.editable-table-operation-popover {\n &__operation-reference {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n &__operation-btn {\n padding: 4px 12px;\n font-size: 12px;\n border-radius: 2px;\n }\n\n &__operation {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 8px 0;\n }\n\n &__operation-item {\n padding: 8px 16px;\n font-size: 14px;\n color: #606266;\n cursor: pointer;\n transition: background-color 0.3s;\n\n &:hover {\n background-color: #f5f7fa;\n color: #2468f2;\n }\n }\n\n &__save-cancel {\n display: flex;\n gap: 8px;\n }\n}\n\n.no-inner-cell-border {\n border-bottom: none !important;\n}\n\n// 颜色选择器弹窗样式\n.editable-table-color-popover {\n .color-list {\n color: #fff;\n width: 102px;\n border-radius: 5px;\n overflow: hidden;\n\n &__item {\n display: inline-block;\n width: 100%;\n height: 27px;\n line-height: 27px;\n padding-left: 6px;\n cursor: pointer;\n\n &:hover {\n opacity: 0.8;\n }\n\n span {\n font-size: 12px;\n }\n }\n }\n}\n</style>\n\n<style lang=\"less\">\n@--theme-blue--: #2468f2;\n\n// 排序图标样式\n.editable-table__sort-icon {\n position: relative;\n width: 12px;\n height: 12px;\n border: 1px solid #7b7b7b;\n padding: 0 !important;\n margin-left: 4px;\n border-radius: 50%;\n\n &::after {\n position: absolute;\n top: 50%;\n left: 50%;\n content: \"\";\n width: 3px;\n height: 3px;\n border-bottom: 1px solid;\n border-left: 1px solid;\n border-color: #7b7b7b;\n transform: translate(-50%, -55%) rotate(-45deg);\n }\n\n &--active {\n border: 1px solid @--theme-blue--;\n\n &::after {\n border-color: @--theme-blue--;\n }\n }\n}\n\n.editable-table__sort-reference {\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n\n &:hover {\n cursor: pointer;\n }\n\n &--active {\n color: @--theme-blue--;\n }\n}\n\n// 排序筛选弹窗样式\n.editable-table-sort-filter {\n padding: 0 !important;\n width: 258px;\n\n &__column-title {\n font-size: 14px;\n font-weight: 600;\n height: 40px;\n line-height: 40px;\n text-align: center;\n border-bottom: 1px solid #d6dbe3;\n }\n\n &__item {\n margin-top: 14px;\n }\n\n &__date-picker-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n .el-date-editor.el-input,\n .el-date-editor.el-input__inner {\n width: 100%;\n }\n }\n\n &__filter,\n &__search {\n padding: 0 14px;\n\n .el-select {\n width: 100%;\n }\n\n .el-radio {\n width: 100%;\n margin-top: 10px;\n\n &:first-child {\n margin-top: 0;\n }\n }\n\n .el-radio__input {\n line-height: 10px;\n }\n\n .el-radio__inner {\n width: 14px;\n height: 14px;\n }\n\n .el-radio__label {\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n width: calc(100% - 20px);\n display: inline-block;\n vertical-align: middle;\n font-size: 12px;\n line-height: normal;\n }\n }\n\n &__filter {\n .el-radio-group,\n .el-checkbox-group {\n max-height: 166px;\n overflow-y: auto;\n overflow-x: hidden;\n }\n }\n\n &__sort {\n padding: 0 14px;\n display: flex;\n flex-direction: column;\n }\n\n &__filter-title,\n &__sort-title,\n &__search-title {\n font-weight: 600;\n font-size: 14px;\n color: #1f1f1f;\n margin-bottom: 10px;\n }\n\n &__search {\n &-input {\n & .el-input__inner {\n height: 32px;\n }\n }\n\n &__date-range {\n display: flex;\n flex-direction: column;\n gap: 12px;\n\n .el-date-editor.el-input,\n .el-date-editor.el-input__inner {\n width: 100%;\n }\n }\n }\n\n &__sort-btns {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n & .el-button {\n border: none;\n }\n }\n\n &__sort-btn.el-button {\n width: 112px;\n height: 28px;\n padding: 4px 42px;\n display: inline-block;\n background-color: #f4f4f4;\n color: #4a4a4a;\n\n &:hover {\n background-color: #fafafa;\n }\n }\n\n &__sort-btn--active.el-button {\n color: @--theme-blue--;\n border-color: #eef3ff;\n background: #f4f7fe;\n\n &:hover {\n background-color: #f4f7fe;\n }\n }\n\n &__filter-checkbox-group {\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n }\n\n &__filter-checkbox {\n margin-top: 10px;\n font-size: 14px;\n width: 100%;\n\n &:first-child {\n margin-top: 0;\n }\n\n .el-checkbox__input {\n line-height: 10px;\n }\n\n .el-checkbox__label {\n white-space: nowrap;\n overflow-x: hidden;\n text-overflow: ellipsis;\n width: calc(100% - 20px);\n display: inline-block;\n vertical-align: middle;\n font-size: 12px;\n line-height: normal;\n }\n }\n\n &__footer {\n display: flex;\n height: 47px;\n border-top: 1px solid #d6dbe3;\n justify-content: flex-end;\n align-items: center;\n padding: 0 15px;\n margin-top: 14px;\n }\n\n &__reset-btn,\n &__confirm-btn {\n &.el-button {\n width: 50px;\n height: 28px;\n margin-left: 10px;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 2px;\n font-size: 14px;\n font-weight: 400;\n }\n }\n\n &__confirm-btn.el-button {\n background-color: @--theme-blue--;\n border-color: @--theme-blue--;\n }\n\n .el-checkbox__input.is-checked .el-checkbox__inner,\n .el-radio__input.is-checked .el-radio__inner {\n background: @--theme-blue--;\n border-color: @--theme-blue--;\n }\n\n .el-checkbox__input.is-checked + .el-checkbox__label,\n .el-radio__input.is-checked + .el-radio__label {\n color: @--theme-blue--;\n }\n}\n\n// 拖拽图标全局样式\n.editable-table-drag-icon {\n position: relative;\n width: 5px;\n height: 2px;\n border-left: 2px solid #989ea9;\n border-right: 2px solid #989ea9;\n cursor: grab;\n\n &::after,\n &::before {\n position: absolute;\n content: \"\";\n box-sizing: border-box;\n left: -2px;\n display: block;\n width: 5px;\n height: 2px;\n border-left: 2px solid #989ea9;\n border-right: 2px solid #989ea9;\n }\n\n &::after {\n top: -4px;\n }\n\n &::before {\n bottom: -4px;\n }\n}\n</style>\n","import type { App } from \"vue\";\nimport EditableTable from \"./components/EditableTable/index.vue\";\n\n// 导出组件\nexport { EditableTable };\n\n// 导出 EditableTable 类型\nexport type {\n ColumnConfig as EditableColumnConfig,\n EditableTableProps,\n EditableTableEmits,\n EditType,\n SortOption,\n FilterConfig,\n InputFilterConfig,\n SelectFilterConfig,\n DateRangeFilterConfig,\n ColorFilterConfig,\n SlotFilterConfig,\n ColorOption,\n PaginationParams as EditablePaginationParams,\n SortParams as EditableSortParams,\n DragState,\n} from \"./components/EditableTable/types\";\n\n// 默认导出\nexport default EditableTable;\n\n// Vue 插件安装方法\nexport const install = (app: App) => {\n app.component(\"EditableTable\", EditableTable);\n};\n\n// 作为插件使用\nEditableTable.install = install;\n"],"names":["zh_cn_default","usePagination","props","emit","currentPage","ref","pageSize","watch","val","page","size","useTableRender","visibleColumns","leftFixedCount","computed","prop","c","column","index","row","value","isObject","type","isObject_1","freeGlobal","global","_freeGlobal","require$$0","freeSelf","root","_root","now","now_1","reWhitespace","trimmedEndIndex","string","_trimmedEndIndex","reTrimStart","baseTrim","_baseTrim","Symbol","_Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","isOwn","tag","unmasked","result","_getRawTag","objectToString","_objectToString","require$$1","require$$2","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol","isSymbol_1","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","other","isBinary","toNumber_1","FUNC_ERROR_TEXT","nativeMax","nativeMin","debounce","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","timerExpired","remainingWait","timeSinceLastCall","timeSinceLastInvoke","timeWaiting","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","debounce_1","throttle","throttle_1","useDragSort","viewSettingDragSortOptions","beforeDragStart","currScope","tableDomRef","draggingData","isMouseDown","dragType","isOperating","onMounted","handleDocumentMouseDown","handleDocumentMouseMove","handleDocumentMouseUp","onBeforeUnmount","e","target","_a","handleDragMouseDown","handleViewSettingDragMouseDown","throttledMoveHandler","handleDragDrop","handleViewSettingDragDrop","event","draggingIndex","rows","rowDoms","i","clsIndex","cls","dragSemiRange","rowdom","el","tds","dom","pre","curr","td","fullScreenDiv","rect","calcPositionRowShouldBePlace","rowsRange","draggingClientY","rangeLeft","rangeRight","top","bottom","clearMovingData","rowdoms","_b","_c","scope","dropIndex","dragIndex","dataList","_e","_d","_g","_f","movedRow","newList","_j","_i","_h","item","handleMove","y","draggingRow","idx","rowHeight","doms","useRowBgColor","colorList","isDefaultColor","id","getColorById","colorId","rowIndex","useCellHover","hoveringCellInfo","isMouseWheeling","resetHoveringCellInfo","throttledHandleMouseWheel","setCellClassName","timerHandler","debouncedHoverHandler","cell","targetElement","className","foundClass","matchArr","useDefaultOperation","hasExpandRow","operationPopoverRef","editingRowData","editingRowIndex","handleDelete","closeOperationPopover","closeAllExpandedRows","changedData","key","store","useColumnHeaderOperation","showingColumns","inSorting","sortType","sortProp","tempSortType","tempSortProp","filteredValue","tempFilteredValue","tempSummaryList","summaryList","isColumnFiltering","showColumnHeadSortIcon","isColumnSortable","filters","v","handleResetFilterValue","tableSummaryMethod","param","columns","data","sums","values","isColumnHeadActive","_sortable","currentFilterActive","start","end","isUseSort","handleHeaderPopoverShow","closeSortAndFilterPopover","exceptProp","handleSort","columnMap","obj","emitSearch","params","processFilter","handleHeaderOperationConfirm","inputFilters","nextTick","clearSort","setSort","_filteredValue","storgeSchemaMigrationConfig","config","acc","useViewSetting","actualColumns","columnsToBeShown","viewSettingVisible","leftFixedColumnCount","tempLeftFixedColumnCount","updateShowingColumns","storageKey","saveSettingToStorge","settingStorgeMigrationConfigs","len","version","_index","handleViewSettingShow","handleViewSettingClose","handleViewSettingConfirm","handleInputTempLeftFixedColumnCount","_value","_cache","setColumns","handleMigration","schemaVersion","__cache","bizMigrationConfigs","_versionIndex","cache","a","b","_leftFixedColumnCount","error","oldVal","_map","__emit","_props","__props","toRefs","handleColumnClose","__expose","_createBlock","_unref","ElDialog","$event","_createVNode","ElButton","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","ElCheckboxGroup","_openBlock","_createElementBlock","_Fragment","_renderList","ElCheckbox","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","ElInput","_hoisted_9","_hoisted_10","_hoisted_13","_normalizeClass","ElIcon","Close","handleColorChange","visible","handleClick","_component_el_popover","color","_normalizeStyle","_component_el_checkbox_group","_component_el_checkbox","_createTextVNode","_component_el_radio_group","_component_el_radio","genStartDateDisabledOptions","endDate","limit","currentDate","dayjs","baseOption","genEndDateDisabledOptions","startDate","datePickerCommonProps","pickerStartOptions","pickerEndOptions","handleStartDateChange","handleEndDateChange","_component_el_date_picker","_mergeProps","_component_el_input","monthConfig","getMonthDayPickerDefaultOptions","_","disableOutOfRangeOptions","date","isStartDate","digits","month","children","day","disabled","baseDate","maxDate","minDate","formatMonthDayPickerValue","str","formatDate","startDateOptions","endDateOptions","handleDateChange","currentValue","_component_el_cascader","checkActiveProp","sortConfigs","_component_el_button","componentMap","BizInputFilter","BizDoubleDatePickerFilter","BizRadioFilter","BizCheckboxFilter","BizMonthDayPicker","BizColorRadioFilter","popoverRef","onUpdate","_renderSlot","_ctx","BizSortFilter","filterItem","_resolveDynamicComponent","_normalizeProps","_guardReactiveProps","bizViewSettingDialogRef","$slots","useSlots","adaptedProps","tableRef","handlePageChange","handleSizeChange","doTableLayout","setSearchParams","handleHeaderOperationReset","res","cnt","rawItem","viewSettingEmit","hasSlot","hasEditSlot","formatCellValue","handleEdit","handleEditSave","handleEditCancel","handleRowPinToTop","setRowStyle","setRowClassName","handleSelectionChange","selection","getColumnBindProps","editType","editSlotName","editOptions","slotName","hoverSlotName","formatter","showFilterIcon","summary","summaryMethod","alwaysShow","defaultHide","rest","selected","columnKey","order","ElConfigProvider","zhCn","Setting","BizViewSettingDialog","_withDirectives","$attrs","ElTableColumn","_withCtx","BizTableHeaderPopover","BizColorSelect","_createSlots","BizTableOperatePopover","ElSelect","option","ElOption","ElDatePicker","name","slotProps","ElPagination","paginationLayout","install","app","EditableTable"],"mappings":"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","x_google_ignoreList":[0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]}
@@ -1,31 +0,0 @@
1
- import { IColorList, ITableDataItem } from '../types';
2
-
3
- declare const _default: import('../../../../vue/dist/vue.esm-bundler.js').DefineComponent<import('../../../../vue/dist/vue.esm-bundler.js').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
- colorList: IColorList;
5
- scope: any;
6
- }>>, {}, {}, {}, {}, import('../../../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, import('../../../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, {
7
- "row-bg-change": (param: {
8
- colorId: number;
9
- row: ITableDataItem;
10
- rowIndex: number;
11
- }) => void;
12
- }, string, import('../../../../vue/dist/vue.esm-bundler.js').PublicProps, Readonly<import('../../../../vue/dist/vue.esm-bundler.js').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
13
- colorList: IColorList;
14
- scope: any;
15
- }>>> & Readonly<{
16
- "onRow-bg-change"?: ((param: {
17
- colorId: number;
18
- row: ITableDataItem;
19
- rowIndex: number;
20
- }) => any) | undefined;
21
- }>, {}, {}, {}, {}, string, import('../../../../vue/dist/vue.esm-bundler.js').ComponentProvideOptions, true, {}, any>;
22
- export default _default;
23
- type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
24
- type __VLS_TypePropsToRuntimeProps<T> = {
25
- [K in keyof T]-?: {} extends Pick<T, K> ? {
26
- type: import('../../../../vue/dist/vue.esm-bundler.js').PropType<__VLS_NonUndefinedable<T[K]>>;
27
- } : {
28
- type: import('../../../../vue/dist/vue.esm-bundler.js').PropType<T[K]>;
29
- required: true;
30
- };
31
- };
@@ -1,23 +0,0 @@
1
- import { IFilterSelect } from '../../types';
2
-
3
- declare const _default: import('../../../../../vue/dist/vue.esm-bundler.js').DefineComponent<import('../../../../../vue/dist/vue.esm-bundler.js').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
- config: IFilterSelect;
5
- tempFilteredValue: Record<string, string>;
6
- }>>, {}, {}, {}, {}, import('../../../../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, import('../../../../../vue/dist/vue.esm-bundler.js').ComponentOptionsMixin, {
7
- "update:tempFilteredValue": (key: string, value: string) => void;
8
- }, string, import('../../../../../vue/dist/vue.esm-bundler.js').PublicProps, Readonly<import('../../../../../vue/dist/vue.esm-bundler.js').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
9
- config: IFilterSelect;
10
- tempFilteredValue: Record<string, string>;
11
- }>>> & Readonly<{
12
- "onUpdate:tempFilteredValue"?: ((key: string, value: string) => any) | undefined;
13
- }>, {}, {}, {}, {}, string, import('../../../../../vue/dist/vue.esm-bundler.js').ComponentProvideOptions, true, {}, any>;
14
- export default _default;
15
- type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
16
- type __VLS_TypePropsToRuntimeProps<T> = {
17
- [K in keyof T]-?: {} extends Pick<T, K> ? {
18
- type: import('../../../../../vue/dist/vue.esm-bundler.js').PropType<__VLS_NonUndefinedable<T[K]>>;
19
- } : {
20
- type: import('../../../../../vue/dist/vue.esm-bundler.js').PropType<T[K]>;
21
- required: true;
22
- };
23
- };