@dt-frames/ui 2.0.1 → 2.0.3

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 (220) hide show
  1. package/es/assets/data/icons/actions.d.ts +1 -0
  2. package/es/assets/data/icons/actions.ts +423 -0
  3. package/es/assets/data/icons/code.d.ts +1 -0
  4. package/es/assets/data/icons/code.ts +10 -0
  5. package/es/assets/data/icons/commuticate.d.ts +1 -0
  6. package/es/assets/data/icons/commuticate.ts +182 -0
  7. package/es/assets/data/icons/currency.d.ts +1 -0
  8. package/es/assets/data/icons/currency.ts +44 -0
  9. package/es/assets/data/icons/devices.d.ts +1 -0
  10. package/es/assets/data/icons/devices.ts +126 -0
  11. package/es/assets/data/icons/edit.d.ts +1 -0
  12. package/es/assets/data/icons/edit.ts +163 -0
  13. package/es/assets/data/icons/file.d.ts +1 -0
  14. package/es/assets/data/icons/file.ts +99 -0
  15. package/es/assets/data/icons/math.d.ts +1 -0
  16. package/es/assets/data/icons/math.ts +53 -0
  17. package/es/assets/data/icons/message.d.ts +1 -0
  18. package/es/assets/data/icons/message.ts +68 -0
  19. package/es/assets/data/icons/navigate.d.ts +1 -0
  20. package/es/assets/data/icons/navigate.ts +181 -0
  21. package/es/assets/data/icons/other.d.ts +1 -0
  22. package/es/assets/data/icons/other.ts +324 -0
  23. package/es/assets/data/index.d.ts +4 -0
  24. package/es/assets/data/index.ts +58 -0
  25. package/es/assets/icons/iconfont.css +7266 -0
  26. package/es/assets/icons/iconfont.eot +0 -0
  27. package/es/assets/icons/iconfont.svg +5445 -0
  28. package/es/assets/icons/iconfont.ttf +0 -0
  29. package/es/assets/icons/iconfont.woff +0 -0
  30. package/es/assets/icons/iconfont.woff2 +0 -0
  31. package/es/assets/imgs/header/avatar.png +0 -0
  32. package/es/assets/imgs/logo/logo.png +0 -0
  33. package/es/assets/imgs/table/empty.png +0 -0
  34. package/es/assets/locales/en.d.ts +101 -0
  35. package/es/assets/locales/en.ts +101 -0
  36. package/es/assets/locales/index.d.ts +2 -0
  37. package/es/assets/locales/index.ts +5 -0
  38. package/es/assets/locales/zh.d.ts +103 -0
  39. package/es/assets/locales/zh.ts +103 -0
  40. package/es/components/container/index.d.ts +94 -0
  41. package/es/components/container/index.js +290 -0
  42. package/es/components/container/index.less +64 -0
  43. package/es/components/container/src/components/bar.d.ts +14 -0
  44. package/es/components/container/src/components/scroll-bar.d.ts +70 -0
  45. package/es/components/container/src/hooks/scroll.d.ts +10 -0
  46. package/es/components/container/src/scroll-container.d.ts +76 -0
  47. package/es/components/container/src/slot-container.d.ts +20 -0
  48. package/es/components/container/src/types/scroll.type.d.ts +22 -0
  49. package/es/components/container/src/utils/scroll.d.ts +5 -0
  50. package/es/components/curd/index.d.ts +2 -0
  51. package/es/components/curd/index.js +3120 -0
  52. package/es/components/curd/src/components/Curd.d.ts +1246 -0
  53. package/es/components/curd/src/hooks/useCurd.d.ts +112 -0
  54. package/es/components/curd/src/props.d.ts +187 -0
  55. package/es/components/curd/src/types/curd.type.d.ts +19 -0
  56. package/es/components/drawer/index.d.ts +8039 -0
  57. package/es/components/drawer/index.js +838 -0
  58. package/es/components/drawer/index.less +10 -0
  59. package/es/components/drawer/src/components/DrawerFooter.d.ts +139 -0
  60. package/es/components/drawer/src/components/DrawerHeader.d.ts +11 -0
  61. package/es/components/drawer/src/hooks/useDrawer.d.ts +3 -0
  62. package/es/components/drawer/src/index.d.ts +8041 -0
  63. package/es/components/drawer/src/props.d.ts +64 -0
  64. package/es/components/drawer/src/types/index.type.d.ts +48 -0
  65. package/es/components/form/index.d.ts +3219 -0
  66. package/es/components/form/index.js +1896 -0
  67. package/es/components/form/index.less +141 -0
  68. package/es/components/form/src/components/FormButtons.d.ts +88 -0
  69. package/es/components/form/src/components/FormItem.d.ts +165 -0
  70. package/es/components/form/src/components/componentMap.d.ts +4 -0
  71. package/es/components/form/src/components/formIcon.d.ts +1231 -0
  72. package/es/components/form/src/components/formInputUseDialog.d.ts +911 -0
  73. package/es/components/form/src/components/index.d.ts +4 -0
  74. package/es/components/form/src/components/radioButton.d.ts +34 -0
  75. package/es/components/form/src/enums/index.d.ts +7 -0
  76. package/es/components/form/src/hooks/helper.d.ts +14 -0
  77. package/es/components/form/src/hooks/useForm.d.ts +6 -0
  78. package/es/components/form/src/hooks/useFormActions.d.ts +12 -0
  79. package/es/components/form/src/hooks/useFormEvent.d.ts +25 -0
  80. package/es/components/form/src/hooks/useFormValue.d.ts +3 -0
  81. package/es/components/form/src/hooks/useFormValues.d.ts +11 -0
  82. package/es/components/form/src/hooks/useLabelWidth.d.ts +22 -0
  83. package/es/components/form/src/index.d.ts +2965 -0
  84. package/es/components/form/src/props.d.ts +133 -0
  85. package/es/components/form/src/types/actions.type.d.ts +15 -0
  86. package/es/components/form/src/types/form.type.d.ts +70 -0
  87. package/es/components/icons/index.d.ts +497 -0
  88. package/es/components/icons/index.js +1969 -0
  89. package/es/components/icons/index.less +42 -0
  90. package/es/components/icons/src/pick-icon.d.ts +455 -0
  91. package/es/components/icons/src/svg-icon.d.ts +44 -0
  92. package/es/components/modal/index.d.ts +3 -0
  93. package/es/components/modal/index.js +1193 -0
  94. package/es/components/modal/index.less +54 -0
  95. package/es/components/modal/src/components/CloseIcon.d.ts +40 -0
  96. package/es/components/modal/src/components/Modal.d.ts +108 -0
  97. package/es/components/modal/src/components/ModalFooter.d.ts +139 -0
  98. package/es/components/modal/src/components/ModalWrap.d.ts +153 -0
  99. package/es/components/modal/src/hooks/useDrag.d.ts +7 -0
  100. package/es/components/modal/src/hooks/useFullScreen.d.ts +6 -0
  101. package/es/components/modal/src/hooks/useModal.d.ts +5 -0
  102. package/es/components/modal/src/index.d.ts +774 -0
  103. package/es/components/modal/src/props.d.ts +100 -0
  104. package/es/components/modal/src/types/modal.type.d.ts +17 -0
  105. package/es/components/source/hooks/useDownload.d.ts +8 -0
  106. package/es/components/source/hooks/useSource.d.ts +40 -0
  107. package/es/components/source/index.d.ts +2 -0
  108. package/es/components/source/index.js +332 -0
  109. package/es/components/source/types/source.type.d.ts +37 -0
  110. package/es/components/source/utils/index.d.ts +8 -0
  111. package/es/components/table/index.d.ts +3 -0
  112. package/es/components/table/index.js +3983 -0
  113. package/es/components/table/index.less +192 -0
  114. package/es/components/table/src/components/TableAction.d.ts +70 -0
  115. package/es/components/table/src/components/TableHeader.d.ts +1136 -0
  116. package/es/components/table/src/components/TableRender.d.ts +17 -0
  117. package/es/components/table/src/components/editTable/CellComponent.d.ts +22 -0
  118. package/es/components/table/src/components/editTable/EditTableCell.d.ts +93 -0
  119. package/es/components/table/src/components/editTable/componentMap.d.ts +4 -0
  120. package/es/components/table/src/components/editTable/index.d.ts +9 -0
  121. package/es/components/table/src/components/editTable/props.d.ts +27 -0
  122. package/es/components/table/src/components/tableSetting/Column.d.ts +69 -0
  123. package/es/components/table/src/components/tableSetting/Download.d.ts +922 -0
  124. package/es/components/table/src/components/tableSetting/DownloadCtrl.d.ts +888 -0
  125. package/es/components/table/src/components/tableSetting/Fullscreen.d.ts +22 -0
  126. package/es/components/table/src/components/tableSetting/index.d.ts +1030 -0
  127. package/es/components/table/src/hooks/useColumns.d.ts +14 -0
  128. package/es/components/table/src/hooks/useCustomRow.d.ts +20 -0
  129. package/es/components/table/src/hooks/useDataSource.d.ts +15 -0
  130. package/es/components/table/src/hooks/useHeader.d.ts +8 -0
  131. package/es/components/table/src/hooks/useHeaderCode.d.ts +3 -0
  132. package/es/components/table/src/hooks/useLoading.d.ts +6 -0
  133. package/es/components/table/src/hooks/usePagination.d.ts +7 -0
  134. package/es/components/table/src/hooks/useRow.d.ts +5 -0
  135. package/es/components/table/src/hooks/useRowSelection.d.ts +12 -0
  136. package/es/components/table/src/hooks/useTable.d.ts +9 -0
  137. package/es/components/table/src/hooks/useTableInstance.d.ts +16 -0
  138. package/es/components/table/src/hooks/useTableScroll.d.ts +13 -0
  139. package/es/components/table/src/index.d.ts +644 -0
  140. package/es/components/table/src/props.d.ts +185 -0
  141. package/es/components/table/src/types/actions.type.d.ts +21 -0
  142. package/es/components/table/src/types/header.type.d.ts +23 -0
  143. package/es/components/table/src/types/table.type.d.ts +98 -0
  144. package/es/directives/icon.d.ts +2 -0
  145. package/es/directives/index.d.ts +7 -0
  146. package/es/directives/index.js +2015 -0
  147. package/es/directives/permission.d.ts +2 -0
  148. package/es/global.d.ts +7 -0
  149. package/es/index.d.ts +1 -0
  150. package/es/index.js +4 -0
  151. package/es/theme/index.d.ts +10 -0
  152. package/es/theme/index.js +3255 -0
  153. package/es/theme/index.less +603 -0
  154. package/es/theme/src/components/content/index.d.ts +27 -0
  155. package/es/theme/src/components/feature/back-top.d.ts +5 -0
  156. package/es/theme/src/components/feature/index.d.ts +7 -0
  157. package/es/theme/src/components/footer/index.d.ts +31 -0
  158. package/es/theme/src/components/header/components/bread-crumb.d.ts +6 -0
  159. package/es/theme/src/components/header/components/fullscreen.d.ts +5 -0
  160. package/es/theme/src/components/header/components/index.d.ts +11 -0
  161. package/es/theme/src/components/header/components/lang-picker.d.ts +23 -0
  162. package/es/theme/src/components/header/components/logo.d.ts +35 -0
  163. package/es/theme/src/components/header/components/menu-filter.d.ts +22 -0
  164. package/es/theme/src/components/header/components/notify.d.ts +24 -0
  165. package/es/theme/src/components/header/components/setting-theme.d.ts +223 -0
  166. package/es/theme/src/components/header/components/size.d.ts +282 -0
  167. package/es/theme/src/components/header/components/theme-drawer/feature.d.ts +138 -0
  168. package/es/theme/src/components/header/components/theme-drawer/index.d.ts +3 -0
  169. package/es/theme/src/components/header/components/theme-drawer/menu-type.d.ts +16 -0
  170. package/es/theme/src/components/header/components/theme-drawer/select.d.ts +58 -0
  171. package/es/theme/src/components/header/components/theme-drawer/switch.d.ts +49 -0
  172. package/es/theme/src/components/header/components/trigger.d.ts +10 -0
  173. package/es/theme/src/components/header/components/user-info.d.ts +37 -0
  174. package/es/theme/src/components/header/helper/change-theme.d.ts +13 -0
  175. package/es/theme/src/components/header/helper/menu-tree.d.ts +3 -0
  176. package/es/theme/src/components/header/index.d.ts +699 -0
  177. package/es/theme/src/components/header/multiple-header.d.ts +785 -0
  178. package/es/theme/src/components/sider/components/basic-menu/basic-menu-item.d.ts +62 -0
  179. package/es/theme/src/components/sider/components/basic-menu/basic-menu.d.ts +207 -0
  180. package/es/theme/src/components/sider/components/basic-menu/basic-sub-menu-item.d.ts +127 -0
  181. package/es/theme/src/components/sider/components/basic-menu/menu-item-content.d.ts +26 -0
  182. package/es/theme/src/components/sider/components/drag-bar.d.ts +14 -0
  183. package/es/theme/src/components/sider/components/layout-menu.d.ts +22 -0
  184. package/es/theme/src/components/sider/components/props.d.ts +69 -0
  185. package/es/theme/src/components/sider/components/sider-trigger.d.ts +18 -0
  186. package/es/theme/src/components/sider/helper/sider.d.ts +12 -0
  187. package/es/theme/src/components/sider/helper/split-menu.d.ts +10 -0
  188. package/es/theme/src/components/sider/index.d.ts +70 -0
  189. package/es/theme/src/components/tabs/components/TabContent.d.ts +6 -0
  190. package/es/theme/src/components/tabs/components/TabRedo.d.ts +21 -0
  191. package/es/theme/src/components/tabs/components/index.d.ts +3 -0
  192. package/es/theme/src/components/tabs/hooks/useMultifyTabs.d.ts +7 -0
  193. package/es/theme/src/components/tabs/hooks/useTabDropdown.d.ts +6 -0
  194. package/es/theme/src/components/tabs/index.d.ts +63 -0
  195. package/es/theme/src/components/tabs/types/tabs.type.d.ts +7 -0
  196. package/es/theme/src/enums/index.d.ts +1 -0
  197. package/es/theme/src/enums/theme.enum.d.ts +33 -0
  198. package/es/theme/src/hooks/index.d.ts +6 -0
  199. package/es/theme/src/hooks/useDragLine.d.ts +2 -0
  200. package/es/theme/src/hooks/useHeader.d.ts +25 -0
  201. package/es/theme/src/hooks/useMenu.d.ts +27 -0
  202. package/es/theme/src/hooks/useMultifyTab.d.ts +7 -0
  203. package/es/theme/src/hooks/useOpenKeys.d.ts +7 -0
  204. package/es/theme/src/hooks/useTheme.d.ts +9 -0
  205. package/es/theme/src/index.d.ts +1643 -0
  206. package/es/theme/src/setting/theme.setting.d.ts +2 -0
  207. package/es/theme/src/stores/index.d.ts +3 -0
  208. package/es/theme/src/stores/routeReuse.store.d.ts +23 -0
  209. package/es/theme/src/stores/theme.store.d.ts +15 -0
  210. package/es/theme/src/types/index.d.ts +3 -0
  211. package/es/theme/src/types/menu.type.d.ts +15 -0
  212. package/es/theme/src/types/theme.type.d.ts +60 -0
  213. package/es/utils/withInstall.d.ts +4 -0
  214. package/index.d.ts +10 -0
  215. package/index.js +34 -0
  216. package/package.json +3 -6
  217. package/tailwind.config.cjs +11 -0
  218. package/tsconfig.json +41 -0
  219. package/tsconfig.node.json +9 -0
  220. package/vite.config.ts +51 -0
@@ -0,0 +1,3983 @@
1
+ import { DtCache, CacheKey, deepMerge, Pages, useGo, useRedo, Language, useAppStore, useSlots as useSlots$1, error, http, useApp, getDynamicProps, isBoolean, isFunction, getPopupContainer, useI18n, isNumber, isArray, isObject, isString, dispatchResize, useTimeoutFn, off, on, windowResizeFn, useMessage, isNullAndUnDef, getDictValueByCode, formatNumber, isVnode } from "@dt-frames/core";
2
+ import { toRaw as toRaw$1, unref, computed as computed$1, ref as ref$1, watch, onUnmounted, defineComponent, useAttrs, resolveDirective, openBlock, createElementBlock, Fragment, renderList, withDirectives, createVNode, withCtx, createTextVNode, toDisplayString, createElementVNode, normalizeClass, normalizeStyle, createCommentVNode, createBlock, provide, inject, h as h$1, mergeProps, nextTick, getCurrentInstance as getCurrentInstance$1, reactive, readonly, watchEffect, isRef, normalizeProps, guardReactiveProps, toRefs, isVNode, onMounted as onMounted$1, resolveDynamicComponent, renderSlot, createSlots, useSlots as useSlots$2 } from "vue";
3
+ import { defineStore } from "pinia";
4
+ import { Tooltip, MenuItem, Menu, Dropdown, RadioButton, RadioGroup, Button, FormItem, Col, Spin, Checkbox as Checkbox$1, Divider as Divider$1, Row, CheckboxGroup, Popover as Popover$1, Table } from "ant-design-vue/es";
5
+ import "ant-design-vue/es/table/style";
6
+ import { omit, cloneDeep, isEqual } from "lodash-es";
7
+ import "ant-design-vue/es/dropdown/style";
8
+ import "ant-design-vue/es/menu/style";
9
+ import "ant-design-vue/es/tooltip/style";
10
+ import { useDebounceFn, useFullscreen, isFunction as isFunction$1 } from "@vueuse/core";
11
+ import { Input, InputNumber, Select, TreeSelect, Switch, Checkbox, DatePicker, TimePicker, Popover, Radio, AutoComplete, Cascader, Slider, Rate, Divider, Modal } from "ant-design-vue";
12
+ import "ant-design-vue/es/radio/style";
13
+ import "ant-design-vue/es/col/style";
14
+ import "ant-design-vue/es/form/style";
15
+ import "ant-design-vue/es/button/style";
16
+ import "ant-design-vue/es/spin/style";
17
+ import "ant-design-vue/es/row/style";
18
+ import "ant-design-vue/es/divider/style";
19
+ import "ant-design-vue/es/checkbox/style";
20
+ import "ant-design-vue/es/popover/style";
21
+ import Sortablejs from "sortablejs";
22
+ import dayjs from "dayjs";
23
+ var Theme = /* @__PURE__ */ ((Theme2) => {
24
+ Theme2["DARK"] = "dark";
25
+ Theme2["LIGHT"] = "light";
26
+ return Theme2;
27
+ })(Theme || {});
28
+ var MenuType = /* @__PURE__ */ ((MenuType2) => {
29
+ MenuType2["SIDE"] = "sidebar";
30
+ MenuType2["TOP_MENU"] = "top-menu";
31
+ MenuType2["MIX"] = "mix";
32
+ return MenuType2;
33
+ })(MenuType || {});
34
+ var MenuMode = /* @__PURE__ */ ((MenuMode2) => {
35
+ MenuMode2["INLINE"] = "inline";
36
+ MenuMode2["HORIZONTAL"] = "horizontal";
37
+ MenuMode2["VERTICAL"] = "vertical";
38
+ return MenuMode2;
39
+ })(MenuMode || {});
40
+ var ContentMode = /* @__PURE__ */ ((ContentMode2) => {
41
+ ContentMode2["FULL"] = "full";
42
+ ContentMode2["FIXED"] = "fixed";
43
+ return ContentMode2;
44
+ })(ContentMode || {});
45
+ var UiSize = /* @__PURE__ */ ((UiSize2) => {
46
+ UiSize2["LARGE"] = "large";
47
+ UiSize2["MIDDLE"] = "middle";
48
+ UiSize2["SMALL"] = "small";
49
+ return UiSize2;
50
+ })(UiSize || {});
51
+ const defaultThemeConf = {
52
+ content: {
53
+ contentMode: ContentMode.FULL
54
+ },
55
+ headOptions: {
56
+ fixed: true,
57
+ theme: Theme.LIGHT,
58
+ showLogo: true,
59
+ showBackToTop: true,
60
+ useLockPage: true,
61
+ size: UiSize.SMALL,
62
+ showSize: true,
63
+ showBreadCrumb: true,
64
+ showFullScreen: true,
65
+ showSearch: true,
66
+ showNotice: true,
67
+ showLocaleSwitch: true,
68
+ showSettingTheme: true,
69
+ showLoginOut: true
70
+ },
71
+ menuOptions: {
72
+ fixed: true,
73
+ theme: Theme.DARK,
74
+ collapsed: false,
75
+ collapsedShowTitle: false,
76
+ canDrag: true,
77
+ show: true,
78
+ hidden: false,
79
+ split: false,
80
+ menuWidth: 240,
81
+ trigger: true,
82
+ type: MenuType.SIDE,
83
+ mode: MenuMode.INLINE
84
+ },
85
+ footerOptions: {
86
+ show: false,
87
+ height: 48,
88
+ title: "Copyright(C) 2021 by www.ithinkdt.com. All rights reserved.",
89
+ subTitle: "Privacy Statement"
90
+ },
91
+ routeReuse: {
92
+ show: true,
93
+ cache: true,
94
+ canDrag: true,
95
+ showQuick: true,
96
+ showRedo: true,
97
+ showFold: true
98
+ }
99
+ };
100
+ const useThemeStore = defineStore({
101
+ id: "dt-theme",
102
+ state: () => ({
103
+ themeConf: DtCache.getLocal(CacheKey.THEME) ?? defaultThemeConf,
104
+ pageLoading: false
105
+ }),
106
+ getters: {
107
+ getThemeConf() {
108
+ return this.themeConf;
109
+ },
110
+ getHeaderConf() {
111
+ return this.themeConf.headOptions;
112
+ },
113
+ getMenuConf() {
114
+ return this.themeConf.menuOptions;
115
+ },
116
+ getFooterConf() {
117
+ return this.themeConf.footerOptions;
118
+ },
119
+ getRouteReuseConf() {
120
+ return this.themeConf.routeReuse;
121
+ },
122
+ getPageLoading() {
123
+ return this.pageLoading;
124
+ }
125
+ },
126
+ actions: {
127
+ setThemeConf(options = {}) {
128
+ let newThemeConf = deepMerge(this.themeConf, options);
129
+ this.themeConf = deepMerge(defaultThemeConf, newThemeConf);
130
+ DtCache.setLocal(CacheKey.THEME, this.themeConf);
131
+ }
132
+ }
133
+ });
134
+ defineStore({
135
+ id: "route-reuse",
136
+ state: () => ({
137
+ cacheTabList: /* @__PURE__ */ new Set(),
138
+ tabList: DtCache.getLocal(CacheKey.THEME)?.routeReuse?.cache ? DtCache.getLocal(CacheKey.ROUTE_REUSE) || [] : [],
139
+ lastDragEndIndex: 0
140
+ }),
141
+ getters: {
142
+ getTabList() {
143
+ return this.tabList;
144
+ },
145
+ getCachedTabList() {
146
+ return Array.from(this.cacheTabList);
147
+ },
148
+ getLastDragEndIndex() {
149
+ return this.lastDragEndIndex;
150
+ }
151
+ },
152
+ actions: {
153
+ async addTab(route) {
154
+ const { path, name, fullPath, params, query, meta } = route;
155
+ if (path === Pages.NOT_FOUND || path === Pages.LOGIN || path === Pages.BASE_PAGE) {
156
+ return;
157
+ }
158
+ let updateIndex = -1;
159
+ const tabHasExits = this.tabList.some((tab, index) => {
160
+ updateIndex = index;
161
+ return (tab.fullPath || tab.path) === (fullPath || path);
162
+ });
163
+ if (tabHasExits) {
164
+ const curTab = toRaw$1(this.tabList)[updateIndex];
165
+ curTab.params = params || curTab.params;
166
+ curTab.query = query || curTab.query;
167
+ curTab.fullPath = fullPath || curTab.fullPath;
168
+ this.tabList.splice(updateIndex, 1, curTab);
169
+ } else {
170
+ this.tabList.push(JSON.parse(JSON.stringify(route)));
171
+ }
172
+ this.updateCacheTab();
173
+ },
174
+ closeTab(path, router) {
175
+ const go = useGo(router);
176
+ const index = this.tabList.findIndex((item) => item.path === path);
177
+ let page;
178
+ if (index === 0) {
179
+ if (this.tabList.length !== 1) {
180
+ page = this.tabList[index + 1];
181
+ }
182
+ } else {
183
+ page = this.tabList[index - 1];
184
+ }
185
+ this.bulkCloseTabs([path]);
186
+ this.updateCacheTab();
187
+ path === router.currentRoute.value.path && go(page.path);
188
+ },
189
+ closeAllTab(currentRoute, router) {
190
+ const go = useGo(router);
191
+ let filterTabList = this.tabList.filter((item) => item?.meta?.affix ?? false);
192
+ const route = filterTabList.length > 0 ? filterTabList[filterTabList.length - 1] : unref(currentRoute);
193
+ this.tabList = [route];
194
+ this.updateCacheTab();
195
+ go(route.path);
196
+ },
197
+ closeLeftTabs(path) {
198
+ const index = this.tabList.findIndex((item) => item.path === path);
199
+ if (index > 0) {
200
+ const leftTabs = this.tabList.slice(0, index);
201
+ const pathList = [];
202
+ for (const item of leftTabs) {
203
+ const affix = item?.meta?.affix ?? false;
204
+ if (!affix) {
205
+ pathList.push(item.fullPath);
206
+ }
207
+ }
208
+ this.bulkCloseTabs(pathList);
209
+ }
210
+ this.updateCacheTab();
211
+ },
212
+ closeRightTabs(path) {
213
+ const index = this.tabList.findIndex((item) => item.path === path);
214
+ if (index >= 0 && index < this.tabList.length - 1) {
215
+ const rightTabs = this.tabList.slice(index + 1, this.tabList.length);
216
+ const pathList = [];
217
+ for (const item of rightTabs) {
218
+ const affix = item?.meta?.affix ?? false;
219
+ if (!affix) {
220
+ pathList.push(item.fullPath);
221
+ }
222
+ }
223
+ this.bulkCloseTabs(pathList);
224
+ }
225
+ this.updateCacheTab();
226
+ },
227
+ closeOtherTabs(path) {
228
+ const pathList = [];
229
+ for (let item of this.tabList) {
230
+ const affix = item?.meta?.affix ?? false;
231
+ if (item.path !== path && !affix) {
232
+ pathList.push(item.path);
233
+ }
234
+ }
235
+ this.bulkCloseTabs(pathList);
236
+ this.updateCacheTab();
237
+ },
238
+ bulkCloseTabs(pathList) {
239
+ this.tabList = this.tabList.filter((item) => !pathList.includes(item.fullPath));
240
+ },
241
+ updateCacheTab() {
242
+ const cacheTab = DtCache.getLocal(CacheKey.THEME)?.routeReuse?.cache;
243
+ cacheTab && DtCache.setLocal(CacheKey.ROUTE_REUSE, this.tabList);
244
+ const cacheMap = /* @__PURE__ */ new Set();
245
+ for (const tab of this.tabList) {
246
+ if (tab.meta?.hideTab) {
247
+ continue;
248
+ }
249
+ const name = tab.name;
250
+ cacheMap.add(name);
251
+ }
252
+ this.cacheTabList = cacheMap;
253
+ },
254
+ async refreshPage(router) {
255
+ const findTab = this.getCachedTabList.find((item) => item === unref(router.currentRoute).name);
256
+ if (findTab) {
257
+ this.cacheTabList.delete(findTab.toString());
258
+ }
259
+ const redo = useRedo(router);
260
+ await redo();
261
+ },
262
+ sortTabs(oldIndex, newIndex) {
263
+ const currentTab = this.tabList[oldIndex];
264
+ this.tabList.splice(oldIndex, 1);
265
+ this.tabList.splice(newIndex, 0, currentTab);
266
+ this.lastDragEndIndex = this.lastDragEndIndex + 1;
267
+ }
268
+ }
269
+ });
270
+ function useMenu() {
271
+ const { getMenuConf, setThemeConf } = useThemeStore();
272
+ const getCollapsedShowTitle = computed$1(() => getMenuConf.collapsedShowTitle);
273
+ const getIsSidebarType = computed$1(() => getMenuConf.type === MenuType.SIDE);
274
+ const getMenuFixed = computed$1(() => getMenuConf.fixed);
275
+ const getShowMenu = computed$1(() => getMenuConf.show);
276
+ const getShowSidebar = computed$1(() => {
277
+ return unref(getSplit) || unref(getShowMenu) && unref(getMenuMode) !== MenuMode.HORIZONTAL;
278
+ });
279
+ const getMenuHidden = computed$1(() => getMenuConf.hidden);
280
+ const getMenuTheme = computed$1(() => getMenuConf.theme);
281
+ const getTrigger = computed$1(() => getMenuConf.trigger);
282
+ const getCanDrag = computed$1(() => getMenuConf.canDrag);
283
+ const getIsMixMode = computed$1(() => {
284
+ return unref(getMenuMode) === MenuMode.INLINE && unref(getMenuType) === MenuType.MIX;
285
+ });
286
+ const getMenuWidth = computed$1(() => unref(getIsMixMode) ? Number(getMenuConf.menuWidth) - 40 : getMenuConf.menuWidth);
287
+ const getLogoWidth = computed$1(() => getMenuConf.menuWidth);
288
+ const getMenuType = computed$1(() => getMenuConf.type);
289
+ const getIsTopMenu = computed$1(() => unref(getMenuType) === MenuType.TOP_MENU);
290
+ const getMenuMode = computed$1(() => getMenuConf.mode);
291
+ const getSplit = computed$1(() => getMenuConf.split);
292
+ const getCollapsed = computed$1(() => getMenuConf.collapsed);
293
+ const getIsHorizontal = computed$1(() => unref(getMenuMode) === MenuMode.HORIZONTAL);
294
+ const setThemeStore = (conf = {}) => setThemeConf(conf);
295
+ const toggleCollapsed = () => setThemeStore({
296
+ menuOptions: {
297
+ collapsed: !unref(getCollapsed)
298
+ }
299
+ });
300
+ const getMiniWidthNumber = computed$1(() => getMenuConf.collapsedShowTitle ? 80 : 48);
301
+ const getRealWidth = computed$1(() => {
302
+ return unref(getCollapsed) ? unref(getMiniWidthNumber) : unref(getMenuWidth);
303
+ });
304
+ const getCalcContentWidth = computed$1(() => {
305
+ const width = unref(getIsTopMenu) || !unref(getShowMenu) || unref(getSplit) && unref(getMenuHidden) ? 0 : unref(getRealWidth);
306
+ return `calc(100% - ${unref(width)}px)`;
307
+ });
308
+ return {
309
+ getCollapsedShowTitle,
310
+ getIsSidebarType,
311
+ getMenuFixed,
312
+ getShowMenu,
313
+ getShowSidebar,
314
+ getMenuHidden,
315
+ getMenuTheme,
316
+ getTrigger,
317
+ getMenuWidth,
318
+ getLogoWidth,
319
+ getMenuType,
320
+ getIsTopMenu,
321
+ getMenuMode,
322
+ getSplit,
323
+ getCollapsed,
324
+ getIsHorizontal,
325
+ getMiniWidthNumber,
326
+ getRealWidth,
327
+ getCalcContentWidth,
328
+ getIsMixMode,
329
+ getCanDrag,
330
+ toggleCollapsed,
331
+ setThemeStore
332
+ };
333
+ }
334
+ function useMultipleTab() {
335
+ const { getRouteReuseConf } = useThemeStore();
336
+ const getShowMultipleTab = computed$1(() => getRouteReuseConf.show);
337
+ const getShowQuick = computed$1(() => getRouteReuseConf.showQuick);
338
+ const getShowRedo = computed$1(() => getRouteReuseConf.showRedo);
339
+ const getCanCache = computed$1(() => getRouteReuseConf.cache);
340
+ const getCanDrag = computed$1(() => getRouteReuseConf.canDrag);
341
+ return {
342
+ getShowMultipleTab,
343
+ getShowQuick,
344
+ getShowRedo,
345
+ getCanCache,
346
+ getCanDrag
347
+ };
348
+ }
349
+ function useHeader() {
350
+ const HEADER_HEIGHT = 48;
351
+ const TABS_HEIGHT = 33;
352
+ const { getHeaderConf = {} } = useThemeStore();
353
+ const {
354
+ getIsSidebarType,
355
+ getMenuType,
356
+ getShowMenu,
357
+ getMenuHidden,
358
+ getTrigger,
359
+ getMenuMode,
360
+ getSplit,
361
+ getIsTopMenu,
362
+ getIsMixMode
363
+ } = useMenu();
364
+ const { getShowMultipleTab } = useMultipleTab();
365
+ const getHeaderTheme = computed$1(() => getHeaderConf.theme);
366
+ const getFixed = computed$1(() => getHeaderConf.fixed);
367
+ const getShowHeaderLogo = computed$1(() => unref(getShowLogo) && !unref(getIsSidebarType));
368
+ const getShowSearch = computed$1(() => getHeaderConf.showSearch);
369
+ const getShowHeaderTrigger = computed$1(() => {
370
+ if (unref(getMenuType) === MenuType.TOP_MENU || !unref(getShowMenu) || unref(getMenuHidden)) {
371
+ return false;
372
+ }
373
+ return unref(getTrigger);
374
+ });
375
+ const getShowBreadCrumb = computed$1(() => getHeaderConf.showBreadCrumb);
376
+ const getShowBread = computed$1(
377
+ () => unref(getMenuMode) !== MenuMode.HORIZONTAL && !unref(getSplit) && unref(getShowBreadCrumb)
378
+ );
379
+ const getShowTopMenu = computed$1(() => unref(getMenuMode) === MenuMode.HORIZONTAL || unref(getSplit));
380
+ const getShowNotice = computed$1(() => getHeaderConf.showNotice);
381
+ const getShowFullScreen = computed$1(() => getHeaderConf.showFullScreen);
382
+ const getShowLocale = computed$1(() => getHeaderConf.showLocaleSwitch);
383
+ const getShowSettingTheme = computed$1(() => getHeaderConf.showSettingTheme);
384
+ const getShowFullHeaderRef = computed$1(() => {
385
+ return !unref(getIsSidebarType) && !unref(getIsTopMenu);
386
+ });
387
+ const getHeaderHeight = computed$1(() => {
388
+ let height = 0;
389
+ height += HEADER_HEIGHT;
390
+ if (unref(getShowMultipleTab) && !unref(getSplit)) {
391
+ height += TABS_HEIGHT;
392
+ }
393
+ return height;
394
+ });
395
+ const getTabsHeight = computed$1(() => TABS_HEIGHT);
396
+ const getShowInsetHeaderRef = computed$1(() => {
397
+ return unref(getIsSidebarType) || unref(getIsTopMenu);
398
+ });
399
+ const getShowBackToTop = computed$1(() => getHeaderConf.showBackToTop);
400
+ const getIsZH = computed$1(() => {
401
+ let local = DtCache.getLocal(CacheKey.LOCALE);
402
+ if (!local)
403
+ return true;
404
+ return local === Language.ZH;
405
+ });
406
+ const getUiSize = computed$1(() => getHeaderConf?.size ?? UiSize.SMALL);
407
+ const getShowUiSize = computed$1(() => getHeaderConf?.showSize);
408
+ const getShowLogo = computed$1(() => getHeaderConf.showLogo);
409
+ const getShowLoginOut = computed$1(() => getHeaderConf.showLoginOut);
410
+ const loginOutClick = getHeaderConf.logoutClick;
411
+ return {
412
+ getHeaderTheme,
413
+ getFixed,
414
+ getShowSearch,
415
+ getShowHeaderLogo,
416
+ getShowHeaderTrigger,
417
+ getShowBread,
418
+ getShowTopMenu,
419
+ getShowFullScreen,
420
+ getShowLocale,
421
+ getShowSettingTheme,
422
+ getShowNotice,
423
+ getShowFullHeaderRef,
424
+ getHeaderHeight,
425
+ getTabsHeight,
426
+ getShowInsetHeaderRef,
427
+ getShowBackToTop,
428
+ getIsZH,
429
+ getUiSize,
430
+ getShowLogo,
431
+ getShowLoginOut,
432
+ getShowUiSize,
433
+ loginOutClick
434
+ };
435
+ }
436
+ const codeMap = /* @__PURE__ */ new Map();
437
+ function useHeaderCode(code, changeColumns) {
438
+ const { appConf } = useAppStore();
439
+ const { getIsZH } = useHeader();
440
+ useSlots$1();
441
+ useSlots();
442
+ if (!appConf.pages.queryColumnApi) {
443
+ error("\u8BF7\u5728init.config.ts\u4E2D\u914D\u7F6EqueryColumnApi\uFF01");
444
+ return;
445
+ }
446
+ const getAlign = (key) => key === 0 ? "center" : key === 2 ? "right" : "left";
447
+ const renderCell = (type, slot, ctx) => {
448
+ switch (type) {
449
+ case 0:
450
+ return { date: ctx };
451
+ case 1:
452
+ return { dict: ctx };
453
+ case 5:
454
+ return { percent: ctx };
455
+ case 7:
456
+ if (!appConf.structure[ctx]) {
457
+ error(`\u672A\u627E\u5230structure: ${ctx} !`);
458
+ return {};
459
+ }
460
+ return { dict: { ...appConf.structure[ctx], struCode: ctx } };
461
+ case 11:
462
+ return { number: ctx };
463
+ }
464
+ };
465
+ function getColumns() {
466
+ if (codeMap.get(code)) {
467
+ changeColumns(codeMap.get(code));
468
+ return;
469
+ }
470
+ http.post(
471
+ appConf.pages.queryColumnApi,
472
+ { tableCode: code }
473
+ ).then((rsp) => {
474
+ handleData(rsp);
475
+ });
476
+ }
477
+ function handleData(data) {
478
+ let rows = [];
479
+ data.forEach((it) => {
480
+ let obj = {
481
+ title: unref(getIsZH) ? it.cloumnName : it.cloumnEngName,
482
+ dataIndex: it.cloumnCode,
483
+ sorter: it.ifOrder,
484
+ align: getAlign(it.textAlign),
485
+ show: Boolean(it.ifDisplay),
486
+ defaultHidden: !Boolean(it.ifDisplay)
487
+ };
488
+ if (it.cloumnType !== void 0)
489
+ obj.render = renderCell(it.cloumnType, it.slot, it.dictCode);
490
+ if (it.width)
491
+ obj.width = Number(it.width);
492
+ rows.push(obj);
493
+ });
494
+ codeMap.set(code, rows);
495
+ changeColumns(rows);
496
+ }
497
+ getColumns();
498
+ }
499
+ function useTable(props2) {
500
+ const tableRef = ref$1(null);
501
+ const loadedRef = ref$1(false);
502
+ let stopWatch;
503
+ function registerTable(instance) {
504
+ const { isProd } = useApp();
505
+ if (unref(loadedRef) && unref(isProd) && instance === unref(tableRef))
506
+ return;
507
+ if (props2?.columnCode) {
508
+ useHeaderCode(
509
+ props2.columnCode,
510
+ (columns) => {
511
+ props2.columns = columns;
512
+ instance.setProps(getDynamicProps(props2));
513
+ }
514
+ );
515
+ }
516
+ tableRef.value = instance;
517
+ loadedRef.value = true;
518
+ stopWatch?.();
519
+ stopWatch = watch(
520
+ () => props2,
521
+ () => {
522
+ props2 && instance.setProps(getDynamicProps(props2));
523
+ },
524
+ {
525
+ immediate: true,
526
+ deep: true
527
+ }
528
+ );
529
+ onUnmounted(() => {
530
+ tableRef.value = null;
531
+ loadedRef.value = null;
532
+ });
533
+ }
534
+ function getTableInstance2() {
535
+ const table = unref(tableRef);
536
+ if (!table) {
537
+ error("\u6CA1\u6709table\u8868\u5355\u5B9E\u4F8B");
538
+ }
539
+ return table;
540
+ }
541
+ const methods = {
542
+ setProps: (props22) => getTableInstance2().setProps(props22),
543
+ setLoading: (loading) => getTableInstance2().setLoading(loading),
544
+ clearSelectedRowKeys: () => getTableInstance2().clearSelectedRowKeys(),
545
+ getSelectRows: () => getTableInstance2().getSelectRows(),
546
+ getSelectedRowKeys: () => getTableInstance2().getSelectedRowKeys(),
547
+ setSelectedRowKeys: (keys) => getTableInstance2().setSelectedRowKeys(keys),
548
+ getRowSelection: () => toRaw(getTableInstance2().getRowSelection()),
549
+ getColumns: (opt) => toRaw(getTableInstance2().getColumns(opt)),
550
+ setColumns: (columns) => getTableInstance2().setColumns(columns),
551
+ setColumnsByDataIndex: (dataIndex, value) => {
552
+ return getTableInstance2().setColumnsByDataIndex(dataIndex, value);
553
+ },
554
+ getCacheColumns: () => toRaw(getTableInstance2().getCacheColumns()),
555
+ findTableDataRecord: (rowKey) => getTableInstance2().findTableDataRecord(rowKey),
556
+ updateTableDataRecord: (rowKey, record) => getTableInstance2().updateTableDataRecord(rowKey, record),
557
+ getPagination: () => getTableInstance2().getPagination()
558
+ };
559
+ return [registerTable, methods];
560
+ }
561
+ const _imports_0 = "data:image/png;base64,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";
562
+ const _hoisted_1$b = {
563
+ key: 0,
564
+ class: "dt-table-action-btn"
565
+ };
566
+ const _hoisted_2$3 = ["onClick"];
567
+ const _hoisted_3$3 = /* @__PURE__ */ createElementVNode("i", { class: "i ic:baseline-settings dt-table-action-dropdown cursor-pointer" }, null, -1);
568
+ const _hoisted_4$3 = { class: "text-13 opacity-80" };
569
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
570
+ __name: "TableAction",
571
+ props: {
572
+ fixed: {
573
+ type: String,
574
+ default: "right"
575
+ },
576
+ expand: {
577
+ type: Boolean,
578
+ default: false
579
+ },
580
+ width: {
581
+ type: String,
582
+ default: "70px"
583
+ },
584
+ btns: {
585
+ type: Array,
586
+ default: []
587
+ },
588
+ flag: {
589
+ type: String
590
+ },
591
+ record: {
592
+ default: {}
593
+ },
594
+ index: {
595
+ type: Number
596
+ }
597
+ },
598
+ setup(__props) {
599
+ const props2 = __props;
600
+ const actionBtns = ref$1([]);
601
+ function handleAction(it) {
602
+ if (isFunction(it.onClick)) {
603
+ it.onClick({
604
+ row: props2.record,
605
+ index: props2.index
606
+ });
607
+ }
608
+ }
609
+ const attrs = useAttrs();
610
+ function getPopupContainer$1() {
611
+ return isFunction(attrs.getPopupContainer) ? attrs.getPopupContainer() : getPopupContainer();
612
+ }
613
+ watch(
614
+ () => props2.btns,
615
+ (btns) => {
616
+ actionBtns.value = [...btns].map((it) => {
617
+ return {
618
+ ...it,
619
+ ifShow: isBoolean(it.show) ? it.show : isFunction(it.show) ? it.show(props2.record) : true
620
+ };
621
+ });
622
+ },
623
+ {
624
+ immediate: true
625
+ }
626
+ );
627
+ return (_ctx, _cache) => {
628
+ const _component_ATooltip = Tooltip;
629
+ const _component_AMenuItem = MenuItem;
630
+ const _component_AMenu = Menu;
631
+ const _component_ADropdown = Dropdown;
632
+ const _directive_auth = resolveDirective("auth");
633
+ return props2.expand ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(actionBtns.value, (item) => {
634
+ return openBlock(), createElementBlock(Fragment, null, [
635
+ item.ifShow ? withDirectives((openBlock(), createElementBlock("span", _hoisted_1$b, [
636
+ createVNode(_component_ATooltip, { placement: "bottom" }, {
637
+ title: withCtx(() => [
638
+ createTextVNode(toDisplayString(item.name), 1)
639
+ ]),
640
+ default: withCtx(() => [
641
+ createElementVNode("i", {
642
+ class: normalizeClass(["i cursor-pointer", item.icon]),
643
+ style: normalizeStyle({
644
+ color: item.color
645
+ }),
646
+ onClick: ($event) => handleAction(item)
647
+ }, null, 14, _hoisted_2$3)
648
+ ]),
649
+ _: 2
650
+ }, 1024)
651
+ ])), [
652
+ [_directive_auth, item.auth]
653
+ ]) : createCommentVNode("", true)
654
+ ], 64);
655
+ }), 256)) : (openBlock(), createBlock(_component_ADropdown, {
656
+ key: 1,
657
+ getPopupContainer: getPopupContainer$1,
658
+ trigger: ["click"]
659
+ }, {
660
+ overlay: withCtx(() => [
661
+ createVNode(_component_AMenu, { class: "dt-action-select flex flex-col" }, {
662
+ default: withCtx(() => [
663
+ (openBlock(true), createElementBlock(Fragment, null, renderList(actionBtns.value, (item) => {
664
+ return withDirectives((openBlock(), createElementBlock("span", null, [
665
+ item.ifShow ? (openBlock(), createBlock(_component_AMenuItem, {
666
+ key: 0,
667
+ onClick: ($event) => handleAction(item)
668
+ }, {
669
+ default: withCtx(() => [
670
+ createElementVNode("i", {
671
+ class: normalizeClass(["i text-base opacity-80 pr-2", item.icon]),
672
+ style: normalizeStyle({
673
+ color: item.color
674
+ })
675
+ }, null, 6),
676
+ createElementVNode("span", _hoisted_4$3, toDisplayString(item.name), 1)
677
+ ]),
678
+ _: 2
679
+ }, 1032, ["onClick"])) : createCommentVNode("", true)
680
+ ])), [
681
+ [_directive_auth, item.auth]
682
+ ]);
683
+ }), 256))
684
+ ]),
685
+ _: 1
686
+ })
687
+ ]),
688
+ default: withCtx(() => [
689
+ _hoisted_3$3
690
+ ]),
691
+ _: 1
692
+ }));
693
+ };
694
+ }
695
+ });
696
+ const tableKey = Symbol("dt-page");
697
+ function createTableInstance(instance) {
698
+ provide(tableKey, instance);
699
+ }
700
+ function getTableInstance() {
701
+ return inject(tableKey);
702
+ }
703
+ const componentMap$1 = /* @__PURE__ */ new Map();
704
+ componentMap$1.set("Input", Input);
705
+ componentMap$1.set("InputNumber", InputNumber);
706
+ componentMap$1.set("Select", Select);
707
+ componentMap$1.set("TreeSelect", TreeSelect);
708
+ componentMap$1.set("Switch", Switch);
709
+ componentMap$1.set("Checkbox", Checkbox);
710
+ componentMap$1.set("DatePicker", DatePicker);
711
+ componentMap$1.set("TimePicker", TimePicker);
712
+ const CellComponent = ({
713
+ component = "Input",
714
+ rule = true,
715
+ ruleMessage,
716
+ popoverVisible,
717
+ getPopupContainer: getPopupContainer2
718
+ }, { attrs }) => {
719
+ const Comp = componentMap$1.get(component);
720
+ const DefaultComp = h$1(Comp, attrs);
721
+ if (!rule)
722
+ return DefaultComp;
723
+ return h$1(
724
+ Popover,
725
+ {
726
+ overlayClassName: "edit-cell-rule-popover",
727
+ visible: !!popoverVisible,
728
+ ...getPopupContainer2 ? { getPopupContainer: getPopupContainer2 } : {}
729
+ },
730
+ {
731
+ default: () => DefaultComp,
732
+ content: () => ruleMessage
733
+ }
734
+ );
735
+ };
736
+ const basicProps$1 = {
737
+ value: {
738
+ type: [String, Number, Boolean, Object],
739
+ default: ""
740
+ },
741
+ record: {
742
+ type: Object
743
+ },
744
+ column: {
745
+ type: Object,
746
+ default: () => ({})
747
+ },
748
+ index: Number
749
+ };
750
+ const _hoisted_1$a = { class: "editable-cell" };
751
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
752
+ __name: "EditTableCell",
753
+ props: basicProps$1,
754
+ setup(__props) {
755
+ const props2 = __props;
756
+ const { getUiSize } = useHeader();
757
+ const { t } = useI18n("UI");
758
+ const { editRule, align = "left" } = props2.column;
759
+ const table = getTableInstance();
760
+ const ruleMessage = ref$1("");
761
+ const ruleVisible = ref$1(false);
762
+ const optionsRef = ref$1([]);
763
+ const currentValueRef = ref$1(props2.value);
764
+ const getComponent = computed$1(() => props2.column?.editComponent || "Input");
765
+ const getRuleVisible = computed$1(() => {
766
+ return unref(ruleMessage) && unref(ruleVisible);
767
+ });
768
+ const getWrapperClass = computed$1(() => {
769
+ return `edit-cell-align-${align}`;
770
+ });
771
+ const getIsCheckComp = computed$1(() => {
772
+ const component = unref(getComponent);
773
+ return ["Checkbox", "Switch"].includes(component);
774
+ });
775
+ const createPlaceholderMessage = (component) => {
776
+ if (component.includes("Input")) {
777
+ return t("PLEASE_INPUT");
778
+ }
779
+ return t("PLEASE_SELECT");
780
+ };
781
+ const setTableValue = () => {
782
+ props2.record[props2.column.dataIndex] = unref(currentValueRef);
783
+ };
784
+ const getComponentProps = computed$1(() => {
785
+ const isCheckValue = unref(getIsCheckComp);
786
+ const valueField = isCheckValue ? "checked" : "value";
787
+ const val = unref(currentValueRef);
788
+ const value = isCheckValue ? isNumber(val) && isBoolean(val) ? val : !!val : val;
789
+ let compProps = props2.column?.editComponentProps ?? {};
790
+ const { record, column, index } = props2;
791
+ if (isFunction(compProps)) {
792
+ compProps = compProps({ text: val, record, column, index }) ?? {};
793
+ }
794
+ if (unref(getComponent) === "InputNumber") {
795
+ compProps = {
796
+ formatter: (value2) => `${value2}`.replace(/[1-9]\d{0,2}(?=(\d{3})+$)/g, "$&,"),
797
+ parser: (value2) => value2.replace(/\$\s?|(,*)/g, ""),
798
+ ...compProps
799
+ };
800
+ }
801
+ return {
802
+ size: "small",
803
+ dropdownClassName: unref(getUiSize),
804
+ getPopupContainer: () => document.body,
805
+ placeholder: createPlaceholderMessage(unref(getComponent)),
806
+ ...omit(compProps, "onChange"),
807
+ [valueField]: value
808
+ };
809
+ });
810
+ async function handleChange(e) {
811
+ const component = unref(getComponent);
812
+ if (component === "Checkbox") {
813
+ currentValueRef.value = e.target.checked;
814
+ } else if (e?.target && Reflect.has(e.target, "value")) {
815
+ currentValueRef.value = e.target.value;
816
+ } else {
817
+ currentValueRef.value = e;
818
+ }
819
+ const onChange = unref(getComponentProps)?.onChange;
820
+ if (onChange && isFunction(onChange))
821
+ onChange(...arguments);
822
+ setTableValue();
823
+ table.emits?.("edit-change", {
824
+ column: props2.column,
825
+ value: unref(currentValueRef),
826
+ record: toRaw(props2.record),
827
+ index: props2.index
828
+ });
829
+ handleSubmitRule();
830
+ }
831
+ async function handleSubmitRule() {
832
+ const { column, record } = props2;
833
+ const { editRule: editRule2 } = column;
834
+ const currentValue = unref(currentValueRef);
835
+ if (editRule2) {
836
+ if (isBoolean(editRule2) && !currentValue && !isNumber(currentValue)) {
837
+ ruleVisible.value = true;
838
+ const component = unref(getComponent);
839
+ ruleMessage.value = createPlaceholderMessage(component);
840
+ return false;
841
+ }
842
+ if (isFunction(editRule2)) {
843
+ const res = await editRule2(currentValue, record);
844
+ if (!!res) {
845
+ ruleMessage.value = res;
846
+ ruleVisible.value = true;
847
+ return false;
848
+ }
849
+ }
850
+ }
851
+ ruleMessage.value = "";
852
+ return true;
853
+ }
854
+ function handleOptionsChange(options) {
855
+ optionsRef.value = options;
856
+ }
857
+ return (_ctx, _cache) => {
858
+ return openBlock(), createElementBlock("div", _hoisted_1$a, [
859
+ createVNode(unref(CellComponent), mergeProps({ ref: "elRef" }, unref(getComponentProps), {
860
+ component: _ctx.column?.editComponent,
861
+ popoverVisible: unref(getRuleVisible),
862
+ rule: unref(editRule),
863
+ ruleMessage: ruleMessage.value,
864
+ class: unref(getWrapperClass),
865
+ onChange: handleChange,
866
+ onOptionsChange: handleOptionsChange
867
+ }), null, 16, ["component", "popoverVisible", "rule", "ruleMessage", "class"])
868
+ ]);
869
+ };
870
+ }
871
+ });
872
+ function renderEditCell(column) {
873
+ return ({ text: value, record, index }) => {
874
+ record.onValid = async () => {
875
+ if (isArray(record?.validCbs)) {
876
+ const validFns = (record?.validCbs || []).map((fn) => fn());
877
+ const res = await Promise.all(validFns);
878
+ return res.every((item) => !!item);
879
+ }
880
+ return false;
881
+ };
882
+ record.onEdit = async (edit, submit = false) => {
883
+ if (!submit) {
884
+ record.editable = edit;
885
+ }
886
+ if (!edit && submit) {
887
+ if (!await record.onValid())
888
+ return false;
889
+ const res = await record.onSubmitEdit?.();
890
+ if (res) {
891
+ record.editable = false;
892
+ return true;
893
+ }
894
+ return false;
895
+ }
896
+ if (!edit && !submit) {
897
+ record.onCancelEdit?.();
898
+ }
899
+ return true;
900
+ };
901
+ return h(_sfc_main$j, {
902
+ value,
903
+ record,
904
+ column,
905
+ index
906
+ });
907
+ };
908
+ }
909
+ const INDEX_FLAG = "INDEX";
910
+ const ACTION_COLUMN = "ACTION";
911
+ function handleItem(item, ellipsis) {
912
+ const { appConf } = useAppStore();
913
+ const { align } = appConf.ui.table;
914
+ const { key, dataIndex, children } = item;
915
+ item.align = item.align || align;
916
+ if (ellipsis) {
917
+ if (!key)
918
+ item.key = dataIndex && dataIndex.toString();
919
+ if (!isBoolean(item.ellipsis)) {
920
+ item = Object.assign(item, {
921
+ ellipsis
922
+ });
923
+ }
924
+ }
925
+ if (children && children.length) {
926
+ handleChildren(children, !!ellipsis);
927
+ }
928
+ }
929
+ function handleChildren(children, ellipsis) {
930
+ if (!children)
931
+ return;
932
+ children.forEach((item) => {
933
+ const { children: children2 } = item;
934
+ handleItem(item, ellipsis);
935
+ handleChildren(children2, ellipsis);
936
+ });
937
+ }
938
+ function handleIndexColumn(propsRef, getPaginationRef, columns) {
939
+ const { getIsZH } = useHeader();
940
+ const { t } = useI18n("UI");
941
+ const { showIndexColumn, indexColumnProps, isTreeTable } = unref(propsRef);
942
+ let pushIndexColumns = false;
943
+ if (unref(isTreeTable)) {
944
+ return;
945
+ }
946
+ columns.forEach(() => {
947
+ const indIndex = columns.findIndex((column) => column.flag === INDEX_FLAG);
948
+ if (showIndexColumn) {
949
+ pushIndexColumns = indIndex === -1;
950
+ } else if (!showIndexColumn && indIndex !== -1) {
951
+ columns.splice(indIndex, 1);
952
+ }
953
+ });
954
+ if (!pushIndexColumns)
955
+ return;
956
+ const isFixedLeft = columns.some((item) => item.fixed === "left");
957
+ columns.unshift({
958
+ flag: INDEX_FLAG,
959
+ width: unref(getIsZH) ? 50 : 70,
960
+ title: t("NUMBER"),
961
+ align: "center",
962
+ customRender: ({ index }) => {
963
+ const getPagination = unref(getPaginationRef);
964
+ const { appConf } = useAppStore();
965
+ const { defaultPageSize } = appConf.ui.table;
966
+ if (isBoolean(getPagination)) {
967
+ return `${index + 1}`;
968
+ }
969
+ const { current = 1, pageSize = defaultPageSize } = getPagination;
970
+ return ((current < 1 ? 1 : current) - 1) * pageSize + index + 1;
971
+ },
972
+ ...isFixedLeft ? {
973
+ fixed: "left"
974
+ } : {},
975
+ ...indexColumnProps
976
+ });
977
+ }
978
+ function handleActionColumn(propsRef, columns) {
979
+ const { getIsZH } = useHeader();
980
+ const { t } = useI18n("UI");
981
+ const { operations = [
982
+ { name: t("EDIT"), icon: "mdi:text-box-edit-outline", onClick: unref(propsRef).onUpdate },
983
+ { name: t("DELETE"), icon: "mdi:delete-outline", onClick: unref(propsRef).onDelete }
984
+ ] } = unref(propsRef);
985
+ if (!operations || isObject(operations) && !operations?.btns || isArray(operations) && !operations)
986
+ return;
987
+ const hasIndex = columns.findIndex((column) => column.flag === ACTION_COLUMN);
988
+ if (hasIndex === -1) {
989
+ let column = isObject(operations) ? operations : isArray(operations) ? { btns: operations } : {};
990
+ let expand = column.expand ? column.expand : false;
991
+ let columnObj = {
992
+ fixed: "right",
993
+ title: t("ACTIONS"),
994
+ align: "center",
995
+ expand,
996
+ width: `${expand ? column.btns.length * 30 + 40 : unref(getIsZH) ? 70 : 90}px`,
997
+ ...column,
998
+ flag: ACTION_COLUMN
999
+ };
1000
+ columns.push({
1001
+ ...columnObj,
1002
+ customRender: ({ record, index }) => {
1003
+ return h$1(
1004
+ _sfc_main$k,
1005
+ omit({
1006
+ ...columnObj,
1007
+ record,
1008
+ index
1009
+ }, "align")
1010
+ );
1011
+ }
1012
+ });
1013
+ }
1014
+ }
1015
+ function sortFixedColumn(columns) {
1016
+ const fixedLeftColumn = [];
1017
+ const fixedRightColumn = [];
1018
+ const defaultColumn = [];
1019
+ for (let column of columns) {
1020
+ if (column.defaultHidden)
1021
+ continue;
1022
+ if (column.fixed === "left") {
1023
+ fixedLeftColumn.push(column);
1024
+ continue;
1025
+ }
1026
+ if (column.fixed === "right") {
1027
+ fixedRightColumn.push(column);
1028
+ continue;
1029
+ }
1030
+ defaultColumn.push(column);
1031
+ }
1032
+ return [
1033
+ ...fixedLeftColumn,
1034
+ ...defaultColumn,
1035
+ ...fixedRightColumn
1036
+ ];
1037
+ }
1038
+ function useColumns(propsRef, getPaginationRef, tableElRef) {
1039
+ const columnsRef = ref(unref(propsRef).columns);
1040
+ let cacheColumns = unref(propsRef).columns;
1041
+ const getColumnsRef = computed$1(() => {
1042
+ const columns = cloneDeep(unref(columnsRef));
1043
+ const { ellipsis } = unref(propsRef);
1044
+ columns.forEach((it, index) => {
1045
+ it.class = it.class ?? "";
1046
+ if (!it.class.split(" ").includes("__column")) {
1047
+ it.class = `${it.class} __column`;
1048
+ }
1049
+ const { customRender, render } = it;
1050
+ if (it.sorter) {
1051
+ it.sorter = {
1052
+ multiple: Number(it.sorter)
1053
+ };
1054
+ }
1055
+ handleItem(
1056
+ it,
1057
+ Reflect.has(it, "ellipsis") ? !!it.ellipsis : !!ellipsis && !render && !customRender
1058
+ );
1059
+ });
1060
+ handleIndexColumn(propsRef, getPaginationRef, columns);
1061
+ handleActionColumn(propsRef, columns);
1062
+ return columns;
1063
+ });
1064
+ const getViewColumns = computed$1(() => {
1065
+ const viewColumns = sortFixedColumn(unref(getColumnsRef));
1066
+ const columns = cloneDeep(viewColumns);
1067
+ return columns.filter((column) => isIfShow(column)).map((column) => {
1068
+ if (column.edit) {
1069
+ column.customRender = renderEditCell(column);
1070
+ }
1071
+ return column;
1072
+ });
1073
+ });
1074
+ function isIfShow(column) {
1075
+ const ifShow = column.show;
1076
+ return isBoolean(ifShow) ? ifShow : isFunction(ifShow) ? ifShow(column) : true;
1077
+ }
1078
+ useDebounceFn(addResize, 100);
1079
+ function addResize() {
1080
+ const { resizable, minWidth = 50, maxWidth = 700 } = unref(propsRef);
1081
+ let els = unref(tableElRef)?.$el.querySelectorAll(".__column"), allWidth = 0, columnAllWidth = 0, noWidthNum = 0, avgWidth = 0;
1082
+ for (let i = 0; i < els?.length; i++) {
1083
+ allWidth += els[i].offsetWidth ?? 0;
1084
+ }
1085
+ columnsRef.value.forEach((it) => {
1086
+ if (isIfShow(it)) {
1087
+ if (it.width) {
1088
+ columnAllWidth += parseInt(`${it.width}`);
1089
+ } else {
1090
+ noWidthNum++;
1091
+ }
1092
+ }
1093
+ });
1094
+ avgWidth = (allWidth - columnAllWidth) / noWidthNum;
1095
+ columnsRef.value.forEach((it) => {
1096
+ it.width = it.width || avgWidth - 1;
1097
+ if (Reflect.has(it, "resizable") ? !!it.resizable : resizable) {
1098
+ it.resizable = true;
1099
+ it.minWidth = it.minWidth || minWidth;
1100
+ it.maxWidth = it.maxWidth || maxWidth;
1101
+ }
1102
+ });
1103
+ }
1104
+ function getColumns(opt) {
1105
+ const { ignoreIndex, ignoreAction, sort } = opt || {};
1106
+ let columns = toRaw$1(unref(getColumnsRef));
1107
+ if (ignoreIndex) {
1108
+ columns = columns.filter((it) => it.flag !== INDEX_FLAG);
1109
+ }
1110
+ if (ignoreAction) {
1111
+ columns = columns.filter((it) => it.flag !== ACTION_COLUMN);
1112
+ }
1113
+ if (sort) {
1114
+ columns = sortFixedColumn(columns);
1115
+ }
1116
+ return columns;
1117
+ }
1118
+ function setColumns(columnList = []) {
1119
+ const columns = cloneDeep(columnList);
1120
+ if (!isArray(columns) || !columns.length) {
1121
+ columnsRef.value = [];
1122
+ return;
1123
+ }
1124
+ const cacheKeys = cacheColumns.map((item) => item.dataIndex);
1125
+ if (!isString(columns[0])) {
1126
+ columnsRef.value = columns;
1127
+ } else {
1128
+ const columnKeys = columns;
1129
+ const newColumns = [];
1130
+ cacheColumns.forEach((it) => {
1131
+ newColumns.push({
1132
+ ...it,
1133
+ show: true,
1134
+ defaultHidden: !columnKeys.includes(it.dataIndex || it.key)
1135
+ });
1136
+ });
1137
+ if (!isEqual(cacheKeys, columns)) {
1138
+ newColumns.sort((prev, next) => {
1139
+ return columnKeys.indexOf(prev.dataIndex) - columnKeys.indexOf(next.dataIndex);
1140
+ });
1141
+ }
1142
+ columnsRef.value = newColumns;
1143
+ cacheColumns = [...newColumns];
1144
+ }
1145
+ }
1146
+ function setColumnsByDataIndex(dataIndex, value) {
1147
+ if (!dataIndex || !value)
1148
+ return;
1149
+ cacheColumns.forEach((item) => {
1150
+ if (item.dataIndex === dataIndex) {
1151
+ Object.assign(item, value);
1152
+ return;
1153
+ }
1154
+ });
1155
+ columnsRef.value = [...cacheColumns];
1156
+ }
1157
+ function getCacheColumns() {
1158
+ return cacheColumns;
1159
+ }
1160
+ watch(
1161
+ () => unref(propsRef).columns,
1162
+ (columns) => {
1163
+ columnsRef.value = columns;
1164
+ cacheColumns = columns.filter((it) => !it.flag) ?? [];
1165
+ nextTick(() => addResize());
1166
+ }
1167
+ );
1168
+ return {
1169
+ getViewColumns,
1170
+ getColumnsRef,
1171
+ getColumns,
1172
+ setColumns,
1173
+ setColumnsByDataIndex,
1174
+ getCacheColumns
1175
+ };
1176
+ }
1177
+ function useCustomRow(propsRef, { setSelectedRowKeys, getSelectedRowKeys, clearSelectedRowKeys, emits }) {
1178
+ const customRow = (record, index) => {
1179
+ return {
1180
+ onClick: (e) => {
1181
+ e?.stopPropagation();
1182
+ function handleClick() {
1183
+ const { rowSelection, rowKey, clickToSelectRow } = unref(propsRef);
1184
+ if (!rowSelection || !clickToSelectRow)
1185
+ return;
1186
+ const keys = getSelectedRowKeys();
1187
+ const key = record[rowKey];
1188
+ if (!key)
1189
+ return;
1190
+ const isCheckbox = rowSelection.type === "checkbox";
1191
+ const isRadio = rowSelection.type === "radio";
1192
+ if (clickToSelectRow) {
1193
+ if (isCheckbox) {
1194
+ if (keys.includes(key)) {
1195
+ setSelectedRowKeys(keys.filter((it) => it !== key));
1196
+ } else {
1197
+ setSelectedRowKeys([...keys, key]);
1198
+ }
1199
+ }
1200
+ if (isRadio)
1201
+ setSelectedRowKeys([key]);
1202
+ return;
1203
+ }
1204
+ if (isCheckbox) {
1205
+ const tr = e.composedPath?.().find((dom) => dom.tagName === "TR");
1206
+ if (!tr)
1207
+ return;
1208
+ const checkBox = tr.querySelector("input[type=checkbox]");
1209
+ if (!checkBox || checkBox.hasAttribute("disabled"))
1210
+ return;
1211
+ if (!keys.includes(key)) {
1212
+ setSelectedRowKeys([...keys, key]);
1213
+ return;
1214
+ }
1215
+ const keyIndex = keys.findIndex((item) => item === key);
1216
+ keys.splice(keyIndex, 1);
1217
+ setSelectedRowKeys(keys);
1218
+ return;
1219
+ }
1220
+ if (isRadio) {
1221
+ if (!keys.includes(key)) {
1222
+ if (keys.length) {
1223
+ clearSelectedRowKeys();
1224
+ }
1225
+ setSelectedRowKeys([key]);
1226
+ return;
1227
+ }
1228
+ clearSelectedRowKeys();
1229
+ }
1230
+ }
1231
+ handleClick();
1232
+ emits("row-click", record, index, e);
1233
+ },
1234
+ onDblclick: (event) => {
1235
+ emits("row-dbClick", record, index, event);
1236
+ },
1237
+ onContextmenu: (event) => {
1238
+ emits("row-contextmenu", record, index, event);
1239
+ },
1240
+ onMouseenter: (event) => {
1241
+ emits("row-mouseenter", record, index, event);
1242
+ },
1243
+ onMouseleave: (event) => {
1244
+ emits("row-mouseleave", record, index, event);
1245
+ }
1246
+ };
1247
+ };
1248
+ return {
1249
+ customRow
1250
+ };
1251
+ }
1252
+ function useDataSource(propsRef, {
1253
+ getPaginationInfo,
1254
+ setPagination,
1255
+ clearSelectedRowKeys
1256
+ }) {
1257
+ const dataSourceRef = ref$1([]);
1258
+ watch(
1259
+ () => unref(propsRef).dataSource,
1260
+ (dataSource) => {
1261
+ dataSource && (dataSourceRef.value = dataSource);
1262
+ },
1263
+ {
1264
+ immediate: true
1265
+ }
1266
+ );
1267
+ const getDataSourceRef = computed$1(() => {
1268
+ return unref(dataSourceRef);
1269
+ });
1270
+ function handleTableChange(pagination, filters, sorter) {
1271
+ const { sortFn, filterFn, onTableChange: onTableChange2, clearSelectOnPageChange } = unref(propsRef);
1272
+ const { appConf: appConf2 } = useAppStore();
1273
+ const { current = 1, pageSize = appConf2.ui.table.defaultPageSize } = pagination;
1274
+ if (clearSelectOnPageChange) {
1275
+ clearSelectedRowKeys();
1276
+ }
1277
+ setPagination(pagination);
1278
+ const params = {};
1279
+ if (sorter && isFunction(sortFn)) {
1280
+ params.sortInfo = sortFn(sorter);
1281
+ }
1282
+ if (filters && isFunction(filterFn)) {
1283
+ params.filterInfo = filterFn(filters);
1284
+ }
1285
+ return onTableChange2({
1286
+ pagination: {
1287
+ current,
1288
+ pageSize
1289
+ },
1290
+ sort: sorter,
1291
+ filter: toRaw$1(unref(params.filterInfo)),
1292
+ showBtnLoading: false
1293
+ });
1294
+ }
1295
+ const { defSort, onTableChange } = unref(propsRef);
1296
+ const { appConf } = useAppStore();
1297
+ onTableChange({
1298
+ pagination: {
1299
+ current: 1,
1300
+ pageSize: appConf.ui.table.defaultPageSize
1301
+ },
1302
+ sort: defSort,
1303
+ filter: null,
1304
+ showBtnLoading: false
1305
+ }, false);
1306
+ function updateTableDataRecord(rowKey, record) {
1307
+ const row = findTableDataRecord(rowKey);
1308
+ if (row) {
1309
+ for (const field in record) {
1310
+ row[field] = record[field];
1311
+ }
1312
+ return row;
1313
+ }
1314
+ }
1315
+ function findTableDataRecord(rowKey) {
1316
+ if (!dataSourceRef.value || dataSourceRef.value.length == 0 || !rowKey)
1317
+ return;
1318
+ const { childrenColumnName = "children" } = unref(propsRef);
1319
+ const findRow = (array) => {
1320
+ let ret;
1321
+ array.some(function iter(r) {
1322
+ if (Reflect.has(r, unref(propsRef).rowKey) && r[unref(propsRef).rowKey] === rowKey) {
1323
+ ret = r;
1324
+ return true;
1325
+ }
1326
+ return r[childrenColumnName] && r[childrenColumnName].some(iter);
1327
+ });
1328
+ return ret;
1329
+ };
1330
+ return findRow(dataSourceRef.value);
1331
+ }
1332
+ return {
1333
+ getDataSourceRef,
1334
+ handleTableChange,
1335
+ updateTableDataRecord,
1336
+ findTableDataRecord
1337
+ };
1338
+ }
1339
+ function useFormValue(props2, key = "value", changeEvent = "change", emitData) {
1340
+ const instance = getCurrentInstance$1();
1341
+ const emit = instance?.emit;
1342
+ const innerState = reactive({
1343
+ value: props2[key]
1344
+ });
1345
+ const defaultState = readonly(innerState);
1346
+ const setState = (val) => {
1347
+ innerState.value = val;
1348
+ nextTick(() => {
1349
+ emit?.(changeEvent, val, ...toRaw$1(unref(emitData)) || []);
1350
+ });
1351
+ };
1352
+ watchEffect(() => {
1353
+ innerState.value = props2[key];
1354
+ });
1355
+ const state = computed$1({
1356
+ get() {
1357
+ return innerState.value;
1358
+ },
1359
+ set(value) {
1360
+ if (isEqual(value, defaultState.value))
1361
+ return;
1362
+ innerState.value = value;
1363
+ nextTick(() => {
1364
+ emit?.(changeEvent, value, ...toRaw$1(unref(emitData)) || []);
1365
+ });
1366
+ }
1367
+ });
1368
+ return [state, setState, defaultState];
1369
+ }
1370
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1371
+ __name: "radioButton",
1372
+ props: {
1373
+ value: {
1374
+ type: [String, Number, Boolean]
1375
+ },
1376
+ options: {
1377
+ type: Array,
1378
+ default: () => []
1379
+ }
1380
+ },
1381
+ setup(__props) {
1382
+ const props2 = __props;
1383
+ const attrs = useAttrs();
1384
+ const [state] = useFormValue(props2);
1385
+ const getOptions = computed$1(() => {
1386
+ const { options } = props2;
1387
+ if (!options || options?.length === 0)
1388
+ return [];
1389
+ const isStringArr = options.some((item) => isString(item));
1390
+ if (!isStringArr)
1391
+ return options;
1392
+ return options.map((item) => ({ label: item, value: item }));
1393
+ });
1394
+ return (_ctx, _cache) => {
1395
+ const _component_ARadioButton = RadioButton;
1396
+ const _component_ARadioGroup = RadioGroup;
1397
+ return openBlock(), createBlock(_component_ARadioGroup, mergeProps(unref(attrs), {
1398
+ value: unref(state),
1399
+ "onUpdate:value": _cache[0] || (_cache[0] = ($event) => isRef(state) ? state.value = $event : null),
1400
+ "button-style": "solid"
1401
+ }), {
1402
+ default: withCtx(() => [
1403
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getOptions), (item) => {
1404
+ return openBlock(), createBlock(_component_ARadioButton, {
1405
+ key: `${item.value}`,
1406
+ value: item.value,
1407
+ disabled: item.disabled
1408
+ }, {
1409
+ default: withCtx(() => [
1410
+ createTextVNode(toDisplayString(item.label), 1)
1411
+ ]),
1412
+ _: 2
1413
+ }, 1032, ["value", "disabled"]);
1414
+ }), 128))
1415
+ ]),
1416
+ _: 1
1417
+ }, 16, ["value"]);
1418
+ };
1419
+ }
1420
+ });
1421
+ const _hoisted_1$9 = { class: "input-with-dialog" };
1422
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1423
+ __name: "formInputUseDialog",
1424
+ setup(__props) {
1425
+ const { t } = useI18n("UI");
1426
+ const attrs = useAttrs();
1427
+ const bindProps = computed$1(() => {
1428
+ return {
1429
+ ...omit(attrs, [
1430
+ "formValues"
1431
+ ]),
1432
+ disabled: true
1433
+ };
1434
+ });
1435
+ function onClickInput() {
1436
+ const { model, schema = {} } = attrs.formValues;
1437
+ if (!schema.openDialog || !isFunction(schema.openDialog)) {
1438
+ error(t("MUSE_FUNCTION"));
1439
+ return;
1440
+ }
1441
+ schema.openDialog(model);
1442
+ }
1443
+ function clearProps() {
1444
+ const { model, schema = {} } = attrs.formValues;
1445
+ [...schema.linkProps, schema.name].forEach((it) => model[it] = null);
1446
+ }
1447
+ return (_ctx, _cache) => {
1448
+ return openBlock(), createElementBlock("div", _hoisted_1$9, [
1449
+ createElementVNode("div", { onClick: onClickInput }, [
1450
+ createVNode(unref(Input), normalizeProps(guardReactiveProps(unref(bindProps))), null, 16)
1451
+ ]),
1452
+ unref(attrs).formValues?.schema?.linkProps?.length ? (openBlock(), createElementBlock("i", {
1453
+ key: 0,
1454
+ class: "i mdi:close-circle",
1455
+ onClick: clearProps
1456
+ })) : createCommentVNode("", true)
1457
+ ]);
1458
+ };
1459
+ }
1460
+ });
1461
+ const components = {
1462
+ Input,
1463
+ InputWithDialog: _sfc_main$h,
1464
+ InputTextArea: Input.TextArea,
1465
+ InputSearch: Input.Search,
1466
+ InputGroup: Input.Group,
1467
+ InputPassword: Input.Password,
1468
+ Select,
1469
+ TreeSelect,
1470
+ Radio,
1471
+ RadioGroup: Radio.Group,
1472
+ RadioButtonGroup: _sfc_main$i,
1473
+ Checkbox,
1474
+ CheckboxGroup: Checkbox.Group,
1475
+ AutoComplete,
1476
+ Cascader,
1477
+ DatePicker,
1478
+ MonthPicker: DatePicker.MonthPicker,
1479
+ WeekPicker: DatePicker.WeekPicker,
1480
+ RangePicker: DatePicker.RangePicker,
1481
+ InputNumber,
1482
+ Switch,
1483
+ TimePicker,
1484
+ Slider,
1485
+ Rate,
1486
+ Divider
1487
+ };
1488
+ const componentMap = /* @__PURE__ */ new Map();
1489
+ for (let item in components) {
1490
+ componentMap.set(item, components[item]);
1491
+ }
1492
+ const _hoisted_1$8 = {
1493
+ key: 0,
1494
+ className: "preIcon pr-1"
1495
+ };
1496
+ const _hoisted_2$2 = {
1497
+ key: 0,
1498
+ className: "preIcon pl-1"
1499
+ };
1500
+ const _hoisted_3$2 = { class: "text" };
1501
+ const _hoisted_4$2 = /* @__PURE__ */ createElementVNode("i", { class: "text-2xl i ic:baseline-arrow-drop-down" }, null, -1);
1502
+ const _hoisted_5$1 = [
1503
+ _hoisted_4$2
1504
+ ];
1505
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
1506
+ __name: "FormButtons",
1507
+ props: {
1508
+ mode: {
1509
+ type: String,
1510
+ default: "search"
1511
+ },
1512
+ show: {
1513
+ type: Boolean,
1514
+ default: true
1515
+ },
1516
+ showAdvancedButton: {
1517
+ type: Boolean,
1518
+ default: true
1519
+ },
1520
+ minShowColumn: {
1521
+ type: Number,
1522
+ default: 2
1523
+ },
1524
+ buttonList: {
1525
+ type: [Array],
1526
+ default: []
1527
+ },
1528
+ isAdvanced: {
1529
+ type: Boolean,
1530
+ default: true
1531
+ }
1532
+ },
1533
+ emits: ["handle-method"],
1534
+ setup(__props, { emit: emits }) {
1535
+ const props2 = __props;
1536
+ const { t } = useI18n();
1537
+ const advancedRef = ref$1(props2.isAdvanced);
1538
+ let key = 0;
1539
+ const showAdvanceRef = computed$1(() => {
1540
+ return props2.mode === "search" ? props2.showAdvancedButton : false;
1541
+ });
1542
+ const colOpt = computed$1(() => {
1543
+ let style = {
1544
+ textAlign: "right"
1545
+ };
1546
+ if (props2.mode === "dialog") {
1547
+ Object.assign(style, {
1548
+ display: "inline-block"
1549
+ });
1550
+ }
1551
+ return { style };
1552
+ });
1553
+ const getAdvanceClass = computed$1(() => {
1554
+ return [
1555
+ "basic-arrow",
1556
+ { "basic-arrow--active": !advancedRef.value }
1557
+ ];
1558
+ });
1559
+ const toggleAdvanced = () => {
1560
+ advancedRef.value = !advancedRef.value;
1561
+ dispatchResize();
1562
+ emits("handle-method", advancedRef.value);
1563
+ };
1564
+ function handleBtnClick(button) {
1565
+ if (button.onClick && isFunction(button.onClick)) {
1566
+ button.onClick();
1567
+ } else {
1568
+ emits("handle-method", button);
1569
+ }
1570
+ }
1571
+ watch(() => props2.isAdvanced, (v) => {
1572
+ if (v) {
1573
+ nextTick(() => toggleAdvanced());
1574
+ }
1575
+ }, {
1576
+ immediate: true
1577
+ });
1578
+ watch(
1579
+ () => props2.buttonList,
1580
+ (v) => key = new Date().getTime(),
1581
+ {
1582
+ immediate: true,
1583
+ deep: true
1584
+ }
1585
+ );
1586
+ return (_ctx, _cache) => {
1587
+ const _component_AButton = Button;
1588
+ const _component_AFormItem = FormItem;
1589
+ const _component_ACol = Col;
1590
+ const _directive_icon = resolveDirective("icon");
1591
+ const _directive_auth = resolveDirective("auth");
1592
+ return __props.show ? (openBlock(), createBlock(_component_ACol, normalizeProps(mergeProps({ key: 0 }, unref(colOpt))), {
1593
+ default: withCtx(() => [
1594
+ createVNode(_component_AFormItem, {
1595
+ class: "dt-form-btns",
1596
+ style: normalizeStyle({
1597
+ "margin-bottom": __props.mode === "search" ? "16px" : "0px"
1598
+ })
1599
+ }, {
1600
+ default: withCtx(() => [
1601
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.buttonList, (button) => {
1602
+ return openBlock(), createElementBlock(Fragment, null, [
1603
+ (button.show === void 0 ? true : button.show) ? withDirectives((openBlock(), createBlock(_component_AButton, {
1604
+ type: button.type,
1605
+ class: normalizeClass(button.class),
1606
+ loading: button.loading?.value,
1607
+ disabled: button.disabled,
1608
+ key: unref(key),
1609
+ onClick: ($event) => handleBtnClick(button)
1610
+ }, {
1611
+ icon: withCtx(() => [
1612
+ button.preIcon ? withDirectives((openBlock(), createElementBlock("span", _hoisted_1$8, null, 512)), [
1613
+ [_directive_icon, button.preIcon]
1614
+ ]) : createCommentVNode("", true)
1615
+ ]),
1616
+ default: withCtx(() => [
1617
+ createTextVNode(" " + toDisplayString(unref(t)(button.name)) + " ", 1),
1618
+ button.postIcon ? withDirectives((openBlock(), createElementBlock("span", _hoisted_2$2, null, 512)), [
1619
+ [_directive_icon, button.postIcon]
1620
+ ]) : createCommentVNode("", true)
1621
+ ]),
1622
+ _: 2
1623
+ }, 1032, ["type", "class", "loading", "disabled", "onClick"])), [
1624
+ [_directive_auth, button.auth]
1625
+ ]) : createCommentVNode("", true)
1626
+ ], 64);
1627
+ }), 256)),
1628
+ unref(showAdvanceRef) ? (openBlock(), createBlock(_component_AButton, {
1629
+ key: 0,
1630
+ type: "link",
1631
+ class: "advanced",
1632
+ onClick: toggleAdvanced
1633
+ }, {
1634
+ default: withCtx(() => [
1635
+ createElementVNode("span", _hoisted_3$2, toDisplayString(advancedRef.value ? unref(t)("UI.ADVANCED") : unref(t)("UI.EXPAND")), 1),
1636
+ createElementVNode("span", {
1637
+ class: normalizeClass(unref(getAdvanceClass))
1638
+ }, _hoisted_5$1, 2)
1639
+ ]),
1640
+ _: 1
1641
+ })) : createCommentVNode("", true)
1642
+ ]),
1643
+ _: 1
1644
+ }, 8, ["style"])
1645
+ ]),
1646
+ _: 1
1647
+ }, 16)) : createCommentVNode("", true);
1648
+ };
1649
+ }
1650
+ });
1651
+ const _hoisted_1$7 = { key: 0 };
1652
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
1653
+ __name: "Fullscreen",
1654
+ setup(__props) {
1655
+ const { t } = useI18n("UI");
1656
+ const table = getTableInstance();
1657
+ const wrapEl = ref$1(null);
1658
+ const { toggle, isFullscreen } = useFullscreen(wrapEl);
1659
+ watch(
1660
+ () => table.tableElRef.value,
1661
+ (v) => {
1662
+ const getParent = (el) => {
1663
+ if (!el || !el.parentNode)
1664
+ return null;
1665
+ if (el.parentNode.className?.indexOf("dt-layout-content") !== -1) {
1666
+ wrapEl.value = el.parentNode;
1667
+ } else {
1668
+ getParent(el.parentNode);
1669
+ }
1670
+ };
1671
+ getParent(v.$el);
1672
+ }
1673
+ );
1674
+ return (_ctx, _cache) => {
1675
+ const _component_ATooltip = Tooltip;
1676
+ return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
1677
+ title: withCtx(() => [
1678
+ !unref(isFullscreen) ? (openBlock(), createElementBlock("span", _hoisted_1$7, toDisplayString(unref(t)("FULLSCREEN")), 1)) : createCommentVNode("", true)
1679
+ ]),
1680
+ default: withCtx(() => [
1681
+ createElementVNode("span", {
1682
+ class: "flex",
1683
+ onClick: _cache[0] || (_cache[0] = (...args) => unref(toggle) && unref(toggle)(...args))
1684
+ }, [
1685
+ createElementVNode("i", {
1686
+ class: normalizeClass(["i w-7 leading-7 text-center cursor-pointer", unref(isFullscreen) ? "ic:baseline-fullscreen-exit" : "ic:baseline-fullscreen"])
1687
+ }, null, 2)
1688
+ ])
1689
+ ]),
1690
+ _: 1
1691
+ });
1692
+ };
1693
+ }
1694
+ });
1695
+ const orgDialogProp = reactive({});
1696
+ const cbTransfer = reactive({});
1697
+ const dataTransfer = reactive({});
1698
+ function useModalOut() {
1699
+ const modal = ref$1(null);
1700
+ const loaded = ref$1(true);
1701
+ const uid = ref$1(null);
1702
+ const { isProd } = useApp();
1703
+ function register(modalMethod, uuid) {
1704
+ if (!getCurrentInstance()) {
1705
+ throw new Error("useModal\u53EA\u80FD\u5728setup()\u6216\u8005\u51FD\u6570\u4E2D\u4F7F\u7528");
1706
+ }
1707
+ uid.value = uuid;
1708
+ onUnmounted(() => {
1709
+ if (unref(isProd)) {
1710
+ modal.value = null;
1711
+ loaded.value = false;
1712
+ dataTransfer[unref(uid)] = null;
1713
+ orgDialogProp[unref(uid)] = null;
1714
+ cbTransfer[unref(uid)] = (res) => {
1715
+ };
1716
+ }
1717
+ });
1718
+ if (unref(loaded) && modalMethod === unref(modal))
1719
+ return;
1720
+ modal.value = modalMethod;
1721
+ loaded.value = true;
1722
+ }
1723
+ const getInstance = () => {
1724
+ const instance = unref(modal);
1725
+ if (!instance) {
1726
+ error("useModalOut \u5B9E\u4F8B\u672A\u5B9A\u4E49");
1727
+ }
1728
+ return instance;
1729
+ };
1730
+ const methods = {
1731
+ setModalProps: (props2) => {
1732
+ getInstance()?.setModalProps(props2);
1733
+ },
1734
+ redoModalHeight: () => {
1735
+ getInstance()?.redoModalHeight?.();
1736
+ },
1737
+ openModal: (params, afterClose) => {
1738
+ const id = unref(uid);
1739
+ dataTransfer[id] = isObject(params) ? { ...toRaw(params) } : params;
1740
+ getInstance()?.setModalProps({
1741
+ footer: [],
1742
+ defaultFullscreen: false,
1743
+ ...orgDialogProp[id],
1744
+ visible: true
1745
+ });
1746
+ cbTransfer[id] = (res) => {
1747
+ if (afterClose && isFunction(afterClose)) {
1748
+ afterClose(res);
1749
+ }
1750
+ };
1751
+ },
1752
+ closeModal: () => {
1753
+ getInstance()?.setModalProps({ visible: false });
1754
+ }
1755
+ };
1756
+ return [register, methods];
1757
+ }
1758
+ function useModal(props2, setModalData) {
1759
+ const modalInstanceRef = ref$1(null);
1760
+ const currentInstance = getCurrentInstance();
1761
+ const uidRef = ref$1(null);
1762
+ const { isProd } = useApp();
1763
+ const getInstance = () => {
1764
+ const instance = unref(modalInstanceRef);
1765
+ if (!instance) {
1766
+ error("useModal \u5B9E\u4F8B\u672A\u5B9A\u4E49");
1767
+ }
1768
+ return instance;
1769
+ };
1770
+ const register = (modalInstance, uuid) => {
1771
+ if (unref(isProd)) {
1772
+ modalInstanceRef.value = null;
1773
+ }
1774
+ uidRef.value = uuid;
1775
+ modalInstanceRef.value = modalInstance;
1776
+ currentInstance?.emit("register", modalInstance, uuid);
1777
+ orgDialogProp[uuid] = toRaw(props2);
1778
+ modalInstance.setModalProps(props2);
1779
+ };
1780
+ watchEffect(() => {
1781
+ const data = dataTransfer[unref(uidRef)];
1782
+ if (!data)
1783
+ return;
1784
+ if (!setModalData || !isFunction(setModalData))
1785
+ return;
1786
+ nextTick(() => {
1787
+ setModalData(data);
1788
+ });
1789
+ });
1790
+ const methods = {
1791
+ setLoading: (loading = true) => {
1792
+ getInstance()?.setModalProps({ loading });
1793
+ },
1794
+ closeModal: (rsp) => {
1795
+ if (cbTransfer[unref(uidRef)])
1796
+ cbTransfer[unref(uidRef)](rsp);
1797
+ getInstance()?.setModalProps({ visible: false });
1798
+ },
1799
+ setModalProps: (props22) => {
1800
+ getInstance()?.setModalProps(props22);
1801
+ },
1802
+ redoModalHeight: () => {
1803
+ const callRedo = getInstance()?.redoModalHeight;
1804
+ callRedo && callRedo();
1805
+ }
1806
+ };
1807
+ return [register, methods];
1808
+ }
1809
+ const basicProps = {
1810
+ t: {
1811
+ type: String
1812
+ },
1813
+ visible: {
1814
+ type: Boolean
1815
+ },
1816
+ closable: {
1817
+ type: Boolean,
1818
+ default: true
1819
+ },
1820
+ destroyOnClose: {
1821
+ type: Boolean
1822
+ },
1823
+ scrollTop: {
1824
+ type: Boolean,
1825
+ default: true
1826
+ },
1827
+ height: { type: Number },
1828
+ minHeight: { type: Number },
1829
+ width: { type: [String, Number] },
1830
+ draggable: {
1831
+ type: Boolean,
1832
+ default: true
1833
+ },
1834
+ defaultFullscreen: {
1835
+ type: Boolean
1836
+ },
1837
+ canFullscreen: {
1838
+ type: Boolean,
1839
+ default: true
1840
+ },
1841
+ title: {
1842
+ type: String
1843
+ },
1844
+ loading: { type: Boolean, default: false },
1845
+ loadingTip: { type: String, default: "\u52A0\u8F7D\u4E2D..." },
1846
+ useWrapper: {
1847
+ type: Boolean,
1848
+ default: true
1849
+ },
1850
+ wrapClassName: { type: String },
1851
+ zIndex: { type: Number },
1852
+ centered: { type: Boolean },
1853
+ showOkBtn: {
1854
+ type: Boolean,
1855
+ default: true
1856
+ },
1857
+ showCancelBtn: {
1858
+ type: Boolean,
1859
+ default: true
1860
+ },
1861
+ okText: {
1862
+ type: String
1863
+ },
1864
+ cancelText: {
1865
+ type: String
1866
+ },
1867
+ mask: { type: Boolean, default: true },
1868
+ maskClosable: { type: Boolean, default: true },
1869
+ keyboard: { type: Boolean, default: true },
1870
+ maskStyle: Object,
1871
+ footer: {
1872
+ type: Object
1873
+ },
1874
+ bodyStyle: Object,
1875
+ wrapperProps: Object,
1876
+ getContainer: Function,
1877
+ closeFunc: Function,
1878
+ afterClose: Function
1879
+ };
1880
+ function useDragMove(context) {
1881
+ const getStyle = (dom, attr) => {
1882
+ return getComputedStyle(dom)[attr];
1883
+ };
1884
+ const drag = (wrap) => {
1885
+ if (!wrap)
1886
+ return;
1887
+ wrap.setAttribute("data-drag", unref(context.draggable));
1888
+ const dialogHeaderEl = wrap.querySelector(".ant-modal-header");
1889
+ const dragDom = wrap.querySelector(".ant-modal");
1890
+ if (!dialogHeaderEl || !dragDom || !unref(context.draggable))
1891
+ return;
1892
+ dialogHeaderEl.style.cursor = "move";
1893
+ dialogHeaderEl.onmousedown = (e) => {
1894
+ if (!e)
1895
+ return;
1896
+ const disX = e.clientX;
1897
+ const disY = e.clientY;
1898
+ const screenWidth = document.body.clientWidth;
1899
+ const screenHeight = document.documentElement.clientHeight;
1900
+ const dragDomWidth = dragDom.offsetWidth;
1901
+ const dragDomheight = dragDom.offsetHeight;
1902
+ console.log(dragDomWidth, dragDomheight, screenHeight, screenWidth);
1903
+ const minDragDomLeft = dragDom.offsetLeft;
1904
+ const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
1905
+ const minDragDomTop = dragDom.offsetTop;
1906
+ const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
1907
+ const domLeft = getStyle(dragDom, "left");
1908
+ const domTop = getStyle(dragDom, "top");
1909
+ let styL = +domLeft;
1910
+ let styT = +domTop;
1911
+ if (domLeft.includes("%")) {
1912
+ styL = +document.body.clientWidth * (+domLeft.replace(/%/g, "") / 100);
1913
+ styT = +document.body.clientHeight * (+domTop.replace(/%/g, "") / 100);
1914
+ } else {
1915
+ styL = +domLeft.replace(/px/g, "");
1916
+ styT = +domTop.replace(/px/g, "");
1917
+ }
1918
+ document.onmousemove = function(e2) {
1919
+ let left = e2.clientX - disX;
1920
+ let top = e2.clientY - disY;
1921
+ if (-left > minDragDomLeft) {
1922
+ left = -minDragDomLeft;
1923
+ } else if (left > maxDragDomLeft) {
1924
+ left = maxDragDomLeft;
1925
+ }
1926
+ if (-top > minDragDomTop) {
1927
+ top = -minDragDomTop;
1928
+ } else if (top > maxDragDomTop) {
1929
+ top = maxDragDomTop;
1930
+ }
1931
+ dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
1932
+ };
1933
+ document.onmouseup = () => {
1934
+ document.onmousemove = null;
1935
+ document.onmouseup = null;
1936
+ };
1937
+ };
1938
+ };
1939
+ const handleDrag = () => {
1940
+ const dragWraps = document.querySelectorAll(".ant-modal-wrap");
1941
+ for (const wrap of Array.from(dragWraps)) {
1942
+ if (!wrap)
1943
+ continue;
1944
+ const display = getStyle(wrap, "display");
1945
+ const draggable = wrap.getAttribute("data-drag");
1946
+ if (display !== "none") {
1947
+ if (draggable === null || unref(context.destroyOnClose)) {
1948
+ drag(wrap);
1949
+ }
1950
+ }
1951
+ }
1952
+ };
1953
+ watchEffect(() => {
1954
+ if (!unref(context.visible) || !unref(context.draggable)) {
1955
+ return;
1956
+ }
1957
+ useTimeoutFn(() => {
1958
+ handleDrag();
1959
+ }, 30);
1960
+ });
1961
+ }
1962
+ function _isSlot(s) {
1963
+ return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
1964
+ }
1965
+ const _sfc_main$e = {
1966
+ name: "Modal",
1967
+ inheritAttrs: false,
1968
+ props: basicProps,
1969
+ emits: ["cancel"],
1970
+ setup(props2, {
1971
+ slots,
1972
+ emit
1973
+ }) {
1974
+ const {
1975
+ visible,
1976
+ draggable,
1977
+ destroyOnClose
1978
+ } = toRefs(props2);
1979
+ const attrs = useAttrs();
1980
+ useDragMove({
1981
+ visible,
1982
+ destroyOnClose,
1983
+ draggable
1984
+ });
1985
+ const {
1986
+ extendSlots
1987
+ } = useSlots$1();
1988
+ const onCancel = (e) => emit("cancel", e);
1989
+ return () => {
1990
+ let _slot;
1991
+ const propsData = {
1992
+ ...unref(attrs),
1993
+ ...props2,
1994
+ destroyOnClose: true,
1995
+ onCancel
1996
+ };
1997
+ if (!propsData?.visible)
1998
+ return null;
1999
+ return createVNode(Modal, propsData, _isSlot(_slot = extendSlots(slots)) ? _slot : {
2000
+ default: () => [_slot]
2001
+ });
2002
+ };
2003
+ }
2004
+ };
2005
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
2006
+ __name: "CloseIcon",
2007
+ props: {
2008
+ canFullscreen: { type: Boolean, default: true },
2009
+ fullScreen: { type: Boolean }
2010
+ },
2011
+ emits: ["cancel", "fullscreen"],
2012
+ setup(__props, { emit }) {
2013
+ const props2 = __props;
2014
+ const { t } = useI18n("UI");
2015
+ const getClass = computed$1(() => {
2016
+ return [
2017
+ "dt-basic-modal-close",
2018
+ `dt-basic-modal-close--custom`,
2019
+ {
2020
+ [`dt-basic-modal-close--can-full`]: props2.canFullscreen
2021
+ }
2022
+ ];
2023
+ });
2024
+ function handleCancel(e) {
2025
+ emit("cancel", e);
2026
+ }
2027
+ function handleFullScreen(e) {
2028
+ e?.stopPropagation();
2029
+ e?.preventDefault();
2030
+ emit("fullscreen");
2031
+ }
2032
+ return (_ctx, _cache) => {
2033
+ const _component_ATooltip = Tooltip;
2034
+ return openBlock(), createElementBlock("div", {
2035
+ class: normalizeClass(["flex h-14 items-center justify-center", unref(getClass)])
2036
+ }, [
2037
+ __props.canFullscreen ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
2038
+ __props.fullScreen ? (openBlock(), createBlock(_component_ATooltip, {
2039
+ key: 0,
2040
+ title: unref(t)("EXIT_FULLSCREEN"),
2041
+ placement: "bottom"
2042
+ }, {
2043
+ default: withCtx(() => [
2044
+ createElementVNode("i", {
2045
+ class: "i ic:baseline-fullscreen-exit hover:font-bold inline-block w-10 h-14 pr-4",
2046
+ onClick: handleFullScreen
2047
+ })
2048
+ ]),
2049
+ _: 1
2050
+ }, 8, ["title"])) : (openBlock(), createBlock(_component_ATooltip, {
2051
+ key: 1,
2052
+ title: unref(t)("FULLSCREEN"),
2053
+ placement: "bottom"
2054
+ }, {
2055
+ default: withCtx(() => [
2056
+ createElementVNode("i", {
2057
+ class: "i ic:baseline-fullscreen hover:font-bold inline-block h-14 w-10 pr-4",
2058
+ onClick: handleFullScreen
2059
+ })
2060
+ ]),
2061
+ _: 1
2062
+ }, 8, ["title"]))
2063
+ ], 64)) : createCommentVNode("", true),
2064
+ createElementVNode("i", {
2065
+ class: "i mdi:close h-14 w-10 pr-4",
2066
+ onClick: handleCancel
2067
+ })
2068
+ ], 2);
2069
+ };
2070
+ }
2071
+ });
2072
+ const isServer = typeof window === "undefined";
2073
+ const BAR_MAP = {
2074
+ vertical: {
2075
+ offset: "offsetHeight",
2076
+ scroll: "scrollTop",
2077
+ scrollSize: "scrollHeight",
2078
+ size: "height",
2079
+ key: "vertical",
2080
+ axis: "Y",
2081
+ client: "clientY",
2082
+ direction: "top"
2083
+ },
2084
+ horizontal: {
2085
+ offset: "offsetWidth",
2086
+ scroll: "scrollLeft",
2087
+ scrollSize: "scrollWidth",
2088
+ size: "width",
2089
+ key: "horizontal",
2090
+ axis: "X",
2091
+ client: "clientX",
2092
+ direction: "left"
2093
+ }
2094
+ };
2095
+ function renderThumbStyle({ move, size, bar }) {
2096
+ const style = {};
2097
+ const translate = `translate${bar.axis}(${move}%)`;
2098
+ style[bar.size] = size;
2099
+ style.transform = translate;
2100
+ style.msTransform = translate;
2101
+ style.webkitTransform = translate;
2102
+ return style;
2103
+ }
2104
+ function resizeHandler(entries) {
2105
+ for (const entry of entries) {
2106
+ const listeners = entry.target.__resizeListeners__ || [];
2107
+ if (listeners.length) {
2108
+ listeners.forEach((fn) => {
2109
+ fn();
2110
+ });
2111
+ }
2112
+ }
2113
+ }
2114
+ function addResizeListener(element, fn) {
2115
+ if (isServer)
2116
+ return;
2117
+ if (!element.__resizeListeners__) {
2118
+ element.__resizeListeners__ = [];
2119
+ element.__ro__ = new ResizeObserver(resizeHandler);
2120
+ element.__ro__.observe(element);
2121
+ }
2122
+ element.__resizeListeners__.push(fn);
2123
+ }
2124
+ function removeResizeListener(element, fn) {
2125
+ if (!element || !element.__resizeListeners__)
2126
+ return;
2127
+ element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);
2128
+ if (!element.__resizeListeners__.length) {
2129
+ element.__ro__.disconnect();
2130
+ }
2131
+ }
2132
+ const Bar = defineComponent({
2133
+ name: "Bar",
2134
+ props: {
2135
+ vertical: Boolean,
2136
+ size: String,
2137
+ move: Number
2138
+ },
2139
+ setup(props2) {
2140
+ const instance = getCurrentInstance$1();
2141
+ const thumb = ref$1();
2142
+ const wrap = inject("scroll-bar-wrap", {});
2143
+ const bar = computed$1(() => {
2144
+ return BAR_MAP[props2.vertical ? "vertical" : "horizontal"];
2145
+ });
2146
+ const barStore = ref$1({});
2147
+ const cursorDown = ref$1();
2148
+ const clickThumbHandler = (e) => {
2149
+ if (e.ctrlKey || e.button === 2) {
2150
+ return;
2151
+ }
2152
+ window.getSelection()?.removeAllRanges();
2153
+ startDrag(e);
2154
+ barStore.value[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]);
2155
+ };
2156
+ const clickTrackHandler = (e) => {
2157
+ const offset = Math.abs(
2158
+ e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]
2159
+ );
2160
+ const thumbHalf = thumb.value[bar.value.offset] / 2;
2161
+ const thumbPositionPercentage = (offset - thumbHalf) * 100 / instance?.vnode.el?.[bar.value.offset];
2162
+ wrap.value[bar.value.scroll] = thumbPositionPercentage * wrap.value[bar.value.scrollSize] / 100;
2163
+ };
2164
+ const startDrag = (e) => {
2165
+ e.stopImmediatePropagation();
2166
+ cursorDown.value = true;
2167
+ on(document, "mousemove", mouseMoveDocumentHandler);
2168
+ on(document, "mouseup", mouseUpDocumentHandler);
2169
+ document.onselectstart = () => false;
2170
+ };
2171
+ const mouseMoveDocumentHandler = (e) => {
2172
+ if (cursorDown.value === false)
2173
+ return;
2174
+ const prevPage = barStore.value[bar.value.axis];
2175
+ if (!prevPage)
2176
+ return;
2177
+ const offset = (instance?.vnode.el?.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1;
2178
+ const thumbClickPosition = thumb.value[bar.value.offset] - prevPage;
2179
+ const thumbPositionPercentage = (offset - thumbClickPosition) * 100 / instance?.vnode.el?.[bar.value.offset];
2180
+ wrap.value[bar.value.scroll] = thumbPositionPercentage * wrap.value[bar.value.scrollSize] / 100;
2181
+ };
2182
+ function mouseUpDocumentHandler() {
2183
+ cursorDown.value = false;
2184
+ barStore.value[bar.value.axis] = 0;
2185
+ off(document, "mousemove", mouseMoveDocumentHandler);
2186
+ document.onselectstart = null;
2187
+ }
2188
+ onUnmounted(() => {
2189
+ off(document, "mouseup", mouseUpDocumentHandler);
2190
+ });
2191
+ return () => h$1(
2192
+ "div",
2193
+ {
2194
+ class: ["scrollbar__bar", "is-" + bar.value.key],
2195
+ onMousedown: clickTrackHandler
2196
+ },
2197
+ h$1("div", {
2198
+ ref: thumb,
2199
+ class: "scrollbar__thumb",
2200
+ onMousedown: clickThumbHandler,
2201
+ style: renderThumbStyle({
2202
+ size: props2.size,
2203
+ move: props2.move,
2204
+ bar: bar.value
2205
+ })
2206
+ })
2207
+ );
2208
+ }
2209
+ });
2210
+ const _hoisted_1$6 = { class: "scrollbar relative h-full overflow-hidden" };
2211
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
2212
+ __name: "scroll-bar",
2213
+ props: {
2214
+ wrapClass: {
2215
+ type: [String, Array],
2216
+ default: ""
2217
+ },
2218
+ wrapStyle: Array,
2219
+ viewClass: {
2220
+ type: [String, Array],
2221
+ default: ""
2222
+ },
2223
+ viewStyle: {
2224
+ type: [String, Array],
2225
+ default: ""
2226
+ },
2227
+ noresize: Boolean,
2228
+ tag: {
2229
+ type: String,
2230
+ default: "div"
2231
+ }
2232
+ },
2233
+ setup(__props) {
2234
+ const props2 = __props;
2235
+ const sizeWidth = ref$1("0");
2236
+ const sizeHeight = ref$1("0");
2237
+ const moveX = ref$1(0);
2238
+ const moveY = ref$1(0);
2239
+ const wrap = ref$1();
2240
+ const resize = ref$1();
2241
+ provide("scroll-bar-wrap", wrap);
2242
+ const style = computed$1(() => {
2243
+ let rsStyle = {};
2244
+ if (Array.isArray(props2.wrapStyle)) {
2245
+ props2.wrapStyle.forEach((it) => {
2246
+ if (it)
2247
+ rsStyle = Object.assign({}, rsStyle, it);
2248
+ });
2249
+ }
2250
+ return rsStyle;
2251
+ });
2252
+ const handleScroll = () => {
2253
+ moveY.value = unref(wrap).scrollTop * 100 / unref(wrap).clientHeight;
2254
+ moveX.value = unref(wrap).scrollLeft * 100 / unref(wrap).clientWidth;
2255
+ };
2256
+ const update = () => {
2257
+ if (!unref(wrap))
2258
+ return;
2259
+ const heightPercentage = unref(wrap).clientHeight * 100 / unref(wrap).scrollHeight;
2260
+ const widthPercentage = unref(wrap).clientWidth * 100 / unref(wrap).scrollWidth;
2261
+ sizeHeight.value = heightPercentage < 100 ? heightPercentage + "%" : "";
2262
+ sizeWidth.value = widthPercentage < 100 ? widthPercentage + "%" : "";
2263
+ };
2264
+ onMounted$1(() => {
2265
+ nextTick(update);
2266
+ if (!props2.noresize) {
2267
+ addResizeListener(unref(resize), update);
2268
+ addResizeListener(unref(wrap), update);
2269
+ addEventListener("resize", update);
2270
+ }
2271
+ });
2272
+ onBeforeUnmount(() => {
2273
+ if (!props2.noresize) {
2274
+ removeResizeListener(unref(resize), update);
2275
+ removeResizeListener(unref(wrap), update);
2276
+ removeEventListener("resize", update);
2277
+ }
2278
+ });
2279
+ return (_ctx, _cache) => {
2280
+ return openBlock(), createElementBlock("div", _hoisted_1$6, [
2281
+ createElementVNode("div", {
2282
+ ref_key: "wrap",
2283
+ ref: wrap,
2284
+ class: normalizeClass([[__props.wrapClass, "scrollbar__wrap--hidden-default"], "h-full overflow-auto"]),
2285
+ style: normalizeStyle(unref(style)),
2286
+ onScroll: handleScroll
2287
+ }, [
2288
+ (openBlock(), createBlock(resolveDynamicComponent(__props.tag), {
2289
+ class: normalizeClass(["box-border", __props.viewClass]),
2290
+ ref_key: "resize",
2291
+ ref: resize,
2292
+ style: normalizeStyle(__props.viewStyle)
2293
+ }, {
2294
+ default: withCtx(() => [
2295
+ renderSlot(_ctx.$slots, "default")
2296
+ ]),
2297
+ _: 3
2298
+ }, 8, ["class", "style"]))
2299
+ ], 38),
2300
+ createVNode(unref(Bar), {
2301
+ move: moveX.value,
2302
+ size: sizeWidth.value
2303
+ }, null, 8, ["move", "size"]),
2304
+ createVNode(unref(Bar), {
2305
+ vertical: "",
2306
+ move: moveY.value,
2307
+ size: sizeHeight.value
2308
+ }, null, 8, ["move", "size"])
2309
+ ]);
2310
+ };
2311
+ }
2312
+ });
2313
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
2314
+ __name: "scroll-container",
2315
+ setup(__props) {
2316
+ const scrollbarRef = ref(null);
2317
+ return (_ctx, _cache) => {
2318
+ return openBlock(), createBlock(_sfc_main$c, mergeProps({
2319
+ ref_key: "scrollbarRef",
2320
+ ref: scrollbarRef
2321
+ }, _ctx.$attrs, { class: "w-full h-full" }), {
2322
+ default: withCtx(() => [
2323
+ renderSlot(_ctx.$slots, "default")
2324
+ ]),
2325
+ _: 3
2326
+ }, 16);
2327
+ };
2328
+ }
2329
+ });
2330
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
2331
+ __name: "slot-container",
2332
+ props: {
2333
+ template: {
2334
+ type: Function
2335
+ },
2336
+ data: {
2337
+ type: Object
2338
+ }
2339
+ },
2340
+ setup(__props) {
2341
+ const props2 = __props;
2342
+ const Container = h("div", [props2.template(props2.data)]);
2343
+ return (_ctx, _cache) => {
2344
+ return openBlock(), createBlock(unref(Container));
2345
+ };
2346
+ }
2347
+ });
2348
+ const withInstall = (comp) => {
2349
+ comp.install = (app) => {
2350
+ app.component(comp.name, comp);
2351
+ };
2352
+ return comp;
2353
+ };
2354
+ const DtScrollContainer = withInstall(_sfc_main$b);
2355
+ withInstall(_sfc_main$a);
2356
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
2357
+ __name: "ModalWrap",
2358
+ props: {
2359
+ useWrapper: { type: Boolean, default: true },
2360
+ modalHeaderHeight: { type: Number, default: 55 },
2361
+ modalFooterHeight: { type: Number, default: 58 },
2362
+ minHeight: { type: Number, default: 200 },
2363
+ height: { type: Number },
2364
+ visible: { type: Boolean },
2365
+ fullScreen: { type: Boolean }
2366
+ },
2367
+ emits: ["ext-height", "height-change"],
2368
+ setup(__props, { emit: emits }) {
2369
+ const props2 = __props;
2370
+ const wrapperRef = ref$1(null);
2371
+ const wrapRef = ref$1(null);
2372
+ const realHeightRef = ref$1(0);
2373
+ const minRealHeightRef = ref$1(0);
2374
+ let realHeight = 0;
2375
+ const wrapStyle = computed$1(() => {
2376
+ return {
2377
+ minHeight: `${props2.minHeight}px`,
2378
+ [props2.fullScreen ? "height" : "maxHeight"]: `${unref(realHeightRef)}px`
2379
+ };
2380
+ });
2381
+ onMounted(() => {
2382
+ const { modalHeaderHeight, modalFooterHeight } = props2;
2383
+ emits("ext-height", modalHeaderHeight + modalFooterHeight);
2384
+ });
2385
+ async function getModalDom() {
2386
+ const wrapperRefDom = unref(wrapperRef);
2387
+ if (!wrapperRefDom)
2388
+ return;
2389
+ const bodyDom = wrapperRefDom.$el.parentElement;
2390
+ if (!bodyDom)
2391
+ return;
2392
+ bodyDom.style.padding = "0";
2393
+ await nextTick();
2394
+ const modalDom = bodyDom.parentElement && bodyDom.parentElement.parentElement;
2395
+ return modalDom;
2396
+ }
2397
+ async function setModalHeight() {
2398
+ if (!props2.visible)
2399
+ return;
2400
+ try {
2401
+ const modalDom = await getModalDom();
2402
+ if (!modalDom)
2403
+ return;
2404
+ const modalRect = getComputedStyle(modalDom).top;
2405
+ const modalTop = Number.parseInt(modalRect);
2406
+ let maxHeight = window.innerHeight - props2.modalFooterHeight - props2.modalHeaderHeight - 100;
2407
+ if (modalTop < 40) {
2408
+ maxHeight -= 26;
2409
+ }
2410
+ await nextTick();
2411
+ const warpEl = unref(wrapRef);
2412
+ if (!warpEl)
2413
+ return;
2414
+ await nextTick();
2415
+ realHeight = warpEl.scrollHeight;
2416
+ if (props2.fullScreen) {
2417
+ realHeightRef.value = window.innerHeight - props2.modalFooterHeight - props2.modalHeaderHeight;
2418
+ } else {
2419
+ realHeightRef.value = props2.height ? props2.height : realHeight > maxHeight ? maxHeight : realHeight;
2420
+ }
2421
+ emits("height-change", unref(realHeightRef));
2422
+ const _modalDom = await getModalDom();
2423
+ _modalDom.style.top = (window.innerHeight - _modalDom.offsetHeight) / 2 + "px";
2424
+ } catch (error2) {
2425
+ console.log(error2);
2426
+ }
2427
+ }
2428
+ windowResizeFn(setModalHeight.bind(null, false));
2429
+ watchEffect(() => {
2430
+ props2.useWrapper && setModalHeight();
2431
+ });
2432
+ watch(
2433
+ () => props2.fullScreen,
2434
+ (v) => {
2435
+ setModalHeight();
2436
+ if (!v) {
2437
+ realHeightRef.value = minRealHeightRef.value;
2438
+ } else {
2439
+ minRealHeightRef.value = realHeightRef.value;
2440
+ }
2441
+ }
2442
+ );
2443
+ return (_ctx, _cache) => {
2444
+ return openBlock(), createBlock(unref(DtScrollContainer), {
2445
+ ref_key: "wrapperRef",
2446
+ ref: wrapperRef
2447
+ }, {
2448
+ default: withCtx(() => [
2449
+ createElementVNode("div", {
2450
+ ref_key: "wrapRef",
2451
+ ref: wrapRef,
2452
+ style: normalizeStyle(unref(wrapStyle))
2453
+ }, [
2454
+ renderSlot(_ctx.$slots, "default")
2455
+ ], 4)
2456
+ ]),
2457
+ _: 3
2458
+ }, 512);
2459
+ };
2460
+ }
2461
+ });
2462
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2463
+ __name: "ModalFooter",
2464
+ props: {
2465
+ buttons: Object,
2466
+ showSave: { type: Boolean, default: true },
2467
+ showCancel: { type: Boolean, default: true },
2468
+ okText: { type: String },
2469
+ cancelText: { type: String }
2470
+ },
2471
+ emits: [
2472
+ "handleSave",
2473
+ "handleCancel"
2474
+ ],
2475
+ setup(__props, { emit: emits }) {
2476
+ const props2 = __props;
2477
+ const { t } = useI18n("UI");
2478
+ const buttonList = computed$1(() => {
2479
+ if (props2.buttons && props2.buttons.length)
2480
+ return props2.buttons;
2481
+ let buttonActions = [
2482
+ { t: "\u4FDD\u5B58", name: props2.okText || t("SAVE"), preIcon: "mdi:content-save", type: "primary", flag: "OK" },
2483
+ { t: "\u5173\u95ED", name: props2.cancelText || t("CLOSE"), preIcon: "mdi:close", flag: "CANCEL" }
2484
+ ];
2485
+ if (!props2.showSave)
2486
+ buttonActions = buttonActions.filter((btn) => btn.flag !== "OK");
2487
+ if (!props2.showCancel)
2488
+ buttonActions = buttonActions.filter((btn) => btn.flag !== "CANCEL");
2489
+ return buttonActions;
2490
+ });
2491
+ function handleMethod(item) {
2492
+ switch (item.flag) {
2493
+ case "OK":
2494
+ emits("handleSave");
2495
+ break;
2496
+ case "CANCEL":
2497
+ emits("handleCancel");
2498
+ break;
2499
+ }
2500
+ }
2501
+ return (_ctx, _cache) => {
2502
+ return openBlock(), createElementBlock(Fragment, null, [
2503
+ renderSlot(_ctx.$slots, "appendFooter"),
2504
+ createVNode(_sfc_main$g, {
2505
+ mode: "dialog",
2506
+ buttonList: unref(buttonList),
2507
+ onHandleMethod: _cache[0] || (_cache[0] = ($event) => handleMethod($event))
2508
+ }, null, 8, ["buttonList"])
2509
+ ], 64);
2510
+ };
2511
+ }
2512
+ });
2513
+ function useFullScreen(wrapClassName) {
2514
+ const fullScreenRef = ref$1(false);
2515
+ const getWrapClassName = computed$1(() => {
2516
+ const clsName = unref(wrapClassName) || "";
2517
+ const cls = unref(fullScreenRef) ? `fullscreen-modal ${clsName} ` : unref(clsName);
2518
+ return `dt-modal ${cls}`;
2519
+ });
2520
+ function toggleFullScreen(e) {
2521
+ e && e.stopPropagation();
2522
+ fullScreenRef.value = !unref(fullScreenRef);
2523
+ dispatchResize();
2524
+ }
2525
+ return {
2526
+ fullScreenRef,
2527
+ getWrapClassName,
2528
+ toggleFullScreen
2529
+ };
2530
+ }
2531
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
2532
+ __name: "index",
2533
+ props: basicProps,
2534
+ emits: ["visible-change", "height-change", "cancel", "save", "register", "update:visible"],
2535
+ setup(__props, { emit: emits }) {
2536
+ const props2 = __props;
2537
+ const visibleRef = ref$1(false);
2538
+ const propsRef = ref$1();
2539
+ const modalWrapperRef = ref$1(null);
2540
+ const { getWrapClassName, toggleFullScreen, fullScreenRef } = useFullScreen(computed$1(() => unref(propsRef)?.wrapClassName));
2541
+ const getMergeProps = computed$1(() => {
2542
+ return {
2543
+ ...props2,
2544
+ ...unref(propsRef)
2545
+ };
2546
+ });
2547
+ const getBindValue = computed$1(() => {
2548
+ const bindValue = {
2549
+ ...unref(getMergeProps),
2550
+ ...unref(propsRef),
2551
+ visible: unref(visibleRef),
2552
+ wrapClassName: unref(getWrapClassName)
2553
+ };
2554
+ let omitArr = unref(fullScreenRef) ? ["height", "title"] : ["title"];
2555
+ if (isArray(unref(propsRef)?.footer)) {
2556
+ omitArr.push("footer");
2557
+ }
2558
+ return omit(bindValue, omitArr);
2559
+ });
2560
+ const getWrapperHeight = computed$1(() => {
2561
+ if (unref(fullScreenRef))
2562
+ return void 0;
2563
+ return unref(getBindValue).height;
2564
+ });
2565
+ const modalFooterHeight = computed$1(() => {
2566
+ if (isArray(props2.footer)) {
2567
+ return (unref(propsRef)?.footer).length ? 0 : void 0;
2568
+ }
2569
+ return props2?.footer !== void 0 && !props2.footer ? 0 : void 0;
2570
+ });
2571
+ const modalMethods = {
2572
+ setModalProps,
2573
+ redoModalHeight: () => {
2574
+ nextTick(() => {
2575
+ if (unref(modalWrapperRef)) {
2576
+ unref(modalWrapperRef).setModalHeight();
2577
+ }
2578
+ });
2579
+ }
2580
+ };
2581
+ const instance = getCurrentInstance();
2582
+ if (instance) {
2583
+ emits("register", modalMethods, instance.uid);
2584
+ }
2585
+ function handleHeightChange(height) {
2586
+ emits("height-change", height);
2587
+ }
2588
+ function setModalProps(props22) {
2589
+ propsRef.value = deepMerge(unref(propsRef) || {}, props22);
2590
+ if (Reflect.has(props22, "visible")) {
2591
+ visibleRef.value = !!props22.visible;
2592
+ }
2593
+ if (Reflect.has(props22, "defaultFullscreen")) {
2594
+ fullScreenRef.value = !!props22.defaultFullscreen;
2595
+ }
2596
+ }
2597
+ function handleSave() {
2598
+ emits("save");
2599
+ }
2600
+ async function handleCancel(e = null) {
2601
+ if (e) {
2602
+ e?.stopPropagation();
2603
+ if (e.target?.classList?.contains("dt-basic-modal-close--custom"))
2604
+ return;
2605
+ if (props2.closeFunc && isFunction(props2.closeFunc)) {
2606
+ const isClose = await props2.closeFunc();
2607
+ visibleRef.value = !isClose;
2608
+ return;
2609
+ }
2610
+ }
2611
+ const { afterClose } = unref(getBindValue);
2612
+ if (afterClose && isFunction(afterClose)) {
2613
+ afterClose();
2614
+ }
2615
+ visibleRef.value = false;
2616
+ emits("cancel", e);
2617
+ }
2618
+ watch(() => unref(visibleRef), (v) => {
2619
+ emits("visible-change", v);
2620
+ emits("update:visible", v);
2621
+ nextTick(() => {
2622
+ if (props2.scrollTop && v && unref(modalWrapperRef)) {
2623
+ unref(modalWrapperRef).$el.scrollTop = 0;
2624
+ }
2625
+ });
2626
+ }, {
2627
+ immediate: false
2628
+ });
2629
+ return (_ctx, _cache) => {
2630
+ const _component_ASpin = Spin;
2631
+ return openBlock(), createBlock(_sfc_main$e, mergeProps(unref(getBindValue), { onCancel: handleCancel }), createSlots({
2632
+ default: withCtx(() => [
2633
+ createVNode(_component_ASpin, {
2634
+ spinning: unref(getBindValue).loading,
2635
+ tip: unref(getBindValue).loadingTip
2636
+ }, {
2637
+ default: withCtx(() => [
2638
+ createVNode(_sfc_main$9, mergeProps({
2639
+ useWrapper: unref(getBindValue).useWrapper,
2640
+ fullScreen: unref(fullScreenRef),
2641
+ ref_key: "modalWrapperRef",
2642
+ ref: modalWrapperRef,
2643
+ minHeight: unref(getBindValue).minHeight,
2644
+ height: unref(getWrapperHeight),
2645
+ visible: visibleRef.value,
2646
+ modalFooterHeight: unref(modalFooterHeight)
2647
+ }, unref(omit)(unref(getBindValue).wrapperProps, "visible", "height", "modalFooterHeight"), { onHeightChange: handleHeightChange }), {
2648
+ default: withCtx(() => [
2649
+ renderSlot(_ctx.$slots, "default")
2650
+ ]),
2651
+ _: 3
2652
+ }, 16, ["useWrapper", "fullScreen", "minHeight", "height", "visible", "modalFooterHeight"])
2653
+ ]),
2654
+ _: 3
2655
+ }, 8, ["spinning", "tip"])
2656
+ ]),
2657
+ _: 2
2658
+ }, [
2659
+ !_ctx.$slots.closeIcon ? {
2660
+ name: "closeIcon",
2661
+ fn: withCtx(() => [
2662
+ createVNode(_sfc_main$d, {
2663
+ canFullscreen: unref(getBindValue).canFullscreen,
2664
+ fullScreen: unref(fullScreenRef),
2665
+ onCancel: handleCancel,
2666
+ onFullscreen: unref(toggleFullScreen)
2667
+ }, null, 8, ["canFullscreen", "fullScreen", "onFullscreen"])
2668
+ ]),
2669
+ key: "0"
2670
+ } : void 0,
2671
+ !_ctx.$slots.title ? {
2672
+ name: "title",
2673
+ fn: withCtx(() => [
2674
+ createTextVNode(toDisplayString(unref(getMergeProps).title), 1)
2675
+ ]),
2676
+ key: "1"
2677
+ } : void 0,
2678
+ !_ctx.$slots.footer ? {
2679
+ name: "footer",
2680
+ fn: withCtx(() => [
2681
+ createVNode(_sfc_main$8, {
2682
+ buttons: propsRef.value?.footer,
2683
+ showSave: unref(getBindValue).showOkBtn,
2684
+ showCancel: unref(getBindValue).showCancelBtn,
2685
+ okText: unref(getBindValue).okText,
2686
+ cancelText: unref(getBindValue).cancelText,
2687
+ onHandleSave: handleSave,
2688
+ onHandleCancel: handleCancel
2689
+ }, createSlots({ _: 2 }, [
2690
+ renderList(Object.keys(_ctx.$slots), (item) => {
2691
+ return {
2692
+ name: item,
2693
+ fn: withCtx((data) => [
2694
+ renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
2695
+ ])
2696
+ };
2697
+ })
2698
+ ]), 1032, ["buttons", "showSave", "showCancel", "okText", "cancelText"])
2699
+ ]),
2700
+ key: "2"
2701
+ } : void 0,
2702
+ renderList(Object.keys(unref(omit)(_ctx.$slots, "default")), (item) => {
2703
+ return {
2704
+ name: item,
2705
+ fn: withCtx((data) => [
2706
+ renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
2707
+ ])
2708
+ };
2709
+ })
2710
+ ]), 1040);
2711
+ };
2712
+ }
2713
+ });
2714
+ const _hoisted_1$5 = { class: "column-select" };
2715
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2716
+ __name: "DownloadCtrl",
2717
+ setup(__props) {
2718
+ const { t } = useI18n("UI");
2719
+ const { message } = useMessage();
2720
+ const state = reactive({
2721
+ indeterminate: false,
2722
+ checkAll: false
2723
+ });
2724
+ const modalData = ref$1([]);
2725
+ const onCheckAllChange = (e) => {
2726
+ modalData.value?.map((it) => it.show = e.target.checked);
2727
+ };
2728
+ const [registerDialog, { closeModal }] = useModal(
2729
+ {
2730
+ width: "60%",
2731
+ title: t("SETTING_EXPORT_COLUMN")
2732
+ },
2733
+ (data) => {
2734
+ modalData.value = data;
2735
+ }
2736
+ );
2737
+ function save() {
2738
+ let columns = unref(modalData)?.filter((it) => it.show);
2739
+ if (!columns.length) {
2740
+ message.error(t("NO_EXPORT_COLUMN"));
2741
+ return;
2742
+ }
2743
+ closeModal(columns);
2744
+ }
2745
+ watch(
2746
+ () => unref(modalData),
2747
+ (v) => {
2748
+ if (isArray(v)) {
2749
+ let showLens = v.filter((it) => it.show).length;
2750
+ Object.assign(state, {
2751
+ checkAll: showLens === v.length,
2752
+ indeterminate: showLens !== v.length && showLens > 0
2753
+ });
2754
+ }
2755
+ },
2756
+ {
2757
+ deep: true
2758
+ }
2759
+ );
2760
+ return (_ctx, _cache) => {
2761
+ const _component_ACheckbox = Checkbox$1;
2762
+ const _component_ADivider = Divider$1;
2763
+ const _component_ACol = Col;
2764
+ const _component_ARow = Row;
2765
+ return openBlock(), createBlock(unref(_sfc_main$7), {
2766
+ onRegister: unref(registerDialog),
2767
+ onSave: save
2768
+ }, {
2769
+ default: withCtx(() => [
2770
+ createElementVNode("div", _hoisted_1$5, [
2771
+ createVNode(_component_ACheckbox, {
2772
+ checked: state.checkAll,
2773
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => state.checkAll = $event),
2774
+ indeterminate: state.indeterminate,
2775
+ onChange: onCheckAllChange
2776
+ }, {
2777
+ default: withCtx(() => [
2778
+ createTextVNode(toDisplayString(unref(t)("SELECT_ALL")), 1)
2779
+ ]),
2780
+ _: 1
2781
+ }, 8, ["checked", "indeterminate"]),
2782
+ createVNode(_component_ADivider, { dashed: "" }),
2783
+ createVNode(_component_ARow, null, {
2784
+ default: withCtx(() => [
2785
+ (openBlock(true), createElementBlock(Fragment, null, renderList(modalData.value, (it, index) => {
2786
+ return openBlock(), createBlock(_component_ACol, { span: 8 }, {
2787
+ default: withCtx(() => [
2788
+ createVNode(_component_ACheckbox, {
2789
+ checked: it.show,
2790
+ "onUpdate:checked": ($event) => it.show = $event
2791
+ }, {
2792
+ default: withCtx(() => [
2793
+ createTextVNode(toDisplayString(it.title), 1)
2794
+ ]),
2795
+ _: 2
2796
+ }, 1032, ["checked", "onUpdate:checked"])
2797
+ ]),
2798
+ _: 2
2799
+ }, 1024);
2800
+ }), 256))
2801
+ ]),
2802
+ _: 1
2803
+ })
2804
+ ])
2805
+ ]),
2806
+ _: 1
2807
+ }, 8, ["onRegister"]);
2808
+ };
2809
+ }
2810
+ });
2811
+ const _hoisted_1$4 = /* @__PURE__ */ createElementVNode("i", { class: "i ic:baseline-download w-7 leading-7 text-center cursor-pointer" }, null, -1);
2812
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2813
+ __name: "Download",
2814
+ props: {
2815
+ onlyBackDowonload: Boolean,
2816
+ onlyFrontDownload: Boolean
2817
+ },
2818
+ setup(__props) {
2819
+ const table = getTableInstance();
2820
+ const [registerDialog, { openModal }] = useModalOut();
2821
+ const { t } = useI18n("UI");
2822
+ function handleTitleClick({ key }) {
2823
+ const { onDownload, columns: allColumns, dataSource } = unref(table.getBind);
2824
+ const excludesFlag = ["ACTION", "CHECKBOX", "RADIO"];
2825
+ const columns = allColumns.filter((it) => !excludesFlag.includes(it.flag));
2826
+ openModal(columns, (selectColumns) => {
2827
+ onDownload({
2828
+ type: key,
2829
+ columns: selectColumns,
2830
+ rows: key === "select" ? table.getSelectRows() : key === "current" ? dataSource : []
2831
+ });
2832
+ });
2833
+ }
2834
+ return (_ctx, _cache) => {
2835
+ const _component_AMenuItem = MenuItem;
2836
+ const _component_AMenu = Menu;
2837
+ const _component_ADropdown = Dropdown;
2838
+ const _component_ATooltip = Tooltip;
2839
+ return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
2840
+ title: withCtx(() => [
2841
+ createElementVNode("span", null, toDisplayString(unref(t)("EXPORT")), 1)
2842
+ ]),
2843
+ default: withCtx(() => [
2844
+ createVNode(_component_ADropdown, {
2845
+ placement: "bottom",
2846
+ trigger: ["click"],
2847
+ getPopupContainer: unref(getPopupContainer)
2848
+ }, {
2849
+ overlay: withCtx(() => [
2850
+ createVNode(_component_AMenu, { onClick: handleTitleClick }, {
2851
+ default: withCtx(() => [
2852
+ !__props.onlyBackDowonload ? (openBlock(), createBlock(_component_AMenuItem, { key: "current" }, {
2853
+ default: withCtx(() => [
2854
+ createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_CURRENT_PAGE")), 1)
2855
+ ]),
2856
+ _: 1
2857
+ })) : createCommentVNode("", true),
2858
+ !__props.onlyBackDowonload ? (openBlock(), createBlock(_component_AMenuItem, { key: "select" }, {
2859
+ default: withCtx(() => [
2860
+ createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_SELECT_COLUMN")), 1)
2861
+ ]),
2862
+ _: 1
2863
+ })) : createCommentVNode("", true),
2864
+ !__props.onlyFrontDownload ? (openBlock(), createBlock(_component_AMenuItem, { key: "all" }, {
2865
+ default: withCtx(() => [
2866
+ createElementVNode("span", null, toDisplayString(unref(t)("EXPORT_ALL")), 1)
2867
+ ]),
2868
+ _: 1
2869
+ })) : createCommentVNode("", true)
2870
+ ]),
2871
+ _: 1
2872
+ })
2873
+ ]),
2874
+ default: withCtx(() => [
2875
+ _hoisted_1$4
2876
+ ]),
2877
+ _: 1
2878
+ }, 8, ["getPopupContainer"]),
2879
+ createVNode(_sfc_main$6, { onRegister: unref(registerDialog) }, null, 8, ["onRegister"])
2880
+ ]),
2881
+ _: 1
2882
+ });
2883
+ };
2884
+ }
2885
+ });
2886
+ const _hoisted_1$3 = /* @__PURE__ */ createElementVNode("i", { class: "i ant-design:drag-outlined drag-icon cursor-pointer" }, null, -1);
2887
+ const _hoisted_2$1 = ["onClick"];
2888
+ const _hoisted_3$1 = ["onClick"];
2889
+ const _hoisted_4$1 = /* @__PURE__ */ createElementVNode("i", { class: "i ant-design:setting-outlined w-7 leading-7 text-center cursor-pointer" }, null, -1);
2890
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2891
+ __name: "Column",
2892
+ emits: [
2893
+ "columns-change"
2894
+ ],
2895
+ setup(__props, { emit: emits }) {
2896
+ const { t } = useI18n("UI");
2897
+ const attrs = useAttrs();
2898
+ const prefixCls = "column-setting";
2899
+ const table = getTableInstance();
2900
+ const defaultRowSelection = omit(table.getRowSelection(), "selectedRowKeys");
2901
+ let inited = false;
2902
+ const cachePlainOptions = ref$1([]);
2903
+ const plainOptions = ref$1([]);
2904
+ const plainSortOptions = ref$1([]);
2905
+ const columnListRef = ref$1(null);
2906
+ const checkIndex = ref$1(false);
2907
+ const checkSelect = ref$1(false);
2908
+ const getValues = computed$1(() => {
2909
+ return unref(table?.getBind);
2910
+ });
2911
+ let sortable;
2912
+ let sortableOrder = [];
2913
+ const state = reactive({
2914
+ checkAll: true,
2915
+ checkedList: [],
2916
+ defaultCheckList: []
2917
+ });
2918
+ const indeterminate = computed$1(() => {
2919
+ let len = plainOptions.value.length;
2920
+ let checkedLen = state.checkedList.length;
2921
+ unref(checkIndex) && checkedLen--;
2922
+ return checkedLen > 0 && checkedLen < len;
2923
+ });
2924
+ watchEffect(() => {
2925
+ const columns = table.getColumns();
2926
+ if (columns && columns.length) {
2927
+ init();
2928
+ }
2929
+ });
2930
+ watchEffect(() => {
2931
+ const values = unref(getValues);
2932
+ checkIndex.value = !!values.showIndexColumn;
2933
+ checkSelect.value = !!values.rowSelection;
2934
+ });
2935
+ function handleVisibleChange() {
2936
+ if (inited)
2937
+ return;
2938
+ nextTick(() => {
2939
+ const columnListEl = unref(columnListRef);
2940
+ if (!columnListEl)
2941
+ return;
2942
+ const el = columnListEl.$el;
2943
+ if (!el)
2944
+ return;
2945
+ sortable = Sortablejs.create(unref(el), {
2946
+ animation: 500,
2947
+ delay: 400,
2948
+ delayOnTouchOnly: true,
2949
+ handle: ".drag-icon ",
2950
+ onEnd: (evt) => {
2951
+ const { oldIndex, newIndex } = evt;
2952
+ if (isNullAndUnDef(oldIndex) || isNullAndUnDef(newIndex) || oldIndex === newIndex) {
2953
+ return;
2954
+ }
2955
+ const columns = cloneDeep(plainSortOptions.value);
2956
+ if (oldIndex > newIndex) {
2957
+ columns.splice(newIndex, 0, columns[oldIndex]);
2958
+ columns.splice(oldIndex + 1, 1);
2959
+ } else {
2960
+ columns.splice(newIndex + 1, 0, columns[oldIndex]);
2961
+ columns.splice(oldIndex, 1);
2962
+ }
2963
+ plainSortOptions.value = columns;
2964
+ setColumns(
2965
+ columns.map((col) => col.value).filter((value) => state.checkedList.includes(value))
2966
+ );
2967
+ }
2968
+ });
2969
+ sortableOrder = sortable.toArray();
2970
+ inited = true;
2971
+ });
2972
+ }
2973
+ function onCheckAllChange(e) {
2974
+ const checkList = plainOptions.value.map((item) => item.value);
2975
+ if (e.target.checked) {
2976
+ state.checkedList = checkList;
2977
+ setColumns(checkList);
2978
+ } else {
2979
+ state.checkedList = [];
2980
+ setColumns([]);
2981
+ }
2982
+ }
2983
+ function handleIndexCheckChange(e) {
2984
+ table.setProps({
2985
+ showIndexColumn: e.target.checked
2986
+ });
2987
+ }
2988
+ function handleSelectCheckChange(e) {
2989
+ table.setProps({
2990
+ rowSelection: e.target.checked ? defaultRowSelection : null
2991
+ });
2992
+ }
2993
+ function onChange(checkedList) {
2994
+ const len = plainSortOptions.value.length;
2995
+ state.checkAll = checkedList.length === len;
2996
+ const sortList = unref(plainSortOptions).map((item) => item.value);
2997
+ checkedList.sort((prev, next) => {
2998
+ return sortList.indexOf(prev) - sortList.indexOf(next);
2999
+ });
3000
+ setColumns(checkedList);
3001
+ }
3002
+ function reset() {
3003
+ state.checkedList = [...state.defaultCheckList];
3004
+ state.checkAll = true;
3005
+ plainOptions.value = unref(cachePlainOptions);
3006
+ plainSortOptions.value = unref(cachePlainOptions);
3007
+ setColumns(table.getCacheColumns());
3008
+ sortable.sort(sortableOrder);
3009
+ }
3010
+ function getColumns() {
3011
+ return table.getColumns({
3012
+ ignoreIndex: true,
3013
+ ignoreAction: true
3014
+ }).reduce((ret, it) => {
3015
+ ret.push({
3016
+ label: it.title,
3017
+ value: it.dataIndex || it.title,
3018
+ ...it
3019
+ });
3020
+ return ret;
3021
+ }, []);
3022
+ }
3023
+ function handleColumnFixed(item, fixed) {
3024
+ if (!state.checkedList.includes(item.dataIndex))
3025
+ return;
3026
+ const columns = getColumns();
3027
+ const isFixed = item.fixed === fixed ? false : fixed;
3028
+ const index = columns.findIndex((col) => col.dataIndex === item.dataIndex);
3029
+ if (index !== -1) {
3030
+ columns[index].fixed = isFixed;
3031
+ }
3032
+ item.fixed = isFixed;
3033
+ if (isFixed && !item.width) {
3034
+ item.width = 100;
3035
+ }
3036
+ table.setColumnsByDataIndex?.(item.dataIndex, { fixed: isFixed });
3037
+ setColumns(columns);
3038
+ }
3039
+ function setColumns(columns) {
3040
+ table.setColumns(columns);
3041
+ const data = unref(plainSortOptions).map((col) => {
3042
+ const visable = columns.findIndex(
3043
+ (c) => c === col.value || typeof c !== "string" && c.dataIndex === col.value
3044
+ ) !== -1;
3045
+ return { dataIndex: col.value, fixed: col.fixed, visable };
3046
+ });
3047
+ emits("columns-change", data);
3048
+ }
3049
+ function init() {
3050
+ const columns = getColumns();
3051
+ const checkList = table.getColumns({ ignoreAction: true }).map((it) => it.defaultHidden ? "" : it.dataIndex || it.title).filter(Boolean);
3052
+ if (!plainOptions.value.length) {
3053
+ plainOptions.value = columns;
3054
+ plainSortOptions.value = columns;
3055
+ cachePlainOptions.value = cloneDeep(columns);
3056
+ state.defaultCheckList = checkList;
3057
+ } else {
3058
+ unref(plainOptions).forEach(
3059
+ (it) => it.fixed === columns.find((col) => col.dataIndex === it.dataIndex)?.fixed
3060
+ );
3061
+ }
3062
+ state.isInit = true;
3063
+ state.checkedList = checkList;
3064
+ }
3065
+ function getPopupContainer$1() {
3066
+ return isFunction$1(attrs.getPopupContainer) ? attrs.getPopupContainer() : getPopupContainer();
3067
+ }
3068
+ return (_ctx, _cache) => {
3069
+ const _component_ACheckbox = Checkbox$1;
3070
+ const _component_AButton = Button;
3071
+ const _component_ATooltip = Tooltip;
3072
+ const _component_ADivider = Divider$1;
3073
+ const _component_ACheckboxGroup = CheckboxGroup;
3074
+ const _component_APopover = Popover$1;
3075
+ return openBlock(), createBlock(_component_ATooltip, { placement: "top" }, {
3076
+ title: withCtx(() => [
3077
+ createElementVNode("span", null, toDisplayString(unref(t)("COLUMN_CONTROL")), 1)
3078
+ ]),
3079
+ default: withCtx(() => [
3080
+ createVNode(_component_APopover, {
3081
+ placement: "bottomLeft",
3082
+ trigger: "click",
3083
+ overlayClassName: `${prefixCls}__cloumn-list`,
3084
+ onVisibleChange: handleVisibleChange,
3085
+ getPopupContainer: getPopupContainer$1
3086
+ }, {
3087
+ title: withCtx(() => [
3088
+ createElementVNode("div", {
3089
+ class: normalizeClass(`${prefixCls}__popover-title flex`)
3090
+ }, [
3091
+ createVNode(_component_ACheckbox, {
3092
+ indeterminate: unref(indeterminate),
3093
+ checked: state.checkAll,
3094
+ "onUpdate:checked": _cache[0] || (_cache[0] = ($event) => state.checkAll = $event),
3095
+ onChange: onCheckAllChange
3096
+ }, {
3097
+ default: withCtx(() => [
3098
+ createTextVNode(toDisplayString(unref(t)("COLUMN_SHOW")), 1)
3099
+ ]),
3100
+ _: 1
3101
+ }, 8, ["indeterminate", "checked"]),
3102
+ createVNode(_component_ACheckbox, {
3103
+ checked: checkIndex.value,
3104
+ "onUpdate:checked": _cache[1] || (_cache[1] = ($event) => checkIndex.value = $event),
3105
+ onChange: handleIndexCheckChange
3106
+ }, {
3107
+ default: withCtx(() => [
3108
+ createTextVNode(toDisplayString(unref(t)("INDEX")), 1)
3109
+ ]),
3110
+ _: 1
3111
+ }, 8, ["checked"]),
3112
+ createVNode(_component_ACheckbox, {
3113
+ checked: checkSelect.value,
3114
+ "onUpdate:checked": _cache[2] || (_cache[2] = ($event) => checkSelect.value = $event),
3115
+ onChange: handleSelectCheckChange,
3116
+ disabled: !unref(defaultRowSelection)
3117
+ }, {
3118
+ default: withCtx(() => [
3119
+ createTextVNode(toDisplayString(unref(t)("CHECKBOX")), 1)
3120
+ ]),
3121
+ _: 1
3122
+ }, 8, ["checked", "disabled"]),
3123
+ createVNode(_component_AButton, {
3124
+ type: "link",
3125
+ onClick: reset
3126
+ }, {
3127
+ default: withCtx(() => [
3128
+ createTextVNode(toDisplayString(unref(t)("RESET")), 1)
3129
+ ]),
3130
+ _: 1
3131
+ })
3132
+ ], 2)
3133
+ ]),
3134
+ content: withCtx(() => [
3135
+ createVNode(_component_ACheckboxGroup, {
3136
+ value: state.checkedList,
3137
+ "onUpdate:value": _cache[3] || (_cache[3] = ($event) => state.checkedList = $event),
3138
+ onChange,
3139
+ ref_key: "columnListRef",
3140
+ ref: columnListRef
3141
+ }, {
3142
+ default: withCtx(() => [
3143
+ (openBlock(true), createElementBlock(Fragment, null, renderList(plainOptions.value, (item) => {
3144
+ return openBlock(), createElementBlock("div", {
3145
+ key: item.value,
3146
+ class: normalizeClass(`${prefixCls}__check-item flex pt-1 pr-4 pb-2 items-center`)
3147
+ }, [
3148
+ _hoisted_1$3,
3149
+ createVNode(_component_ACheckbox, {
3150
+ value: item.value
3151
+ }, {
3152
+ default: withCtx(() => [
3153
+ createTextVNode(toDisplayString(item.label), 1)
3154
+ ]),
3155
+ _: 2
3156
+ }, 1032, ["value"]),
3157
+ createVNode(_component_ATooltip, {
3158
+ placement: "bottomLeft",
3159
+ mouseLeaveDelay: 0.4,
3160
+ getPopupContainer: getPopupContainer$1
3161
+ }, {
3162
+ title: withCtx(() => [
3163
+ createTextVNode(toDisplayString(unref(t)("FIXED_TO_LEFT")), 1)
3164
+ ]),
3165
+ default: withCtx(() => [
3166
+ createElementVNode("span", {
3167
+ class: normalizeClass({
3168
+ disabled: !state.checkedList.includes(item.value),
3169
+ active: item.fixed === "left"
3170
+ })
3171
+ }, [
3172
+ createElementVNode("i", {
3173
+ class: normalizeClass(["i mdi:arrow-collapse-left cursor-pointer", `${prefixCls}__fixed-left`]),
3174
+ onClick: ($event) => handleColumnFixed(item, "left")
3175
+ }, null, 10, _hoisted_2$1)
3176
+ ], 2)
3177
+ ]),
3178
+ _: 2
3179
+ }, 1032, ["mouseLeaveDelay"]),
3180
+ createVNode(_component_ADivider, { type: "vertical" }),
3181
+ createVNode(_component_ATooltip, {
3182
+ placement: "bottomLeft",
3183
+ mouseLeaveDelay: 0.4,
3184
+ getPopupContainer: getPopupContainer$1
3185
+ }, {
3186
+ title: withCtx(() => [
3187
+ createTextVNode(toDisplayString(unref(t)("FIXED_TO_RIGHT")), 1)
3188
+ ]),
3189
+ default: withCtx(() => [
3190
+ createElementVNode("span", {
3191
+ class: normalizeClass({
3192
+ disabled: !state.checkedList.includes(item.value),
3193
+ active: item.fixed === "right"
3194
+ })
3195
+ }, [
3196
+ createElementVNode("i", {
3197
+ class: normalizeClass(["i mdi:arrow-collapse-right cursor-pointer", `${prefixCls}__fixed-right`]),
3198
+ onClick: ($event) => handleColumnFixed(item, "right")
3199
+ }, null, 10, _hoisted_3$1)
3200
+ ], 2)
3201
+ ]),
3202
+ _: 2
3203
+ }, 1032, ["mouseLeaveDelay"])
3204
+ ], 2);
3205
+ }), 128))
3206
+ ]),
3207
+ _: 1
3208
+ }, 8, ["value"])
3209
+ ]),
3210
+ default: withCtx(() => [
3211
+ _hoisted_4$1
3212
+ ]),
3213
+ _: 1
3214
+ }, 8, ["overlayClassName"])
3215
+ ]),
3216
+ _: 1
3217
+ });
3218
+ };
3219
+ }
3220
+ });
3221
+ const _hoisted_1$2 = { class: "flex dt-table-setting" };
3222
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3223
+ __name: "index",
3224
+ props: {
3225
+ setting: {
3226
+ type: Object,
3227
+ default: () => ({})
3228
+ }
3229
+ },
3230
+ emits: ["columns-change"],
3231
+ setup(__props, { emit: emits }) {
3232
+ const props2 = __props;
3233
+ const getSetting = computed$1(() => {
3234
+ return {
3235
+ download: true,
3236
+ setting: true,
3237
+ fullscreen: true,
3238
+ ...props2.setting
3239
+ };
3240
+ });
3241
+ function handleColumnChange(data) {
3242
+ emits("columns-change", data);
3243
+ }
3244
+ return (_ctx, _cache) => {
3245
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
3246
+ unref(getSetting).download ? (openBlock(), createBlock(_sfc_main$5, normalizeProps(mergeProps({ key: 0 }, unref(getSetting))), null, 16)) : createCommentVNode("", true),
3247
+ unref(getSetting).setting ? (openBlock(), createBlock(_sfc_main$4, {
3248
+ key: 1,
3249
+ onColumnsChange: handleColumnChange
3250
+ })) : createCommentVNode("", true),
3251
+ unref(getSetting).fullscreen ? (openBlock(), createBlock(_sfc_main$f, { key: 2 })) : createCommentVNode("", true)
3252
+ ]);
3253
+ };
3254
+ }
3255
+ });
3256
+ const _hoisted_1$1 = { class: "dt-table-header" };
3257
+ const _hoisted_2 = { class: "flex flex-row justify-between" };
3258
+ const _hoisted_3 = { class: "flex flex-row flex-1" };
3259
+ const _hoisted_4 = { key: 0 };
3260
+ const _hoisted_5 = {
3261
+ key: 0,
3262
+ class: "border dt-table-header-top text-12 bg-gray-100 mt-1 py-1 px-3 border-dashed"
3263
+ };
3264
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3265
+ __name: "TableHeader",
3266
+ props: {
3267
+ tableSetting: {
3268
+ type: [Object, Boolean]
3269
+ },
3270
+ toolbar: {
3271
+ type: Array,
3272
+ default: () => []
3273
+ }
3274
+ },
3275
+ setup(__props) {
3276
+ const props2 = __props;
3277
+ const getActionsProps = {
3278
+ mode: null,
3279
+ showAdvancedButton: false,
3280
+ show: true,
3281
+ buttonList: props2.toolbar
3282
+ };
3283
+ return (_ctx, _cache) => {
3284
+ return openBlock(), createElementBlock("div", _hoisted_1$1, [
3285
+ createElementVNode("div", _hoisted_2, [
3286
+ createElementVNode("div", _hoisted_3, [
3287
+ unref(getActionsProps)?.buttonList.length ? (openBlock(), createBlock(unref(_sfc_main$g), normalizeProps(mergeProps({ key: 0 }, unref(getActionsProps))), null, 16)) : createCommentVNode("", true),
3288
+ renderSlot(_ctx.$slots, "toolbar")
3289
+ ]),
3290
+ __props.tableSetting ? (openBlock(), createElementBlock("div", _hoisted_4, [
3291
+ createVNode(_sfc_main$3, { setting: __props.tableSetting }, null, 8, ["setting"])
3292
+ ])) : createCommentVNode("", true)
3293
+ ]),
3294
+ _ctx.$slots.headerTop ? (openBlock(), createElementBlock("div", _hoisted_5, [
3295
+ renderSlot(_ctx.$slots, "headerTop")
3296
+ ])) : createCommentVNode("", true)
3297
+ ]);
3298
+ };
3299
+ }
3300
+ });
3301
+ function useTableHeader(propsRef, slots, handlers) {
3302
+ const { t } = useI18n("UI");
3303
+ const getHeaderProps = computed(() => {
3304
+ const TABLE_TOOLS = [
3305
+ { t: "\u65B0\u589E", name: t("ADD"), preIcon: "mdi:plus", type: "primary", onClick: unref(propsRef).onAdd },
3306
+ { t: "\u5220\u9664", name: t("DELETE"), preIcon: "mdi:delete-outline", onClick: unref(propsRef).onDeletes }
3307
+ ];
3308
+ const { tableSetting, toolbar = TABLE_TOOLS } = unref(propsRef);
3309
+ const { getSlot } = useSlots$1();
3310
+ const hideTitle = (!toolbar || !toolbar.filter((it) => it.show ?? true).length) && !slots.toolbar && !slots.headerTop && !tableSetting;
3311
+ return {
3312
+ title: hideTitle ? null : () => h$1(
3313
+ _sfc_main$2,
3314
+ {
3315
+ tableSetting,
3316
+ toolbar,
3317
+ onColumnsChange: handlers.onColumnsChange
3318
+ },
3319
+ {
3320
+ ...slots.toolbar ? {
3321
+ toolbar: () => getSlot(slots, "toolbar")
3322
+ } : {},
3323
+ ...slots.headerTop ? {
3324
+ headerTop: () => getSlot(slots, "headerTop")
3325
+ } : {}
3326
+ }
3327
+ )
3328
+ };
3329
+ });
3330
+ return {
3331
+ getHeaderProps
3332
+ };
3333
+ }
3334
+ function useLoading(props2) {
3335
+ const getLoading = ref$1(false);
3336
+ watch(
3337
+ () => unref(props2)?.loading,
3338
+ (v) => getLoading.value = v
3339
+ );
3340
+ function setLoading(loading) {
3341
+ getLoading.value = loading;
3342
+ }
3343
+ return {
3344
+ getLoading,
3345
+ setLoading
3346
+ };
3347
+ }
3348
+ function usePagination(props2) {
3349
+ const { t } = useI18n("UI");
3350
+ const paginationRef = ref$1();
3351
+ const { getUiSize } = useHeader();
3352
+ watch(
3353
+ () => unref(props2).pagination,
3354
+ (pagination) => {
3355
+ if (!isBoolean(pagination) && pagination) {
3356
+ paginationRef.value = {
3357
+ ...unref(paginationRef),
3358
+ ...pagination ?? {}
3359
+ };
3360
+ }
3361
+ }
3362
+ );
3363
+ const getPaginationInfo = computed$1(() => {
3364
+ const { appConf } = useAppStore();
3365
+ let { pagination } = unref(props2);
3366
+ if (isBoolean(pagination) && !pagination) {
3367
+ return false;
3368
+ }
3369
+ if (!pagination) {
3370
+ pagination = {
3371
+ pageSize: appConf.ui.table.defaultPageSize,
3372
+ current: 1
3373
+ };
3374
+ }
3375
+ const { defaultPageSize, pageSizeOptions } = {
3376
+ ...appConf.ui.table,
3377
+ ...pagination
3378
+ };
3379
+ return {
3380
+ current: 1,
3381
+ pageSize: defaultPageSize,
3382
+ defaultPageSize,
3383
+ showTotal: (total, range) => t("TOTAL_PAGE", { total }),
3384
+ showSizeChanger: true,
3385
+ pageSizeOptions,
3386
+ showQuickJumper: true,
3387
+ class: `dt-pagination dt-pagination-${unref(getUiSize)}`,
3388
+ ...isBoolean(pagination) ? {} : pagination,
3389
+ ...unref(paginationRef)
3390
+ };
3391
+ });
3392
+ function setPagination(info) {
3393
+ const paginationInfo = unref(getPaginationInfo);
3394
+ paginationRef.value = {
3395
+ ...!isBoolean(paginationInfo) ? paginationInfo : {},
3396
+ ...info
3397
+ };
3398
+ }
3399
+ function getPagination() {
3400
+ return unref(getPaginationInfo);
3401
+ }
3402
+ return {
3403
+ getPaginationInfo,
3404
+ setPagination,
3405
+ getPagination
3406
+ };
3407
+ }
3408
+ const DEFAULT_CONFIG = {
3409
+ id: "id",
3410
+ children: "children",
3411
+ pid: "pid"
3412
+ };
3413
+ function useRowSelection(propsRef, emit) {
3414
+ const selectedRowKeysRef = ref$1([]);
3415
+ const selectedRowRef = ref$1([]);
3416
+ const getRowSelectionRef = computed$1(() => {
3417
+ const { rowSelection, showCheckboxColumn } = unref(propsRef);
3418
+ if (!rowSelection && !showCheckboxColumn)
3419
+ return null;
3420
+ if (isBoolean(showCheckboxColumn)) {
3421
+ if (showCheckboxColumn && rowSelection) {
3422
+ rowSelection.type = "checkbox";
3423
+ } else {
3424
+ return null;
3425
+ }
3426
+ }
3427
+ return {
3428
+ selectedRowKeys: unref(selectedRowKeysRef),
3429
+ onChange: (selectedRowKeys) => setSelectedRowKeys(selectedRowKeys),
3430
+ ...omit(rowSelection, ["onChange"])
3431
+ };
3432
+ });
3433
+ function findeNodeAll(tree, func, config = {}) {
3434
+ const _config = Object.assign({}, DEFAULT_CONFIG, config), result = [], list = [...tree];
3435
+ for (const node of list) {
3436
+ func(node) && result.push(node);
3437
+ node[_config?.children] && list.push(...node[_config?.children]);
3438
+ }
3439
+ return result;
3440
+ }
3441
+ function setSelectedRowKeys(rowKeys) {
3442
+ selectedRowKeysRef.value = rowKeys;
3443
+ const allSelectedRows = findeNodeAll(
3444
+ toRaw$1(unref(propsRef).dataSource).concat(toRaw$1(unref(selectedRowRef))),
3445
+ (item) => rowKeys.includes(item[unref(propsRef).rowKey]),
3446
+ {
3447
+ children: propsRef.value.childrenColumnName ?? "children"
3448
+ }
3449
+ );
3450
+ const trueSelectedRows = [];
3451
+ rowKeys.forEach((key) => {
3452
+ const found = allSelectedRows.find((item) => item[unref(propsRef).rowKey] === key);
3453
+ found && trueSelectedRows.push(found);
3454
+ });
3455
+ selectedRowRef.value = trueSelectedRows;
3456
+ }
3457
+ function clearSelectedRowKeys() {
3458
+ selectedRowKeysRef.value = [];
3459
+ selectedRowRef.value = [];
3460
+ }
3461
+ function getRowSelection() {
3462
+ return unref(getRowSelectionRef);
3463
+ }
3464
+ function getSelectedRowKeys() {
3465
+ return unref(selectedRowKeysRef);
3466
+ }
3467
+ function getSelectRows() {
3468
+ return unref(selectedRowRef);
3469
+ }
3470
+ watch(
3471
+ () => unref(propsRef).rowSelection?.selectedRowKeys,
3472
+ (v) => {
3473
+ setSelectedRowKeys(v);
3474
+ }
3475
+ );
3476
+ watch(
3477
+ () => unref(selectedRowKeysRef),
3478
+ () => {
3479
+ nextTick(() => {
3480
+ const { rowSelection } = unref(propsRef);
3481
+ if (rowSelection) {
3482
+ const { onChange } = rowSelection;
3483
+ if (onChange && isFunction(onChange))
3484
+ onChange(getSelectedRowKeys(), getSelectRows());
3485
+ }
3486
+ emit("selection-change", {
3487
+ keys: getSelectedRowKeys(),
3488
+ rows: getSelectRows()
3489
+ });
3490
+ });
3491
+ },
3492
+ { deep: true }
3493
+ );
3494
+ return {
3495
+ getRowSelectionRef,
3496
+ clearSelectedRowKeys,
3497
+ getRowSelection,
3498
+ getSelectedRowKeys,
3499
+ getSelectRows,
3500
+ setSelectedRowKeys
3501
+ };
3502
+ }
3503
+ function useTableScroll(propsRef, tableElRef, columnsRef, rowSelectionRef) {
3504
+ const tableHeightRef = ref$1(0), filterSource = ref$1([]);
3505
+ ref$1(null);
3506
+ let footerEl, bodyEl;
3507
+ const debounceRedoHeight = useDebounceFn(redoHeight, 100);
3508
+ windowResizeFn(calcTableHeight, 280);
3509
+ const getCanResize = computed$1(() => {
3510
+ const { canResize, scroll } = unref(propsRef);
3511
+ return canResize && !(scroll || {}).y;
3512
+ });
3513
+ watch(
3514
+ () => propsRef.value.dataSource,
3515
+ (v) => {
3516
+ debounceRedoHeight();
3517
+ },
3518
+ {
3519
+ deep: true,
3520
+ flush: "post"
3521
+ }
3522
+ );
3523
+ function redoHeight() {
3524
+ nextTick(() => calcTableHeight());
3525
+ }
3526
+ function setHeight(height) {
3527
+ tableHeightRef.value = height;
3528
+ }
3529
+ async function calcTableHeight() {
3530
+ const { pagination, virtual } = unref(propsRef);
3531
+ const table = unref(tableElRef);
3532
+ const tableEl = table?.$el;
3533
+ const tableData = unref(propsRef).dataSource;
3534
+ if (!tableEl)
3535
+ return;
3536
+ if (!bodyEl) {
3537
+ bodyEl = tableEl.querySelector(".ant-table-body");
3538
+ if (!bodyEl)
3539
+ return;
3540
+ }
3541
+ const hasScrollBarY = bodyEl.scrollHeight > bodyEl.clientHeight;
3542
+ const hasScrollBarX = bodyEl.scrollWidth > bodyEl.clientWidth;
3543
+ if (hasScrollBarY) {
3544
+ tableEl.classList.contains("hide-scrollbar-y") && tableEl.classList.remove("hide-scrollbar-y");
3545
+ } else {
3546
+ !tableEl.classList.contains("hide-scrollbar-y") && tableEl.classList.add("hide-scrollbar-y");
3547
+ }
3548
+ if (hasScrollBarX) {
3549
+ tableEl.classList.contains("hide-scrollbar-x") && tableEl.classList.remove("hide-scrollbar-x");
3550
+ } else {
3551
+ !tableEl.classList.contains("hide-scrollbar-x") && tableEl.classList.add("hide-scrollbar-x");
3552
+ }
3553
+ bodyEl.style.height = "unset";
3554
+ if (!unref(getCanResize) || !unref(tableData) || tableData.length === 0)
3555
+ return;
3556
+ await nextTick();
3557
+ let headerHeight = 0, paginationHeight = 2, footerHeight = 0, titleHeight = tableEl.querySelector(".ant-table-title")?.offsetHeight ?? 0, marginHeight = 15;
3558
+ const headEl = tableEl.querySelector(".ant-table-thead ");
3559
+ if (headEl) {
3560
+ headerHeight = headEl.offsetHeight;
3561
+ }
3562
+ if (!isBoolean(pagination)) {
3563
+ let paginationEl = tableEl.querySelector(".ant-pagination");
3564
+ if (paginationEl) {
3565
+ const offsetHeight = paginationEl.offsetHeight;
3566
+ paginationHeight += offsetHeight || 0;
3567
+ } else {
3568
+ paginationHeight += 50;
3569
+ }
3570
+ if (!footerEl) {
3571
+ footerEl = tableEl.querySelector(".ant-table-footer");
3572
+ } else {
3573
+ const offsetHeight = footerEl.offsetHeight;
3574
+ footerHeight += offsetHeight || 0;
3575
+ }
3576
+ } else {
3577
+ paginationHeight = -8;
3578
+ }
3579
+ const tableHeight = table?.$el?.offsetHeight ?? 0;
3580
+ let height = tableHeight - paginationHeight - footerHeight - headerHeight - titleHeight - marginHeight;
3581
+ height = Math.max(height, 167);
3582
+ setHeight(height);
3583
+ bodyEl.style.height = `${height}px`;
3584
+ filterSource.value = unref(propsRef)?.dataSource;
3585
+ }
3586
+ const getScrollX = computed$1(() => {
3587
+ let width = 0;
3588
+ if (unref(rowSelectionRef)) {
3589
+ width += 32;
3590
+ }
3591
+ const NORMAL_WIDTH = 120;
3592
+ const columns = unref(columnsRef).filter((item) => !item.defaultHidden);
3593
+ columns.forEach((item) => {
3594
+ width += Number.parseInt(item.width) || NORMAL_WIDTH;
3595
+ });
3596
+ const table = unref(tableElRef);
3597
+ const tableWidth = table?.$el?.offsetWidth ?? 0;
3598
+ return tableWidth > width ? "100%" : width;
3599
+ });
3600
+ const getScrollRef = computed$1(() => {
3601
+ const tableHeight = unref(tableHeightRef);
3602
+ const { canResize, scroll } = unref(propsRef);
3603
+ return {
3604
+ x: unref(getScrollX),
3605
+ y: tableHeight,
3606
+ scrollToFirstRowOnChange: false,
3607
+ ...scroll
3608
+ };
3609
+ });
3610
+ onMounted$1(() => {
3611
+ calcTableHeight();
3612
+ nextTick(() => debounceRedoHeight());
3613
+ });
3614
+ return {
3615
+ getScrollRef,
3616
+ filterSource
3617
+ };
3618
+ }
3619
+ function useRows(propsRef) {
3620
+ function getRowClassName(record, index) {
3621
+ const { striped, rowClassName } = unref(propsRef);
3622
+ const classNames = [];
3623
+ if (striped) {
3624
+ classNames.push(index % 2 === 1 ? "table-striped" : "");
3625
+ }
3626
+ if (rowClassName && isFunction(rowClassName)) {
3627
+ classNames.push(rowClassName(record, index));
3628
+ }
3629
+ return classNames.join(" ");
3630
+ }
3631
+ return {
3632
+ getRowClassName
3633
+ };
3634
+ }
3635
+ const props = {
3636
+ column: Object,
3637
+ record: Object,
3638
+ index: Number
3639
+ };
3640
+ const _sfc_main$1 = {
3641
+ name: "TableRender",
3642
+ props,
3643
+ setup(props2, {}) {
3644
+ let renderText = ref$1(null);
3645
+ watch(() => [props2.record, props2.column], (v) => {
3646
+ if (v) {
3647
+ renderCell();
3648
+ }
3649
+ }, {
3650
+ immediate: true,
3651
+ deep: true
3652
+ });
3653
+ function renderCell() {
3654
+ const {
3655
+ column,
3656
+ record,
3657
+ index
3658
+ } = props2;
3659
+ const {
3660
+ render,
3661
+ dataIndex
3662
+ } = column;
3663
+ const text = record[dataIndex.toString()];
3664
+ if (isObject(render)) {
3665
+ const {
3666
+ dict,
3667
+ date,
3668
+ number,
3669
+ percent,
3670
+ struc
3671
+ } = render;
3672
+ if (struc) {
3673
+ const {
3674
+ appConf
3675
+ } = useAppStore();
3676
+ let apiStruc = appConf.structure[struc];
3677
+ if (!apiStruc) {
3678
+ error(`${struc}\u672A\u5728structure\u4E2D\u914D\u7F6E`);
3679
+ } else {
3680
+ renderText = getDictValueByCode(text, apiStruc);
3681
+ }
3682
+ } else if (dict) {
3683
+ renderText = getDictValueByCode(text, dict);
3684
+ } else if (date) {
3685
+ renderText.value = (text && dayjs(text).format(date || "YYYY-MM-DD")) ?? "";
3686
+ } else if (number) {
3687
+ renderText.value = formatNumber(text, number);
3688
+ } else if (percent) {
3689
+ renderText.value = formatNumber((text || 0) * 100, percent) + "%";
3690
+ } else if (isVnode(render)) {
3691
+ renderText.value = createVNode(Fragment, null, [createTextVNode(" "), render, createTextVNode(" ")]);
3692
+ } else if (render["setup"]) {
3693
+ renderText.value = createVNode(render, {
3694
+ ...record,
3695
+ text
3696
+ });
3697
+ }
3698
+ } else if (isFunction(render)) {
3699
+ let afterRenderData = render(record, index, text);
3700
+ if (afterRenderData.__v_isRef) {
3701
+ renderText = afterRenderData;
3702
+ } else if (afterRenderData["setup"]) {
3703
+ renderText.value = createVNode(afterRenderData, {
3704
+ ...record,
3705
+ text
3706
+ });
3707
+ } else {
3708
+ renderText.value = isVnode(afterRenderData) ? createVNode(Fragment, null, [afterRenderData]) : afterRenderData;
3709
+ }
3710
+ } else {
3711
+ renderText.value = unref(text);
3712
+ }
3713
+ }
3714
+ return () => createVNode("span", null, [unref(renderText)]);
3715
+ }
3716
+ };
3717
+ const DEFAULT_SORT_FN = (sortInfo) => {
3718
+ const { field, order } = sortInfo;
3719
+ return field && order ? { field, order } : {};
3720
+ };
3721
+ const TableProps = {
3722
+ clickToSelectRow: { type: Boolean, default: false },
3723
+ tableSetting: { type: [Boolean, Object], default: () => ({}) },
3724
+ striped: { type: Boolean, default: true },
3725
+ canColDrag: { type: Boolean, default: true },
3726
+ clearSelectOnPageChange: { type: Boolean, default: false },
3727
+ resizable: { type: Boolean, default: true },
3728
+ minWidth: { type: Number },
3729
+ maxWidth: { type: Number },
3730
+ virtual: { type: Boolean, default: false },
3731
+ sortFn: { type: Function, default: DEFAULT_SORT_FN },
3732
+ defSort: { type: Object, default: null },
3733
+ filterFn: {
3734
+ type: Function,
3735
+ default: (data) => {
3736
+ return data;
3737
+ }
3738
+ },
3739
+ rowKey: {
3740
+ type: String,
3741
+ default: "id"
3742
+ },
3743
+ columnCode: { type: String, default: "" },
3744
+ columns: { type: [Array], default: () => [] },
3745
+ slotsTemplate: { type: Object, default: () => ({}) },
3746
+ showIndexColumn: { type: Boolean, default: false },
3747
+ showCheckboxColumn: { type: Boolean, default: true },
3748
+ expandMethodIcon: { type: Boolean, default: false },
3749
+ ellipsis: { type: Boolean, default: true },
3750
+ dataSource: { type: Array, default: null },
3751
+ bordered: { type: Boolean, default: true },
3752
+ canResize: { type: Boolean, default: true },
3753
+ pagination: {
3754
+ type: [Object, Boolean],
3755
+ default: null
3756
+ },
3757
+ loading: { type: Boolean, default: false },
3758
+ rowClassName: { type: Function },
3759
+ scroll: {
3760
+ type: Object,
3761
+ default: {}
3762
+ },
3763
+ onTableChange: {
3764
+ type: Function,
3765
+ default: () => ({})
3766
+ },
3767
+ onDownload: {
3768
+ type: Function,
3769
+ default: (excelData) => ({})
3770
+ },
3771
+ rowSelection: {
3772
+ type: Object,
3773
+ default: {
3774
+ type: "checkbox",
3775
+ fixed: true
3776
+ }
3777
+ },
3778
+ customRow: {
3779
+ type: Function,
3780
+ default: () => ({})
3781
+ },
3782
+ childrenColumnName: {
3783
+ type: String,
3784
+ default: "children"
3785
+ },
3786
+ indexColumnProps: {
3787
+ type: [Array],
3788
+ default: () => []
3789
+ },
3790
+ isTreeTable: {
3791
+ type: Boolean,
3792
+ default: false
3793
+ },
3794
+ operations: {
3795
+ type: Object
3796
+ },
3797
+ toolbar: {
3798
+ type: Array
3799
+ },
3800
+ registerInstance: {
3801
+ type: Function
3802
+ },
3803
+ onAdd: {
3804
+ type: Function,
3805
+ default: (params) => ({})
3806
+ },
3807
+ onUpdate: {
3808
+ type: Function,
3809
+ default: (params) => ({})
3810
+ },
3811
+ onDelete: {
3812
+ type: Function,
3813
+ default: (params) => ({})
3814
+ },
3815
+ onDeletes: {
3816
+ type: Function,
3817
+ default: (params) => ({})
3818
+ }
3819
+ };
3820
+ const _hoisted_1 = /* @__PURE__ */ createElementVNode("img", { src: _imports_0 }, null, -1);
3821
+ const _sfc_main = /* @__PURE__ */ defineComponent({
3822
+ __name: "index",
3823
+ props: TableProps,
3824
+ emits: [
3825
+ "register",
3826
+ "selection-change",
3827
+ "columns-change",
3828
+ "row-click",
3829
+ "row-dbClick",
3830
+ "row-contextmenu",
3831
+ "row-mouseenter",
3832
+ "row-mouseleave",
3833
+ "edit-change"
3834
+ ],
3835
+ setup(__props, { emit: emits }) {
3836
+ const props2 = __props;
3837
+ const tableElRef = ref$1(null);
3838
+ const attrs = useAttrs();
3839
+ const slots = useSlots$2();
3840
+ const innerPropsRef = ref$1();
3841
+ const getProps = computed$1(() => {
3842
+ return { ...props2, ...unref(innerPropsRef) };
3843
+ });
3844
+ const { getRowClassName } = useRows(getProps);
3845
+ const tableCls = computed$1(() => {
3846
+ return [
3847
+ "dt-table",
3848
+ "box-border",
3849
+ { "dt-table-no-pagation": !unref(getProps).pagination }
3850
+ ];
3851
+ });
3852
+ const { getLoading, setLoading } = useLoading(getProps);
3853
+ const { getPaginationInfo, setPagination, getPagination } = usePagination(getProps);
3854
+ const {
3855
+ getViewColumns,
3856
+ getColumnsRef,
3857
+ getColumns,
3858
+ setColumns,
3859
+ setColumnsByDataIndex,
3860
+ getCacheColumns
3861
+ } = useColumns(getProps, getPaginationInfo, tableElRef);
3862
+ const {
3863
+ getRowSelectionRef,
3864
+ clearSelectedRowKeys,
3865
+ getRowSelection,
3866
+ getSelectRows,
3867
+ getSelectedRowKeys,
3868
+ setSelectedRowKeys
3869
+ } = useRowSelection(getProps, emits);
3870
+ const { getScrollRef, filterSource } = useTableScroll(getProps, tableElRef, getColumnsRef, getRowSelectionRef);
3871
+ const handlers = {
3872
+ onColumnsChange: (data) => {
3873
+ emits("columns-change", data);
3874
+ unref(getProps).onColumnsChange?.(data);
3875
+ }
3876
+ };
3877
+ const { getHeaderProps } = useTableHeader(getProps, slots, handlers);
3878
+ const { customRow } = useCustomRow(getProps, { setSelectedRowKeys, getSelectedRowKeys, clearSelectedRowKeys, emits });
3879
+ const { handleTableChange, findTableDataRecord, updateTableDataRecord } = useDataSource(
3880
+ getProps,
3881
+ {
3882
+ getPaginationInfo,
3883
+ setPagination,
3884
+ clearSelectedRowKeys
3885
+ }
3886
+ );
3887
+ const getBind = computed$1(() => {
3888
+ return {
3889
+ ...attrs,
3890
+ ...unref(getProps),
3891
+ ...unref(getHeaderProps),
3892
+ scroll: unref(getScrollRef),
3893
+ loading: unref(getLoading),
3894
+ dataSource: toRaw(unref(filterSource)),
3895
+ pagination: toRaw(unref(getPaginationInfo)),
3896
+ rowSelection: unref(getRowSelectionRef),
3897
+ rowKey: unref(getProps).rowKey,
3898
+ columns: unref(getViewColumns),
3899
+ tableLayout: "fixed",
3900
+ class: unref(tableCls),
3901
+ customRow,
3902
+ onChange: handleTableChange,
3903
+ onResizeColumn: (w, col) => {
3904
+ col.width = w;
3905
+ setColumnsByDataIndex(col.dataIndex, col);
3906
+ }
3907
+ };
3908
+ });
3909
+ function setProps(props22) {
3910
+ let allProps = {
3911
+ ...unref(innerPropsRef),
3912
+ ...props22
3913
+ };
3914
+ if (isObject(props22.tableSetting)) {
3915
+ let historyTableSetting = unref(innerPropsRef)?.tableSetting;
3916
+ allProps.tableSetting = {
3917
+ ...isBoolean(historyTableSetting) ? {} : historyTableSetting,
3918
+ ...props22.tableSetting
3919
+ };
3920
+ }
3921
+ innerPropsRef.value = allProps;
3922
+ }
3923
+ const tableAction = {
3924
+ setProps,
3925
+ setLoading,
3926
+ clearSelectedRowKeys,
3927
+ getSelectRows,
3928
+ getSelectedRowKeys,
3929
+ setSelectedRowKeys,
3930
+ getRowSelection,
3931
+ getColumns,
3932
+ setColumns,
3933
+ setColumnsByDataIndex,
3934
+ getCacheColumns,
3935
+ findTableDataRecord,
3936
+ updateTableDataRecord,
3937
+ getPagination,
3938
+ emits
3939
+ };
3940
+ createTableInstance({ ...tableAction, tableElRef, getBind, getProps });
3941
+ emits("register", tableAction);
3942
+ if (unref(innerPropsRef)?.registerInstance) {
3943
+ unref(innerPropsRef)?.registerInstance(tableAction);
3944
+ }
3945
+ return (_ctx, _cache) => {
3946
+ const _component_ATable = Table;
3947
+ return openBlock(), createBlock(_component_ATable, mergeProps({
3948
+ ref_key: "tableElRef",
3949
+ ref: tableElRef
3950
+ }, unref(getBind), {
3951
+ rowClassName: unref(getRowClassName),
3952
+ onChange: unref(handleTableChange)
3953
+ }), createSlots({
3954
+ bodyCell: withCtx(({ column, record, index }) => [
3955
+ _ctx.$slots.bodyCell ? renderSlot(_ctx.$slots, "bodyCell", normalizeProps(mergeProps({ key: 0 }, { column, record, index }))) : createCommentVNode("", true),
3956
+ column?.render && !_ctx.$slots.bodyCell ? (openBlock(), createBlock(_sfc_main$1, {
3957
+ key: 1,
3958
+ column,
3959
+ record,
3960
+ index
3961
+ }, null, 8, ["column", "record", "index"])) : createCommentVNode("", true)
3962
+ ]),
3963
+ emptyText: withCtx(() => [
3964
+ _hoisted_1
3965
+ ]),
3966
+ _: 2
3967
+ }, [
3968
+ renderList(Object.keys(_ctx.$slots), (item) => {
3969
+ return {
3970
+ name: item,
3971
+ fn: withCtx((data) => [
3972
+ renderSlot(_ctx.$slots, item, normalizeProps(guardReactiveProps(data || {})))
3973
+ ])
3974
+ };
3975
+ })
3976
+ ]), 1040, ["rowClassName", "onChange"]);
3977
+ };
3978
+ }
3979
+ });
3980
+ export {
3981
+ _sfc_main as DtTable,
3982
+ useTable
3983
+ };