@robot-admin/naive-ui-components 0.17.6 → 0.19.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 +18 -0
- package/dist/C_AntV.css +10 -10
- package/dist/C_AntV.d.cts +2 -2
- package/dist/C_AntV.d.ts +2 -2
- package/dist/C_AntV2.cjs +1 -1
- package/dist/C_AntV2.js +1 -1
- package/dist/C_Date.cjs +1 -1
- package/dist/C_Date.css +5 -5
- package/dist/C_Date.d.cts +18 -2
- package/dist/C_Date.d.ts +18 -2
- package/dist/C_Date.js +1 -1
- package/dist/C_Date2.cjs +1 -1
- package/dist/C_Date2.js +1 -1
- package/dist/C_Draggable.css +53 -53
- package/dist/C_Draggable.d.cts +2 -2
- package/dist/C_Draggable.d.ts +2 -2
- package/dist/C_Draggable2.cjs +1 -1
- package/dist/C_Draggable2.js +1 -1
- package/dist/C_Editor.d.cts +1 -1
- package/dist/C_Editor.d.ts +1 -1
- package/dist/C_Form.cjs +1 -1
- package/dist/C_FormModal.d.cts +1 -1
- package/dist/C_FormModal.d.ts +1 -1
- package/dist/C_FormSearch.cjs +1 -1
- package/dist/C_FormSearch.css +52 -52
- package/dist/C_FormSearch.d.cts +18 -2
- package/dist/C_FormSearch.d.ts +18 -2
- package/dist/C_FormSearch.js +1 -1
- package/dist/C_FormSearch2.cjs +1 -1
- package/dist/C_FormSearch2.js +1 -1
- package/dist/C_Guide.d.cts +1 -1
- package/dist/C_Guide.d.ts +1 -1
- package/dist/C_Icon.d.cts +1 -1
- package/dist/C_Icon.d.ts +1 -1
- package/dist/C_Language.d.cts +1 -1
- package/dist/C_Language.d.ts +1 -1
- package/dist/C_Loading.d.cts +1 -1
- package/dist/C_Loading.d.ts +1 -1
- package/dist/C_Login.d.cts +1 -1
- package/dist/C_Login.d.ts +1 -1
- package/dist/C_Markdown.d.cts +1 -1
- package/dist/C_Markdown.d.ts +1 -1
- package/dist/C_Menu.d.ts +1 -1
- package/dist/C_OrgChart.d.cts +1 -1
- package/dist/C_OrgChart.d.ts +1 -1
- package/dist/C_Progress.d.cts +1 -1
- package/dist/C_Progress.d.ts +1 -1
- package/dist/C_Skeleton.d.cts +1 -1
- package/dist/C_Skeleton.d.ts +1 -1
- package/dist/C_Steps.d.cts +1 -1
- package/dist/C_Steps.d.ts +1 -1
- package/dist/C_Table.base.css +144 -155
- package/dist/C_Table.css +144 -155
- package/dist/C_Table.d.cts +2 -2
- package/dist/C_Table.d.ts +6 -6
- package/dist/C_TagsView.d.cts +1 -1
- package/dist/C_TagsView.d.ts +1 -1
- package/dist/C_Theme.d.cts +1 -1
- package/dist/C_Theme.d.ts +1 -1
- package/dist/C_Time.cjs +1 -1
- package/dist/C_Time.css +4 -4
- package/dist/C_Time.d.cts +18 -2
- package/dist/C_Time.d.ts +18 -2
- package/dist/C_Time.js +1 -1
- package/dist/C_Time2.cjs +1 -1
- package/dist/C_Time2.js +1 -1
- package/dist/C_Timeline.d.cts +1 -1
- package/dist/C_Timeline.d.ts +1 -1
- package/dist/C_Transfer.css +26 -26
- package/dist/C_Transfer.d.cts +2 -2
- package/dist/C_Transfer.d.ts +2 -2
- package/dist/C_Transfer2.cjs +1 -1
- package/dist/C_Transfer2.js +1 -1
- package/dist/C_Tree.css +23 -23
- package/dist/C_Tree.d.ts +4 -4
- package/dist/C_Tree2.cjs +1 -1
- package/dist/C_Tree2.js +1 -1
- package/dist/C_VtableGantt.cjs +1 -1
- package/dist/C_VtableGantt.css +31 -31
- package/dist/C_VtableGantt.d.cts +18 -2
- package/dist/C_VtableGantt.d.ts +18 -2
- package/dist/C_VtableGantt.js +1 -1
- package/dist/C_WorkFlow.css +150 -150
- package/dist/C_WorkFlow.d.cts +2 -2
- package/dist/C_WorkFlow.d.ts +2 -2
- package/dist/C_WorkFlow2.cjs +1 -1
- package/dist/C_WorkFlow2.js +1 -1
- package/dist/constants3.d.cts +6 -6
- package/dist/constants3.d.ts +6 -6
- package/dist/constants4.d.cts +7 -7
- package/dist/constants4.d.ts +7 -7
- package/dist/constants5.d.cts +2 -2
- package/dist/constants5.d.ts +2 -2
- package/dist/data.d.cts +7 -7
- package/dist/data.d.ts +7 -7
- package/dist/dateRange.d.cts +197 -0
- package/dist/dateRange.d.ts +197 -0
- package/dist/formValidation.cjs +1 -1
- package/dist/formValidation.js +1 -1
- package/dist/graphics.cjs +1 -0
- package/dist/graphics.d.cts +837 -0
- package/dist/graphics.d.ts +837 -0
- package/dist/graphics.js +1 -0
- package/dist/helpers.cjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +47 -43
- package/dist/index.d.ts +47 -44
- package/dist/index.js +1 -1
- package/dist/index.vue.d.cts +4 -4
- package/dist/index.vue.d.ts +4 -4
- package/dist/index10.vue.d.cts +3 -3
- package/dist/index10.vue.d.ts +53 -68
- package/dist/index11.vue.d.cts +53 -68
- package/dist/index11.vue.d.ts +52 -58
- package/dist/index12.vue.d.cts +52 -58
- package/dist/index12.vue.d.ts +124 -50
- package/dist/index13.vue.d.cts +124 -50
- package/dist/index13.vue.d.ts +51 -123
- package/dist/index14.vue.d.cts +51 -123
- package/dist/index14.vue.d.ts +26 -52
- package/dist/index15.vue.d.cts +26 -52
- package/dist/index15.vue.d.ts +12 -26
- package/dist/index16.vue.d.cts +12 -26
- package/dist/index16.vue.d.ts +129 -13
- package/dist/index17.vue.d.cts +129 -13
- package/dist/index17.vue.d.ts +76 -129
- package/dist/index18.vue.d.cts +76 -129
- package/dist/index18.vue.d.ts +65 -75
- package/dist/index19.vue.d.cts +97 -75
- package/dist/index19.vue.d.ts +94 -62
- package/dist/index2.vue.d.cts +2 -2
- package/dist/index2.vue.d.ts +2 -2
- package/dist/index20.vue.d.cts +40 -91
- package/dist/index20.vue.d.ts +40 -91
- package/dist/index21.vue.d.cts +89 -40
- package/dist/index21.vue.d.ts +89 -40
- package/dist/index22.vue.d.cts +37 -95
- package/dist/index22.vue.d.ts +37 -95
- package/dist/index23.vue.d.cts +8 -34
- package/dist/index23.vue.d.ts +8 -34
- package/dist/index24.vue.d.cts +86 -9
- package/dist/index24.vue.d.ts +86 -9
- package/dist/index25.vue.d.cts +99 -654
- package/dist/index25.vue.d.ts +99 -654
- package/dist/index26.vue.d.cts +66 -87
- package/dist/index26.vue.d.ts +66 -87
- package/dist/index3.vue.d.cts +2 -2
- package/dist/index3.vue.d.ts +2 -2
- package/dist/index4.vue.d.cts +3 -3
- package/dist/index6.vue.d.ts +3 -3
- package/dist/index7.vue.d.cts +3 -3
- package/dist/index8.vue.d.ts +4 -4
- package/dist/index9.vue.d.cts +4 -4
- package/dist/index9.vue.d.ts +3 -3
- package/dist/mapUtils.d.cts +3 -3
- package/dist/mapUtils.d.ts +3 -3
- package/dist/presets.d.cts +5 -3
- package/dist/presets.d.ts +5 -3
- package/dist/style.css +499 -510
- package/dist/types.d.ts +51 -0
- package/dist/types2.d.cts +51 -0
- package/dist/useCalendarEvents.d.cts +2 -2
- package/dist/useCalendarEvents.d.ts +2 -2
- package/dist/useCollapsePanel.d.cts +4 -4
- package/dist/useCollapsePanel.d.ts +4 -4
- package/dist/useCropperCore.d.cts +9 -9
- package/dist/useCropperCore.d.ts +9 -9
- package/dist/useDraggableLayout.d.cts +94 -125
- package/dist/useDraggableLayout.d.ts +94 -125
- package/dist/useDynamicFormState.d.cts +23 -15
- package/dist/useDynamicFormState.d.ts +23 -15
- package/dist/useEdgeInteraction.d.cts +10 -5
- package/dist/useEdgeInteraction.d.ts +10 -5
- package/dist/useFullscreen.d.cts +3 -3
- package/dist/useFullscreen.d.ts +3 -3
- package/dist/useInfiniteScroll.d.cts +2 -2
- package/dist/useInfiniteScroll.d.ts +2 -2
- package/dist/useQRCode.d.cts +4 -4
- package/dist/useQRCode.d.ts +4 -4
- package/dist/useSignatureHistory.d.cts +3 -3
- package/dist/useSignatureHistory.d.ts +3 -3
- package/dist/useSplitResize.d.cts +6 -6
- package/dist/useSplitResize.d.ts +6 -6
- package/dist/useTableQuery.cjs +2 -2
- package/dist/useTableQuery.d.cts +490 -519
- package/dist/useTableQuery.d.ts +490 -519
- package/dist/useTableQuery.js +2 -2
- package/dist/useTimeSelection.d.cts +19 -52
- package/dist/useTimeSelection.d.ts +19 -52
- package/dist/useWorkflowValidation.d.cts +495 -116
- package/dist/useWorkflowValidation.d.ts +495 -116
- package/dist/verification.d.cts +4 -4
- package/dist/verification.d.ts +4 -4
- package/docs/guides/usage.en.md +18 -1
- package/docs/guides/usage.md +18 -1
- package/package.json +2 -2
- package/dist/C_VtableGantt2.cjs +0 -1
- package/dist/C_VtableGantt2.js +0 -1
- package/dist/index27.vue.d.cts +0 -111
- package/dist/index27.vue.d.ts +0 -111
- package/dist/index28.vue.d.cts +0 -84
- package/dist/index28.vue.d.ts +0 -84
- package/dist/useSearchState.d.cts +0 -163
- package/dist/useSearchState.d.ts +0 -163
package/dist/constants5.d.ts
CHANGED
|
@@ -258,9 +258,9 @@ type PlayerInstance = InstanceType<typeof xgplayer.default>;
|
|
|
258
258
|
//#endregion
|
|
259
259
|
//#region src/components/C_VideoPlayer/index.vue.d.ts
|
|
260
260
|
declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExpose, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
|
|
261
|
+
ready: () => any;
|
|
261
262
|
ended: () => any;
|
|
262
263
|
error: (error: Error) => any;
|
|
263
|
-
ready: () => any;
|
|
264
264
|
stateChange: (state: PlayerState) => any;
|
|
265
265
|
qualityChange: (quality: QualityLevel) => any;
|
|
266
266
|
rateChange: (rate: number) => any;
|
|
@@ -271,9 +271,9 @@ declare const __VLS_export: vue.DefineComponent<VideoPlayerProps, VideoPlayerExp
|
|
|
271
271
|
quizAnswer: (quizId: string, answer: string | string[], isCorrect: boolean) => any;
|
|
272
272
|
timeUpdate: (currentTime: number, duration: number) => any;
|
|
273
273
|
}, string, vue.PublicProps, Readonly<VideoPlayerProps> & Readonly<{
|
|
274
|
+
onReady?: (() => any) | undefined;
|
|
274
275
|
onEnded?: (() => any) | undefined;
|
|
275
276
|
onError?: ((error: Error) => any) | undefined;
|
|
276
|
-
onReady?: (() => any) | undefined;
|
|
277
277
|
onStateChange?: ((state: PlayerState) => any) | undefined;
|
|
278
278
|
onQualityChange?: ((quality: QualityLevel) => any) | undefined;
|
|
279
279
|
onRateChange?: ((rate: number) => any) | undefined;
|
package/dist/data.d.cts
CHANGED
|
@@ -67,26 +67,26 @@ declare const __VLS_base: vue.DefineComponent<CTabsProps, {
|
|
|
67
67
|
}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
|
|
68
68
|
"update:modelValue": (value: TabsValue) => any;
|
|
69
69
|
change: (value: TabsValue, item: TabsItem | undefined) => any;
|
|
70
|
-
close: (value: TabsValue) => any;
|
|
71
70
|
add: () => any;
|
|
71
|
+
close: (value: TabsValue) => any;
|
|
72
72
|
}, string, vue.PublicProps, Readonly<CTabsProps> & Readonly<{
|
|
73
73
|
"onUpdate:modelValue"?: ((value: TabsValue) => any) | undefined;
|
|
74
74
|
onChange?: ((value: TabsValue, item: TabsItem | undefined) => any) | undefined;
|
|
75
|
-
onClose?: ((value: TabsValue) => any) | undefined;
|
|
76
75
|
onAdd?: (() => any) | undefined;
|
|
76
|
+
onClose?: ((value: TabsValue) => any) | undefined;
|
|
77
77
|
}>, {
|
|
78
78
|
modelValue: TabsValue | null;
|
|
79
79
|
type: TabsType;
|
|
80
|
-
addable: boolean;
|
|
81
|
-
animated: boolean;
|
|
82
80
|
size: TabsSize;
|
|
83
|
-
closable: boolean;
|
|
84
|
-
placement: TabsPlacement;
|
|
85
|
-
displayDirective: TabsDisplayDirective;
|
|
86
81
|
items: readonly TabsItem[];
|
|
87
82
|
defaultValue: TabsValue | null;
|
|
83
|
+
placement: TabsPlacement;
|
|
88
84
|
justifyContent: TabsJustifyContent;
|
|
85
|
+
animated: boolean;
|
|
86
|
+
closable: boolean;
|
|
87
|
+
addable: boolean;
|
|
89
88
|
tabsOnly: boolean;
|
|
89
|
+
displayDirective: TabsDisplayDirective;
|
|
90
90
|
paneClass: string;
|
|
91
91
|
paneStyle: string | vue.CSSProperties;
|
|
92
92
|
beforeChange: (target: TabsValue, current: TabsValue | null) => boolean | Promise<boolean>;
|
package/dist/data.d.ts
CHANGED
|
@@ -67,26 +67,26 @@ declare const __VLS_base: vue.DefineComponent<CTabsProps, {
|
|
|
67
67
|
}, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {} & {
|
|
68
68
|
"update:modelValue": (value: TabsValue) => any;
|
|
69
69
|
change: (value: TabsValue, item: TabsItem | undefined) => any;
|
|
70
|
-
close: (value: TabsValue) => any;
|
|
71
70
|
add: () => any;
|
|
71
|
+
close: (value: TabsValue) => any;
|
|
72
72
|
}, string, vue.PublicProps, Readonly<CTabsProps> & Readonly<{
|
|
73
73
|
"onUpdate:modelValue"?: ((value: TabsValue) => any) | undefined;
|
|
74
74
|
onChange?: ((value: TabsValue, item: TabsItem | undefined) => any) | undefined;
|
|
75
|
-
onClose?: ((value: TabsValue) => any) | undefined;
|
|
76
75
|
onAdd?: (() => any) | undefined;
|
|
76
|
+
onClose?: ((value: TabsValue) => any) | undefined;
|
|
77
77
|
}>, {
|
|
78
78
|
modelValue: TabsValue | null;
|
|
79
79
|
type: TabsType;
|
|
80
|
-
addable: boolean;
|
|
81
|
-
animated: boolean;
|
|
82
80
|
size: TabsSize;
|
|
83
|
-
closable: boolean;
|
|
84
|
-
placement: TabsPlacement;
|
|
85
|
-
displayDirective: TabsDisplayDirective;
|
|
86
81
|
items: readonly TabsItem[];
|
|
87
82
|
defaultValue: TabsValue | null;
|
|
83
|
+
placement: TabsPlacement;
|
|
88
84
|
justifyContent: TabsJustifyContent;
|
|
85
|
+
animated: boolean;
|
|
86
|
+
closable: boolean;
|
|
87
|
+
addable: boolean;
|
|
89
88
|
tabsOnly: boolean;
|
|
89
|
+
displayDirective: TabsDisplayDirective;
|
|
90
90
|
paneClass: string;
|
|
91
91
|
paneStyle: string | vue.CSSProperties;
|
|
92
92
|
beforeChange: (target: TabsValue, current: TabsValue | null) => boolean | Promise<boolean>;
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.cjs";
|
|
2
|
+
import { t as ComponentDensity } from "./density.cjs";
|
|
3
|
+
import * as vue from "vue";
|
|
4
|
+
import { MaybeRefOrGetter, Ref } from "vue";
|
|
5
|
+
import { FormInst, FormItemRule } from "naive-ui";
|
|
6
|
+
|
|
7
|
+
//#region src/components/C_FormSearch/types.d.ts
|
|
8
|
+
/** 搜索字段支持的控件类型 */
|
|
9
|
+
type SearchFieldType = 'input' | 'select' | 'date-range' | 'spacer';
|
|
10
|
+
type SearchOptionValue = string | number | boolean;
|
|
11
|
+
interface SearchOptionItem<V extends SearchOptionValue = SearchOptionValue> {
|
|
12
|
+
labelDefault?: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
value?: V;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
/** 动态模型保留原有开放契约;明确业务模型使用下方的字段和值关联。 */
|
|
19
|
+
interface SearchFormItemBase {
|
|
20
|
+
type: SearchFieldType;
|
|
21
|
+
prop: string;
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
list?: SearchOptionItem[];
|
|
24
|
+
hisList?: string[];
|
|
25
|
+
isFocus?: boolean;
|
|
26
|
+
show?: boolean;
|
|
27
|
+
defaultValue?: unknown;
|
|
28
|
+
attrs?: Record<string, unknown>;
|
|
29
|
+
rules?: FormItemRule[];
|
|
30
|
+
}
|
|
31
|
+
type FieldOptions<V> = Array<Omit<SearchOptionItem, 'value'> & {
|
|
32
|
+
value: Extract<V, SearchOptionValue>;
|
|
33
|
+
}>;
|
|
34
|
+
type FieldAttributes = Record<string, unknown>;
|
|
35
|
+
type TypedSearchControl<V> = {
|
|
36
|
+
type: 'spacer';
|
|
37
|
+
list?: never;
|
|
38
|
+
} | (string extends V ? {
|
|
39
|
+
type: 'input';
|
|
40
|
+
list?: never;
|
|
41
|
+
} : never) | (null extends V ? [number, number] extends V ? {
|
|
42
|
+
type: 'date-range';
|
|
43
|
+
list?: never;
|
|
44
|
+
} : never : never) | (NonNullable<V> extends readonly (infer Item)[] ? [] extends NonNullable<V> ? {
|
|
45
|
+
type: 'select';
|
|
46
|
+
attrs: FieldAttributes & {
|
|
47
|
+
multiple: true;
|
|
48
|
+
};
|
|
49
|
+
list?: FieldOptions<Item>;
|
|
50
|
+
} : never : NonNullable<V> extends SearchOptionValue ? null extends V ? {
|
|
51
|
+
type: 'select';
|
|
52
|
+
attrs?: FieldAttributes & {
|
|
53
|
+
multiple?: false;
|
|
54
|
+
};
|
|
55
|
+
list?: FieldOptions<NonNullable<V>>;
|
|
56
|
+
} : {
|
|
57
|
+
type: 'select';
|
|
58
|
+
attrs: FieldAttributes & {
|
|
59
|
+
multiple?: false;
|
|
60
|
+
clearable: false;
|
|
61
|
+
};
|
|
62
|
+
defaultValue: NonNullable<V>;
|
|
63
|
+
list?: FieldOptions<NonNullable<V>>;
|
|
64
|
+
} : never);
|
|
65
|
+
/**
|
|
66
|
+
* 字段值与控件清空语义关联,业务模型无需自行修补 reset/clear 的类型。
|
|
67
|
+
* 日期默认使用时间戳范围;格式化范围可使用 SearchDateRangeValue。
|
|
68
|
+
*/
|
|
69
|
+
type SearchFormItem<T extends object = SearchFormParams> = {
|
|
70
|
+
prop: Extract<keyof T, string>;
|
|
71
|
+
} & (string extends keyof T ? SearchFormItemBase : { [P in Extract<keyof T, string>]: Omit<SearchFormItemBase, 'type' | 'prop' | 'defaultValue' | 'list'> & {
|
|
72
|
+
prop: P;
|
|
73
|
+
defaultValue?: T[P];
|
|
74
|
+
} & TypedSearchControl<T[P]> }[Extract<keyof T, string>]);
|
|
75
|
+
interface SearchFormParams {
|
|
76
|
+
pageNum?: number;
|
|
77
|
+
pageSize?: number;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
}
|
|
80
|
+
interface SearchConfig<T extends object = SearchFormParams> {
|
|
81
|
+
/** 与 C_Form、C_Table 统一的布局密度,显式 size 和字段 attrs.size 优先。 */
|
|
82
|
+
density?: ComponentDensity;
|
|
83
|
+
foldThreshold?: number;
|
|
84
|
+
historyMaxItems?: number;
|
|
85
|
+
requireValue?: boolean;
|
|
86
|
+
feedback?: ComponentFeedback;
|
|
87
|
+
locale?: ComponentLocale;
|
|
88
|
+
onSearch?: (params: T) => void | Promise<unknown>;
|
|
89
|
+
}
|
|
90
|
+
interface FormSearchRuntimeProps<T extends object = SearchFormParams> {
|
|
91
|
+
bordered?: boolean;
|
|
92
|
+
formItemList: SearchFormItem<NoInfer<T>>[];
|
|
93
|
+
/** @deprecated Use modelValue with v-model. */
|
|
94
|
+
formParams?: T;
|
|
95
|
+
modelValue?: T;
|
|
96
|
+
formSearchInputHistoryString?: string;
|
|
97
|
+
size?: 'small' | 'medium' | 'large';
|
|
98
|
+
loading?: boolean;
|
|
99
|
+
config?: SearchConfig<NoInfer<T>>;
|
|
100
|
+
}
|
|
101
|
+
/** 具体业务模型必须提供完整初始值;动态默认模型继续支持空配置接入。 */
|
|
102
|
+
type FormSearchProps<T extends object = SearchFormParams> = Omit<FormSearchRuntimeProps<T>, 'modelValue' | 'formParams'> & (string extends keyof T ? {
|
|
103
|
+
modelValue?: T;
|
|
104
|
+
formParams?: T;
|
|
105
|
+
} : {
|
|
106
|
+
modelValue: T;
|
|
107
|
+
formParams?: T;
|
|
108
|
+
} | {
|
|
109
|
+
modelValue?: T;
|
|
110
|
+
formParams: T;
|
|
111
|
+
});
|
|
112
|
+
interface FormSearchEmits<T extends object = SearchFormParams> {
|
|
113
|
+
search: [params: T];
|
|
114
|
+
reset: [params: T];
|
|
115
|
+
'change-params': [params: T];
|
|
116
|
+
'update:modelValue': [params: T];
|
|
117
|
+
}
|
|
118
|
+
/** 公开实例的顶层 Ref 已由 Vue 解包。 */
|
|
119
|
+
interface FormSearchExpose<T extends object = SearchFormParams> {
|
|
120
|
+
formRef: FormInst | null;
|
|
121
|
+
formParams: T;
|
|
122
|
+
searchFn: () => Promise<boolean>;
|
|
123
|
+
cleanFn: () => void;
|
|
124
|
+
changeFoldState: () => void;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/components/C_FormSearch/composables/useSearchHistory.d.ts
|
|
128
|
+
interface SearchHistoryOptions {
|
|
129
|
+
storageKey?: string;
|
|
130
|
+
maxItems?: number;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
*
|
|
134
|
+
*/
|
|
135
|
+
declare function useSearchHistory<T extends object = SearchFormParams>(fields: Ref<SearchFormItem<T>[]>, formParams: Ref<T>, options?: MaybeRefOrGetter<SearchHistoryOptions>): {
|
|
136
|
+
enabled: vue.ComputedRef<boolean>;
|
|
137
|
+
handleFocus: (prop: string) => void;
|
|
138
|
+
closeAllPanels: () => void;
|
|
139
|
+
selectHistoryItem: (value: string, prop: string) => void;
|
|
140
|
+
deleteHistoryItem: (prop: string, index: number) => void;
|
|
141
|
+
clearAllHistory: (prop: string) => void;
|
|
142
|
+
saveCurrentInputs: () => void;
|
|
143
|
+
restoreFromStorage: () => void;
|
|
144
|
+
};
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/components/C_FormSearch/composables/useSearchState.d.ts
|
|
147
|
+
interface UseSearchStateOptions<T extends object = SearchFormParams> {
|
|
148
|
+
formItemList: SearchFormItem<T>[];
|
|
149
|
+
formParams: T;
|
|
150
|
+
config?: MaybeRefOrGetter<SearchConfig<T> | undefined>;
|
|
151
|
+
loading?: MaybeRefOrGetter<boolean>;
|
|
152
|
+
historyOptions?: MaybeRefOrGetter<SearchHistoryOptions>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
157
|
+
declare function useSearchState<T extends object = SearchFormParams>(emits: {
|
|
158
|
+
(event: 'search', params: T): void;
|
|
159
|
+
(event: 'reset', params: T): void;
|
|
160
|
+
(event: 'change-params', params: T): void;
|
|
161
|
+
(event: 'update:modelValue', params: T): void;
|
|
162
|
+
}, options: UseSearchStateOptions<T>): {
|
|
163
|
+
formRef: Ref<FormInst | null, FormInst | null>;
|
|
164
|
+
fields: Ref<SearchFormItem<T>[], SearchFormItem<T>[]>;
|
|
165
|
+
formParams: Ref<T, T>;
|
|
166
|
+
expanded: Ref<boolean, boolean>;
|
|
167
|
+
searching: vue.ComputedRef<boolean>;
|
|
168
|
+
visibleFields: vue.ComputedRef<SearchFormItem<T>[]>;
|
|
169
|
+
hasExpandButton: vue.ComputedRef<boolean>;
|
|
170
|
+
history: {
|
|
171
|
+
enabled: vue.ComputedRef<boolean>;
|
|
172
|
+
handleFocus: (prop: string) => void;
|
|
173
|
+
closeAllPanels: () => void;
|
|
174
|
+
selectHistoryItem: (value: string, prop: string) => void;
|
|
175
|
+
deleteHistoryItem: (prop: string, index: number) => void;
|
|
176
|
+
clearAllHistory: (prop: string) => void;
|
|
177
|
+
saveCurrentInputs: () => void;
|
|
178
|
+
restoreFromStorage: () => void;
|
|
179
|
+
};
|
|
180
|
+
searchFn: () => Promise<boolean>;
|
|
181
|
+
resetFn: () => void;
|
|
182
|
+
toggleFold: () => void;
|
|
183
|
+
syncFromProps: (newItems: SearchFormItem<T>[], newParams: T) => void;
|
|
184
|
+
};
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/components/C_FormSearch/dateRange.d.ts
|
|
187
|
+
type DateRangeInput = {
|
|
188
|
+
mode: 'formatted';
|
|
189
|
+
value: [string, string];
|
|
190
|
+
} | {
|
|
191
|
+
mode: 'timestamp';
|
|
192
|
+
value: [number, number] | null;
|
|
193
|
+
};
|
|
194
|
+
/** 搜索日期范围模型,同时支持时间戳和显式格式化日期。 */
|
|
195
|
+
type SearchDateRangeValue = DateRangeInput['value'];
|
|
196
|
+
//#endregion
|
|
197
|
+
export { FormSearchEmits as a, SearchConfig as c, SearchFormParams as d, SearchOptionItem as f, useSearchHistory as i, SearchFieldType as l, SearchDateRangeValue as n, FormSearchExpose as o, useSearchState as r, FormSearchProps as s, DateRangeInput as t, SearchFormItem as u };
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { n as ComponentLocale, t as ComponentFeedback } from "./contracts.js";
|
|
2
|
+
import { t as ComponentDensity } from "./density.js";
|
|
3
|
+
import * as vue from "vue";
|
|
4
|
+
import { MaybeRefOrGetter, Ref } from "vue";
|
|
5
|
+
import { FormInst, FormItemRule } from "naive-ui";
|
|
6
|
+
|
|
7
|
+
//#region src/components/C_FormSearch/types.d.ts
|
|
8
|
+
/** 搜索字段支持的控件类型 */
|
|
9
|
+
type SearchFieldType = 'input' | 'select' | 'date-range' | 'spacer';
|
|
10
|
+
type SearchOptionValue = string | number | boolean;
|
|
11
|
+
interface SearchOptionItem<V extends SearchOptionValue = SearchOptionValue> {
|
|
12
|
+
labelDefault?: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
value?: V;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
[key: string]: unknown;
|
|
17
|
+
}
|
|
18
|
+
/** 动态模型保留原有开放契约;明确业务模型使用下方的字段和值关联。 */
|
|
19
|
+
interface SearchFormItemBase {
|
|
20
|
+
type: SearchFieldType;
|
|
21
|
+
prop: string;
|
|
22
|
+
placeholder?: string;
|
|
23
|
+
list?: SearchOptionItem[];
|
|
24
|
+
hisList?: string[];
|
|
25
|
+
isFocus?: boolean;
|
|
26
|
+
show?: boolean;
|
|
27
|
+
defaultValue?: unknown;
|
|
28
|
+
attrs?: Record<string, unknown>;
|
|
29
|
+
rules?: FormItemRule[];
|
|
30
|
+
}
|
|
31
|
+
type FieldOptions<V> = Array<Omit<SearchOptionItem, 'value'> & {
|
|
32
|
+
value: Extract<V, SearchOptionValue>;
|
|
33
|
+
}>;
|
|
34
|
+
type FieldAttributes = Record<string, unknown>;
|
|
35
|
+
type TypedSearchControl<V> = {
|
|
36
|
+
type: 'spacer';
|
|
37
|
+
list?: never;
|
|
38
|
+
} | (string extends V ? {
|
|
39
|
+
type: 'input';
|
|
40
|
+
list?: never;
|
|
41
|
+
} : never) | (null extends V ? [number, number] extends V ? {
|
|
42
|
+
type: 'date-range';
|
|
43
|
+
list?: never;
|
|
44
|
+
} : never : never) | (NonNullable<V> extends readonly (infer Item)[] ? [] extends NonNullable<V> ? {
|
|
45
|
+
type: 'select';
|
|
46
|
+
attrs: FieldAttributes & {
|
|
47
|
+
multiple: true;
|
|
48
|
+
};
|
|
49
|
+
list?: FieldOptions<Item>;
|
|
50
|
+
} : never : NonNullable<V> extends SearchOptionValue ? null extends V ? {
|
|
51
|
+
type: 'select';
|
|
52
|
+
attrs?: FieldAttributes & {
|
|
53
|
+
multiple?: false;
|
|
54
|
+
};
|
|
55
|
+
list?: FieldOptions<NonNullable<V>>;
|
|
56
|
+
} : {
|
|
57
|
+
type: 'select';
|
|
58
|
+
attrs: FieldAttributes & {
|
|
59
|
+
multiple?: false;
|
|
60
|
+
clearable: false;
|
|
61
|
+
};
|
|
62
|
+
defaultValue: NonNullable<V>;
|
|
63
|
+
list?: FieldOptions<NonNullable<V>>;
|
|
64
|
+
} : never);
|
|
65
|
+
/**
|
|
66
|
+
* 字段值与控件清空语义关联,业务模型无需自行修补 reset/clear 的类型。
|
|
67
|
+
* 日期默认使用时间戳范围;格式化范围可使用 SearchDateRangeValue。
|
|
68
|
+
*/
|
|
69
|
+
type SearchFormItem<T extends object = SearchFormParams> = {
|
|
70
|
+
prop: Extract<keyof T, string>;
|
|
71
|
+
} & (string extends keyof T ? SearchFormItemBase : { [P in Extract<keyof T, string>]: Omit<SearchFormItemBase, 'type' | 'prop' | 'defaultValue' | 'list'> & {
|
|
72
|
+
prop: P;
|
|
73
|
+
defaultValue?: T[P];
|
|
74
|
+
} & TypedSearchControl<T[P]> }[Extract<keyof T, string>]);
|
|
75
|
+
interface SearchFormParams {
|
|
76
|
+
pageNum?: number;
|
|
77
|
+
pageSize?: number;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
}
|
|
80
|
+
interface SearchConfig<T extends object = SearchFormParams> {
|
|
81
|
+
/** 与 C_Form、C_Table 统一的布局密度,显式 size 和字段 attrs.size 优先。 */
|
|
82
|
+
density?: ComponentDensity;
|
|
83
|
+
foldThreshold?: number;
|
|
84
|
+
historyMaxItems?: number;
|
|
85
|
+
requireValue?: boolean;
|
|
86
|
+
feedback?: ComponentFeedback;
|
|
87
|
+
locale?: ComponentLocale;
|
|
88
|
+
onSearch?: (params: T) => void | Promise<unknown>;
|
|
89
|
+
}
|
|
90
|
+
interface FormSearchRuntimeProps<T extends object = SearchFormParams> {
|
|
91
|
+
bordered?: boolean;
|
|
92
|
+
formItemList: SearchFormItem<NoInfer<T>>[];
|
|
93
|
+
/** @deprecated Use modelValue with v-model. */
|
|
94
|
+
formParams?: T;
|
|
95
|
+
modelValue?: T;
|
|
96
|
+
formSearchInputHistoryString?: string;
|
|
97
|
+
size?: 'small' | 'medium' | 'large';
|
|
98
|
+
loading?: boolean;
|
|
99
|
+
config?: SearchConfig<NoInfer<T>>;
|
|
100
|
+
}
|
|
101
|
+
/** 具体业务模型必须提供完整初始值;动态默认模型继续支持空配置接入。 */
|
|
102
|
+
type FormSearchProps<T extends object = SearchFormParams> = Omit<FormSearchRuntimeProps<T>, 'modelValue' | 'formParams'> & (string extends keyof T ? {
|
|
103
|
+
modelValue?: T;
|
|
104
|
+
formParams?: T;
|
|
105
|
+
} : {
|
|
106
|
+
modelValue: T;
|
|
107
|
+
formParams?: T;
|
|
108
|
+
} | {
|
|
109
|
+
modelValue?: T;
|
|
110
|
+
formParams: T;
|
|
111
|
+
});
|
|
112
|
+
interface FormSearchEmits<T extends object = SearchFormParams> {
|
|
113
|
+
search: [params: T];
|
|
114
|
+
reset: [params: T];
|
|
115
|
+
'change-params': [params: T];
|
|
116
|
+
'update:modelValue': [params: T];
|
|
117
|
+
}
|
|
118
|
+
/** 公开实例的顶层 Ref 已由 Vue 解包。 */
|
|
119
|
+
interface FormSearchExpose<T extends object = SearchFormParams> {
|
|
120
|
+
formRef: FormInst | null;
|
|
121
|
+
formParams: T;
|
|
122
|
+
searchFn: () => Promise<boolean>;
|
|
123
|
+
cleanFn: () => void;
|
|
124
|
+
changeFoldState: () => void;
|
|
125
|
+
}
|
|
126
|
+
//#endregion
|
|
127
|
+
//#region src/components/C_FormSearch/composables/useSearchHistory.d.ts
|
|
128
|
+
interface SearchHistoryOptions {
|
|
129
|
+
storageKey?: string;
|
|
130
|
+
maxItems?: number;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
*
|
|
134
|
+
*/
|
|
135
|
+
declare function useSearchHistory<T extends object = SearchFormParams>(fields: Ref<SearchFormItem<T>[]>, formParams: Ref<T>, options?: MaybeRefOrGetter<SearchHistoryOptions>): {
|
|
136
|
+
enabled: vue.ComputedRef<boolean>;
|
|
137
|
+
handleFocus: (prop: string) => void;
|
|
138
|
+
closeAllPanels: () => void;
|
|
139
|
+
selectHistoryItem: (value: string, prop: string) => void;
|
|
140
|
+
deleteHistoryItem: (prop: string, index: number) => void;
|
|
141
|
+
clearAllHistory: (prop: string) => void;
|
|
142
|
+
saveCurrentInputs: () => void;
|
|
143
|
+
restoreFromStorage: () => void;
|
|
144
|
+
};
|
|
145
|
+
//#endregion
|
|
146
|
+
//#region src/components/C_FormSearch/composables/useSearchState.d.ts
|
|
147
|
+
interface UseSearchStateOptions<T extends object = SearchFormParams> {
|
|
148
|
+
formItemList: SearchFormItem<T>[];
|
|
149
|
+
formParams: T;
|
|
150
|
+
config?: MaybeRefOrGetter<SearchConfig<T> | undefined>;
|
|
151
|
+
loading?: MaybeRefOrGetter<boolean>;
|
|
152
|
+
historyOptions?: MaybeRefOrGetter<SearchHistoryOptions>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
157
|
+
declare function useSearchState<T extends object = SearchFormParams>(emits: {
|
|
158
|
+
(event: 'search', params: T): void;
|
|
159
|
+
(event: 'reset', params: T): void;
|
|
160
|
+
(event: 'change-params', params: T): void;
|
|
161
|
+
(event: 'update:modelValue', params: T): void;
|
|
162
|
+
}, options: UseSearchStateOptions<T>): {
|
|
163
|
+
formRef: Ref<FormInst | null, FormInst | null>;
|
|
164
|
+
fields: Ref<SearchFormItem<T>[], SearchFormItem<T>[]>;
|
|
165
|
+
formParams: Ref<T, T>;
|
|
166
|
+
expanded: Ref<boolean, boolean>;
|
|
167
|
+
searching: vue.ComputedRef<boolean>;
|
|
168
|
+
visibleFields: vue.ComputedRef<SearchFormItem<T>[]>;
|
|
169
|
+
hasExpandButton: vue.ComputedRef<boolean>;
|
|
170
|
+
history: {
|
|
171
|
+
enabled: vue.ComputedRef<boolean>;
|
|
172
|
+
handleFocus: (prop: string) => void;
|
|
173
|
+
closeAllPanels: () => void;
|
|
174
|
+
selectHistoryItem: (value: string, prop: string) => void;
|
|
175
|
+
deleteHistoryItem: (prop: string, index: number) => void;
|
|
176
|
+
clearAllHistory: (prop: string) => void;
|
|
177
|
+
saveCurrentInputs: () => void;
|
|
178
|
+
restoreFromStorage: () => void;
|
|
179
|
+
};
|
|
180
|
+
searchFn: () => Promise<boolean>;
|
|
181
|
+
resetFn: () => void;
|
|
182
|
+
toggleFold: () => void;
|
|
183
|
+
syncFromProps: (newItems: SearchFormItem<T>[], newParams: T) => void;
|
|
184
|
+
};
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/components/C_FormSearch/dateRange.d.ts
|
|
187
|
+
type DateRangeInput = {
|
|
188
|
+
mode: 'formatted';
|
|
189
|
+
value: [string, string];
|
|
190
|
+
} | {
|
|
191
|
+
mode: 'timestamp';
|
|
192
|
+
value: [number, number] | null;
|
|
193
|
+
};
|
|
194
|
+
/** 搜索日期范围模型,同时支持时间戳和显式格式化日期。 */
|
|
195
|
+
type SearchDateRangeValue = DateRangeInput['value'];
|
|
196
|
+
//#endregion
|
|
197
|
+
export { FormSearchEmits as a, SearchConfig as c, SearchFormParams as d, SearchOptionItem as f, useSearchHistory as i, SearchFieldType as l, SearchDateRangeValue as n, FormSearchExpose as o, useSearchState as r, FormSearchProps as s, DateRangeInput as t, SearchFormItem as u };
|
package/dist/formValidation.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./chunk.cjs`);let e=require(`@robot-admin/form-validate`);
|
|
1
|
+
require(`./chunk.cjs`);let e=require(`@robot-admin/form-validate`);function t(e){return`validate`in e&&typeof e.validate==`function`}function n(n=[]){return n.map(n=>{let r=t(n)?(0,e.toNaiveRule)(n):n;return{...r,...Array.isArray(r.trigger)?{trigger:[...r.trigger]}:{}}})}function r(t,r){return n([{...e.BasicRules.required(t,[`input`,`change`,`blur`]),message:r}])[0]}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}});
|
package/dist/formValidation.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BasicRules as e,NAIVE_COMBOS as t,PRESET_RULES as n,SPEC_RULES as r,toNaiveRule as i}from"@robot-admin/form-validate";
|
|
1
|
+
import{BasicRules as e,NAIVE_COMBOS as t,PRESET_RULES as n,SPEC_RULES as r,toNaiveRule as i}from"@robot-admin/form-validate";function a(e){return`validate`in e&&typeof e.validate==`function`}function o(e=[]){return e.map(e=>{let t=a(e)?i(e):e;return{...t,...Array.isArray(t.trigger)?{trigger:[...t.trigger]}:{}}})}function s(t,n){return o([{...e.required(t,[`input`,`change`,`blur`]),message:n}])[0]}export{o as a,s as i,n,r,t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require(`./chunk.cjs`);const e=require(`./C_Icon2.cjs`),t=require(`./export-helper.cjs`);let n=require(`vue`),r=require(`naive-ui`);const i={headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`,borderLineWidth:1,fontSize:14,fontWeight:`bold`},bodyStyle:{borderColor:`rgba(128, 128, 128, 0.2)`,borderLineWidth:[1,0,1,0],fontSize:13}},a={basic:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`任务名称`,width:220,tree:!0},{field:`start`,title:`开始时间`,width:120},{field:`end`,title:`结束时间`,width:120},{field:`progress`,title:`进度`,width:80}],tableWidth:420,minTableWidth:300,theme:i},frame:{outerFrameStyle:{borderLineWidth:1,borderColor:`#e1e4e8`,cornerRadius:6},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:2}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,labelText:`{title}`,labelTextStyle:{fontSize:12,textAlign:`left`},barStyle:{width:18,barColor:`#1890ff`,completedBarColor:`#52c41a`,cornerRadius:4,borderLineWidth:0},milestoneStyle:{borderColor:`#fa8c16`,borderLineWidth:1,fillColor:`#ffd666`,width:12}},timelineHeader:{colWidth:60,horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},scales:[{unit:`week`,step:1,format:e=>`第${e.dateIndex}周`,style:{fontSize:12,fontWeight:`bold`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},project:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`任务名称`,width:200,tree:!0,editor:`input`},{field:`start`,title:`开始时间`,width:120,editor:`date-input`},{field:`end`,title:`结束时间`,width:120,editor:`date-input`},{field:`priority`,title:`优先级`,width:80,editor:`input`},{field:`progress`,title:`进度%`,width:80,editor:`input`}],tableWidth:480,minTableWidth:350,maxTableWidth:800,theme:i,hierarchyExpandLevel:2},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#e1e4e8`,cornerRadius:8},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,hoverBarStyle:{barOverlayColor:`rgba(24, 144, 255, 0.3)`},labelText:`{title} {progress}%`,labelTextStyle:{fontSize:12,textAlign:`left`,textOverflow:`ellipsis`},barStyle:{width:20,barColor:`#1890ff`,completedBarColor:`#52c41a`,cornerRadius:6,borderLineWidth:0}},timelineHeader:{colWidth:60,horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},scales:[{unit:`week`,step:1,startOfWeek:`monday`,format:e=>`第${e.dateIndex}周`,style:{fontSize:13,fontWeight:`bold`,textAlign:`center`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11,textAlign:`center`}}]},rowSeriesNumber:{title:`序号`,dragOrder:!0,headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`},style:{borderColor:`rgba(128, 128, 128, 0.2)`}},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},timeline:{overscrollBehavior:`none`,headerRowHeight:45,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`事件名称`,width:250,tree:!0},{field:`start`,title:`时间`,width:150}],tableWidth:400,minTableWidth:300,theme:{headerStyle:{...i.headerStyle},bodyStyle:i.bodyStyle}},frame:{outerFrameStyle:{borderLineWidth:1,borderColor:`rgba(128, 128, 128, 0.3)`,cornerRadius:4},verticalSplitLineMoveable:!0},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,labelText:`{title}`,labelTextStyle:{fontSize:12,textAlign:`left`},barStyle:{width:22,barColor:`#722ed1`,completedBarColor:`#b37feb`,cornerRadius:8,borderLineWidth:0}},timelineHeader:{colWidth:60,scales:[{unit:`month`,step:1,format:e=>`${e.dateIndex}月`,style:{fontSize:13,fontWeight:`bold`}},{unit:`day`,step:1,format:e=>`${e.dateIndex}`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},milestone:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:38,taskListTable:{columns:[{field:`title`,title:`里程碑`,width:200,tree:!0},{field:`start`,title:`目标日期`,width:120},{field:`priority`,title:`重要性`,width:100}],tableWidth:400,minTableWidth:300,theme:{headerStyle:{...i.headerStyle,borderColor:`#ffa940`},bodyStyle:{...i.bodyStyle,borderColor:`#ffa940`}}},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#ffa940`,cornerRadius:6},verticalSplitLineMoveable:!0},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(255, 168, 64, 0.3)`},horizontalLine:{lineWidth:1,lineColor:`rgba(255, 168, 64, 0.3)`}},taskBar:{startDateField:`start`,endDateField:`start`,labelText:`{title}`,labelTextStyle:{fontSize:12},barStyle:{width:0,barColor:`transparent`},milestoneStyle:{borderColor:`#fa8c16`,borderLineWidth:2,fillColor:`#ffd666`,width:16}},timelineHeader:{colWidth:80,scales:[{unit:`month`,step:1,format:e=>`${e.dateIndex}月`,style:{fontSize:13,fontWeight:`bold`}},{unit:`week`,step:1,format:e=>`第${e.dateIndex}周`,style:{fontSize:11}}]},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}},official:{overscrollBehavior:`none`,headerRowHeight:40,rowHeight:40,taskListTable:{columns:[{field:`title`,title:`title`,width:180,sort:!0,tree:!0,editor:`input`},{field:`start`,title:`start`,width:120,sort:!0,editor:`date-input`},{field:`end`,title:`end`,width:120,sort:!0,editor:`date-input`},{field:`priority`,title:`priority`,width:80,sort:!0,editor:`input`},{field:`progress`,title:`progress`,width:80,sort:!0,editor:`input`}],tableWidth:460,minTableWidth:350,maxTableWidth:800,theme:{headerStyle:{...i.headerStyle,fontSize:18,color:`red`},bodyStyle:{...i.bodyStyle,fontSize:16,color:`#4D4D4D`}},hierarchyExpandLevel:2},frame:{outerFrameStyle:{borderLineWidth:2,borderColor:`#e1e4e8`,cornerRadius:8},verticalSplitLineMoveable:!0,verticalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3},horizontalSplitLine:{lineColor:`#e1e4e8`,lineWidth:3}},grid:{verticalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`},horizontalLine:{lineWidth:1,lineColor:`rgba(128, 128, 128, 0.2)`}},taskBar:{startDateField:`start`,endDateField:`end`,progressField:`progress`,moveable:!0,resizable:!0,hoverBarStyle:{barOverlayColor:`rgba(99, 144, 0, 0.4)`},labelText:`{title} {progress}%`,labelTextStyle:{fontSize:16,textAlign:`left`,textOverflow:`ellipsis`},barStyle:{width:20,barColor:`#ee8800`,completedBarColor:`#91e8e0`,cornerRadius:8,borderLineWidth:1,borderColor:`black`},milestoneStyle:{borderColor:`red`,borderLineWidth:1,fillColor:`green`,width:15}},timelineHeader:{backgroundColor:`#EEF1F5`,colWidth:60,horizontalLine:{lineWidth:1,lineColor:`#e1e4e8`},verticalLine:{lineWidth:1,lineColor:`#e1e4e8`},scales:[{unit:`week`,step:1,startOfWeek:`sunday`,format:e=>`Week ${e.dateIndex}`,style:{fontSize:20,fontWeight:`bold`,color:`white`,strokeColor:`black`,textAlign:`right`,textBaseline:`bottom`,textStick:!0}},{unit:`day`,step:1,format:e=>e.dateIndex.toString(),style:{fontSize:20,fontWeight:`bold`,color:`white`,strokeColor:`black`,textAlign:`right`,textBaseline:`bottom`}}]},markLine:[{date:`2024-07-28`,style:{lineWidth:1,lineColor:`blue`,lineDash:[8,4]}},{date:`2024-08-17`,style:{lineWidth:2,lineColor:`red`,lineDash:[8,4]}}],rowSeriesNumber:{title:`行号`,dragOrder:!0,headerStyle:{borderColor:`rgba(128, 128, 128, 0.2)`},style:{borderColor:`rgba(128, 128, 128, 0.2)`}},scrollStyle:{scrollRailColor:`rgba(246,246,246,0.5)`,visible:`scrolling`,width:6,scrollSliderCornerRadius:2,scrollSliderColor:`#1890ff`}}},o=new Set([`__proto__`,`prototype`,`constructor`]),s=e=>{if(typeof e!=`object`||!e)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null};function c(e,t){let n=new WeakMap,r=(e,t)=>{let i=n.get(t);if(i)return i;let a={...e};n.set(t,a);for(let[n,i]of Object.entries(t))o.has(n)||(a[n]=s(i)?r(s(e[n])?e[n]:{},i):i);return a};return r(e,t)}function l(e,t,n){e.on(`click_task_bar`,e=>{e.record&&t(e.record,e.event)}),e.on(`change_date_range`,e=>{if(e.record){let t={start:e.startDate,end:e.endDate};n({...e.record,...t},t)}}),e.on(`progress_update`,e=>{if(e.record){let t={progress:e.progress};n({...e.record,...t},t)}});let r=e.taskListTableInstance;r&&(r.on(`click_cell`,e=>{let n=r.getCellOriginRecord(e.col,e.row);n&&typeof n==`object`&&`id`in n&&t(n,e.event)}),r.on(`change_cell_value`,e=>{let t=r.getCellOriginRecord(e.col,e.row),i=r.getHeaderField(e.col,e.row);t&&typeof i==`string`&&n({...t,[i]:e.changedValue},{[i]:e.changedValue})}))}const u={class:`c-vtable-gantt-wrapper`},d={key:0,class:`gantt-toolbar`},f={class:`toolbar-left`},p={class:`gantt-title`},m={class:`toolbar-right`},h={class:`gantt-body`},g=(0,n.defineComponent)({name:`C_VtableGantt`,__name:`index`,props:{data:{default:()=>[]},options:{default:()=>({})},preset:{default:`basic`},height:{default:`600px`},title:{default:``},showToolbar:{type:Boolean,default:!0},showFullscreenButton:{type:Boolean,default:!0},theme:{default:`light`}},emits:[`ganttCreated`,`taskClick`,`taskChange`,`error`],setup(t,{expose:i,emit:o}){let s=t,g=o,_=(0,n.ref)(),v=(0,n.shallowRef)(),y=(0,n.ref)(!1),b=(0,n.ref)(!1),x=(0,n.shallowRef)(),S=0,C,w=!1,T,E,D,O=(0,n.computed)(()=>typeof s.height==`number`?`${s.height}px`:s.height),k=(e,t)=>!w&&e===S&&_.value===t,A=e=>e.map(e=>({...e,title:e.title||`任务${e.id}`,children:e.children?A(e.children):void 0})),j=e=>({underlayBackgroundColor:e?`#1e1e1e`:`#ffffff`,timelineHeaderBg:e?`#2d2d2d`:`#EEF1F5`,gridBg:e?`#1e1e1e`:`#ffffff`,lineColor:e?`rgba(255, 255, 255, 0.1)`:`rgba(128, 128, 128, 0.2)`,textColor:e?`#ffffff`:`#000000`}),M=(e,t)=>({...e,backgroundColor:t.timelineHeaderBg,horizontalLine:{...e?.horizontalLine,lineColor:t.lineColor},verticalLine:{...e?.verticalLine,lineColor:t.lineColor},scales:e?.scales?.map(e=>({...e,style:{...e.style,color:t.textColor}}))}),N=(e,t)=>({...e,backgroundColor:t.gridBg,horizontalLine:{...e?.horizontalLine,lineColor:t.lineColor},verticalLine:{...e?.verticalLine,lineColor:t.lineColor}}),P=(e,t,n,r)=>({...e,records:t,underlayBackgroundColor:r.underlayBackgroundColor,taskListTable:{...e.taskListTable,theme:n.extends(e.taskListTable?.theme??{})},timelineHeader:M(e.timelineHeader,r),grid:N(e.grid,r)}),F=(e,t,n)=>{let r=s.theme===`dark`;return P(t,n,r?e.DARK:e.DEFAULT,j(r))},I=e=>{if(e)try{e.release()}catch(e){console.warn(`销毁甘特图失败:`,e)}},L=(e,t,n)=>{e.editor(t)||e.editor(t,n())},R=async()=>{clearTimeout(C),C=void 0;let e=_.value;if(!e||w)return;let t=++S;b.value=!0,x.value=void 0;let n;try{let[{Gantt:r},{themes:i,register:o},{InputEditor:u,DateInputEditor:d}]=await Promise.all([import(`@visactor/vtable-gantt`),import(`@visactor/vtable`),import(`@visactor/vtable-editors`)]);if(!k(t,e))return;L(o,`input`,()=>new u),L(o,`date-input`,()=>new d);let f=c(a[s.preset]||a.basic,s.options),p=F(i,f,A(s.data));U();let m=new r(e,p);if(n=m,!k(t,e)){m.release();return}l(m,(e,t)=>g(`taskClick`,e,t),(e,t)=>g(`taskChange`,e,t)),v.value=m,T=p,E=f,D=i,n=void 0,g(`ganttCreated`,m)}catch(r){if(I(n),!k(t,e))return;x.value=r instanceof Error?r:Error(String(r)),g(`error`,x.value)}finally{k(t,e)&&(b.value=!1)}},z=async()=>{let e=_.value;if(e)try{document.fullscreenElement===e?await document.exitFullscreen():await e.requestFullscreen(),y.value=document.fullscreenElement===e}catch(t){console.warn(`全屏切换失败:`,t),y.value=document.fullscreenElement===e}},B=()=>{y.value=document.fullscreenElement===_.value},V=e=>{if(v.value&&e)try{let t=A(e);v.value.setRecords(t),T&&={...T,records:t}}catch(e){console.warn(`更新数据失败:`,e)}},H=e=>{if(v.value&&T&&E&&D)try{let t=c(E,e),n=F(D,t,T.records??[]);v.value.updateOption(n),T=n,E=t}catch(e){console.warn(`更新配置失败:`,e)}},U=()=>{let e=v.value;v.value=void 0,T=void 0,E=void 0,D=void 0,I(e)};return(0,n.watch)(()=>s.data,e=>{e&&v.value&&V(e)},{deep:!0}),(0,n.watch)(()=>[s.options,s.preset,s.theme],()=>void R(),{deep:!0,flush:`post`}),(0,n.onMounted)(()=>{w=!1,document.addEventListener(`fullscreenchange`,B),(0,n.nextTick)(()=>{w||S>0||(C=setTimeout(()=>R(),100))})}),(0,n.onUnmounted)(()=>{w=!0,b.value=!1,S+=1,C&&clearTimeout(C),document.removeEventListener(`fullscreenchange`,B),U()}),i({ganttInstance:v,loading:b,error:x,reload:R,updateData:V,updateOptions:H,toggleFullscreen:z}),(i,a)=>((0,n.openBlock)(),(0,n.createElementBlock)(`div`,u,[t.showToolbar?((0,n.openBlock)(),(0,n.createElementBlock)(`div`,d,[(0,n.createElementVNode)(`div`,f,[(0,n.createElementVNode)(`span`,p,(0,n.toDisplayString)(t.title||`甘特图`),1)]),(0,n.createElementVNode)(`div`,m,[t.showFullscreenButton?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NButton),{key:0,size:`small`,onClick:z},{icon:(0,n.withCtx)(()=>[(0,n.createVNode)(e.t,{name:y.value?`carbon:minimize`:`carbon:maximize`,size:16,color:`currentColor`},null,8,[`name`])]),default:(0,n.withCtx)(()=>[(0,n.createTextVNode)(` `+(0,n.toDisplayString)(y.value?`退出全屏`:`全屏`),1)]),_:1})):(0,n.createCommentVNode)(`v-if`,!0)])])):(0,n.createCommentVNode)(`v-if`,!0),(0,n.createElementVNode)(`div`,h,[(0,n.createElementVNode)(`div`,{ref_key:`ganttContainerRef`,ref:_,class:`gantt-container`,style:(0,n.normalizeStyle)({height:O.value})},null,4),x.value?((0,n.openBlock)(),(0,n.createBlock)((0,n.unref)(r.NResult),{key:0,class:`gantt-error`,status:`error`,title:`甘特图加载失败`,description:x.value.message},{footer:(0,n.withCtx)(()=>[(0,n.createVNode)((0,n.unref)(r.NButton),{loading:b.value,onClick:R},{default:(0,n.withCtx)(()=>[...a[0]||=[(0,n.createTextVNode)(`重试`,-1)]]),_:1},8,[`loading`])]),_:1},8,[`description`])):(0,n.createCommentVNode)(`v-if`,!0)])]))}});var _=t.t(g,[[`__scopeId`,`data-v-f33bf002`]]);function v(e,t){e.add(t)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return v}});
|