workdesktop-ai 1.0.2 → 1.1.0

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 (223) hide show
  1. package/CHANGELOG.md +155 -93
  2. package/README.md +123 -25
  3. package/dist/api-button/index.mjs +7 -0
  4. package/dist/api-button/index.mjs.map +1 -0
  5. package/dist/assets/Select-CNzSyvlZ.css +1 -0
  6. package/dist/auto-complete/index.mjs +7 -0
  7. package/dist/auto-complete/index.mjs.map +1 -0
  8. package/dist/auto-complete/style.css +1 -0
  9. package/dist/base.css +1 -0
  10. package/dist/checkbox-list/index.mjs +7 -0
  11. package/dist/checkbox-list/index.mjs.map +1 -0
  12. package/dist/checkbox-list/style.css +1 -0
  13. package/dist/chunks/ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs +80 -0
  14. package/dist/chunks/ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs.map +1 -0
  15. package/dist/chunks/AutoComplete-B_L169hU.mjs +80 -0
  16. package/dist/chunks/AutoComplete-B_L169hU.mjs.map +1 -0
  17. package/dist/chunks/CheckboxList-bPqpbd8d.mjs +129 -0
  18. package/dist/chunks/CheckboxList-bPqpbd8d.mjs.map +1 -0
  19. package/dist/chunks/ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs +99 -0
  20. package/dist/chunks/ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs.map +1 -0
  21. package/dist/chunks/DataForm-C6UW92Ds.mjs +305 -0
  22. package/dist/chunks/DataForm-C6UW92Ds.mjs.map +1 -0
  23. package/dist/chunks/DataGrid-BhgND4G_.mjs +1124 -0
  24. package/dist/chunks/DataGrid-BhgND4G_.mjs.map +1 -0
  25. package/dist/chunks/DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs +117 -0
  26. package/dist/chunks/DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs.map +1 -0
  27. package/dist/chunks/Drawer-ucXKUecL.mjs +259 -0
  28. package/dist/chunks/Drawer-ucXKUecL.mjs.map +1 -0
  29. package/dist/chunks/DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs +125 -0
  30. package/dist/chunks/DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs.map +1 -0
  31. package/dist/chunks/EditableGrid-Cx7ScWkW.mjs +1783 -0
  32. package/dist/chunks/EditableGrid-Cx7ScWkW.mjs.map +1 -0
  33. package/dist/chunks/FormItem-C1q0opnk.mjs +79 -0
  34. package/dist/chunks/FormItem-C1q0opnk.mjs.map +1 -0
  35. package/dist/chunks/Iframe-CeSiMnvR.mjs +65 -0
  36. package/dist/chunks/Iframe-CeSiMnvR.mjs.map +1 -0
  37. package/dist/chunks/ImageUpload-D3JGJjVO.mjs +193 -0
  38. package/dist/chunks/ImageUpload-D3JGJjVO.mjs.map +1 -0
  39. package/dist/chunks/Panel-d4chdlTA.mjs +113 -0
  40. package/dist/chunks/Panel-d4chdlTA.mjs.map +1 -0
  41. package/dist/chunks/PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs +118 -0
  42. package/dist/chunks/PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs.map +1 -0
  43. package/dist/chunks/RadioList-DT-8WSN2.mjs +129 -0
  44. package/dist/chunks/RadioList-DT-8WSN2.mjs.map +1 -0
  45. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs +80 -0
  46. package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs.map +1 -0
  47. package/dist/chunks/RouteButton.vue_vue_type_script_setup_true_lang-Da0D3tKA.mjs +73 -0
  48. package/dist/chunks/RouteButton.vue_vue_type_script_setup_true_lang-Da0D3tKA.mjs.map +1 -0
  49. package/dist/chunks/SearchItem-pFO57lEO.mjs +79 -0
  50. package/dist/chunks/SearchItem-pFO57lEO.mjs.map +1 -0
  51. package/dist/chunks/SearchPanel-xQ1hPaNq.mjs +158 -0
  52. package/dist/chunks/SearchPanel-xQ1hPaNq.mjs.map +1 -0
  53. package/dist/chunks/Select-CMw-tWYm.mjs +114 -0
  54. package/dist/chunks/Select-CMw-tWYm.mjs.map +1 -0
  55. package/dist/chunks/Station-BF_QlQ8c.mjs +796 -0
  56. package/dist/chunks/Station-BF_QlQ8c.mjs.map +1 -0
  57. package/dist/chunks/Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs +71 -0
  58. package/dist/chunks/Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs.map +1 -0
  59. package/dist/chunks/Tips-IWCZcR1K.mjs +63 -0
  60. package/dist/chunks/Tips-IWCZcR1K.mjs.map +1 -0
  61. package/dist/chunks/TipsButton.vue_vue_type_script_setup_true_lang-DvcpRSV1.mjs +51 -0
  62. package/dist/chunks/TipsButton.vue_vue_type_script_setup_true_lang-DvcpRSV1.mjs.map +1 -0
  63. package/dist/chunks/Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs +200 -0
  64. package/dist/chunks/Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs.map +1 -0
  65. package/dist/chunks/Viewer-COLbtcgF.mjs +381 -0
  66. package/dist/chunks/Viewer-COLbtcgF.mjs.map +1 -0
  67. package/dist/chunks/_plugin-vue_export-helper-CHgC5LLL.mjs +10 -0
  68. package/dist/chunks/_plugin-vue_export-helper-CHgC5LLL.mjs.map +1 -0
  69. package/dist/chunks/containerContext-BgphFDeH.mjs +13 -0
  70. package/dist/chunks/containerContext-BgphFDeH.mjs.map +1 -0
  71. package/dist/chunks/http-DUPsbs2K.mjs +2951 -0
  72. package/dist/chunks/http-DUPsbs2K.mjs.map +1 -0
  73. package/dist/chunks/linkage-FbL1mcz3.mjs +66 -0
  74. package/dist/chunks/linkage-FbL1mcz3.mjs.map +1 -0
  75. package/dist/chunks/props-DAytpx7D.mjs +65 -0
  76. package/dist/chunks/props-DAytpx7D.mjs.map +1 -0
  77. package/dist/chunks/useApiAction-C1CdKGjt.mjs +30 -0
  78. package/dist/chunks/useApiAction-C1CdKGjt.mjs.map +1 -0
  79. package/dist/chunks/useColumnSettings-BDtF5-8R.mjs +216 -0
  80. package/dist/chunks/useColumnSettings-BDtF5-8R.mjs.map +1 -0
  81. package/dist/chunks/useOptionsLoader-D0RTB_ar.mjs +64 -0
  82. package/dist/chunks/useOptionsLoader-D0RTB_ar.mjs.map +1 -0
  83. package/dist/confirm-button/index.mjs +7 -0
  84. package/dist/confirm-button/index.mjs.map +1 -0
  85. package/dist/data-form/index.mjs +7 -0
  86. package/dist/data-form/index.mjs.map +1 -0
  87. package/dist/data-form/style.css +1 -0
  88. package/dist/data-grid/index.mjs +7 -0
  89. package/dist/data-grid/index.mjs.map +1 -0
  90. package/dist/data-grid/style.css +1 -0
  91. package/dist/dialog-button/index.mjs +7 -0
  92. package/dist/dialog-button/index.mjs.map +1 -0
  93. package/dist/drawer/index.mjs +7 -0
  94. package/dist/drawer/index.mjs.map +1 -0
  95. package/dist/drawer/style.css +1 -0
  96. package/dist/drawer-button/index.mjs +7 -0
  97. package/dist/drawer-button/index.mjs.map +1 -0
  98. package/dist/editable-grid/index.mjs +7 -0
  99. package/dist/editable-grid/index.mjs.map +1 -0
  100. package/dist/editable-grid/style.css +1 -0
  101. package/dist/form-item/index.mjs +7 -0
  102. package/dist/form-item/index.mjs.map +1 -0
  103. package/dist/form-item/style.css +1 -0
  104. package/dist/iframe/index.mjs +7 -0
  105. package/dist/iframe/index.mjs.map +1 -0
  106. package/dist/iframe/style.css +1 -0
  107. package/dist/image-upload/index.mjs +7 -0
  108. package/dist/image-upload/index.mjs.map +1 -0
  109. package/dist/image-upload/style.css +1 -0
  110. package/dist/index.esm.js +318 -6495
  111. package/dist/index.esm.js.map +1 -1
  112. package/dist/index.umd.js +20 -9
  113. package/dist/index.umd.js.map +1 -1
  114. package/dist/panel/index.mjs +7 -0
  115. package/dist/panel/index.mjs.map +1 -0
  116. package/dist/panel/style.css +1 -0
  117. package/dist/prompt-button/index.mjs +7 -0
  118. package/dist/prompt-button/index.mjs.map +1 -0
  119. package/dist/radio-list/index.mjs +7 -0
  120. package/dist/radio-list/index.mjs.map +1 -0
  121. package/dist/radio-list/style.css +1 -0
  122. package/dist/requester/index.mjs +7 -0
  123. package/dist/requester/index.mjs.map +1 -0
  124. package/dist/route-button/index.mjs +7 -0
  125. package/dist/route-button/index.mjs.map +1 -0
  126. package/dist/search-item/index.mjs +7 -0
  127. package/dist/search-item/index.mjs.map +1 -0
  128. package/dist/search-item/style.css +1 -0
  129. package/dist/search-panel/index.mjs +7 -0
  130. package/dist/search-panel/index.mjs.map +1 -0
  131. package/dist/search-panel/style.css +1 -0
  132. package/dist/select/index.mjs +7 -0
  133. package/dist/select/index.mjs.map +1 -0
  134. package/dist/station/index.mjs +7 -0
  135. package/dist/station/index.mjs.map +1 -0
  136. package/dist/station/style.css +1 -0
  137. package/dist/style.css +1 -1
  138. package/dist/switch/index.mjs +7 -0
  139. package/dist/switch/index.mjs.map +1 -0
  140. package/dist/tips/index.mjs +7 -0
  141. package/dist/tips/index.mjs.map +1 -0
  142. package/dist/tips/style.css +1 -0
  143. package/dist/tips-button/index.mjs +7 -0
  144. package/dist/tips-button/index.mjs.map +1 -0
  145. package/dist/types/src/components/buttons/ApiButton.vue.d.ts +35 -6
  146. package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +37 -8
  147. package/dist/types/src/components/buttons/DialogButton.vue.d.ts +89 -29
  148. package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +99 -31
  149. package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +317 -0
  150. package/dist/types/src/components/buttons/PromptButton.vue.d.ts +45 -14
  151. package/dist/types/src/components/buttons/RouteButton.vue.d.ts +34 -5
  152. package/dist/types/src/components/buttons/TipsButton.vue.d.ts +8 -15
  153. package/dist/types/src/components/common/props.d.ts +32 -2
  154. package/dist/types/src/components/containers/Drawer.vue.d.ts +61 -8
  155. package/dist/types/src/components/containers/Iframe.vue.d.ts +39 -2
  156. package/dist/types/src/components/containers/containerContext.d.ts +1 -1
  157. package/dist/types/src/components/containers/useContainerController.d.ts +5 -0
  158. package/dist/types/src/components/containers/useIframeContainer.d.ts +20 -0
  159. package/dist/types/src/components/core/Requester.vue.d.ts +41 -0
  160. package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +212 -5
  161. package/dist/types/src/components/data/datagrid/useColumnSettings.d.ts +14 -0
  162. package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +586 -0
  163. package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +187 -0
  164. package/dist/types/src/components/form/FormItem.vue.d.ts +62 -0
  165. package/dist/types/src/components/form/SearchItem.vue.d.ts +62 -0
  166. package/dist/types/src/components/{containers → form}/SearchPanel.vue.d.ts +17 -2
  167. package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +6 -6
  168. package/dist/types/src/components/index.d.ts +10 -6
  169. package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +10 -1
  170. package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +28 -3
  171. package/dist/types/src/components/inputs/RadioList.vue.d.ts +28 -3
  172. package/dist/types/src/components/inputs/Select.vue.d.ts +11 -1
  173. package/dist/types/src/components/inputs/Switch.vue.d.ts +2 -2
  174. package/dist/types/src/components/inputs/useOptionsLoader.d.ts +3 -0
  175. package/dist/types/src/components/layout/Station.vue.d.ts +302 -0
  176. package/dist/types/src/components/layout/StationMenuNode.vue.d.ts +20 -0
  177. package/dist/types/src/components/layout/types.d.ts +54 -0
  178. package/dist/types/src/components/styles/Panel.vue.d.ts +47 -5
  179. package/dist/types/src/components/upload/ImageUpload.vue.d.ts +4 -4
  180. package/dist/types/src/components/upload/Upload.vue.d.ts +1 -1
  181. package/dist/types/src/entries/api-button.d.ts +9 -0
  182. package/dist/types/src/entries/auto-complete.d.ts +9 -0
  183. package/dist/types/src/entries/checkbox-list.d.ts +9 -0
  184. package/dist/types/src/entries/components-map.d.ts +8 -0
  185. package/dist/types/src/entries/confirm-button.d.ts +9 -0
  186. package/dist/types/src/entries/data-form.d.ts +9 -0
  187. package/dist/types/src/entries/data-grid.d.ts +9 -0
  188. package/dist/types/src/entries/dialog-button.d.ts +9 -0
  189. package/dist/types/src/entries/drawer-button.d.ts +9 -0
  190. package/dist/types/src/entries/drawer.d.ts +9 -0
  191. package/dist/types/src/entries/editable-grid.d.ts +9 -0
  192. package/dist/types/src/entries/form-item.d.ts +9 -0
  193. package/dist/types/src/entries/iframe.d.ts +9 -0
  194. package/dist/types/src/entries/image-upload.d.ts +9 -0
  195. package/dist/types/src/entries/panel.d.ts +9 -0
  196. package/dist/types/src/entries/prompt-button.d.ts +9 -0
  197. package/dist/types/src/entries/radio-list.d.ts +9 -0
  198. package/dist/types/src/entries/requester.d.ts +9 -0
  199. package/dist/types/src/entries/route-button.d.ts +9 -0
  200. package/dist/types/src/entries/search-item.d.ts +9 -0
  201. package/dist/types/src/entries/search-panel.d.ts +9 -0
  202. package/dist/types/src/entries/select.d.ts +9 -0
  203. package/dist/types/src/entries/station.d.ts +9 -0
  204. package/dist/types/src/entries/switch.d.ts +9 -0
  205. package/dist/types/src/entries/tips-button.d.ts +9 -0
  206. package/dist/types/src/entries/tips.d.ts +9 -0
  207. package/dist/types/src/entries/upload.d.ts +9 -0
  208. package/dist/types/src/entries/viewer.d.ts +9 -0
  209. package/dist/types/src/index.d.ts +2 -1
  210. package/dist/types/src/lib/composables/useDataGrid.d.ts +15 -0
  211. package/dist/types/src/lib/core/http.d.ts +21 -4
  212. package/dist/types/src/lib/core/station-linkage.d.ts +41 -0
  213. package/dist/types/src/types/config.d.ts +20 -3
  214. package/dist/types/vite.config.d.ts +6 -1
  215. package/dist/upload/index.mjs +7 -0
  216. package/dist/upload/index.mjs.map +1 -0
  217. package/dist/viewer/index.mjs +7 -0
  218. package/dist/viewer/index.mjs.map +1 -0
  219. package/dist/viewer/style.css +1 -0
  220. package/package.json +199 -68
  221. package/dist/types/src/components/containers/Dialog.vue.d.ts +0 -112
  222. package/dist/types/src/components/data/editable-table/EditableTable.vue.d.ts +0 -306
  223. package/dist/types/src/components/utils/Viewer.vue.d.ts +0 -131
@@ -0,0 +1,66 @@
1
+ const e = /* @__PURE__ */ new Map();
2
+ function u(r) {
3
+ return r || "";
4
+ }
5
+ function i(r) {
6
+ const t = u(r.filter);
7
+ return e.has(t) || e.set(t, /* @__PURE__ */ new Set()), e.get(t).add(r), () => {
8
+ var o;
9
+ (o = e.get(t)) == null || o.delete(r);
10
+ };
11
+ }
12
+ function l(r, t) {
13
+ if (!r) return 0;
14
+ const o = typeof r == "string" ? r : u(t), s = e.get(o);
15
+ if (!s) return 0;
16
+ let n = 0;
17
+ return s.forEach((c) => {
18
+ try {
19
+ c.refresh(), n += 1;
20
+ } catch (a) {
21
+ console.error("[WorkDesktop] refreshDataGrid error:", a);
22
+ }
23
+ }), n;
24
+ }
25
+ function g(r) {
26
+ const t = e.get(u(r));
27
+ return t ? Array.from(t) : [];
28
+ }
29
+ function p(r, t, o) {
30
+ if (!t) return 0;
31
+ const s = typeof t == "string" ? t : u(o), n = e.get(s);
32
+ if (!n) return 0;
33
+ let c = 0;
34
+ return n.forEach((a) => {
35
+ try {
36
+ a.search ? a.search(r) : a.refresh(), c += 1;
37
+ } catch (f) {
38
+ console.error("[WorkDesktop] searchDataGrid error:", f);
39
+ }
40
+ }), c;
41
+ }
42
+ function y(r, t) {
43
+ if (!r) return 0;
44
+ const o = typeof r == "string" ? r : u(t), s = e.get(o);
45
+ if (!s) return 0;
46
+ let n = 0;
47
+ return s.forEach((c) => {
48
+ try {
49
+ c.resetSearch ? c.resetSearch() : c.refresh(), n += 1;
50
+ } catch (a) {
51
+ console.error("[WorkDesktop] resetSearchDataGrid error:", a);
52
+ }
53
+ }), n;
54
+ }
55
+ function G() {
56
+ e.clear();
57
+ }
58
+ export {
59
+ i as a,
60
+ y as b,
61
+ G as c,
62
+ g,
63
+ l as r,
64
+ p as s
65
+ };
66
+ //# sourceMappingURL=linkage-FbL1mcz3.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linkage-FbL1mcz3.mjs","sources":["../../src/lib/core/linkage.ts"],"sourcesContent":["/**\n * 声明式联动注册中心(PRD 6.2)\n *\n * filter 分组机制:所有参与联动的组件有通用 prop `filter`(默认 '')。\n * 联动只在 filter 相同的组件之间发生。\n *\n * DataGrid 挂载时按 filter 注册到注册中心;\n * DataForm / ApiButton / Dialog / Drawer 等动作完成后,\n * 调用 refreshDataGrid(headRefreshDatagrid, selfFilter) 刷新目标。\n */\n\nexport interface DataGridInstance {\n /** 组件 filter 分组标识 */\n filter: string\n /** 刷新当前页数据 */\n refresh: () => any\n /** 带搜索参数查询(重置到第一页,合并搜索条件) */\n search?: (params?: Record<string, any>) => any\n /** 清空搜索条件并刷新 */\n resetSearch?: () => any\n}\n\n/** filter 分组 → DataGrid 实例集合(同组多个全部刷新) */\nconst dataGridRegistry: Map<string, Set<DataGridInstance>> = new Map()\n\nfunction groupOf(filter?: string): string {\n return filter || ''\n}\n\n/**\n * 注册 DataGrid 实例,返回注销函数(组件 onUnmounted 调用)\n */\nexport function registerDataGrid(instance: DataGridInstance): () => void {\n const key = groupOf(instance.filter)\n if (!dataGridRegistry.has(key)) {\n dataGridRegistry.set(key, new Set())\n }\n dataGridRegistry.get(key)!.add(instance)\n return () => {\n dataGridRegistry.get(key)?.delete(instance)\n }\n}\n\n/**\n * 刷新目标 DataGrid\n * @param headRefreshDatagrid true=刷同 filter 组;字符串=定向刷该 filter 组\n * @param selfFilter 发起组件自身 filter\n * @returns 被刷新的实例数量\n */\nexport function refreshDataGrid(\n headRefreshDatagrid: boolean | string | undefined,\n selfFilter?: string\n): number {\n if (!headRefreshDatagrid) return 0\n\n // 字符串:显式指定目标 filter(跨组定向联动)\n const targetFilter = typeof headRefreshDatagrid === 'string' ? headRefreshDatagrid : groupOf(selfFilter)\n\n const group = dataGridRegistry.get(targetFilter)\n if (!group) return 0\n\n let count = 0\n group.forEach((grid) => {\n try {\n grid.refresh()\n count += 1\n } catch (e) {\n console.error('[WorkDesktop] refreshDataGrid error:', e)\n }\n })\n return count\n}\n\n/**\n * 获取某 filter 组的 DataGrid 实例(事件联动 / 自定义逻辑用)\n */\nexport function getDataGrids(filter?: string): DataGridInstance[] {\n const group = dataGridRegistry.get(groupOf(filter))\n return group ? Array.from(group) : []\n}\n\n/**\n * SearchPanel 联动:带搜索参数刷新目标 DataGrid(重置到第一页)\n * @param params 搜索表单值\n */\nexport function searchDataGrid(\n params: Record<string, any> | undefined,\n headRefreshDatagrid: boolean | string | undefined,\n selfFilter?: string\n): number {\n if (!headRefreshDatagrid) return 0\n const targetFilter = typeof headRefreshDatagrid === 'string' ? headRefreshDatagrid : groupOf(selfFilter)\n const group = dataGridRegistry.get(targetFilter)\n if (!group) return 0\n\n let count = 0\n group.forEach((grid) => {\n try {\n if (grid.search) {\n grid.search(params)\n } else {\n grid.refresh()\n }\n count += 1\n } catch (e) {\n console.error('[WorkDesktop] searchDataGrid error:', e)\n }\n })\n return count\n}\n\n/**\n * SearchPanel 重置联动:清空目标 DataGrid 搜索条件并刷新\n */\nexport function resetSearchDataGrid(\n headRefreshDatagrid: boolean | string | undefined,\n selfFilter?: string\n): number {\n if (!headRefreshDatagrid) return 0\n const targetFilter = typeof headRefreshDatagrid === 'string' ? headRefreshDatagrid : groupOf(selfFilter)\n const group = dataGridRegistry.get(targetFilter)\n if (!group) return 0\n\n let count = 0\n group.forEach((grid) => {\n try {\n if (grid.resetSearch) {\n grid.resetSearch()\n } else {\n grid.refresh()\n }\n count += 1\n } catch (e) {\n console.error('[WorkDesktop] resetSearchDataGrid error:', e)\n }\n })\n return count\n}\n\n/**\n * 仅供测试 / 调试:清空注册中心\n */\nexport function clearLinkageRegistry(): void {\n dataGridRegistry.clear()\n}\n"],"names":["dataGridRegistry","groupOf","filter","registerDataGrid","instance","key","_a","refreshDataGrid","headRefreshDatagrid","selfFilter","targetFilter","group","count","grid","e","getDataGrids","searchDataGrid","params","resetSearchDataGrid","clearLinkageRegistry"],"mappings":"AAuBA,MAAMA,wBAA2D,IAAA;AAEjE,SAASC,EAAQC,GAAyB;AACxC,SAAOA,KAAU;AACnB;AAKO,SAASC,EAAiBC,GAAwC;AACvE,QAAMC,IAAMJ,EAAQG,EAAS,MAAM;AACnC,SAAKJ,EAAiB,IAAIK,CAAG,KAC3BL,EAAiB,IAAIK,GAAK,oBAAI,IAAA,CAAK,GAErCL,EAAiB,IAAIK,CAAG,EAAG,IAAID,CAAQ,GAChC,MAAM;AAff,QAAAE;AAgBI,KAAAA,IAAAN,EAAiB,IAAIK,CAAG,MAAxB,QAAAC,EAA2B,OAAOF;AAAA,EACpC;AACF;AAQO,SAASG,EACdC,GACAC,GACQ;AACR,MAAI,CAACD,EAAqB,QAAO;AAGjC,QAAME,IAAe,OAAOF,KAAwB,WAAWA,IAAsBP,EAAQQ,CAAU,GAEjGE,IAAQX,EAAiB,IAAIU,CAAY;AAC/C,MAAI,CAACC,EAAO,QAAO;AAEnB,MAAIC,IAAQ;AACZ,SAAAD,EAAM,QAAQ,CAACE,MAAS;AACtB,QAAI;AACF,MAAAA,EAAK,QAAA,GACLD,KAAS;AAAA,IACX,SAASE,GAAG;AACV,cAAQ,MAAM,wCAAwCA,CAAC;AAAA,IACzD;AAAA,EACF,CAAC,GACMF;AACT;AAKO,SAASG,EAAab,GAAqC;AAChE,QAAMS,IAAQX,EAAiB,IAAIC,EAAQC,CAAM,CAAC;AAClD,SAAOS,IAAQ,MAAM,KAAKA,CAAK,IAAI,CAAA;AACrC;AAMO,SAASK,EACdC,GACAT,GACAC,GACQ;AACR,MAAI,CAACD,EAAqB,QAAO;AACjC,QAAME,IAAe,OAAOF,KAAwB,WAAWA,IAAsBP,EAAQQ,CAAU,GACjGE,IAAQX,EAAiB,IAAIU,CAAY;AAC/C,MAAI,CAACC,EAAO,QAAO;AAEnB,MAAIC,IAAQ;AACZ,SAAAD,EAAM,QAAQ,CAACE,MAAS;AACtB,QAAI;AACF,MAAIA,EAAK,SACPA,EAAK,OAAOI,CAAM,IAElBJ,EAAK,QAAA,GAEPD,KAAS;AAAA,IACX,SAASE,GAAG;AACV,cAAQ,MAAM,uCAAuCA,CAAC;AAAA,IACxD;AAAA,EACF,CAAC,GACMF;AACT;AAKO,SAASM,EACdV,GACAC,GACQ;AACR,MAAI,CAACD,EAAqB,QAAO;AACjC,QAAME,IAAe,OAAOF,KAAwB,WAAWA,IAAsBP,EAAQQ,CAAU,GACjGE,IAAQX,EAAiB,IAAIU,CAAY;AAC/C,MAAI,CAACC,EAAO,QAAO;AAEnB,MAAIC,IAAQ;AACZ,SAAAD,EAAM,QAAQ,CAACE,MAAS;AACtB,QAAI;AACF,MAAIA,EAAK,cACPA,EAAK,YAAA,IAELA,EAAK,QAAA,GAEPD,KAAS;AAAA,IACX,SAASE,GAAG;AACV,cAAQ,MAAM,4CAA4CA,CAAC;AAAA,IAC7D;AAAA,EACF,CAAC,GACMF;AACT;AAKO,SAASO,IAA6B;AAC3C,EAAAnB,EAAiB,MAAA;AACnB;"}
@@ -0,0 +1,65 @@
1
+ const e = {
2
+ filter: {
3
+ type: String,
4
+ default: ""
5
+ }
6
+ }, a = {
7
+ headRefreshDatagrid: {
8
+ type: [Boolean, String],
9
+ default: !1
10
+ }
11
+ }, p = {
12
+ label: { type: String, default: "" }
13
+ }, r = {
14
+ /** 悬停提示内容 */
15
+ tips: { type: String, default: "" },
16
+ /** tooltip 主题:dark/light */
17
+ tipsType: { type: String, default: "dark" },
18
+ /** 弹出位置 */
19
+ placement: {
20
+ type: String,
21
+ default: "top"
22
+ }
23
+ }, t = {
24
+ /** 请求地址(无则不请求) */
25
+ api: { type: String, default: "" },
26
+ /** 请求方法 get/post/put/delete */
27
+ apiMethod: {
28
+ type: String,
29
+ default: "post"
30
+ },
31
+ /** 请求参数 */
32
+ apiParam: {
33
+ type: Object,
34
+ default: () => ({})
35
+ }
36
+ }, o = {
37
+ ...t,
38
+ apiMethod: {
39
+ type: String,
40
+ default: "get"
41
+ },
42
+ /** 是否自动加载选项(默认 true) */
43
+ active: { type: Boolean, default: !0 },
44
+ /** 静态选项数组(与 api 二选一) */
45
+ dataSource: { type: Array, default: void 0 },
46
+ /** 显示文本字段 */
47
+ textProp: { type: String, default: "text" },
48
+ /** 值字段 */
49
+ valueProp: { type: String, default: "value" },
50
+ /** 选项悬停提示字段:数据项该字段非空时,鼠标悬停选项显示 tooltip(默认 tips) */
51
+ tipsProp: { type: String, default: "tips" },
52
+ /** 选项前插固定项 */
53
+ addData: { type: Array, default: void 0 },
54
+ /** 选项后追加固定项 */
55
+ appendData: { type: Array, default: void 0 }
56
+ };
57
+ export {
58
+ t as a,
59
+ p as b,
60
+ e as f,
61
+ a as h,
62
+ o,
63
+ r as t
64
+ };
65
+ //# sourceMappingURL=props-DAytpx7D.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props-DAytpx7D.mjs","sources":["../../src/components/common/props.ts"],"sourcesContent":["/**\r\n * 组件通用 props 与工具(PRD 4.5 通用设计约定)\r\n */\r\nimport type { PropType } from 'vue'\r\n\r\n/** 所有参与联动的组件共有:filter 分组标识(默认 '') */\r\nexport const filterProp = {\r\n filter: {\r\n type: String,\r\n default: ''\r\n }\r\n}\r\n\r\n/** 声明式联动:动作完成后刷新目标 DataGrid(true=同 filter 组 / 字符串=定向) */\r\nexport const headRefreshDatagridProp = {\r\n headRefreshDatagrid: {\r\n type: [Boolean, String] as PropType<boolean | string>,\r\n default: false\r\n }\r\n}\r\n\r\n/**\r\n * 按钮文字属性(属性式写法,也可用默认插槽覆盖)。\r\n * 命名用 label 而非 text:el-button 的 text 是「文字按钮」布尔开关,通过 $attrs 透传支持,\r\n * 组件不再截获该名,避免同名冲突(文字按钮样式直接写 text 属性即可)。\r\n */\r\nexport const buttonTextProp = {\r\n label: { type: String, default: '' }\r\n}\r\n\r\n/**\r\n * 悬停提示共享 props,所有按钮都支持基于 el-tooltip 的悬停提示。\r\n * 仅当设置非空 tips 时显示 tooltip。\r\n */\r\nexport const tipsProp = {\r\n /** 悬停提示内容 */\r\n tips: { type: String, default: '' },\r\n /** tooltip 主题:dark/light */\r\n tipsType: { type: String as PropType<'dark' | 'light'>, default: 'dark' },\r\n /** 弹出位置 */\r\n placement: {\r\n type: String as PropType<'top' | 'bottom' | 'left' | 'right' | string>,\r\n default: 'top'\r\n }\r\n}\r\n\r\n/** API 类共享 props(按钮组 / 输入选择组 / 上传组等能力组件) */\r\nexport const apiProps = {\r\n /** 请求地址(无则不请求) */\r\n api: { type: String, default: '' },\r\n /** 请求方法 get/post/put/delete */\r\n apiMethod: {\r\n type: String as PropType<'get' | 'post' | 'put' | 'delete'>,\r\n default: 'post'\r\n },\r\n /** 请求参数 */\r\n apiParam: {\r\n type: Object as PropType<Record<string, any>>,\r\n default: () => ({})\r\n }\r\n}\r\n\r\n/** 输入选择组共享 props(PRD 4.4) */\r\nexport const optionsProps = {\r\n ...apiProps,\r\n apiMethod: {\r\n type: String as PropType<'get' | 'post'>,\r\n default: 'get'\r\n },\r\n /** 是否自动加载选项(默认 true) */\r\n active: { type: Boolean, default: true },\r\n /** 静态选项数组(与 api 二选一) */\r\n dataSource: { type: Array as PropType<any[]>, default: undefined },\r\n /** 显示文本字段 */\r\n textProp: { type: String, default: 'text' },\r\n /** 值字段 */\r\n valueProp: { type: String, default: 'value' },\r\n /** 选项悬停提示字段:数据项该字段非空时,鼠标悬停选项显示 tooltip(默认 tips) */\r\n tipsProp: { type: String, default: 'tips' },\r\n /** 选项前插固定项 */\r\n addData: { type: Array as PropType<any[]>, default: undefined },\r\n /** 选项后追加固定项 */\r\n appendData: { type: Array as PropType<any[]>, default: undefined }\r\n}\r\n\r\n/** 组件 name 工具:统一 wd- 前缀 */\r\nexport function componentName(pascal: string): string {\r\n return `Wd${pascal}`\r\n}\r\n"],"names":["filterProp","headRefreshDatagridProp","buttonTextProp","tipsProp","apiProps","optionsProps"],"mappings":"AAMO,MAAMA,IAAa;AAAA,EACxB,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb,GAGaC,IAA0B;AAAA,EACrC,qBAAqB;AAAA,IACnB,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,SAAS;AAAA,EAAA;AAEb,GAOaC,IAAiB;AAAA,EAC5B,OAAO,EAAE,MAAM,QAAQ,SAAS,GAAA;AAClC,GAMaC,IAAW;AAAA;AAAA,EAEtB,MAAM,EAAE,MAAM,QAAQ,SAAS,GAAA;AAAA;AAAA,EAE/B,UAAU,EAAE,MAAM,QAAsC,SAAS,OAAA;AAAA;AAAA,EAEjE,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb,GAGaC,IAAW;AAAA;AAAA,EAEtB,KAAK,EAAE,MAAM,QAAQ,SAAS,GAAA;AAAA;AAAA,EAE9B,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA,EAGX,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS,OAAO,CAAA;AAAA,EAAC;AAErB,GAGaC,IAAe;AAAA,EAC1B,GAAGD;AAAA,EACH,WAAW;AAAA,IACT,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAAA;AAAA,EAGX,QAAQ,EAAE,MAAM,SAAS,SAAS,GAAA;AAAA;AAAA,EAElC,YAAY,EAAE,MAAM,OAA0B,SAAS,OAAA;AAAA;AAAA,EAEvD,UAAU,EAAE,MAAM,QAAQ,SAAS,OAAA;AAAA;AAAA,EAEnC,WAAW,EAAE,MAAM,QAAQ,SAAS,QAAA;AAAA;AAAA,EAEpC,UAAU,EAAE,MAAM,QAAQ,SAAS,OAAA;AAAA;AAAA,EAEnC,SAAS,EAAE,MAAM,OAA0B,SAAS,OAAA;AAAA;AAAA,EAEpD,YAAY,EAAE,MAAM,OAA0B,SAAS,OAAA;AACzD;"}
@@ -0,0 +1,30 @@
1
+ import { ref as n } from "vue";
2
+ import { r as d } from "./http-DUPsbs2K.mjs";
3
+ import { r as o } from "./linkage-FbL1mcz3.mjs";
4
+ function A(e) {
5
+ const s = n(!1);
6
+ async function m(f) {
7
+ const r = e.getApi();
8
+ if (!r) return !1;
9
+ const t = e.getMethod(), c = { ...e.getParam(), ...f || {} }, g = e.buttonLoading ? e.buttonLoading() : !0, u = e.getReqOptions ? e.getReqOptions() : {}, l = { type: "apiBefore", url: r, method: t, params: c };
10
+ e.emit("apiBefore", l), g && (s.value = !0);
11
+ try {
12
+ const a = t === "get" || t === "delete" ? await d.request({ url: r, method: t, params: c }, u) : await d.request({ url: r, method: t, data: c }, u);
13
+ if (a.success) {
14
+ e.emit("apiSuccess", { data: a.data, code: a.code, message: a.message });
15
+ const i = e.getHeadRefresh();
16
+ return i && o(i, e.getFilter()), e.emit("apiAfter", { data: a.data, code: a.code }), !0;
17
+ }
18
+ return e.emit("apiFail", { data: null, code: a.code, message: a.message }), e.emit("apiAfter", { code: a.code, message: a.message }), !1;
19
+ } catch (a) {
20
+ return e.emit("apiException", { error: a, message: a == null ? void 0 : a.message }), e.emit("apiAfter", { error: a }), !1;
21
+ } finally {
22
+ s.value = !1;
23
+ }
24
+ }
25
+ return { loading: s, doRequest: m };
26
+ }
27
+ export {
28
+ A as u
29
+ };
30
+ //# sourceMappingURL=useApiAction-C1CdKGjt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useApiAction-C1CdKGjt.mjs","sources":["../../src/components/buttons/useApiAction.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { request, type ApiEventPayload } from '../../lib/core/http'\nimport { refreshDataGrid } from '../../lib/core/linkage'\nimport type { ReqOptions } from '../../types/config'\n\n/**\n * 按钮组共享:点击 → 请求 → 提示 → 联动刷新(PRD 4.4 按钮组)\n * 业务失败 resolve 不抛异常;网络异常 reject。\n */\nexport function useApiAction(options: {\n getApi: () => string\n getMethod: () => 'get' | 'post' | 'put' | 'delete'\n getParam: () => Record<string, any>\n getFilter: () => string\n getHeadRefresh: () => boolean | string\n emit: (event: any, ...args: any[]) => void\n /** 是否按钮级 loading(ApiButton buttonLoading=false 时按钮不转圈) */\n buttonLoading?: () => boolean\n /** 请求附加项(pageLoading=true 时开启全局 ElLoading 遮罩) */\n getReqOptions?: () => ReqOptions\n}) {\n const loading = ref(false)\n\n async function doRequest(extraParam?: Record<string, any>): Promise<boolean> {\n const api = options.getApi()\n if (!api) return false\n\n const method = options.getMethod()\n const param = { ...options.getParam(), ...(extraParam || {}) }\n const useBtnLoading = options.buttonLoading ? options.buttonLoading() : true\n const reqOptions: ReqOptions = options.getReqOptions\n ? options.getReqOptions()\n : {}\n\n const beforePayload: ApiEventPayload = { type: 'apiBefore', url: api, method, params: param }\n options.emit('apiBefore', beforePayload)\n\n if (useBtnLoading) loading.value = true\n\n try {\n const result =\n method === 'get' || method === 'delete'\n ? await request.request({ url: api, method, params: param }, reqOptions)\n : await request.request({ url: api, method, data: param }, reqOptions)\n\n if (result.success) {\n options.emit('apiSuccess', { data: result.data, code: result.code, message: result.message })\n // 声明式联动:刷新目标 DataGrid\n const head = options.getHeadRefresh()\n if (head) {\n refreshDataGrid(head, options.getFilter())\n }\n options.emit('apiAfter', { data: result.data, code: result.code })\n return true\n }\n options.emit('apiFail', { data: null, code: result.code, message: result.message })\n options.emit('apiAfter', { code: result.code, message: result.message })\n return false\n } catch (error: any) {\n options.emit('apiException', { error, message: error?.message })\n options.emit('apiAfter', { error })\n return false\n } finally {\n loading.value = false\n }\n }\n\n return { loading, doRequest }\n}\n"],"names":["useApiAction","options","loading","ref","doRequest","extraParam","api","method","param","useBtnLoading","reqOptions","beforePayload","result","request","head","refreshDataGrid","error"],"mappings":";;;AASO,SAASA,EAAaC,GAW1B;AACD,QAAMC,IAAUC,EAAI,EAAK;AAEzB,iBAAeC,EAAUC,GAAoD;AAC3E,UAAMC,IAAML,EAAQ,OAAA;AACpB,QAAI,CAACK,EAAK,QAAO;AAEjB,UAAMC,IAASN,EAAQ,UAAA,GACjBO,IAAQ,EAAE,GAAGP,EAAQ,YAAY,GAAII,KAAc,GAAC,GACpDI,IAAgBR,EAAQ,gBAAgBA,EAAQ,kBAAkB,IAClES,IAAyBT,EAAQ,gBACnCA,EAAQ,cAAA,IACR,CAAA,GAEEU,IAAiC,EAAE,MAAM,aAAa,KAAKL,GAAK,QAAAC,GAAQ,QAAQC,EAAA;AACtF,IAAAP,EAAQ,KAAK,aAAaU,CAAa,GAEnCF,QAAuB,QAAQ;AAEnC,QAAI;AACF,YAAMG,IACJL,MAAW,SAASA,MAAW,WAC3B,MAAMM,EAAQ,QAAQ,EAAE,KAAKP,GAAK,QAAAC,GAAQ,QAAQC,EAAA,GAASE,CAAU,IACrE,MAAMG,EAAQ,QAAQ,EAAE,KAAKP,GAAK,QAAAC,GAAQ,MAAMC,EAAA,GAASE,CAAU;AAEzE,UAAIE,EAAO,SAAS;AAClB,QAAAX,EAAQ,KAAK,cAAc,EAAE,MAAMW,EAAO,MAAM,MAAMA,EAAO,MAAM,SAASA,EAAO,QAAA,CAAS;AAE5F,cAAME,IAAOb,EAAQ,eAAA;AACrB,eAAIa,KACFC,EAAgBD,GAAMb,EAAQ,WAAW,GAE3CA,EAAQ,KAAK,YAAY,EAAE,MAAMW,EAAO,MAAM,MAAMA,EAAO,MAAM,GAC1D;AAAA,MACT;AACA,aAAAX,EAAQ,KAAK,WAAW,EAAE,MAAM,MAAM,MAAMW,EAAO,MAAM,SAASA,EAAO,QAAA,CAAS,GAClFX,EAAQ,KAAK,YAAY,EAAE,MAAMW,EAAO,MAAM,SAASA,EAAO,SAAS,GAChE;AAAA,IACT,SAASI,GAAY;AACnB,aAAAf,EAAQ,KAAK,gBAAgB,EAAE,OAAAe,GAAO,SAASA,KAAA,gBAAAA,EAAO,SAAS,GAC/Df,EAAQ,KAAK,YAAY,EAAE,OAAAe,EAAA,CAAO,GAC3B;AAAA,IACT,UAAA;AACE,MAAAd,EAAQ,QAAQ;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,EAAE,SAAAA,GAAS,WAAAE,EAAA;AACpB;"}
@@ -0,0 +1,216 @@
1
+ import { ref as P, shallowRef as J, reactive as _, computed as A, nextTick as R } from "vue";
2
+ import { a as B, r as M, c as H } from "./http-DUPsbs2K.mjs";
3
+ function X(p = {}) {
4
+ const t = B(), {
5
+ api: c,
6
+ apiMethod: d = "post",
7
+ apiParam: l = {},
8
+ pageSize: a = t.page.pager.pageSize,
9
+ immediate: g = !1,
10
+ reqOptions: h,
11
+ onLoaded: v
12
+ } = p, u = P(1), S = P(a), z = P(0), w = J([]), O = P(!1), x = _({}), I = P([]), b = P(null), e = t.request.pageParam, n = t.response.list;
13
+ let r = null;
14
+ function o(s) {
15
+ const k = {
16
+ [e.pageField]: u.value,
17
+ [e.sizeField]: S.value
18
+ }, C = {
19
+ ...l,
20
+ ...x,
21
+ ...s || {}
22
+ };
23
+ return b.value && (C.sortProp = b.value.prop, C.sortOrder = b.value.order), k[e.searchField] = C, k;
24
+ }
25
+ async function i(s) {
26
+ if (!c)
27
+ return w.value = [], z.value = 0, { list: [], total: 0, pageSize: S.value, currentPage: u.value };
28
+ O.value = !0, r && r.abort(), r = new AbortController();
29
+ const k = o(s);
30
+ try {
31
+ let C;
32
+ if (d === "get" ? C = await M.request({ url: c, method: "get", params: k }, { ...h, signal: r.signal }) : C = await M.request({ url: c, method: d, data: k }, { ...h, signal: r.signal }), C.success) {
33
+ const f = C.data;
34
+ let N = [], j = 0;
35
+ return Array.isArray(f) ? (N = f, j = f.length) : f && typeof f == "object" && (N = f[n.listName] ?? f.list ?? [], j = f[n.totalName] ?? f.total ?? N.length), w.value = N, z.value = j, v == null || v({ list: N, total: j }), {
36
+ list: N,
37
+ total: j,
38
+ pageSize: (f == null ? void 0 : f[n.pageSizeName]) ?? S.value,
39
+ currentPage: (f == null ? void 0 : f[n.currentPageName]) ?? u.value
40
+ };
41
+ }
42
+ return w.value = [], z.value = 0, { list: [], total: 0, pageSize: S.value, currentPage: u.value };
43
+ } finally {
44
+ O.value = !1, r = null;
45
+ }
46
+ }
47
+ function E() {
48
+ return i();
49
+ }
50
+ function m(s) {
51
+ return u.value = s, i();
52
+ }
53
+ function y(s) {
54
+ return S.value = s, u.value = 1, i();
55
+ }
56
+ function q(s) {
57
+ I.value = s || [];
58
+ }
59
+ function V() {
60
+ return I.value;
61
+ }
62
+ function F() {
63
+ I.value = [];
64
+ }
65
+ function $(s) {
66
+ return s && Object.assign(x, s), u.value = 1, i();
67
+ }
68
+ function D({ prop: s, order: k }) {
69
+ return !s || !k ? b.value = null : b.value = { prop: s, order: k }, u.value = 1, i();
70
+ }
71
+ function G() {
72
+ return u.value = 1, Object.keys(x).forEach((s) => delete x[s]), b.value = null, i();
73
+ }
74
+ return g && i(), {
75
+ // 状态
76
+ currentPage: u,
77
+ page: u,
78
+ pageSize: S,
79
+ total: z,
80
+ list: w,
81
+ loading: O,
82
+ searchParams: x,
83
+ selection: I,
84
+ sortState: b,
85
+ // 方法
86
+ fetchData: i,
87
+ refresh: E,
88
+ reset: G,
89
+ search: $,
90
+ changeSort: D,
91
+ onChangeCurrentpage: m,
92
+ onChangePagesize: y,
93
+ setSelection: q,
94
+ getSelection: V,
95
+ clearSelection: F,
96
+ buildParams: o
97
+ };
98
+ }
99
+ function T(p) {
100
+ var d, l;
101
+ const t = p.props || {}, c = ((d = p.type) == null ? void 0 : d.name) || ((l = p.type) == null ? void 0 : l.__name) || "";
102
+ return String(c).includes("TableColumn") || p.type === Symbol.for("el-table-column") || // 全局注册组件时 type 为对象带 name
103
+ c === "ElTableColumn" || !!(t.prop || t.label || t.type);
104
+ }
105
+ function Q(p) {
106
+ const t = [];
107
+ let c = 0;
108
+ const d = (l) => {
109
+ l.forEach((a) => {
110
+ if (!a || typeof a != "object") return;
111
+ const g = a.props || {};
112
+ if (T(a)) {
113
+ c += 1;
114
+ const v = g.type, u = String(g.prop || g.columnKey || `col-${c}`);
115
+ t.push({
116
+ key: u,
117
+ label: g.label || u,
118
+ controllable: !v,
119
+ visible: g.hidden !== !0,
120
+ order: t.length
121
+ });
122
+ }
123
+ const h = a.children;
124
+ Array.isArray(h) && d(h.filter((v) => v && typeof v == "object"));
125
+ });
126
+ };
127
+ return d(p), t;
128
+ }
129
+ function Y(p, t) {
130
+ let c = 0;
131
+ const d = (l) => {
132
+ const a = l.props || {};
133
+ return T(l) ? (c += 1, String(a.prop || a.columnKey || `col-${c}`)) : "";
134
+ };
135
+ return p.map((l, a) => ({ vnode: l, index: a, order: t.get(d(l)) })).sort((l, a) => l.order == null && a.order == null ? l.index - a.index : l.order == null ? 1 : a.order == null ? -1 : l.order - a.order).map((l) => l.vnode);
136
+ }
137
+ function Z(p) {
138
+ const t = P([]);
139
+ let c = [];
140
+ const d = P(!1), l = p ? `wd:columns:${p}` : "";
141
+ function a() {
142
+ return !l || typeof localStorage > "u" ? {} : H(localStorage.getItem(l), {});
143
+ }
144
+ function g() {
145
+ if (!l || typeof localStorage > "u") return;
146
+ const e = {};
147
+ t.value.forEach((n, r) => {
148
+ e[n.key] = { visible: n.visible, order: r };
149
+ }), localStorage.setItem(l, JSON.stringify(e));
150
+ }
151
+ function h(e) {
152
+ c = e.map((r) => ({ ...r }));
153
+ const n = a();
154
+ t.value = e.map((r) => {
155
+ const o = n[r.key];
156
+ return o ? { ...r, visible: o.visible ?? r.visible, order: o.order ?? r.order } : r;
157
+ }), t.value.sort((r, o) => r.order - o.order);
158
+ }
159
+ function v(e) {
160
+ h(Q(e));
161
+ }
162
+ function u(e) {
163
+ h(
164
+ e.map((n, r) => ({
165
+ key: n.key,
166
+ label: n.label,
167
+ controllable: n.controllable !== !1,
168
+ visible: n.visible !== !1,
169
+ order: r
170
+ }))
171
+ );
172
+ }
173
+ function S(e, n) {
174
+ const r = t.value.find((o) => o.key === e);
175
+ r && (r.visible = n, g());
176
+ }
177
+ function z(e, n) {
178
+ const r = t.value.findIndex((m) => m.key === e), o = r + n;
179
+ if (r < 0 || o < 0 || o >= t.value.length) return;
180
+ const i = t.value.slice(), [E] = i.splice(r, 1);
181
+ i.splice(o, 0, E), i.forEach((m, y) => m.order = y), t.value = i, g();
182
+ }
183
+ function w(e, n, r = "before") {
184
+ if (!e || !n || e === n) return;
185
+ const o = t.value.slice(), i = o.findIndex((y) => y.key === e);
186
+ if (i < 0 || !o[i].controllable) return;
187
+ const [E] = o.splice(i, 1);
188
+ let m = o.findIndex((y) => y.key === n);
189
+ m < 0 || !o[m].controllable || (r === "after" && (m += 1), o.splice(m, 0, E), o.forEach((y, q) => y.order = q), t.value = o, g());
190
+ }
191
+ function O() {
192
+ t.value = c.map((e, n) => ({ ...e, visible: !0, order: n })), l && typeof localStorage < "u" && localStorage.removeItem(l);
193
+ }
194
+ const x = A(() => new Set(t.value.filter((e) => !e.visible).map((e) => e.key))), I = A(() => new Map(t.value.map((e, n) => [e.key, n]))), b = A(() => t.value.filter((e) => e.controllable));
195
+ return {
196
+ columns: t,
197
+ controllableColumns: b,
198
+ hiddenKeys: x,
199
+ columnOrderMap: I,
200
+ settingVisible: d,
201
+ init: v,
202
+ initMetas: u,
203
+ setVisible: S,
204
+ move: z,
205
+ reorder: w,
206
+ reset: O,
207
+ nextTick: R
208
+ };
209
+ }
210
+ export {
211
+ Z as a,
212
+ Q as e,
213
+ Y as o,
214
+ X as u
215
+ };
216
+ //# sourceMappingURL=useColumnSettings-BDtF5-8R.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColumnSettings-BDtF5-8R.mjs","sources":["../../src/lib/composables/useDataGrid.ts","../../src/components/data/datagrid/useColumnSettings.ts"],"sourcesContent":["import { ref, reactive, shallowRef } from 'vue'\r\nimport { request, type ApiResult } from '../core/http'\r\nimport { getGlobalConfig } from '../core/config'\r\n\r\n/**\r\n * useDataGrid(PRD 5.3)\r\n * DataGrid 状态管理:分页 / 搜索 / 选中 / 请求\r\n *\r\n * @example\r\n * const grid = useDataGrid({ pageSize: 20 })\r\n * grid.fetchData()\r\n */\r\n\r\nexport interface SortState {\r\n prop: string\r\n order: 'ascending' | 'descending'\r\n}\r\n\r\nexport interface UseDataGridOptions {\r\n /** 数据接口地址 */\r\n api?: string\r\n /** 请求方法,默认 post */\r\n apiMethod?: 'get' | 'post' | 'put' | 'delete'\r\n /** 固定请求参数 */\r\n apiParam?: Record<string, any>\r\n /** 初始每页条数 */\r\n pageSize?: number\r\n /** 是否自动请求 */\r\n immediate?: boolean\r\n /** 请求级覆盖 */\r\n reqOptions?: import('../../types/config').ReqOptions\r\n /** 请求成功回调(解封后的列表结果) */\r\n onLoaded?: (result: { list: any[]; total: number }) => void\r\n}\r\n\r\nexport interface ListData {\r\n list: any[]\r\n total: number\r\n pageSize: number\r\n currentPage: number\r\n}\r\n\r\nexport function useDataGrid(options: UseDataGridOptions = {}) {\r\n const cfg = getGlobalConfig()\r\n const {\r\n api,\r\n apiMethod = 'post',\r\n apiParam = {},\r\n pageSize: initPageSize = cfg.page.pager.pageSize,\r\n immediate = false,\r\n reqOptions,\r\n onLoaded\r\n } = options\r\n\r\n const currentPage = ref(1)\r\n const pageSize = ref(initPageSize)\r\n const total = ref(0)\r\n const list = shallowRef<any[]>([])\r\n const loading = ref(false)\r\n const searchParams = reactive<Record<string, any>>({})\r\n const selection = ref<any[]>([])\r\n // 排序状态\r\n const sortState = ref<SortState | null>(null)\r\n\r\n const pageParam = cfg.request.pageParam\r\n const listCfg = cfg.response.list\r\n\r\n let controller: AbortController | null = null\r\n\r\n /**\r\n * 组装列表请求体:{ currentPage, pageSize, param: {...搜索+固定参数+排序} }\r\n */\r\n function buildParams(extra?: Record<string, any>) {\r\n const params: Record<string, any> = {\r\n [pageParam.pageField]: currentPage.value,\r\n [pageParam.sizeField]: pageSize.value\r\n }\r\n const search = {\r\n ...apiParam,\r\n ...searchParams,\r\n ...(extra || {})\r\n }\r\n // 如果有排序,增加排序参数\r\n if (sortState.value) {\r\n search.sortProp = sortState.value.prop\r\n search.sortOrder = sortState.value.order\r\n }\r\n params[pageParam.searchField] = search\r\n return params\r\n }\r\n\r\n /**\r\n * 请求数据\r\n */\r\n async function fetchData(extra?: Record<string, any>): Promise<ListData> {\r\n if (!api) {\r\n list.value = []\r\n total.value = 0\r\n return { list: [], total: 0, pageSize: pageSize.value, currentPage: currentPage.value }\r\n }\r\n\r\n loading.value = true\r\n if (controller) controller.abort()\r\n controller = new AbortController()\r\n\r\n const body = buildParams(extra)\r\n try {\r\n let result: ApiResult<any>\r\n if (apiMethod === 'get') {\r\n result = await request.request({ url: api, method: 'get', params: body }, { ...reqOptions, signal: controller.signal })\r\n } else {\r\n result = await request.request({ url: api, method: apiMethod, data: body }, { ...reqOptions, signal: controller.signal })\r\n }\r\n\r\n if (result.success) {\r\n const data = result.data\r\n // 解封列表结构\r\n let rows: any[] = []\r\n let totalCount = 0\r\n if (Array.isArray(data)) {\r\n rows = data\r\n totalCount = data.length\r\n } else if (data && typeof data === 'object') {\r\n rows = data[listCfg.listName] ?? data.list ?? []\r\n totalCount = data[listCfg.totalName] ?? data.total ?? rows.length\r\n }\r\n list.value = rows\r\n total.value = totalCount\r\n onLoaded?.({ list: rows, total: totalCount })\r\n return {\r\n list: rows,\r\n total: totalCount,\r\n pageSize: data?.[listCfg.pageSizeName] ?? pageSize.value,\r\n currentPage: data?.[listCfg.currentPageName] ?? currentPage.value\r\n }\r\n }\r\n list.value = []\r\n total.value = 0\r\n return { list: [], total: 0, pageSize: pageSize.value, currentPage: currentPage.value }\r\n } finally {\r\n loading.value = false\r\n controller = null\r\n }\r\n }\r\n\r\n /** 刷新当前页 */\r\n function refresh() {\r\n return fetchData()\r\n }\r\n\r\n function onChangeCurrentpage(value: number) {\r\n currentPage.value = value\r\n return fetchData()\r\n }\r\n\r\n function onChangePagesize(value: number) {\r\n pageSize.value = value\r\n currentPage.value = 1\r\n return fetchData()\r\n }\r\n\r\n function setSelection(rows: any[]) {\r\n selection.value = rows || []\r\n }\r\n\r\n function getSelection() {\r\n return selection.value\r\n }\r\n\r\n function clearSelection() {\r\n selection.value = []\r\n }\r\n\r\n /** 合并搜索条件并查询(搜索面板用) */\r\n function search(params?: Record<string, any>) {\r\n if (params) Object.assign(searchParams, params)\r\n currentPage.value = 1\r\n return fetchData()\r\n }\r\n\r\n /** 排序变更,更新排序状态并查询 */\r\n function changeSort({ prop, order }: { prop: string; order: 'ascending' | 'descending' | null }) {\r\n if (!prop || !order) {\r\n sortState.value = null\r\n } else {\r\n sortState.value = { prop, order }\r\n }\r\n currentPage.value = 1\r\n return fetchData()\r\n }\r\n\r\n /** 重置到第一页并清空搜索条件 + 排序 */\r\n function reset() {\r\n currentPage.value = 1\r\n Object.keys(searchParams).forEach((k) => delete searchParams[k])\r\n sortState.value = null\r\n return fetchData()\r\n }\r\n\r\n if (immediate) {\r\n fetchData()\r\n }\r\n\r\n return {\r\n // 状态\r\n currentPage,\r\n page: currentPage,\r\n pageSize,\r\n total,\r\n list,\r\n loading,\r\n searchParams,\r\n selection,\r\n sortState,\r\n // 方法\r\n fetchData,\r\n refresh,\r\n reset,\r\n search,\r\n changeSort,\r\n onChangeCurrentpage,\r\n onChangePagesize,\r\n setSelection,\r\n getSelection,\r\n clearSelection,\r\n buildParams\r\n }\r\n}\r\n\r\nexport type DataGridController = ReturnType<typeof useDataGrid>\r\n","import { ref, computed, nextTick } from 'vue'\r\nimport type { VNode } from 'vue'\r\nimport { safeJsonParse } from '../../../lib/core/utils'\r\n\r\n/**\r\n * 动态列:从默认插槽的 el-table-column vnode 中提取列元信息,\r\n * 支持显示/隐藏/排序,状态可持久化到 localStorage(PRD 4.2)。\r\n */\r\n\r\nexport interface ColumnMeta {\r\n /** el-table-column 的 key(prop 或自动 id) */\r\n key: string\r\n label: string\r\n /** 用户可控制的业务列(selection/index 等内置列不可控) */\r\n controllable: boolean\r\n visible: boolean\r\n order: number\r\n}\r\n\r\n/** 判定 vnode 是否为 el-table-column(type 显式声明或组件 name 匹配) */\r\nfunction isColumnVNode(vnode: VNode): boolean {\r\n const props = (vnode.props || {}) as Record<string, any>\r\n const typeName =\r\n (vnode.type as any)?.name ||\r\n (vnode.type as any)?.__name ||\r\n ''\r\n return (\r\n String(typeName).includes('TableColumn') ||\r\n (vnode.type as any) === Symbol.for('el-table-column') ||\r\n // 全局注册组件时 type 为对象带 name\r\n typeName === 'ElTableColumn' ||\r\n !!(props.prop || props.label || props.type)\r\n )\r\n}\r\n\r\n/**\r\n * 从插槽 vnode 数组中解析列\r\n */\r\nexport function extractColumns(vnodes: VNode[]): ColumnMeta[] {\r\n const columns: ColumnMeta[] = []\r\n let auto = 0\r\n const walk = (nodes: VNode[]) => {\r\n nodes.forEach((vnode) => {\r\n if (!vnode || typeof vnode !== 'object') return\r\n const props = (vnode.props || {}) as Record<string, any>\r\n\r\n if (isColumnVNode(vnode)) {\r\n auto += 1\r\n const colType = props.type // selection / index / expand\r\n const key = String(props.prop || props.columnKey || `col-${auto}`)\r\n columns.push({\r\n key,\r\n label: props.label || key,\r\n controllable: !colType,\r\n visible: props.hidden !== true,\r\n order: columns.length\r\n })\r\n }\r\n // 递归子节点(fragment)\r\n const children = (vnode as any).children\r\n if (Array.isArray(children)) {\r\n walk(children.filter((c: any) => c && typeof c === 'object') as VNode[])\r\n }\r\n })\r\n }\r\n walk(vnodes)\r\n return columns\r\n}\r\n\r\n/**\r\n * 按列设置中的 order 重排业务列 vnode。\r\n * key 解析规则必须与 extractColumns 完全一致(含自动编号计数),\r\n * 未匹配到列设置的 vnode 保持原相对顺序排在末尾。\r\n */\r\nexport function orderColumnVnodes(vnodes: VNode[], orderMap: Map<string, number>): VNode[] {\r\n let auto = 0\r\n const keyOf = (vnode: VNode): string => {\r\n const props = (vnode.props || {}) as Record<string, any>\r\n if (isColumnVNode(vnode)) {\r\n auto += 1\r\n return String(props.prop || props.columnKey || `col-${auto}`)\r\n }\r\n return ''\r\n }\r\n return vnodes\r\n .map((vnode, index) => ({ vnode, index, order: orderMap.get(keyOf(vnode)) }))\r\n .sort((a, b) => {\r\n if (a.order == null && b.order == null) return a.index - b.index\r\n if (a.order == null) return 1\r\n if (b.order == null) return -1\r\n return a.order - b.order\r\n })\r\n .map((item) => item.vnode)\r\n}\r\n\r\nexport function useColumnSettings(storageKey?: string) {\r\n const columns = ref<ColumnMeta[]>([])\r\n /** 初始列定义快照(插槽声明顺序),供「恢复默认」还原 */\r\n let initialColumns: ColumnMeta[] = []\r\n const settingVisible = ref(false)\r\n\r\n const storageKeyName = storageKey ? `wd:columns:${storageKey}` : ''\r\n\r\n function loadStored(): Record<string, { visible?: boolean; order?: number }> {\r\n if (!storageKeyName || typeof localStorage === 'undefined') return {}\r\n return safeJsonParse(localStorage.getItem(storageKeyName), {})\r\n }\r\n\r\n function persist() {\r\n if (!storageKeyName || typeof localStorage === 'undefined') return\r\n const data: Record<string, any> = {}\r\n columns.value.forEach((c, i) => {\r\n data[c.key] = { visible: c.visible, order: i }\r\n })\r\n localStorage.setItem(storageKeyName, JSON.stringify(data))\r\n }\r\n\r\n /** 合并本地存储的显隐/排序后写入列状态 */\r\n function applyParsed(parsed: ColumnMeta[]) {\r\n initialColumns = parsed.map((col) => ({ ...col }))\r\n const stored = loadStored()\r\n columns.value = parsed.map((col) => {\r\n const s = stored[col.key]\r\n if (s) {\r\n return { ...col, visible: s.visible ?? col.visible, order: s.order ?? col.order }\r\n }\r\n return col\r\n })\r\n columns.value.sort((a, b) => a.order - b.order)\r\n }\r\n\r\n function init(vnodes: VNode[]) {\r\n applyParsed(extractColumns(vnodes))\r\n }\r\n\r\n /** 直接以列元信息初始化(columns 配置驱动的组件用,如 EditableGrid) */\r\n function initMetas(metas: Array<{ key: string; label: string; controllable?: boolean; visible?: boolean }>) {\r\n applyParsed(\r\n metas.map((m, i) => ({\r\n key: m.key,\r\n label: m.label,\r\n controllable: m.controllable !== false,\r\n visible: m.visible !== false,\r\n order: i\r\n }))\r\n )\r\n }\r\n\r\n function setVisible(key: string, visible: boolean) {\r\n const col = columns.value.find((c) => c.key === key)\r\n if (col) {\r\n col.visible = visible\r\n persist()\r\n }\r\n }\r\n\r\n function move(key: string, direction: -1 | 1) {\r\n const idx = columns.value.findIndex((c) => c.key === key)\r\n const target = idx + direction\r\n if (idx < 0 || target < 0 || target >= columns.value.length) return\r\n const arr = columns.value.slice()\r\n const [item] = arr.splice(idx, 1)\r\n arr.splice(target, 0, item)\r\n arr.forEach((c, i) => (c.order = i))\r\n columns.value = arr\r\n persist()\r\n }\r\n\r\n /**\r\n * 拖拽重排:把 fromKey 拖到 toKey 的前面(before)或后面(after)。\r\n * 仅允许在可控列之间拖拽,selection/index 等内置列不参与。\r\n */\r\n function reorder(fromKey: string, toKey: string, position: 'before' | 'after' = 'before') {\r\n if (!fromKey || !toKey || fromKey === toKey) return\r\n const arr = columns.value.slice()\r\n const fromIdx = arr.findIndex((c) => c.key === fromKey)\r\n if (fromIdx < 0) return\r\n if (!arr[fromIdx].controllable) return\r\n const [item] = arr.splice(fromIdx, 1)\r\n let insertIdx = arr.findIndex((c) => c.key === toKey)\r\n if (insertIdx < 0 || !arr[insertIdx].controllable) return\r\n if (position === 'after') insertIdx += 1\r\n arr.splice(insertIdx, 0, item)\r\n arr.forEach((c, i) => (c.order = i))\r\n columns.value = arr\r\n persist()\r\n }\r\n\r\n /** 恢复到插槽声明时的原始顺序与显隐状态 */\r\n function reset() {\r\n columns.value = initialColumns.map((col, i) => ({ ...col, visible: true, order: i }))\r\n if (storageKeyName && typeof localStorage !== 'undefined') {\r\n localStorage.removeItem(storageKeyName)\r\n }\r\n }\r\n\r\n /** 隐藏列的 key 集合,供模板过滤插槽 vnode */\r\n const hiddenKeys = computed(() => new Set(columns.value.filter((c) => !c.visible).map((c) => c.key)))\r\n\r\n /** 列 key → 当前排序位置,供插槽 vnode 重排 */\r\n const columnOrderMap = computed(() => new Map(columns.value.map((c, i) => [c.key, i])))\r\n\r\n const controllableColumns = computed(() => columns.value.filter((c) => c.controllable))\r\n\r\n return {\r\n columns,\r\n controllableColumns,\r\n hiddenKeys,\r\n columnOrderMap,\r\n settingVisible,\r\n init,\r\n initMetas,\r\n setVisible,\r\n move,\r\n reorder,\r\n reset,\r\n nextTick\r\n }\r\n}\r\n"],"names":["useDataGrid","options","cfg","getGlobalConfig","api","apiMethod","apiParam","initPageSize","immediate","reqOptions","onLoaded","currentPage","ref","pageSize","total","list","shallowRef","loading","searchParams","reactive","selection","sortState","pageParam","listCfg","controller","buildParams","extra","params","search","fetchData","body","result","request","data","rows","totalCount","refresh","onChangeCurrentpage","value","onChangePagesize","setSelection","getSelection","clearSelection","changeSort","prop","order","reset","k","isColumnVNode","vnode","props","typeName","_a","_b","extractColumns","vnodes","columns","auto","walk","nodes","colType","key","children","c","orderColumnVnodes","orderMap","keyOf","index","a","b","item","useColumnSettings","storageKey","initialColumns","settingVisible","storageKeyName","loadStored","safeJsonParse","persist","i","applyParsed","parsed","col","stored","s","init","initMetas","metas","m","setVisible","visible","move","direction","idx","target","arr","reorder","fromKey","toKey","position","fromIdx","insertIdx","hiddenKeys","computed","columnOrderMap","controllableColumns","nextTick"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { shallowRef as m, ref as g, onMounted as p, watch as w } from "vue";
2
+ import { r as y } from "./http-DUPsbs2K.mjs";
3
+ function P(a) {
4
+ const i = m([]), f = g(!1), s = g(!1);
5
+ function n(r) {
6
+ var d;
7
+ const t = a.textProp.value, e = a.valueProp.value, l = ((d = a.tipsProp) == null ? void 0 : d.value) || "tips";
8
+ return (r || []).map((u) => {
9
+ if (u && typeof u == "object") {
10
+ const o = u[l];
11
+ return {
12
+ text: u[t],
13
+ value: u[e],
14
+ tips: o == null ? "" : String(o),
15
+ raw: u
16
+ };
17
+ }
18
+ return { text: String(u), value: u, tips: "", raw: { [t]: String(u), [e]: u } };
19
+ });
20
+ }
21
+ async function c(r) {
22
+ var t;
23
+ if (a.dataSource.value) {
24
+ i.value = v(n(a.dataSource.value));
25
+ return;
26
+ }
27
+ if (!a.api.value) {
28
+ i.value = v([]);
29
+ return;
30
+ }
31
+ f.value = !0, a.emit("apiBefore", { url: a.api.value });
32
+ try {
33
+ const e = { ...a.apiParam.value, ...r || {} }, l = a.apiMethod.value === "get" ? await y.get(a.api.value, e) : await y.post(a.api.value, e);
34
+ if (l.success) {
35
+ const d = Array.isArray(l.data) ? l.data : ((t = l.data) == null ? void 0 : t.list) || [];
36
+ i.value = v(n(d)), a.emit("apiSuccess", { data: l.data });
37
+ } else
38
+ a.emit("apiFail", { code: l.code, message: l.message });
39
+ } catch (e) {
40
+ a.emit("apiFail", { error: e, message: e == null ? void 0 : e.message });
41
+ } finally {
42
+ f.value = !1, a.emit("apiAfter"), s.value = !0;
43
+ }
44
+ }
45
+ function v(r) {
46
+ const t = n(a.addData.value || []), e = n(a.appendData.value || []);
47
+ return [...t, ...r, ...e];
48
+ }
49
+ async function S(r, t = "keyword") {
50
+ a.api.value && await c({ [t]: r });
51
+ }
52
+ return p(() => {
53
+ a.active.value ? c() : (a.dataSource.value || !a.api.value) && (i.value = v(n(a.dataSource.value || [])));
54
+ }), w(
55
+ () => [a.api.value, a.dataSource.value],
56
+ () => {
57
+ (a.active.value || a.dataSource.value) && c();
58
+ }
59
+ ), { options: i, loading: f, fetchOptions: c, remoteSearch: S, loaded: s };
60
+ }
61
+ export {
62
+ P as u
63
+ };
64
+ //# sourceMappingURL=useOptionsLoader-D0RTB_ar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOptionsLoader-D0RTB_ar.mjs","sources":["../../src/components/inputs/useOptionsLoader.ts"],"sourcesContent":["/**\n * 输入选择组共享:选项自动加载(静态数组 or api)、前插/后追加固定项\n */\nimport { ref, shallowRef, onMounted, watch, type Ref } from 'vue'\nimport { request } from '../../lib/core/http'\n\nexport interface UseOptionsOptions {\n api: Ref<string>\n apiMethod: Ref<'get' | 'post'>\n apiParam: Ref<Record<string, any>>\n active: Ref<boolean>\n dataSource: Ref<any[] | undefined>\n textProp: Ref<string>\n valueProp: Ref<string>\n tipsProp?: Ref<string>\n addData: Ref<any[] | undefined>\n appendData: Ref<any[] | undefined>\n emit: (event: any, ...args: any[]) => void\n}\n\nexport interface NormalizedOption {\n text: string\n value: any\n /** 悬停提示内容(取 tipsProp 字段,无则为空字符串) */\n tips: string\n /** 原始数据(默认插槽上下文 { option }) */\n raw: Record<string, any>\n}\n\nexport function useOptionsLoader(opts: UseOptionsOptions) {\n const options = shallowRef<NormalizedOption[]>([])\n const loading = ref(false)\n /** 标记是否加载过,避免重复请求 */\n const loaded = ref(false)\n\n function normalize(list: any[]): NormalizedOption[] {\n const textKey = opts.textProp.value\n const valueKey = opts.valueProp.value\n const tipsKey = opts.tipsProp?.value || 'tips'\n return (list || []).map((item) => {\n if (item && typeof item === 'object') {\n const tips = item[tipsKey]\n return {\n text: item[textKey],\n value: item[valueKey],\n tips: tips === null || tips === undefined ? '' : String(tips),\n raw: item\n }\n }\n // 基本类型数组 [1,2,3] / ['a','b']\n return { text: String(item), value: item, tips: '', raw: { [textKey]: String(item), [valueKey]: item } }\n })\n }\n\n async function fetchOptions(extraParam?: Record<string, any>) {\n // 静态数据源\n if (opts.dataSource.value) {\n options.value = mergeFixed(normalize(opts.dataSource.value))\n return\n }\n if (!opts.api.value) {\n options.value = mergeFixed([])\n return\n }\n loading.value = true\n opts.emit('apiBefore', { url: opts.api.value })\n try {\n const param = { ...opts.apiParam.value, ...(extraParam || {}) }\n const result =\n opts.apiMethod.value === 'get'\n ? await request.get(opts.api.value, param)\n : await request.post(opts.api.value, param)\n if (result.success) {\n const list = Array.isArray(result.data) ? result.data : result.data?.list || []\n options.value = mergeFixed(normalize(list))\n opts.emit('apiSuccess', { data: result.data })\n } else {\n opts.emit('apiFail', { code: result.code, message: result.message })\n }\n } catch (error: any) {\n opts.emit('apiFail', { error, message: error?.message })\n } finally {\n loading.value = false\n opts.emit('apiAfter')\n loaded.value = true\n }\n }\n\n /** 合并前插/后追加固定项 */\n function mergeFixed(main: NormalizedOption[]): NormalizedOption[] {\n const head = normalize(opts.addData.value || [])\n const tail = normalize(opts.appendData.value || [])\n return [...head, ...main, ...tail]\n }\n\n /** 远程搜索(Select remote / AutoComplete) */\n async function remoteSearch(keyword: string, keywordKey = 'keyword') {\n if (!opts.api.value) return\n await fetchOptions({ [keywordKey]: keyword })\n }\n\n onMounted(() => {\n if (opts.active.value) {\n fetchOptions()\n } else if (opts.dataSource.value || !opts.api.value) {\n options.value = mergeFixed(normalize(opts.dataSource.value || []))\n }\n })\n\n watch(\n () => [opts.api.value, opts.dataSource.value],\n () => {\n if (opts.active.value || opts.dataSource.value) fetchOptions()\n }\n )\n\n return { options, loading, fetchOptions, remoteSearch, loaded }\n}\n"],"names":["useOptionsLoader","opts","options","shallowRef","loading","ref","loaded","normalize","list","textKey","valueKey","tipsKey","_a","item","tips","fetchOptions","extraParam","mergeFixed","param","result","request","error","main","head","tail","remoteSearch","keyword","keywordKey","onMounted","watch"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { _ as a } from "../chunks/ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs";
3
+ export {
4
+ a as WdConfirmButton,
5
+ a as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { W as r } from "../chunks/DataForm-C6UW92Ds.mjs";
3
+ export {
4
+ r as WdDataForm,
5
+ r as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1 @@
1
+ .wd-data-form[data-v-ad5b00d6]{width:100%}.wd-data-form__footer[data-v-ad5b00d6]{display:flex;justify-content:flex-end;gap:8px;padding-top:var(--wd-spacing-base, 12px);border-top:1px solid var(--wd-border-color-light, #e4e7ed);margin-top:var(--wd-spacing-base, 12px)}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { W as t } from "../chunks/DataGrid-BhgND4G_.mjs";
3
+ export {
4
+ t as WdDataGrid,
5
+ t as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1 @@
1
+ .wd-datagrid[data-v-41e543b4]{display:flex;flex-direction:column;width:100%;height:100%;background:var(--wd-bg-color, #fff)}.wd-datagrid--auto-height[data-v-41e543b4]{height:100%}.wd-datagrid--fixed-height[data-v-41e543b4]{height:auto}.wd-datagrid__toolbar[data-v-41e543b4]{display:flex;align-items:center;justify-content:flex-start;gap:var(--wd-spacing-base, 12px);padding:0 0 var(--wd-spacing-base, 12px);flex-wrap:wrap}.wd-datagrid__toolbar[data-v-41e543b4] .el-button+.el-button{margin-left:0}.wd-datagrid__toolbar[data-v-41e543b4] .el-button .el-icon{font-size:16px}.wd-datagrid__toolbar-group[data-v-41e543b4],.wd-datagrid__bottom-group[data-v-41e543b4]{display:flex;align-items:center;flex-wrap:wrap}.wd-datagrid__toolbar-left[data-v-41e543b4]{gap:8px}.wd-datagrid__toolbar-right[data-v-41e543b4]{gap:6px;margin-left:auto}.wd-datagrid__toolbar-group.at-left[data-v-41e543b4]{order:1;margin-left:0}.wd-datagrid__toolbar-group.at-right[data-v-41e543b4]{order:2;margin-left:auto}.wd-datagrid__toolbar-group.at-right+.at-right[data-v-41e543b4]{margin-left:0}.wd-datagrid__toolbar-group.is-square[data-v-41e543b4] .el-button{border-radius:0}.wd-datagrid__toolbar-group.is-square[data-v-41e543b4] .el-button:not(.wd-datagrid__cart-btn--text){padding:0;width:var(--el-button-size, 32px)}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]{gap:0}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]>*:not(:first-child){margin-left:-1px}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4] .el-button:not(.wd-datagrid__cart-btn--text){padding:0;width:var(--el-button-size, 32px)}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]>.el-button:not(:first-child),.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]>*:not(:first-child) .el-button{border-top-left-radius:0;border-bottom-left-radius:0}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]>.el-button:not(:last-child),.wd-datagrid__toolbar-group.is-group[data-v-41e543b4]>*:not(:last-child) .el-button{border-top-right-radius:0;border-bottom-right-radius:0}.wd-datagrid__toolbar-group.is-group[data-v-41e543b4] .el-button:hover,.wd-datagrid__toolbar-group.is-group[data-v-41e543b4] .el-button:focus{position:relative;z-index:1}.wd-datagrid__table[data-v-41e543b4]{flex:1;min-height:0}.wd-datagrid--fixed-height .wd-datagrid__table[data-v-41e543b4]{flex:none}.wd-datagrid__pager[data-v-41e543b4]{display:flex;align-items:center;justify-content:flex-end;gap:var(--wd-spacing-base, 12px);flex-wrap:nowrap;overflow-x:auto;padding-top:var(--wd-spacing-base, 12px)}.wd-datagrid__bottom-group[data-v-41e543b4]{gap:6px;flex-wrap:nowrap;flex-shrink:0}.wd-datagrid__bottom-actions[data-v-41e543b4]{gap:8px}.wd-datagrid__bottom-group[data-v-41e543b4] .el-button+.el-button{margin-left:0}.wd-datagrid__bottom-group[data-v-41e543b4] .el-button .el-icon{font-size:16px}.wd-datagrid__pager-main[data-v-41e543b4]{margin-left:auto}.wd-datagrid__bottom-bar.pager-at-left .wd-datagrid__pager-main[data-v-41e543b4]{order:-1;margin-left:0;margin-right:auto}.wd-datagrid__bottom-bar.pager-at-center .wd-datagrid__pager-main[data-v-41e543b4]{margin-right:auto}.wd-datagrid__cards[data-v-41e543b4]{flex:1;min-height:0;overflow:auto}.wd-datagrid__card[data-v-41e543b4]{border:1px solid var(--wd-border-color-light, #e4e7ed);border-radius:var(--wd-radius-base, 4px);padding:var(--wd-spacing-base, 12px);margin-bottom:var(--wd-spacing-base, 12px)}.wd-datagrid__card-title[data-v-41e543b4]{font-weight:600;font-size:var(--wd-font-size-large, 16px);color:var(--wd-text-color-primary, #303133);margin-bottom:8px}.wd-datagrid__card-line[data-v-41e543b4]{display:flex;font-size:var(--wd-font-size-base, 14px);line-height:1.8}.wd-datagrid__card-label[data-v-41e543b4]{width:110px;color:var(--wd-text-color-secondary, #909399);flex-shrink:0}.wd-datagrid__card-value[data-v-41e543b4]{color:var(--wd-text-color-regular, #606266);word-break:break-all}.wd-datagrid__col-tip[data-v-41e543b4]{margin-bottom:8px;font-size:var(--wd-font-size-small, 12px);color:var(--wd-text-color-secondary, #909399)}.wd-datagrid__col-setting[data-v-41e543b4]{max-height:400px;overflow:auto}.wd-datagrid__col-item[data-v-41e543b4]{position:relative;display:flex;align-items:center;gap:8px;padding:6px 8px;border-bottom:1px solid var(--wd-border-color-light, #f0f0f0);border-radius:4px;transition:background-color .15s}.wd-datagrid__col-item[data-v-41e543b4]:hover{background-color:var(--wd-fill-color-light, #f5f7fa)}.wd-datagrid__col-handle[data-v-41e543b4]{display:inline-flex;align-items:center;cursor:grab;color:var(--wd-text-color-placeholder, #a8abb2);touch-action:none}.wd-datagrid__col-handle[data-v-41e543b4]:active{cursor:grabbing}.wd-datagrid__col-checkbox[data-v-41e543b4]{flex:1}.wd-datagrid__col-item.is-dragging[data-v-41e543b4]{opacity:.45}.wd-datagrid__col-item.drag-over--before[data-v-41e543b4]:before,.wd-datagrid__col-item.drag-over--after[data-v-41e543b4]:after{content:"";position:absolute;left:0;right:0;height:2px;background-color:var(--el-color-primary, #409eff);pointer-events:none}.wd-datagrid__col-item.drag-over--before[data-v-41e543b4]:before{top:-1px}.wd-datagrid__col-item.drag-over--after[data-v-41e543b4]:after{bottom:-1px}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { _ as t } from "../chunks/DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs";
3
+ export {
4
+ t as WdDialogButton,
5
+ t as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { W as o } from "../chunks/Drawer-ucXKUecL.mjs";
3
+ export {
4
+ o as WdDrawer,
5
+ o as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1 @@
1
+ .wd-container__iframe[data-v-b1f4d89e]{width:100%;border:0;display:block}.wd-container__iframe--drawer[data-v-b1f4d89e]{height:100%;min-height:400px}.wd-container__iframe--dialog[data-v-b1f4d89e]{height:60vh}
@@ -0,0 +1,7 @@
1
+ /* empty css */
2
+ import { _ as t } from "../chunks/DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs";
3
+ export {
4
+ t as WdDrawerButton,
5
+ t as default
6
+ };
7
+ //# sourceMappingURL=index.mjs.map