workdesktop-ai 1.1.0 → 1.2.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 (99) hide show
  1. package/CHANGELOG.md +31 -6
  2. package/README.md +16 -6
  3. package/dist/api-button/index.mjs +1 -1
  4. package/dist/auto-complete/index.mjs +1 -1
  5. package/dist/base.css +1 -1
  6. package/dist/checkbox-list/index.mjs +1 -1
  7. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs → ApiButton.vue_vue_type_script_setup_true_lang-CH_B3jbO.mjs} +2 -2
  8. package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-CweWFfDE.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-CH_B3jbO.mjs.map} +1 -1
  9. package/dist/chunks/{AutoComplete-B_L169hU.mjs → AutoComplete-6yrCFGZ5.mjs} +2 -2
  10. package/dist/chunks/{AutoComplete-B_L169hU.mjs.map → AutoComplete-6yrCFGZ5.mjs.map} +1 -1
  11. package/dist/chunks/{CheckboxList-bPqpbd8d.mjs → CheckboxList-ChmfF6zs.mjs} +2 -2
  12. package/dist/chunks/{CheckboxList-bPqpbd8d.mjs.map → CheckboxList-ChmfF6zs.mjs.map} +1 -1
  13. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-D9ZUQB7V.mjs} +2 -2
  14. package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-DpdMPkka.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-D9ZUQB7V.mjs.map} +1 -1
  15. package/dist/chunks/{DataForm-C6UW92Ds.mjs → DataForm-Rsa1PT-X.mjs} +16 -16
  16. package/dist/chunks/{DataForm-C6UW92Ds.mjs.map → DataForm-Rsa1PT-X.mjs.map} +1 -1
  17. package/dist/chunks/{DataGrid-BhgND4G_.mjs → DataGrid-DzbJpT43.mjs} +4 -4
  18. package/dist/chunks/{DataGrid-BhgND4G_.mjs.map → DataGrid-DzbJpT43.mjs.map} +1 -1
  19. package/dist/chunks/{EditableGrid-Cx7ScWkW.mjs → EditableGrid-C-0uy89H.mjs} +330 -333
  20. package/dist/chunks/EditableGrid-C-0uy89H.mjs.map +1 -0
  21. package/dist/chunks/{ImageUpload-D3JGJjVO.mjs → ImageUpload-CrDyIjWC.mjs} +2 -2
  22. package/dist/chunks/{ImageUpload-D3JGJjVO.mjs.map → ImageUpload-CrDyIjWC.mjs.map} +1 -1
  23. package/dist/chunks/{Panel-d4chdlTA.mjs → Panel-BHqAeBaH.mjs} +33 -31
  24. package/dist/chunks/Panel-BHqAeBaH.mjs.map +1 -0
  25. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs → PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs} +2 -2
  26. package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs.map} +1 -1
  27. package/dist/chunks/{RadioList-DT-8WSN2.mjs → RadioList-BIwUZ6lm.mjs} +2 -2
  28. package/dist/chunks/{RadioList-DT-8WSN2.mjs.map → RadioList-BIwUZ6lm.mjs.map} +1 -1
  29. package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs → Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs} +2 -2
  30. package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs.map → Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs.map} +1 -1
  31. package/dist/chunks/{SearchPanel-xQ1hPaNq.mjs → SearchPanel-DPlWWuXb.mjs} +2 -2
  32. package/dist/chunks/{SearchPanel-xQ1hPaNq.mjs.map → SearchPanel-DPlWWuXb.mjs.map} +1 -1
  33. package/dist/chunks/{Select-CMw-tWYm.mjs → Select-DlJ9U0nE.mjs} +2 -2
  34. package/dist/chunks/{Select-CMw-tWYm.mjs.map → Select-DlJ9U0nE.mjs.map} +1 -1
  35. package/dist/chunks/{Station-BF_QlQ8c.mjs → Station-CrMTjqfa.mjs} +2 -2
  36. package/dist/chunks/{Station-BF_QlQ8c.mjs.map → Station-CrMTjqfa.mjs.map} +1 -1
  37. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs → Switch.vue_vue_type_script_setup_true_lang-BxJdsReQ.mjs} +2 -2
  38. package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-CCU_d3jW.mjs.map → Switch.vue_vue_type_script_setup_true_lang-BxJdsReQ.mjs.map} +1 -1
  39. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs → Upload.vue_vue_type_script_setup_true_lang-DORizGEF.mjs} +2 -2
  40. package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CkxGO85H.mjs.map → Upload.vue_vue_type_script_setup_true_lang-DORizGEF.mjs.map} +1 -1
  41. package/dist/chunks/{Viewer-COLbtcgF.mjs → Viewer-DcMSN3_1.mjs} +2 -2
  42. package/dist/chunks/{Viewer-COLbtcgF.mjs.map → Viewer-DcMSN3_1.mjs.map} +1 -1
  43. package/dist/chunks/http-9ToPNkWJ.mjs +4026 -0
  44. package/dist/chunks/http-9ToPNkWJ.mjs.map +1 -0
  45. package/dist/chunks/{useApiAction-C1CdKGjt.mjs → useApiAction-BetCGQrx.mjs} +2 -2
  46. package/dist/chunks/{useApiAction-C1CdKGjt.mjs.map → useApiAction-BetCGQrx.mjs.map} +1 -1
  47. package/dist/chunks/{useColumnSettings-BDtF5-8R.mjs → useColumnSettings-CnXeA0k7.mjs} +2 -2
  48. package/dist/chunks/{useColumnSettings-BDtF5-8R.mjs.map → useColumnSettings-CnXeA0k7.mjs.map} +1 -1
  49. package/dist/chunks/{useOptionsLoader-D0RTB_ar.mjs → useOptionsLoader-BwRdHDPL.mjs} +2 -2
  50. package/dist/chunks/{useOptionsLoader-D0RTB_ar.mjs.map → useOptionsLoader-BwRdHDPL.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-form/style.css +1 -1
  54. package/dist/data-grid/index.mjs +1 -1
  55. package/dist/data-grid/style.css +1 -1
  56. package/dist/editable-grid/index.mjs +1 -1
  57. package/dist/editable-grid/style.css +1 -1
  58. package/dist/image-upload/index.mjs +1 -1
  59. package/dist/index.esm.js +106 -103
  60. package/dist/index.umd.js +605 -18
  61. package/dist/index.umd.js.map +1 -1
  62. package/dist/panel/index.mjs +1 -1
  63. package/dist/panel/style.css +1 -1
  64. package/dist/prompt-button/index.mjs +1 -1
  65. package/dist/radio-list/index.mjs +1 -1
  66. package/dist/requester/index.mjs +1 -1
  67. package/dist/search-panel/index.mjs +1 -1
  68. package/dist/search-panel/style.css +1 -1
  69. package/dist/select/index.mjs +1 -1
  70. package/dist/station/index.mjs +1 -1
  71. package/dist/station/style.css +1 -1
  72. package/dist/style.css +1 -1
  73. package/dist/switch/index.mjs +1 -1
  74. package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +9 -9
  75. package/dist/types/src/components/styles/Panel.vue.d.ts +11 -0
  76. package/dist/types/src/index.d.ts +2 -0
  77. package/dist/types/src/lib/core/skins/apple.d.ts +3 -0
  78. package/dist/types/src/lib/core/skins/business.d.ts +3 -0
  79. package/dist/types/src/lib/core/skins/chinese.d.ts +3 -0
  80. package/dist/types/src/lib/core/skins/cool.d.ts +3 -0
  81. package/dist/types/src/lib/core/skins/cyberpunk.d.ts +3 -0
  82. package/dist/types/src/lib/core/skins/default.d.ts +3 -0
  83. package/dist/types/src/lib/core/skins/fashion.d.ts +3 -0
  84. package/dist/types/src/lib/core/skins/flat.d.ts +3 -0
  85. package/dist/types/src/lib/core/skins/governance.d.ts +3 -0
  86. package/dist/types/src/lib/core/skins/index.d.ts +15 -0
  87. package/dist/types/src/lib/core/skins/tech-brain.d.ts +5 -0
  88. package/dist/types/src/lib/core/skins/tech.d.ts +3 -0
  89. package/dist/types/src/lib/core/skins/types.d.ts +19 -0
  90. package/dist/types/src/lib/core/theme.d.ts +7 -2
  91. package/dist/types/src/types/config.d.ts +4 -0
  92. package/dist/upload/index.mjs +1 -1
  93. package/dist/viewer/index.mjs +1 -1
  94. package/llms.txt +688 -0
  95. package/package.json +3 -2
  96. package/dist/chunks/EditableGrid-Cx7ScWkW.mjs.map +0 -1
  97. package/dist/chunks/Panel-d4chdlTA.mjs.map +0 -1
  98. package/dist/chunks/http-DUPsbs2K.mjs +0 -2951
  99. package/dist/chunks/http-DUPsbs2K.mjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { defineComponent as y, ref as k, watch as g, computed as C, resolveComponent as $, openBlock as o, createElementBlock as n, normalizeClass as r, withKeys as p, withModifiers as a, createElementVNode as s, renderSlot as u, toDisplayString as h, createCommentVNode as i, createBlock as S, withCtx as B, createVNode as K, unref as x } from "vue";
1
+ import { defineComponent as _, ref as k, watch as g, computed as C, resolveComponent as $, openBlock as o, createElementBlock as n, normalizeClass as c, withKeys as p, withModifiers as a, createElementVNode as s, renderSlot as u, toDisplayString as h, createCommentVNode as d, createBlock as B, withCtx as S, createVNode as K, unref as x } from "vue";
2
2
  import { ArrowDown as N } from "@element-plus/icons-vue";
3
3
  import { _ as P } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
4
4
  const V = ["aria-expanded", "onKeydown"], W = { class: "wd-panel__header-main" }, D = { class: "wd-panel__title" }, E = {
@@ -7,7 +7,7 @@ const V = ["aria-expanded", "onKeydown"], W = { class: "wd-panel__header-main" }
7
7
  }, z = { class: "wd-panel__content-inner" }, A = { class: "wd-panel__body" }, H = {
8
8
  key: 0,
9
9
  class: "wd-panel__footer"
10
- }, I = /* @__PURE__ */ y({
10
+ }, I = /* @__PURE__ */ _({
11
11
  name: "WdPanel",
12
12
  __name: "Panel",
13
13
  props: {
@@ -23,46 +23,48 @@ const V = ["aria-expanded", "onKeydown"], W = { class: "wd-panel__header-main" }
23
23
  shadow: {
24
24
  type: String,
25
25
  default: "hover"
26
- }
26
+ },
27
+ /** 是否显示外边框(嵌套在卡片/弹层等容器内时可关闭) */
28
+ border: { type: Boolean, default: !0 }
27
29
  },
28
30
  emits: ["update:opened", "change"],
29
- setup(t, { emit: _ }) {
30
- const d = t, w = _, v = k(d.opened);
31
+ setup(t, { emit: b }) {
32
+ const i = t, f = b, v = k(i.opened);
31
33
  g(
32
- () => d.opened,
34
+ () => i.opened,
33
35
  (e) => {
34
36
  v.value = e;
35
37
  }
36
38
  );
37
39
  const l = C(() => v.value);
38
- function c() {
39
- if (!d.collapsible) return;
40
+ function r() {
41
+ if (!i.collapsible) return;
40
42
  const e = !l.value;
41
- v.value = e, w("update:opened", e), w("change", e);
43
+ v.value = e, f("update:opened", e), f("change", e);
42
44
  }
43
- function f() {
44
- d.collapsible && c();
45
+ function w() {
46
+ i.collapsible && r();
45
47
  }
46
48
  return (e, m) => {
47
- const b = $("el-icon");
49
+ const y = $("el-icon");
48
50
  return o(), n("div", {
49
- class: r(["wd-panel", `wd-panel--shadow-${t.shadow}`])
51
+ class: c(["wd-panel", [`wd-panel--shadow-${t.shadow}`, { "wd-panel--no-border": !t.border }]])
50
52
  }, [
51
53
  t.title || e.$slots.title ? (o(), n("div", {
52
54
  key: 0,
53
- class: r(["wd-panel__header", { "is-collapsible": t.collapsible }]),
55
+ class: c(["wd-panel__header", { "is-collapsible": t.collapsible }]),
54
56
  role: "heading",
55
57
  "aria-expanded": t.collapsible ? l.value : void 0,
56
- onClick: f,
58
+ onClick: w,
57
59
  onKeydown: [
58
- p(a(f, ["prevent"]), ["enter"]),
59
- p(a(f, ["prevent"]), ["space"])
60
+ p(a(w, ["prevent"]), ["enter"]),
61
+ p(a(w, ["prevent"]), ["space"])
60
62
  ]
61
63
  }, [
62
64
  s("div", W, [
63
65
  u(e.$slots, "title", {}, () => [
64
66
  s("span", D, h(t.title), 1),
65
- t.description ? (o(), n("span", E, h(t.description), 1)) : i("", !0)
67
+ t.description ? (o(), n("span", E, h(t.description), 1)) : d("", !0)
66
68
  ], !0)
67
69
  ]),
68
70
  e.$slots.extra || t.collapsible ? (o(), n("div", {
@@ -72,27 +74,27 @@ const V = ["aria-expanded", "onKeydown"], W = { class: "wd-panel__header-main" }
72
74
  }, ["stop"]))
73
75
  }, [
74
76
  u(e.$slots, "extra", {}, void 0, !0),
75
- t.collapsible ? (o(), S(b, {
77
+ t.collapsible ? (o(), B(y, {
76
78
  key: 0,
77
- class: r(["wd-panel__collapse-icon", { "is-collapsed": !l.value }]),
79
+ class: c(["wd-panel__collapse-icon", { "is-collapsed": !l.value }]),
78
80
  role: "button",
79
81
  "aria-label": l.value ? "收起" : "展开",
80
82
  tabindex: "0",
81
- onClick: c,
83
+ onClick: r,
82
84
  onKeydown: [
83
- p(a(c, ["prevent"]), ["enter"]),
84
- p(a(c, ["prevent"]), ["space"])
85
+ p(a(r, ["prevent"]), ["enter"]),
86
+ p(a(r, ["prevent"]), ["space"])
85
87
  ]
86
88
  }, {
87
- default: B(() => [
89
+ default: S(() => [
88
90
  K(x(N))
89
91
  ]),
90
92
  _: 1
91
- }, 8, ["class", "aria-label", "onKeydown"])) : i("", !0)
92
- ])) : i("", !0)
93
- ], 42, V)) : i("", !0),
93
+ }, 8, ["class", "aria-label", "onKeydown"])) : d("", !0)
94
+ ])) : d("", !0)
95
+ ], 42, V)) : d("", !0),
94
96
  s("div", {
95
- class: r(["wd-panel__content", { "is-collapsed": t.collapsible && !l.value }])
97
+ class: c(["wd-panel__content", { "is-collapsed": t.collapsible && !l.value }])
96
98
  }, [
97
99
  s("div", z, [
98
100
  s("div", A, [
@@ -100,14 +102,14 @@ const V = ["aria-expanded", "onKeydown"], W = { class: "wd-panel__header-main" }
100
102
  ]),
101
103
  e.$slots.footer ? (o(), n("div", H, [
102
104
  u(e.$slots, "footer", {}, void 0, !0)
103
- ])) : i("", !0)
105
+ ])) : d("", !0)
104
106
  ])
105
107
  ], 2)
106
108
  ], 2);
107
109
  };
108
110
  }
109
- }), q = /* @__PURE__ */ P(I, [["__scopeId", "data-v-bbfb587b"]]);
111
+ }), q = /* @__PURE__ */ P(I, [["__scopeId", "data-v-db0c0567"]]);
110
112
  export {
111
113
  q as W
112
114
  };
113
- //# sourceMappingURL=Panel-d4chdlTA.mjs.map
115
+ //# sourceMappingURL=Panel-BHqAeBaH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel-BHqAeBaH.mjs","sources":["../../src/components/styles/Panel.vue"],"sourcesContent":["<template>\n <div class=\"wd-panel\" :class=\"[`wd-panel--shadow-${shadow}`, { 'wd-panel--no-border': !border }]\">\n <div\n v-if=\"title || $slots.title\"\n class=\"wd-panel__header\"\n :class=\"{ 'is-collapsible': collapsible }\"\n role=\"heading\"\n :aria-expanded=\"collapsible ? openedState : undefined\"\n @click=\"onHeaderClick\"\n @keydown.enter.prevent=\"onHeaderClick\"\n @keydown.space.prevent=\"onHeaderClick\"\n >\n <div class=\"wd-panel__header-main\">\n <slot name=\"title\">\n <span class=\"wd-panel__title\">{{ title }}</span>\n <span v-if=\"description\" class=\"wd-panel__description\">{{ description }}</span>\n </slot>\n </div>\n <div v-if=\"$slots.extra || collapsible\" class=\"wd-panel__header-extra\" @click.stop>\n <slot name=\"extra\" />\n <el-icon\n v-if=\"collapsible\"\n class=\"wd-panel__collapse-icon\"\n :class=\"{ 'is-collapsed': !openedState }\"\n role=\"button\"\n :aria-label=\"openedState ? '收起' : '展开'\"\n tabindex=\"0\"\n @click=\"toggle\"\n @keydown.enter.prevent=\"toggle\"\n @keydown.space.prevent=\"toggle\"\n >\n <ArrowDown />\n </el-icon>\n </div>\n </div>\n <div class=\"wd-panel__content\" :class=\"{ 'is-collapsed': collapsible && !openedState }\">\n <div class=\"wd-panel__content-inner\">\n <div class=\"wd-panel__body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"wd-panel__footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, computed, watch, type PropType } from 'vue'\nimport { ArrowDown } from '@element-plus/icons-vue'\n\ndefineOptions({ name: 'WdPanel' })\n\nconst props = defineProps({\n /** 面板标题 */\n title: { type: String, default: '' },\n /** 标题旁描述 */\n description: { type: String, default: '' },\n /** 是否可折叠(折叠时隐藏主体与底部) */\n collapsible: { type: Boolean, default: false },\n /** 展开状态(配合 collapsible 使用,支持 v-model:opened) */\n opened: { type: Boolean, default: true },\n /** 阴影策略:always=常驻阴影 / hover=悬停时显示 / never=无阴影 */\n shadow: {\n type: String as PropType<'always' | 'hover' | 'never'>,\n default: 'hover'\n },\n /** 是否显示外边框(嵌套在卡片/弹层等容器内时可关闭) */\n border: { type: Boolean, default: true }\n})\n\nconst emit = defineEmits<{\n (e: 'update:opened', value: boolean): void\n (e: 'change', value: boolean): void\n}>()\n\nconst innerOpened = ref(props.opened)\n// 受控(v-model:opened)时跟随外部变化,非受控时使用内部状态\nwatch(\n () => props.opened,\n (v) => {\n innerOpened.value = v\n }\n)\nconst openedState = computed(() => innerOpened.value)\n\nfunction toggle() {\n if (!props.collapsible) return\n const next = !openedState.value\n innerOpened.value = next\n emit('update:opened', next)\n emit('change', next)\n}\n\nfunction onHeaderClick() {\n if (props.collapsible) toggle()\n}\n</script>\n\n<style scoped>\n.wd-panel {\n width: 100%;\n margin-bottom: var(--wd-spacing-base, 12px);\n /* 组件级令牌回退链:--wd-panel-* 未设时回落全局令牌,皮肤可单独定制 Panel */\n background: var(--wd-panel-bg, var(--wd-bg-color, #fff));\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-panel-bg-image, none);\n border: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-panel-border-color, var(--wd-border-color-light, #e4e7ed));\n border-radius: var(--wd-panel-radius, var(--wd-radius-base, 4px));\n box-sizing: border-box;\n overflow: hidden;\n transition: box-shadow 0.25s ease, border-color 0.25s ease, transform 0.25s ease;\n}\n\n/* 阴影跟随可覆盖变量:在任意祖先/全局定义\n --wd-panel-shadow-sm / --wd-panel-shadow-md 即可换肤 */\n.wd-panel--shadow-always {\n box-shadow: var(\n --wd-panel-shadow-sm,\n 0 1px 2px rgba(16, 24, 40, 0.04),\n 0 1px 6px -1px rgba(16, 24, 40, 0.06)\n );\n}\n.wd-panel--shadow-hover:hover {\n border-color: var(--wd-border-color, #dcdfe6);\n box-shadow: var(\n --wd-panel-shadow-md,\n 0 4px 8px -2px rgba(16, 24, 40, 0.08),\n 0 12px 24px -4px rgba(16, 24, 40, 0.1)\n );\n transform: translateY(-1px);\n}\n/* 无边框:transparent 保持盒模型一致;:hover 提优先级防止悬停阴影重新上色 */\n.wd-panel--no-border,\n.wd-panel--no-border:hover {\n border-color: transparent;\n}\n\n.wd-panel__header {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--wd-spacing-base, 12px);\n padding: var(--wd-panel-header-padding, var(--wd-spacing-base, 12px) var(--wd-spacing-large, 16px) var(--wd-spacing-base, 12px) 18px);\n background: var(--wd-panel-header-bg, transparent);\n border-bottom: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #e4e7ed);\n transition: background-color 0.2s ease;\n}\n/* 品牌色标识条:组件级令牌回退链,出厂保持 3px 全高主色细条 */\n.wd-panel__header::before {\n content: '';\n position: absolute;\n left: 0;\n top: var(--wd-panel-title-bar-inset, 0);\n bottom: var(--wd-panel-title-bar-inset, 0);\n width: var(--wd-panel-title-bar-width, 3px);\n background: var(--wd-panel-title-bar-bg, var(--wd-color-primary, #409eff));\n border-radius: var(--wd-panel-title-bar-radius, 0 var(--wd-radius-small, 2px) var(--wd-radius-small, 2px) 0);\n}\n.wd-panel__header.is-collapsible {\n cursor: pointer;\n}\n.wd-panel__header.is-collapsible:hover {\n background: var(--wd-bg-color-page, #f5f7fa);\n}\n.wd-panel__header-main {\n display: flex;\n align-items: baseline;\n gap: 8px;\n min-width: 0;\n flex: 1;\n}\n.wd-panel__title {\n font-size: var(--wd-font-size-base, 14px);\n font-weight: 600;\n line-height: 22px;\n color: var(--wd-panel-title-color, var(--wd-text-color-primary, #303133));\n white-space: nowrap;\n}\n.wd-panel__description {\n font-size: var(--wd-font-size-small, 12px);\n color: var(--wd-text-color-secondary, #909399);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wd-panel__header-extra {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n.wd-panel__collapse-icon {\n cursor: pointer;\n color: var(--wd-text-color-secondary, #909399);\n transition: transform 0.25s ease, color 0.2s ease;\n}\n.wd-panel__collapse-icon:hover {\n color: var(--wd-color-primary, #409eff);\n}\n.wd-panel__collapse-icon.is-collapsed {\n transform: rotate(-90deg);\n}\n\n/* 折叠动画:grid 1fr -> 0fr,无需测量高度 */\n.wd-panel__content {\n display: grid;\n grid-template-rows: 1fr;\n transition: grid-template-rows 0.28s ease;\n}\n.wd-panel__content.is-collapsed {\n grid-template-rows: 0fr;\n}\n.wd-panel__content-inner {\n overflow: hidden;\n min-height: 0;\n}\n.wd-panel__body {\n padding: var(--wd-panel-body-padding, var(--wd-spacing-large, 16px));\n}\n.wd-panel__footer {\n padding: 10px var(--wd-spacing-large, 16px);\n border-top: var(--wd-border-width, 1px) var(--wd-border-style, solid) var(--wd-border-color-light, #e4e7ed);\n background: var(--wd-panel-footer-bg, var(--wd-bg-color-page, #f5f7fa));\n}\n</style>\n"],"names":["props","__props","emit","__emit","innerOpened","ref","watch","v","openedState","computed","toggle","next","onHeaderClick","_createElementBlock","_normalizeClass","$slots","_createElementVNode","_hoisted_2","_renderSlot","_ctx","_hoisted_3","_toDisplayString","_hoisted_4","_createBlock","_component_el_icon","_createVNode","_unref","ArrowDown","_hoisted_5","_hoisted_6","_openBlock","_hoisted_7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,UAAMA,IAAQC,GAkBRC,IAAOC,GAKPC,IAAcC,EAAIL,EAAM,MAAM;AAEpC,IAAAM;AAAA,MACE,MAAMN,EAAM;AAAA,MACZ,CAACO,MAAM;AACL,QAAAH,EAAY,QAAQG;AAAA,MACtB;AAAA,IAAA;AAEF,UAAMC,IAAcC,EAAS,MAAML,EAAY,KAAK;AAEpD,aAASM,IAAS;AAChB,UAAI,CAACV,EAAM,YAAa;AACxB,YAAMW,IAAO,CAACH,EAAY;AAC1B,MAAAJ,EAAY,QAAQO,GACpBT,EAAK,iBAAiBS,CAAI,GAC1BT,EAAK,UAAUS,CAAI;AAAA,IACrB;AAEA,aAASC,IAAgB;AACvB,MAAIZ,EAAM,eAAaU,EAAA;AAAA,IACzB;;;kBAhGEG,EA4CM,OAAA;AAAA,QA5CD,OAAKC,EAAA,CAAC,YAAU,CAAA,oBAA8Bb,EAAA,MAAM,8BAA8BA,EAAA,OAAA,CAAM,CAAA,CAAA;AAAA,MAAA;QAEnFA,EAAA,SAASc,EAAAA,OAAO,cADxBF,EAgCM,OAAA;AAAA;UA9BJ,OAAKC,EAAA,CAAC,oBAAkB,EAAA,kBACIb,EAAA,YAAA,CAAW,CAAA;AAAA,UACvC,MAAK;AAAA,UACJ,iBAAeA,EAAA,cAAcO,EAAA,QAAc;AAAA,UAC3C,SAAOI;AAAA,UACP,WAAO;AAAA,gBAAgBA,GAAa,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,gBACbA,GAAa,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,UAAA;AAAA;UAErCI,EAKM,OALNC,GAKM;AAAA,YAJJC,EAGOC,uBAHP,MAGO;AAAA,cAFLH,EAAgD,QAAhDI,GAAgDC,EAAfpB,EAAA,KAAK,GAAA,CAAA;AAAA,cAC1BA,EAAA,oBAAZY,EAA+E,QAA/ES,GAA+ED,EAArBpB,EAAA,WAAW,GAAA,CAAA;;;UAG9Dc,EAAAA,OAAO,SAASd,EAAA,oBAA3BY,EAeM,OAAA;AAAA;YAfkC,OAAM;AAAA,YAA0B,2BAAD,MAAA;AAAA,YAAA,GAAW,CAAA,MAAA,CAAA;AAAA,UAAA;YAChFK,EAAqBC,EAAA,QAAA,SAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAEblB,EAAA,oBADRsB,EAYUC,GAAA;AAAA;cAVR,OAAKV,EAAA,CAAC,2BAAyB,EAAA,gBAAA,CACJN,EAAA,MAAA,CAAW,CAAA;AAAA,cACtC,MAAK;AAAA,cACJ,cAAYA,EAAA,QAAW,OAAA;AAAA,cACxB,UAAS;AAAA,cACR,SAAOE;AAAA,cACP,WAAO;AAAA,oBAAgBA,GAAM,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,oBACNA,GAAM,CAAA,SAAA,CAAA,GAAA,CAAA,OAAA,CAAA;AAAA,cAAA;AAAA;yBAE9B,MAAa;AAAA,gBAAbe,EAAaC,EAAAC,CAAA,CAAA;AAAA,cAAA;;;;;QAInBX,EASM,OAAA;AAAA,UATD,OAAKF,EAAA,CAAC,qBAAmB,EAAA,gBAA2Bb,EAAA,gBAAgBO,EAAA,OAAW,CAAA;AAAA,QAAA;UAClFQ,EAOM,OAPNY,GAOM;AAAA,YANJZ,EAEM,OAFNa,GAEM;AAAA,cADJX,EAAQC,EAAA,QAAA,WAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAAA;YAECJ,EAAAA,OAAO,UAAlBe,KAAAjB,EAEM,OAFNkB,GAEM;AAAA,cADJb,EAAsBC,EAAA,QAAA,UAAA,CAAA,GAAA,QAAA,EAAA;AAAA,YAAA;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as S, useSlots as k, resolveComponent as u, openBlock as m, createBlock as f, withCtx as l, createVNode as L, mergeProps as d, unref as g, renderSlot as h, createTextVNode as y, toDisplayString as P } from "vue";
2
2
  import { ElMessageBox as n } from "element-plus";
3
- import { u as w } from "./useApiAction-C1CdKGjt.mjs";
3
+ import { u as w } from "./useApiAction-BetCGQrx.mjs";
4
4
  import { t as D, b as _, a as A, h as R, f as v } from "./props-DAytpx7D.mjs";
5
5
  const q = /* @__PURE__ */ S({
6
6
  name: "WdPromptButton",
@@ -115,4 +115,4 @@ const q = /* @__PURE__ */ S({
115
115
  export {
116
116
  q as _
117
117
  };
118
- //# sourceMappingURL=PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs.map
118
+ //# sourceMappingURL=PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"PromptButton.vue_vue_type_script_setup_true_lang-BqoNAUoo.mjs","sources":["../../src/components/buttons/PromptButton.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 { useSlots } from 'vue'\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdPromptButton', 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 promptTitle: { type: String, default: '请输入' },\r\n /** 输入框占位文本(默认输入框模式有效) */\r\n promptPlaceholder: { type: String, default: '请输入内容' },\r\n /** 输入值并入 apiParam 的字段名(默认输入框模式有效) */\r\n paramKey: { type: String, default: 'value' },\r\n /** 输入框默认值(默认输入框模式有效) */\r\n promptDefault: { type: String, default: '' },\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 'prompt',\r\n 'cancel',\r\n 'confirm',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst slots = useSlots()\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 if (slots.content) {\r\n // 自定义内容模式:弹窗内容由用户插槽 #content 提供,点击确认后请求 API\r\n try {\r\n await ElMessageBox.prompt(props.promptTitle, props.promptTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPlaceholder: props.promptPlaceholder,\r\n inputValue: props.promptDefault,\r\n // 允许自定义内容:message 设为空,插槽内容会被保留\r\n dangerouslyUseHTMLString: true,\r\n message: ''\r\n })\r\n emit('confirm')\r\n const success = await doRequest({})\r\n // API 请求成功(success=true)自动关闭弹窗,失败不关闭让用户继续修改\r\n if (success) {\r\n ElMessageBox.close()\r\n }\r\n } catch {\r\n emit('cancel')\r\n }\r\n return\r\n }\r\n\r\n // 默认单输入框模式\r\n let value: string\r\n try {\r\n const res = await ElMessageBox.prompt(props.promptTitle, props.promptTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPlaceholder: props.promptPlaceholder,\r\n inputValue: props.promptDefault\r\n })\r\n value = res.value\r\n } catch {\r\n emit('cancel')\r\n return\r\n }\r\n emit('prompt', value)\r\n const success = await doRequest({ [props.paramKey]: value })\r\n // 根据 API 返回 success 决定是否自动关闭:成功关闭,失败不关闭\r\n if (success) {\r\n ElMessageBox.close()\r\n }\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","slots","useSlots","loading","doRequest","useApiAction","onClick","event","ElMessageBox","value","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,UAAMA,IAAQC,GAkBRC,IAAOC,GAYPC,IAAQC,EAAA,GACR,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMR,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,mBAAeS,EAAQC,GAAmB;AAExC,UADAR,EAAK,SAASQ,CAAK,GACfN,EAAM,SAAS;AAEjB,YAAI;AACF,gBAAMO,EAAa,OAAOX,EAAM,aAAaA,EAAM,aAAa;AAAA,YAC9D,mBAAmB;AAAA,YACnB,kBAAkB;AAAA,YAClB,kBAAkBA,EAAM;AAAA,YACxB,YAAYA,EAAM;AAAA;AAAA,YAElB,0BAA0B;AAAA,YAC1B,SAAS;AAAA,UAAA,CACV,GACDE,EAAK,SAAS,GACE,MAAMK,EAAU,EAAE,KAGhCI,EAAa,MAAA;AAAA,QAEjB,QAAQ;AACN,UAAAT,EAAK,QAAQ;AAAA,QACf;AACA;AAAA,MACF;AAGA,UAAIU;AACJ,UAAI;AAOF,QAAAA,KANY,MAAMD,EAAa,OAAOX,EAAM,aAAaA,EAAM,aAAa;AAAA,UAC1E,mBAAmB;AAAA,UACnB,kBAAkB;AAAA,UAClB,kBAAkBA,EAAM;AAAA,UACxB,YAAYA,EAAM;AAAA,QAAA,CACnB,GACW;AAAA,MACd,QAAQ;AACN,QAAAE,EAAK,QAAQ;AACb;AAAA,MACF;AACA,MAAAA,EAAK,UAAUU,CAAK,GACJ,MAAML,EAAU,EAAE,CAACP,EAAM,QAAQ,GAAGY,GAAO,KAGzDD,EAAa,MAAA;AAAA,IAEjB;;;aA9GUE,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,EAAAhB,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBc,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAhB,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBc,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
1
+ {"version":3,"file":"PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs","sources":["../../src/components/buttons/PromptButton.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 { useSlots } from 'vue'\r\nimport { useApiAction } from './useApiAction'\r\nimport { filterProp, headRefreshDatagridProp, apiProps, buttonTextProp, tipsProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdPromptButton', 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 promptTitle: { type: String, default: '请输入' },\r\n /** 输入框占位文本(默认输入框模式有效) */\r\n promptPlaceholder: { type: String, default: '请输入内容' },\r\n /** 输入值并入 apiParam 的字段名(默认输入框模式有效) */\r\n paramKey: { type: String, default: 'value' },\r\n /** 输入框默认值(默认输入框模式有效) */\r\n promptDefault: { type: String, default: '' },\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 'prompt',\r\n 'cancel',\r\n 'confirm',\r\n 'apiBefore',\r\n 'apiSuccess',\r\n 'apiFail',\r\n 'apiException',\r\n 'apiAfter'\r\n])\r\n\r\nconst slots = useSlots()\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 if (slots.content) {\r\n // 自定义内容模式:弹窗内容由用户插槽 #content 提供,点击确认后请求 API\r\n try {\r\n await ElMessageBox.prompt(props.promptTitle, props.promptTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPlaceholder: props.promptPlaceholder,\r\n inputValue: props.promptDefault,\r\n // 允许自定义内容:message 设为空,插槽内容会被保留\r\n dangerouslyUseHTMLString: true,\r\n message: ''\r\n })\r\n emit('confirm')\r\n const success = await doRequest({})\r\n // API 请求成功(success=true)自动关闭弹窗,失败不关闭让用户继续修改\r\n if (success) {\r\n ElMessageBox.close()\r\n }\r\n } catch {\r\n emit('cancel')\r\n }\r\n return\r\n }\r\n\r\n // 默认单输入框模式\r\n let value: string\r\n try {\r\n const res = await ElMessageBox.prompt(props.promptTitle, props.promptTitle, {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n inputPlaceholder: props.promptPlaceholder,\r\n inputValue: props.promptDefault\r\n })\r\n value = res.value\r\n } catch {\r\n emit('cancel')\r\n return\r\n }\r\n emit('prompt', value)\r\n const success = await doRequest({ [props.paramKey]: value })\r\n // 根据 API 返回 success 决定是否自动关闭:成功关闭,失败不关闭\r\n if (success) {\r\n ElMessageBox.close()\r\n }\r\n}\r\n</script>\r\n"],"names":["props","__props","emit","__emit","slots","useSlots","loading","doRequest","useApiAction","onClick","event","ElMessageBox","value","tips","_createBlock","_component_el_tooltip","tipsType","placement","_createVNode","_component_el_button","_mergeProps","_ctx","_unref","_renderSlot","label","$attrs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,UAAMA,IAAQC,GAkBRC,IAAOC,GAYPC,IAAQC,EAAA,GACR,EAAE,SAAAC,GAAS,WAAAC,EAAA,IAAcC,EAAa;AAAA,MAC1C,QAAQ,MAAMR,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,mBAAeS,EAAQC,GAAmB;AAExC,UADAR,EAAK,SAASQ,CAAK,GACfN,EAAM,SAAS;AAEjB,YAAI;AACF,gBAAMO,EAAa,OAAOX,EAAM,aAAaA,EAAM,aAAa;AAAA,YAC9D,mBAAmB;AAAA,YACnB,kBAAkB;AAAA,YAClB,kBAAkBA,EAAM;AAAA,YACxB,YAAYA,EAAM;AAAA;AAAA,YAElB,0BAA0B;AAAA,YAC1B,SAAS;AAAA,UAAA,CACV,GACDE,EAAK,SAAS,GACE,MAAMK,EAAU,EAAE,KAGhCI,EAAa,MAAA;AAAA,QAEjB,QAAQ;AACN,UAAAT,EAAK,QAAQ;AAAA,QACf;AACA;AAAA,MACF;AAGA,UAAIU;AACJ,UAAI;AAOF,QAAAA,KANY,MAAMD,EAAa,OAAOX,EAAM,aAAaA,EAAM,aAAa;AAAA,UAC1E,mBAAmB;AAAA,UACnB,kBAAkB;AAAA,UAClB,kBAAkBA,EAAM;AAAA,UACxB,YAAYA,EAAM;AAAA,QAAA,CACnB,GACW;AAAA,MACd,QAAQ;AACN,QAAAE,EAAK,QAAQ;AACb;AAAA,MACF;AACA,MAAAA,EAAK,UAAUU,CAAK,GACJ,MAAML,EAAU,EAAE,CAACP,EAAM,QAAQ,GAAGY,GAAO,KAGzDD,EAAa,MAAA;AAAA,IAEjB;;;aA9GUE,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,EAAAhB,CAAA;AAAA,YAAU,SAAAG;AAAA,UAAA;uBAC7C,MAAwB;AAAA,cAAxBc,EAAwBF,yBAAxB,MAAwB;AAAA,oBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;;;yDAGlBV,EAEYK,GAFZC,EAEY,EAAA,KAAA,EAAA,GAFcK,EAAAA,QAAM;AAAA,QAAG,SAASH,EAAAhB,CAAA;AAAA,QAAU,SAAAG;AAAA,MAAA;mBACpD,MAAwB;AAAA,UAAxBc,EAAwBF,yBAAxB,MAAwB;AAAA,gBAAfG,EAAAA,KAAK,GAAA,CAAA;AAAA,UAAA;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as B, toRefs as L, computed as $, resolveComponent as i, resolveDirective as C, withDirectives as R, openBlock as o, createBlock as n, mergeProps as N, withCtx as l, createElementBlock as _, Fragment as x, renderList as W, unref as g, createElementVNode as h, renderSlot as s, createTextVNode as r, toDisplayString as u } from "vue";
2
- import { u as A } from "./useOptionsLoader-D0RTB_ar.mjs";
2
+ import { u as A } from "./useOptionsLoader-BwRdHDPL.mjs";
3
3
  import { o as E } from "./props-DAytpx7D.mjs";
4
4
  import { _ as F } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
5
5
  const M = { class: "wd-option-text" }, I = { class: "wd-option-text" }, O = /* @__PURE__ */ B({
@@ -126,4 +126,4 @@ const M = { class: "wd-option-text" }, I = { class: "wd-option-text" }, O = /* @
126
126
  export {
127
127
  z as W
128
128
  };
129
- //# sourceMappingURL=RadioList-DT-8WSN2.mjs.map
129
+ //# sourceMappingURL=RadioList-BIwUZ6lm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioList-DT-8WSN2.mjs","sources":["../../src/components/inputs/RadioList.vue"],"sourcesContent":["<template>\n <el-radio-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-radio-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-radio-button>\n <el-radio 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-radio>\n </template>\n </el-radio-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: 'WdRadioList', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: [String, Number, Boolean] as PropType<any>, default: undefined },\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_radio_group","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_radio_button","_component_el_tooltip","_createElementVNode","_hoisted_1","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_radio","_hoisted_2"],"mappings":"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"}
1
+ {"version":3,"file":"RadioList-BIwUZ6lm.mjs","sources":["../../src/components/inputs/RadioList.vue"],"sourcesContent":["<template>\n <el-radio-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-radio-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-radio-button>\n <el-radio 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-radio>\n </template>\n </el-radio-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: 'WdRadioList', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: [String, Number, Boolean] as PropType<any>, default: undefined },\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_radio_group","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_radio_button","_component_el_tooltip","_createElementVNode","_hoisted_1","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_radio","_hoisted_2"],"mappings":";;;;;;;;;;;;;;;;AA+CA,UAAMA,IAAQC,GAORC,IAAOC,GAEPC,IAAOC,EAAOL,CAAK,GACnB,EAAE,SAAAM,GAAS,SAAAC,EAAA,IAAYC,EAAiB;AAAA,MAC5C,KAAKJ,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,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,YAAYA,EAAK;AAAA,MACjB,MAAAF;AAAA,IAAA,CACD,GAEKO,IAAQC,EAAS;AAAA,MACrB,KAAK,MAAMV,EAAM;AAAA,MACjB,KAAK,CAACW,MAAQT,EAAK,qBAAqBS,CAAG;AAAA,IAAA,CAC5C;AAED,aAASC,EAASD,GAAU;AAC1B,MAAAT,EAAK,UAAUS,CAAG;AAAA,IACpB;;;AA7EE,aAAAE,GAAAC,EAAA,GAAAC,EAoCiBC,GApCjBC,EAoCiB;AAAA,oBAnCNR,EAAA;AAAA,sDAAAA,EAAK,QAAAS;AAAA,MAAA,GAENC,EAAAA,QAAM,EACb,UAAAP,EAAA,CAAgB,GAAA;AAAA,mBAEP,MAAsB;AAAA,kBAAhCQ,EA6BWC,GAAA,MAAAC,EA7BaC,EAAAjB,CAAA,GAAO,CAAdkB;iBAAsB,OAAOA,EAAI,KAAK;AAAA,UAAA;YAC9BvB,EAAA,oBAAvBc,EAakBU,GAAA;AAAA;cAbmB,OAAOD,EAAI;AAAA,YAAA;yBAC9C,MAUa;AAAA,gBATLA,EAAI,aADZT,EAUaW,GAAA;AAAA;kBARV,SAASF,EAAI;AAAA,kBACd,WAAU;AAAA,kBACV,QAAO;AAAA,kBACN,cAAY;AAAA,gBAAA;6BAEb,MAEO;AAAA,oBAFPG,EAEO,QAFPC,GAEO;AAAA,sBADLC,EAAkGC,EAAA,QAAA,WAAA;AAAA,wBAA3F,QAAQN,EAAI;AAAA,wBAAM,MAAMA,EAAI;AAAA,wBAAO,OAAOA,EAAI;AAAA,wBAAQ,MAAMA,EAAI;AAAA,sBAAA,GAAvE,MAAkG;AAAA,wBAAlBO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,sBAAA;;;;yCAG5FK,EAAyGC,EAAA,QAAA,WAAA;AAAA,kBAA3F,QAAQN,EAAI;AAAA,kBAAM,MAAMA,EAAI;AAAA,kBAAO,OAAOA,EAAI;AAAA,kBAAQ,MAAMA,EAAI;AAAA,gBAAA,GAA9E,MAAyG;AAAA,kBAAlBO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,gBAAA;;;yCAEjGT,EAaWkB,GAAA;AAAA;cAbO,OAAOT,EAAI;AAAA,YAAA;yBAC3B,MAUa;AAAA,gBATLA,EAAI,aADZT,EAUaW,GAAA;AAAA;kBARV,SAASF,EAAI;AAAA,kBACd,WAAU;AAAA,kBACV,QAAO;AAAA,kBACN,cAAY;AAAA,gBAAA;6BAEb,MAEO;AAAA,oBAFPG,EAEO,QAFPO,GAEO;AAAA,sBADLL,EAAkGC,EAAA,QAAA,WAAA;AAAA,wBAA3F,QAAQN,EAAI;AAAA,wBAAM,MAAMA,EAAI;AAAA,wBAAO,OAAOA,EAAI;AAAA,wBAAQ,MAAMA,EAAI;AAAA,sBAAA,GAAvE,MAAkG;AAAA,wBAAlBO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,sBAAA;;;;yCAG5FK,EAAyGC,EAAA,QAAA,WAAA;AAAA,kBAA3F,QAAQN,EAAI;AAAA,kBAAM,MAAMA,EAAI;AAAA,kBAAO,OAAOA,EAAI;AAAA,kBAAQ,MAAMA,EAAI;AAAA,gBAAA,GAA9E,MAAyG;AAAA,kBAAlBO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,gBAAA;;;;;;;;YA/BxFD,EAAAhB,CAAA,CAAO;AAAA,MAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { shallowRef as g, onMounted as b, defineComponent as q, watch as C, onUnmounted as h, renderSlot as v } from "vue";
2
- import { a as w, g as R, d as _, r as c } from "./http-DUPsbs2K.mjs";
2
+ import { a as w, g as R, d as _, r as c } from "./http-9ToPNkWJ.mjs";
3
3
  function O(n, s) {
4
4
  const e = g(p(n, s));
5
5
  return b(() => {
@@ -77,4 +77,4 @@ export {
77
77
  x as a,
78
78
  O as u
79
79
  };
80
- //# sourceMappingURL=Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs.map
80
+ //# sourceMappingURL=Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Requester.vue_vue_type_script_setup_true_lang-5B1V-53c.mjs","sources":["../../src/lib/composables/useConfig.ts","../../src/components/core/Requester.vue"],"sourcesContent":["import { onMounted, shallowRef } from 'vue'\nimport { getGlobalConfig, getComponentDefault } from '../core/config'\nimport { deepMerge } from '../core/utils'\nimport type { WorkDesktopConfig } from '../../types/config'\n\n/**\n * useConfig(PRD 5.3 / 5.2)\n *\n * 组件内合并三级配置:全局 componentDefault[组件名] → 本地 props。\n * 全局配置在组件 onMounted 时读取一次并缓存(运行中改配置只影响新挂载组件)。\n *\n * 返回一个响应式 ref,merge 后的组件配置对象:\n * componentDefault 的值作为默认,props 中非 undefined 的值覆盖。\n *\n * @example\n * const cfg = useConfig('WdDataGrid', props)\n * cfg.value.withPager\n */\nexport function useConfig<T extends Record<string, any> = Record<string, any>>(\n componentName?: string,\n props?: T\n) {\n const configRef = shallowRef<T>(buildComponentConfig<T>(componentName, props))\n\n onMounted(() => {\n // onMounted 时 install 已完成、window.workDesktopConfig 已就绪,再读一次\n configRef.value = buildComponentConfig<T>(componentName, props)\n })\n\n return configRef\n}\n\n/**\n * 非响应式:直接取当前全局 WorkDesktopConfig\n */\nexport function useGlobalConfig(): WorkDesktopConfig {\n return getGlobalConfig()\n}\n\nfunction buildComponentConfig<T extends Record<string, any>>(\n componentName?: string,\n props?: T\n): T {\n const componentDefaults = componentName ? getComponentDefault(componentName) : {}\n const localProps: Record<string, any> = {}\n if (props) {\n for (const [k, v] of Object.entries(props)) {\n if (v !== undefined) localProps[k] = v\n }\n }\n // 优先级:componentDefault < 本地 props\n return deepMerge<T>({} as T, componentDefaults, localProps)\n}\n","<template>\n <!-- 无默认插槽 -->\n <slot></slot>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * WdRequester 请求触发组件\n *\n * 使用 v-model 控制请求触发:开关变为 true 时发起请求;请求完成后自动设置为 false,\n * 等待开发者下一次将它变为 true 再触发。所有组件都基于本库公开请求核心 RequestAPI。\n *\n * 特性:\n * 1. 封装 get/post/put/delete/request 全部请求方法;\n * 2. 全周期 emit 事件:apiBefore 触发后允许开发者手动 abort 请求;\n * 3. 支持中途发起新请求:旧请求会自动被中断;\n * 4. 请求完成(成功/失败/异常)后自动将 v-model 置为 false;\n *\n * @example\n * <template>\n * <wd-requester\n * v-model=\"trigger\"\n * url=\"/api/save\"\n * method=\"post\"\n * @api-before=\"onApiBefore\"\n * @api-success=\"onSuccess\"\n * />\n * <el-button @click=\"trigger = true\">提交</el-button>\n * </template>\n */\nimport { onUnmounted, watch } from 'vue'\nimport { request, type ApiResult } from '../../lib/core/http'\nimport type { Method } from 'axios'\nimport type { ReqOptions } from '../../types/config'\nimport { useConfig } from '../../lib/composables/useConfig'\n\ndefineOptions({ name: 'WdRequester' })\n\ninterface Props {\n /** v-model 触发开关:true 则发起请求,完成后自动变 false */\n modelValue: boolean\n /** 请求 URL */\n url: string\n /** 请求方法,默认 post(可通过全局配置 page.componentDefault.WdRequester.method 覆盖) */\n method?: Method\n /** 请求参数(get/delete 放 query,post/put 放 body) */\n params?: any\n /** 请求选项(透传给 http):showLoading/showTips/tipsConfig/axiosConfig/signal(可通过全局配置 page.componentDefault.WdRequester.reqOptions 覆盖) */\n reqOptions?: ReqOptions\n}\n\nconst props = defineProps<Props>()\n\n// 合并三级配置:默认层(default-config 的 WdRequester)→ 全局层(componentDefault)→ 本地 props\n// 注意:url/params 属业务参数,实时读 props;method/reqOptions 属配置类,走合并结果\nconst config = useConfig<Record<string, any>>('WdRequester', props)\n\ninterface Emits {\n (e: 'update:modelValue', value: boolean): void\n (e: 'api-before', abort: () => void): void\n (e: 'api-success', result: ApiResult): void\n (e: 'api-fail', result: ApiResult): void\n (e: 'api-exception', error: any): void\n (e: 'api-after'): void\n}\n\nconst emit = defineEmits<Emits>()\n\nlet currentController: AbortController | null = null\n\n/**\n * 仅中断当前进行中的请求(不清引用)。\n * 传给 apiBefore 的 abort:中断后本请求仍走 finally 收尾(api-after + 复位开关)。\n */\nfunction abortActive() {\n currentController?.abort()\n}\n\n/**\n * 中断并清引用:用于外部关闭开关 / 组件卸载,不触发收尾事件。\n */\nfunction abortAndClear() {\n if (currentController) {\n currentController.abort()\n currentController = null\n }\n}\n\nasync function doRequest() {\n // 中断并清掉上一次请求(旧请求的收尾会被跳过,不触发 api-after)\n abortAndClear()\n\n const controller = new AbortController()\n currentController = controller\n\n // 组装请求选项:全局默认(reqOptions)→ 实例 props 覆盖 → 注入 abort signal\n const reqOpts: ReqOptions = {\n ...(config.value.reqOptions || {}),\n ...(props.reqOptions || {}),\n signal: controller.signal,\n }\n\n try {\n // 触发 apiBefore,允许开发者在事件中手动调用 abort() 中断本次请求\n emit('api-before', abortActive)\n\n // 如果在 apiBefore 中被手动中断:直接走收尾(api-after + 复位开关)\n if (controller.signal.aborted) {\n return\n }\n\n let result: ApiResult\n // 请求方法优先级:实例 props.method → 全局默认 config.method → 内置兜底 'post'\n const method = (props.method ?? config.value.method ?? 'post').toLowerCase() as 'get' | 'post' | 'put' | 'delete'\n\n if (method === 'get' || method === 'delete') {\n result = await request[method](props.url, props.params, reqOpts)\n } else {\n result = await request[method](props.url, props.params, reqOpts)\n }\n\n if (controller.signal.aborted) {\n // 已被中断,无需后续处理\n return\n }\n\n if (result.success) {\n emit('api-success', result)\n } else {\n emit('api-fail', result)\n }\n } catch (e) {\n if (controller.signal.aborted) {\n return\n }\n emit('api-exception', e)\n } finally {\n if (currentController === controller) {\n currentController = null\n emit('api-after')\n // 自动关闭触发开关\n emit('update:modelValue', false)\n }\n }\n}\n\n// 监听 v-model 开关:变为 true 就发起请求\nwatch(\n () => props.modelValue,\n (newVal) => {\n if (newVal === true) {\n doRequest()\n } else {\n // 外部关闭开关:中断进行中的请求(不触发收尾事件)\n abortAndClear()\n }\n },\n { immediate: true }\n)\n\nonUnmounted(() => {\n abortAndClear()\n})\n</script>\n\n<style scoped>\n</style>\n"],"names":["useConfig","componentName","props","configRef","shallowRef","buildComponentConfig","onMounted","useGlobalConfig","getGlobalConfig","componentDefaults","getComponentDefault","localProps","k","v","deepMerge","__props","config","emit","__emit","currentController","abortActive","abortAndClear","doRequest","controller","reqOpts","result","method","request","e","watch","newVal","onUnmounted","_renderSlot","_ctx"],"mappings":";;AAkBO,SAASA,EACdC,GACAC,GACA;AACA,QAAMC,IAAYC,EAAcC,EAAwBJ,GAAeC,CAAK,CAAC;AAE7E,SAAAI,EAAU,MAAM;AAEd,IAAAH,EAAU,QAAQE,EAAwBJ,GAAeC,CAAK;AAAA,EAChE,CAAC,GAEMC;AACT;AAKO,SAASI,IAAqC;AACnD,SAAOC,EAAA;AACT;AAEA,SAASH,EACPJ,GACAC,GACG;AACH,QAAMO,IAAoBR,IAAgBS,EAAoBT,CAAa,IAAI,CAAA,GACzEU,IAAkC,CAAA;AACxC,MAAIT;AACF,eAAW,CAACU,GAAGC,CAAC,KAAK,OAAO,QAAQX,CAAK;AACvC,MAAIW,MAAM,WAAWF,EAAWC,CAAC,IAAIC;AAIzC,SAAOC,EAAa,CAAA,GAASL,GAAmBE,CAAU;AAC5D;;;;;;;;;;;;;ACDA,UAAMT,IAAQa,GAIRC,IAAShB,EAA+B,eAAeE,CAAK,GAW5De,IAAOC;AAEb,QAAIC,IAA4C;AAMhD,aAASC,IAAc;AACrB,MAAAD,KAAA,QAAAA,EAAmB;AAAA,IACrB;AAKA,aAASE,IAAgB;AACvB,MAAIF,MACFA,EAAkB,MAAA,GAClBA,IAAoB;AAAA,IAExB;AAEA,mBAAeG,IAAY;AAEzB,MAAAD,EAAA;AAEA,YAAME,IAAa,IAAI,gBAAA;AACvB,MAAAJ,IAAoBI;AAGpB,YAAMC,IAAsB;AAAA,QAC1B,GAAIR,EAAO,MAAM,cAAc,CAAA;AAAA,QAC/B,GAAId,EAAM,cAAc,CAAA;AAAA,QACxB,QAAQqB,EAAW;AAAA,MAAA;AAGrB,UAAI;AAKF,YAHAN,EAAK,cAAcG,CAAW,GAG1BG,EAAW,OAAO;AACpB;AAGF,YAAIE;AAEJ,cAAMC,KAAUxB,EAAM,UAAUc,EAAO,MAAM,UAAU,QAAQ,YAAA;AAQ/D,YANIU,MAAW,SAASA,MAAW,WACjCD,IAAS,MAAME,EAAQD,CAAM,EAAExB,EAAM,KAAKA,EAAM,QAAQsB,CAAO,IAE/DC,IAAS,MAAME,EAAQD,CAAM,EAAExB,EAAM,KAAKA,EAAM,QAAQsB,CAAO,GAG7DD,EAAW,OAAO;AAEpB;AAGF,QAAIE,EAAO,UACTR,EAAK,eAAeQ,CAAM,IAE1BR,EAAK,YAAYQ,CAAM;AAAA,MAE3B,SAASG,GAAG;AACV,YAAIL,EAAW,OAAO;AACpB;AAEF,QAAAN,EAAK,iBAAiBW,CAAC;AAAA,MACzB,UAAA;AACE,QAAIT,MAAsBI,MACxBJ,IAAoB,MACpBF,EAAK,WAAW,GAEhBA,EAAK,qBAAqB,EAAK;AAAA,MAEnC;AAAA,IACF;AAGA,WAAAY;AAAA,MACE,MAAM3B,EAAM;AAAA,MACZ,CAAC4B,MAAW;AACV,QAAIA,MAAW,KACbR,EAAA,IAGAD,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBU,EAAY,MAAM;AAChB,MAAAV,EAAA;AAAA,IACF,CAAC,aAhKCW,EAAaC,EAAA,QAAA,SAAA;AAAA;;"}
1
+ {"version":3,"file":"Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs","sources":["../../src/lib/composables/useConfig.ts","../../src/components/core/Requester.vue"],"sourcesContent":["import { onMounted, shallowRef } from 'vue'\nimport { getGlobalConfig, getComponentDefault } from '../core/config'\nimport { deepMerge } from '../core/utils'\nimport type { WorkDesktopConfig } from '../../types/config'\n\n/**\n * useConfig(PRD 5.3 / 5.2)\n *\n * 组件内合并三级配置:全局 componentDefault[组件名] → 本地 props。\n * 全局配置在组件 onMounted 时读取一次并缓存(运行中改配置只影响新挂载组件)。\n *\n * 返回一个响应式 ref,merge 后的组件配置对象:\n * componentDefault 的值作为默认,props 中非 undefined 的值覆盖。\n *\n * @example\n * const cfg = useConfig('WdDataGrid', props)\n * cfg.value.withPager\n */\nexport function useConfig<T extends Record<string, any> = Record<string, any>>(\n componentName?: string,\n props?: T\n) {\n const configRef = shallowRef<T>(buildComponentConfig<T>(componentName, props))\n\n onMounted(() => {\n // onMounted 时 install 已完成、window.workDesktopConfig 已就绪,再读一次\n configRef.value = buildComponentConfig<T>(componentName, props)\n })\n\n return configRef\n}\n\n/**\n * 非响应式:直接取当前全局 WorkDesktopConfig\n */\nexport function useGlobalConfig(): WorkDesktopConfig {\n return getGlobalConfig()\n}\n\nfunction buildComponentConfig<T extends Record<string, any>>(\n componentName?: string,\n props?: T\n): T {\n const componentDefaults = componentName ? getComponentDefault(componentName) : {}\n const localProps: Record<string, any> = {}\n if (props) {\n for (const [k, v] of Object.entries(props)) {\n if (v !== undefined) localProps[k] = v\n }\n }\n // 优先级:componentDefault < 本地 props\n return deepMerge<T>({} as T, componentDefaults, localProps)\n}\n","<template>\n <!-- 无默认插槽 -->\n <slot></slot>\n</template>\n\n<script setup lang=\"ts\">\n/**\n * WdRequester 请求触发组件\n *\n * 使用 v-model 控制请求触发:开关变为 true 时发起请求;请求完成后自动设置为 false,\n * 等待开发者下一次将它变为 true 再触发。所有组件都基于本库公开请求核心 RequestAPI。\n *\n * 特性:\n * 1. 封装 get/post/put/delete/request 全部请求方法;\n * 2. 全周期 emit 事件:apiBefore 触发后允许开发者手动 abort 请求;\n * 3. 支持中途发起新请求:旧请求会自动被中断;\n * 4. 请求完成(成功/失败/异常)后自动将 v-model 置为 false;\n *\n * @example\n * <template>\n * <wd-requester\n * v-model=\"trigger\"\n * url=\"/api/save\"\n * method=\"post\"\n * @api-before=\"onApiBefore\"\n * @api-success=\"onSuccess\"\n * />\n * <el-button @click=\"trigger = true\">提交</el-button>\n * </template>\n */\nimport { onUnmounted, watch } from 'vue'\nimport { request, type ApiResult } from '../../lib/core/http'\nimport type { Method } from 'axios'\nimport type { ReqOptions } from '../../types/config'\nimport { useConfig } from '../../lib/composables/useConfig'\n\ndefineOptions({ name: 'WdRequester' })\n\ninterface Props {\n /** v-model 触发开关:true 则发起请求,完成后自动变 false */\n modelValue: boolean\n /** 请求 URL */\n url: string\n /** 请求方法,默认 post(可通过全局配置 page.componentDefault.WdRequester.method 覆盖) */\n method?: Method\n /** 请求参数(get/delete 放 query,post/put 放 body) */\n params?: any\n /** 请求选项(透传给 http):showLoading/showTips/tipsConfig/axiosConfig/signal(可通过全局配置 page.componentDefault.WdRequester.reqOptions 覆盖) */\n reqOptions?: ReqOptions\n}\n\nconst props = defineProps<Props>()\n\n// 合并三级配置:默认层(default-config 的 WdRequester)→ 全局层(componentDefault)→ 本地 props\n// 注意:url/params 属业务参数,实时读 props;method/reqOptions 属配置类,走合并结果\nconst config = useConfig<Record<string, any>>('WdRequester', props)\n\ninterface Emits {\n (e: 'update:modelValue', value: boolean): void\n (e: 'api-before', abort: () => void): void\n (e: 'api-success', result: ApiResult): void\n (e: 'api-fail', result: ApiResult): void\n (e: 'api-exception', error: any): void\n (e: 'api-after'): void\n}\n\nconst emit = defineEmits<Emits>()\n\nlet currentController: AbortController | null = null\n\n/**\n * 仅中断当前进行中的请求(不清引用)。\n * 传给 apiBefore 的 abort:中断后本请求仍走 finally 收尾(api-after + 复位开关)。\n */\nfunction abortActive() {\n currentController?.abort()\n}\n\n/**\n * 中断并清引用:用于外部关闭开关 / 组件卸载,不触发收尾事件。\n */\nfunction abortAndClear() {\n if (currentController) {\n currentController.abort()\n currentController = null\n }\n}\n\nasync function doRequest() {\n // 中断并清掉上一次请求(旧请求的收尾会被跳过,不触发 api-after)\n abortAndClear()\n\n const controller = new AbortController()\n currentController = controller\n\n // 组装请求选项:全局默认(reqOptions)→ 实例 props 覆盖 → 注入 abort signal\n const reqOpts: ReqOptions = {\n ...(config.value.reqOptions || {}),\n ...(props.reqOptions || {}),\n signal: controller.signal,\n }\n\n try {\n // 触发 apiBefore,允许开发者在事件中手动调用 abort() 中断本次请求\n emit('api-before', abortActive)\n\n // 如果在 apiBefore 中被手动中断:直接走收尾(api-after + 复位开关)\n if (controller.signal.aborted) {\n return\n }\n\n let result: ApiResult\n // 请求方法优先级:实例 props.method → 全局默认 config.method → 内置兜底 'post'\n const method = (props.method ?? config.value.method ?? 'post').toLowerCase() as 'get' | 'post' | 'put' | 'delete'\n\n if (method === 'get' || method === 'delete') {\n result = await request[method](props.url, props.params, reqOpts)\n } else {\n result = await request[method](props.url, props.params, reqOpts)\n }\n\n if (controller.signal.aborted) {\n // 已被中断,无需后续处理\n return\n }\n\n if (result.success) {\n emit('api-success', result)\n } else {\n emit('api-fail', result)\n }\n } catch (e) {\n if (controller.signal.aborted) {\n return\n }\n emit('api-exception', e)\n } finally {\n if (currentController === controller) {\n currentController = null\n emit('api-after')\n // 自动关闭触发开关\n emit('update:modelValue', false)\n }\n }\n}\n\n// 监听 v-model 开关:变为 true 就发起请求\nwatch(\n () => props.modelValue,\n (newVal) => {\n if (newVal === true) {\n doRequest()\n } else {\n // 外部关闭开关:中断进行中的请求(不触发收尾事件)\n abortAndClear()\n }\n },\n { immediate: true }\n)\n\nonUnmounted(() => {\n abortAndClear()\n})\n</script>\n\n<style scoped>\n</style>\n"],"names":["useConfig","componentName","props","configRef","shallowRef","buildComponentConfig","onMounted","useGlobalConfig","getGlobalConfig","componentDefaults","getComponentDefault","localProps","k","v","deepMerge","__props","config","emit","__emit","currentController","abortActive","abortAndClear","doRequest","controller","reqOpts","result","method","request","e","watch","newVal","onUnmounted","_renderSlot","_ctx"],"mappings":";;AAkBO,SAASA,EACdC,GACAC,GACA;AACA,QAAMC,IAAYC,EAAcC,EAAwBJ,GAAeC,CAAK,CAAC;AAE7E,SAAAI,EAAU,MAAM;AAEd,IAAAH,EAAU,QAAQE,EAAwBJ,GAAeC,CAAK;AAAA,EAChE,CAAC,GAEMC;AACT;AAKO,SAASI,IAAqC;AACnD,SAAOC,EAAA;AACT;AAEA,SAASH,EACPJ,GACAC,GACG;AACH,QAAMO,IAAoBR,IAAgBS,EAAoBT,CAAa,IAAI,CAAA,GACzEU,IAAkC,CAAA;AACxC,MAAIT;AACF,eAAW,CAACU,GAAGC,CAAC,KAAK,OAAO,QAAQX,CAAK;AACvC,MAAIW,MAAM,WAAWF,EAAWC,CAAC,IAAIC;AAIzC,SAAOC,EAAa,CAAA,GAASL,GAAmBE,CAAU;AAC5D;;;;;;;;;;;;;ACDA,UAAMT,IAAQa,GAIRC,IAAShB,EAA+B,eAAeE,CAAK,GAW5De,IAAOC;AAEb,QAAIC,IAA4C;AAMhD,aAASC,IAAc;AACrB,MAAAD,KAAA,QAAAA,EAAmB;AAAA,IACrB;AAKA,aAASE,IAAgB;AACvB,MAAIF,MACFA,EAAkB,MAAA,GAClBA,IAAoB;AAAA,IAExB;AAEA,mBAAeG,IAAY;AAEzB,MAAAD,EAAA;AAEA,YAAME,IAAa,IAAI,gBAAA;AACvB,MAAAJ,IAAoBI;AAGpB,YAAMC,IAAsB;AAAA,QAC1B,GAAIR,EAAO,MAAM,cAAc,CAAA;AAAA,QAC/B,GAAId,EAAM,cAAc,CAAA;AAAA,QACxB,QAAQqB,EAAW;AAAA,MAAA;AAGrB,UAAI;AAKF,YAHAN,EAAK,cAAcG,CAAW,GAG1BG,EAAW,OAAO;AACpB;AAGF,YAAIE;AAEJ,cAAMC,KAAUxB,EAAM,UAAUc,EAAO,MAAM,UAAU,QAAQ,YAAA;AAQ/D,YANIU,MAAW,SAASA,MAAW,WACjCD,IAAS,MAAME,EAAQD,CAAM,EAAExB,EAAM,KAAKA,EAAM,QAAQsB,CAAO,IAE/DC,IAAS,MAAME,EAAQD,CAAM,EAAExB,EAAM,KAAKA,EAAM,QAAQsB,CAAO,GAG7DD,EAAW,OAAO;AAEpB;AAGF,QAAIE,EAAO,UACTR,EAAK,eAAeQ,CAAM,IAE1BR,EAAK,YAAYQ,CAAM;AAAA,MAE3B,SAASG,GAAG;AACV,YAAIL,EAAW,OAAO;AACpB;AAEF,QAAAN,EAAK,iBAAiBW,CAAC;AAAA,MACzB,UAAA;AACE,QAAIT,MAAsBI,MACxBJ,IAAoB,MACpBF,EAAK,WAAW,GAEhBA,EAAK,qBAAqB,EAAK;AAAA,MAEnC;AAAA,IACF;AAGA,WAAAY;AAAA,MACE,MAAM3B,EAAM;AAAA,MACZ,CAAC4B,MAAW;AACV,QAAIA,MAAW,KACbR,EAAA,IAGAD,EAAA;AAAA,MAEJ;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBU,EAAY,MAAM;AAChB,MAAAV,EAAA;AAAA,IACF,CAAC,aAhKCW,EAAaC,EAAA,QAAA,SAAA;AAAA;;"}
@@ -151,8 +151,8 @@ const fe = { class: "wd-search-panel" }, he = { class: "wd-search-panel__row wd-
151
151
  ]);
152
152
  };
153
153
  }
154
- }), Pe = /* @__PURE__ */ pe(_e, [["__scopeId", "data-v-bcc17462"]]);
154
+ }), Pe = /* @__PURE__ */ pe(_e, [["__scopeId", "data-v-13de410a"]]);
155
155
  export {
156
156
  Pe as W
157
157
  };
158
- //# sourceMappingURL=SearchPanel-xQ1hPaNq.mjs.map
158
+ //# sourceMappingURL=SearchPanel-DPlWWuXb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchPanel-xQ1hPaNq.mjs","sources":["../../src/components/form/SearchPanel.vue"],"sourcesContent":["<template>\n <div class=\"wd-search-panel\" v-loading=\"loading\">\n <!-- 搜索表单:整体一个 el-form,显示项和隐藏项分两行布局,都在同一个表单作用域中 -->\n <el-form\n ref=\"formRef\"\n :model=\"searchModel\"\n :inline=\"true\"\n :label-width=\"labelWidth\"\n v-bind=\"$attrs\"\n @submit.prevent\n >\n <!-- 第一行:默认搜索项 + 右侧操作按钮,布局不随隐藏项变化 -->\n <div class=\"wd-search-panel__row wd-search-panel__row--primary\">\n <div class=\"wd-search-panel__fields\">\n <div ref=\"primaryRef\" class=\"wd-search-panel__primary\" :class=\"{ 'is-collapsed': collapsePrimary }\">\n <slot v-bind=\"{ model: searchModel }\" />\n </div>\n </div>\n\n <!-- 右侧操作列(搜索 / 重置 / 展开),固定宽度、按钮横排一行不折行 -->\n <div v-if=\"withActions\" class=\"wd-search-panel__actions\" :style=\"actionStyle\">\n <slot name=\"actions\" :search=\"onSearch\" :reset=\"onReset\">\n <el-button type=\"primary\" :loading=\"loading\" @click=\"onSearch\">{{ searchText }}</el-button>\n <el-button @click=\"onReset\">{{ resetText }}</el-button>\n <el-button v-if=\"canCollapse\" link type=\"primary\" @click=\"toggleExpand\">\n {{ expanded ? collapseText : expandText }}\n </el-button>\n </slot>\n </div>\n </div>\n\n <!-- 第二行:隐藏搜索条件区,整行平顺滑出/收起,仍然在同一个 el-form 内 -->\n <div\n v-if=\"hasMore\"\n class=\"wd-search-panel__more-wrap\"\n :class=\"{ 'is-open': expanded }\"\n :aria-hidden=\"!expanded ? 'true' : undefined\"\n >\n <div class=\"wd-search-panel__more\">\n <slot name=\"more\" v-bind=\"{ model: searchModel }\" />\n </div>\n </div>\n </el-form>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, onMounted, onBeforeUnmount, getCurrentInstance, useSlots, nextTick } from 'vue'\nimport { searchDataGrid, resetSearchDataGrid } from '../../lib/core/linkage'\nimport { filterProp, headRefreshDatagridProp } from '../common/props'\n\ndefineOptions({ name: 'WdSearchPanel', inheritAttrs: false })\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n /** 是否可折叠(默认 true:面板自带 展开/收起 按钮;有 more 插槽时折叠 more 区,无 more 插槽时折叠默认区整体) */\n collapsible: { type: Boolean, default: true },\n /** 是否展开(v-model:expand) */\n expand: { type: Boolean, default: undefined },\n /** 默认是否展开 */\n defaultExpand: { type: Boolean, default: false },\n /** 是否内置查询/重置按钮 */\n withActions: { type: Boolean, default: true },\n searchText: { type: String, default: '搜索' },\n resetText: { type: String, default: '重置' },\n expandText: { type: String, default: '展开' },\n collapseText: { type: String, default: '收起' },\n labelWidth: { type: [String, Number], default: '80px' },\n /** 操作列宽度:默认 'auto' 随按钮内容自适应;数字按 px;也可传 CSS 长度(如 '120px') */\n actionWidth: { type: [String, Number], default: 'auto' }\n})\n\nconst emit = defineEmits(['search', 'reset', 'expand-change', 'update:expand'])\n\nconst formRef = ref<any>(null)\nconst primaryRef = ref<HTMLElement | null>(null)\nconst loading = ref(false)\nconst searchModel = reactive<Record<string, any>>({})\nconst slots = useSlots()\n\n// 是否提供了 more 插槽(隐藏搜索项目)\nconst hasMore = computed(() => !!slots.more)\n\n// 折叠行高(与 .wd-search-panel__primary.is-collapsed 的 max-height 保持一致)\nconst COLLAPSE_MAX_HEIGHT = 40\n// 无 more 插槽时:默认区完整内容是否超出折叠行高(超出才存在被隐藏的搜索条件)\nconst primaryOverflow = ref(false)\n\n// 是否存在可隐藏的搜索条件:有 more 插槽恒有;无 more 插槽时默认区超出折叠行高才有\nconst hasHidden = computed(() => hasMore.value || primaryOverflow.value)\n// 折叠能力:允许折叠且确实存在隐藏条件时,才显示 展开/收起 按钮\nconst canCollapse = computed(() => props.collapsible && hasHidden.value)\n\n// 展开状态(canCollapse 时生效)\nconst innerExpanded = ref(props.defaultExpand)\nconst expanded = computed(() =>\n canCollapse.value ? (props.expand !== undefined ? !!props.expand : innerExpanded.value) : true\n)\nconst collapsed = computed(() => canCollapse.value && !expanded.value)\n// 无 more 插槽时走旧行为:折叠默认区整体;有 more 插槽时默认区始终完整展示\nconst collapsePrimary = computed(() => collapsed.value && !hasMore.value)\n\n/** 测量默认区内容是否超出折叠行高(scrollHeight 包含因 overflow 隐藏的内容,折叠态下也能测到完整高度) */\nfunction measurePrimary() {\n const el = primaryRef.value\n if (!el) return\n primaryOverflow.value = el.scrollHeight > COLLAPSE_MAX_HEIGHT + 1\n}\n\n/** 操作列样式:默认随内容自适应;显式传宽度时固定宽度 */\nconst actionStyle = computed(() => {\n const w = props.actionWidth\n if (w === 'auto' || w === '' || w == null) return undefined\n const width = typeof w === 'number' ? `${w}px` : w\n return { width, flex: '0 0 auto' }\n})\n\nfunction toggleExpand() {\n const next = !expanded.value\n innerExpanded.value = next\n emit('update:expand', next)\n emit('expand-change', next)\n}\n\nfunction getSearchParams() {\n return { ...searchModel }\n}\n\nfunction onSearch() {\n const params = getSearchParams()\n emit('search', params)\n // 声明式联动:刷新同 filter 组 DataGrid(重置到第一页)\n if (props.headRefreshDatagrid) {\n searchDataGrid(params, props.headRefreshDatagrid, props.filter)\n }\n}\n\nfunction onReset() {\n // 清空表单字段\n Object.keys(searchModel).forEach((k) => delete searchModel[k])\n formRef.value?.clearValidate?.()\n emit('reset')\n if (props.headRefreshDatagrid) {\n resetSearchDataGrid(props.headRefreshDatagrid, props.filter)\n }\n}\n\nfunction expand() {\n innerExpanded.value = true\n emit('update:expand', true)\n}\nfunction collapse() {\n innerExpanded.value = false\n emit('update:expand', false)\n}\nfunction resetForm() {\n onReset()\n}\n\n// HTML 场景:插槽 v-model=\"q.xxx\" 需要根模板作用域可见 q\nconst instance = getCurrentInstance()\nlet resizeObserver: ResizeObserver | null = null\nonMounted(() => {\n const appContext = instance?.appContext\n if (appContext) {\n appContext.config.globalProperties.q = searchModel\n }\n // 初始测量 + 监听默认区尺寸/窗口宽度变化:无 more 插槽时据此判断是否存在隐藏条件\n nextTick(measurePrimary)\n if (typeof ResizeObserver !== 'undefined' && primaryRef.value) {\n resizeObserver = new ResizeObserver(() => measurePrimary())\n resizeObserver.observe(primaryRef.value)\n }\n window.addEventListener('resize', measurePrimary)\n})\nonBeforeUnmount(() => {\n const appContext = instance?.appContext\n if (appContext?.config?.globalProperties?.q === searchModel) {\n delete appContext.config.globalProperties.q\n }\n resizeObserver?.disconnect()\n window.removeEventListener('resize', measurePrimary)\n})\n\ndefineExpose({ expand, collapse, resetForm, getSearchParams })\n</script>\n\n<style scoped>\n.wd-search-panel {\n width: 100%;\n background: var(--wd-bg-color, #fff);\n padding: var(--wd-spacing-base, 8px) var(--wd-spacing-base, 12px) 0;\n box-sizing: border-box;\n}\n/* 第一行:默认搜索项(fields)+ 右侧操作列(actions),grid 三列布局锁定空间,布局稳定不受第二行影响\n * grid-template-columns: 1fr auto; —— 左侧搜索区自动占满剩余空间,右侧操作列宽度固定(随内容自适应或显式指定)\n * 避免 flex 压缩挤压导致最后一项换行不自然,结尾总是整齐\n */\n.wd-search-panel__row {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: flex-start;\n column-gap: var(--wd-spacing-base, 12px);\n padding-bottom: var(--wd-spacing-base, 4px);\n}\n.wd-search-panel__fields {\n min-width: 0;\n}\n/* 旧折叠模式(无 more 插槽):默认区超出一行隐藏 */\n.wd-search-panel__primary.is-collapsed {\n max-height: 40px;\n overflow: hidden;\n}\n/* 第二行:隐藏搜索条件区(独立容器 + 独立 el-form 作用域)。\n 外层 grid 行高 0fr→1fr 动画实现平顺滑出/收起;visibility 延迟隐藏,收起后不占位、不可聚焦 */\n.wd-search-panel__more-wrap {\n display: grid;\n grid-template-rows: 0fr;\n visibility: hidden;\n transition: grid-template-rows 0.25s ease, visibility 0s linear 0.25s;\n}\n.wd-search-panel__more-wrap.is-open {\n grid-template-rows: 1fr;\n visibility: visible;\n transition: grid-template-rows 0.25s ease;\n}\n.wd-search-panel__more {\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n padding-top: var(--wd-spacing-base, 6px);\n border-top: 1px dashed var(--wd-border-color-light, #e4e7ed);\n}\n/* 右侧操作列:按钮横排一行、不换行/不折行(宽度默认随内容,可经 actionWidth 显式固定) */\n.wd-search-panel__actions {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 0px;\n white-space: nowrap;\n}\n.wd-search-panel__actions :deep(.el-button) {\n white-space: nowrap;\n}\n\n/* SearchPanel 内让表单项更紧凑 */\n:deep(.el-form--inline .el-form-item) {\n margin-bottom: 4px;\n margin-right: 12px;\n}\n:deep(.el-form-item) {\n margin-bottom: 4px;\n}\n:deep(.el-form-item__label) {\n line-height: 30px;\n}\n:deep(.el-form-item__content) {\n line-height: 30px;\n}\n</style>\n"],"names":["COLLAPSE_MAX_HEIGHT","props","__props","emit","__emit","formRef","ref","primaryRef","loading","searchModel","reactive","slots","useSlots","hasMore","computed","primaryOverflow","hasHidden","canCollapse","innerExpanded","expanded","collapsed","collapsePrimary","measurePrimary","el","actionStyle","w","toggleExpand","next","getSearchParams","onSearch","params","searchDataGrid","onReset","k","_b","_a","resetSearchDataGrid","expand","collapse","resetForm","instance","getCurrentInstance","resizeObserver","onMounted","appContext","nextTick","onBeforeUnmount","__expose","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_el_form","_mergeProps","$attrs","_createElementVNode","_hoisted_2","_hoisted_3","_normalizeClass","_renderSlot","_ctx","_component_el_button","_createBlock","_hoisted_5"],"mappings":"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"}
1
+ {"version":3,"file":"SearchPanel-DPlWWuXb.mjs","sources":["../../src/components/form/SearchPanel.vue"],"sourcesContent":["<template>\n <div class=\"wd-search-panel\" v-loading=\"loading\">\n <!-- 搜索表单:整体一个 el-form,显示项和隐藏项分两行布局,都在同一个表单作用域中 -->\n <el-form\n ref=\"formRef\"\n :model=\"searchModel\"\n :inline=\"true\"\n :label-width=\"labelWidth\"\n v-bind=\"$attrs\"\n @submit.prevent\n >\n <!-- 第一行:默认搜索项 + 右侧操作按钮,布局不随隐藏项变化 -->\n <div class=\"wd-search-panel__row wd-search-panel__row--primary\">\n <div class=\"wd-search-panel__fields\">\n <div ref=\"primaryRef\" class=\"wd-search-panel__primary\" :class=\"{ 'is-collapsed': collapsePrimary }\">\n <slot v-bind=\"{ model: searchModel }\" />\n </div>\n </div>\n\n <!-- 右侧操作列(搜索 / 重置 / 展开),固定宽度、按钮横排一行不折行 -->\n <div v-if=\"withActions\" class=\"wd-search-panel__actions\" :style=\"actionStyle\">\n <slot name=\"actions\" :search=\"onSearch\" :reset=\"onReset\">\n <el-button type=\"primary\" :loading=\"loading\" @click=\"onSearch\">{{ searchText }}</el-button>\n <el-button @click=\"onReset\">{{ resetText }}</el-button>\n <el-button v-if=\"canCollapse\" link type=\"primary\" @click=\"toggleExpand\">\n {{ expanded ? collapseText : expandText }}\n </el-button>\n </slot>\n </div>\n </div>\n\n <!-- 第二行:隐藏搜索条件区,整行平顺滑出/收起,仍然在同一个 el-form 内 -->\n <div\n v-if=\"hasMore\"\n class=\"wd-search-panel__more-wrap\"\n :class=\"{ 'is-open': expanded }\"\n :aria-hidden=\"!expanded ? 'true' : undefined\"\n >\n <div class=\"wd-search-panel__more\">\n <slot name=\"more\" v-bind=\"{ model: searchModel }\" />\n </div>\n </div>\n </el-form>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, reactive, computed, onMounted, onBeforeUnmount, getCurrentInstance, useSlots, nextTick } from 'vue'\nimport { searchDataGrid, resetSearchDataGrid } from '../../lib/core/linkage'\nimport { filterProp, headRefreshDatagridProp } from '../common/props'\n\ndefineOptions({ name: 'WdSearchPanel', inheritAttrs: false })\n\nconst props = defineProps({\n ...filterProp,\n ...headRefreshDatagridProp,\n /** 是否可折叠(默认 true:面板自带 展开/收起 按钮;有 more 插槽时折叠 more 区,无 more 插槽时折叠默认区整体) */\n collapsible: { type: Boolean, default: true },\n /** 是否展开(v-model:expand) */\n expand: { type: Boolean, default: undefined },\n /** 默认是否展开 */\n defaultExpand: { type: Boolean, default: false },\n /** 是否内置查询/重置按钮 */\n withActions: { type: Boolean, default: true },\n searchText: { type: String, default: '搜索' },\n resetText: { type: String, default: '重置' },\n expandText: { type: String, default: '展开' },\n collapseText: { type: String, default: '收起' },\n labelWidth: { type: [String, Number], default: '80px' },\n /** 操作列宽度:默认 'auto' 随按钮内容自适应;数字按 px;也可传 CSS 长度(如 '120px') */\n actionWidth: { type: [String, Number], default: 'auto' }\n})\n\nconst emit = defineEmits(['search', 'reset', 'expand-change', 'update:expand'])\n\nconst formRef = ref<any>(null)\nconst primaryRef = ref<HTMLElement | null>(null)\nconst loading = ref(false)\nconst searchModel = reactive<Record<string, any>>({})\nconst slots = useSlots()\n\n// 是否提供了 more 插槽(隐藏搜索项目)\nconst hasMore = computed(() => !!slots.more)\n\n// 折叠行高(与 .wd-search-panel__primary.is-collapsed 的 max-height 保持一致)\nconst COLLAPSE_MAX_HEIGHT = 40\n// 无 more 插槽时:默认区完整内容是否超出折叠行高(超出才存在被隐藏的搜索条件)\nconst primaryOverflow = ref(false)\n\n// 是否存在可隐藏的搜索条件:有 more 插槽恒有;无 more 插槽时默认区超出折叠行高才有\nconst hasHidden = computed(() => hasMore.value || primaryOverflow.value)\n// 折叠能力:允许折叠且确实存在隐藏条件时,才显示 展开/收起 按钮\nconst canCollapse = computed(() => props.collapsible && hasHidden.value)\n\n// 展开状态(canCollapse 时生效)\nconst innerExpanded = ref(props.defaultExpand)\nconst expanded = computed(() =>\n canCollapse.value ? (props.expand !== undefined ? !!props.expand : innerExpanded.value) : true\n)\nconst collapsed = computed(() => canCollapse.value && !expanded.value)\n// 无 more 插槽时走旧行为:折叠默认区整体;有 more 插槽时默认区始终完整展示\nconst collapsePrimary = computed(() => collapsed.value && !hasMore.value)\n\n/** 测量默认区内容是否超出折叠行高(scrollHeight 包含因 overflow 隐藏的内容,折叠态下也能测到完整高度) */\nfunction measurePrimary() {\n const el = primaryRef.value\n if (!el) return\n primaryOverflow.value = el.scrollHeight > COLLAPSE_MAX_HEIGHT + 1\n}\n\n/** 操作列样式:默认随内容自适应;显式传宽度时固定宽度 */\nconst actionStyle = computed(() => {\n const w = props.actionWidth\n if (w === 'auto' || w === '' || w == null) return undefined\n const width = typeof w === 'number' ? `${w}px` : w\n return { width, flex: '0 0 auto' }\n})\n\nfunction toggleExpand() {\n const next = !expanded.value\n innerExpanded.value = next\n emit('update:expand', next)\n emit('expand-change', next)\n}\n\nfunction getSearchParams() {\n return { ...searchModel }\n}\n\nfunction onSearch() {\n const params = getSearchParams()\n emit('search', params)\n // 声明式联动:刷新同 filter 组 DataGrid(重置到第一页)\n if (props.headRefreshDatagrid) {\n searchDataGrid(params, props.headRefreshDatagrid, props.filter)\n }\n}\n\nfunction onReset() {\n // 清空表单字段\n Object.keys(searchModel).forEach((k) => delete searchModel[k])\n formRef.value?.clearValidate?.()\n emit('reset')\n if (props.headRefreshDatagrid) {\n resetSearchDataGrid(props.headRefreshDatagrid, props.filter)\n }\n}\n\nfunction expand() {\n innerExpanded.value = true\n emit('update:expand', true)\n}\nfunction collapse() {\n innerExpanded.value = false\n emit('update:expand', false)\n}\nfunction resetForm() {\n onReset()\n}\n\n// HTML 场景:插槽 v-model=\"q.xxx\" 需要根模板作用域可见 q\nconst instance = getCurrentInstance()\nlet resizeObserver: ResizeObserver | null = null\nonMounted(() => {\n const appContext = instance?.appContext\n if (appContext) {\n appContext.config.globalProperties.q = searchModel\n }\n // 初始测量 + 监听默认区尺寸/窗口宽度变化:无 more 插槽时据此判断是否存在隐藏条件\n nextTick(measurePrimary)\n if (typeof ResizeObserver !== 'undefined' && primaryRef.value) {\n resizeObserver = new ResizeObserver(() => measurePrimary())\n resizeObserver.observe(primaryRef.value)\n }\n window.addEventListener('resize', measurePrimary)\n})\nonBeforeUnmount(() => {\n const appContext = instance?.appContext\n if (appContext?.config?.globalProperties?.q === searchModel) {\n delete appContext.config.globalProperties.q\n }\n resizeObserver?.disconnect()\n window.removeEventListener('resize', measurePrimary)\n})\n\ndefineExpose({ expand, collapse, resetForm, getSearchParams })\n</script>\n\n<style scoped>\n.wd-search-panel {\n width: 100%;\n /* 组件级令牌回退链:皮肤可单独定制 SearchPanel */\n background: var(--wd-search-bg, var(--wd-bg-color, #fff));\n /* 背景素材:皮肤可挂纹理/图片(须置于 background 简写之后,否则被简写重置) */\n background-image: var(--wd-search-bg-image, none);\n padding: var(--wd-search-padding, var(--wd-spacing-base, 8px) var(--wd-spacing-base, 12px) 0);\n box-sizing: border-box;\n}\n/* 第一行:默认搜索项(fields)+ 右侧操作列(actions),grid 三列布局锁定空间,布局稳定不受第二行影响\n * grid-template-columns: 1fr auto; —— 左侧搜索区自动占满剩余空间,右侧操作列宽度固定(随内容自适应或显式指定)\n * 避免 flex 压缩挤压导致最后一项换行不自然,结尾总是整齐\n */\n.wd-search-panel__row {\n display: grid;\n grid-template-columns: 1fr auto;\n align-items: flex-start;\n column-gap: var(--wd-spacing-base, 12px);\n padding-bottom: var(--wd-spacing-base, 4px);\n}\n.wd-search-panel__fields {\n min-width: 0;\n}\n/* 旧折叠模式(无 more 插槽):默认区超出一行隐藏 */\n.wd-search-panel__primary.is-collapsed {\n max-height: 40px;\n overflow: hidden;\n}\n/* 第二行:隐藏搜索条件区(独立容器 + 独立 el-form 作用域)。\n 外层 grid 行高 0fr→1fr 动画实现平顺滑出/收起;visibility 延迟隐藏,收起后不占位、不可聚焦 */\n.wd-search-panel__more-wrap {\n display: grid;\n grid-template-rows: 0fr;\n visibility: hidden;\n transition: grid-template-rows 0.25s ease, visibility 0s linear 0.25s;\n}\n.wd-search-panel__more-wrap.is-open {\n grid-template-rows: 1fr;\n visibility: visible;\n transition: grid-template-rows 0.25s ease;\n}\n.wd-search-panel__more {\n overflow: hidden;\n min-height: 0;\n box-sizing: border-box;\n padding-top: var(--wd-spacing-base, 6px);\n border-top: var(--wd-border-width, 1px) dashed var(--wd-border-color-light, #e4e7ed);\n}\n/* 右侧操作列:按钮横排一行、不换行/不折行(宽度默认随内容,可经 actionWidth 显式固定) */\n.wd-search-panel__actions {\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n gap: 0px;\n white-space: nowrap;\n}\n.wd-search-panel__actions :deep(.el-button) {\n white-space: nowrap;\n}\n\n/* SearchPanel 内让表单项更紧凑 */\n:deep(.el-form--inline .el-form-item) {\n margin-bottom: 4px;\n margin-right: 12px;\n}\n:deep(.el-form-item) {\n margin-bottom: 4px;\n}\n:deep(.el-form-item__label) {\n line-height: 30px;\n}\n:deep(.el-form-item__content) {\n line-height: 30px;\n}\n</style>\n"],"names":["COLLAPSE_MAX_HEIGHT","props","__props","emit","__emit","formRef","ref","primaryRef","loading","searchModel","reactive","slots","useSlots","hasMore","computed","primaryOverflow","hasHidden","canCollapse","innerExpanded","expanded","collapsed","collapsePrimary","measurePrimary","el","actionStyle","w","toggleExpand","next","getSearchParams","onSearch","params","searchDataGrid","onReset","k","_b","_a","resetSearchDataGrid","expand","collapse","resetForm","instance","getCurrentInstance","resizeObserver","onMounted","appContext","nextTick","onBeforeUnmount","__expose","_withDirectives","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_component_el_form","_mergeProps","$attrs","_createElementVNode","_hoisted_2","_hoisted_3","_normalizeClass","_renderSlot","_ctx","_component_el_button","_createBlock","_hoisted_5"],"mappings":";;;;yNAqFMA,KAAsB;;;;;;;;;;;;;;;;;;;;;;;;;AAhC5B,UAAMC,IAAQC,GAoBRC,IAAOC,GAEPC,IAAUC,EAAS,IAAI,GACvBC,IAAaD,EAAwB,IAAI,GACzCE,IAAUF,EAAI,EAAK,GACnBG,IAAcC,EAA8B,EAAE,GAC9CC,IAAQC,EAAA,GAGRC,IAAUC,EAAS,MAAM,CAAC,CAACH,EAAM,IAAI,GAKrCI,IAAkBT,EAAI,EAAK,GAG3BU,IAAYF,EAAS,MAAMD,EAAQ,SAASE,EAAgB,KAAK,GAEjEE,IAAcH,EAAS,MAAMb,EAAM,eAAee,EAAU,KAAK,GAGjEE,IAAgBZ,EAAIL,EAAM,aAAa,GACvCkB,IAAWL;AAAA,MAAS,MACxBG,EAAY,QAAShB,EAAM,WAAW,SAAY,CAAC,CAACA,EAAM,SAASiB,EAAc,QAAS;AAAA,IAAA,GAEtFE,IAAYN,EAAS,MAAMG,EAAY,SAAS,CAACE,EAAS,KAAK,GAE/DE,IAAkBP,EAAS,MAAMM,EAAU,SAAS,CAACP,EAAQ,KAAK;AAGxE,aAASS,IAAiB;AACxB,YAAMC,IAAKhB,EAAW;AACtB,MAAKgB,MACLR,EAAgB,QAAQQ,EAAG,eAAevB,KAAsB;AAAA,IAClE;AAGA,UAAMwB,IAAcV,EAAS,MAAM;AACjC,YAAMW,IAAIxB,EAAM;AAChB,aAAIwB,MAAM,UAAUA,MAAM,MAAMA,KAAK,OAAM,SAEpC,EAAE,OADK,OAAOA,KAAM,WAAW,GAAGA,CAAC,OAAOA,GACjC,MAAM,WAAA;AAAA,IACxB,CAAC;AAED,aAASC,IAAe;AACtB,YAAMC,IAAO,CAACR,EAAS;AACvB,MAAAD,EAAc,QAAQS,GACtBxB,EAAK,iBAAiBwB,CAAI,GAC1BxB,EAAK,iBAAiBwB,CAAI;AAAA,IAC5B;AAEA,aAASC,IAAkB;AACzB,aAAO,EAAE,GAAGnB,EAAA;AAAA,IACd;AAEA,aAASoB,IAAW;AAClB,YAAMC,IAASF,EAAA;AACf,MAAAzB,EAAK,UAAU2B,CAAM,GAEjB7B,EAAM,uBACR8B,GAAeD,GAAQ7B,EAAM,qBAAqBA,EAAM,MAAM;AAAA,IAElE;AAEA,aAAS+B,IAAU;;AAEjB,aAAO,KAAKvB,CAAW,EAAE,QAAQ,CAACwB,MAAM,OAAOxB,EAAYwB,CAAC,CAAC,IAC7DC,KAAAC,IAAA9B,EAAQ,UAAR,gBAAA8B,EAAe,kBAAf,QAAAD,EAAA,KAAAC,IACAhC,EAAK,OAAO,GACRF,EAAM,uBACRmC,GAAoBnC,EAAM,qBAAqBA,EAAM,MAAM;AAAA,IAE/D;AAEA,aAASoC,IAAS;AAChB,MAAAnB,EAAc,QAAQ,IACtBf,EAAK,iBAAiB,EAAI;AAAA,IAC5B;AACA,aAASmC,IAAW;AAClB,MAAApB,EAAc,QAAQ,IACtBf,EAAK,iBAAiB,EAAK;AAAA,IAC7B;AACA,aAASoC,IAAY;AACnB,MAAAP,EAAA;AAAA,IACF;AAGA,UAAMQ,IAAWC,EAAA;AACjB,QAAIC,IAAwC;AAC5C,WAAAC,EAAU,MAAM;AACd,YAAMC,IAAaJ,KAAA,gBAAAA,EAAU;AAC7B,MAAII,MACFA,EAAW,OAAO,iBAAiB,IAAInC,IAGzCoC,GAASvB,CAAc,GACnB,OAAO,iBAAmB,OAAef,EAAW,UACtDmC,IAAiB,IAAI,eAAe,MAAMpB,GAAgB,GAC1DoB,EAAe,QAAQnC,EAAW,KAAK,IAEzC,OAAO,iBAAiB,UAAUe,CAAc;AAAA,IAClD,CAAC,GACDwB,GAAgB,MAAM;;AACpB,YAAMF,IAAaJ,KAAA,gBAAAA,EAAU;AAC7B,QAAIN,KAAAC,IAAAS,KAAA,gBAAAA,EAAY,WAAZ,gBAAAT,EAAoB,qBAApB,gBAAAD,EAAsC,OAAMzB,KAC9C,OAAOmC,EAAW,OAAO,iBAAiB,GAE5CF,KAAA,QAAAA,EAAgB,cAChB,OAAO,oBAAoB,UAAUpB,CAAc;AAAA,IACrD,CAAC,GAEDyB,EAAa,EAAE,QAAAV,GAAQ,UAAAC,GAAU,WAAAC,GAAW,iBAAAX,GAAiB;;AAxL3D,aAAAoB,IAAAC,EAAA,GAAAC,EA0CM,OA1CNC,IA0CM;AAAA,QAxCJC,EAuCUC,GAvCVC,GAuCU;AAAA,mBAtCJ;AAAA,UAAJ,KAAIjD;AAAA,UACH,OAAOI;AAAA,UACP,QAAQ;AAAA,UACR,eAAaP,EAAA;AAAA,QAAA,GACNqD,EAAAA,QAAM;AAAA,UACb,6BAAD,MAAA;AAAA,UAAA,GAAe,CAAA,SAAA,CAAA;AAAA,QAAA;qBAGf,MAiBM;AAAA,YAjBNC,EAiBM,OAjBNC,IAiBM;AAAA,cAhBJD,EAIM,OAJNE,IAIM;AAAA,gBAHJF,EAEM,OAAA;AAAA,2BAFG;AAAA,kBAAJ,KAAIjD;AAAA,kBAAa,OAAKoD,EAAA,CAAC,4BAA0B,EAAA,gBAA2BtC,EAAA,OAAe,CAAA;AAAA,gBAAA;kBAC9FuC,EAAwCC,kCAAjBpD,EAAA,CAAW,CAAA,GAAA,QAAA,EAAA;AAAA,gBAAA;;cAK3BP,EAAA,oBAAXgD,EAQM,OAAA;AAAA;gBARkB,OAAM;AAAA,gBAA4B,UAAO1B,EAAA,KAAW;AAAA,cAAA;gBAC1EoC,EAMOC,EAAA,QAAA,WAAA;AAAA,kBANe,QAAQhC;AAAA,kBAAW,OAAOG;AAAA,gBAAA,GAAhD,MAMO;AAAA,kBALLoB,EAA2FU,GAAA;AAAA,oBAAhF,MAAK;AAAA,oBAAW,SAAStD,EAAA;AAAA,oBAAU,SAAOqB;AAAA,kBAAA;+BAAU,MAAgB;AAAA,0BAAb3B,EAAA,UAAU,GAAA,CAAA;AAAA,oBAAA;;;kBAC5EkD,EAAuDU,GAAA,EAA3C,SAAO9B,KAAO;AAAA,+BAAE,MAAe;AAAA,0BAAZ9B,EAAA,SAAS,GAAA,CAAA;AAAA,oBAAA;;;kBACvBe,EAAA,cAAjB8C,GAEYD,GAAA;AAAA;oBAFkB,MAAA;AAAA,oBAAK,MAAK;AAAA,oBAAW,SAAOpC;AAAA,kBAAA;+BACxD,MAA0C;AAAA,0BAAvCP,EAAA,QAAWjB,EAAA,eAAeA,EAAA,UAAU,GAAA,CAAA;AAAA,oBAAA;;;;;;YAQvCW,EAAA,cADRqC,EASM,OAAA;AAAA;cAPJ,OAAKS,EAAA,CAAC,8BAA4B,EAAA,WACbxC,EAAA,MAAA,CAAQ,CAAA;AAAA,cAC5B,eAAcA,EAAA,QAAoB,SAAZ;AAAA,YAAY;cAEnCqC,EAEM,OAFNQ,IAEM;AAAA,gBADJJ,EAAoDC,+BAAjBpD,EAAA,CAAW,CAAA,GAAA,QAAA,EAAA;AAAA,cAAA;;;;;;YAtCdD,EAAA,KAAO;AAAA,MAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { defineComponent as b, toRefs as B, computed as D, resolveComponent as r, resolveDirective as C, withDirectives as N, openBlock as i, createBlock as d, mergeProps as A, withCtx as s, createElementBlock as F, Fragment as M, renderList as W, unref as c, createElementVNode as m, renderSlot as E, createTextVNode as K, toDisplayString as L, withModifiers as R, createVNode as f, createCommentVNode as $ } from "vue";
2
2
  import { QuestionFilled as I } from "@element-plus/icons-vue";
3
- import { u as O } from "./useOptionsLoader-D0RTB_ar.mjs";
3
+ import { u as O } from "./useOptionsLoader-BwRdHDPL.mjs";
4
4
  import { o as Q } from "./props-DAytpx7D.mjs";
5
5
  import { _ as T } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
6
6
  const U = { class: "wd-option-row" }, j = { class: "wd-option-text" }, q = /* @__PURE__ */ b({
@@ -111,4 +111,4 @@ const U = { class: "wd-option-row" }, j = { class: "wd-option-text" }, q = /* @_
111
111
  export {
112
112
  Y as W
113
113
  };
114
- //# sourceMappingURL=Select-CMw-tWYm.mjs.map
114
+ //# sourceMappingURL=Select-DlJ9U0nE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Select-CMw-tWYm.mjs","sources":["../../src/components/inputs/Select.vue"],"sourcesContent":["<template>\n <el-select\n v-model=\"inner\"\n v-loading=\"loading\"\n :multiple=\"multiple\"\n :filterable=\"remote || filterable\"\n :remote=\"remote\"\n :remote-method=\"onRemote\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n >\n <el-option\n v-for=\"opt in options\"\n :key=\"String(opt.value)\"\n :label=\"opt.text\"\n :value=\"opt.value\"\n >\n <span class=\"wd-option-row\">\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">\n {{ opt.text }}\n </slot>\n </span>\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-tip\" tabindex=\"0\" role=\"note\" aria-label=\"帮助说明\" @click.stop>\n <el-icon><QuestionFilled /></el-icon>\n </span>\n </el-tooltip>\n </span>\n </el-option>\n </el-select>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, type PropType } from 'vue'\nimport { QuestionFilled } from '@element-plus/icons-vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdSelect', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: [String, Number, Boolean, Array] as PropType<any>, default: undefined },\n multiple: { type: Boolean, default: false },\n /** 远程搜索 */\n remote: { type: Boolean, default: false },\n /** 本地可搜索 */\n filterable: { type: Boolean, default: true },\n /** 远程搜索关键字字段名 */\n keywordKey: { type: String, default: 'keyword' }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading, remoteSearch } = 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\nfunction onRemote(query: string) {\n if (props.remote) remoteSearch(query, props.keywordKey)\n}\n</script>\n\n<style scoped>\n.wd-option-row {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n}\n.wd-option-text {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wd-option-tip {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--el-text-color-secondary, #909399);\n font-size: 14px;\n cursor: help;\n}\n.wd-option-tip:focus-visible {\n outline: 1px dashed currentColor;\n outline-offset: 2px;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","remoteSearch","useOptionsLoader","inner","computed","val","onChange","onRemote","query","_withDirectives","_openBlock","_createBlock","_component_el_select","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_option","_createElementVNode","_hoisted_1","_hoisted_2","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_tooltip","_createVNode","_component_el_icon","QuestionFilled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+CA,UAAMA,IAAQC,GAYRC,IAAOC,GAEPC,IAAOC,EAAOL,CAAK,GACnB,EAAE,SAAAM,GAAS,SAAAC,GAAS,cAAAC,EAAA,IAAiBC,EAAiB;AAAA,MAC1D,KAAKL,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,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,YAAYA,EAAK;AAAA,MACjB,MAAAF;AAAA,IAAA,CACD,GAEKQ,IAAQC,EAAS;AAAA,MACrB,KAAK,MAAMX,EAAM;AAAA,MACjB,KAAK,CAACY,MAAQV,EAAK,qBAAqBU,CAAG;AAAA,IAAA,CAC5C;AAED,aAASC,EAASD,GAAU;AAC1B,MAAAV,EAAK,UAAUU,CAAG;AAAA,IACpB;AAEA,aAASE,EAASC,GAAe;AAC/B,MAAIf,EAAM,UAAQQ,EAAaO,GAAOf,EAAM,UAAU;AAAA,IACxD;;;AAtFE,aAAAgB,GAAAC,EAAA,GAAAC,EAmCYC,GAnCZC,EAmCY;AAAA,oBAlCDV,EAAA;AAAA,sDAAAA,EAAK,QAAAW;AAAA,QAEb,UAAUpB,EAAA;AAAA,QACV,YAAYA,EAAA,UAAUA,EAAA;AAAA,QACtB,QAAQA,EAAA;AAAA,QACR,iBAAea;AAAA,MAAA,GACRQ,EAAAA,QAAM,EACb,UAAAT,EAAA,CAAgB,GAAA;AAAA,mBAGf,MAAsB;AAAA,kBADxBU,EAwBYC,GAAA,MAAAC,EAvBIC,EAAApB,CAAA,GAAO,CAAdqB,YADTT,EAwBYU,GAAA;AAAA,YAtBT,KAAK,OAAOD,EAAI,KAAK;AAAA,YACrB,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,UAAA;uBAEZ,MAiBO;AAAA,cAjBPE,EAiBO,QAjBPC,GAiBO;AAAA,gBAhBLD,EAIO,QAJPE,GAIO;AAAA,kBAHLC,EAEOC,EAAA,QAAA,WAAA;AAAA,oBAFA,QAAQN,EAAI;AAAA,oBAAM,MAAMA,EAAI;AAAA,oBAAO,OAAOA,EAAI;AAAA,oBAAQ,MAAMA,EAAI;AAAA,kBAAA,GAAvE,MAEO;AAAA,oBADFO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,kBAAA;;gBAIPA,EAAI,aADZT,EAUakB,GAAA;AAAA;kBARV,SAAST,EAAI;AAAA,kBACd,WAAU;AAAA,kBACV,QAAO;AAAA,kBACN,cAAY;AAAA,gBAAA;6BAEb,MAEO;AAAA,oBAFPE,EAEO,QAAA;AAAA,sBAFD,OAAM;AAAA,sBAAgB,UAAS;AAAA,sBAAI,MAAK;AAAA,sBAAO,cAAW;AAAA,sBAAQ,2BAAD,MAAA;AAAA,sBAAA,GAAW,CAAA,MAAA,CAAA;AAAA,oBAAA;sBAChFQ,EAAqCC,GAAA,MAAA;AAAA,mCAA5B,MAAkB;AAAA,0BAAlBD,EAAkBX,EAAAa,CAAA,CAAA;AAAA,wBAAA;;;;;;;;;;;;;;YA5BxBb,EAAAnB,CAAA,CAAO;AAAA,MAAA;;;;"}
1
+ {"version":3,"file":"Select-DlJ9U0nE.mjs","sources":["../../src/components/inputs/Select.vue"],"sourcesContent":["<template>\n <el-select\n v-model=\"inner\"\n v-loading=\"loading\"\n :multiple=\"multiple\"\n :filterable=\"remote || filterable\"\n :remote=\"remote\"\n :remote-method=\"onRemote\"\n v-bind=\"$attrs\"\n @change=\"onChange\"\n >\n <el-option\n v-for=\"opt in options\"\n :key=\"String(opt.value)\"\n :label=\"opt.text\"\n :value=\"opt.value\"\n >\n <span class=\"wd-option-row\">\n <span class=\"wd-option-text\">\n <slot :option=\"opt.raw\" :text=\"opt.text\" :value=\"opt.value\" :tips=\"opt.tips\">\n {{ opt.text }}\n </slot>\n </span>\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-tip\" tabindex=\"0\" role=\"note\" aria-label=\"帮助说明\" @click.stop>\n <el-icon><QuestionFilled /></el-icon>\n </span>\n </el-tooltip>\n </span>\n </el-option>\n </el-select>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, toRefs, type PropType } from 'vue'\nimport { QuestionFilled } from '@element-plus/icons-vue'\nimport { useOptionsLoader } from './useOptionsLoader'\nimport { optionsProps } from '../common/props'\n\ndefineOptions({ name: 'WdSelect', inheritAttrs: false })\n\nconst props = defineProps({\n ...optionsProps,\n modelValue: { type: [String, Number, Boolean, Array] as PropType<any>, default: undefined },\n multiple: { type: Boolean, default: false },\n /** 远程搜索 */\n remote: { type: Boolean, default: false },\n /** 本地可搜索 */\n filterable: { type: Boolean, default: true },\n /** 远程搜索关键字字段名 */\n keywordKey: { type: String, default: 'keyword' }\n})\n\nconst emit = defineEmits(['update:modelValue', 'change', 'apiBefore', 'apiSuccess', 'apiFail', 'apiAfter'])\n\nconst refs = toRefs(props)\nconst { options, loading, remoteSearch } = 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\nfunction onRemote(query: string) {\n if (props.remote) remoteSearch(query, props.keywordKey)\n}\n</script>\n\n<style scoped>\n.wd-option-row {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n}\n.wd-option-text {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.wd-option-tip {\n flex: none;\n display: inline-flex;\n align-items: center;\n color: var(--el-text-color-secondary, #909399);\n font-size: 14px;\n cursor: help;\n}\n.wd-option-tip:focus-visible {\n outline: 1px dashed currentColor;\n outline-offset: 2px;\n}\n</style>\n"],"names":["props","__props","emit","__emit","refs","toRefs","options","loading","remoteSearch","useOptionsLoader","inner","computed","val","onChange","onRemote","query","_withDirectives","_openBlock","_createBlock","_component_el_select","_mergeProps","$event","$attrs","_createElementBlock","_Fragment","_renderList","_unref","opt","_component_el_option","_createElementVNode","_hoisted_1","_hoisted_2","_renderSlot","_ctx","_createTextVNode","_toDisplayString","_component_el_tooltip","_createVNode","_component_el_icon","QuestionFilled"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+CA,UAAMA,IAAQC,GAYRC,IAAOC,GAEPC,IAAOC,EAAOL,CAAK,GACnB,EAAE,SAAAM,GAAS,SAAAC,GAAS,cAAAC,EAAA,IAAiBC,EAAiB;AAAA,MAC1D,KAAKL,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,UAAUA,EAAK;AAAA,MACf,SAASA,EAAK;AAAA,MACd,YAAYA,EAAK;AAAA,MACjB,MAAAF;AAAA,IAAA,CACD,GAEKQ,IAAQC,EAAS;AAAA,MACrB,KAAK,MAAMX,EAAM;AAAA,MACjB,KAAK,CAACY,MAAQV,EAAK,qBAAqBU,CAAG;AAAA,IAAA,CAC5C;AAED,aAASC,EAASD,GAAU;AAC1B,MAAAV,EAAK,UAAUU,CAAG;AAAA,IACpB;AAEA,aAASE,EAASC,GAAe;AAC/B,MAAIf,EAAM,UAAQQ,EAAaO,GAAOf,EAAM,UAAU;AAAA,IACxD;;;AAtFE,aAAAgB,GAAAC,EAAA,GAAAC,EAmCYC,GAnCZC,EAmCY;AAAA,oBAlCDV,EAAA;AAAA,sDAAAA,EAAK,QAAAW;AAAA,QAEb,UAAUpB,EAAA;AAAA,QACV,YAAYA,EAAA,UAAUA,EAAA;AAAA,QACtB,QAAQA,EAAA;AAAA,QACR,iBAAea;AAAA,MAAA,GACRQ,EAAAA,QAAM,EACb,UAAAT,EAAA,CAAgB,GAAA;AAAA,mBAGf,MAAsB;AAAA,kBADxBU,EAwBYC,GAAA,MAAAC,EAvBIC,EAAApB,CAAA,GAAO,CAAdqB,YADTT,EAwBYU,GAAA;AAAA,YAtBT,KAAK,OAAOD,EAAI,KAAK;AAAA,YACrB,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,UAAA;uBAEZ,MAiBO;AAAA,cAjBPE,EAiBO,QAjBPC,GAiBO;AAAA,gBAhBLD,EAIO,QAJPE,GAIO;AAAA,kBAHLC,EAEOC,EAAA,QAAA,WAAA;AAAA,oBAFA,QAAQN,EAAI;AAAA,oBAAM,MAAMA,EAAI;AAAA,oBAAO,OAAOA,EAAI;AAAA,oBAAQ,MAAMA,EAAI;AAAA,kBAAA,GAAvE,MAEO;AAAA,oBADFO,EAAAC,EAAAR,EAAI,IAAI,GAAA,CAAA;AAAA,kBAAA;;gBAIPA,EAAI,aADZT,EAUakB,GAAA;AAAA;kBARV,SAAST,EAAI;AAAA,kBACd,WAAU;AAAA,kBACV,QAAO;AAAA,kBACN,cAAY;AAAA,gBAAA;6BAEb,MAEO;AAAA,oBAFPE,EAEO,QAAA;AAAA,sBAFD,OAAM;AAAA,sBAAgB,UAAS;AAAA,sBAAI,MAAK;AAAA,sBAAO,cAAW;AAAA,sBAAQ,2BAAD,MAAA;AAAA,sBAAA,GAAW,CAAA,MAAA,CAAA;AAAA,oBAAA;sBAChFQ,EAAqCC,GAAA,MAAA;AAAA,mCAA5B,MAAkB;AAAA,0BAAlBD,EAAkBX,EAAAa,CAAA,CAAA;AAAA,wBAAA;;;;;;;;;;;;;;YA5BxBb,EAAAnB,CAAA,CAAO;AAAA,MAAA;;;;"}
@@ -786,11 +786,11 @@ const wt = /* @__PURE__ */ ze({
786
786
  ], 2);
787
787
  };
788
788
  }
789
- }), Xt = /* @__PURE__ */ Le(Pt, [["__scopeId", "data-v-306ce3d4"]]);
789
+ }), Xt = /* @__PURE__ */ Le(Pt, [["__scopeId", "data-v-c7a0eb7d"]]);
790
790
  export {
791
791
  Xt as W,
792
792
  mt as a,
793
793
  Qt as r,
794
794
  Ht as s
795
795
  };
796
- //# sourceMappingURL=Station-BF_QlQ8c.mjs.map
796
+ //# sourceMappingURL=Station-CrMTjqfa.mjs.map