workdesktop-ai 1.2.0 → 1.2.1
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 +12 -0
- package/README.md +11 -8
- 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-CH_B3jbO.mjs → ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs} +2 -2
- package/dist/chunks/{ApiButton.vue_vue_type_script_setup_true_lang-CH_B3jbO.mjs.map → ApiButton.vue_vue_type_script_setup_true_lang-3BjZSAPZ.mjs.map} +1 -1
- package/dist/chunks/{AutoComplete-6yrCFGZ5.mjs → AutoComplete-C6Nxatvt.mjs} +2 -2
- package/dist/chunks/{AutoComplete-6yrCFGZ5.mjs.map → AutoComplete-C6Nxatvt.mjs.map} +1 -1
- package/dist/chunks/{CheckboxList-ChmfF6zs.mjs → CheckboxList-5AEx33r5.mjs} +2 -2
- package/dist/chunks/{CheckboxList-ChmfF6zs.mjs.map → CheckboxList-5AEx33r5.mjs.map} +1 -1
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-D9ZUQB7V.mjs → ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs} +2 -2
- package/dist/chunks/{ConfirmButton.vue_vue_type_script_setup_true_lang-D9ZUQB7V.mjs.map → ConfirmButton.vue_vue_type_script_setup_true_lang-CXYH1Rlc.mjs.map} +1 -1
- package/dist/chunks/{DataForm-Rsa1PT-X.mjs → DataForm-C6VLTSOm.mjs} +3 -3
- package/dist/chunks/{DataForm-Rsa1PT-X.mjs.map → DataForm-C6VLTSOm.mjs.map} +1 -1
- package/dist/chunks/{DataGrid-DzbJpT43.mjs → DataGrid-Dd7n5JM7.mjs} +3 -3
- package/dist/chunks/{DataGrid-DzbJpT43.mjs.map → DataGrid-Dd7n5JM7.mjs.map} +1 -1
- package/dist/chunks/{EditableGrid-C-0uy89H.mjs → EditableGrid-CDeeVkaX.mjs} +3 -3
- package/dist/chunks/{EditableGrid-C-0uy89H.mjs.map → EditableGrid-CDeeVkaX.mjs.map} +1 -1
- package/dist/chunks/{ImageUpload-CrDyIjWC.mjs → ImageUpload-CQA9XQ7Q.mjs} +2 -2
- package/dist/chunks/{ImageUpload-CrDyIjWC.mjs.map → ImageUpload-CQA9XQ7Q.mjs.map} +1 -1
- package/dist/chunks/Path-C_oyo6Dg.mjs +200 -0
- package/dist/chunks/Path-C_oyo6Dg.mjs.map +1 -0
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs → PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs} +2 -2
- package/dist/chunks/{PromptButton.vue_vue_type_script_setup_true_lang-ClrF3C2w.mjs.map → PromptButton.vue_vue_type_script_setup_true_lang-oYaMH-CI.mjs.map} +1 -1
- package/dist/chunks/{RadioList-BIwUZ6lm.mjs → RadioList-BUWcP_Pk.mjs} +2 -2
- package/dist/chunks/{RadioList-BIwUZ6lm.mjs.map → RadioList-BUWcP_Pk.mjs.map} +1 -1
- package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs → Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs} +2 -2
- package/dist/chunks/{Requester.vue_vue_type_script_setup_true_lang-Bu10N1Hj.mjs.map → Requester.vue_vue_type_script_setup_true_lang-DkLqAjug.mjs.map} +1 -1
- package/dist/chunks/{Select-DlJ9U0nE.mjs → Select-uvFy7_NU.mjs} +2 -2
- package/dist/chunks/{Select-DlJ9U0nE.mjs.map → Select-uvFy7_NU.mjs.map} +1 -1
- package/dist/chunks/Station-DLV19USa.mjs +780 -0
- package/dist/chunks/Station-DLV19USa.mjs.map +1 -0
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-BxJdsReQ.mjs → Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs} +2 -2
- package/dist/chunks/{Switch.vue_vue_type_script_setup_true_lang-BxJdsReQ.mjs.map → Switch.vue_vue_type_script_setup_true_lang-DUhXAGs2.mjs.map} +1 -1
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-DORizGEF.mjs → Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs} +2 -2
- package/dist/chunks/{Upload.vue_vue_type_script_setup_true_lang-DORizGEF.mjs.map → Upload.vue_vue_type_script_setup_true_lang-CHGCjpKK.mjs.map} +1 -1
- package/dist/chunks/{Viewer-DcMSN3_1.mjs → Viewer-CjLSQTrw.mjs} +2 -2
- package/dist/chunks/{Viewer-DcMSN3_1.mjs.map → Viewer-CjLSQTrw.mjs.map} +1 -1
- package/dist/chunks/{http-9ToPNkWJ.mjs → http-C06mNpwY.mjs} +1180 -1065
- package/dist/chunks/http-C06mNpwY.mjs.map +1 -0
- package/dist/chunks/station-linkage-D54-_iyL.mjs +77 -0
- package/dist/chunks/station-linkage-D54-_iyL.mjs.map +1 -0
- package/dist/chunks/{useApiAction-BetCGQrx.mjs → useApiAction-DxVQWWxv.mjs} +2 -2
- package/dist/chunks/{useApiAction-BetCGQrx.mjs.map → useApiAction-DxVQWWxv.mjs.map} +1 -1
- package/dist/chunks/{useColumnSettings-CnXeA0k7.mjs → useColumnSettings-BwG2V9xp.mjs} +2 -2
- package/dist/chunks/{useColumnSettings-CnXeA0k7.mjs.map → useColumnSettings-BwG2V9xp.mjs.map} +1 -1
- package/dist/chunks/{useOptionsLoader-BwRdHDPL.mjs → useOptionsLoader-DEVCYhrp.mjs} +2 -2
- package/dist/chunks/{useOptionsLoader-BwRdHDPL.mjs.map → useOptionsLoader-DEVCYhrp.mjs.map} +1 -1
- package/dist/confirm-button/index.mjs +1 -1
- package/dist/data-form/index.mjs +1 -1
- package/dist/data-form/style.css +1 -1
- package/dist/data-grid/index.mjs +1 -1
- package/dist/editable-grid/index.mjs +1 -1
- package/dist/image-upload/index.mjs +1 -1
- package/dist/index.esm.js +86 -80
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +124 -21
- package/dist/index.umd.js.map +1 -1
- package/dist/path/index.mjs +7 -0
- package/dist/path/index.mjs.map +1 -0
- package/dist/path/style.css +1 -0
- 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/upload/index.mjs +1 -1
- package/dist/viewer/index.mjs +1 -1
- package/llms.txt +69 -9
- package/package.json +6 -1
- package/dist/chunks/Station-CrMTjqfa.mjs +0 -796
- package/dist/chunks/Station-CrMTjqfa.mjs.map +0 -1
- package/dist/chunks/http-9ToPNkWJ.mjs.map +0 -1
- package/dist/types/src/components/buttons/ApiButton.vue.d.ts +0 -134
- package/dist/types/src/components/buttons/ConfirmButton.vue.d.ts +0 -169
- package/dist/types/src/components/buttons/DialogButton.vue.d.ts +0 -167
- package/dist/types/src/components/buttons/DrawerButton.vue.d.ts +0 -186
- package/dist/types/src/components/buttons/PopconfirmButton.vue.d.ts +0 -317
- package/dist/types/src/components/buttons/PromptButton.vue.d.ts +0 -180
- package/dist/types/src/components/buttons/RouteButton.vue.d.ts +0 -122
- package/dist/types/src/components/buttons/TipsButton.vue.d.ts +0 -66
- package/dist/types/src/components/buttons/useApiAction.d.ts +0 -20
- package/dist/types/src/components/common/props.d.ts +0 -122
- package/dist/types/src/components/containers/Drawer.vue.d.ts +0 -172
- package/dist/types/src/components/containers/Iframe.vue.d.ts +0 -81
- package/dist/types/src/components/containers/containerContext.d.ts +0 -15
- package/dist/types/src/components/containers/useContainerController.d.ts +0 -24
- package/dist/types/src/components/containers/useIframeContainer.d.ts +0 -20
- package/dist/types/src/components/core/Requester.vue.d.ts +0 -41
- package/dist/types/src/components/data/datagrid/DataGrid.vue.d.ts +0 -542
- package/dist/types/src/components/data/datagrid/useColumnSettings.d.ts +0 -62
- package/dist/types/src/components/data/editable-grid/EditableGrid.vue.d.ts +0 -586
- package/dist/types/src/components/data/viewer/Viewer.vue.d.ts +0 -187
- package/dist/types/src/components/form/FormItem.vue.d.ts +0 -62
- package/dist/types/src/components/form/SearchItem.vue.d.ts +0 -62
- package/dist/types/src/components/form/SearchPanel.vue.d.ts +0 -167
- package/dist/types/src/components/form/data-form/DataForm.vue.d.ts +0 -311
- package/dist/types/src/components/index.d.ts +0 -31
- package/dist/types/src/components/inputs/AutoComplete.vue.d.ts +0 -166
- package/dist/types/src/components/inputs/CheckboxList.vue.d.ts +0 -166
- package/dist/types/src/components/inputs/RadioList.vue.d.ts +0 -166
- package/dist/types/src/components/inputs/Select.vue.d.ts +0 -176
- package/dist/types/src/components/inputs/Switch.vue.d.ts +0 -116
- package/dist/types/src/components/inputs/useOptionsLoader.d.ts +0 -32
- package/dist/types/src/components/layout/Station.vue.d.ts +0 -302
- package/dist/types/src/components/layout/StationMenuNode.vue.d.ts +0 -20
- package/dist/types/src/components/layout/types.d.ts +0 -54
- package/dist/types/src/components/styles/Panel.vue.d.ts +0 -94
- package/dist/types/src/components/styles/Tips.vue.d.ts +0 -60
- package/dist/types/src/components/upload/ImageUpload.vue.d.ts +0 -176
- package/dist/types/src/components/upload/Upload.vue.d.ts +0 -235
- package/dist/types/src/entries/api-button.d.ts +0 -9
- package/dist/types/src/entries/auto-complete.d.ts +0 -9
- package/dist/types/src/entries/checkbox-list.d.ts +0 -9
- package/dist/types/src/entries/components-map.d.ts +0 -8
- package/dist/types/src/entries/confirm-button.d.ts +0 -9
- package/dist/types/src/entries/data-form.d.ts +0 -9
- package/dist/types/src/entries/data-grid.d.ts +0 -9
- package/dist/types/src/entries/dialog-button.d.ts +0 -9
- package/dist/types/src/entries/drawer-button.d.ts +0 -9
- package/dist/types/src/entries/drawer.d.ts +0 -9
- package/dist/types/src/entries/editable-grid.d.ts +0 -9
- package/dist/types/src/entries/form-item.d.ts +0 -9
- package/dist/types/src/entries/iframe.d.ts +0 -9
- package/dist/types/src/entries/image-upload.d.ts +0 -9
- package/dist/types/src/entries/panel.d.ts +0 -9
- package/dist/types/src/entries/prompt-button.d.ts +0 -9
- package/dist/types/src/entries/radio-list.d.ts +0 -9
- package/dist/types/src/entries/requester.d.ts +0 -9
- package/dist/types/src/entries/route-button.d.ts +0 -9
- package/dist/types/src/entries/search-item.d.ts +0 -9
- package/dist/types/src/entries/search-panel.d.ts +0 -9
- package/dist/types/src/entries/select.d.ts +0 -9
- package/dist/types/src/entries/station.d.ts +0 -9
- package/dist/types/src/entries/switch.d.ts +0 -9
- package/dist/types/src/entries/tips-button.d.ts +0 -9
- package/dist/types/src/entries/tips.d.ts +0 -9
- package/dist/types/src/entries/upload.d.ts +0 -9
- package/dist/types/src/entries/viewer.d.ts +0 -9
- package/dist/types/src/index.d.ts +0 -23
- package/dist/types/src/lib/composables/useConfig.d.ts +0 -19
- package/dist/types/src/lib/composables/useDataGrid.d.ts +0 -69
- package/dist/types/src/lib/composables/useEventBus.d.ts +0 -16
- package/dist/types/src/lib/composables/useGlobalState.d.ts +0 -5
- package/dist/types/src/lib/composables/useRequest.d.ts +0 -42
- package/dist/types/src/lib/configs/default-config.d.ts +0 -6
- package/dist/types/src/lib/core/config.d.ts +0 -28
- package/dist/types/src/lib/core/http.d.ts +0 -100
- package/dist/types/src/lib/core/linkage.d.ts +0 -48
- package/dist/types/src/lib/core/skins/apple.d.ts +0 -3
- package/dist/types/src/lib/core/skins/business.d.ts +0 -3
- package/dist/types/src/lib/core/skins/chinese.d.ts +0 -3
- package/dist/types/src/lib/core/skins/cool.d.ts +0 -3
- package/dist/types/src/lib/core/skins/cyberpunk.d.ts +0 -3
- package/dist/types/src/lib/core/skins/default.d.ts +0 -3
- package/dist/types/src/lib/core/skins/fashion.d.ts +0 -3
- package/dist/types/src/lib/core/skins/flat.d.ts +0 -3
- package/dist/types/src/lib/core/skins/governance.d.ts +0 -3
- package/dist/types/src/lib/core/skins/index.d.ts +0 -15
- package/dist/types/src/lib/core/skins/tech-brain.d.ts +0 -5
- package/dist/types/src/lib/core/skins/tech.d.ts +0 -3
- package/dist/types/src/lib/core/skins/types.d.ts +0 -19
- package/dist/types/src/lib/core/station-linkage.d.ts +0 -41
- package/dist/types/src/lib/core/theme.d.ts +0 -11
- package/dist/types/src/lib/core/utils.d.ts +0 -28
- package/dist/types/src/lib/install.d.ts +0 -11
- package/dist/types/src/types/config.d.ts +0 -130
- package/dist/types/src/types/index.d.ts +0 -4
- package/dist/types/vite.config.d.ts +0 -7
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WdViewer 单独入口
|
|
3
|
-
* 用法:import WdViewer from 'workdesktop-ai/viewer'
|
|
4
|
-
* import 'workdesktop-ai/viewer/style.css'
|
|
5
|
-
*/
|
|
6
|
-
import '../styles/index.css';
|
|
7
|
-
import WdViewer from '../components/data/viewer/Viewer.vue';
|
|
8
|
-
export { WdViewer };
|
|
9
|
-
export default WdViewer;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WorkDesktop 组件库主入口
|
|
3
|
-
*
|
|
4
|
-
* ESM:import WorkDesktop from 'workdesktop-ai'
|
|
5
|
-
* UMD:window.WorkDesktop(script 标签,配合 window.workDesktopConfig)
|
|
6
|
-
*/
|
|
7
|
-
import './styles/index.css';
|
|
8
|
-
export { default as WorkDesktop, default } from './lib/install';
|
|
9
|
-
export * from './components';
|
|
10
|
-
export { initConfig, setGlobalConfig, getGlobalConfig, resetConfig, mergeConfig, getComponentDefault } from './lib/core/config';
|
|
11
|
-
export { SKIN_PRESETS, getSkinPreset, listSkins } from './lib/core/skins';
|
|
12
|
-
export type { SkinPreset } from './lib/core/skins';
|
|
13
|
-
export { RequestAPI, request, default as http } from './lib/core/http';
|
|
14
|
-
export type { ApiResult, ApiEventPayload, ApiEventType, ApiEventHandler } from './lib/core/http';
|
|
15
|
-
export { registerDataGrid, refreshDataGrid, searchDataGrid, resetSearchDataGrid, getDataGrids, clearLinkageRegistry } from './lib/core/linkage';
|
|
16
|
-
export { registerStation, setStationFooter, refreshStationView } from './lib/core/station-linkage';
|
|
17
|
-
export { useRequest } from './lib/composables/useRequest';
|
|
18
|
-
export { useDataGrid } from './lib/composables/useDataGrid';
|
|
19
|
-
export { useConfig, useGlobalConfig } from './lib/composables/useConfig';
|
|
20
|
-
export { useEventBus } from './lib/composables/useEventBus';
|
|
21
|
-
export { useGlobalState } from './lib/composables/useGlobalState';
|
|
22
|
-
export { deepMerge } from './lib/core/utils';
|
|
23
|
-
export type * from './types';
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { WorkDesktopConfig } from '../../types/config';
|
|
2
|
-
/**
|
|
3
|
-
* useConfig(PRD 5.3 / 5.2)
|
|
4
|
-
*
|
|
5
|
-
* 组件内合并三级配置:全局 componentDefault[组件名] → 本地 props。
|
|
6
|
-
* 全局配置在组件 onMounted 时读取一次并缓存(运行中改配置只影响新挂载组件)。
|
|
7
|
-
*
|
|
8
|
-
* 返回一个响应式 ref,merge 后的组件配置对象:
|
|
9
|
-
* componentDefault 的值作为默认,props 中非 undefined 的值覆盖。
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* const cfg = useConfig('WdDataGrid', props)
|
|
13
|
-
* cfg.value.withPager
|
|
14
|
-
*/
|
|
15
|
-
export declare function useConfig<T extends Record<string, any> = Record<string, any>>(componentName?: string, props?: T): import("vue").Ref<any, any> extends T ? T extends T & import("vue").Ref<any, any> ? import("@vue/shared").IfAny<T, import("vue").ShallowRef<T, T>, T> : import("vue").ShallowRef<T, T> : import("vue").ShallowRef<T, T>;
|
|
16
|
-
/**
|
|
17
|
-
* 非响应式:直接取当前全局 WorkDesktopConfig
|
|
18
|
-
*/
|
|
19
|
-
export declare function useGlobalConfig(): WorkDesktopConfig;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* useDataGrid(PRD 5.3)
|
|
3
|
-
* DataGrid 状态管理:分页 / 搜索 / 选中 / 请求
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* const grid = useDataGrid({ pageSize: 20 })
|
|
7
|
-
* grid.fetchData()
|
|
8
|
-
*/
|
|
9
|
-
export interface SortState {
|
|
10
|
-
prop: string;
|
|
11
|
-
order: 'ascending' | 'descending';
|
|
12
|
-
}
|
|
13
|
-
export interface UseDataGridOptions {
|
|
14
|
-
/** 数据接口地址 */
|
|
15
|
-
api?: string;
|
|
16
|
-
/** 请求方法,默认 post */
|
|
17
|
-
apiMethod?: 'get' | 'post' | 'put' | 'delete';
|
|
18
|
-
/** 固定请求参数 */
|
|
19
|
-
apiParam?: Record<string, any>;
|
|
20
|
-
/** 初始每页条数 */
|
|
21
|
-
pageSize?: number;
|
|
22
|
-
/** 是否自动请求 */
|
|
23
|
-
immediate?: boolean;
|
|
24
|
-
/** 请求级覆盖 */
|
|
25
|
-
reqOptions?: import('../../types/config').ReqOptions;
|
|
26
|
-
/** 请求成功回调(解封后的列表结果) */
|
|
27
|
-
onLoaded?: (result: {
|
|
28
|
-
list: any[];
|
|
29
|
-
total: number;
|
|
30
|
-
}) => void;
|
|
31
|
-
}
|
|
32
|
-
export interface ListData {
|
|
33
|
-
list: any[];
|
|
34
|
-
total: number;
|
|
35
|
-
pageSize: number;
|
|
36
|
-
currentPage: number;
|
|
37
|
-
}
|
|
38
|
-
export declare function useDataGrid(options?: UseDataGridOptions): {
|
|
39
|
-
currentPage: import("vue").Ref<number, number>;
|
|
40
|
-
page: import("vue").Ref<number, number>;
|
|
41
|
-
pageSize: import("vue").Ref<number, number>;
|
|
42
|
-
total: import("vue").Ref<number, number>;
|
|
43
|
-
list: import("vue").ShallowRef<any[], any[]>;
|
|
44
|
-
loading: import("vue").Ref<boolean, boolean>;
|
|
45
|
-
searchParams: Record<string, any>;
|
|
46
|
-
selection: import("vue").Ref<any[], any[]>;
|
|
47
|
-
sortState: import("vue").Ref<{
|
|
48
|
-
prop: string;
|
|
49
|
-
order: "ascending" | "descending";
|
|
50
|
-
} | null, SortState | {
|
|
51
|
-
prop: string;
|
|
52
|
-
order: "ascending" | "descending";
|
|
53
|
-
} | null>;
|
|
54
|
-
fetchData: (extra?: Record<string, any>) => Promise<ListData>;
|
|
55
|
-
refresh: () => Promise<ListData>;
|
|
56
|
-
reset: () => Promise<ListData>;
|
|
57
|
-
search: (params?: Record<string, any>) => Promise<ListData>;
|
|
58
|
-
changeSort: ({ prop, order }: {
|
|
59
|
-
prop: string;
|
|
60
|
-
order: "ascending" | "descending" | null;
|
|
61
|
-
}) => Promise<ListData>;
|
|
62
|
-
onChangeCurrentpage: (value: number) => Promise<ListData>;
|
|
63
|
-
onChangePagesize: (value: number) => Promise<ListData>;
|
|
64
|
-
setSelection: (rows: any[]) => void;
|
|
65
|
-
getSelection: () => any[];
|
|
66
|
-
clearSelection: () => void;
|
|
67
|
-
buildParams: (extra?: Record<string, any>) => Record<string, any>;
|
|
68
|
-
};
|
|
69
|
-
export type DataGridController = ReturnType<typeof useDataGrid>;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 轻量事件总线(PRD 5.3 / 6.3)
|
|
3
|
-
* 跨组件事件联动。组件卸载自动 off。
|
|
4
|
-
*/
|
|
5
|
-
type Handler = (payload?: any) => void;
|
|
6
|
-
declare function emit(event: string, payload?: any): void;
|
|
7
|
-
declare function off(event: string, handler: Handler): void;
|
|
8
|
-
declare function clear(event?: string): void;
|
|
9
|
-
export declare function useEventBus(): {
|
|
10
|
-
emit: typeof emit;
|
|
11
|
-
on: (event: string, handler: Handler) => () => void;
|
|
12
|
-
off: typeof off;
|
|
13
|
-
clear: typeof clear;
|
|
14
|
-
};
|
|
15
|
-
export type EventBus = ReturnType<typeof useEventBus>;
|
|
16
|
-
export {};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { type ApiResult } from '../core/http';
|
|
2
|
-
import type { ReqOptions } from '../../types/config';
|
|
3
|
-
/**
|
|
4
|
-
* useRequest(PRD 5.3)
|
|
5
|
-
* 封装请求逻辑,返回 data/loading/error + 请求方法。
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* const { data, loading, run } = useRequest<User[]>('/api/users', {
|
|
9
|
-
* method: 'post',
|
|
10
|
-
* immediate: false,
|
|
11
|
-
* reqConfig: { showTips: false }
|
|
12
|
-
* })
|
|
13
|
-
* run({ page: 1 })
|
|
14
|
-
*/
|
|
15
|
-
export interface UseRequestOptions {
|
|
16
|
-
/** 请求方法,默认 post */
|
|
17
|
-
method?: 'get' | 'post' | 'put' | 'delete';
|
|
18
|
-
/** 是否立即自动请求,默认 true */
|
|
19
|
-
immediate?: boolean;
|
|
20
|
-
/** 自动请求时的初始参数 */
|
|
21
|
-
initialParams?: any;
|
|
22
|
-
/** 请求级覆盖项(透传给 http) */
|
|
23
|
-
reqOptions?: ReqOptions;
|
|
24
|
-
/** 成功回调(data 为解封后的业务数据) */
|
|
25
|
-
onSuccess?: (data: any, result: ApiResult) => void;
|
|
26
|
-
/** 业务失败回调 */
|
|
27
|
-
onFail?: (result: ApiResult) => void;
|
|
28
|
-
/** 异常回调 */
|
|
29
|
-
onError?: (error: any) => void;
|
|
30
|
-
}
|
|
31
|
-
export declare function useRequest<T = any>(api: string | (() => string), options?: UseRequestOptions): {
|
|
32
|
-
data: import("vue").Ref<any, any> extends T | null ? import("vue").ShallowRef<null, null> | (T extends T & import("vue").Ref<any, any> ? import("@vue/shared").IfAny<T, import("vue").ShallowRef<T, T>, T> : import("vue").ShallowRef<T, T>) : import("vue").ShallowRef<T | null, T | null>;
|
|
33
|
-
loading: import("vue").Ref<boolean, boolean>;
|
|
34
|
-
error: import("vue").ShallowRef<Error | null, Error | null>;
|
|
35
|
-
run: (params?: any) => Promise<ApiResult<T> | null>;
|
|
36
|
-
refresh: () => Promise<ApiResult<T> | null>;
|
|
37
|
-
abort: () => void;
|
|
38
|
-
};
|
|
39
|
-
/** 工具:解包可能为 ref 的值 */
|
|
40
|
-
export declare function unrefValue<T>(v: T | {
|
|
41
|
-
value: T;
|
|
42
|
-
}): T;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { DeepPartial, WorkDesktopConfig } from '../../types/config';
|
|
2
|
-
/**
|
|
3
|
-
* 增量合并到全局层。库 install 时与运行时 setGlobalConfig 共用。
|
|
4
|
-
* 返回 merge 后的有效配置。
|
|
5
|
-
*/
|
|
6
|
-
export declare function setGlobalConfig(partial?: DeepPartial<WorkDesktopConfig>): WorkDesktopConfig;
|
|
7
|
-
/**
|
|
8
|
-
* 读取当前全局层(含默认层 merge 结果)
|
|
9
|
-
*/
|
|
10
|
-
export declare function getGlobalConfig(): WorkDesktopConfig;
|
|
11
|
-
/**
|
|
12
|
-
* 恢复默认层
|
|
13
|
-
*/
|
|
14
|
-
export declare function resetConfig(): WorkDesktopConfig;
|
|
15
|
-
/**
|
|
16
|
-
* 合并本地层(组件 props / 组件级配置),产出最终配置。
|
|
17
|
-
* 优先级:localProps > globalConfig > defaultConfig
|
|
18
|
-
*/
|
|
19
|
-
export declare function mergeConfig(local?: DeepPartial<WorkDesktopConfig> | Record<string, any>): WorkDesktopConfig;
|
|
20
|
-
/**
|
|
21
|
-
* 取某组件类型的全局默认配置(page.componentDefault[PascalName])
|
|
22
|
-
*/
|
|
23
|
-
export declare function getComponentDefault(componentName: string): Record<string, any>;
|
|
24
|
-
/**
|
|
25
|
-
* 库初始化:合并双入口配置(npm app.use 参数 + window.workDesktopConfig)
|
|
26
|
-
* 两条入口汇入同一套 merge 逻辑,行为一致(PRD 8.2)
|
|
27
|
-
*/
|
|
28
|
-
export declare function initConfig(useConfig?: DeepPartial<WorkDesktopConfig>): WorkDesktopConfig;
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { type AxiosRequestConfig } from 'axios';
|
|
2
|
-
import type { ReqOptions } from '../../types/config';
|
|
3
|
-
/**
|
|
4
|
-
* HTTP 请求模块(PRD 5.1 / 第 7 章)
|
|
5
|
-
*
|
|
6
|
-
* RequestAPI 是本库的请求核心(PRD 5.1):所有请求类组件(DataGrid/DataForm/
|
|
7
|
-
* 按钮组/输入选择/上传等)都基于它开发;同时对外公开,允许开发者在组件外
|
|
8
|
-
* 手动调用 API 请求代码。库内置全局单例 `request`,也可 `new RequestAPI()` 自建实例。
|
|
9
|
-
*
|
|
10
|
-
* 响应处理流程:
|
|
11
|
-
* 1. 请求前显示 loading(可配置)
|
|
12
|
-
* 2. 响应到达,按 resConfig 解封:取 code/message/data
|
|
13
|
-
* 3. code 匹配成功码 → apiSuccess + 成功提示
|
|
14
|
-
* 4. code 不匹配 → apiFail + 失败提示(业务失败 resolve,不 reject)
|
|
15
|
-
* 5. 网络异常 → apiException + 异常提示(reject)
|
|
16
|
-
* 6. 请求完成 → apiAfter + 关闭 loading
|
|
17
|
-
*/
|
|
18
|
-
export type ApiEventType = 'apiBefore' | 'apiSuccess' | 'apiFail' | 'apiException' | 'apiAfter';
|
|
19
|
-
export interface ApiEventPayload {
|
|
20
|
-
type: ApiEventType;
|
|
21
|
-
url?: string;
|
|
22
|
-
method?: string;
|
|
23
|
-
params?: any;
|
|
24
|
-
/** 解封后的业务数据 */
|
|
25
|
-
data?: any;
|
|
26
|
-
code?: number | string;
|
|
27
|
-
message?: string;
|
|
28
|
-
error?: any;
|
|
29
|
-
/** 原始响应 */
|
|
30
|
-
raw?: any;
|
|
31
|
-
}
|
|
32
|
-
export type ApiEventHandler = (payload: ApiEventPayload) => void;
|
|
33
|
-
/** 业务失败时 resolve 的结果(PRD 7.4:不抛异常,组件据此感知) */
|
|
34
|
-
export interface ApiResult<T = any> {
|
|
35
|
-
success: boolean;
|
|
36
|
-
data: T | null;
|
|
37
|
-
code?: number | string;
|
|
38
|
-
message?: string;
|
|
39
|
-
raw?: any;
|
|
40
|
-
}
|
|
41
|
-
type Listener = ApiEventHandler;
|
|
42
|
-
/**
|
|
43
|
-
* RequestAPI 请求客户端(公开类)
|
|
44
|
-
*
|
|
45
|
-
* 所有组件基于它开发;开发者也可手动 new 实例并调用 get/post/put/delete/request。
|
|
46
|
-
* 默认单例见文件底部 `export const request`。
|
|
47
|
-
*/
|
|
48
|
-
export declare class RequestAPI {
|
|
49
|
-
private axiosInstance;
|
|
50
|
-
private listeners;
|
|
51
|
-
/** 组件/实例级配置覆盖(request.create 使用) */
|
|
52
|
-
private instanceConfig;
|
|
53
|
-
private loadingInstance;
|
|
54
|
-
private loadingCount;
|
|
55
|
-
/** 进行中的请求(in-flight dedup):key = method:url:序列化params,并发相同请求合并为一次网络调用 */
|
|
56
|
-
private inFlightRequests;
|
|
57
|
-
constructor(axiosConfig?: AxiosRequestConfig);
|
|
58
|
-
/**
|
|
59
|
-
* 创建绑定组件级配置的实例(PRD 5.1)
|
|
60
|
-
* 子实例复用父级监听器与去重表:同族实例(全局单例 + 各组件 create 出来的子实例)
|
|
61
|
-
* 之间并发相同请求同样合并,保证表列内多行组件发起的相同请求只打一次网络。
|
|
62
|
-
*/
|
|
63
|
-
create(componentReqConfig?: DeepPartialConfig): RequestAPI;
|
|
64
|
-
on(handler: Listener): () => void;
|
|
65
|
-
off(handler: Listener): void;
|
|
66
|
-
private emit;
|
|
67
|
-
/**
|
|
68
|
-
* 取有效配置:全局配置 + 实例级覆盖
|
|
69
|
-
*/
|
|
70
|
-
private resolveConfig;
|
|
71
|
-
private openLoading;
|
|
72
|
-
private closeLoading;
|
|
73
|
-
/**
|
|
74
|
-
* 核心请求方法
|
|
75
|
-
* 返回 Promise<ApiResult<T>>:业务失败也 resolve(success=false),仅网络异常 reject
|
|
76
|
-
*/
|
|
77
|
-
request<T = any>(config: AxiosRequestConfig, reqOptions?: ReqOptions): Promise<ApiResult<T>>;
|
|
78
|
-
/** 去重 key:method + 解析后 url + 序列化请求体;请求体不可序列化时退化为固定后缀(该场景不合并) */
|
|
79
|
-
private buildDedupKey;
|
|
80
|
-
/** 真实请求执行体(含事件/loading/封解封),被 request() 去重包装后调用 */
|
|
81
|
-
private executeRequest;
|
|
82
|
-
/**
|
|
83
|
-
* 解封响应体:按 resConfig 取 code/message/data
|
|
84
|
-
*/
|
|
85
|
-
private unpack;
|
|
86
|
-
private checkSuccess;
|
|
87
|
-
private buildUrl;
|
|
88
|
-
get<T = any>(url: string, params?: any, reqOptions?: ReqOptions): Promise<ApiResult<T>>;
|
|
89
|
-
post<T = any>(url: string, data?: any, reqOptions?: ReqOptions): Promise<ApiResult<T>>;
|
|
90
|
-
put<T = any>(url: string, data?: any, reqOptions?: ReqOptions): Promise<ApiResult<T>>;
|
|
91
|
-
delete<T = any>(url: string, params?: any, reqOptions?: ReqOptions): Promise<ApiResult<T>>;
|
|
92
|
-
}
|
|
93
|
-
type DeepPartialConfig = Record<string, any>;
|
|
94
|
-
/**
|
|
95
|
-
* 全局单例(脱离组件直接调用,PRD 5.1)
|
|
96
|
-
*
|
|
97
|
-
* 所有组件共享该实例;开发者也可直接手动调用,或 `new RequestAPI()` 自建独立实例。
|
|
98
|
-
*/
|
|
99
|
-
export declare const request: RequestAPI;
|
|
100
|
-
export default request;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 声明式联动注册中心(PRD 6.2)
|
|
3
|
-
*
|
|
4
|
-
* filter 分组机制:所有参与联动的组件有通用 prop `filter`(默认 '')。
|
|
5
|
-
* 联动只在 filter 相同的组件之间发生。
|
|
6
|
-
*
|
|
7
|
-
* DataGrid 挂载时按 filter 注册到注册中心;
|
|
8
|
-
* DataForm / ApiButton / Dialog / Drawer 等动作完成后,
|
|
9
|
-
* 调用 refreshDataGrid(headRefreshDatagrid, selfFilter) 刷新目标。
|
|
10
|
-
*/
|
|
11
|
-
export interface DataGridInstance {
|
|
12
|
-
/** 组件 filter 分组标识 */
|
|
13
|
-
filter: string;
|
|
14
|
-
/** 刷新当前页数据 */
|
|
15
|
-
refresh: () => any;
|
|
16
|
-
/** 带搜索参数查询(重置到第一页,合并搜索条件) */
|
|
17
|
-
search?: (params?: Record<string, any>) => any;
|
|
18
|
-
/** 清空搜索条件并刷新 */
|
|
19
|
-
resetSearch?: () => any;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 注册 DataGrid 实例,返回注销函数(组件 onUnmounted 调用)
|
|
23
|
-
*/
|
|
24
|
-
export declare function registerDataGrid(instance: DataGridInstance): () => void;
|
|
25
|
-
/**
|
|
26
|
-
* 刷新目标 DataGrid
|
|
27
|
-
* @param headRefreshDatagrid true=刷同 filter 组;字符串=定向刷该 filter 组
|
|
28
|
-
* @param selfFilter 发起组件自身 filter
|
|
29
|
-
* @returns 被刷新的实例数量
|
|
30
|
-
*/
|
|
31
|
-
export declare function refreshDataGrid(headRefreshDatagrid: boolean | string | undefined, selfFilter?: string): number;
|
|
32
|
-
/**
|
|
33
|
-
* 获取某 filter 组的 DataGrid 实例(事件联动 / 自定义逻辑用)
|
|
34
|
-
*/
|
|
35
|
-
export declare function getDataGrids(filter?: string): DataGridInstance[];
|
|
36
|
-
/**
|
|
37
|
-
* SearchPanel 联动:带搜索参数刷新目标 DataGrid(重置到第一页)
|
|
38
|
-
* @param params 搜索表单值
|
|
39
|
-
*/
|
|
40
|
-
export declare function searchDataGrid(params: Record<string, any> | undefined, headRefreshDatagrid: boolean | string | undefined, selfFilter?: string): number;
|
|
41
|
-
/**
|
|
42
|
-
* SearchPanel 重置联动:清空目标 DataGrid 搜索条件并刷新
|
|
43
|
-
*/
|
|
44
|
-
export declare function resetSearchDataGrid(headRefreshDatagrid: boolean | string | undefined, selfFilter?: string): number;
|
|
45
|
-
/**
|
|
46
|
-
* 仅供测试 / 调试:清空注册中心
|
|
47
|
-
*/
|
|
48
|
-
export declare function clearLinkageRegistry(): void;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { SkinName } from '../../../types/config';
|
|
2
|
-
import type { SkinPreset } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* 预设皮肤库(接入全局配置能力)
|
|
5
|
-
* 每套皮肤一个文件(本目录下 <key>.ts),新增皮肤在此聚合注册
|
|
6
|
-
* 使用:app.use(WorkDesktop, { theme: { skin: 'tech' } })
|
|
7
|
-
* 或 setGlobalConfig({ theme: { skin: 'cyberpunk' } })
|
|
8
|
-
* 覆盖优先级:theme.cssVars > theme.colors > 皮肤预设
|
|
9
|
-
*/
|
|
10
|
-
export type { SkinPreset } from './types';
|
|
11
|
-
export declare const SKIN_PRESETS: Record<SkinName, SkinPreset>;
|
|
12
|
-
/** 查询皮肤预设;未传 key 或未知 key 返回 undefined(由调用方回退默认行为) */
|
|
13
|
-
export declare function getSkinPreset(key?: string): SkinPreset | undefined;
|
|
14
|
-
/** 列出全部预设皮肤(供设置面板 / 文档展示遍历) */
|
|
15
|
-
export declare function listSkins(): SkinPreset[];
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 科技皮肤背景素材:参考图 AI 电路大脑(裁自皮肤参考图,JPEG q55 320x418)。
|
|
3
|
-
* base64 data URI 内联(约 33KB),零外部资源、随包分发,与 chinese 皮肤内联 SVG 同思路。
|
|
4
|
-
*/
|
|
5
|
-
export declare const TECH_BRAIN_BG = "data:image/jpeg;base64,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";
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { SkinName, ThemeConfig } from '../../../types/config';
|
|
2
|
-
/** 预设皮肤结构:每套皮肤一个文件(skins/ 目录),由 skins/index.ts 聚合注册 */
|
|
3
|
-
export interface SkinPreset {
|
|
4
|
-
/** 皮肤唯一标识(theme.skin 取值) */
|
|
5
|
-
key: SkinName;
|
|
6
|
-
/** 中文名 */
|
|
7
|
-
label: string;
|
|
8
|
-
/** 风格描述 */
|
|
9
|
-
desc: string;
|
|
10
|
-
/** 皮肤携带的主题配置(colors/cssVars,结构与 ThemeConfig 一致) */
|
|
11
|
-
theme: ThemeConfig;
|
|
12
|
-
/**
|
|
13
|
-
* 皮肤专属 CSS 规则(可选):applyTheme 时原样追加在 :root 变量块之后。
|
|
14
|
-
* 用于 EP 变量做不到的 rule 级定制(如渐变背景、外发光);仅当 theme.skin
|
|
15
|
-
* 命中该预设时注入,切换皮肤随 styleEl 重建自动移除。规则内引用 var(--el-x/--wd-x)
|
|
16
|
-
* 可保持与用户 colors/cssVars 覆盖联动。
|
|
17
|
-
*/
|
|
18
|
-
cssRules?: string;
|
|
19
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WdStation 联动注册中心
|
|
3
|
-
*
|
|
4
|
-
* 复用 DataGrid linkage 的 filter 分组心智:
|
|
5
|
-
* - Station 挂载时按 filter 注册;
|
|
6
|
-
* - 业务代码调用 setStationFooter(target, info, selfFilter) 更新底部动态信息;
|
|
7
|
-
* - refreshStationView(target, selfFilter) 触发内容区强制刷新(重新挂载)。
|
|
8
|
-
*
|
|
9
|
-
* target:true = 与发起方同 filter 组;字符串 = 定向该 filter 组。
|
|
10
|
-
*/
|
|
11
|
-
export interface StationInstance {
|
|
12
|
-
/** 组件 filter 分组标识 */
|
|
13
|
-
filter: string;
|
|
14
|
-
/** 设置底部动态信息 */
|
|
15
|
-
setFooterInfo: (info: string) => void;
|
|
16
|
-
/** 刷新内容区(强制重挂载) */
|
|
17
|
-
refresh: () => void;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* 注册 Station 实例,返回注销函数(组件 onUnmounted 调用)
|
|
21
|
-
*/
|
|
22
|
-
export declare function registerStation(instance: StationInstance): () => void;
|
|
23
|
-
/**
|
|
24
|
-
* 设置目标 Station 底部动态信息
|
|
25
|
-
* @param target true=同 filter 组;字符串=定向该 filter 组
|
|
26
|
-
* @param info 展示内容(文本)
|
|
27
|
-
* @param selfFilter 发起方自身 filter
|
|
28
|
-
* @returns 被更新的实例数量
|
|
29
|
-
*/
|
|
30
|
-
export declare function setStationFooter(target: boolean | string, info: string, selfFilter?: string): number;
|
|
31
|
-
/**
|
|
32
|
-
* 刷新目标 Station 内容区(强制重新挂载)
|
|
33
|
-
* @param target true=同 filter 组(默认);字符串=定向该 filter 组
|
|
34
|
-
* @param selfFilter 发起方自身 filter
|
|
35
|
-
* @returns 被刷新的实例数量
|
|
36
|
-
*/
|
|
37
|
-
export declare function refreshStationView(target?: boolean | string, selfFilter?: string): number;
|
|
38
|
-
/**
|
|
39
|
-
* 仅供测试 / 调试:清空注册中心
|
|
40
|
-
*/
|
|
41
|
-
export declare function clearStationRegistry(): void;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { ThemeConfig } from '../../types/config';
|
|
2
|
-
/**
|
|
3
|
-
* 解析最终生效的主题:皮肤预设打底,用户 colors/cssVars 继续覆盖
|
|
4
|
-
* 优先级:cssVars > colors > 皮肤预设;未知皮肤告警并回退默认
|
|
5
|
-
*/
|
|
6
|
-
export declare function resolveTheme(theme?: ThemeConfig): ThemeConfig | undefined;
|
|
7
|
-
/**
|
|
8
|
-
* 将 theme 配置写入 :root CSS 变量(PRD 9.2 方式二)
|
|
9
|
-
* 输出顺序:colors 语义键 → 语义色 El 派生色阶 → cssVars 精细覆盖(后者覆盖前者)
|
|
10
|
-
*/
|
|
11
|
-
export declare function applyTheme(input?: ThemeConfig): void;
|