workdesktop-ai 1.2.3 → 1.2.4
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/dist/api-button/index.mjs +1 -1
- package/dist/auto-complete/index.mjs +1 -1
- package/dist/checkbox-list/index.mjs +1 -1
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs} +2 -2
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-GBEBLUxz.mjs.map} +1 -1
- package/dist/chunks/{AutoComplete-C6Nxatvt.mjs → AutoComplete-DqyhsqiS.mjs} +2 -2
- package/dist/chunks/{AutoComplete-C6Nxatvt.mjs.map → AutoComplete-DqyhsqiS.mjs.map} +1 -1
- package/dist/chunks/{CheckboxList-5AEx33r5.mjs → CheckboxList-RxJGe-LQ.mjs} +2 -2
- package/dist/chunks/{CheckboxList-5AEx33r5.mjs.map → CheckboxList-RxJGe-LQ.mjs.map} +1 -1
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs} +2 -2
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-BPtvM5GB.mjs.map} +1 -1
- package/dist/chunks/{DataForm-C6VLTSOm.mjs → DataForm-DYMderSS.mjs} +8 -7
- package/dist/chunks/{DataForm-C6VLTSOm.mjs.map → DataForm-DYMderSS.mjs.map} +1 -1
- package/dist/chunks/{DataGrid-Dd7n5JM7.mjs → DataGrid-DWAhwLVk.mjs} +3 -3
- package/dist/chunks/{DataGrid-Dd7n5JM7.mjs.map → DataGrid-DWAhwLVk.mjs.map} +1 -1
- package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs} +2 -2
- package/dist/chunks/{DialogButton.vue_vue_type_script_setup_true_lang-CTXP79zc.mjs.map → DialogButton.vue_vue_type_script_setup_true_lang-ex2zYLZC.mjs.map} +1 -1
- package/dist/chunks/{Drawer-ucXKUecL.mjs → Drawer-BzdohcBg.mjs} +96 -90
- package/dist/chunks/Drawer-BzdohcBg.mjs.map +1 -0
- package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs} +2 -2
- package/dist/chunks/{DrawerButton.vue_vue_type_script_setup_true_lang-DUda4p7_.mjs.map → DrawerButton.vue_vue_type_script_setup_true_lang-u5ifQw5k.mjs.map} +1 -1
- package/dist/chunks/{EditableGrid-CDeeVkaX.mjs → EditableGrid-e3wwCaem.mjs} +6 -5
- package/dist/chunks/{EditableGrid-CDeeVkaX.mjs.map → EditableGrid-e3wwCaem.mjs.map} +1 -1
- package/dist/chunks/Guide-AWaWvQoq.mjs +347 -0
- package/dist/chunks/Guide-AWaWvQoq.mjs.map +1 -0
- package/dist/chunks/Iframe-DcFFi0S9.mjs +128 -0
- package/dist/chunks/Iframe-DcFFi0S9.mjs.map +1 -0
- package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs → ImageUpload-BK7tbU2o.mjs} +5 -4
- package/dist/chunks/{ImageUpload-CQA9XQ7Q.mjs.map → ImageUpload-BK7tbU2o.mjs.map} +1 -1
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs} +2 -2
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-82Mxc2Qv.mjs.map} +1 -1
- package/dist/chunks/{RadioList-BUWcP_Pk.mjs → RadioList-DuEeHumw.mjs} +2 -2
- package/dist/chunks/{RadioList-BUWcP_Pk.mjs.map → RadioList-DuEeHumw.mjs.map} +1 -1
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs +63 -0
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-xCw4QHCA.mjs.map +1 -0
- package/dist/chunks/{Select-uvFy7_NU.mjs → Select-MD3taMJo.mjs} +2 -2
- package/dist/chunks/{Select-uvFy7_NU.mjs.map → Select-MD3taMJo.mjs.map} +1 -1
- package/dist/chunks/{Station-BTP0SbBg.mjs → Station-2m9uznh3.mjs} +2 -2
- package/dist/chunks/{Station-BTP0SbBg.mjs.map → Station-2m9uznh3.mjs.map} +1 -1
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs} +2 -2
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs.map → Switch.vue_vue_type_script_setup_true_lang-vok-8-BT.mjs.map} +1 -1
- package/dist/chunks/Tips-B_18E4mc.mjs +71 -0
- package/dist/chunks/Tips-B_18E4mc.mjs.map +1 -0
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs} +5 -4
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs.map → Upload.vue_vue_type_script_setup_true_lang-DVDw-3mF.mjs.map} +1 -1
- package/dist/chunks/{Viewer-CjLSQTrw.mjs → Viewer-FSV6xObc.mjs} +2 -2
- package/dist/chunks/{Viewer-CjLSQTrw.mjs.map → Viewer-FSV6xObc.mjs.map} +1 -1
- package/dist/chunks/config-B6nWG5dv.mjs +1378 -0
- package/dist/chunks/config-B6nWG5dv.mjs.map +1 -0
- package/dist/chunks/http-BKKP0gEJ.mjs +2774 -0
- package/dist/chunks/http-BKKP0gEJ.mjs.map +1 -0
- package/dist/chunks/{useApiAction-DxVQWWxv.mjs → useApiAction-71XPKjlQ.mjs} +2 -2
- package/dist/chunks/{useApiAction-DxVQWWxv.mjs.map → useApiAction-71XPKjlQ.mjs.map} +1 -1
- package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs → useColumnSettings-CbiWd27-.mjs} +22 -21
- package/dist/chunks/{useColumnSettings-BwG2V9xp.mjs.map → useColumnSettings-CbiWd27-.mjs.map} +1 -1
- package/dist/chunks/useConfig-CPioiLWJ.mjs +23 -0
- package/dist/chunks/useConfig-CPioiLWJ.mjs.map +1 -0
- package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs → useOptionsLoader-D4Jh4f1F.mjs} +2 -2
- package/dist/chunks/{useOptionsLoader-DEVCYhrp.mjs.map → useOptionsLoader-D4Jh4f1F.mjs.map} +1 -1
- package/dist/confirm-button/index.mjs +1 -1
- package/dist/data-form/index.mjs +1 -1
- package/dist/data-grid/index.mjs +1 -1
- package/dist/dialog-button/index.mjs +1 -1
- package/dist/drawer/index.mjs +1 -1
- package/dist/drawer/style.css +1 -1
- package/dist/drawer-button/index.mjs +1 -1
- package/dist/editable-grid/index.mjs +1 -1
- package/dist/guide/index.mjs +7 -0
- package/dist/guide/index.mjs.map +1 -0
- package/dist/guide/style.css +1 -0
- package/dist/iframe/index.mjs +1 -1
- package/dist/iframe/style.css +1 -1
- package/dist/image-upload/index.mjs +1 -1
- package/dist/index.esm.js +194 -189
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +25 -21
- package/dist/index.umd.js.map +1 -1
- package/dist/prompt-button/index.mjs +1 -1
- package/dist/radio-list/index.mjs +1 -1
- package/dist/requester/index.mjs +1 -1
- package/dist/select/index.mjs +1 -1
- package/dist/station/index.mjs +1 -1
- package/dist/station/style.css +1 -1
- package/dist/style.css +1 -1
- package/dist/switch/index.mjs +1 -1
- package/dist/tips/index.mjs +1 -1
- package/dist/tips/style.css +1 -1
- package/dist/types/src/components/buttons/ApiButton.vue.d.ts +3 -3
- package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +5 -5
- package/dist/types/src/components/buttons/DialogButton.vue.d.ts +3 -3
- package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +4 -4
- package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +6 -6
- package/dist/types/src/components/buttons/PromptButton.vue.d.ts +5 -5
- package/dist/types/src/components/buttons/RouteButton.vue.d.ts +1 -1
- package/dist/types/src/components/buttons/TipsButton.vue.d.ts +1 -1
- package/dist/types/src/components/containers/Drawer.vue.d.ts +4 -4
- package/dist/types/src/components/containers/Iframe.vue.d.ts +42 -0
- package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +5 -5
- package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +7 -7
- package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +1 -1
- package/dist/types/src/components/form/FormItem.vue.d.ts +1 -1
- package/dist/types/src/components/form/SearchItem.vue.d.ts +1 -1
- package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +10 -10
- package/dist/types/src/components/guide/Guide.vue.d.ts +116 -0
- package/dist/types/src/components/index.d.ts +2 -1
- package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/RadioList.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/Select.vue.d.ts +6 -6
- package/dist/types/src/components/inputs/Switch.vue.d.ts +9 -9
- package/dist/types/src/components/styles/Path.vue.d.ts +1 -1
- package/dist/types/src/components/styles/Tips.vue.d.ts +17 -0
- package/dist/types/src/components/upload/ImageUpload.vue.d.ts +5 -5
- package/dist/types/src/components/upload/Upload.vue.d.ts +5 -5
- package/dist/types/src/entries/guide.d.ts +9 -0
- package/dist/upload/index.mjs +1 -1
- package/dist/viewer/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/chunks/Drawer-ucXKUecL.mjs.map +0 -1
- package/dist/chunks/Iframe-CeSiMnvR.mjs +0 -65
- package/dist/chunks/Iframe-CeSiMnvR.mjs.map +0 -1
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs +0 -80
- package/dist/chunks/Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs.map +0 -1
- package/dist/chunks/Tips-IWCZcR1K.mjs +0 -63
- package/dist/chunks/Tips-IWCZcR1K.mjs.map +0 -1
- package/dist/chunks/http-C06mNpwY.mjs +0 -4141
- package/dist/chunks/http-C06mNpwY.mjs.map +0 -1
|
@@ -71,13 +71,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
71
71
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
72
72
|
success: (...args: any[]) => void;
|
|
73
73
|
error: (...args: any[]) => void;
|
|
74
|
+
"update:modelValue": (...args: any[]) => void;
|
|
75
|
+
change: (...args: any[]) => void;
|
|
74
76
|
apiBefore: (...args: any[]) => void;
|
|
75
77
|
apiSuccess: (...args: any[]) => void;
|
|
76
78
|
apiFail: (...args: any[]) => void;
|
|
77
79
|
apiException: (...args: any[]) => void;
|
|
78
80
|
apiAfter: (...args: any[]) => void;
|
|
79
|
-
"update:modelValue": (...args: any[]) => void;
|
|
80
|
-
change: (...args: any[]) => void;
|
|
81
81
|
"delete-success": (...args: any[]) => void;
|
|
82
82
|
preview: (...args: any[]) => void;
|
|
83
83
|
exceed: (...args: any[]) => void;
|
|
@@ -148,20 +148,20 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
148
148
|
}>> & Readonly<{
|
|
149
149
|
onSuccess?: ((...args: any[]) => any) | undefined;
|
|
150
150
|
onError?: ((...args: any[]) => any) | undefined;
|
|
151
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
152
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
151
153
|
onApiBefore?: ((...args: any[]) => any) | undefined;
|
|
152
154
|
onApiSuccess?: ((...args: any[]) => any) | undefined;
|
|
153
155
|
onApiFail?: ((...args: any[]) => any) | undefined;
|
|
154
156
|
onApiException?: ((...args: any[]) => any) | undefined;
|
|
155
157
|
onApiAfter?: ((...args: any[]) => any) | undefined;
|
|
156
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
157
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
158
158
|
"onDelete-success"?: ((...args: any[]) => any) | undefined;
|
|
159
159
|
onPreview?: ((...args: any[]) => any) | undefined;
|
|
160
160
|
onExceed?: ((...args: any[]) => any) | undefined;
|
|
161
161
|
}>, {
|
|
162
162
|
filter: string;
|
|
163
|
-
api: string;
|
|
164
163
|
modelValue: string[];
|
|
164
|
+
api: string;
|
|
165
165
|
headRefreshDatagrid: string | boolean;
|
|
166
166
|
tip: string;
|
|
167
167
|
deleteApi: string;
|
|
@@ -100,13 +100,13 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
|
|
|
100
100
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
101
101
|
success: (...args: any[]) => void;
|
|
102
102
|
error: (...args: any[]) => void;
|
|
103
|
+
"update:modelValue": (...args: any[]) => void;
|
|
104
|
+
change: (...args: any[]) => void;
|
|
103
105
|
apiBefore: (...args: any[]) => void;
|
|
104
106
|
apiSuccess: (...args: any[]) => void;
|
|
105
107
|
apiFail: (...args: any[]) => void;
|
|
106
108
|
apiException: (...args: any[]) => void;
|
|
107
109
|
apiAfter: (...args: any[]) => void;
|
|
108
|
-
"update:modelValue": (...args: any[]) => void;
|
|
109
|
-
change: (...args: any[]) => void;
|
|
110
110
|
"delete-success": (...args: any[]) => void;
|
|
111
111
|
preview: (...args: any[]) => void;
|
|
112
112
|
exceed: (...args: any[]) => void;
|
|
@@ -196,13 +196,13 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
|
|
|
196
196
|
}>> & Readonly<{
|
|
197
197
|
onSuccess?: ((...args: any[]) => any) | undefined;
|
|
198
198
|
onError?: ((...args: any[]) => any) | undefined;
|
|
199
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
200
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
199
201
|
onApiBefore?: ((...args: any[]) => any) | undefined;
|
|
200
202
|
onApiSuccess?: ((...args: any[]) => any) | undefined;
|
|
201
203
|
onApiFail?: ((...args: any[]) => any) | undefined;
|
|
202
204
|
onApiException?: ((...args: any[]) => any) | undefined;
|
|
203
205
|
onApiAfter?: ((...args: any[]) => any) | undefined;
|
|
204
|
-
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
205
|
-
onChange?: ((...args: any[]) => any) | undefined;
|
|
206
206
|
"onDelete-success"?: ((...args: any[]) => any) | undefined;
|
|
207
207
|
onPreview?: ((...args: any[]) => any) | undefined;
|
|
208
208
|
onExceed?: ((...args: any[]) => any) | undefined;
|
|
@@ -211,8 +211,8 @@ declare const __VLS_component: import("vue").DefineComponent<import("vue").Extra
|
|
|
211
211
|
disabled: boolean;
|
|
212
212
|
name: string;
|
|
213
213
|
filter: string;
|
|
214
|
-
api: string;
|
|
215
214
|
modelValue: UploadUserFile[];
|
|
215
|
+
api: string;
|
|
216
216
|
headRefreshDatagrid: string | boolean;
|
|
217
217
|
multiple: boolean;
|
|
218
218
|
deleteApi: string;
|
package/dist/upload/index.mjs
CHANGED
package/dist/viewer/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Drawer-ucXKUecL.mjs","sources":["../../src/components/containers/useContainerController.ts","../../src/components/containers/Drawer.vue"],"sourcesContent":["/**\r\n * 容器组件(Dialog/Drawer)共享逻辑:\r\n * 显隐、iframe/内容渲染、关闭前拦截(confirmMessage + 内容注册的 beforeClose 守卫)、关闭后联动刷新\r\n */\r\nimport { ref, watch, provide, onMounted, onBeforeUnmount, computed } from 'vue'\r\nimport { ElMessageBox } from 'element-plus'\r\nimport { refreshDataGrid } from '../../lib/core/linkage'\r\nimport { provideContainer, type ContainerContext } from './containerContext'\r\n\r\ntype BridgeMessage = {\r\n type: string\r\n payload?: any\r\n}\r\n\r\nexport function useContainerController(options: {\r\n props: {\r\n modelValue?: boolean\r\n url?: string\r\n title?: string\r\n confirmMessage?: string\r\n headRefreshDatagrid?: boolean | string\r\n filter?: string\r\n data?: Record<string, any>\r\n origin?: string\r\n [key: string]: any\r\n }\r\n emit: (event: any, ...args: any[]) => void\r\n}) {\r\n const { props, emit } = options\r\n const visible = ref(!!props.modelValue)\r\n\r\n // 受控模式:外部 v-model 变化时同步显隐。\r\n // 容器可能「挂载后再置 true」(如 DrawerButton 懒挂载两段式打开),必须监听后续变化,\r\n // 否则 modelValue 只在挂载时生效一次,弹层永远无法打开。\r\n watch(\r\n () => props.modelValue,\r\n (val) => {\r\n if (val !== visible.value) visible.value = !!val\r\n }\r\n )\r\n\r\n // 反向同步:弹层被 X/遮罩/ESC 关闭后(el-dialog/drawer 内部把 visible 置 false,不经过 syncVisible),\r\n // 需把实际状态回写外部,否则父级 v-model 仍为 true,下次打开会失效。\r\n watch(visible, (val) => {\r\n if (props.modelValue !== val) emit('update:modelValue', val)\r\n })\r\n\r\n /** 关闭前守卫集合(内部 DataForm 的 confirmLeave 等,含 iframe 上报) */\r\n const beforeCloseGuards = new Set<() => Promise<boolean>>()\r\n\r\n function syncVisible(val: boolean) {\r\n visible.value = val\r\n emit('update:modelValue', val)\r\n }\r\n\r\n function open() {\r\n syncVisible(true)\r\n emit('open')\r\n sendInitToIframe()\r\n emit('open')\r\n }\r\n\r\n /**\r\n * 供内部内容主动请求关闭(DataForm headCloseDrawer)\r\n * @param reason 'submit'=提交成功,直接关闭;其余先走过渡守卫(未保存确认)\r\n */\r\n async function requestClose(reason = 'request') {\r\n if (reason !== 'submit') {\r\n const allowed = await runGuards()\r\n if (!allowed) return\r\n }\r\n syncVisible(false)\r\n afterClosed(reason)\r\n }\r\n\r\n function addBeforeClose(guard: () => Promise<boolean>) {\r\n beforeCloseGuards.add(guard)\r\n return () => beforeCloseGuards.delete(guard)\r\n }\r\n\r\n /** 执行全部内容守卫,任一返回 false 则中止 */\r\n async function runGuards(): Promise<boolean> {\r\n for (const guard of beforeCloseGuards) {\r\n const ok = await guard()\r\n if (!ok) return false\r\n }\r\n return true\r\n }\r\n\r\n /** el-dialog/el-drawer 关闭拦截入口(X 按钮 / 遮罩 / ESC) */\r\n async function handleBeforeClose(done: () => void) {\r\n // 1. 内容守卫(DataForm 未保存确认,含 iframe)\r\n const allowed = await runGuards()\r\n if (!allowed) return\r\n // 2. 容器自身确认\r\n if (props.confirmMessage) {\r\n try {\r\n await ElMessageBox.confirm(props.confirmMessage, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n })\r\n } catch {\r\n return\r\n }\r\n }\r\n done()\r\n afterClosed('manual')\r\n }\r\n\r\n function onClosed() {\r\n emit('close')\r\n }\r\n\r\n function afterClosed(reason: string) {\r\n emit('confirm', { reason })\r\n // 关闭后声明式联动刷新 DataGrid\r\n if (props.headRefreshDatagrid) {\r\n refreshDataGrid(props.headRefreshDatagrid, props.filter)\r\n }\r\n }\r\n\r\n // ================= iframe 跨上下文桥接 =================\r\n let iframeRef: HTMLIFrameElement | null = null\r\n const targetOrigin = computed(() => {\r\n if (props.origin) return props.origin\r\n if (!props.url) return window.location.origin\r\n try {\r\n return new URL(props.url).origin\r\n } catch {\r\n return window.location.origin\r\n }\r\n })\r\n\r\n /** 消息来源校验:targetOrigin='*' 时放行(与 postMessage 通配语义一致) */\r\n function isAllowedOrigin(eventOrigin: string) {\r\n return targetOrigin.value === '*' || eventOrigin === targetOrigin.value\r\n }\r\n\r\n function setIframeRef(el: HTMLIFrameElement | null) {\r\n iframeRef = el\r\n }\r\n\r\n function sendToIframe(type: string, payload?: any) {\r\n if (!iframeRef?.contentWindow) return\r\n const msg: BridgeMessage = { type, payload }\r\n iframeRef.contentWindow.postMessage(msg, targetOrigin.value)\r\n }\r\n\r\n /** 发送初始化数据给 iframe(代替 query 参数,支持复杂对象) */\r\n function sendInitToIframe() {\r\n if (!props.url) return\r\n sendToIframe('wd-container:init', { data: props.data })\r\n }\r\n\r\n /**\r\n * 处理 iframe 发来的消息:\r\n * 1. 以 emit 透传给外部(iframe-message 原始透传 + iframe-xxx 语义化事件)\r\n * 2. 保留默认联动行为(提交成功自动关闭、脏状态自动注册守卫、就绪自动下发数据)\r\n */\r\n function onBridgeMessage(event: MessageEvent) {\r\n // 安全校验:来源必须匹配目标 origin(* 通配放行)\r\n if (!isAllowedOrigin(event.origin)) return\r\n const data = event.data\r\n if (!data || typeof data !== 'object' || !data.type) return\r\n\r\n // 透传原始消息,外部可用 @iframe-message 统一监听\r\n emit('iframe-message', data)\r\n\r\n switch (data.type) {\r\n // 提交成功:关闭容器并刷新\r\n case 'wd-container:submit-success':\r\n emit('iframe-submit-success', data.payload)\r\n requestClose('submit')\r\n break\r\n // 子页面主动请求关闭(DataForm「关闭」按钮 / 业务主动触发)\r\n case 'wd-container:close':\r\n requestClose('manual')\r\n break\r\n // 注册/注销未保存守卫\r\n case 'wd-container:dirty':\r\n emit('iframe-dirty', data.payload)\r\n if (data.payload?.dirty) {\r\n addBeforeClose(async () => {\r\n return new Promise((resolve) => {\r\n const requestId = Math.random().toString(36).slice(2)\r\n const handler = (e: MessageEvent) => {\r\n if (!isAllowedOrigin(e.origin)) return\r\n if (e.data?.type === 'wd-container:dirty-confirm-response' && e.data?.requestId === requestId) {\r\n window.removeEventListener('message', handler)\r\n resolve(!!e.data.payload.allowClose)\r\n }\r\n }\r\n window.addEventListener('message', handler)\r\n sendToIframe('wd-container:dirty-confirm', { requestId })\r\n })\r\n })\r\n }\r\n break\r\n case 'wd-container:ready':\r\n emit('iframe-ready', data.payload)\r\n sendInitToIframe()\r\n break\r\n default:\r\n break\r\n }\r\n }\r\n\r\n onMounted(() => {\r\n window.addEventListener('message', onBridgeMessage)\r\n })\r\n\r\n onBeforeUnmount(() => {\r\n window.removeEventListener('message', onBridgeMessage)\r\n })\r\n\r\n // 向内部内容(非 iframe 的 Vue 插槽内容)提供容器上下文\r\n provideContainer({\r\n data: props.data,\r\n requestClose,\r\n addBeforeClose\r\n } as ContainerContext)\r\n\r\n return {\r\n visible,\r\n open,\r\n requestClose,\r\n addBeforeClose,\r\n handleBeforeClose,\r\n onClosed,\r\n // iframe 桥接暴露\r\n setIframeRef,\r\n sendToIframe,\r\n targetOrigin\r\n }\r\n}\r\n","<template>\r\n <el-drawer\r\n v-if=\"mode === 'drawer'\"\r\n v-model=\"visible\"\r\n append-to-body\r\n :title=\"title\"\r\n :size=\"resolvedSize\"\r\n :direction=\"direction\"\r\n :before-close=\"handleBeforeClose\"\r\n v-bind=\"$attrs\"\r\n @closed=\"onClosed\"\r\n >\r\n <iframe\r\n v-if=\"url\"\r\n ref=\"iframeRef\"\r\n :key=\"iframeKey\"\r\n :src=\"resolvedUrl\"\r\n class=\"wd-container__iframe wd-container__iframe--drawer\"\r\n frameborder=\"0\"\r\n />\r\n <slot v-else />\r\n <template v-if=\"$slots.footer\" #footer>\r\n <slot name=\"footer\" :close=\"requestClose\" />\r\n </template>\r\n </el-drawer>\r\n\r\n <el-dialog\r\n v-else\r\n v-model=\"visible\"\r\n append-to-body\r\n :title=\"title\"\r\n :width=\"resolvedSize\"\r\n :before-close=\"handleBeforeClose\"\r\n v-bind=\"$attrs\"\r\n @closed=\"onClosed\"\r\n >\r\n <iframe\r\n v-if=\"url\"\r\n ref=\"iframeRef\"\r\n :key=\"iframeKey\"\r\n :src=\"resolvedUrl\"\r\n class=\"wd-container__iframe wd-container__iframe--dialog\"\r\n frameborder=\"0\"\r\n />\r\n <slot v-else />\r\n <template v-if=\"$slots.footer\" #footer>\r\n <slot name=\"footer\" :close=\"requestClose\" />\r\n </template>\r\n </el-dialog>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { computed, ref, watch, onMounted, type PropType } from 'vue'\r\nimport { useContainerController } from './useContainerController'\r\nimport { filterProp, headRefreshDatagridProp } from '../common/props'\r\n\r\ndefineOptions({ name: 'WdDrawer', inheritAttrs: false })\r\n\r\nconst props = defineProps({\r\n ...filterProp,\r\n ...headRefreshDatagridProp,\r\n modelValue: { type: Boolean, default: undefined },\r\n title: { type: String, default: '' },\r\n /** iframe 地址(设置后容器内以 iframe 加载) */\r\n url: { type: String, default: '' },\r\n /** 安全校验:允许的消息来源 origin */\r\n origin: { type: String, default: '' },\r\n /** 弹出形式:drawer 抽屉(默认)/ dialog 对话框 */\r\n mode: { type: String as PropType<'drawer' | 'dialog'>, default: 'drawer' },\r\n /** 尺寸(抽屉宽度/高度,对话框宽度;数字按 px) */\r\n size: { type: [String, Number], default: '50%' },\r\n /** 抽屉弹出方向 rtl/ltr/ttb/btt(仅 mode=drawer 生效) */\r\n direction: { type: String as PropType<'rtl' | 'ltr' | 'ttb' | 'btt'>, default: 'rtl' },\r\n /** 关闭前确认文案(设置后关闭弹确认) */\r\n confirmMessage: { type: String, default: '' },\r\n /** 容器携带数据(传给内部表单) */\r\n data: { type: Object as PropType<Record<string, any>>, default: undefined },\r\n /** 每次打开时重新加载 iframe 内容(url 模式生效;默认 false 保留上次内容) */\r\n reloadOnOpen: { type: Boolean, default: false }\r\n})\r\n\r\nconst emit = defineEmits([\r\n 'update:modelValue',\r\n 'open',\r\n 'close',\r\n 'confirm',\r\n // iframe 联动事件(子页面 postMessage 透传)\r\n 'iframe-message',\r\n 'iframe-ready',\r\n 'iframe-dirty',\r\n 'iframe-submit-success'\r\n])\r\n\r\nconst {\r\n visible,\r\n requestClose,\r\n handleBeforeClose,\r\n onClosed,\r\n setIframeRef,\r\n sendToIframe,\r\n targetOrigin\r\n} = useContainerController({ props, emit })\r\n\r\nconst iframeRef = ref<HTMLIFrameElement | null>(null)\r\n\r\n/** iframe 重建 key:reloadOnOpen 时每次打开自增,强制重新加载 iframe */\r\nconst iframeKey = ref(0)\r\nwatch(\r\n () => visible.value,\r\n (val) => {\r\n if (val && props.reloadOnOpen && props.url) {\r\n iframeKey.value += 1\r\n }\r\n }\r\n)\r\n\r\n// 同步 ref 到 controller\r\nwatch(iframeRef, (newRef) => {\r\n setIframeRef(newRef)\r\n})\r\n\r\nconst resolvedSize = computed(() => (typeof props.size === 'number' ? `${props.size}px` : props.size))\r\n\r\n/** iframe 地址:data 作为 query 追加(保持兼容现有实现) */\r\nconst resolvedUrl = computed(() => {\r\n if (!props.url) return ''\r\n if (!props.data) return props.url\r\n const qs = new URLSearchParams(\r\n Object.entries(props.data).reduce((acc, [k, v]) => {\r\n if (v !== undefined && v !== null) acc[k] = String(v)\r\n return acc\r\n }, {} as Record<string, string>)\r\n ).toString()\r\n if (!qs) return props.url\r\n return props.url + (props.url.includes('?') ? '&' : '?') + qs\r\n})\r\n\r\ndefineExpose({\r\n open: () => (visible.value = true),\r\n /** 向 iframe 内发送指令(如 wd-container:submit 触发表单提交) */\r\n sendToIframe\r\n})\r\n</script>\r\n\r\n<style scoped>\r\n.wd-container__iframe {\r\n width: 100%;\r\n border: 0;\r\n display: block;\r\n}\r\n.wd-container__iframe--drawer {\r\n height: 100%;\r\n min-height: 400px;\r\n}\r\n.wd-container__iframe--dialog {\r\n height: 60vh;\r\n}\r\n</style>\r\n"],"names":["useContainerController","options","props","emit","visible","ref","watch","val","beforeCloseGuards","syncVisible","open","sendInitToIframe","requestClose","reason","runGuards","afterClosed","addBeforeClose","guard","handleBeforeClose","done","ElMessageBox","onClosed","refreshDataGrid","iframeRef","targetOrigin","computed","isAllowedOrigin","eventOrigin","setIframeRef","el","sendToIframe","type","payload","msg","onBridgeMessage","event","data","_a","resolve","requestId","handler","e","_b","onMounted","onBeforeUnmount","provideContainer","__props","__emit","iframeKey","newRef","resolvedSize","resolvedUrl","qs","acc","k","v","__expose","_openBlock","_createBlock","_component_el_drawer","_mergeProps","_unref","$event","$attrs","_createSlots","_createElementBlock","_renderSlot","_ctx","$slots","_component_el_dialog"],"mappings":"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"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { defineComponent as w, ref as a, watch as x, computed as m, onMounted as b, onBeforeUnmount as S, openBlock as k, createElementBlock as B, normalizeStyle as H } from "vue";
|
|
2
|
-
import { _ as I } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
|
|
3
|
-
const K = ["src"], W = /* @__PURE__ */ w({
|
|
4
|
-
name: "WdIframe",
|
|
5
|
-
__name: "Iframe",
|
|
6
|
-
props: {
|
|
7
|
-
/** iframe 地址 */
|
|
8
|
-
src: { type: String, default: "" },
|
|
9
|
-
/** 固定高度(数字按 px) */
|
|
10
|
-
height: { type: [String, Number], default: "480px" },
|
|
11
|
-
/** 高度自适应(通过子页面 postMessage 上报高度) */
|
|
12
|
-
autoHeight: { type: Boolean, default: !1 },
|
|
13
|
-
/** 发送消息时使用的 targetOrigin(默认同源;跨域时需显式指定子页面 origin) */
|
|
14
|
-
origin: { type: String, default: "" },
|
|
15
|
-
/**
|
|
16
|
-
* 刷新信号:值变化时强制重新加载 iframe 内容。
|
|
17
|
-
* 常用于「每次显示时刷新」:父级在显示时机自增该值即可(例如 v-if 重建时不需此 prop,仅当 iframe 常驻 DOM 时才需要)。
|
|
18
|
-
*/
|
|
19
|
-
refreshKey: { type: [Number, String], default: 0 }
|
|
20
|
-
},
|
|
21
|
-
emits: ["load", "message"],
|
|
22
|
-
setup(i, { expose: d, emit: g }) {
|
|
23
|
-
const e = i, s = g, f = a(null), o = a(null), r = a(0);
|
|
24
|
-
x(
|
|
25
|
-
() => e.refreshKey,
|
|
26
|
-
() => {
|
|
27
|
-
r.value += 1;
|
|
28
|
-
}
|
|
29
|
-
);
|
|
30
|
-
const h = m(() => `${e.refreshKey}:${r.value}`), p = m(() => e.autoHeight && o.value ? { height: `${o.value}px` } : { height: typeof e.height == "number" ? `${e.height}px` : e.height });
|
|
31
|
-
function y() {
|
|
32
|
-
s("load");
|
|
33
|
-
}
|
|
34
|
-
function v(n) {
|
|
35
|
-
var c, l;
|
|
36
|
-
const t = e.origin || window.location.origin;
|
|
37
|
-
(l = (c = f.value) == null ? void 0 : c.contentWindow) == null || l.postMessage(n, t);
|
|
38
|
-
}
|
|
39
|
-
function _() {
|
|
40
|
-
r.value += 1;
|
|
41
|
-
}
|
|
42
|
-
function u(n) {
|
|
43
|
-
const t = n.data;
|
|
44
|
-
e.autoHeight && t && typeof t == "object" && t.type === "wd-iframe-height" && (o.value = Number(t.height) || null), s("message", t);
|
|
45
|
-
}
|
|
46
|
-
return b(() => {
|
|
47
|
-
window.addEventListener("message", u);
|
|
48
|
-
}), S(() => {
|
|
49
|
-
window.removeEventListener("message", u);
|
|
50
|
-
}), d({ send: v, refresh: _ }), (n, t) => (k(), B("iframe", {
|
|
51
|
-
ref_key: "iframeRef",
|
|
52
|
-
ref: f,
|
|
53
|
-
key: h.value,
|
|
54
|
-
src: i.src,
|
|
55
|
-
class: "wd-iframe",
|
|
56
|
-
style: H(p.value),
|
|
57
|
-
frameborder: "0",
|
|
58
|
-
onLoad: y
|
|
59
|
-
}, null, 44, K));
|
|
60
|
-
}
|
|
61
|
-
}), L = /* @__PURE__ */ I(W, [["__scopeId", "data-v-c0369841"]]);
|
|
62
|
-
export {
|
|
63
|
-
L as W
|
|
64
|
-
};
|
|
65
|
-
//# sourceMappingURL=Iframe-CeSiMnvR.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Iframe-CeSiMnvR.mjs","sources":["../../src/components/containers/Iframe.vue"],"sourcesContent":["<template>\r\n <iframe\r\n ref=\"iframeRef\"\r\n :key=\"renderKey\"\r\n :src=\"src\"\r\n class=\"wd-iframe\"\r\n :style=\"iframeStyle\"\r\n frameborder=\"0\"\r\n @load=\"onLoad\"\r\n />\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, computed, watch, onMounted, onBeforeUnmount, type PropType } from 'vue'\r\n\r\ndefineOptions({ name: 'WdIframe' })\r\n\r\nconst props = defineProps({\r\n /** iframe 地址 */\r\n src: { type: String, default: '' },\r\n /** 固定高度(数字按 px) */\r\n height: { type: [String, Number], default: '480px' },\r\n /** 高度自适应(通过子页面 postMessage 上报高度) */\r\n autoHeight: { type: Boolean, default: false },\r\n /** 发送消息时使用的 targetOrigin(默认同源;跨域时需显式指定子页面 origin) */\r\n origin: { type: String, default: '' },\r\n /**\r\n * 刷新信号:值变化时强制重新加载 iframe 内容。\r\n * 常用于「每次显示时刷新」:父级在显示时机自增该值即可(例如 v-if 重建时不需此 prop,仅当 iframe 常驻 DOM 时才需要)。\r\n */\r\n refreshKey: { type: [Number, String], default: 0 }\r\n})\r\n\r\nconst emit = defineEmits(['load', 'message'])\r\n\r\nconst iframeRef = ref<HTMLIFrameElement | null>(null)\r\nconst autoHeightValue = ref<number | null>(null)\r\n\r\n/** 内部刷新计数:refreshKey 变化 或 调用 refresh() 时自增,驱动 iframe 重建(强制重新加载) */\r\nconst renderTick = ref(0)\r\nwatch(\r\n () => props.refreshKey,\r\n () => {\r\n renderTick.value += 1\r\n }\r\n)\r\nconst renderKey = computed(() => `${props.refreshKey}:${renderTick.value}`)\r\n\r\nconst iframeStyle = computed(() => {\r\n if (props.autoHeight && autoHeightValue.value) {\r\n return { height: `${autoHeightValue.value}px` }\r\n }\r\n return { height: typeof props.height === 'number' ? `${props.height}px` : props.height }\r\n})\r\n\r\nfunction onLoad() {\r\n emit('load')\r\n}\r\n\r\n/**\r\n * 父 → 子:向 iframe 内页面发送消息(子页通过 window.addEventListener('message') 接收)\r\n */\r\nfunction send(message: any) {\r\n const targetOrigin = props.origin || window.location.origin\r\n iframeRef.value?.contentWindow?.postMessage(message, targetOrigin)\r\n}\r\n\r\n/** 强制重新加载 iframe 内容(重建 iframe 元素) */\r\nfunction refresh() {\r\n renderTick.value += 1\r\n}\r\n\r\n/** 子页面 postMessage 透传:约定 { type:'wd-iframe-height', height } 或任意消息 */\r\nfunction onMessage(event: MessageEvent) {\r\n const data = event.data\r\n if (props.autoHeight && data && typeof data === 'object' && data.type === 'wd-iframe-height') {\r\n autoHeightValue.value = Number(data.height) || null\r\n }\r\n emit('message', data)\r\n}\r\n\r\nonMounted(() => {\r\n window.addEventListener('message', onMessage)\r\n})\r\nonBeforeUnmount(() => {\r\n window.removeEventListener('message', onMessage)\r\n})\r\n\r\ndefineExpose({ send, refresh })\r\n</script>\r\n\r\n<style scoped>\r\n.wd-iframe {\r\n width: 100%;\r\n border: 0;\r\n display: block;\r\n}\r\n</style>\r\n"],"names":["props","__props","emit","__emit","iframeRef","ref","autoHeightValue","renderTick","watch","renderKey","computed","iframeStyle","onLoad","send","message","targetOrigin","_b","_a","refresh","onMessage","event","data","onMounted","onBeforeUnmount","__expose","_createElementBlock"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiBA,UAAMA,IAAQC,GAgBRC,IAAOC,GAEPC,IAAYC,EAA8B,IAAI,GAC9CC,IAAkBD,EAAmB,IAAI,GAGzCE,IAAaF,EAAI,CAAC;AACxB,IAAAG;AAAA,MACE,MAAMR,EAAM;AAAA,MACZ,MAAM;AACJ,QAAAO,EAAW,SAAS;AAAA,MACtB;AAAA,IAAA;AAEF,UAAME,IAAYC,EAAS,MAAM,GAAGV,EAAM,UAAU,IAAIO,EAAW,KAAK,EAAE,GAEpEI,IAAcD,EAAS,MACvBV,EAAM,cAAcM,EAAgB,QAC/B,EAAE,QAAQ,GAAGA,EAAgB,KAAK,KAAA,IAEpC,EAAE,QAAQ,OAAON,EAAM,UAAW,WAAW,GAAGA,EAAM,MAAM,OAAOA,EAAM,OAAA,CACjF;AAED,aAASY,IAAS;AAChB,MAAAV,EAAK,MAAM;AAAA,IACb;AAKA,aAASW,EAAKC,GAAc;;AAC1B,YAAMC,IAAef,EAAM,UAAU,OAAO,SAAS;AACrD,OAAAgB,KAAAC,IAAAb,EAAU,UAAV,gBAAAa,EAAiB,kBAAjB,QAAAD,EAAgC,YAAYF,GAASC;AAAA,IACvD;AAGA,aAASG,IAAU;AACjB,MAAAX,EAAW,SAAS;AAAA,IACtB;AAGA,aAASY,EAAUC,GAAqB;AACtC,YAAMC,IAAOD,EAAM;AACnB,MAAIpB,EAAM,cAAcqB,KAAQ,OAAOA,KAAS,YAAYA,EAAK,SAAS,uBACxEf,EAAgB,QAAQ,OAAOe,EAAK,MAAM,KAAK,OAEjDnB,EAAK,WAAWmB,CAAI;AAAA,IACtB;AAEA,WAAAC,EAAU,MAAM;AACd,aAAO,iBAAiB,WAAWH,CAAS;AAAA,IAC9C,CAAC,GACDI,EAAgB,MAAM;AACpB,aAAO,oBAAoB,WAAWJ,CAAS;AAAA,IACjD,CAAC,GAEDK,EAAa,EAAE,MAAAX,GAAM,SAAAK,GAAS,mBAvF5BO,EAQE,UAAA;AAAA,eAPI;AAAA,MAAJ,KAAIrB;AAAA,MACH,KAAKK,EAAA;AAAA,MACL,KAAKR,EAAA;AAAA,MACN,OAAM;AAAA,MACL,SAAOU,EAAA,KAAW;AAAA,MACnB,aAAY;AAAA,MACX,QAAAC;AAAA,IAAA;;;"}
|
|
@@ -1,80 +0,0 @@
|
|
|
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-C06mNpwY.mjs";
|
|
3
|
-
function O(n, s) {
|
|
4
|
-
const e = g(p(n, s));
|
|
5
|
-
return b(() => {
|
|
6
|
-
e.value = p(n, s);
|
|
7
|
-
}), e;
|
|
8
|
-
}
|
|
9
|
-
function x() {
|
|
10
|
-
return w();
|
|
11
|
-
}
|
|
12
|
-
function p(n, s) {
|
|
13
|
-
const e = n ? R(n) : {}, r = {};
|
|
14
|
-
if (s)
|
|
15
|
-
for (const [a, t] of Object.entries(s))
|
|
16
|
-
t !== void 0 && (r[a] = t);
|
|
17
|
-
return _({}, e, r);
|
|
18
|
-
}
|
|
19
|
-
const A = /* @__PURE__ */ q({
|
|
20
|
-
name: "WdRequester",
|
|
21
|
-
__name: "Requester",
|
|
22
|
-
props: {
|
|
23
|
-
modelValue: { type: Boolean },
|
|
24
|
-
url: {},
|
|
25
|
-
method: {},
|
|
26
|
-
params: {},
|
|
27
|
-
reqOptions: {}
|
|
28
|
-
},
|
|
29
|
-
emits: ["update:modelValue", "api-before", "api-success", "api-fail", "api-exception", "api-after"],
|
|
30
|
-
setup(n, { emit: s }) {
|
|
31
|
-
const e = n, r = O("WdRequester", e), a = s;
|
|
32
|
-
let t = null;
|
|
33
|
-
function d() {
|
|
34
|
-
t == null || t.abort();
|
|
35
|
-
}
|
|
36
|
-
function u() {
|
|
37
|
-
t && (t.abort(), t = null);
|
|
38
|
-
}
|
|
39
|
-
async function m() {
|
|
40
|
-
u();
|
|
41
|
-
const o = new AbortController();
|
|
42
|
-
t = o;
|
|
43
|
-
const f = {
|
|
44
|
-
...r.value.reqOptions || {},
|
|
45
|
-
...e.reqOptions || {},
|
|
46
|
-
signal: o.signal
|
|
47
|
-
};
|
|
48
|
-
try {
|
|
49
|
-
if (a("api-before", d), o.signal.aborted)
|
|
50
|
-
return;
|
|
51
|
-
let i;
|
|
52
|
-
const l = (e.method ?? r.value.method ?? "post").toLowerCase();
|
|
53
|
-
if (l === "get" || l === "delete" ? i = await c[l](e.url, e.params, f) : i = await c[l](e.url, e.params, f), o.signal.aborted)
|
|
54
|
-
return;
|
|
55
|
-
i.success ? a("api-success", i) : a("api-fail", i);
|
|
56
|
-
} catch (i) {
|
|
57
|
-
if (o.signal.aborted)
|
|
58
|
-
return;
|
|
59
|
-
a("api-exception", i);
|
|
60
|
-
} finally {
|
|
61
|
-
t === o && (t = null, a("api-after"), a("update:modelValue", !1));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return C(
|
|
65
|
-
() => e.modelValue,
|
|
66
|
-
(o) => {
|
|
67
|
-
o === !0 ? m() : u();
|
|
68
|
-
},
|
|
69
|
-
{ immediate: !0 }
|
|
70
|
-
), h(() => {
|
|
71
|
-
u();
|
|
72
|
-
}), (o, f) => v(o.$slots, "default");
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
export {
|
|
76
|
-
A as _,
|
|
77
|
-
x as a,
|
|
78
|
-
O as u
|
|
79
|
-
};
|
|
80
|
-
//# sourceMappingURL=Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.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,63 +0,0 @@
|
|
|
1
|
-
import { defineComponent as u, computed as y, resolveComponent as i, openBlock as t, createBlock as o, withCtx as l, createVNode as _, normalizeStyle as a, resolveDynamicComponent as r, createElementBlock as k, createCommentVNode as S, renderSlot as g, createTextVNode as v, toDisplayString as w } from "vue";
|
|
2
|
-
import { QuestionFilled as x, WarningFilled as C, InfoFilled as s } from "@element-plus/icons-vue";
|
|
3
|
-
import { _ as F } from "./_plugin-vue_export-helper-CHgC5LLL.mjs";
|
|
4
|
-
const T = /* @__PURE__ */ u({
|
|
5
|
-
name: "WdTips",
|
|
6
|
-
__name: "Tips",
|
|
7
|
-
props: {
|
|
8
|
-
/** 提示内容 */
|
|
9
|
-
tips: { type: String, default: "" },
|
|
10
|
-
/** word=悬停图标模式 / box=行内文字模式 */
|
|
11
|
-
type: { type: String, default: "word" },
|
|
12
|
-
/** 图标组件名(InfoFilled/WarningFilled/QuestionFilled) */
|
|
13
|
-
icon: { type: String, default: "InfoFilled" },
|
|
14
|
-
/** 图标/文字颜色 */
|
|
15
|
-
color: { type: String, default: "#909399" }
|
|
16
|
-
},
|
|
17
|
-
setup(e) {
|
|
18
|
-
const p = e, d = { InfoFilled: s, WarningFilled: C, QuestionFilled: x }, n = y(() => d[p.icon] || s);
|
|
19
|
-
return (m, W) => {
|
|
20
|
-
const c = i("el-icon"), f = i("el-tooltip");
|
|
21
|
-
return e.type === "word" ? (t(), o(f, {
|
|
22
|
-
key: 0,
|
|
23
|
-
content: e.tips,
|
|
24
|
-
effect: "dark",
|
|
25
|
-
placement: "top"
|
|
26
|
-
}, {
|
|
27
|
-
default: l(() => [
|
|
28
|
-
_(c, {
|
|
29
|
-
class: "wd-tips__icon",
|
|
30
|
-
style: a({ color: e.color })
|
|
31
|
-
}, {
|
|
32
|
-
default: l(() => [
|
|
33
|
-
(t(), o(r(n.value)))
|
|
34
|
-
]),
|
|
35
|
-
_: 1
|
|
36
|
-
}, 8, ["style"])
|
|
37
|
-
]),
|
|
38
|
-
_: 1
|
|
39
|
-
}, 8, ["content"])) : (t(), k("span", {
|
|
40
|
-
key: 1,
|
|
41
|
-
class: "wd-tips__box",
|
|
42
|
-
style: a({ color: e.color })
|
|
43
|
-
}, [
|
|
44
|
-
n.value ? (t(), o(c, {
|
|
45
|
-
key: 0,
|
|
46
|
-
class: "wd-tips__box-icon"
|
|
47
|
-
}, {
|
|
48
|
-
default: l(() => [
|
|
49
|
-
(t(), o(r(n.value)))
|
|
50
|
-
]),
|
|
51
|
-
_: 1
|
|
52
|
-
})) : S("", !0),
|
|
53
|
-
g(m.$slots, "default", {}, () => [
|
|
54
|
-
v(w(e.tips), 1)
|
|
55
|
-
], !0)
|
|
56
|
-
], 4));
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
}), N = /* @__PURE__ */ F(T, [["__scopeId", "data-v-bacdf99f"]]);
|
|
60
|
-
export {
|
|
61
|
-
N as W
|
|
62
|
-
};
|
|
63
|
-
//# sourceMappingURL=Tips-IWCZcR1K.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Tips-IWCZcR1K.mjs","sources":["../../src/components/styles/Tips.vue"],"sourcesContent":["<template>\n <!-- word:悬停图标模式 -->\n <el-tooltip v-if=\"type === 'word'\" :content=\"tips\" effect=\"dark\" placement=\"top\">\n <el-icon class=\"wd-tips__icon\" :style=\"{ color: color }\">\n <component :is=\"iconComp\" />\n </el-icon>\n </el-tooltip>\n\n <!-- box:行内文字模式 -->\n <span v-else class=\"wd-tips__box\" :style=\"{ color: color }\">\n <el-icon v-if=\"iconComp\" class=\"wd-tips__box-icon\">\n <component :is=\"iconComp\" />\n </el-icon>\n <slot>{{ tips }}</slot>\n </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, type PropType } from 'vue'\nimport { InfoFilled, WarningFilled, QuestionFilled } from '@element-plus/icons-vue'\n\ndefineOptions({ name: 'WdTips' })\n\nconst props = defineProps({\n /** 提示内容 */\n tips: { type: String, default: '' },\n /** word=悬停图标模式 / box=行内文字模式 */\n type: { type: String as PropType<'word' | 'box'>, default: 'word' },\n /** 图标组件名(InfoFilled/WarningFilled/QuestionFilled) */\n icon: { type: String, default: 'InfoFilled' },\n /** 图标/文字颜色 */\n color: { type: String, default: '#909399' }\n})\n\nconst iconMap: Record<string, any> = { InfoFilled, WarningFilled, QuestionFilled }\n\nconst iconComp = computed(() => iconMap[props.icon] || InfoFilled)\n</script>\n\n<style scoped>\n.wd-tips__icon {\n cursor: pointer;\n vertical-align: middle;\n}\n.wd-tips__box {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--wd-font-size-sm, 12px);\n}\n.wd-tips__box-icon {\n flex-shrink: 0;\n}\n</style>\n"],"names":["props","__props","iconMap","InfoFilled","WarningFilled","QuestionFilled","iconComp","computed","_createBlock","_component_el_tooltip","_createVNode","_component_el_icon","_openBlock","_resolveDynamicComponent","_createElementBlock","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,UAAMA,IAAQC,GAWRC,IAA+B,EAAE,YAAAC,GAAY,eAAAC,GAAe,gBAAAC,EAAA,GAE5DC,IAAWC,EAAS,MAAML,EAAQF,EAAM,IAAI,KAAKG,CAAU;;;aAlC7CF,EAAA,SAAI,eAAtBO,EAIaC,GAAA;AAAA;QAJuB,SAASR,EAAA;AAAA,QAAM,QAAO;AAAA,QAAO,WAAU;AAAA,MAAA;mBACzE,MAEU;AAAA,UAFVS,EAEUC,GAAA;AAAA,YAFD,OAAM;AAAA,YAAiB,kBAAgBV,EAAA,OAAK;AAAA,UAAA;uBACnD,MAA4B;AAAA,eAA5BW,KAAAJ,EAA4BK,EAAZP,EAAA,KAAQ,CAAA;AAAA,YAAA;;;;;kCAK5BQ,EAKO,QAAA;AAAA;QALM,OAAM;AAAA,QAAgB,kBAAgBb,EAAA,OAAK;AAAA,MAAA;QACvCK,EAAA,cAAfE,EAEUG,GAAA;AAAA;UAFe,OAAM;AAAA,QAAA;qBAC7B,MAA4B;AAAA,aAA5BC,KAAAJ,EAA4BK,EAAZP,EAAA,KAAQ,CAAA;AAAA,UAAA;;;QAE1BS,EAAuBC,yBAAvB,MAAuB;AAAA,cAAdf,EAAA,IAAI,GAAA,CAAA;AAAA,QAAA;;;;;"}
|