@veltra/desktop 1.0.8 → 1.0.9
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/components/action/action-group.vue.d.ts +2 -2
- package/dist/components/action/action.vue.d.ts +3 -3
- package/dist/components/auto-complete/auto-complete.vue.d.ts +1 -1
- package/dist/components/batch-edit/style.js +2 -2
- package/dist/components/button/button.vue.d.ts +1 -1
- package/dist/components/cascade/cascade.js +15 -13
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +4 -4
- package/dist/components/cascade/node.js.map +1 -1
- package/dist/components/cascade/use-check.js +3 -2
- package/dist/components/cascade/use-check.js.map +1 -1
- package/dist/components/cascade/use-select.js +3 -3
- package/dist/components/cascade/use-select.js.map +1 -1
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-picker/date-picker.js +9 -9
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +9 -9
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
- package/dist/components/empty/empty.vue.d.ts +1 -1
- package/dist/components/file-picker/file-picker.vue.d.ts +1 -1
- package/dist/components/file-picker/helper.js +19 -7
- package/dist/components/file-picker/helper.js.map +1 -1
- package/dist/components/file-viewer/file-viewer.js +294 -0
- package/dist/components/file-viewer/file-viewer.js.map +1 -0
- package/dist/components/file-viewer/file-viewer.vue.d.ts +42 -0
- package/dist/components/file-viewer/helper.js +185 -0
- package/dist/components/file-viewer/helper.js.map +1 -0
- package/dist/components/file-viewer/index.d.ts +1 -0
- package/dist/components/file-viewer/previewers/docx-previewer.js +76 -0
- package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -0
- package/dist/components/file-viewer/previewers/image-previewer.js +64 -0
- package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -0
- package/dist/components/file-viewer/previewers/pdf-previewer.js +90 -0
- package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -0
- package/dist/components/file-viewer/previewers/sheet-previewer.js +175 -0
- package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -0
- package/dist/components/file-viewer/previewers/text-previewer.js +74 -0
- package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -0
- package/dist/components/file-viewer/previewers/video-previewer.js +62 -0
- package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -0
- package/dist/components/file-viewer/style.d.ts +1 -0
- package/dist/components/file-viewer/style.js +4 -0
- package/dist/components/file-viewer/style2.css +445 -0
- package/dist/components/grid-input/grid-input.vue.d.ts +1 -1
- package/dist/components/index.d.ts +12 -9
- package/dist/components/input/input.vue.d.ts +1 -1
- package/dist/components/multi-select/multi-select-option.js +14 -10
- package/dist/components/multi-select/multi-select-option.js.map +1 -1
- package/dist/components/multi-select/multi-select.js +16 -19
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +4 -4
- package/dist/components/notification/notification.vue.d.ts +1 -1
- package/dist/components/number-input/number-input.vue.d.ts +1 -1
- package/dist/components/number-range-input/number-range-input.vue.d.ts +2 -2
- package/dist/components/palette/di.js.map +1 -1
- package/dist/components/palette/palette-alpha.js +7 -10
- package/dist/components/palette/palette-alpha.js.map +1 -1
- package/dist/components/palette/palette-hue.js +5 -7
- package/dist/components/palette/palette-hue.js.map +1 -1
- package/dist/components/palette/palette-sv.js +8 -10
- package/dist/components/palette/palette-sv.js.map +1 -1
- package/dist/components/palette/palette.js +22 -24
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/password-input/password-input.vue.d.ts +1 -1
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
- package/dist/components/progress-nodes/progress-nodes.vue.d.ts +3 -3
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +2 -2
- package/dist/components/select/select.js +14 -12
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/select.vue.d.ts +2 -2
- package/dist/components/slider/slider-thumb.js +10 -13
- package/dist/components/slider/slider-thumb.js.map +1 -1
- package/dist/components/slider/slider.js +12 -15
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/table/di.js.map +1 -1
- package/dist/components/table/node/row.d.ts +10 -1
- package/dist/components/table/node/row.js +9 -0
- package/dist/components/table/node/row.js.map +1 -1
- package/dist/components/table/style.js +1 -1
- package/dist/components/table/table-body.js +25 -26
- package/dist/components/table/table-body.js.map +1 -1
- package/dist/components/table/table-cell.js +16 -9
- package/dist/components/table/table-cell.js.map +1 -1
- package/dist/components/table/table-row.js +78 -19
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/table.js +76 -34
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/use-fixed-columns.js +27 -8
- package/dist/components/table/use-fixed-columns.js.map +1 -1
- package/dist/components/table/use-rows.js +2 -2
- package/dist/components/table/use-rows.js.map +1 -1
- package/dist/components/table/use-table.js +25 -3
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/tabs/index.d.ts +3 -1
- package/dist/components/tabs/style2.css +169 -107
- package/dist/components/tabs/tabs-horizontal.js +133 -0
- package/dist/components/tabs/tabs-horizontal.js.map +1 -0
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +29 -0
- package/dist/components/tabs/tabs-vertical.js +89 -0
- package/dist/components/tabs/tabs-vertical.js.map +1 -0
- package/dist/components/tabs/tabs-vertical.vue.d.ts +28 -0
- package/dist/components/tabs/tabs.js +75 -105
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/tabs/tabs.vue.d.ts +9 -23
- package/dist/components/tabs/use-tabs-bar.js +105 -0
- package/dist/components/tabs/use-tabs-bar.js.map +1 -0
- package/dist/components/textarea/textarea.vue.d.ts +1 -1
- package/dist/components/tip/tip.vue.d.ts +2 -2
- package/dist/components/tree/style2.css +45 -23
- package/dist/components/tree/tree-node.js +50 -35
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree/tree.js +27 -20
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree/tree.vue.d.ts +1 -1
- package/dist/components/tree/use-check.js +52 -14
- package/dist/components/tree/use-check.js.map +1 -1
- package/dist/components/tree/use-tree-nodes.js +51 -24
- package/dist/components/tree/use-tree-nodes.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
- package/dist/components/watermark/watermark.vue.d.ts +1 -1
- package/dist/index.d.ts +57 -53
- package/dist/index.js +51 -48
- package/dist/types/file-viewer.d.ts +71 -0
- package/dist/types/index.d.ts +3 -2
- package/dist/types/tabs.d.ts +106 -14
- package/dist/types/tree.d.ts +6 -1
- package/package.json +32 -31
- package/src/components/cascade/cascade.vue +18 -18
- package/src/components/cascade/node.ts +4 -1
- package/src/components/cascade/use-check.ts +5 -4
- package/src/components/cascade/use-select.ts +4 -5
- package/src/components/date-picker/date-picker.vue +10 -9
- package/src/components/date-range-picker/date-range-picker.vue +12 -12
- package/src/components/file-picker/helper.ts +21 -10
- package/src/components/file-viewer/file-viewer.vue +311 -0
- package/src/components/file-viewer/helper.ts +193 -0
- package/src/components/file-viewer/index.ts +1 -0
- package/src/components/file-viewer/previewers/docx-previewer.vue +78 -0
- package/src/components/file-viewer/previewers/image-previewer.vue +64 -0
- package/src/components/file-viewer/previewers/pdf-previewer.vue +90 -0
- package/src/components/file-viewer/previewers/sheet-previewer.vue +210 -0
- package/src/components/file-viewer/previewers/text-previewer.vue +76 -0
- package/src/components/file-viewer/previewers/video-previewer.vue +72 -0
- package/src/components/file-viewer/style.scss +504 -0
- package/src/components/file-viewer/style.ts +4 -0
- package/src/components/index.ts +2 -0
- package/src/components/multi-select/multi-select-option.vue +16 -3
- package/src/components/multi-select/multi-select.vue +17 -9
- package/src/components/palette/di.ts +5 -3
- package/src/components/palette/palette-alpha.vue +7 -10
- package/src/components/palette/palette-hue.vue +5 -7
- package/src/components/palette/palette-sv.vue +12 -14
- package/src/components/palette/palette.vue +19 -21
- package/src/components/select/select.vue +21 -19
- package/src/components/slider/slider-thumb.vue +11 -14
- package/src/components/slider/slider.vue +15 -15
- package/src/components/table/di.ts +20 -3
- package/src/components/table/node/row.ts +10 -1
- package/src/components/table/table-body.vue +28 -33
- package/src/components/table/table-cell.vue +17 -9
- package/src/components/table/table-row.tsx +83 -17
- package/src/components/table/table.vue +73 -45
- package/src/components/table/use-fixed-columns.ts +46 -12
- package/src/components/table/use-rows.ts +14 -3
- package/src/components/table/use-table.ts +27 -3
- package/src/components/tabs/index.ts +2 -0
- package/src/components/tabs/style.scss +217 -134
- package/src/components/tabs/tabs-horizontal.vue +125 -0
- package/src/components/tabs/tabs-vertical.vue +75 -0
- package/src/components/tabs/tabs.vue +56 -127
- package/src/components/tabs/use-tabs-bar.ts +119 -0
- package/src/components/tree/style.scss +74 -29
- package/src/components/tree/tree-node.vue +10 -4
- package/src/components/tree/tree.vue +39 -12
- package/src/components/tree/use-check.ts +79 -23
- package/src/components/tree/use-tree-nodes.ts +85 -34
- package/src/types/file-viewer.ts +69 -0
- package/src/types/index.ts +1 -0
- package/src/types/tabs.ts +113 -19
- package/src/types/tree.ts +6 -1
package/dist/types/tabs.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentProps } from "@veltra/utils";
|
|
1
|
+
import { ComponentProps, ComponentSize } from "@veltra/utils";
|
|
2
2
|
|
|
3
3
|
//#region src/types/tabs.d.ts
|
|
4
4
|
type TabItem = {
|
|
@@ -12,16 +12,105 @@ type TabItem = {
|
|
|
12
12
|
*/
|
|
13
13
|
key: string; /** 是否禁用 */
|
|
14
14
|
disabled?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* 单个标签是否可关闭
|
|
17
|
+
* @description 未显式设置时,沿用组件级 `closable` 属性
|
|
18
|
+
*/
|
|
19
|
+
closable?: boolean;
|
|
15
20
|
};
|
|
21
|
+
/** 水平标签栏(top/bottom)属性 */
|
|
22
|
+
interface TabsHorizontalProps {
|
|
23
|
+
/** 组件尺寸 */
|
|
24
|
+
size?: ComponentSize;
|
|
25
|
+
/** 当前激活的标签 key */
|
|
26
|
+
modelValue?: string;
|
|
27
|
+
/** 标签项 */
|
|
28
|
+
items: TabItem[];
|
|
29
|
+
/**
|
|
30
|
+
* 是否可关闭
|
|
31
|
+
* @description 作为所有 TabItem 未显式 `closable` 时的默认值;禁用项不显示关闭按钮
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
closable?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 是否填充父容器宽度
|
|
37
|
+
* @description 开启时 header 容器占满父容器宽度,背景完整铺开;tab-item 自身宽度保持不变
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
block?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* 是否开启圆角胶囊风格
|
|
43
|
+
* @default false
|
|
44
|
+
*/
|
|
45
|
+
rounded?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* 位置
|
|
48
|
+
* @default 'top'
|
|
49
|
+
*/
|
|
50
|
+
position?: 'top' | 'bottom';
|
|
51
|
+
}
|
|
52
|
+
/** 垂直标签栏(left/right)属性 */
|
|
53
|
+
interface TabsVerticalProps {
|
|
54
|
+
/** 组件尺寸 */
|
|
55
|
+
size?: ComponentSize;
|
|
56
|
+
/** 当前激活的标签 key */
|
|
57
|
+
modelValue?: string;
|
|
58
|
+
/** 标签项 */
|
|
59
|
+
items: TabItem[];
|
|
60
|
+
/**
|
|
61
|
+
* 是否可关闭
|
|
62
|
+
* @description 作为所有 TabItem 未显式 `closable` 时的默认值;禁用项不显示关闭按钮
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
closable?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* 是否开启圆角胶囊风格
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
rounded?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* 位置
|
|
73
|
+
* @default 'left'
|
|
74
|
+
*/
|
|
75
|
+
position?: 'left' | 'right';
|
|
76
|
+
}
|
|
77
|
+
/** 水平标签栏事件 */
|
|
78
|
+
interface TabsHorizontalEmits {
|
|
79
|
+
(e: 'update:modelValue', value: string): void;
|
|
80
|
+
(e: 'click', item: TabItem, index: number): void;
|
|
81
|
+
(e: 'close', item: TabItem, index: number): void;
|
|
82
|
+
}
|
|
83
|
+
/** 垂直标签栏事件 */
|
|
84
|
+
interface TabsVerticalEmits {
|
|
85
|
+
(e: 'update:modelValue', value: string): void;
|
|
86
|
+
(e: 'click', item: TabItem, index: number): void;
|
|
87
|
+
(e: 'close', item: TabItem, index: number): void;
|
|
88
|
+
}
|
|
16
89
|
/** 标签页组件组件属性 */
|
|
17
90
|
interface TabsProps extends ComponentProps {
|
|
91
|
+
/** 当前激活的标签 key */
|
|
18
92
|
modelValue?: string;
|
|
19
93
|
/** 标签项 */
|
|
20
94
|
items: TabItem[];
|
|
95
|
+
/**
|
|
96
|
+
* 是否可关闭
|
|
97
|
+
* @description 作为所有 TabItem 未显式 `closable` 时的默认值;禁用项不显示关闭按钮
|
|
98
|
+
* @default false
|
|
99
|
+
*/
|
|
100
|
+
closable?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* 是否填充父容器宽度(仅在 position=top/bottom 时生效)
|
|
103
|
+
* @description 开启时 header 容器占满父容器宽度,背景完整铺开;tab-item 自身宽度保持不变
|
|
104
|
+
* @default false
|
|
105
|
+
*/
|
|
106
|
+
block?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* 是否开启圆角胶囊风格
|
|
109
|
+
* @default false
|
|
110
|
+
*/
|
|
111
|
+
rounded?: boolean;
|
|
21
112
|
/** 显示位置 */
|
|
22
113
|
position?: 'left' | 'right' | 'top' | 'bottom';
|
|
23
|
-
/** 是否可以动态编辑 */
|
|
24
|
-
editable?: boolean;
|
|
25
114
|
/**
|
|
26
115
|
* 是否保活
|
|
27
116
|
* @default false
|
|
@@ -30,19 +119,22 @@ interface TabsProps extends ComponentProps {
|
|
|
30
119
|
}
|
|
31
120
|
/** 标签页组件组件定义的事件 */
|
|
32
121
|
interface TabsEmits {
|
|
33
|
-
(e: 'update:modelValue', value: string
|
|
34
|
-
(e: 'update:items', items: TabItem[]): void;
|
|
35
|
-
(e: 'update:active', active: string | number): void;
|
|
36
|
-
(e: 'delete', item: TabItem, index: number): void;
|
|
37
|
-
(e: 'create'): void;
|
|
122
|
+
(e: 'update:modelValue', value: string): void;
|
|
38
123
|
(e: 'click', item: TabItem, index: number): void;
|
|
124
|
+
(e: 'close', item: TabItem, index: number): void;
|
|
39
125
|
}
|
|
40
|
-
/**
|
|
126
|
+
/** 标签页组件暴露的属性和方法(组件内部使用) */
|
|
41
127
|
interface _TabsExposed {}
|
|
42
|
-
/**
|
|
43
|
-
interface TabsExposed {
|
|
44
|
-
|
|
45
|
-
}
|
|
128
|
+
/** 标签页组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
|
|
129
|
+
interface TabsExposed {}
|
|
130
|
+
/** 水平标签栏暴露的属性和方法(组件内部使用) */
|
|
131
|
+
interface _TabsHorizontalExposed {}
|
|
132
|
+
/** 水平标签栏暴露的属性和方法(组件外部使用) */
|
|
133
|
+
interface TabsHorizontalExposed {}
|
|
134
|
+
/** 垂直标签栏暴露的属性和方法(组件内部使用) */
|
|
135
|
+
interface _TabsVerticalExposed {}
|
|
136
|
+
/** 垂直标签栏暴露的属性和方法(组件外部使用) */
|
|
137
|
+
interface TabsVerticalExposed {}
|
|
46
138
|
//#endregion
|
|
47
|
-
export { TabItem, TabsEmits, TabsExposed, TabsProps, _TabsExposed };
|
|
139
|
+
export { TabItem, TabsEmits, TabsExposed, TabsHorizontalEmits, TabsHorizontalExposed, TabsHorizontalProps, TabsProps, TabsVerticalEmits, TabsVerticalExposed, TabsVerticalProps, _TabsExposed, _TabsHorizontalExposed, _TabsVerticalExposed };
|
|
48
140
|
//# sourceMappingURL=tabs.d.ts.map
|
package/dist/types/tree.d.ts
CHANGED
|
@@ -70,7 +70,12 @@ interface TreeEmit {
|
|
|
70
70
|
}
|
|
71
71
|
interface TreeNodeProps {
|
|
72
72
|
node: TreeNode$1;
|
|
73
|
-
|
|
73
|
+
/**
|
|
74
|
+
* 虚拟项索引:对应 `nodes` 数组中的绝对位置。
|
|
75
|
+
* 需要传入以便在节点卸载时正确通知 `Virtualizer` 解绑,避免 size=0 的脏测量。
|
|
76
|
+
*/
|
|
77
|
+
index?: number;
|
|
78
|
+
measureElement?: (index: number, el: Element | null) => void;
|
|
74
79
|
}
|
|
75
80
|
/** 树组件暴露的属性和方法(组件内部使用) */
|
|
76
81
|
interface _TreeExposed {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veltra/desktop",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"src"
|
|
@@ -25,43 +25,44 @@
|
|
|
25
25
|
"check-types": "tsc -p tsconfig.json --noEmit"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@cat-kit/core": "^1.
|
|
28
|
+
"@cat-kit/core": "^1.1.1",
|
|
29
|
+
"@cat-kit/excel": "^1.0.1",
|
|
29
30
|
"@codemirror/lang-java": "^6.0.2",
|
|
30
31
|
"@codemirror/lang-javascript": "^6.2.5",
|
|
31
32
|
"@codemirror/lang-json": "^6.0.2",
|
|
32
33
|
"@codemirror/lang-sql": "^6.10.0",
|
|
33
34
|
"@codemirror/state": "^6.6.0",
|
|
34
|
-
"@codemirror/view": "^6.41.
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
40
|
-
"@
|
|
41
|
-
"@lexical/
|
|
42
|
-
"@lexical/
|
|
43
|
-
"@
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
47
|
-
"@
|
|
35
|
+
"@codemirror/view": "^6.41.1",
|
|
36
|
+
"@embedpdf/core": "^2.14.1",
|
|
37
|
+
"@embedpdf/engines": "^2.14.1",
|
|
38
|
+
"@embedpdf/plugin-document-manager": "^2.14.1",
|
|
39
|
+
"@embedpdf/plugin-render": "^2.14.1",
|
|
40
|
+
"@embedpdf/plugin-scroll": "^2.14.1",
|
|
41
|
+
"@embedpdf/plugin-viewport": "^2.14.1",
|
|
42
|
+
"@lexical/clipboard": "^0.43.0",
|
|
43
|
+
"@lexical/history": "^0.43.0",
|
|
44
|
+
"@lexical/html": "^0.43.0",
|
|
45
|
+
"@lexical/link": "^0.43.0",
|
|
46
|
+
"@lexical/list": "^0.43.0",
|
|
47
|
+
"@lexical/rich-text": "^0.43.0",
|
|
48
|
+
"@lexical/selection": "^0.43.0",
|
|
49
|
+
"@lexical/utils": "^0.43.0",
|
|
50
|
+
"@veltra/compositions": "1.0.9",
|
|
51
|
+
"@veltra/directives": "1.0.9",
|
|
52
|
+
"@veltra/icons": "1.0.9",
|
|
53
|
+
"@veltra/styles": "1.0.9",
|
|
54
|
+
"@veltra/utils": "1.0.9",
|
|
55
|
+
"@visactor/vtable": "^1.26.0",
|
|
48
56
|
"codemirror": "^6.0.2",
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
"devDependencies": {
|
|
52
|
-
"@tsdown/css": "^0.21.7",
|
|
53
|
-
"sass-embedded": "^1.99.0",
|
|
54
|
-
"tsdown": "^0.21.7",
|
|
55
|
-
"unplugin-vue": "^7.1.1",
|
|
56
|
-
"unplugin-vue-jsx": "^0.8.1",
|
|
57
|
-
"vue-tsc": "^3.2.6"
|
|
57
|
+
"docx-preview": "^0.3.7",
|
|
58
|
+
"lexical": "^0.43.0"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
|
60
|
-
"@veltra/compositions": "1.0.
|
|
61
|
-
"@veltra/directives": "1.0.
|
|
62
|
-
"@veltra/icons": "1.0.
|
|
63
|
-
"@veltra/styles": "1.0.
|
|
64
|
-
"@veltra/utils": "1.0.
|
|
65
|
-
"vue": "^3.5.
|
|
61
|
+
"@veltra/compositions": "1.0.9",
|
|
62
|
+
"@veltra/directives": "1.0.9",
|
|
63
|
+
"@veltra/icons": "1.0.9",
|
|
64
|
+
"@veltra/styles": "1.0.9",
|
|
65
|
+
"@veltra/utils": "1.0.9",
|
|
66
|
+
"vue": "^3.5.33"
|
|
66
67
|
}
|
|
67
68
|
}
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
|
|
106
106
|
<script lang="ts" setup>
|
|
107
107
|
import { Forest, o } from '@cat-kit/core'
|
|
108
|
-
import { useFormComponent, useFormFallbackProps,
|
|
108
|
+
import { useFormComponent, useFormFallbackProps, useUserAction } from '@veltra/compositions'
|
|
109
109
|
import { ArrowDown, Close, Search } from '@veltra/icons/normal'
|
|
110
110
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
111
111
|
import { computed, provide, shallowRef, triggerRef, watch } from 'vue'
|
|
@@ -185,8 +185,7 @@ const forest = computed(() => {
|
|
|
185
185
|
|
|
186
186
|
const { dataMap } = useDataMap({ props, forest })
|
|
187
187
|
|
|
188
|
-
|
|
189
|
-
const updater = useUpdateLock()
|
|
188
|
+
const { userAction, isUserActive } = useUserAction()
|
|
190
189
|
|
|
191
190
|
const {
|
|
192
191
|
displayedValue,
|
|
@@ -201,7 +200,7 @@ const {
|
|
|
201
200
|
emit,
|
|
202
201
|
dataMap,
|
|
203
202
|
forest,
|
|
204
|
-
|
|
203
|
+
isUserActive,
|
|
205
204
|
dropdownRef
|
|
206
205
|
})
|
|
207
206
|
|
|
@@ -212,29 +211,30 @@ const { hovered, tags, restTag, updateMultipleValue, handleCloseTag, checkItem,
|
|
|
212
211
|
getPanelItemList,
|
|
213
212
|
emit,
|
|
214
213
|
dataMap,
|
|
215
|
-
|
|
214
|
+
isUserActive,
|
|
216
215
|
disabled,
|
|
217
216
|
readonly
|
|
218
217
|
})
|
|
219
218
|
|
|
219
|
+
const commitSingleSelect = userAction((item: CascadeNode) => {
|
|
220
|
+
if (!props.strict) {
|
|
221
|
+
updateSingleValue()
|
|
222
|
+
} else if (!item.children?.length) {
|
|
223
|
+
updateSingleValue()
|
|
224
|
+
}
|
|
225
|
+
})
|
|
226
|
+
|
|
220
227
|
function handleClick(panelIndex: number, item: CascadeNode) {
|
|
221
|
-
// 选择
|
|
222
228
|
selectItem(panelIndex, item)
|
|
223
229
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if (!props.strict) {
|
|
228
|
-
updateSingleValue()
|
|
229
|
-
} else if (!item.children?.length) {
|
|
230
|
-
updateSingleValue()
|
|
231
|
-
}
|
|
232
|
-
})
|
|
230
|
+
if (!props.multiple) {
|
|
231
|
+
commitSingleSelect(item)
|
|
232
|
+
}
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
}
|
|
235
|
+
const handleCheck = userAction((item: CascadeNode, checked: boolean) => {
|
|
236
|
+
checkItem(item, checked)
|
|
237
|
+
})
|
|
238
238
|
|
|
239
239
|
function handleClear() {
|
|
240
240
|
if (props.multiple) {
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { TreeNode } from '@cat-kit/core'
|
|
2
2
|
import { shallowReactive } from 'vue'
|
|
3
3
|
|
|
4
|
-
export class CascadeNode<T extends Record<string, any
|
|
4
|
+
export class CascadeNode<T extends Record<string, any> = Record<string, any>> extends TreeNode<
|
|
5
|
+
T,
|
|
6
|
+
CascadeNode<T>
|
|
7
|
+
> {
|
|
5
8
|
visible = true
|
|
6
9
|
|
|
7
10
|
value: string
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { dfs, type Forest } from '@cat-kit/core'
|
|
2
|
-
import type { Updater } from '@veltra/compositions'
|
|
3
2
|
import {
|
|
4
3
|
computed,
|
|
5
4
|
shallowRef,
|
|
@@ -19,7 +18,7 @@ interface CheckOptions {
|
|
|
19
18
|
disabled: Ref<boolean>
|
|
20
19
|
readonly: Ref<boolean>
|
|
21
20
|
forest: Ref<Forest<Record<string, unknown>, any>>
|
|
22
|
-
|
|
21
|
+
isUserActive: () => boolean
|
|
23
22
|
getPanelItemList: (data?: CascadeNode[]) => void
|
|
24
23
|
}
|
|
25
24
|
|
|
@@ -34,7 +33,8 @@ interface UseCheckReturned {
|
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
export function useCheck(options: CheckOptions): UseCheckReturned {
|
|
37
|
-
const { props, emit, dataMap, disabled, readonly, forest,
|
|
36
|
+
const { props, emit, dataMap, disabled, readonly, forest, isUserActive, getPanelItemList } =
|
|
37
|
+
options
|
|
38
38
|
|
|
39
39
|
const hovered = shallowRef(false)
|
|
40
40
|
|
|
@@ -119,7 +119,8 @@ export function useCheck(options: CheckOptions): UseCheckReturned {
|
|
|
119
119
|
watch(
|
|
120
120
|
[() => props.multiple, () => props.modelValue, forest],
|
|
121
121
|
([multiple]) => {
|
|
122
|
-
|
|
122
|
+
if (!multiple || isUserActive()) return
|
|
123
|
+
initMultipleCheck()
|
|
123
124
|
},
|
|
124
125
|
{ immediate: false }
|
|
125
126
|
)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Forest } from '@cat-kit/core'
|
|
2
|
-
import type { Updater } from '@veltra/compositions'
|
|
3
2
|
import { createIncrease } from '@veltra/utils'
|
|
4
3
|
import {
|
|
5
4
|
computed,
|
|
@@ -23,7 +22,7 @@ import type {
|
|
|
23
22
|
interface SelectOptions {
|
|
24
23
|
props: CascadeProps
|
|
25
24
|
emit: CascadeEmits
|
|
26
|
-
|
|
25
|
+
isUserActive: () => boolean
|
|
27
26
|
forest: Ref<Forest<Record<string, unknown>, any>>
|
|
28
27
|
dataMap: Ref<Map<string, CascadeNode>>
|
|
29
28
|
dropdownRef: Ref<DropdownExposed | undefined>
|
|
@@ -42,7 +41,7 @@ interface UseSelectReturned {
|
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
export function useSelect(options: SelectOptions): UseSelectReturned {
|
|
45
|
-
const { props, emit, dataMap,
|
|
44
|
+
const { props, emit, dataMap, isUserActive, dropdownRef, forest } = options
|
|
46
45
|
|
|
47
46
|
/** 选中的节点key */
|
|
48
47
|
const selectedNodeKeys = shallowRef<string[]>([])
|
|
@@ -152,8 +151,8 @@ export function useSelect(options: SelectOptions): UseSelectReturned {
|
|
|
152
151
|
watch(
|
|
153
152
|
[() => props.multiple, () => props.modelValue, forest],
|
|
154
153
|
([multiple]) => {
|
|
155
|
-
if (multiple) return
|
|
156
|
-
|
|
154
|
+
if (multiple || isUserActive()) return
|
|
155
|
+
initSingleSelect()
|
|
157
156
|
},
|
|
158
157
|
{ immediate: true }
|
|
159
158
|
)
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
<script lang="ts" setup>
|
|
38
38
|
import { date, type Dater } from '@cat-kit/core'
|
|
39
|
-
import { useFormComponent, useFormFallbackProps,
|
|
39
|
+
import { useFormComponent, useFormFallbackProps, useUserAction } from '@veltra/compositions'
|
|
40
40
|
import { Calendar } from '@veltra/icons/normal'
|
|
41
41
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
42
42
|
import { computed, shallowRef, watch } from 'vue'
|
|
@@ -89,14 +89,13 @@ const formatStr = computed(() => {
|
|
|
89
89
|
|
|
90
90
|
const currentDate = shallowRef<Dater>()
|
|
91
91
|
|
|
92
|
-
const {
|
|
92
|
+
const { userAction, isUserActive } = useUserAction()
|
|
93
93
|
|
|
94
94
|
watch(
|
|
95
95
|
() => props.modelValue,
|
|
96
96
|
(modelValue) => {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
})
|
|
97
|
+
if (isUserActive()) return
|
|
98
|
+
currentDate.value = modelValue ? date(modelValue) : undefined
|
|
100
99
|
},
|
|
101
100
|
{ immediate: true }
|
|
102
101
|
)
|
|
@@ -105,11 +104,13 @@ const displayedValue = computed(() => {
|
|
|
105
104
|
return currentDate.value?.format(formatStr.value) ?? ''
|
|
106
105
|
})
|
|
107
106
|
|
|
107
|
+
const commitSelectedDate = userAction((date: Dater) => {
|
|
108
|
+
currentDate.value = date
|
|
109
|
+
emit('update:modelValue', date.format(formatStr.value))
|
|
110
|
+
})
|
|
111
|
+
|
|
108
112
|
async function handleSelectDate(date: Dater) {
|
|
109
|
-
await
|
|
110
|
-
currentDate.value = date
|
|
111
|
-
emit('update:modelValue', date.format(formatStr.value))
|
|
112
|
-
})
|
|
113
|
+
await commitSelectedDate(date)
|
|
113
114
|
dropdownRef.value?.close()
|
|
114
115
|
}
|
|
115
116
|
|
|
@@ -61,8 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
<script lang="ts" setup>
|
|
63
63
|
import { date, type Dater } from '@cat-kit/core'
|
|
64
|
-
import { useFormComponent, useFormFallbackProps } from '@veltra/compositions'
|
|
65
|
-
import { useUpdateLock } from '@veltra/compositions'
|
|
64
|
+
import { useFormComponent, useFormFallbackProps, useUserAction } from '@veltra/compositions'
|
|
66
65
|
import { Calendar, Close } from '@veltra/icons/normal'
|
|
67
66
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
68
67
|
import { computed, shallowRef, watch } from 'vue'
|
|
@@ -102,7 +101,7 @@ const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, prop
|
|
|
102
101
|
|
|
103
102
|
const dropdownRef = shallowRef<DropdownExposed>()
|
|
104
103
|
|
|
105
|
-
const {
|
|
104
|
+
const { userAction, isUserActive } = useUserAction()
|
|
106
105
|
|
|
107
106
|
const currentRangeDate = shallowRef<[Dater, Dater]>()
|
|
108
107
|
|
|
@@ -126,20 +125,21 @@ const formatStr = computed(() => {
|
|
|
126
125
|
watch(
|
|
127
126
|
() => props.modelValue,
|
|
128
127
|
(val) => {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
})
|
|
128
|
+
if (isUserActive()) return
|
|
129
|
+
if (val?.length === 2) {
|
|
130
|
+
currentRangeDate.value = [date(val[0]), date(val[1])]
|
|
131
|
+
}
|
|
134
132
|
},
|
|
135
133
|
{ immediate: true }
|
|
136
134
|
)
|
|
137
135
|
|
|
136
|
+
const commitSelectedRange = userAction((rangeDate: [Dater, Dater] | undefined) => {
|
|
137
|
+
currentRangeDate.value = rangeDate
|
|
138
|
+
emit('update:modelValue', rangeDate?.map((d) => d.format(formatStr.value)) as [string, string])
|
|
139
|
+
})
|
|
140
|
+
|
|
138
141
|
async function handleSelect(rangeDate: [Dater, Dater] | undefined) {
|
|
139
|
-
await
|
|
140
|
-
currentRangeDate.value = rangeDate
|
|
141
|
-
emit('update:modelValue', rangeDate?.map((d) => d.format(formatStr.value)) as [string, string])
|
|
142
|
-
})
|
|
142
|
+
await commitSelectedRange(rangeDate)
|
|
143
143
|
dropdownRef.value?.close()
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 校验文件是否匹配 accept
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* 校验文件是否匹配 accept 字符串(支持 MIME 类型与通配符)。
|
|
3
|
+
*
|
|
4
|
+
* 支持的形式:
|
|
5
|
+
* - `*` / `*\/*`:接受所有文件
|
|
6
|
+
* - `image/*`:MIME 类型组匹配
|
|
7
|
+
* - `application/pdf`:精确 MIME 类型
|
|
8
|
+
* - `.pdf` / `.docx`:扩展名匹配(不区分大小写)
|
|
9
|
+
*
|
|
10
|
+
* 多个值以逗号分隔,命中任一即视为匹配。
|
|
5
11
|
*/
|
|
6
12
|
export function matchAccept(file: File, accept?: string): boolean {
|
|
7
13
|
if (!accept) return true
|
|
8
14
|
|
|
9
15
|
const fileType = file.type.toLowerCase()
|
|
10
|
-
const
|
|
16
|
+
const fileName = file.name.toLowerCase()
|
|
17
|
+
const acceptList = accept
|
|
18
|
+
.split(',')
|
|
19
|
+
.map((item) => item.trim().toLowerCase())
|
|
20
|
+
.filter(Boolean)
|
|
21
|
+
|
|
22
|
+
if (!acceptList.length) return true
|
|
11
23
|
|
|
12
24
|
return acceptList.some((item) => {
|
|
25
|
+
if (item === '*' || item === '*/*') return true
|
|
26
|
+
if (item.startsWith('.')) return fileName.endsWith(item)
|
|
13
27
|
if (item.endsWith('/*')) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return fileType.startsWith(group)
|
|
17
|
-
} else {
|
|
18
|
-
// MIME 类型精确匹配
|
|
19
|
-
return fileType === item
|
|
28
|
+
const group = item.slice(0, -2)
|
|
29
|
+
return fileType.startsWith(`${group}/`)
|
|
20
30
|
}
|
|
31
|
+
return fileType === item
|
|
21
32
|
})
|
|
22
33
|
}
|