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