workdesktop-ai 1.2.4 → 1.2.5

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 (73) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/api-button/index.mjs +1 -1
  3. package/dist/auto-complete/index.mjs +1 -1
  4. package/dist/checkbox-list/index.mjs +1 -1
  5. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs → ApiButton.vue_vue_type_script_setup_true_lang-ZLHP9S_H.mjs} +2 -2
  6. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-ZLHP9S_H.mjs.map} +1 -1
  7. package/dist/chunks/{AutoComplete-DqyhsqiS.mjs → AutoComplete-BKWrR5pD.mjs} +2 -2
  8. package/dist/chunks/{AutoComplete-DqyhsqiS.mjs.map → AutoComplete-BKWrR5pD.mjs.map} +1 -1
  9. package/dist/chunks/{CheckboxList-RxJGe-LQ.mjs → CheckboxList-5o9E0Tzg.mjs} +2 -2
  10. package/dist/chunks/{CheckboxList-RxJGe-LQ.mjs.map → CheckboxList-5o9E0Tzg.mjs.map} +1 -1
  11. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-Cz1M6QsL.mjs} +2 -2
  12. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-Cz1M6QsL.mjs.map} +1 -1
  13. package/dist/chunks/{DataForm-DYMderSS.mjs → DataForm-Dvx6GxlR.mjs} +3 -3
  14. package/dist/chunks/{DataForm-DYMderSS.mjs.map → DataForm-Dvx6GxlR.mjs.map} +1 -1
  15. package/dist/chunks/{DataGrid-DWAhwLVk.mjs → DataGrid-Cw3yXhmR.mjs} +3 -3
  16. package/dist/chunks/{DataGrid-DWAhwLVk.mjs.map → DataGrid-Cw3yXhmR.mjs.map} +1 -1
  17. package/dist/chunks/{EditableGrid-e3wwCaem.mjs → EditableGrid-Dr48XzLH.mjs} +4 -4
  18. package/dist/chunks/{EditableGrid-e3wwCaem.mjs.map → EditableGrid-Dr48XzLH.mjs.map} +1 -1
  19. package/dist/chunks/{Iframe-DcFFi0S9.mjs → Iframe-BB1Va2kZ.mjs} +3 -3
  20. package/dist/chunks/{Iframe-DcFFi0S9.mjs.map → Iframe-BB1Va2kZ.mjs.map} +1 -1
  21. package/dist/chunks/{ImageUpload-BK7tbU2o.mjs → ImageUpload-DiJ16Aga.mjs} +3 -3
  22. package/dist/chunks/{ImageUpload-BK7tbU2o.mjs.map → ImageUpload-DiJ16Aga.mjs.map} +1 -1
  23. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs → PromptButton.vue_vue_type_script_setup_true_lang-y_sfI324.mjs} +2 -2
  24. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-y_sfI324.mjs.map} +1 -1
  25. package/dist/chunks/{RadioList-DuEeHumw.mjs → RadioList-CQJDixnr.mjs} +2 -2
  26. package/dist/chunks/{RadioList-DuEeHumw.mjs.map → RadioList-CQJDixnr.mjs.map} +1 -1
  27. package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs → Requester.vue_vue_type_script_setup_true_lang-nel6vN12.mjs} +3 -3
  28. package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs.map → Requester.vue_vue_type_script_setup_true_lang-nel6vN12.mjs.map} +1 -1
  29. package/dist/chunks/{Select-MD3taMJo.mjs → Select-ByH7uxuS.mjs} +2 -2
  30. package/dist/chunks/{Select-MD3taMJo.mjs.map → Select-ByH7uxuS.mjs.map} +1 -1
  31. package/dist/chunks/{Station-2m9uznh3.mjs → Station-DDoJem4F.mjs} +150 -139
  32. package/dist/chunks/Station-DDoJem4F.mjs.map +1 -0
  33. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs → Switch.vue_vue_type_script_setup_true_lang-DrSXmsj6.mjs} +2 -2
  34. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs.map → Switch.vue_vue_type_script_setup_true_lang-DrSXmsj6.mjs.map} +1 -1
  35. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs → Upload.vue_vue_type_script_setup_true_lang-k-0PTz3l.mjs} +3 -3
  36. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs.map → Upload.vue_vue_type_script_setup_true_lang-k-0PTz3l.mjs.map} +1 -1
  37. package/dist/chunks/{Viewer-FSV6xObc.mjs → Viewer-CmTaneb6.mjs} +2 -2
  38. package/dist/chunks/{Viewer-FSV6xObc.mjs.map → Viewer-CmTaneb6.mjs.map} +1 -1
  39. package/dist/chunks/{config-B6nWG5dv.mjs → config-CDqjABpD.mjs} +2 -2
  40. package/dist/chunks/{config-B6nWG5dv.mjs.map → config-CDqjABpD.mjs.map} +1 -1
  41. package/dist/chunks/{http-BKKP0gEJ.mjs → http-CW9konD4.mjs} +2 -2
  42. package/dist/chunks/{http-BKKP0gEJ.mjs.map → http-CW9konD4.mjs.map} +1 -1
  43. package/dist/chunks/{useApiAction-71XPKjlQ.mjs → useApiAction-CQVmN1MH.mjs} +2 -2
  44. package/dist/chunks/{useApiAction-71XPKjlQ.mjs.map → useApiAction-CQVmN1MH.mjs.map} +1 -1
  45. package/dist/chunks/{useColumnSettings-CbiWd27-.mjs → useColumnSettings-CIFQCmzT.mjs} +3 -3
  46. package/dist/chunks/{useColumnSettings-CbiWd27-.mjs.map → useColumnSettings-CIFQCmzT.mjs.map} +1 -1
  47. package/dist/chunks/{useConfig-CPioiLWJ.mjs → useConfig-ChIkE3Lz.mjs} +2 -2
  48. package/dist/chunks/{useConfig-CPioiLWJ.mjs.map → useConfig-ChIkE3Lz.mjs.map} +1 -1
  49. package/dist/chunks/{useOptionsLoader-D4Jh4f1F.mjs → useOptionsLoader-BUO0VTjH.mjs} +2 -2
  50. package/dist/chunks/{useOptionsLoader-D4Jh4f1F.mjs.map → useOptionsLoader-BUO0VTjH.mjs.map} +1 -1
  51. package/dist/confirm-button/index.mjs +1 -1
  52. package/dist/data-form/index.mjs +1 -1
  53. package/dist/data-grid/index.mjs +1 -1
  54. package/dist/editable-grid/index.mjs +1 -1
  55. package/dist/iframe/index.mjs +1 -1
  56. package/dist/image-upload/index.mjs +1 -1
  57. package/dist/index.esm.js +24 -24
  58. package/dist/index.umd.js +9 -9
  59. package/dist/index.umd.js.map +1 -1
  60. package/dist/prompt-button/index.mjs +1 -1
  61. package/dist/radio-list/index.mjs +1 -1
  62. package/dist/requester/index.mjs +1 -1
  63. package/dist/select/index.mjs +1 -1
  64. package/dist/station/index.mjs +1 -1
  65. package/dist/station/style.css +1 -1
  66. package/dist/style.css +1 -1
  67. package/dist/switch/index.mjs +1 -1
  68. package/dist/types/src/components/layout/Station.vue.d.ts +15 -4
  69. package/dist/types/src/components/layout/types.d.ts +2 -0
  70. package/dist/upload/index.mjs +1 -1
  71. package/dist/viewer/index.mjs +1 -1
  72. package/package.json +1 -1
  73. package/dist/chunks/Station-2m9uznh3.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -15,6 +15,7 @@
15
15
  - **`WdStation` 新增 `header-mode="both"`**:顶栏中央形态由 `nav` / `title` 扩为 `nav` / `title` / `both`。`both` = 顶部显示分导台 + 左侧**跟随激活分组联动**:点击分导台切换激活分组,左侧联动显示该分组的一级菜单作 title 分组,二级菜单平铺全量展示(仅当二级含三级时才折叠为子菜单),一级为叶子菜单时直接显示为可点击菜单项,适合分组多且需在顶部切分组、侧边同步联动展示该组一级菜单的系统;单分组时分导台自动隐藏退化为普通侧栏。`showNav` 条件由 `headerMode==='nav'` 改为 `headerMode!=='title'`。新增集成用例(both 顶部分导台 + 左侧跟随激活分组 / 二级平铺 / 二级含三级折叠 / 点击分导台联动切换分组 / 单分组退化),全量 vitest 279 用例全绿;Playwright 实测联动语义 19 项断言全过;文档站新增「分导台 + 系统标题并存」demo(第 8 个),api-meta / FAQ / 设计文档 / 组件文档同步。
16
16
  - **`WdPath` 新增 `animation` 属性**:设置路径段(内容)变动时的过渡动画——`none`(默认,零视觉变化)/ `fade`(淡入淡出)/ `slide`(横向滑移+淡入,留存段 FLIP 位移),基于 Vue `TransitionGroup` 实现,时长 0.2s,适用于自动模式滚动跟随章节、菜单链切换与手动 `items` 更新。同步修复自动模式下的自激刷新隐患:Path 位于自身标题观察容器内时,MutationObserver 会把动画产生的段节点增删误判为内容变化触发重扫——现过滤全部落在 `.wd-path` 子树内的变动,并对标题扫描结果做结构签名比对(层级+标题未变则不重建列表),彻底切断「动画改 DOM → 重扫 → 重渲染」循环。新增 6 个用例(动画渲染/切换 3 个 + 自激防护 3 个),全量 vitest 278 用例全绿;文档站自动模式示例增加 none/fade/slide 实时切换演示,api-meta 与 `document/components/path_v1.1.md` 同步。
17
17
  - **`WdStation` 新增 `show-header-title` 属性**(Boolean,默认 `true`):控制 `headerMode` 非 `nav` 时顶栏中央的系统标题 fallback 是否渲染;需要完全自绘 `#header-center`(如文档站改用 `WdPath` 承载吸顶路径)时传 `false` 关闭,组件默认行为与既有 DOM 结构不变。新增 1 个集成用例;文档站框架已启用(去除顶栏中央重复的「WorkDesktop」标题)。
18
+ - **`WdStation` tabs 标签支持显示菜单图标**:菜单项打开 tab 时自动携带其 `icon`,标签标题前渲染该图标(与菜单一致的图标);新增 `tabIcon` prop(Boolean,默认 `true`)可关闭此渲染,无 icon 的菜单项标签不显示图标。`StationTab` 类型新增 `icon` 字段(受控 `openTabs` 也可直接携带)。新增 2 个集成用例(带 icon 渲染与 open-tabs 回传 / tab-icon=false 关闭渲染),全量 vitest 306 用例全绿;Playwright 实测 7 项断言全过,截图 `temp/station_tab_icon.png`;api-meta 与组件文档同步。
18
19
 
19
20
  ## [1.1.1] - 2026-09-24
20
21
 
@@ -1,5 +1,5 @@
1
1
  /* empty css */
2
- import { _ as o } from "../chunks/ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs";
2
+ import { _ as o } from "../chunks/ApiButton.vue_vue_type_script_setup_true_lang-ZLHP9S_H.mjs";
3
3
  export {
4
4
  o as WdApiButton,
5
5
  o as default
@@ -1,5 +1,5 @@
1
1
  /* empty css */
2
- import { W as e } from "../chunks/AutoComplete-DqyhsqiS.mjs";
2
+ import { W as e } from "../chunks/AutoComplete-BKWrR5pD.mjs";
3
3
  export {
4
4
  e as WdAutoComplete,
5
5
  e as default
@@ -1,5 +1,5 @@
1
1
  /* empty css */
2
- import { W as r } from "../chunks/CheckboxList-RxJGe-LQ.mjs";
2
+ import { W as r } from "../chunks/CheckboxList-5o9E0Tzg.mjs";
3
3
  export {
4
4
  r as WdCheckboxList,
5
5
  r as default
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as k, resolveComponent as r, openBlock as s, createBlock as l, withCtx as o, createVNode as y, mergeProps as d, unref as f, renderSlot as c, createTextVNode as u, toDisplayString as g } from "vue";
2
- import { u as A } from "./useApiAction-71XPKjlQ.mjs";
2
+ import { u as A } from "./useApiAction-CQVmN1MH.mjs";
3
3
  import { t as B, b as L, a as _, h as R, f as C } from "./props-DAytpx7D.mjs";
4
4
  const T = /* @__PURE__ */ k({
5
5
  name: "WdApiButton",
@@ -77,4 +77,4 @@ const T = /* @__PURE__ */ k({
77
77
  export {
78
78
  T as _
79
79
  };
80
- //# sourceMappingURL=ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs.map
80
+ //# sourceMappingURL=ApiButton.vue_vue_type_script_setup_true_lang-ZLHP9S_H.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs","sources":["../../src/components/buttons/ApiButton.vue"],"sourcesContent":["<template>\r\n <el-tooltip\r\n v-if=\"tips\"\r\n :content=\"tips\"\r\n :effect=\"tipsType\"\r\n :placement=\"placement\"\r\n >\r\n <el-button v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n </el-tooltip>\r\n <el-button v-else v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdApiButton', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n ...apiProps,\r\n ...buttonTextProp,\r\n ...tipsProp,\r\n /** 按钮级 loading(默认 true);false 时按钮不转圈 */\r\n buttonLoading: { type: Boolean, default: true },\r\n /** 页面级 loading(全局遮罩 ElLoading) */\r\n pageLoading: { type: Boolean, default: false }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'click',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst { loading, doRequest } = useApiAction({\r\n getApi: () => props.api,\r\n getMethod: () => props.apiMethod,\r\n getParam: () => props.apiParam,\r\n getFilter: () => props.filter,\r\n getHeadRefresh: () => props.headRefreshDatagrid,\r\n emit,\r\n buttonLoading: () => props.buttonLoading,\r\n getReqOptions: () => ({ showLoading: props.pageLoading })\r\n})\r\n\r\nasync function onClick(event: MouseEvent) {\r\n emit('click', event)\r\n await doRequest()\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","loading","doRequest","useApiAction","onClick","event","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,UAAMA,IAAQC,GAYRC,IAAOC,GASP,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMN,EAAM;AAAA,MACpB,WAAW,MAAMA,EAAM;AAAA,MACvB,UAAU,MAAMA,EAAM;AAAA,MACtB,WAAW,MAAMA,EAAM;AAAA,MACvB,gBAAgB,MAAMA,EAAM;AAAA,MAC5B,MAAAE;AAAA,MACA,eAAe,MAAMF,EAAM;AAAA,MAC3B,eAAe,OAAO,EAAE,aAAaA,EAAM,YAAA;AAAA,IAAY,CACxD;AAED,mBAAeO,EAAQC,GAAmB;AACxC,MAAAN,EAAK,SAASM,CAAK,GACnB,MAAMH,EAAA;AAAA,IACR;;;aAvDUI,EAAAA,aADRC,EASaC,GAAA;AAAA;QAPV,SAASF,EAAAA;AAAAA,QACT,QAAQG,EAAAA;AAAAA,QACR,WAAWC,EAAAA;AAAAA,MAAAA;mBAEZ,MAEY;AAAA,UAFZC,EAEYC,GAFZC,EAEYC,EAAA,QAFa;AAAA,YAAG,SAASC,EAAAd,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBY,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAd,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBY,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
1
+ {"version":3,"file":"ApiButton.vue_vue_type_script_setup_true_lang-ZLHP9S_H.mjs","sources":["../../src/components/buttons/ApiButton.vue"],"sourcesContent":["<template>\r\n <el-tooltip\r\n v-if=\"tips\"\r\n :content=\"tips\"\r\n :effect=\"tipsType\"\r\n :placement=\"placement\"\r\n >\r\n <el-button v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n </el-tooltip>\r\n <el-button v-else v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdApiButton', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n ...apiProps,\r\n ...buttonTextProp,\r\n ...tipsProp,\r\n /** 按钮级 loading(默认 true);false 时按钮不转圈 */\r\n buttonLoading: { type: Boolean, default: true },\r\n /** 页面级 loading(全局遮罩 ElLoading) */\r\n pageLoading: { type: Boolean, default: false }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'click',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst { loading, doRequest } = useApiAction({\r\n getApi: () => props.api,\r\n getMethod: () => props.apiMethod,\r\n getParam: () => props.apiParam,\r\n getFilter: () => props.filter,\r\n getHeadRefresh: () => props.headRefreshDatagrid,\r\n emit,\r\n buttonLoading: () => props.buttonLoading,\r\n getReqOptions: () => ({ showLoading: props.pageLoading })\r\n})\r\n\r\nasync function onClick(event: MouseEvent) {\r\n emit('click', event)\r\n await doRequest()\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","loading","doRequest","useApiAction","onClick","event","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,UAAMA,IAAQC,GAYRC,IAAOC,GASP,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMN,EAAM;AAAA,MACpB,WAAW,MAAMA,EAAM;AAAA,MACvB,UAAU,MAAMA,EAAM;AAAA,MACtB,WAAW,MAAMA,EAAM;AAAA,MACvB,gBAAgB,MAAMA,EAAM;AAAA,MAC5B,MAAAE;AAAA,MACA,eAAe,MAAMF,EAAM;AAAA,MAC3B,eAAe,OAAO,EAAE,aAAaA,EAAM,YAAA;AAAA,IAAY,CACxD;AAED,mBAAeO,EAAQC,GAAmB;AACxC,MAAAN,EAAK,SAASM,CAAK,GACnB,MAAMH,EAAA;AAAA,IACR;;;aAvDUI,EAAAA,aADRC,EASaC,GAAA;AAAA;QAPV,SAASF,EAAAA;AAAAA,QACT,QAAQG,EAAAA;AAAAA,QACR,WAAWC,EAAAA;AAAAA,MAAAA;mBAEZ,MAEY;AAAA,UAFZC,EAEYC,GAFZC,EAEYC,EAAA,QAFa;AAAA,YAAG,SAASC,EAAAd,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBY,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAd,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBY,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as h, toRefs as S, computed as w, resolveComponent as K, resolveDirective as V, withDirectives as C, openBlock as P, createElementBlock as k, createVNode as x, mergeProps as D, withCtx as _, renderSlot as A, createElementVNode as b, toDisplayString as B, unref as L } from "vue";
2
- import { u as W } from "./useOptionsLoader-D4Jh4f1F.mjs";
2
+ import { u as W } from "./useOptionsLoader-BUO0VTjH.mjs";
3
3
  import { o as E } from "./props-DAytpx7D.mjs";
4
4
  import { _ as M } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
5
5
  const N = { class: "wd-auto-complete" }, O = /* @__PURE__ */ h({
@@ -77,4 +77,4 @@ const N = { class: "wd-auto-complete" }, O = /* @__PURE__ */ h({
77
77
  export {
78
78
  U as W
79
79
  };
80
- //# sourceMappingURL=AutoComplete-DqyhsqiS.mjs.map
80
+ //# sourceMappingURL=AutoComplete-BKWrR5pD.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoComplete-DqyhsqiS.mjs","sources":["../../src/components/inputs/AutoComplete.vue"],"sourcesContent":["<template>\n <div v-loading=\"loading\" class=\"wd-auto-complete\">\n <el-autocomplete\n v-model=\"inner\"\n :fetch-suggestions=\"fetchSuggestions\"\n :value-key=\"labelKey\"\n v-bind=\"$attrs\"\n @select=\"onSelect\"\n @change=\"onChange\"\n >\n <template #default=\"{ item }\">\n <slot :option=\"item.raw\" :text=\"item[valueKey]\" :value=\"item[valueKey]\">\n <span>{{ item[labelKey] }}</span>\n </slot>\n </template>\n </el-autocomplete>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, toRefs, type PropType } from 'vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdAutoComplete', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: String, default: '' },\n /** 选项值字段 */\n valueKey: { type: String, default: 'value' },\n /** 选项显示字段 */\n labelKey: { type: String, default: 'text' },\n keywordKey: { type: String, default: 'keyword' }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'select', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading, remoteSearch, fetchOptions } = useOptionsLoader({\n api: refs.api,\n apiMethod: refs.apiMethod as any,\n apiParam: refs.apiParam,\n active: refs.active,\n dataSource: refs.dataSource as any,\n textProp: refs.textProp,\n valueProp: refs.valueProp,\n addData: refs.addData as any,\n appendData: refs.appendData as any,\n emit\n})\n\nconst inner = computed({\n get: () => props.modelValue,\n set: (val) => emit('update:modelValue', val)\n})\n\n/** el-autocomplete 回调式建议加载 */\nasync function fetchSuggestions(query: string, cb: (results: any[]) => void) {\n if (props.api && props.active) {\n await remoteSearch(query, props.keywordKey)\n } else if (!options.value.length) {\n await fetchOptions()\n }\n // 本地过滤\n const list = options.value.filter((o) =>\n query ? String(o.text).toLowerCase().includes(String(query).toLowerCase()) : true\n )\n cb(list as any)\n}\n\nfunction onSelect(item: any) {\n emit('update:modelValue', item[props.valueKey])\n emit('select', item.raw)\n emit('change', item[props.valueKey])\n}\n\nfunction onChange(val: any) {\n emit('change', val)\n}\n</script>\n\n<style scoped>\n.wd-auto-complete {\n width: 100%;\n}\n.wd-auto-complete :deep(.el-autocomplete) {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","remoteSearch","fetchOptions","useOptionsLoader","inner","computed","val","fetchSuggestions","query","cb","list","o","onSelect","item","onChange","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_el_autocomplete","_mergeProps","$event","$attrs","_withCtx","_renderSlot","_ctx","_createElementVNode","_toDisplayString","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,UAAMA,IAAQC,GAURC,IAAOC,GAEPC,IAAOC,EAAOL,CAAK,GACnB,EAAE,SAAAM,GAAS,SAAAC,GAAS,cAAAC,GAAc,cAAAC,EAAA,IAAiBC,EAAiB;AAAA,MACxE,KAAKN,EAAK;AAAA,MACV,WAAWA,EAAK;AAAA,MAChB,UAAUA,EAAK;AAAA,MACf,QAAQA,EAAK;AAAA,MACb,YAAYA,EAAK;AAAA,MACjB,UAAUA,EAAK;AAAA,MACf,WAAWA,EAAK;AAAA,MAChB,SAASA,EAAK;AAAA,MACd,YAAYA,EAAK;AAAA,MACjB,MAAAF;AAAA,IAAA,CACD,GAEKS,IAAQC,EAAS;AAAA,MACrB,KAAK,MAAMZ,EAAM;AAAA,MACjB,KAAK,CAACa,MAAQX,EAAK,qBAAqBW,CAAG;AAAA,IAAA,CAC5C;AAGD,mBAAeC,EAAiBC,GAAeC,GAA8B;AAC3E,MAAIhB,EAAM,OAAOA,EAAM,SACrB,MAAMQ,EAAaO,GAAOf,EAAM,UAAU,IAChCM,EAAQ,MAAM,UACxB,MAAMG,EAAA;AAGR,YAAMQ,IAAOX,EAAQ,MAAM;AAAA,QAAO,CAACY,MACjCH,IAAQ,OAAOG,EAAE,IAAI,EAAE,YAAA,EAAc,SAAS,OAAOH,CAAK,EAAE,YAAA,CAAa,IAAI;AAAA,MAAA;AAE/E,MAAAC,EAAGC,CAAW;AAAA,IAChB;AAEA,aAASE,EAASC,GAAW;AAC3B,MAAAlB,EAAK,qBAAqBkB,EAAKpB,EAAM,QAAQ,CAAC,GAC9CE,EAAK,UAAUkB,EAAK,GAAG,GACvBlB,EAAK,UAAUkB,EAAKpB,EAAM,QAAQ,CAAC;AAAA,IACrC;AAEA,aAASqB,EAASR,GAAU;AAC1B,MAAAX,EAAK,UAAUW,CAAG;AAAA,IACpB;;;AA9EE,aAAAS,GAAAC,EAAA,GAAAC,EAeM,OAfNC,GAeM;AAAA,QAdJC,EAakBC,GAblBC,EAakB;AAAA,sBAZPjB,EAAA;AAAA,wDAAAA,EAAK,QAAAkB;AAAA,UACb,qBAAmBf;AAAA,UACnB,aAAWb,EAAA;AAAA,QAAA,GACJ6B,EAAAA,QAAM;AAAA,UACb,UAAAX;AAAA,UACA,UAAAE;AAAA,QAAA;UAEU,SAAOU,EAChB,CAEO,EAHa,MAAAX,QAAI;AAAA,YACxBY,EAEOC,EAAA,QAAA,WAAA;AAAA,cAFA,QAAQb,EAAK;AAAA,cAAM,MAAMA,EAAKnB,EAAA,QAAQ;AAAA,cAAI,OAAOmB,EAAKnB,EAAA,QAAQ;AAAA,YAAA,GAArE,MAEO;AAAA,cADLiC,EAAiC,QAAA,MAAAC,EAAxBf,EAAKnB,EAAA,QAAQ,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;YAXdmC,EAAA7B,CAAA,CAAO;AAAA,MAAA;;;;"}
1
+ {"version":3,"file":"AutoComplete-BKWrR5pD.mjs","sources":["../../src/components/inputs/AutoComplete.vue"],"sourcesContent":["<template>\n <div v-loading=\"loading\" class=\"wd-auto-complete\">\n <el-autocomplete\n v-model=\"inner\"\n :fetch-suggestions=\"fetchSuggestions\"\n :value-key=\"labelKey\"\n v-bind=\"$attrs\"\n @select=\"onSelect\"\n @change=\"onChange\"\n >\n <template #default=\"{ item }\">\n <slot :option=\"item.raw\" :text=\"item[valueKey]\" :value=\"item[valueKey]\">\n <span>{{ item[labelKey] }}</span>\n </slot>\n </template>\n </el-autocomplete>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref, toRefs, type PropType } from 'vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdAutoComplete', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: String, default: '' },\n /** 选项值字段 */\n valueKey: { type: String, default: 'value' },\n /** 选项显示字段 */\n labelKey: { type: String, default: 'text' },\n keywordKey: { type: String, default: 'keyword' }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'select', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading, remoteSearch, fetchOptions } = useOptionsLoader({\n api: refs.api,\n apiMethod: refs.apiMethod as any,\n apiParam: refs.apiParam,\n active: refs.active,\n dataSource: refs.dataSource as any,\n textProp: refs.textProp,\n valueProp: refs.valueProp,\n addData: refs.addData as any,\n appendData: refs.appendData as any,\n emit\n})\n\nconst inner = computed({\n get: () => props.modelValue,\n set: (val) => emit('update:modelValue', val)\n})\n\n/** el-autocomplete 回调式建议加载 */\nasync function fetchSuggestions(query: string, cb: (results: any[]) => void) {\n if (props.api && props.active) {\n await remoteSearch(query, props.keywordKey)\n } else if (!options.value.length) {\n await fetchOptions()\n }\n // 本地过滤\n const list = options.value.filter((o) =>\n query ? String(o.text).toLowerCase().includes(String(query).toLowerCase()) : true\n )\n cb(list as any)\n}\n\nfunction onSelect(item: any) {\n emit('update:modelValue', item[props.valueKey])\n emit('select', item.raw)\n emit('change', item[props.valueKey])\n}\n\nfunction onChange(val: any) {\n emit('change', val)\n}\n</script>\n\n<style scoped>\n.wd-auto-complete {\n width: 100%;\n}\n.wd-auto-complete :deep(.el-autocomplete) {\n width: 100%;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","remoteSearch","fetchOptions","useOptionsLoader","inner","computed","val","fetchSuggestions","query","cb","list","o","onSelect","item","onChange","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_el_autocomplete","_mergeProps","$event","$attrs","_withCtx","_renderSlot","_ctx","_createElementVNode","_toDisplayString","_unref"],"mappings":";;;;;;;;;;;;;;;;;;;AA0BA,UAAMA,IAAQC,GAURC,IAAOC,GAEPC,IAAOC,EAAOL,CAAK,GACnB,EAAE,SAAAM,GAAS,SAAAC,GAAS,cAAAC,GAAc,cAAAC,EAAA,IAAiBC,EAAiB;AAAA,MACxE,KAAKN,EAAK;AAAA,MACV,WAAWA,EAAK;AAAA,MAChB,UAAUA,EAAK;AAAA,MACf,QAAQA,EAAK;AAAA,MACb,YAAYA,EAAK;AAAA,MACjB,UAAUA,EAAK;AAAA,MACf,WAAWA,EAAK;AAAA,MAChB,SAASA,EAAK;AAAA,MACd,YAAYA,EAAK;AAAA,MACjB,MAAAF;AAAA,IAAA,CACD,GAEKS,IAAQC,EAAS;AAAA,MACrB,KAAK,MAAMZ,EAAM;AAAA,MACjB,KAAK,CAACa,MAAQX,EAAK,qBAAqBW,CAAG;AAAA,IAAA,CAC5C;AAGD,mBAAeC,EAAiBC,GAAeC,GAA8B;AAC3E,MAAIhB,EAAM,OAAOA,EAAM,SACrB,MAAMQ,EAAaO,GAAOf,EAAM,UAAU,IAChCM,EAAQ,MAAM,UACxB,MAAMG,EAAA;AAGR,YAAMQ,IAAOX,EAAQ,MAAM;AAAA,QAAO,CAACY,MACjCH,IAAQ,OAAOG,EAAE,IAAI,EAAE,YAAA,EAAc,SAAS,OAAOH,CAAK,EAAE,YAAA,CAAa,IAAI;AAAA,MAAA;AAE/E,MAAAC,EAAGC,CAAW;AAAA,IAChB;AAEA,aAASE,EAASC,GAAW;AAC3B,MAAAlB,EAAK,qBAAqBkB,EAAKpB,EAAM,QAAQ,CAAC,GAC9CE,EAAK,UAAUkB,EAAK,GAAG,GACvBlB,EAAK,UAAUkB,EAAKpB,EAAM,QAAQ,CAAC;AAAA,IACrC;AAEA,aAASqB,EAASR,GAAU;AAC1B,MAAAX,EAAK,UAAUW,CAAG;AAAA,IACpB;;;AA9EE,aAAAS,GAAAC,EAAA,GAAAC,EAeM,OAfNC,GAeM;AAAA,QAdJC,EAakBC,GAblBC,EAakB;AAAA,sBAZPjB,EAAA;AAAA,wDAAAA,EAAK,QAAAkB;AAAA,UACb,qBAAmBf;AAAA,UACnB,aAAWb,EAAA;AAAA,QAAA,GACJ6B,EAAAA,QAAM;AAAA,UACb,UAAAX;AAAA,UACA,UAAAE;AAAA,QAAA;UAEU,SAAOU,EAChB,CAEO,EAHa,MAAAX,QAAI;AAAA,YACxBY,EAEOC,EAAA,QAAA,WAAA;AAAA,cAFA,QAAQb,EAAK;AAAA,cAAM,MAAMA,EAAKnB,EAAA,QAAQ;AAAA,cAAI,OAAOmB,EAAKnB,EAAA,QAAQ;AAAA,YAAA,GAArE,MAEO;AAAA,cADLiC,EAAiC,QAAA,MAAAC,EAAxBf,EAAKnB,EAAA,QAAQ,CAAA,GAAA,CAAA;AAAA,YAAA;;;;;YAXdmC,EAAA7B,CAAA,CAAO;AAAA,MAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as D, toRefs as B, computed as L, resolveComponent as s, resolveDirective as $, withDirectives as A, openBlock as o, createBlock as n, mergeProps as W, withCtx as l, createElementBlock as _, Fragment as x, renderList as E, unref as h, createElementVNode as k, renderSlot as r, createTextVNode as i, toDisplayString as u } from "vue";
2
- import { u as F } from "./useOptionsLoader-D4Jh4f1F.mjs";
2
+ import { u as F } from "./useOptionsLoader-BUO0VTjH.mjs";
3
3
  import { o as M } from "./props-DAytpx7D.mjs";
4
4
  import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
5
5
  const I = { class: "wd-option-text" }, O = { class: "wd-option-text" }, R = /* @__PURE__ */ D({
@@ -126,4 +126,4 @@ const I = { class: "wd-option-text" }, O = { class: "wd-option-text" }, R = /* @
126
126
  export {
127
127
  z as W
128
128
  };
129
- //# sourceMappingURL=CheckboxList-RxJGe-LQ.mjs.map
129
+ //# sourceMappingURL=CheckboxList-5o9E0Tzg.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxList-RxJGe-LQ.mjs","sources":["../../src/components/inputs/CheckboxList.vue"],"sourcesContent":["<template>\n <el-checkbox-group\n v-model=\"inner\"\n v-loading=\"loading\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n >\n <template v-for=\"opt in options\" :key=\"String(opt.value)\">\n <el-checkbox-button v-if=\"buttonStyle\" :value=\"opt.value\">\n <el-tooltip\n v-if=\"opt.tips\"\n :content=\"opt.tips\"\n placement=\"top\"\n effect=\"dark\"\n :show-after=\"200\"\n >\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </span>\n </el-tooltip>\n <slot v-else :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </el-checkbox-button>\n <el-checkbox v-else :value=\"opt.value\">\n <el-tooltip\n v-if=\"opt.tips\"\n :content=\"opt.tips\"\n placement=\"top\"\n effect=\"dark\"\n :show-after=\"200\"\n >\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </span>\n </el-tooltip>\n <slot v-else :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </el-checkbox>\n </template>\n </el-checkbox-group>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, type PropType } from 'vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdCheckboxList', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: Array as PropType<any[]>, default: () => [] },\n /** 按钮样式 */\n buttonStyle: { type: Boolean, default: false }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading } = useOptionsLoader({\n api: refs.api,\n apiMethod: refs.apiMethod as any,\n apiParam: refs.apiParam,\n active: refs.active,\n dataSource: refs.dataSource as any,\n textProp: refs.textProp,\n valueProp: refs.valueProp,\n tipsProp: refs.tipsProp,\n addData: refs.addData as any,\n appendData: refs.appendData as any,\n emit\n})\n\nconst inner = computed({\n get: () => props.modelValue,\n set: (val) => emit('update:modelValue', val)\n})\n\nfunction onChange(val: any) {\n emit('change', val)\n}\n</script>\n\n<style scoped>\n.wd-option-text {\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","useOptionsLoader","inner","computed","val","onChange","_withDirectives","_openBlock","_createBlock","_component_el_checkbox_group","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_checkbox_button","_component_el_tooltip","_createElementVNode","_hoisted_1","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_checkbox","_hoisted_2"],"mappings":"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"}
1
+ {"version":3,"file":"CheckboxList-5o9E0Tzg.mjs","sources":["../../src/components/inputs/CheckboxList.vue"],"sourcesContent":["<template>\n <el-checkbox-group\n v-model=\"inner\"\n v-loading=\"loading\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n >\n <template v-for=\"opt in options\" :key=\"String(opt.value)\">\n <el-checkbox-button v-if=\"buttonStyle\" :value=\"opt.value\">\n <el-tooltip\n v-if=\"opt.tips\"\n :content=\"opt.tips\"\n placement=\"top\"\n effect=\"dark\"\n :show-after=\"200\"\n >\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </span>\n </el-tooltip>\n <slot v-else :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </el-checkbox-button>\n <el-checkbox v-else :value=\"opt.value\">\n <el-tooltip\n v-if=\"opt.tips\"\n :content=\"opt.tips\"\n placement=\"top\"\n effect=\"dark\"\n :show-after=\"200\"\n >\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </span>\n </el-tooltip>\n <slot v-else :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">{{ opt.text }}</slot>\n </el-checkbox>\n </template>\n </el-checkbox-group>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, type PropType } from 'vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdCheckboxList', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: Array as PropType<any[]>, default: () => [] },\n /** 按钮样式 */\n buttonStyle: { type: Boolean, default: false }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading } = useOptionsLoader({\n api: refs.api,\n apiMethod: refs.apiMethod as any,\n apiParam: refs.apiParam,\n active: refs.active,\n dataSource: refs.dataSource as any,\n textProp: refs.textProp,\n valueProp: refs.valueProp,\n tipsProp: refs.tipsProp,\n addData: refs.addData as any,\n appendData: refs.appendData as any,\n emit\n})\n\nconst inner = computed({\n get: () => props.modelValue,\n set: (val) => emit('update:modelValue', val)\n})\n\nfunction onChange(val: any) {\n emit('change', val)\n}\n</script>\n\n<style scoped>\n.wd-option-text {\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","useOptionsLoader","inner","computed","val","onChange","_withDirectives","_openBlock","_createBlock","_component_el_checkbox_group","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_checkbox_button","_component_el_tooltip","_createElementVNode","_hoisted_1","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_checkbox","_hoisted_2"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as B, resolveComponent as l, openBlock as p, createBlock as s, withCtx as a, createVNode as b, mergeProps as c, unref as f, renderSlot as d, createTextVNode as m, toDisplayString as u } from "vue";
2
2
  import { ElMessageBox as P } from "element-plus";
3
- import { u as k } from "./useApiAction-71XPKjlQ.mjs";
3
+ import { u as k } from "./useApiAction-CQVmN1MH.mjs";
4
4
  import { t as C, b as L, a as S, h as _, f as w } from "./props-DAytpx7D.mjs";
5
5
  const M = /* @__PURE__ */ B({
6
6
  name: "WdConfirmButton",
@@ -96,4 +96,4 @@ const M = /* @__PURE__ */ B({
96
96
  export {
97
97
  M as _
98
98
  };
99
- //# sourceMappingURL=ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs.map
99
+ //# sourceMappingURL=ConfirmButton.vue_vue_type_script_setup_true_lang-Cz1M6QsL.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs","sources":["../../src/components/buttons/ConfirmButton.vue"],"sourcesContent":["<template>\r\n <el-tooltip\r\n v-if=\"tips\"\r\n :content=\"tips\"\r\n :effect=\"tipsType\"\r\n :placement=\"placement\"\r\n >\r\n <el-button v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n </el-tooltip>\r\n <el-button v-else v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ElMessageBox } from 'element-plus'\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdConfirmButton', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n ...apiProps,\r\n ...buttonTextProp,\r\n ...tipsProp,\r\n /** 确认文案 */\r\n confirmText: { type: String, default: '确认执行该操作?' },\r\n /** 取消按钮文案(空则不显示取消按钮) */\r\n cancelText: { type: String, default: '取消' },\r\n /** 确认框标题 */\r\n confirmTitle: { type: String, default: '提示' },\r\n /** 按钮级 loading */\r\n buttonLoading: { type: Boolean, default: true },\r\n pageLoading: { type: Boolean, default: false }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'click',\r\n 'confirm',\r\n 'cancel',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst { loading, doRequest } = useApiAction({\r\n getApi: () => props.api,\r\n getMethod: () => props.apiMethod,\r\n getParam: () => props.apiParam,\r\n getFilter: () => props.filter,\r\n getHeadRefresh: () => props.headRefreshDatagrid,\r\n emit,\r\n buttonLoading: () => props.buttonLoading,\r\n getReqOptions: () => ({ showLoading: props.pageLoading })\r\n})\r\n\r\nasync function onClick(event: MouseEvent) {\r\n emit('click', event)\r\n try {\r\n await ElMessageBox.confirm(props.confirmText, props.confirmTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: props.cancelText,\r\n type: 'warning'\r\n })\r\n } catch {\r\n emit('cancel')\r\n return\r\n }\r\n emit('confirm')\r\n await doRequest()\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","loading","doRequest","useApiAction","onClick","event","ElMessageBox","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GAiBRC,IAAOC,GAWP,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMN,EAAM;AAAA,MACpB,WAAW,MAAMA,EAAM;AAAA,MACvB,UAAU,MAAMA,EAAM;AAAA,MACtB,WAAW,MAAMA,EAAM;AAAA,MACvB,gBAAgB,MAAMA,EAAM;AAAA,MAC5B,MAAAE;AAAA,MACA,eAAe,MAAMF,EAAM;AAAA,MAC3B,eAAe,OAAO,EAAE,aAAaA,EAAM,YAAA;AAAA,IAAY,CACxD;AAED,mBAAeO,EAAQC,GAAmB;AACxC,MAAAN,EAAK,SAASM,CAAK;AACnB,UAAI;AACF,cAAMC,EAAa,QAAQT,EAAM,aAAaA,EAAM,cAAc;AAAA,UAChE,mBAAmB;AAAA,UACnB,kBAAkBA,EAAM;AAAA,UACxB,MAAM;AAAA,QAAA,CACP;AAAA,MACH,QAAQ;AACN,QAAAE,EAAK,QAAQ;AACb;AAAA,MACF;AACA,MAAAA,EAAK,SAAS,GACd,MAAMG,EAAA;AAAA,IACR;;;aA1EUK,EAAAA,aADRC,EASaC,GAAA;AAAA;QAPV,SAASF,EAAAA;AAAAA,QACT,QAAQG,EAAAA;AAAAA,QACR,WAAWC,EAAAA;AAAAA,MAAAA;mBAEZ,MAEY;AAAA,UAFZC,EAEYC,GAFZC,EAEYC,EAAA,QAFa;AAAA,YAAG,SAASC,EAAAf,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBa,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAf,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBa,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
1
+ {"version":3,"file":"ConfirmButton.vue_vue_type_script_setup_true_lang-Cz1M6QsL.mjs","sources":["../../src/components/buttons/ConfirmButton.vue"],"sourcesContent":["<template>\r\n <el-tooltip\r\n v-if=\"tips\"\r\n :content=\"tips\"\r\n :effect=\"tipsType\"\r\n :placement=\"placement\"\r\n >\r\n <el-button v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n </el-tooltip>\r\n <el-button v-else v-bind=\"$attrs\" :loading=\"loading\" @click=\"onClick\">\r\n <slot>{{ label }}</slot>\r\n </el-button>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ElMessageBox } from 'element-plus'\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdConfirmButton', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n ...apiProps,\r\n ...buttonTextProp,\r\n ...tipsProp,\r\n /** 确认文案 */\r\n confirmText: { type: String, default: '确认执行该操作?' },\r\n /** 取消按钮文案(空则不显示取消按钮) */\r\n cancelText: { type: String, default: '取消' },\r\n /** 确认框标题 */\r\n confirmTitle: { type: String, default: '提示' },\r\n /** 按钮级 loading */\r\n buttonLoading: { type: Boolean, default: true },\r\n pageLoading: { type: Boolean, default: false }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'click',\r\n 'confirm',\r\n 'cancel',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst { loading, doRequest } = useApiAction({\r\n getApi: () => props.api,\r\n getMethod: () => props.apiMethod,\r\n getParam: () => props.apiParam,\r\n getFilter: () => props.filter,\r\n getHeadRefresh: () => props.headRefreshDatagrid,\r\n emit,\r\n buttonLoading: () => props.buttonLoading,\r\n getReqOptions: () => ({ showLoading: props.pageLoading })\r\n})\r\n\r\nasync function onClick(event: MouseEvent) {\r\n emit('click', event)\r\n try {\r\n await ElMessageBox.confirm(props.confirmText, props.confirmTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: props.cancelText,\r\n type: 'warning'\r\n })\r\n } catch {\r\n emit('cancel')\r\n return\r\n }\r\n emit('confirm')\r\n await doRequest()\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","loading","doRequest","useApiAction","onClick","event","ElMessageBox","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GAiBRC,IAAOC,GAWP,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMN,EAAM;AAAA,MACpB,WAAW,MAAMA,EAAM;AAAA,MACvB,UAAU,MAAMA,EAAM;AAAA,MACtB,WAAW,MAAMA,EAAM;AAAA,MACvB,gBAAgB,MAAMA,EAAM;AAAA,MAC5B,MAAAE;AAAA,MACA,eAAe,MAAMF,EAAM;AAAA,MAC3B,eAAe,OAAO,EAAE,aAAaA,EAAM,YAAA;AAAA,IAAY,CACxD;AAED,mBAAeO,EAAQC,GAAmB;AACxC,MAAAN,EAAK,SAASM,CAAK;AACnB,UAAI;AACF,cAAMC,EAAa,QAAQT,EAAM,aAAaA,EAAM,cAAc;AAAA,UAChE,mBAAmB;AAAA,UACnB,kBAAkBA,EAAM;AAAA,UACxB,MAAM;AAAA,QAAA,CACP;AAAA,MACH,QAAQ;AACN,QAAAE,EAAK,QAAQ;AACb;AAAA,MACF;AACA,MAAAA,EAAK,SAAS,GACd,MAAMG,EAAA;AAAA,IACR;;;aA1EUK,EAAAA,aADRC,EASaC,GAAA;AAAA;QAPV,SAASF,EAAAA;AAAAA,QACT,QAAQG,EAAAA;AAAAA,QACR,WAAWC,EAAAA;AAAAA,MAAAA;mBAEZ,MAEY;AAAA,UAFZC,EAEYC,GAFZC,EAEYC,EAAA,QAFa;AAAA,YAAG,SAASC,EAAAf,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBa,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAf,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBa,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { defineComponent as z, ref as F, reactive as Q, computed as b, getCurrentInstance as X, provide as Y, watch as Z, onMounted as ee, onBeforeUnmount as te, resolveComponent as L, resolveDirective as ae, openBlock as w, createElementBlock as V, withDirectives as oe, createBlock as A, mergeProps as re, withModifiers as ie, withCtx as S, renderSlot as W, createTextVNode as O, toDisplayString as T, createCommentVNode as M, createVNode as le } from "vue";
2
2
  import { ElMessageBox as _, ElMessage as ne } from "element-plus";
3
- import { r as N } from "./http-BKKP0gEJ.mjs";
3
+ import { r as N } from "./http-CW9konD4.mjs";
4
4
  import { r as se } from "./linkage-FbL1mcz3.mjs";
5
- import { d as ue } from "./config-B6nWG5dv.mjs";
5
+ import { d as ue } from "./config-CDqjABpD.mjs";
6
6
  import { u as fe } from "./containerContext-BgphFDeH.mjs";
7
7
  import { _ as ce } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
8
8
  const de = { class: "wd-data-form" }, me = {
@@ -303,4 +303,4 @@ const de = { class: "wd-data-form" }, me = {
303
303
  export {
304
304
  Ce as W
305
305
  };
306
- //# sourceMappingURL=DataForm-DYMderSS.mjs.map
306
+ //# sourceMappingURL=DataForm-Dvx6GxlR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DataForm-DYMderSS.mjs","sources":["../../src/components/form/data-form/DataForm.vue"],"sourcesContent":["<template>\r\n <div class=\"wd-data-form\">\r\n <el-form\r\n ref=\"formRef\"\r\n v-loading=\"loading\"\r\n :model=\"formModel\"\r\n :rules=\"rules\"\r\n :label-width=\"labelWidth\"\r\n :label-position=\"labelPosition\"\r\n :inline=\"inline\"\r\n :disabled=\"loading\"\r\n v-bind=\"$attrs\"\r\n @submit.prevent\r\n >\r\n <slot :model=\"formModel\" :form=\"formRef\" />\r\n\r\n <!-- 底部操作区 -->\r\n <div v-if=\"withActions\" class=\"wd-data-form__footer\">\r\n <slot name=\"footer\" :submit=\"submitForm\" :reset=\"resetForm\" :loading=\"loading\">\r\n <!-- 关闭 / 保存并继续:仅在容器(drawer/dialog)或 iframe 内显示,独立使用时隐藏 -->\r\n <el-button v-if=\"inHost\" @click=\"onClose\">{{ closeText }}</el-button>\r\n <el-button v-if=\"actionConf.showReset\" @click=\"resetForm\">{{ actionConf.resetText }}</el-button>\r\n <el-button\r\n v-if=\"inHost && isCreate && keepFormButton && actionConf.showContinue\"\r\n :loading=\"loading\"\r\n @click=\"submitForm(true)\"\r\n >\r\n {{ actionConf.continueText }}\r\n </el-button>\r\n <el-button type=\"primary\" :loading=\"loading\" @click=\"submitForm(false)\">\r\n {{ actionConf.submitText }}\r\n </el-button>\r\n </slot>\r\n </div>\r\n </el-form>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, reactive, computed, onMounted, onBeforeUnmount, watch, provide, inject, getCurrentInstance, type PropType } from 'vue'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { request } from '../../../lib/core/http'\r\nimport { refreshDataGrid } from '../../../lib/core/linkage'\r\nimport { deepMerge } from '../../../lib/core/utils'\r\nimport { useContainer } from '../../containers/containerContext'\r\n\r\ndefineOptions({ name: 'WdDataForm', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n /** 模式:create 新增 / edit 编辑 */\r\n mode: { type: String as PropType<'create' | 'edit'>, default: 'create' },\r\n /** 详情数据接口(edit 模式回填) */\r\n api: { type: String, default: '' },\r\n apiMethod: { type: String as PropType<'get' | 'post'>, default: 'get' },\r\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\r\n /** 提交接口 */\r\n submitApi: { type: String, default: '' },\r\n submitMethod: { type: String as PropType<'post' | 'put'>, default: 'post' },\r\n /** 提交字段白名单 */\r\n submitKeys: { type: [String, Array] as PropType<string | string[]>, default: undefined },\r\n /** 提交字段黑名单 */\r\n submitExcludeKeys: { type: [String, Array] as PropType<string | string[]>, default: undefined },\r\n /** 是否自动请求详情 */\r\n active: { type: Boolean, default: false },\r\n /** 有未保存修改时离开确认 */\r\n confirmLeave: { type: Boolean, default: true },\r\n /** 是否显示底部操作按钮区 */\r\n withActions: { type: Boolean, default: true },\r\n /** 底部按钮文案配置 */\r\n actionConfig: {\r\n type: Object as PropType<{\r\n resetText?: string\r\n submitText?: string\r\n continueText?: string\r\n closeText?: string\r\n showReset?: boolean\r\n showContinue?: boolean\r\n }>,\r\n default: () => ({})\r\n },\r\n /** 提交后关闭抽屉 */\r\n headCloseDrawer: { type: [Boolean, String], default: true },\r\n /** 提交后刷新表格 */\r\n headRefreshDatagrid: { type: [Boolean, String], default: false },\r\n /** 显示连续操作按钮 */\r\n keepFormButton: { type: Boolean, default: true },\r\n /** 表单规则(透传 el-form rules) */\r\n rules: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\r\n labelWidth: { type: [String, Number], default: '100px' },\r\n labelPosition: { type: String as PropType<'left' | 'right' | 'top'>, default: 'right' },\r\n inline: { type: Boolean, default: false },\r\n /** 联动分组 */\r\n filter: { type: String, default: '' },\r\n /** 外部传入的初始数据(DrawerButton data 等) */\r\n data: { type: Object as PropType<Record<string, any>>, default: undefined }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'submit-success',\r\n 'submit-fail',\r\n 'load-success',\r\n 'change',\r\n 'close',\r\n 'apiBefore',\r\n 'apiAfter'\r\n])\r\n\r\nconst formRef = ref<any>(null)\r\nconst loading = ref(false)\r\nconst formModel = reactive<Record<string, any>>({})\r\n/** 初始快照,用于修改检测与 edit 重置 */\r\nconst snapshot = ref<Record<string, any>>({})\r\n\r\nconst isCreate = computed(() => props.mode !== 'edit')\r\n\r\nconst actionConf = computed(() =>\r\n deepMerge(\r\n {\r\n resetText: '重置',\r\n submitText: '保存',\r\n continueText: '保存并继续',\r\n closeText: '关闭',\r\n showReset: true,\r\n showContinue: true\r\n },\r\n props.actionConfig || {}\r\n )\r\n)\r\n\r\nconst closeText = computed(() => actionConf.value.closeText)\r\n\r\n// 通过 provide 向子组件暴露 model;HTML 场景下插槽 v-model=\"model.xxx\"\r\n// 运行于根组件模板作用域,故同时把 model 挂到 app.config.globalProperties\r\n// (根实例 proxy 查找 setupState/data 之后回退 globalProperties)\r\nconst instance = getCurrentInstance()\r\nprovide('wdDataForm', {\r\n model: formModel,\r\n formRef\r\n})\r\n\r\n/** 回填数据到表单 */\r\nfunction fillForm(data: Record<string, any> | null | undefined) {\r\n // 清空旧值\r\n Object.keys(formModel).forEach((k) => delete formModel[k])\r\n if (data && typeof data === 'object') {\r\n Object.assign(formModel, JSON.parse(JSON.stringify(data)))\r\n }\r\n snapshot.value = JSON.parse(JSON.stringify(formModel))\r\n}\r\n\r\n/** 请求详情并回填 */\r\nasync function requestApi(options?: { apiParam?: Record<string, any> }) {\r\n if (!props.api) {\r\n fillForm(props.data || {})\r\n return\r\n }\r\n loading.value = true\r\n emit('apiBefore', { type: 'load' })\r\n try {\r\n const param = { ...props.apiParam, ...(options?.apiParam || {}) }\r\n const result =\r\n props.apiMethod === 'get'\r\n ? await request.get(props.api, param)\r\n : await request.post(props.api, param)\r\n if (result.success) {\r\n fillForm(result.data || {})\r\n emit('load-success', result.data)\r\n }\r\n } finally {\r\n loading.value = false\r\n emit('apiAfter', { type: 'load' })\r\n }\r\n}\r\n\r\n/** 取当前表单值 */\r\nfunction getFormData() {\r\n return { ...formModel }\r\n}\r\n\r\n/** 按白/黑名单过滤提交字段 */\r\nfunction pickSubmitData() {\r\n const data = getFormData()\r\n const toArr = (v: string | string[] | undefined) =>\r\n v == null ? null : Array.isArray(v) ? v : String(v).split(',').map((s) => s.trim()).filter(Boolean)\r\n\r\n const whitelist = toArr(props.submitKeys)\r\n const blacklist = toArr(props.submitExcludeKeys)\r\n\r\n let result = data\r\n if (whitelist) {\r\n result = whitelist.reduce((acc: Record<string, any>, key) => {\r\n acc[key] = data[key]\r\n return acc\r\n }, {})\r\n }\r\n if (blacklist) {\r\n result = Object.keys(result).reduce((acc: Record<string, any>, key) => {\r\n if (!blacklist.includes(key)) acc[key] = result[key]\r\n return acc\r\n }, {})\r\n }\r\n return result\r\n}\r\n\r\n/** 手动校验 */\r\nasync function validate(): Promise<boolean> {\r\n if (!formRef.value) return true\r\n try {\r\n await formRef.value.validate()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/** 提交 */\r\nasync function submitForm(continueNext = false) {\r\n const ok = await validate()\r\n if (!ok) {\r\n ElMessage.warning('请完善表单必填项')\r\n return\r\n }\r\n if (!props.submitApi) {\r\n // 无提交接口:仅抛出事件,交给父组件处理\r\n emit('submit-success', getFormData())\r\n afterSubmitSuccess(getFormData(), continueNext)\r\n return\r\n }\r\n\r\n loading.value = true\r\n emit('apiBefore', { type: 'submit' })\r\n try {\r\n const submitData = pickSubmitData()\r\n const result =\r\n props.submitMethod === 'put'\r\n ? await request.put(props.submitApi, submitData)\r\n : await request.post(props.submitApi, submitData)\r\n\r\n if (result.success) {\r\n emit('submit-success', result.data)\r\n afterSubmitSuccess(result.data, continueNext)\r\n } else {\r\n emit('submit-fail', result)\r\n }\r\n } finally {\r\n loading.value = false\r\n emit('apiAfter', { type: 'submit' })\r\n }\r\n}\r\n\r\n/** 提交成功后的联动处理 */\r\nfunction afterSubmitSuccess(data: any, continueNext: boolean) {\r\n // 1. 刷新目标 DataGrid(声明式联动)\r\n if (props.headRefreshDatagrid) {\r\n refreshDataGrid(props.headRefreshDatagrid, props.filter)\r\n }\r\n // 2. 关闭抽屉 / 连续操作\r\n if (continueNext && isCreate.value) {\r\n // 保存并继续:清空表单继续新增,不关闭\r\n resetForm(true)\r\n } else if (props.headCloseDrawer) {\r\n // 容器内:请求容器关闭(提交成功不再做离开确认);独立使用:emit close\r\n if (container?.requestClose) {\r\n container.requestClose('submit')\r\n } else {\r\n emit('close', { reason: 'submit' })\r\n }\r\n }\r\n // 更新快照\r\n snapshot.value = JSON.parse(JSON.stringify(formModel))\r\n}\r\n\r\n/** 重置:create 清空 / edit 回填原值 */\r\nfunction resetForm(clearOnly = false) {\r\n if (isCreate.value || clearOnly) {\r\n Object.keys(formModel).forEach((k) => delete formModel[k])\r\n formRef.value?.clearValidate?.()\r\n } else {\r\n fillForm(snapshot.value)\r\n formRef.value?.clearValidate?.()\r\n }\r\n}\r\n\r\n/** 是否有未保存修改 */\r\nfunction isDirty(): boolean {\r\n return JSON.stringify(formModel) !== JSON.stringify(snapshot.value)\r\n}\r\n\r\n/** 关闭(底部关闭按钮) */\r\nfunction onClose() {\r\n if (container?.requestClose) {\r\n // 容器内:交给容器走关闭流程(容器统一执行未保存确认,避免重复弹窗)\r\n container.requestClose('manual')\r\n return\r\n }\r\n // iframe 场景:通知父容器(wd-drawer url 模式 / wd-iframe 承载)请求关闭\r\n if (inIframe.value) {\r\n window.parent?.postMessage({ type: 'wd-container:close' }, '*')\r\n return\r\n }\r\n // 独立使用:自行确认\r\n if (props.confirmLeave && isDirty()) {\r\n ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n .then(() => emit('close', { reason: 'manual' }))\r\n .catch(() => {})\r\n return\r\n }\r\n emit('close', { reason: 'manual' })\r\n}\r\n\r\n/** 供父组件/抽屉调用的离开检查 */\r\nasync function beforeLeave(): Promise<boolean> {\r\n if (!props.confirmLeave || !isDirty()) return true\r\n try {\r\n await ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n// 表单变化事件(修改检测)\r\nwatch(\r\n formModel,\r\n () => {\r\n emit('change', getFormData())\r\n },\r\n { deep: true }\r\n)\r\n\r\n// 容器上下文(被 wd-drawer 承载时存在,mode=dialog 同为该组件)\r\nconst container = useContainer()\r\nlet removeBeforeClose: (() => void) | null = null\r\n// 容器携带的数据(DrawerButton data),props.data 优先\r\nconst containerData = computed(() => props.data || container?.data)\r\n\r\n// 是否处于 iframe 子页面(被 wd-drawer url 模式 / wd-iframe 承载;跨域访问 window.top 会抛错,视为 iframe)\r\nconst inIframe = computed(() => {\r\n if (typeof window === 'undefined') return false\r\n try {\r\n return window.self !== window.top\r\n } catch {\r\n return true\r\n }\r\n})\r\n// 是否处于宿主环境(drawer/dialog 容器 或 iframe)——决定底部「关闭」「保存并继续」按钮是否显示\r\nconst inHost = computed(() => !!container || inIframe.value)\r\n\r\n// 同步数据预填(首次渲染前):props.data / 容器 data 在 setup 阶段已可用,\r\n// 提前回填可避免插槽内 el-switch / el-radio 等控件首帧绑定 undefined 触发 EP 校验警告;\r\n// api 异步详情仍在 onMounted 中拉取并覆盖\r\nif (containerData.value) {\r\n fillForm(containerData.value)\r\n}\r\n\r\nonMounted(() => {\r\n // HTML 场景:把 model 暴露给根模板作用域(v-model=\"model.xxx\")\r\n const appContext = instance?.appContext\r\n if (appContext) {\r\n appContext.config.globalProperties.model = formModel\r\n const rootProxy = appContext.app?.config?.globalProperties\r\n if (rootProxy) rootProxy.model = formModel\r\n }\r\n\r\n // 注册关闭前守卫:容器关闭时先做未保存确认(确认逻辑只走这一处,避免重复弹窗)\r\n if (container?.addBeforeClose) {\r\n removeBeforeClose = container.addBeforeClose(async () => {\r\n if (!props.confirmLeave || !isDirty()) return true\r\n try {\r\n await ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n return true\r\n } catch {\r\n return false\r\n }\r\n })\r\n }\r\n\r\n if (props.mode === 'edit') {\r\n if (containerData.value) {\r\n fillForm(containerData.value)\r\n }\r\n if (props.active && props.api) {\r\n requestApi()\r\n }\r\n } else if (containerData.value) {\r\n fillForm(containerData.value)\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n removeBeforeClose?.()\r\n // 清理全局 model(仅当仍指向本实例时)\r\n const appContext = instance?.appContext\r\n if (appContext?.config?.globalProperties?.model === formModel) {\r\n delete appContext.config.globalProperties.model\r\n }\r\n})\r\n\r\ndefineExpose({\r\n requestApi,\r\n submitForm,\r\n resetForm,\r\n validate,\r\n getFormData,\r\n isDirty,\r\n beforeLeave,\r\n fillForm,\r\n formRef\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.wd-data-form {\r\n width: 100%;\r\n}\r\n.wd-data-form__footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n gap: 8px;\r\n /* 组件级令牌:皮肤可给表单 footer 加底色 / 内边距 / 圆角;\r\n 默认仅顶部留白(按钮与表单右缘对齐),皮肤给底色时应同步给 padding/radius 避免按钮贴边 */\r\n padding: var(--wd-form-footer-padding, 12px 0 0);\r\n border-top: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #e4e7ed);\r\n margin-top: var(--wd-spacing-base, 12px);\r\n border-radius: var(--wd-form-footer-radius, 0);\r\n background: var(--wd-form-footer-bg, transparent);\r\n}\r\n</style>\r\n"],"names":["props","__props","emit","__emit","formRef","ref","loading","formModel","reactive","snapshot","isCreate","computed","actionConf","deepMerge","closeText","instance","getCurrentInstance","provide","fillForm","data","k","requestApi","options","param","result","request","getFormData","pickSubmitData","toArr","v","s","whitelist","blacklist","acc","key","validate","submitForm","continueNext","ElMessage","afterSubmitSuccess","submitData","refreshDataGrid","resetForm","container","clearOnly","_b","_a","_d","_c","isDirty","onClose","inIframe","ElMessageBox","beforeLeave","watch","useContainer","removeBeforeClose","containerData","inHost","onMounted","appContext","rootProxy","onBeforeUnmount","__expose","_openBlock","_createElementBlock","_hoisted_1","_withDirectives","_createBlock","_component_el_form","_mergeProps","$attrs","_renderSlot","_ctx","_hoisted_2","_component_el_button","_createTextVNode","_toDisplayString","_createVNode"],"mappings":"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"}
1
+ {"version":3,"file":"DataForm-Dvx6GxlR.mjs","sources":["../../src/components/form/data-form/DataForm.vue"],"sourcesContent":["<template>\r\n <div class=\"wd-data-form\">\r\n <el-form\r\n ref=\"formRef\"\r\n v-loading=\"loading\"\r\n :model=\"formModel\"\r\n :rules=\"rules\"\r\n :label-width=\"labelWidth\"\r\n :label-position=\"labelPosition\"\r\n :inline=\"inline\"\r\n :disabled=\"loading\"\r\n v-bind=\"$attrs\"\r\n @submit.prevent\r\n >\r\n <slot :model=\"formModel\" :form=\"formRef\" />\r\n\r\n <!-- 底部操作区 -->\r\n <div v-if=\"withActions\" class=\"wd-data-form__footer\">\r\n <slot name=\"footer\" :submit=\"submitForm\" :reset=\"resetForm\" :loading=\"loading\">\r\n <!-- 关闭 / 保存并继续:仅在容器(drawer/dialog)或 iframe 内显示,独立使用时隐藏 -->\r\n <el-button v-if=\"inHost\" @click=\"onClose\">{{ closeText }}</el-button>\r\n <el-button v-if=\"actionConf.showReset\" @click=\"resetForm\">{{ actionConf.resetText }}</el-button>\r\n <el-button\r\n v-if=\"inHost && isCreate && keepFormButton && actionConf.showContinue\"\r\n :loading=\"loading\"\r\n @click=\"submitForm(true)\"\r\n >\r\n {{ actionConf.continueText }}\r\n </el-button>\r\n <el-button type=\"primary\" :loading=\"loading\" @click=\"submitForm(false)\">\r\n {{ actionConf.submitText }}\r\n </el-button>\r\n </slot>\r\n </div>\r\n </el-form>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, reactive, computed, onMounted, onBeforeUnmount, watch, provide, inject, getCurrentInstance, type PropType } from 'vue'\r\nimport { ElMessage, ElMessageBox } from 'element-plus'\r\nimport { request } from '../../../lib/core/http'\r\nimport { refreshDataGrid } from '../../../lib/core/linkage'\r\nimport { deepMerge } from '../../../lib/core/utils'\r\nimport { useContainer } from '../../containers/containerContext'\r\n\r\ndefineOptions({ name: 'WdDataForm', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n /** 模式:create 新增 / edit 编辑 */\r\n mode: { type: String as PropType<'create' | 'edit'>, default: 'create' },\r\n /** 详情数据接口(edit 模式回填) */\r\n api: { type: String, default: '' },\r\n apiMethod: { type: String as PropType<'get' | 'post'>, default: 'get' },\r\n apiParam: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\r\n /** 提交接口 */\r\n submitApi: { type: String, default: '' },\r\n submitMethod: { type: String as PropType<'post' | 'put'>, default: 'post' },\r\n /** 提交字段白名单 */\r\n submitKeys: { type: [String, Array] as PropType<string | string[]>, default: undefined },\r\n /** 提交字段黑名单 */\r\n submitExcludeKeys: { type: [String, Array] as PropType<string | string[]>, default: undefined },\r\n /** 是否自动请求详情 */\r\n active: { type: Boolean, default: false },\r\n /** 有未保存修改时离开确认 */\r\n confirmLeave: { type: Boolean, default: true },\r\n /** 是否显示底部操作按钮区 */\r\n withActions: { type: Boolean, default: true },\r\n /** 底部按钮文案配置 */\r\n actionConfig: {\r\n type: Object as PropType<{\r\n resetText?: string\r\n submitText?: string\r\n continueText?: string\r\n closeText?: string\r\n showReset?: boolean\r\n showContinue?: boolean\r\n }>,\r\n default: () => ({})\r\n },\r\n /** 提交后关闭抽屉 */\r\n headCloseDrawer: { type: [Boolean, String], default: true },\r\n /** 提交后刷新表格 */\r\n headRefreshDatagrid: { type: [Boolean, String], default: false },\r\n /** 显示连续操作按钮 */\r\n keepFormButton: { type: Boolean, default: true },\r\n /** 表单规则(透传 el-form rules) */\r\n rules: { type: Object as PropType<Record<string, any>>, default: () => ({}) },\r\n labelWidth: { type: [String, Number], default: '100px' },\r\n labelPosition: { type: String as PropType<'left' | 'right' | 'top'>, default: 'right' },\r\n inline: { type: Boolean, default: false },\r\n /** 联动分组 */\r\n filter: { type: String, default: '' },\r\n /** 外部传入的初始数据(DrawerButton data 等) */\r\n data: { type: Object as PropType<Record<string, any>>, default: undefined }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'submit-success',\r\n 'submit-fail',\r\n 'load-success',\r\n 'change',\r\n 'close',\r\n 'apiBefore',\r\n 'apiAfter'\r\n])\r\n\r\nconst formRef = ref<any>(null)\r\nconst loading = ref(false)\r\nconst formModel = reactive<Record<string, any>>({})\r\n/** 初始快照,用于修改检测与 edit 重置 */\r\nconst snapshot = ref<Record<string, any>>({})\r\n\r\nconst isCreate = computed(() => props.mode !== 'edit')\r\n\r\nconst actionConf = computed(() =>\r\n deepMerge(\r\n {\r\n resetText: '重置',\r\n submitText: '保存',\r\n continueText: '保存并继续',\r\n closeText: '关闭',\r\n showReset: true,\r\n showContinue: true\r\n },\r\n props.actionConfig || {}\r\n )\r\n)\r\n\r\nconst closeText = computed(() => actionConf.value.closeText)\r\n\r\n// 通过 provide 向子组件暴露 model;HTML 场景下插槽 v-model=\"model.xxx\"\r\n// 运行于根组件模板作用域,故同时把 model 挂到 app.config.globalProperties\r\n// (根实例 proxy 查找 setupState/data 之后回退 globalProperties)\r\nconst instance = getCurrentInstance()\r\nprovide('wdDataForm', {\r\n model: formModel,\r\n formRef\r\n})\r\n\r\n/** 回填数据到表单 */\r\nfunction fillForm(data: Record<string, any> | null | undefined) {\r\n // 清空旧值\r\n Object.keys(formModel).forEach((k) => delete formModel[k])\r\n if (data && typeof data === 'object') {\r\n Object.assign(formModel, JSON.parse(JSON.stringify(data)))\r\n }\r\n snapshot.value = JSON.parse(JSON.stringify(formModel))\r\n}\r\n\r\n/** 请求详情并回填 */\r\nasync function requestApi(options?: { apiParam?: Record<string, any> }) {\r\n if (!props.api) {\r\n fillForm(props.data || {})\r\n return\r\n }\r\n loading.value = true\r\n emit('apiBefore', { type: 'load' })\r\n try {\r\n const param = { ...props.apiParam, ...(options?.apiParam || {}) }\r\n const result =\r\n props.apiMethod === 'get'\r\n ? await request.get(props.api, param)\r\n : await request.post(props.api, param)\r\n if (result.success) {\r\n fillForm(result.data || {})\r\n emit('load-success', result.data)\r\n }\r\n } finally {\r\n loading.value = false\r\n emit('apiAfter', { type: 'load' })\r\n }\r\n}\r\n\r\n/** 取当前表单值 */\r\nfunction getFormData() {\r\n return { ...formModel }\r\n}\r\n\r\n/** 按白/黑名单过滤提交字段 */\r\nfunction pickSubmitData() {\r\n const data = getFormData()\r\n const toArr = (v: string | string[] | undefined) =>\r\n v == null ? null : Array.isArray(v) ? v : String(v).split(',').map((s) => s.trim()).filter(Boolean)\r\n\r\n const whitelist = toArr(props.submitKeys)\r\n const blacklist = toArr(props.submitExcludeKeys)\r\n\r\n let result = data\r\n if (whitelist) {\r\n result = whitelist.reduce((acc: Record<string, any>, key) => {\r\n acc[key] = data[key]\r\n return acc\r\n }, {})\r\n }\r\n if (blacklist) {\r\n result = Object.keys(result).reduce((acc: Record<string, any>, key) => {\r\n if (!blacklist.includes(key)) acc[key] = result[key]\r\n return acc\r\n }, {})\r\n }\r\n return result\r\n}\r\n\r\n/** 手动校验 */\r\nasync function validate(): Promise<boolean> {\r\n if (!formRef.value) return true\r\n try {\r\n await formRef.value.validate()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n/** 提交 */\r\nasync function submitForm(continueNext = false) {\r\n const ok = await validate()\r\n if (!ok) {\r\n ElMessage.warning('请完善表单必填项')\r\n return\r\n }\r\n if (!props.submitApi) {\r\n // 无提交接口:仅抛出事件,交给父组件处理\r\n emit('submit-success', getFormData())\r\n afterSubmitSuccess(getFormData(), continueNext)\r\n return\r\n }\r\n\r\n loading.value = true\r\n emit('apiBefore', { type: 'submit' })\r\n try {\r\n const submitData = pickSubmitData()\r\n const result =\r\n props.submitMethod === 'put'\r\n ? await request.put(props.submitApi, submitData)\r\n : await request.post(props.submitApi, submitData)\r\n\r\n if (result.success) {\r\n emit('submit-success', result.data)\r\n afterSubmitSuccess(result.data, continueNext)\r\n } else {\r\n emit('submit-fail', result)\r\n }\r\n } finally {\r\n loading.value = false\r\n emit('apiAfter', { type: 'submit' })\r\n }\r\n}\r\n\r\n/** 提交成功后的联动处理 */\r\nfunction afterSubmitSuccess(data: any, continueNext: boolean) {\r\n // 1. 刷新目标 DataGrid(声明式联动)\r\n if (props.headRefreshDatagrid) {\r\n refreshDataGrid(props.headRefreshDatagrid, props.filter)\r\n }\r\n // 2. 关闭抽屉 / 连续操作\r\n if (continueNext && isCreate.value) {\r\n // 保存并继续:清空表单继续新增,不关闭\r\n resetForm(true)\r\n } else if (props.headCloseDrawer) {\r\n // 容器内:请求容器关闭(提交成功不再做离开确认);独立使用:emit close\r\n if (container?.requestClose) {\r\n container.requestClose('submit')\r\n } else {\r\n emit('close', { reason: 'submit' })\r\n }\r\n }\r\n // 更新快照\r\n snapshot.value = JSON.parse(JSON.stringify(formModel))\r\n}\r\n\r\n/** 重置:create 清空 / edit 回填原值 */\r\nfunction resetForm(clearOnly = false) {\r\n if (isCreate.value || clearOnly) {\r\n Object.keys(formModel).forEach((k) => delete formModel[k])\r\n formRef.value?.clearValidate?.()\r\n } else {\r\n fillForm(snapshot.value)\r\n formRef.value?.clearValidate?.()\r\n }\r\n}\r\n\r\n/** 是否有未保存修改 */\r\nfunction isDirty(): boolean {\r\n return JSON.stringify(formModel) !== JSON.stringify(snapshot.value)\r\n}\r\n\r\n/** 关闭(底部关闭按钮) */\r\nfunction onClose() {\r\n if (container?.requestClose) {\r\n // 容器内:交给容器走关闭流程(容器统一执行未保存确认,避免重复弹窗)\r\n container.requestClose('manual')\r\n return\r\n }\r\n // iframe 场景:通知父容器(wd-drawer url 模式 / wd-iframe 承载)请求关闭\r\n if (inIframe.value) {\r\n window.parent?.postMessage({ type: 'wd-container:close' }, '*')\r\n return\r\n }\r\n // 独立使用:自行确认\r\n if (props.confirmLeave && isDirty()) {\r\n ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n .then(() => emit('close', { reason: 'manual' }))\r\n .catch(() => {})\r\n return\r\n }\r\n emit('close', { reason: 'manual' })\r\n}\r\n\r\n/** 供父组件/抽屉调用的离开检查 */\r\nasync function beforeLeave(): Promise<boolean> {\r\n if (!props.confirmLeave || !isDirty()) return true\r\n try {\r\n await ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n return true\r\n } catch {\r\n return false\r\n }\r\n}\r\n\r\n// 表单变化事件(修改检测)\r\nwatch(\r\n formModel,\r\n () => {\r\n emit('change', getFormData())\r\n },\r\n { deep: true }\r\n)\r\n\r\n// 容器上下文(被 wd-drawer 承载时存在,mode=dialog 同为该组件)\r\nconst container = useContainer()\r\nlet removeBeforeClose: (() => void) | null = null\r\n// 容器携带的数据(DrawerButton data),props.data 优先\r\nconst containerData = computed(() => props.data || container?.data)\r\n\r\n// 是否处于 iframe 子页面(被 wd-drawer url 模式 / wd-iframe 承载;跨域访问 window.top 会抛错,视为 iframe)\r\nconst inIframe = computed(() => {\r\n if (typeof window === 'undefined') return false\r\n try {\r\n return window.self !== window.top\r\n } catch {\r\n return true\r\n }\r\n})\r\n// 是否处于宿主环境(drawer/dialog 容器 或 iframe)——决定底部「关闭」「保存并继续」按钮是否显示\r\nconst inHost = computed(() => !!container || inIframe.value)\r\n\r\n// 同步数据预填(首次渲染前):props.data / 容器 data 在 setup 阶段已可用,\r\n// 提前回填可避免插槽内 el-switch / el-radio 等控件首帧绑定 undefined 触发 EP 校验警告;\r\n// api 异步详情仍在 onMounted 中拉取并覆盖\r\nif (containerData.value) {\r\n fillForm(containerData.value)\r\n}\r\n\r\nonMounted(() => {\r\n // HTML 场景:把 model 暴露给根模板作用域(v-model=\"model.xxx\")\r\n const appContext = instance?.appContext\r\n if (appContext) {\r\n appContext.config.globalProperties.model = formModel\r\n const rootProxy = appContext.app?.config?.globalProperties\r\n if (rootProxy) rootProxy.model = formModel\r\n }\r\n\r\n // 注册关闭前守卫:容器关闭时先做未保存确认(确认逻辑只走这一处,避免重复弹窗)\r\n if (container?.addBeforeClose) {\r\n removeBeforeClose = container.addBeforeClose(async () => {\r\n if (!props.confirmLeave || !isDirty()) return true\r\n try {\r\n await ElMessageBox.confirm('有未保存的修改,确认离开?', '提示', {\r\n confirmButtonText: '确认离开',\r\n cancelButtonText: '继续编辑',\r\n type: 'warning'\r\n })\r\n return true\r\n } catch {\r\n return false\r\n }\r\n })\r\n }\r\n\r\n if (props.mode === 'edit') {\r\n if (containerData.value) {\r\n fillForm(containerData.value)\r\n }\r\n if (props.active && props.api) {\r\n requestApi()\r\n }\r\n } else if (containerData.value) {\r\n fillForm(containerData.value)\r\n }\r\n})\r\n\r\nonBeforeUnmount(() => {\r\n removeBeforeClose?.()\r\n // 清理全局 model(仅当仍指向本实例时)\r\n const appContext = instance?.appContext\r\n if (appContext?.config?.globalProperties?.model === formModel) {\r\n delete appContext.config.globalProperties.model\r\n }\r\n})\r\n\r\ndefineExpose({\r\n requestApi,\r\n submitForm,\r\n resetForm,\r\n validate,\r\n getFormData,\r\n isDirty,\r\n beforeLeave,\r\n fillForm,\r\n formRef\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.wd-data-form {\r\n width: 100%;\r\n}\r\n.wd-data-form__footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n gap: 8px;\r\n /* 组件级令牌:皮肤可给表单 footer 加底色 / 内边距 / 圆角;\r\n 默认仅顶部留白(按钮与表单右缘对齐),皮肤给底色时应同步给 padding/radius 避免按钮贴边 */\r\n padding: var(--wd-form-footer-padding, 12px 0 0);\r\n border-top: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #e4e7ed);\r\n margin-top: var(--wd-spacing-base, 12px);\r\n border-radius: var(--wd-form-footer-radius, 0);\r\n background: var(--wd-form-footer-bg, transparent);\r\n}\r\n</style>\r\n"],"names":["props","__props","emit","__emit","formRef","ref","loading","formModel","reactive","snapshot","isCreate","computed","actionConf","deepMerge","closeText","instance","getCurrentInstance","provide","fillForm","data","k","requestApi","options","param","result","request","getFormData","pickSubmitData","toArr","v","s","whitelist","blacklist","acc","key","validate","submitForm","continueNext","ElMessage","afterSubmitSuccess","submitData","refreshDataGrid","resetForm","container","clearOnly","_b","_a","_d","_c","isDirty","onClose","inIframe","ElMessageBox","beforeLeave","watch","useContainer","removeBeforeClose","containerData","inHost","onMounted","appContext","rootProxy","onBeforeUnmount","__expose","_openBlock","_createElementBlock","_hoisted_1","_withDirectives","_createBlock","_component_el_form","_mergeProps","$attrs","_renderSlot","_ctx","_hoisted_2","_component_el_button","_createTextVNode","_toDisplayString","_createVNode"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { defineComponent as Fe, useSlots as Ft, ref as D, computed as m, watch as N, nextTick as we, onMounted as Ot, onBeforeUnmount as Lt, resolveComponent as P, resolveDirective as It, openBlock as o, createElementBlock as y, normalizeStyle as Gt, normalizeClass as A, renderSlot as Y, unref as u, createBlock as f, withCtx as a, createVNode as n, createTextVNode as C, createCommentVNode as g, toDisplayString as M, withDirectives as Oe, Fragment as J, renderList as Q, createElementVNode as E, isRef as Nt, withModifiers as Le, resolveDynamicComponent as jt, createSlots as Ut } from "vue";
2
2
  import { Plus as Ie, Download as Ge, Refresh as Ne, ScaleToOriginal as je, Grid as Ue, Menu as We, Setting as qe, ShoppingCart as Ye, Rank as Wt } from "@element-plus/icons-vue";
3
- import { u as qt, a as Yt, o as Jt } from "./useColumnSettings-CbiWd27-.mjs";
3
+ import { u as qt, a as Yt, o as Jt } from "./useColumnSettings-CIFQCmzT.mjs";
4
4
  import { a as Qt } from "./linkage-FbL1mcz3.mjs";
5
- import { c as Xt, a as Zt } from "./config-B6nWG5dv.mjs";
5
+ import { c as Xt, a as Zt } from "./config-CDqjABpD.mjs";
6
6
  import { _ as ea } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
7
7
  const ta = {
8
8
  key: 0,
@@ -1121,4 +1121,4 @@ const ta = {
1121
1121
  export {
1122
1122
  Ca as W
1123
1123
  };
1124
- //# sourceMappingURL=DataGrid-DWAhwLVk.mjs.map
1124
+ //# sourceMappingURL=DataGrid-Cw3yXhmR.mjs.map