@veltra/desktop 1.1.32 → 1.1.34
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 +2 -2
- package/dist/components/auto-complete/auto-complete.vue.d.ts +1 -1
- package/dist/components/batch-edit/batch-edit.vue.d.ts +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +2 -2
- package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +1 -1
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
- package/dist/components/drawer/drawer.vue.d.ts +2 -2
- 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-viewer/file-viewer.vue.d.ts +1 -1
- package/dist/components/input/input.vue.d.ts +1 -1
- package/dist/components/multi-select/multi-select.js +9 -2
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-select/multi-select.vue.d.ts +2 -2
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +2 -2
- package/dist/components/number-input/number-input.vue.d.ts +1 -1
- package/dist/components/number-range-input/number-range-input.vue.d.ts +1 -1
- package/dist/components/password-input/password-input.vue.d.ts +1 -1
- package/dist/components/progress-nodes/progress-nodes.vue.d.ts +2 -2
- package/dist/components/radio-group/radio-group.vue.d.ts +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +1 -1
- package/dist/components/select/select.vue.d.ts +1 -1
- package/dist/components/steps/steps.vue.d.ts +1 -1
- package/dist/components/table/node/col.d.ts +5 -0
- package/dist/components/table/node/col.js +6 -0
- package/dist/components/table/node/col.js.map +1 -1
- package/dist/components/table/table-row.js +1 -1
- package/dist/components/table/table-row.js.map +1 -1
- package/dist/components/table/use-col-resize.js +10 -10
- package/dist/components/table/use-col-resize.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +2 -2
- package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
- package/dist/components/tabs/tabs.vue.d.ts +2 -2
- package/dist/components/textarea/textarea.vue.d.ts +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +2 -2
- package/package.json +6 -6
- package/src/components/multi-select/multi-select.vue +8 -7
- package/src/components/table/node/col.ts +7 -0
- package/src/components/table/table-row.tsx +1 -1
- package/src/components/table/use-col-resize.ts +18 -16
|
@@ -6,12 +6,12 @@ type __VLS_Slots = {
|
|
|
6
6
|
default?: () => VNode[];
|
|
7
7
|
};
|
|
8
8
|
declare const __VLS_base: import("vue").DefineComponent<ActionGroupProps, _ActionGroupExposed, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ActionGroupProps> & Readonly<{}>, {
|
|
9
|
+
size: "small" | "default" | "large";
|
|
9
10
|
type: import("@veltra/utils").ColorType;
|
|
10
11
|
text: boolean;
|
|
11
|
-
size: "small" | "default" | "large";
|
|
12
12
|
max: number;
|
|
13
|
-
circle: boolean;
|
|
14
13
|
loading: boolean;
|
|
14
|
+
circle: boolean;
|
|
15
15
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
16
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
17
17
|
declare const _default: typeof __VLS_export;
|
|
@@ -12,11 +12,11 @@ declare const __VLS_base: import("vue").DefineComponent<ActionProps, {}, {}, {},
|
|
|
12
12
|
}, string, import("vue").PublicProps, Readonly<ActionProps> & Readonly<{
|
|
13
13
|
onRun?: (() => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
|
+
size: import("@veltra/utils").ComponentSize;
|
|
15
16
|
type: ButtonType;
|
|
16
17
|
text: boolean;
|
|
17
|
-
size: import("@veltra/utils").ComponentSize;
|
|
18
|
-
circle: boolean;
|
|
19
18
|
loading: boolean;
|
|
19
|
+
circle: boolean;
|
|
20
20
|
inDropdown: boolean;
|
|
21
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
22
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -23,9 +23,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
23
23
|
onSelect?: ((value: string) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
disabled: boolean;
|
|
26
|
+
readonly: boolean;
|
|
26
27
|
placeholder: string;
|
|
27
28
|
clearable: boolean;
|
|
28
|
-
readonly: boolean;
|
|
29
29
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
30
30
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
31
31
|
declare const _default: typeof __VLS_export;
|
|
@@ -7,11 +7,11 @@ declare const __VLS_export: <Model extends IFormModel>(__VLS_props: NonNullable<
|
|
|
7
7
|
"onUpdate:selected"?: ((value: Record<string, any> | undefined) => any) | undefined;
|
|
8
8
|
"onUpdate:checked"?: ((value: Record<string, any>[]) => any) | undefined;
|
|
9
9
|
"onUpdate:current"?: ((row?: TableRow | undefined) => any) | undefined;
|
|
10
|
+
"onUpdate:data"?: ((value: Record<string, any>[]) => any) | undefined;
|
|
10
11
|
"onUpdate:rows"?: ((rows: TableRow[]) => any) | undefined;
|
|
11
12
|
"onUpdate:forest"?: ((rows?: import("@cat-kit/core").Forest<Record<string, unknown>, any> | undefined) => any) | undefined;
|
|
12
13
|
"onCell-click"?: ((row: TableRow, column: TableColumn, ev: MouseEvent) => any) | undefined;
|
|
13
14
|
"onRow-click"?: ((row: TableRow, ev: MouseEvent) => any) | undefined;
|
|
14
|
-
"onUpdate:data"?: ((value: Record<string, any>[]) => any) | undefined;
|
|
15
15
|
}> & (typeof globalThis extends {
|
|
16
16
|
__VLS_PROPS_FALLBACK: infer P;
|
|
17
17
|
} ? P : {});
|
|
@@ -10,6 +10,7 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
|
|
|
10
10
|
onChange?: ((...args: [value?: string | undefined, label?: string | undefined, item?: Record<string, any> | undefined] | [value: string[], label: string[], data: Record<string, any>[]]) => any) | undefined;
|
|
11
11
|
}>, {
|
|
12
12
|
disabled: boolean;
|
|
13
|
+
readonly: boolean;
|
|
13
14
|
labelKey: string;
|
|
14
15
|
valueKey: string;
|
|
15
16
|
childrenKey: string;
|
|
@@ -17,9 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<CascadeProps, {}, {},
|
|
|
17
18
|
placeholder: string;
|
|
18
19
|
clearable: boolean;
|
|
19
20
|
filterable: boolean;
|
|
20
|
-
readonly: boolean;
|
|
21
|
-
separator: string;
|
|
22
21
|
visibilityLimit: number;
|
|
22
|
+
separator: string;
|
|
23
23
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
24
|
declare const _default: typeof __VLS_export;
|
|
25
25
|
//#endregion
|
|
@@ -18,8 +18,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
18
18
|
onChange?: ((checked: boolean) => any) | undefined;
|
|
19
19
|
}>, {
|
|
20
20
|
disabled: boolean;
|
|
21
|
-
type: import("@veltra/utils").ColorType;
|
|
22
21
|
readonly: boolean;
|
|
22
|
+
type: import("@veltra/utils").ColorType;
|
|
23
23
|
round: boolean;
|
|
24
24
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
25
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -13,9 +13,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
13
13
|
"onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
15
|
disabled: boolean;
|
|
16
|
+
readonly: boolean;
|
|
16
17
|
labelKey: string;
|
|
17
18
|
valueKey: string;
|
|
18
|
-
readonly: boolean;
|
|
19
19
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
20
|
declare const _default: typeof __VLS_export;
|
|
21
21
|
//#endregion
|
|
@@ -7,8 +7,8 @@ declare const __VLS_export: import("vue").DefineComponent<DatePanelProps, {}, {}
|
|
|
7
7
|
"onSelect:range-date"?: ((rangeDate?: [import("@cat-kit/core").Dater, import("@cat-kit/core").Dater] | undefined) => any) | undefined;
|
|
8
8
|
"onSelect:date"?: ((date: import("@cat-kit/core").Dater) => any) | undefined;
|
|
9
9
|
}>, {
|
|
10
|
-
type: "date" | "month" | "year";
|
|
11
10
|
size: import("@veltra/utils").ComponentSize;
|
|
11
|
+
type: "date" | "month" | "year";
|
|
12
12
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
13
|
declare const _default: typeof __VLS_export;
|
|
14
14
|
//#endregion
|
|
@@ -6,10 +6,10 @@ declare const __VLS_export: import("vue").DefineComponent<DatePickerProps, {}, {
|
|
|
6
6
|
"onUpdate:modelValue"?: ((value?: string | number | Date | undefined) => any) | undefined;
|
|
7
7
|
}>, {
|
|
8
8
|
disabled: boolean;
|
|
9
|
+
readonly: boolean;
|
|
9
10
|
type: "date" | "month" | "year";
|
|
10
11
|
placeholder: string;
|
|
11
12
|
clearable: boolean;
|
|
12
|
-
readonly: boolean;
|
|
13
13
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
14
|
declare const _default: typeof __VLS_export;
|
|
15
15
|
//#endregion
|
|
@@ -6,10 +6,10 @@ declare const __VLS_export: import("vue").DefineComponent<DateRangePickerProps,
|
|
|
6
6
|
"onUpdate:modelValue"?: ((value?: [string, string] | undefined) => any) | undefined;
|
|
7
7
|
}>, {
|
|
8
8
|
disabled: boolean;
|
|
9
|
+
readonly: boolean;
|
|
9
10
|
type: "date" | "month" | "year";
|
|
10
11
|
placeholder: [string, string];
|
|
11
12
|
clearable: boolean;
|
|
12
|
-
readonly: boolean;
|
|
13
13
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
14
|
declare const _default: typeof __VLS_export;
|
|
15
15
|
//#endregion
|
|
@@ -12,12 +12,12 @@ type __VLS_Slots = {} & {
|
|
|
12
12
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
13
13
|
"update:modelValue": (value: boolean) => any;
|
|
14
14
|
} & {
|
|
15
|
-
close: () => any;
|
|
16
15
|
"update:modelValue": (value: boolean) => any;
|
|
16
|
+
close: () => any;
|
|
17
17
|
closed: () => any;
|
|
18
18
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
19
|
-
onClose?: (() => any) | undefined;
|
|
20
19
|
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
20
|
+
onClose?: (() => any) | undefined;
|
|
21
21
|
onClosed?: (() => any) | undefined;
|
|
22
22
|
}>, {
|
|
23
23
|
direction: DrawerDirection;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { EmptyProps } from "../../types/empty.js";
|
|
2
2
|
//#region src/components/empty/empty.vue.d.ts
|
|
3
3
|
declare const __VLS_export: import("vue").DefineComponent<EmptyProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<EmptyProps> & Readonly<{}>, {
|
|
4
|
-
text: string;
|
|
5
4
|
size: number;
|
|
5
|
+
text: string;
|
|
6
6
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
7
|
declare const _default: typeof __VLS_export;
|
|
8
8
|
//#endregion
|
|
@@ -11,8 +11,8 @@ declare const __VLS_base: import("vue").DefineComponent<UploaderProps, {}, {}, {
|
|
|
11
11
|
}, string, import("vue").PublicProps, Readonly<UploaderProps> & Readonly<{
|
|
12
12
|
onPick?: ((files: File[]) => any) | undefined;
|
|
13
13
|
}>, {
|
|
14
|
-
tag: string;
|
|
15
14
|
multiple: boolean;
|
|
15
|
+
tag: string;
|
|
16
16
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
17
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
18
18
|
declare const _default: typeof __VLS_export;
|
|
@@ -27,8 +27,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, _Fi
|
|
|
27
27
|
error: unknown;
|
|
28
28
|
}) => any) | undefined;
|
|
29
29
|
}>, {
|
|
30
|
-
open: boolean;
|
|
31
30
|
modelValue: string;
|
|
31
|
+
open: boolean;
|
|
32
32
|
sidebarWidth: string | number | false;
|
|
33
33
|
sheetMaxRows: number;
|
|
34
34
|
downloadable: boolean;
|
|
@@ -33,9 +33,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, _Inpu
|
|
|
33
33
|
"onNative:input"?: ((ev: Event) => any) | undefined;
|
|
34
34
|
}>, {
|
|
35
35
|
disabled: boolean;
|
|
36
|
+
readonly: boolean;
|
|
36
37
|
placeholder: string;
|
|
37
38
|
clearable: boolean;
|
|
38
|
-
readonly: boolean;
|
|
39
39
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
40
40
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
41
41
|
declare const _default: typeof __VLS_export;
|
|
@@ -303,12 +303,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
303
303
|
return openBlock(), createBlock(unref(_sfc_main$6), {
|
|
304
304
|
key: option[__props.valueKey],
|
|
305
305
|
closable: !unref(disabled),
|
|
306
|
+
size: "small",
|
|
306
307
|
onClose: ($event) => handleClose(option)
|
|
307
308
|
}, {
|
|
308
309
|
default: withCtx(() => [createTextVNode(toDisplayString(option[__props.labelKey]), 1)]),
|
|
309
310
|
_: 2
|
|
310
311
|
}, 1032, ["closable", "onClose"]);
|
|
311
|
-
}), 128)), restTag.value ? (openBlock(), createBlock(unref(_sfc_main$6), {
|
|
312
|
+
}), 128)), restTag.value ? (openBlock(), createBlock(unref(_sfc_main$6), {
|
|
313
|
+
key: 0,
|
|
314
|
+
size: "small"
|
|
315
|
+
}, {
|
|
312
316
|
default: withCtx(() => [createTextVNode(toDisplayString(restTag.value) + "+ ", 1)]),
|
|
313
317
|
_: 1
|
|
314
318
|
})) : createCommentVNode("v-if", true)], 2)) : createCommentVNode("v-if", true),
|
|
@@ -436,7 +440,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
436
440
|
key: 1,
|
|
437
441
|
class: normalizeClass([unref(cls).m(unref(size)), unref(cls).e("readonly-tags")])
|
|
438
442
|
}, [createElementVNode("div", { class: normalizeClass(unref(cls).e("tags")) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(tags.value, (option) => {
|
|
439
|
-
return openBlock(), createBlock(unref(_sfc_main$6), {
|
|
443
|
+
return openBlock(), createBlock(unref(_sfc_main$6), {
|
|
444
|
+
key: option[__props.valueKey],
|
|
445
|
+
size: "small"
|
|
446
|
+
}, {
|
|
440
447
|
default: withCtx(() => [createTextVNode(toDisplayString(option[__props.labelKey]), 1)]),
|
|
441
448
|
_: 2
|
|
442
449
|
}, 1024);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-select.js","names":[],"sources":["../../../src/components/multi-select/multi-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n :disabled=\"disabled\"\n @update:visible=\"handleDropdownVisible\"\n >\n <!-- 触发 -->\n <template #trigger>\n <span :class=\"cls.e('placeholder')\" v-show=\"!model?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"model?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"option of tags\"\n :key=\"option[valueKey]\"\n :closable=\"!disabled\"\n @close=\"handleClose(option)\"\n >\n {{ option[labelKey] }}\n </u-tag>\n <u-tag v-if=\"restTag\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && model?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n\n <!-- 下拉内容 -->\n <template #content>\n <!-- 多选栏 -->\n <div :class=\"cls.e('content-header')\">\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n :disabled=\"max !== undefined\"\n >\n 全选\n </u-checkbox>\n\n <span> 已选 {{ model?.length }}/{{ max ?? options?.length ?? 0 }} </span>\n </div>\n\n <!-- 过滤器 -->\n <div v-if=\"filterable\" :class=\"cls.e('content-filter')\">\n <u-input\n placeholder=\"输入关键字进行过滤\"\n v-model=\"queryString\"\n @keydown.enter.prevent=\"handleCreateByEnter\"\n >\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <!-- 多选列表 -->\n <!--\n 虚拟化启用时内容容器 height 由 useVirtualizer 命令式写入;\n 模板不再绑定 totalSize,避免尺寸变化引起重渲染。\n -->\n <u-scroll\n tag=\"ul\"\n :class=\"[cls.e('options')]\"\n ref=\"scrollRef\"\n v-if=\"options.length\"\n :content-class=\"[cls.e('options-wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <u-multi-select-option\n v-for=\"{ option, index, key, label, offset } of virtualOptions\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"key\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ label }}\n </slot>\n </u-multi-select-option>\n </template>\n\n <template v-else>\n <u-multi-select-option\n v-for=\"(option, index) of options\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"chainObj(option).get(valueKey)\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ chainObj(option).get(labelKey) }}\n </slot>\n </u-multi-select-option>\n </template>\n </u-scroll>\n\n <div v-else :class=\"cls.e('empty')\">\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o as chainObj } from '@cat-kit/core'\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, shallowReactive, watch, provide } from 'vue'\n\nimport type {\n MultiSelectEmits,\n MultiSelectProps,\n ScrollExposed,\n DropdownExposed\n} from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UScroll } from '../scroll'\nimport { useOptions } from '../select/use-options'\nimport { UTag } from '../tag'\nimport { MultiSelectDIKey } from './di'\nimport UMultiSelectOption from './multi-select-option.vue'\n\ndefineOptions({ name: 'MultiSelect' })\n\nconst props = withDefaults(defineProps<MultiSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n clearable: true,\n visibilityLimit: 3,\n disabled: undefined,\n readonly: undefined,\n minWidth: '220px'\n})\n\nconst emit = defineEmits<MultiSelectEmits>()\n\nconst cls = bem('multi-select')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst hovered = shallowRef(false)\n\nconst { options: rawOptions, queryString, allOptions: rawAllOptions } = useOptions({ props })\n\nconst createdOptions = shallowRef<Record<string, any>[]>([])\n\nconst options = computed(() => {\n const base = rawOptions.value\n if (!props.creatable || !createdOptions.value.length) return base\n\n const { valueKey } = props\n const createdValues = new Set(createdOptions.value.map((o) => chainObj(o).get(valueKey)))\n const deduped = base.filter((o) => !(o.__isTemp && createdValues.has(chainObj(o).get(valueKey))))\n const dedupedValues = new Set(deduped.map((o) => chainObj(o).get(valueKey)))\n const toAdd = createdOptions.value.filter((o) => !dedupedValues.has(chainObj(o).get(valueKey)))\n return [...toAdd, ...deduped]\n})\n\nconst allOptions = computed(() => {\n if (!props.creatable || !createdOptions.value.length) return rawAllOptions.value\n return [...createdOptions.value, ...rawAllOptions.value]\n})\n\nconst virtualEnabled = computed(() => options.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n estimateSize: () => 40,\n count: computed(() => options.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null)\n})\n\nconst virtualOptions = computed(() => {\n const { valueKey, labelKey } = props\n const _options = options.value\n return items.value.map((v) => {\n const option = _options[v.index]!\n const val = chainObj(option).get(valueKey)\n return {\n option,\n index: v.index,\n val,\n key: v.index,\n offset: v.start,\n label: chainObj(option).get(labelKey)\n }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nconst filterable = computed(() => {\n return props.filterable || props.creatable || typeof props.options === 'function'\n})\n\nconst model = defineModel<Array<string | number>>()\n\nconst checkedSet = shallowReactive<Set<Record<string, any>>>(new Set())\nconst allChecked = computed(() => {\n return checkedSet.size === options.value.length\n})\nconst indeterminate = computed(() => {\n return checkedSet.size > 0 && !allChecked.value\n})\n\nconst optionsMap = computed(() => {\n const { valueKey } = props\n return new Map<string | number, Record<string, any>>(\n allOptions.value.map((option) => [option[valueKey], option])\n )\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet internalChange = false\n\nwatch(\n [model, optionsMap],\n ([model, optionsMap]) => {\n if (internalChange) {\n internalChange = false\n return\n }\n checkedSet.clear()\n if (optionsMap.size && model?.length) {\n model.forEach((v) => {\n const option = optionsMap.get(v)\n option && checkedSet.add(option)\n })\n }\n },\n { immediate: true }\n)\n\nconst emitChange = () => {\n emit('change', Array.from(checkedSet))\n}\n\nconst tags = computed(() => {\n let tags: Record<string, any>[] = []\n let { visibilityLimit } = props\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n\n // 禁用时,显示全部\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n\n model.value?.slice(0, visibilityLimit).forEach((k) => {\n const option = optionsMap.value.get(k)\n option && tags.push(option)\n })\n\n return tags\n})\n\nconst restTag = computed(() => {\n return (model.value?.length ?? 0) - tags.value.length\n})\n\nconst handleDropdownVisible = (visible: boolean) => {\n if (!visible) {\n queryString.value = ''\n }\n}\n\nconst handleCheck = (option: Record<string, any>, checked: boolean) => {\n const { valueKey, labelKey } = props\n if (checked) {\n if (option.__isTemp && props.creatable) {\n const created: Record<string, any> = {\n [labelKey]: chainObj(option).get(labelKey),\n [valueKey]: chainObj(option).get(valueKey)\n }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(created).get(valueKey)]\n queryString.value = ''\n } else if (!checkedSet.has(option)) {\n checkedSet.add(option)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(option).get(valueKey)]\n }\n } else {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 全选 */\nconst handleCheckAll = (checked: boolean) => {\n const { valueKey } = props\n if (checked) {\n options.value.forEach((option) => {\n if (!option.__isTemp) checkedSet.add(option)\n })\n internalChange = true\n model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey))\n } else {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 清除选项 */\nconst handleClear = () => {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n emit('change', [])\n}\n\nconst handleClose = (option: Record<string, any>) => {\n checkedSet.delete(option)\n const val = chainObj(option).get(props.valueKey)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n emitChange()\n}\n\nconst removeCreatedOption = (option: Record<string, any>) => {\n if (!props.creatable || !createdOptions.value.length) return\n const { valueKey } = props\n const val = chainObj(option).get(valueKey)\n createdOptions.value = createdOptions.value.filter((o) => chainObj(o).get(valueKey) !== val)\n}\n\nconst handleCreateByEnter = () => {\n if (!props.creatable) return\n const qs = queryString.value?.trim()\n if (!qs) return\n\n const { labelKey, valueKey } = props\n\n const existingCreated = createdOptions.value.find((o) => chainObj(o).get(valueKey) === qs)\n if (existingCreated) {\n if (!checkedSet.has(existingCreated)) {\n checkedSet.add(existingCreated)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey)]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const exactMatch = rawOptions.value.find((o) => !o.__isTemp && chainObj(o).get(labelKey) === qs)\n if (exactMatch) {\n if (!checkedSet.has(exactMatch)) {\n checkedSet.add(exactMatch)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey)]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const created: Record<string, any> = { [labelKey]: qs, [valueKey]: qs }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), qs]\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\nconst isDisabled = (option: Record<string, any>) => {\n const { max } = props\n return max !== undefined && checkedSet.size >= max && !checkedSet.has(option)\n}\n\nconst optionClass = cls.e('option')\nconst rippleClass = cls.e('ripple')\nconst checkboxClass = cls.e('checkbox')\n\nprovide(MultiSelectDIKey, { optionClass, rippleClass, checkboxClass })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"multi-select.js","names":[],"sources":["../../../src/components/multi-select/multi-select.vue"],"sourcesContent":["<template>\n <u-dropdown\n v-if=\"!readonly\"\n trigger=\"click\"\n ref=\"dropdownRef\"\n :class=\"[cls.b, cls.m(size), bem.is('disabled', disabled)]\"\n :content-class=\"[cls.e('panel'), cls.em('panel', size), contentClass]\"\n :content-style=\"contentStyle\"\n :min-width=\"minWidth\"\n :width=\"width\"\n @mouseenter=\"hovered = true\"\n @mouseleave=\"hovered = false\"\n :disabled=\"disabled\"\n @update:visible=\"handleDropdownVisible\"\n >\n <!-- 触发 -->\n <template #trigger>\n <span :class=\"cls.e('placeholder')\" v-show=\"!model?.length\">\n {{ placeholder }}\n </span>\n\n <div v-if=\"model?.length\" :class=\"cls.e('tags')\">\n <u-tag\n v-for=\"option of tags\"\n :key=\"option[valueKey]\"\n :closable=\"!disabled\"\n size=\"small\"\n @close=\"handleClose(option)\"\n >\n {{ option[labelKey] }}\n </u-tag>\n <u-tag v-if=\"restTag\" size=\"small\"> {{ restTag }}+ </u-tag>\n </div>\n\n <transition name=\"zoom-in\" mode=\"out-in\">\n <u-icon\n v-if=\"clearable && model?.length && hovered && !disabled\"\n :class=\"cls.e('clear')\"\n @click.stop=\"handleClear\"\n >\n <Close />\n </u-icon>\n\n <u-icon :class=\"cls.e('arrow')\" v-else><ArrowDown /></u-icon>\n </transition>\n </template>\n\n <!-- 下拉内容 -->\n <template #content>\n <!-- 多选栏 -->\n <div :class=\"cls.e('content-header')\">\n <u-checkbox\n :model-value=\"allChecked\"\n :indeterminate=\"indeterminate\"\n @update:model-value=\"handleCheckAll\"\n :disabled=\"max !== undefined\"\n >\n 全选\n </u-checkbox>\n\n <span> 已选 {{ model?.length }}/{{ max ?? options?.length ?? 0 }} </span>\n </div>\n\n <!-- 过滤器 -->\n <div v-if=\"filterable\" :class=\"cls.e('content-filter')\">\n <u-input\n placeholder=\"输入关键字进行过滤\"\n v-model=\"queryString\"\n @keydown.enter.prevent=\"handleCreateByEnter\"\n >\n <template #suffix>\n <u-icon><Search /></u-icon>\n </template>\n </u-input>\n </div>\n\n <!-- 多选列表 -->\n <!--\n 虚拟化启用时内容容器 height 由 useVirtualizer 命令式写入;\n 模板不再绑定 totalSize,避免尺寸变化引起重渲染。\n -->\n <u-scroll\n tag=\"ul\"\n :class=\"[cls.e('options')]\"\n ref=\"scrollRef\"\n v-if=\"options.length\"\n :content-class=\"[cls.e('options-wrap'), bem.is('virtual', virtualEnabled)]\"\n >\n <template v-if=\"virtualEnabled\">\n <u-multi-select-option\n v-for=\"{ option, index, key, label, offset } of virtualOptions\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"key\"\n :style=\"{ transform: `translateY(${offset}px)` }\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n :index=\"index\"\n :measure-element=\"measureElement\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ label }}\n </slot>\n </u-multi-select-option>\n </template>\n\n <template v-else>\n <u-multi-select-option\n v-for=\"(option, index) of options\"\n :option=\"option\"\n :disabled=\"isDisabled(option)\"\n :key=\"chainObj(option).get(valueKey)\"\n @check=\"handleCheck(option, $event)\"\n :checked=\"checkedSet.has(option)\"\n >\n <slot v-bind=\"{ option, index }\">\n {{ chainObj(option).get(labelKey) }}\n </slot>\n </u-multi-select-option>\n </template>\n </u-scroll>\n\n <div v-else :class=\"cls.e('empty')\">\n <UEmpty />\n </div>\n </template>\n </u-dropdown>\n\n <div v-else-if=\"model?.length\" :class=\"[cls.m(size), cls.e('readonly-tags')]\">\n <div :class=\"cls.e('tags')\">\n <u-tag v-for=\"option of tags\" :key=\"option[valueKey]\" size=\"small\">\n {{ option[labelKey] }}\n </u-tag>\n </div>\n </div>\n\n <template v-else>\n {{ FORM_EMPTY_CONTENT }}\n </template>\n</template>\n\n<script lang=\"ts\" setup>\nimport { o as chainObj } from '@cat-kit/core'\nimport { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'\nimport { ArrowDown, Close, Search } from '@veltra/icons/normal'\nimport { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'\nimport { injectFormContext } from '@veltra/utils'\nimport { computed, shallowRef, shallowReactive, watch, provide } from 'vue'\n\nimport type {\n MultiSelectEmits,\n MultiSelectProps,\n ScrollExposed,\n DropdownExposed\n} from '../../types'\nimport { UCheckbox } from '../checkbox'\nimport { UDropdown } from '../dropdown'\nimport { UEmpty } from '../empty'\nimport { UIcon } from '../icon'\nimport { UInput } from '../input'\nimport { UScroll } from '../scroll'\nimport { useOptions } from '../select/use-options'\nimport { UTag } from '../tag'\nimport { MultiSelectDIKey } from './di'\nimport UMultiSelectOption from './multi-select-option.vue'\n\ndefineOptions({ name: 'MultiSelect' })\n\nconst props = withDefaults(defineProps<MultiSelectProps>(), {\n labelKey: 'label',\n valueKey: 'value',\n placeholder: '请选择',\n clearable: true,\n visibilityLimit: 3,\n disabled: undefined,\n readonly: undefined,\n minWidth: '220px'\n})\n\nconst emit = defineEmits<MultiSelectEmits>()\n\nconst cls = bem('multi-select')\n\nconst { formProps } = injectFormContext()\n\nconst { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {\n size: 'default',\n disabled: false,\n readonly: false\n})\n\nconst scrollRef = shallowRef<ScrollExposed>()\n\nconst hovered = shallowRef(false)\n\nconst { options: rawOptions, queryString, allOptions: rawAllOptions } = useOptions({ props })\n\nconst createdOptions = shallowRef<Record<string, any>[]>([])\n\nconst options = computed(() => {\n const base = rawOptions.value\n if (!props.creatable || !createdOptions.value.length) return base\n\n const { valueKey } = props\n const createdValues = new Set(createdOptions.value.map((o) => chainObj(o).get(valueKey)))\n const deduped = base.filter((o) => !(o.__isTemp && createdValues.has(chainObj(o).get(valueKey))))\n const dedupedValues = new Set(deduped.map((o) => chainObj(o).get(valueKey)))\n const toAdd = createdOptions.value.filter((o) => !dedupedValues.has(chainObj(o).get(valueKey)))\n return [...toAdd, ...deduped]\n})\n\nconst allOptions = computed(() => {\n if (!props.creatable || !createdOptions.value.length) return rawAllOptions.value\n return [...createdOptions.value, ...rawAllOptions.value]\n})\n\nconst virtualEnabled = computed(() => options.value.length > 80)\n\nconst { virtualizer, items } = useVirtualizer({\n estimateSize: () => 40,\n count: computed(() => options.value.length),\n scrollEl: () => scrollRef.value?.containerRef ?? null,\n contentEl: () => (virtualEnabled.value ? (scrollRef.value?.contentRef ?? null) : null)\n})\n\nconst virtualOptions = computed(() => {\n const { valueKey, labelKey } = props\n const _options = options.value\n return items.value.map((v) => {\n const option = _options[v.index]!\n const val = chainObj(option).get(valueKey)\n return {\n option,\n index: v.index,\n val,\n key: v.index,\n offset: v.start,\n label: chainObj(option).get(labelKey)\n }\n })\n})\n\nconst measureElement: (index: number, el: Element | null) => void = (index, el) =>\n virtualizer.measureElement(index, el)\n\nconst filterable = computed(() => {\n return props.filterable || props.creatable || typeof props.options === 'function'\n})\n\nconst model = defineModel<Array<string | number>>()\n\nconst checkedSet = shallowReactive<Set<Record<string, any>>>(new Set())\nconst allChecked = computed(() => {\n return checkedSet.size === options.value.length\n})\nconst indeterminate = computed(() => {\n return checkedSet.size > 0 && !allChecked.value\n})\n\nconst optionsMap = computed(() => {\n const { valueKey } = props\n return new Map<string | number, Record<string, any>>(\n allOptions.value.map((option) => [option[valueKey], option])\n )\n})\n\nconst dropdownRef = shallowRef<DropdownExposed>()\n\nlet internalChange = false\n\nwatch(\n [model, optionsMap],\n ([model, optionsMap]) => {\n if (internalChange) {\n internalChange = false\n return\n }\n checkedSet.clear()\n if (optionsMap.size && model?.length) {\n model.forEach((v) => {\n const option = optionsMap.get(v)\n option && checkedSet.add(option)\n })\n }\n },\n { immediate: true }\n)\n\nconst emitChange = () => {\n emit('change', Array.from(checkedSet))\n}\n\nconst tags = computed(() => {\n let tags: Record<string, any>[] = []\n let { visibilityLimit } = props\n if (visibilityLimit < 0) {\n visibilityLimit = 0\n }\n\n // 禁用时,显示全部\n if (disabled.value || readonly.value) {\n visibilityLimit = model.value?.length ?? 0\n }\n\n model.value?.slice(0, visibilityLimit).forEach((k) => {\n const option = optionsMap.value.get(k)\n option && tags.push(option)\n })\n\n return tags\n})\n\nconst restTag = computed(() => {\n return (model.value?.length ?? 0) - tags.value.length\n})\n\nconst handleDropdownVisible = (visible: boolean) => {\n if (!visible) {\n queryString.value = ''\n }\n}\n\nconst handleCheck = (option: Record<string, any>, checked: boolean) => {\n const { valueKey, labelKey } = props\n if (checked) {\n if (option.__isTemp && props.creatable) {\n const created: Record<string, any> = {\n [labelKey]: chainObj(option).get(labelKey),\n [valueKey]: chainObj(option).get(valueKey)\n }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(created).get(valueKey)!]\n queryString.value = ''\n } else if (!checkedSet.has(option)) {\n checkedSet.add(option)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(option).get(valueKey)!]\n }\n } else {\n checkedSet.delete(option)\n const val = chainObj(option).get(valueKey)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 全选 */\nconst handleCheckAll = (checked: boolean) => {\n const { valueKey } = props\n if (checked) {\n options.value.forEach((option) => {\n if (!option.__isTemp) checkedSet.add(option)\n })\n internalChange = true\n model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey)!)\n } else {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n }\n\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\n/** 清除选项 */\nconst handleClear = () => {\n checkedSet.clear()\n internalChange = true\n model.value = []\n if (props.creatable) {\n createdOptions.value = []\n }\n emit('change', [])\n}\n\nconst handleClose = (option: Record<string, any>) => {\n checkedSet.delete(option)\n const val = chainObj(option).get(props.valueKey)\n internalChange = true\n model.value = (model.value ?? []).filter((v) => v !== val)\n removeCreatedOption(option)\n emitChange()\n}\n\nconst removeCreatedOption = (option: Record<string, any>) => {\n if (!props.creatable || !createdOptions.value.length) return\n const { valueKey } = props\n const val = chainObj(option).get(valueKey)\n createdOptions.value = createdOptions.value.filter((o) => chainObj(o).get(valueKey) !== val)\n}\n\nconst handleCreateByEnter = () => {\n if (!props.creatable) return\n const qs = queryString.value?.trim()\n if (!qs) return\n\n const { labelKey, valueKey } = props\n\n const existingCreated = createdOptions.value.find((o) => chainObj(o).get(valueKey) === qs)\n if (existingCreated) {\n if (!checkedSet.has(existingCreated)) {\n checkedSet.add(existingCreated)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const exactMatch = rawOptions.value.find((o) => !o.__isTemp && chainObj(o).get(labelKey) === qs)\n if (exactMatch) {\n if (!checkedSet.has(exactMatch)) {\n checkedSet.add(exactMatch)\n internalChange = true\n model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey)!]\n }\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n return\n }\n\n const created: Record<string, any> = { [labelKey]: qs, [valueKey]: qs }\n createdOptions.value = [...createdOptions.value, created]\n checkedSet.add(created)\n internalChange = true\n model.value = [...(model.value ?? []), qs]\n queryString.value = ''\n emitChange()\n dropdownRef.value?.updateDropdown()\n}\n\nconst isDisabled = (option: Record<string, any>) => {\n const { max } = props\n return max !== undefined && checkedSet.size >= max && !checkedSet.has(option)\n}\n\nconst optionClass = cls.e('option')\nconst rippleClass = cls.e('ripple')\nconst checkboxClass = cls.e('checkbox')\n\nprovide(MultiSelectDIKey, { optionClass, rippleClass, checkboxClass })\n</script>\n"],"mappings":"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"}
|
|
@@ -26,13 +26,13 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
26
26
|
"onUpdate:modelValue"?: ((value: any[]) => any) | undefined;
|
|
27
27
|
onChange?: ((options: Record<string, any>[]) => any) | undefined;
|
|
28
28
|
}>, {
|
|
29
|
-
minWidth: string;
|
|
30
29
|
disabled: boolean;
|
|
30
|
+
readonly: boolean;
|
|
31
|
+
minWidth: string;
|
|
31
32
|
labelKey: string;
|
|
32
33
|
valueKey: string;
|
|
33
34
|
placeholder: string;
|
|
34
35
|
clearable: boolean;
|
|
35
|
-
readonly: boolean;
|
|
36
36
|
visibilityLimit: number;
|
|
37
37
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
38
38
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -21,15 +21,15 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
21
21
|
onClear?: (() => any) | undefined;
|
|
22
22
|
onChange?: ((checked: Record<string, any>[]) => any) | undefined;
|
|
23
23
|
}>, {
|
|
24
|
-
minWidth: string;
|
|
25
24
|
disabled: boolean;
|
|
25
|
+
readonly: boolean;
|
|
26
|
+
minWidth: string;
|
|
26
27
|
expandAll: boolean;
|
|
27
28
|
labelKey: string;
|
|
28
29
|
valueKey: string;
|
|
29
30
|
placeholder: string;
|
|
30
31
|
clearable: boolean;
|
|
31
32
|
filterable: boolean;
|
|
32
|
-
readonly: boolean;
|
|
33
33
|
visibilityLimit: number;
|
|
34
34
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
35
35
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -21,9 +21,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
21
21
|
onChange?: ((value?: number | undefined) => any) | undefined;
|
|
22
22
|
}>, {
|
|
23
23
|
disabled: boolean;
|
|
24
|
+
readonly: boolean;
|
|
24
25
|
placeholder: string;
|
|
25
26
|
clearable: boolean;
|
|
26
|
-
readonly: boolean;
|
|
27
27
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
28
28
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
29
29
|
declare const _default: typeof __VLS_export;
|
|
@@ -23,8 +23,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
23
23
|
"onUpdate:end"?: ((value: number | undefined) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
disabled: boolean;
|
|
26
|
-
clearable: boolean;
|
|
27
26
|
readonly: boolean;
|
|
27
|
+
clearable: boolean;
|
|
28
28
|
startPlaceholder: string;
|
|
29
29
|
endPlaceholder: string;
|
|
30
30
|
separator: string;
|
|
@@ -14,8 +14,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
14
14
|
"onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
|
|
15
15
|
}>, {
|
|
16
16
|
disabled: boolean;
|
|
17
|
-
clearable: boolean;
|
|
18
17
|
readonly: boolean;
|
|
18
|
+
clearable: boolean;
|
|
19
19
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
20
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
21
21
|
declare const _default: typeof __VLS_export;
|
|
@@ -13,11 +13,11 @@ type __VLS_Slots = {} & {
|
|
|
13
13
|
default?: (props: typeof __VLS_3) => any;
|
|
14
14
|
};
|
|
15
15
|
declare const __VLS_base: import("vue").DefineComponent<ProgressNodesProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
16
|
-
click: (node: Record<string, any>, index: number) => any;
|
|
17
16
|
"update:modelValue": (value: string | number) => any;
|
|
17
|
+
click: (node: Record<string, any>, index: number) => any;
|
|
18
18
|
}, string, import("vue").PublicProps, Readonly<ProgressNodesProps> & Readonly<{
|
|
19
|
-
onClick?: ((node: Record<string, any>, index: number) => any) | undefined;
|
|
20
19
|
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
20
|
+
onClick?: ((node: Record<string, any>, index: number) => any) | undefined;
|
|
21
21
|
}>, {
|
|
22
22
|
labelKey: string;
|
|
23
23
|
valueKey: string;
|
|
@@ -15,9 +15,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
15
15
|
onChange?: ((item: Record<string, any>) => any) | undefined;
|
|
16
16
|
}>, {
|
|
17
17
|
disabled: boolean;
|
|
18
|
+
readonly: boolean;
|
|
18
19
|
labelKey: string;
|
|
19
20
|
valueKey: string;
|
|
20
|
-
readonly: boolean;
|
|
21
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
22
|
declare const _default: typeof __VLS_export;
|
|
23
23
|
//#endregion
|
|
@@ -11,8 +11,8 @@ declare const __VLS_export: import("vue").DefineComponent<RichTextEditorProps &
|
|
|
11
11
|
"onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
|
|
12
12
|
}>, {
|
|
13
13
|
disabled: boolean;
|
|
14
|
-
placeholder: string;
|
|
15
14
|
readonly: boolean;
|
|
15
|
+
placeholder: string;
|
|
16
16
|
format: RichTextFormat;
|
|
17
17
|
toolbar: ToolbarItem[];
|
|
18
18
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -25,11 +25,11 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
25
25
|
"onUpdate:label"?: ((label?: string | undefined) => any) | undefined;
|
|
26
26
|
}>, {
|
|
27
27
|
disabled: boolean;
|
|
28
|
+
readonly: boolean;
|
|
28
29
|
labelKey: string;
|
|
29
30
|
valueKey: string;
|
|
30
31
|
placeholder: string;
|
|
31
32
|
clearable: boolean;
|
|
32
|
-
readonly: boolean;
|
|
33
33
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
34
34
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
35
35
|
declare const _default: typeof __VLS_export;
|
|
@@ -12,8 +12,8 @@ declare const __VLS_base: import("vue").DefineComponent<StepsProps, {}, {}, {},
|
|
|
12
12
|
"onUpdate:current"?: ((value?: string | number | undefined) => any) | undefined;
|
|
13
13
|
"onItem-click"?: ((item: Record<string, any>, index: number) => any) | undefined;
|
|
14
14
|
}>, {
|
|
15
|
-
direction: "horizontal" | "vertical";
|
|
16
15
|
labelKey: string;
|
|
16
|
+
direction: "horizontal" | "vertical";
|
|
17
17
|
finishedStepType: import("@veltra/utils").ColorType;
|
|
18
18
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
19
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -37,6 +37,11 @@ declare class ColumnNode extends TreeNode<TableColumn, ColumnNode> {
|
|
|
37
37
|
get isFirstFixed(): boolean;
|
|
38
38
|
/** 是否是可调整宽度的列 */
|
|
39
39
|
get resizable(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* 是否在列配置上显式指定了 width,或经表头拖拽锁定。
|
|
42
|
+
* 此类列不参与剩余宽度的均分。
|
|
43
|
+
*/
|
|
44
|
+
explicitWidth: boolean;
|
|
40
45
|
style: Record<string, number>;
|
|
41
46
|
constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode);
|
|
42
47
|
}
|
|
@@ -74,9 +74,15 @@ var ColumnNode = class extends TreeNode {
|
|
|
74
74
|
get resizable() {
|
|
75
75
|
return this.data.resizable ?? true;
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* 是否在列配置上显式指定了 width,或经表头拖拽锁定。
|
|
79
|
+
* 此类列不参与剩余宽度的均分。
|
|
80
|
+
*/
|
|
81
|
+
explicitWidth;
|
|
77
82
|
style = reactive({});
|
|
78
83
|
constructor(val, index, depth, parent) {
|
|
79
84
|
super(isReactive(val) ? val : shallowReactive(val), index, depth, parent);
|
|
85
|
+
this.explicitWidth = val.width !== void 0;
|
|
80
86
|
}
|
|
81
87
|
};
|
|
82
88
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"col.js","names":[],"sources":["../../../../src/components/table/node/col.ts"],"sourcesContent":["import { TreeNode } from '@cat-kit/core'\nimport { isReactive, reactive, shallowReactive } from 'vue'\n\nimport type { TableColumn, TableColumnAlign } from '../../../types'\n\nexport class ColumnNode extends TreeNode<TableColumn, ColumnNode> {\n declare children?: ColumnNode[] | undefined\n declare parent?: ColumnNode\n /** 叶子节点数量 */\n leafs?: number\n\n nextNode: ColumnNode | null = null\n\n /** 列key */\n get key(): string {\n return this.data.key\n }\n set key(val) {\n this.data.key = val\n }\n /** 列名 */\n get name(): string {\n return this.data.name\n }\n set name(val) {\n this.data.name = val\n }\n\n /**\n * 列对齐方式\n * @default 'left'\n */\n get align(): TableColumnAlign {\n return this.data.align ?? 'left'\n }\n set align(val) {\n this.data.align = val\n }\n\n get headerAlign(): TableColumnAlign {\n return this.data.headerAlign ?? this.align\n }\n set headerAlign(val) {\n this.data.headerAlign = val\n }\n\n /** 宽度 */\n get width(): number | undefined {\n const { width } = this.data\n if (!width || (this.minWidth && width && width < this.minWidth)) {\n return this.minWidth\n }\n return width\n }\n set width(val) {\n if (this.minWidth && val && val < this.minWidth) {\n val = this.minWidth\n }\n this.data.width = val\n }\n /** 最小宽度 */\n get minWidth(): number | undefined {\n const minWidth = this.data.minWidth\n if (!minWidth && this.isLeaf) {\n return 100\n }\n return minWidth\n }\n set minWidth(val) {\n this.data.minWidth = val\n }\n\n /** 列固定方向 */\n get fixed(): 'left' | 'right' | undefined {\n if (this.depth > 0) return\n return this.data.fixed\n }\n set fixed(val) {\n this.data.fixed = val\n }\n\n /** 是否是左侧的最后一个固定列 */\n get isLastFixed(): boolean {\n return this.data.isLastFixed ?? false\n }\n\n /** 是否是右侧的第一个固定列 */\n get isFirstFixed(): boolean {\n return this.data.isFirstFixed ?? false\n }\n\n /** 是否是可调整宽度的列 */\n get resizable(): boolean {\n return this.data.resizable ?? true\n }\n\n style: Record<string, number> = reactive({})\n\n constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {\n super(isReactive(val) ? val : shallowReactive(val), index, depth, parent)\n }\n}\n"],"mappings":";;;AAKA,IAAa,aAAb,cAAgC,SAAkC;;CAIhE;CAEA,WAA8B;;CAG9B,IAAI,MAAc;EAChB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,IAAI,KAAK;EACX,KAAK,KAAK,MAAM;CAClB;;CAEA,IAAI,OAAe;EACjB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,KAAK,KAAK;EACZ,KAAK,KAAK,OAAO;CACnB;;;;;CAMA,IAAI,QAA0B;EAC5B,OAAO,KAAK,KAAK,SAAS;CAC5B;CACA,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;CACpB;CAEA,IAAI,cAAgC;EAClC,OAAO,KAAK,KAAK,eAAe,KAAK;CACvC;CACA,IAAI,YAAY,KAAK;EACnB,KAAK,KAAK,cAAc;CAC1B;;CAGA,IAAI,QAA4B;EAC9B,MAAM,EAAE,UAAU,KAAK;EACvB,IAAI,CAAC,SAAU,KAAK,YAAY,SAAS,QAAQ,KAAK,UACpD,OAAO,KAAK;EAEd,OAAO;CACT;CACA,IAAI,MAAM,KAAK;EACb,IAAI,KAAK,YAAY,OAAO,MAAM,KAAK,UACrC,MAAM,KAAK;EAEb,KAAK,KAAK,QAAQ;CACpB;;CAEA,IAAI,WAA+B;EACjC,MAAM,WAAW,KAAK,KAAK;EAC3B,IAAI,CAAC,YAAY,KAAK,QACpB,OAAO;EAET,OAAO;CACT;CACA,IAAI,SAAS,KAAK;EAChB,KAAK,KAAK,WAAW;CACvB;;CAGA,IAAI,QAAsC;EACxC,IAAI,KAAK,QAAQ,GAAG;EACpB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;CACpB;;CAGA,IAAI,cAAuB;EACzB,OAAO,KAAK,KAAK,eAAe;CAClC;;CAGA,IAAI,eAAwB;EAC1B,OAAO,KAAK,KAAK,gBAAgB;CACnC;;CAGA,IAAI,YAAqB;EACvB,OAAO,KAAK,KAAK,aAAa;CAChC;CAEA,QAAgC,SAAS,CAAC,CAAC;CAE3C,YAAY,KAAkB,OAAe,OAAe,QAAqB;EAC/E,MAAM,WAAW,GAAG,IAAI,MAAM,gBAAgB,GAAG,GAAG,OAAO,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"col.js","names":[],"sources":["../../../../src/components/table/node/col.ts"],"sourcesContent":["import { TreeNode } from '@cat-kit/core'\nimport { isReactive, reactive, shallowReactive } from 'vue'\n\nimport type { TableColumn, TableColumnAlign } from '../../../types'\n\nexport class ColumnNode extends TreeNode<TableColumn, ColumnNode> {\n declare children?: ColumnNode[] | undefined\n declare parent?: ColumnNode\n /** 叶子节点数量 */\n leafs?: number\n\n nextNode: ColumnNode | null = null\n\n /** 列key */\n get key(): string {\n return this.data.key\n }\n set key(val) {\n this.data.key = val\n }\n /** 列名 */\n get name(): string {\n return this.data.name\n }\n set name(val) {\n this.data.name = val\n }\n\n /**\n * 列对齐方式\n * @default 'left'\n */\n get align(): TableColumnAlign {\n return this.data.align ?? 'left'\n }\n set align(val) {\n this.data.align = val\n }\n\n get headerAlign(): TableColumnAlign {\n return this.data.headerAlign ?? this.align\n }\n set headerAlign(val) {\n this.data.headerAlign = val\n }\n\n /** 宽度 */\n get width(): number | undefined {\n const { width } = this.data\n if (!width || (this.minWidth && width && width < this.minWidth)) {\n return this.minWidth\n }\n return width\n }\n set width(val) {\n if (this.minWidth && val && val < this.minWidth) {\n val = this.minWidth\n }\n this.data.width = val\n }\n /** 最小宽度 */\n get minWidth(): number | undefined {\n const minWidth = this.data.minWidth\n if (!minWidth && this.isLeaf) {\n return 100\n }\n return minWidth\n }\n set minWidth(val) {\n this.data.minWidth = val\n }\n\n /** 列固定方向 */\n get fixed(): 'left' | 'right' | undefined {\n if (this.depth > 0) return\n return this.data.fixed\n }\n set fixed(val) {\n this.data.fixed = val\n }\n\n /** 是否是左侧的最后一个固定列 */\n get isLastFixed(): boolean {\n return this.data.isLastFixed ?? false\n }\n\n /** 是否是右侧的第一个固定列 */\n get isFirstFixed(): boolean {\n return this.data.isFirstFixed ?? false\n }\n\n /** 是否是可调整宽度的列 */\n get resizable(): boolean {\n return this.data.resizable ?? true\n }\n\n /**\n * 是否在列配置上显式指定了 width,或经表头拖拽锁定。\n * 此类列不参与剩余宽度的均分。\n */\n explicitWidth: boolean\n\n style: Record<string, number> = reactive({})\n\n constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {\n super(isReactive(val) ? val : shallowReactive(val), index, depth, parent)\n this.explicitWidth = val.width !== undefined\n }\n}\n"],"mappings":";;;AAKA,IAAa,aAAb,cAAgC,SAAkC;;CAIhE;CAEA,WAA8B;;CAG9B,IAAI,MAAc;EAChB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,IAAI,KAAK;EACX,KAAK,KAAK,MAAM;CAClB;;CAEA,IAAI,OAAe;EACjB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,KAAK,KAAK;EACZ,KAAK,KAAK,OAAO;CACnB;;;;;CAMA,IAAI,QAA0B;EAC5B,OAAO,KAAK,KAAK,SAAS;CAC5B;CACA,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;CACpB;CAEA,IAAI,cAAgC;EAClC,OAAO,KAAK,KAAK,eAAe,KAAK;CACvC;CACA,IAAI,YAAY,KAAK;EACnB,KAAK,KAAK,cAAc;CAC1B;;CAGA,IAAI,QAA4B;EAC9B,MAAM,EAAE,UAAU,KAAK;EACvB,IAAI,CAAC,SAAU,KAAK,YAAY,SAAS,QAAQ,KAAK,UACpD,OAAO,KAAK;EAEd,OAAO;CACT;CACA,IAAI,MAAM,KAAK;EACb,IAAI,KAAK,YAAY,OAAO,MAAM,KAAK,UACrC,MAAM,KAAK;EAEb,KAAK,KAAK,QAAQ;CACpB;;CAEA,IAAI,WAA+B;EACjC,MAAM,WAAW,KAAK,KAAK;EAC3B,IAAI,CAAC,YAAY,KAAK,QACpB,OAAO;EAET,OAAO;CACT;CACA,IAAI,SAAS,KAAK;EAChB,KAAK,KAAK,WAAW;CACvB;;CAGA,IAAI,QAAsC;EACxC,IAAI,KAAK,QAAQ,GAAG;EACpB,OAAO,KAAK,KAAK;CACnB;CACA,IAAI,MAAM,KAAK;EACb,KAAK,KAAK,QAAQ;CACpB;;CAGA,IAAI,cAAuB;EACzB,OAAO,KAAK,KAAK,eAAe;CAClC;;CAGA,IAAI,eAAwB;EAC1B,OAAO,KAAK,KAAK,gBAAgB;CACnC;;CAGA,IAAI,YAAqB;EACvB,OAAO,KAAK,KAAK,aAAa;CAChC;;;;;CAMA;CAEA,QAAgC,SAAS,CAAC,CAAC;CAE3C,YAAY,KAAkB,OAAe,OAAe,QAAqB;EAC/E,MAAM,WAAW,GAAG,IAAI,MAAM,gBAAgB,GAAG,GAAG,OAAO,OAAO,MAAM;EACxE,KAAK,gBAAgB,IAAI,UAAU,KAAA;CACrC;AACF"}
|
|
@@ -70,7 +70,7 @@ const UTableRow = defineComponent({
|
|
|
70
70
|
const expandCtx = getCellCtx(row, _expandColumn);
|
|
71
71
|
const cellSpan = tableProps.mergeCell?.(expandCtx);
|
|
72
72
|
if (!cellSpan || cellSpan.colspan && cellSpan.rowspan) {
|
|
73
|
-
const marginLeft = tableProps.tree ?
|
|
73
|
+
const marginLeft = tableProps.tree ? row.depth * 14 : 0;
|
|
74
74
|
expandCell = createVNode(_sfc_main$2, mergeProps({
|
|
75
75
|
"cellClass": getCellClass(_expandColumn),
|
|
76
76
|
"left": _expandColumn.style.left,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-row.js","names":["ArrowRight","defineComponent","DefineComponent","inject","onUnmounted","JSX","TableRow","ITableRow","UButton","UIcon","TableDIKey","UTabelCell","_isSlot","s","Object","prototype","toString","call","_isVNode","ROW_MOD_CLASS","const","rowModCls","row","i","isCurrent","checked","expanded","UTableRow","index","name","props","type","required","Number","setup","cls","columnConfig","getColumnSlotsNode","toggleTreeRowExpand","getCellCtx","handleRowClick","handleCellClick","tableProps","measureElement","getCellClass","rowBaseCls","e","expandToggleCls","expandSpaceCls","measureRefCache","Map","el","getMeasureRef","ref","get","undefined","Element","set","clear","columns","expandColumn","_expandColumn","value","expandCell","expandCtx","cellSpan","mergeCell","colspan","rowspan","marginLeft","tree","depth","_createVNode","_mergeProps","style","left","right","uid","key","default","isLeaf","expandable","isExpandRow","stopPropagation","mod","rowCls","map","column","cellCtx","cellNode","UExpandTableRow","getExpandRowSlotsNode","leafColumns","cellCls","measureRef","node","rowData","data","length"],"sources":["../../../src/components/table/table-row.tsx"],"sourcesContent":["import { ArrowRight } from '@veltra/icons/normal'\nimport { defineComponent, type DefineComponent } from 'vue'\nimport { inject, onUnmounted } from 'vue'\nimport type { JSX } from 'vue/jsx-runtime'\n\nimport type { TableRow as ITableRow } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { TableDIKey } from './di'\nimport UTabelCell from './table-cell.vue'\n\n/**\n * A3:行修饰类组合静态查找表。\n *\n * 位模式:bit2 = isCurrent, bit1 = checked, bit0 = expanded。\n * 与 `bem.is('...')` 对于 `'current' | 'checked' | 'expanded'` 的输出完全等价,\n * 直接从 index 读字符串,消除每行渲染期间的字符串拼接和 3 次 bem.is 调用。\n *\n * 放在模块顶层使所有 TableRow 实例共享一份引用(不会随 setup 重建)。\n */\nconst ROW_MOD_CLASS: readonly string[] = [\n '',\n 'is-expanded',\n 'is-checked',\n 'is-checked is-expanded',\n 'is-current',\n 'is-current is-expanded',\n 'is-current is-checked',\n 'is-current is-checked is-expanded'\n] as const\n\nfunction rowModCls(row: ITableRow): string {\n const i = (row.isCurrent ? 4 : 0) | (row.checked ? 2 : 0) | (row.expanded ? 1 : 0)\n return ROW_MOD_CLASS[i]!\n}\n\nexport const UTableRow: DefineComponent<{ row: ITableRow; index: number }> = defineComponent({\n name: 'TableRow',\n\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n\n setup(props) {\n const {\n cls,\n columnConfig,\n getColumnSlotsNode,\n toggleTreeRowExpand,\n getCellCtx,\n handleRowClick,\n handleCellClick,\n tableProps,\n measureElement,\n getCellClass\n } = inject(TableDIKey)!\n\n // A1:把 cls.e('row') / cls.e('expand-toggle') 等静态字符串提升到 setup 一次性计算,\n // 避免每次 render 重新走 `cls.e` 拼接。\n const rowBaseCls = cls.e('row')\n const expandToggleCls = cls.e('expand-toggle')\n const expandSpaceCls = cls.e('expand-space')\n\n // A2:measureRef 按 index 缓存闭包。\n // 行虚拟化下,同一 TableRow 实例的 props.index 大多稳定,但在虚拟化重排或展开行切换时\n // 仍会发生变化;把 (index) → refFn 缓存起来,既保证引用稳定(利于 Vue 的 ref diff),\n // 又避免在未来可能的\"同实例跨 index 复用\"情形下重复分配闭包。\n const measureRefCache = new Map<number, (el: unknown) => void>()\n const getMeasureRef = (index: number): ((el: unknown) => void) => {\n let ref = measureRefCache.get(index)\n if (ref === undefined) {\n ref = (el: unknown) => {\n measureElement(index, el as Element | null)\n }\n measureRefCache.set(index, ref)\n }\n return ref\n }\n onUnmounted(() => {\n measureRefCache.clear()\n })\n\n const { columns, expandColumn } = columnConfig\n\n return () => {\n const { row } = props\n const _expandColumn = expandColumn.value\n\n let expandCell: JSX.Element | null = null\n if (_expandColumn) {\n const expandCtx = getCellCtx(row, _expandColumn)\n const cellSpan = tableProps.mergeCell?.(expandCtx)\n\n if (!cellSpan || (cellSpan.colspan && cellSpan.rowspan)) {\n const marginLeft = tableProps.tree ? (row.depth - 1) * 14 : 0\n expandCell = (\n <UTabelCell\n cellClass={getCellClass(_expandColumn)}\n left={_expandColumn.style.left}\n right={_expandColumn.style.right}\n key={row.uid + _expandColumn.key}\n {...tableProps.mergeCell?.(expandCtx)}\n >\n {!row.isLeaf || (tableProps.expandable && !row.isExpandRow) ? (\n <UButton\n text\n class={expandToggleCls}\n type='primary'\n size='small'\n circle\n onClick={(e) => {\n e.stopPropagation()\n toggleTreeRowExpand(row)\n }}\n style={`margin-left: ${marginLeft}px`}\n >\n <UIcon>\n <ArrowRight />\n </UIcon>\n </UButton>\n ) : (\n <i class={expandSpaceCls} style={`margin-left: ${marginLeft}px`}></i>\n )}\n\n {getColumnSlotsNode(expandCtx)}\n </UTabelCell>\n )\n }\n }\n\n // A3:行 class 由 base + 3-bit 组合查找产出,避免 Vue 的 class 数组归一化开销。\n const mod = rowModCls(row)\n const rowCls = mod ? rowBaseCls + ' ' + mod : rowBaseCls\n\n return (\n <tr\n class={rowCls}\n onClick={(e) => handleRowClick(row, e)}\n ref={getMeasureRef(props.index)}\n key={row.uid}\n >\n {expandCell}\n\n {columns.value.map((column) => {\n const cellCtx = getCellCtx(row, column)\n const cellSpan = tableProps.mergeCell?.(cellCtx)\n if (cellSpan && (!cellSpan.colspan || !cellSpan.rowspan)) {\n return null\n }\n\n const cellNode = getColumnSlotsNode(cellCtx)\n\n return (\n <UTabelCell\n cellClass={getCellClass(column)}\n left={column.style.left}\n right={column.style.right}\n key={row.uid + column.key}\n // @ts-ignore\n onClick={(e) => handleCellClick(row, column, e)}\n {...cellSpan}\n >\n {cellNode}\n </UTabelCell>\n )\n })}\n </tr>\n )\n }\n }\n})\n\nexport const UExpandTableRow = defineComponent({\n name: 'ExpandTableRow',\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n setup(props) {\n const { getExpandRowSlotsNode, cls, measureElement, columnConfig } = inject(TableDIKey)!\n const { leafColumns } = columnConfig\n\n const rowBaseCls = cls.e('row')\n const cellCls = cls.e('cell')\n\n const measureRef = (el: unknown) => {\n measureElement(props.index, el as Element | null)\n }\n\n return () => {\n const { row } = props\n const node = getExpandRowSlotsNode({\n row,\n index: row.index,\n columns: leafColumns.value,\n rowData: row.data\n })\n return (\n <tr class={rowBaseCls} ref={measureRef}>\n <td colspan={leafColumns.value.length} class={cellCls}>\n {node}\n </td>\n </tr>\n )\n }\n }\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-row.js","names":["ArrowRight","defineComponent","DefineComponent","inject","onUnmounted","JSX","TableRow","ITableRow","UButton","UIcon","TableDIKey","UTabelCell","_isSlot","s","Object","prototype","toString","call","_isVNode","ROW_MOD_CLASS","const","rowModCls","row","i","isCurrent","checked","expanded","UTableRow","index","name","props","type","required","Number","setup","cls","columnConfig","getColumnSlotsNode","toggleTreeRowExpand","getCellCtx","handleRowClick","handleCellClick","tableProps","measureElement","getCellClass","rowBaseCls","e","expandToggleCls","expandSpaceCls","measureRefCache","Map","el","getMeasureRef","ref","get","undefined","Element","set","clear","columns","expandColumn","_expandColumn","value","expandCell","expandCtx","cellSpan","mergeCell","colspan","rowspan","marginLeft","tree","depth","_createVNode","_mergeProps","style","left","right","uid","key","default","isLeaf","expandable","isExpandRow","stopPropagation","mod","rowCls","map","column","cellCtx","cellNode","UExpandTableRow","getExpandRowSlotsNode","leafColumns","cellCls","measureRef","node","rowData","data","length"],"sources":["../../../src/components/table/table-row.tsx"],"sourcesContent":["import { ArrowRight } from '@veltra/icons/normal'\nimport { defineComponent, type DefineComponent } from 'vue'\nimport { inject, onUnmounted } from 'vue'\nimport type { JSX } from 'vue/jsx-runtime'\n\nimport type { TableRow as ITableRow } from '../../types'\nimport { UButton } from '../button'\nimport { UIcon } from '../icon'\nimport { TableDIKey } from './di'\nimport UTabelCell from './table-cell.vue'\n\n/**\n * A3:行修饰类组合静态查找表。\n *\n * 位模式:bit2 = isCurrent, bit1 = checked, bit0 = expanded。\n * 与 `bem.is('...')` 对于 `'current' | 'checked' | 'expanded'` 的输出完全等价,\n * 直接从 index 读字符串,消除每行渲染期间的字符串拼接和 3 次 bem.is 调用。\n *\n * 放在模块顶层使所有 TableRow 实例共享一份引用(不会随 setup 重建)。\n */\nconst ROW_MOD_CLASS: readonly string[] = [\n '',\n 'is-expanded',\n 'is-checked',\n 'is-checked is-expanded',\n 'is-current',\n 'is-current is-expanded',\n 'is-current is-checked',\n 'is-current is-checked is-expanded'\n] as const\n\nfunction rowModCls(row: ITableRow): string {\n const i = (row.isCurrent ? 4 : 0) | (row.checked ? 2 : 0) | (row.expanded ? 1 : 0)\n return ROW_MOD_CLASS[i]!\n}\n\nexport const UTableRow: DefineComponent<{ row: ITableRow; index: number }> = defineComponent({\n name: 'TableRow',\n\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n\n setup(props) {\n const {\n cls,\n columnConfig,\n getColumnSlotsNode,\n toggleTreeRowExpand,\n getCellCtx,\n handleRowClick,\n handleCellClick,\n tableProps,\n measureElement,\n getCellClass\n } = inject(TableDIKey)!\n\n // A1:把 cls.e('row') / cls.e('expand-toggle') 等静态字符串提升到 setup 一次性计算,\n // 避免每次 render 重新走 `cls.e` 拼接。\n const rowBaseCls = cls.e('row')\n const expandToggleCls = cls.e('expand-toggle')\n const expandSpaceCls = cls.e('expand-space')\n\n // A2:measureRef 按 index 缓存闭包。\n // 行虚拟化下,同一 TableRow 实例的 props.index 大多稳定,但在虚拟化重排或展开行切换时\n // 仍会发生变化;把 (index) → refFn 缓存起来,既保证引用稳定(利于 Vue 的 ref diff),\n // 又避免在未来可能的\"同实例跨 index 复用\"情形下重复分配闭包。\n const measureRefCache = new Map<number, (el: unknown) => void>()\n const getMeasureRef = (index: number): ((el: unknown) => void) => {\n let ref = measureRefCache.get(index)\n if (ref === undefined) {\n ref = (el: unknown) => {\n measureElement(index, el as Element | null)\n }\n measureRefCache.set(index, ref)\n }\n return ref\n }\n onUnmounted(() => {\n measureRefCache.clear()\n })\n\n const { columns, expandColumn } = columnConfig\n\n return () => {\n const { row } = props\n const _expandColumn = expandColumn.value\n\n let expandCell: JSX.Element | null = null\n if (_expandColumn) {\n const expandCtx = getCellCtx(row, _expandColumn)\n const cellSpan = tableProps.mergeCell?.(expandCtx)\n\n if (!cellSpan || (cellSpan.colspan && cellSpan.rowspan)) {\n const marginLeft = tableProps.tree ? row.depth * 14 : 0\n expandCell = (\n <UTabelCell\n cellClass={getCellClass(_expandColumn)}\n left={_expandColumn.style.left}\n right={_expandColumn.style.right}\n key={row.uid + _expandColumn.key}\n {...tableProps.mergeCell?.(expandCtx)}\n >\n {!row.isLeaf || (tableProps.expandable && !row.isExpandRow) ? (\n <UButton\n text\n class={expandToggleCls}\n type='primary'\n size='small'\n circle\n onClick={(e) => {\n e.stopPropagation()\n toggleTreeRowExpand(row)\n }}\n style={`margin-left: ${marginLeft}px`}\n >\n <UIcon>\n <ArrowRight />\n </UIcon>\n </UButton>\n ) : (\n <i class={expandSpaceCls} style={`margin-left: ${marginLeft}px`}></i>\n )}\n\n {getColumnSlotsNode(expandCtx)}\n </UTabelCell>\n )\n }\n }\n\n // A3:行 class 由 base + 3-bit 组合查找产出,避免 Vue 的 class 数组归一化开销。\n const mod = rowModCls(row)\n const rowCls = mod ? rowBaseCls + ' ' + mod : rowBaseCls\n\n return (\n <tr\n class={rowCls}\n onClick={(e) => handleRowClick(row, e)}\n ref={getMeasureRef(props.index)}\n key={row.uid}\n >\n {expandCell}\n\n {columns.value.map((column) => {\n const cellCtx = getCellCtx(row, column)\n const cellSpan = tableProps.mergeCell?.(cellCtx)\n if (cellSpan && (!cellSpan.colspan || !cellSpan.rowspan)) {\n return null\n }\n\n const cellNode = getColumnSlotsNode(cellCtx)\n\n return (\n <UTabelCell\n cellClass={getCellClass(column)}\n left={column.style.left}\n right={column.style.right}\n key={row.uid + column.key}\n // @ts-ignore\n onClick={(e) => handleCellClick(row, column, e)}\n {...cellSpan}\n >\n {cellNode}\n </UTabelCell>\n )\n })}\n </tr>\n )\n }\n }\n})\n\nexport const UExpandTableRow = defineComponent({\n name: 'ExpandTableRow',\n props: {\n row: { type: Object as () => ITableRow, required: true },\n index: { type: Number, required: true }\n },\n setup(props) {\n const { getExpandRowSlotsNode, cls, measureElement, columnConfig } = inject(TableDIKey)!\n const { leafColumns } = columnConfig\n\n const rowBaseCls = cls.e('row')\n const cellCls = cls.e('cell')\n\n const measureRef = (el: unknown) => {\n measureElement(props.index, el as Element | null)\n }\n\n return () => {\n const { row } = props\n const node = getExpandRowSlotsNode({\n row,\n index: row.index,\n columns: leafColumns.value,\n rowData: row.data\n })\n return (\n <tr class={rowBaseCls} ref={measureRef}>\n <td colspan={leafColumns.value.length} class={cellCls}>\n {node}\n </td>\n </tr>\n )\n }\n }\n})\n"],"mappings":"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"}
|
|
@@ -13,17 +13,16 @@ function useColResize(options) {
|
|
|
13
13
|
function correctColumnStyle() {
|
|
14
14
|
const containerWidth = scrollRef.value?.containerRef?.clientWidth;
|
|
15
15
|
if (!containerWidth || !leafColumns.value.length) return;
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const allocatedWidth = freeWidth / allocatableColumns.length;
|
|
23
|
-
allocatableColumns.forEach((column) => {
|
|
24
|
-
column.width = (column.width ?? column.minWidth) + allocatedWidth;
|
|
16
|
+
const flexColumns = leafColumns.value.filter((column) => !column.explicitWidth);
|
|
17
|
+
const totalBase = leafColumns.value.filter((column) => column.explicitWidth).reduce((acc, cur) => acc + (cur.width ?? cur.minWidth), 0) + flexColumns.reduce((acc, cur) => acc + cur.minWidth, 0);
|
|
18
|
+
if (flexColumns.length > 0 && totalBase < containerWidth) {
|
|
19
|
+
const allocatedWidth = (containerWidth - totalBase) / flexColumns.length;
|
|
20
|
+
flexColumns.forEach((column) => {
|
|
21
|
+
column.width = column.minWidth + allocatedWidth;
|
|
25
22
|
});
|
|
26
|
-
}
|
|
23
|
+
} else flexColumns.forEach((column) => {
|
|
24
|
+
column.data.width = void 0;
|
|
25
|
+
});
|
|
27
26
|
const fixedLeft = leafColumns.value.filter((column) => column.fixed === "left");
|
|
28
27
|
const fixedRight = leafColumns.value.filter((column) => column.fixed === "right");
|
|
29
28
|
fixedLeft.reduce((acc, cur) => {
|
|
@@ -64,6 +63,7 @@ function useColResize(options) {
|
|
|
64
63
|
}
|
|
65
64
|
function handleResizeMouseup(e) {
|
|
66
65
|
currentResizeColumn.width = Math.max(originWidth + e.pageX - originX, currentResizeColumn.minWidth);
|
|
66
|
+
currentResizeColumn.explicitWidth = true;
|
|
67
67
|
showResizeLine.value = false;
|
|
68
68
|
currentResizeColumn = null;
|
|
69
69
|
correctColumnStyle();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-col-resize.js","names":[],"sources":["../../../src/components/table/use-col-resize.ts"],"sourcesContent":["import { nextTick, provide, shallowRef, watchEffect, type ShallowRef } from 'vue'\n\nimport type { ScrollExposed } from '../../types'\nimport { TableResizeKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ninterface Options {\n scrollRef: ShallowRef<ScrollExposed | undefined>\n leafColumns: ShallowRef<ColumnNode[]>\n}\n\ninterface UseColResizeReturned {\n resizeLineRef: ShallowRef<HTMLElement | undefined>\n colgroupRef: ShallowRef<HTMLElement | undefined>\n showResizeLine: ShallowRef<boolean>\n handleResizeMousedown: (e: MouseEvent, resizeColumn: ColumnNode) => void\n}\n\nexport function useColResize(options: Options): UseColResizeReturned {\n const { scrollRef, leafColumns } = options\n\n const showResizeLine = shallowRef(false)\n\n const resizeLineRef = shallowRef<HTMLElement>()\n const colgroupRef = shallowRef<HTMLElement>()\n const headerRef = shallowRef<HTMLElement>()\n\n /**\n * 修正列样式\n */\n function correctColumnStyle() {\n // 获取表格容器宽度\n const containerWidth = scrollRef.value?.containerRef?.clientWidth\n\n if (!containerWidth || !leafColumns.value.length) return\n\n
|
|
1
|
+
{"version":3,"file":"use-col-resize.js","names":[],"sources":["../../../src/components/table/use-col-resize.ts"],"sourcesContent":["import { nextTick, provide, shallowRef, watchEffect, type ShallowRef } from 'vue'\n\nimport type { ScrollExposed } from '../../types'\nimport { TableResizeKey } from './di'\nimport type { ColumnNode } from './node/col'\n\ninterface Options {\n scrollRef: ShallowRef<ScrollExposed | undefined>\n leafColumns: ShallowRef<ColumnNode[]>\n}\n\ninterface UseColResizeReturned {\n resizeLineRef: ShallowRef<HTMLElement | undefined>\n colgroupRef: ShallowRef<HTMLElement | undefined>\n showResizeLine: ShallowRef<boolean>\n handleResizeMousedown: (e: MouseEvent, resizeColumn: ColumnNode) => void\n}\n\nexport function useColResize(options: Options): UseColResizeReturned {\n const { scrollRef, leafColumns } = options\n\n const showResizeLine = shallowRef(false)\n\n const resizeLineRef = shallowRef<HTMLElement>()\n const colgroupRef = shallowRef<HTMLElement>()\n const headerRef = shallowRef<HTMLElement>()\n\n /**\n * 修正列样式\n */\n function correctColumnStyle() {\n // 获取表格容器宽度\n const containerWidth = scrollRef.value?.containerRef?.clientWidth\n\n if (!containerWidth || !leafColumns.value.length) return\n\n const flexColumns = leafColumns.value.filter((column) => !column.explicitWidth)\n const fixedWidthTotal = leafColumns.value\n .filter((column) => column.explicitWidth)\n .reduce((acc, cur) => acc + (cur.width ?? cur.minWidth!), 0)\n const flexBaseTotal = flexColumns.reduce((acc, cur) => acc + cur.minWidth!, 0)\n const totalBase = fixedWidthTotal + flexBaseTotal\n\n // 仅未显式指定 width 的列参与剩余宽度均分;指定了 width 的列保持该宽度。\n if (flexColumns.length > 0 && totalBase < containerWidth) {\n const allocatedWidth = (containerWidth - totalBase) / flexColumns.length\n\n flexColumns.forEach((column) => {\n column.width = column.minWidth! + allocatedWidth\n })\n } else {\n flexColumns.forEach((column) => {\n column.data.width = undefined\n })\n }\n\n const fixedLeft = leafColumns.value.filter((column) => column.fixed === 'left')\n const fixedRight = leafColumns.value.filter((column) => column.fixed === 'right')\n\n fixedLeft.reduce((acc, cur) => {\n cur.style.left = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n\n fixedRight.reduceRight((acc, cur) => {\n cur.style.right = acc\n return acc + (cur.width ?? cur.minWidth!)\n }, 0)\n }\n\n watchEffect(correctColumnStyle)\n\n function updateResizeLine(transformX: number): void {\n if (!resizeLineRef.value) return\n resizeLineRef.value.style.transform = `translateX(${transformX}px)`\n }\n\n // 表格相对于页面左边缘的偏移量,\n // 此处作为缓存以减少频繁地调用 getBoundingClientRect 方法\n let containerLeft = 0\n let originX = 0\n let originWidth = 0\n let currentResizeColumn: ColumnNode | null = null\n\n function handleResizeMousedown(e: MouseEvent, resizeColumn: ColumnNode): void {\n const tableEl = scrollRef.value?.el\n if (!tableEl) return\n\n showResizeLine.value = true\n currentResizeColumn = resizeColumn\n originX = e.pageX\n originWidth = resizeColumn.width ?? 0\n\n const { left } = tableEl.getBoundingClientRect()\n containerLeft = left\n\n nextTick(() => {\n updateResizeLine(e.pageX - left)\n })\n\n document.addEventListener('mousemove', handleResizeMousemove)\n document.addEventListener('mouseup', handleResizeMouseup)\n }\n\n function handleResizeMousemove(e: MouseEvent): void {\n updateResizeLine(e.pageX - containerLeft)\n }\n\n function handleResizeMouseup(e: MouseEvent): void {\n currentResizeColumn!.width = Math.max(\n originWidth + e.pageX - originX,\n currentResizeColumn!.minWidth!\n )\n currentResizeColumn!.explicitWidth = true\n\n showResizeLine.value = false\n currentResizeColumn = null\n correctColumnStyle()\n\n document.removeEventListener('mouseup', handleResizeMouseup)\n document.removeEventListener('mousemove', handleResizeMousemove)\n }\n\n provide(TableResizeKey, { handleResizeMousedown, headerRef })\n\n return { resizeLineRef, colgroupRef, showResizeLine, handleResizeMousedown }\n}\n"],"mappings":";;;AAkBA,SAAgB,aAAa,SAAwC;CACnE,MAAM,EAAE,WAAW,gBAAgB;CAEnC,MAAM,iBAAiB,WAAW,KAAK;CAEvC,MAAM,gBAAgB,WAAwB;CAC9C,MAAM,cAAc,WAAwB;CAC5C,MAAM,YAAY,WAAwB;;;;CAK1C,SAAS,qBAAqB;EAE5B,MAAM,iBAAiB,UAAU,OAAO,cAAc;EAEtD,IAAI,CAAC,kBAAkB,CAAC,YAAY,MAAM,QAAQ;EAElD,MAAM,cAAc,YAAY,MAAM,QAAQ,WAAW,CAAC,OAAO,aAAa;EAK9E,MAAM,YAJkB,YAAY,MACjC,QAAQ,WAAW,OAAO,aAAa,EACvC,QAAQ,KAAK,QAAQ,OAAO,IAAI,SAAS,IAAI,WAAY,CAE5B,IADV,YAAY,QAAQ,KAAK,QAAQ,MAAM,IAAI,UAAW,CAC5B;EAGhD,IAAI,YAAY,SAAS,KAAK,YAAY,gBAAgB;GACxD,MAAM,kBAAkB,iBAAiB,aAAa,YAAY;GAElE,YAAY,SAAS,WAAW;IAC9B,OAAO,QAAQ,OAAO,WAAY;GACpC,CAAC;EACH,OACE,YAAY,SAAS,WAAW;GAC9B,OAAO,KAAK,QAAQ,KAAA;EACtB,CAAC;EAGH,MAAM,YAAY,YAAY,MAAM,QAAQ,WAAW,OAAO,UAAU,MAAM;EAC9E,MAAM,aAAa,YAAY,MAAM,QAAQ,WAAW,OAAO,UAAU,OAAO;EAEhF,UAAU,QAAQ,KAAK,QAAQ;GAC7B,IAAI,MAAM,OAAO;GACjB,OAAO,OAAO,IAAI,SAAS,IAAI;EACjC,GAAG,CAAC;EAEJ,WAAW,aAAa,KAAK,QAAQ;GACnC,IAAI,MAAM,QAAQ;GAClB,OAAO,OAAO,IAAI,SAAS,IAAI;EACjC,GAAG,CAAC;CACN;CAEA,YAAY,kBAAkB;CAE9B,SAAS,iBAAiB,YAA0B;EAClD,IAAI,CAAC,cAAc,OAAO;EAC1B,cAAc,MAAM,MAAM,YAAY,cAAc,WAAW;CACjE;CAIA,IAAI,gBAAgB;CACpB,IAAI,UAAU;CACd,IAAI,cAAc;CAClB,IAAI,sBAAyC;CAE7C,SAAS,sBAAsB,GAAe,cAAgC;EAC5E,MAAM,UAAU,UAAU,OAAO;EACjC,IAAI,CAAC,SAAS;EAEd,eAAe,QAAQ;EACvB,sBAAsB;EACtB,UAAU,EAAE;EACZ,cAAc,aAAa,SAAS;EAEpC,MAAM,EAAE,SAAS,QAAQ,sBAAsB;EAC/C,gBAAgB;EAEhB,eAAe;GACb,iBAAiB,EAAE,QAAQ,IAAI;EACjC,CAAC;EAED,SAAS,iBAAiB,aAAa,qBAAqB;EAC5D,SAAS,iBAAiB,WAAW,mBAAmB;CAC1D;CAEA,SAAS,sBAAsB,GAAqB;EAClD,iBAAiB,EAAE,QAAQ,aAAa;CAC1C;CAEA,SAAS,oBAAoB,GAAqB;EAChD,oBAAqB,QAAQ,KAAK,IAChC,cAAc,EAAE,QAAQ,SACxB,oBAAqB,QACvB;EACA,oBAAqB,gBAAgB;EAErC,eAAe,QAAQ;EACvB,sBAAsB;EACtB,mBAAmB;EAEnB,SAAS,oBAAoB,WAAW,mBAAmB;EAC3D,SAAS,oBAAoB,aAAa,qBAAqB;CACjE;CAEA,QAAQ,gBAAgB;EAAE;EAAuB;CAAU,CAAC;CAE5D,OAAO;EAAE;EAAe;EAAa;EAAgB;CAAsB;AAC7E"}
|
|
@@ -14,13 +14,13 @@ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
|
14
14
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
15
|
"update:modelValue": (value: string | undefined) => any;
|
|
16
16
|
} & {
|
|
17
|
+
"update:modelValue": (value: string) => any;
|
|
17
18
|
close: (item: TabItem, index: number) => any;
|
|
18
19
|
click: (item: TabItem, index: number) => any;
|
|
19
|
-
"update:modelValue": (value: string) => any;
|
|
20
20
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
21
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
21
22
|
onClose?: ((item: TabItem, index: number) => any) | undefined;
|
|
22
23
|
onClick?: ((item: TabItem, index: number) => any) | undefined;
|
|
23
|
-
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
closable: boolean;
|
|
26
26
|
position: "top" | "bottom";
|
|
@@ -14,13 +14,13 @@ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
|
14
14
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
15
15
|
"update:modelValue": (value: string | undefined) => any;
|
|
16
16
|
} & {
|
|
17
|
+
"update:modelValue": (value: string) => any;
|
|
17
18
|
close: (item: TabItem, index: number) => any;
|
|
18
19
|
click: (item: TabItem, index: number) => any;
|
|
19
|
-
"update:modelValue": (value: string) => any;
|
|
20
20
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
21
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
21
22
|
onClose?: ((item: TabItem, index: number) => any) | undefined;
|
|
22
23
|
onClick?: ((item: TabItem, index: number) => any) | undefined;
|
|
23
|
-
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
24
24
|
}>, {
|
|
25
25
|
closable: boolean;
|
|
26
26
|
position: "left" | "right";
|
|
@@ -9,13 +9,13 @@ type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
|
9
9
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
10
|
"update:modelValue": (value: string | undefined) => any;
|
|
11
11
|
} & {
|
|
12
|
+
"update:modelValue": (value: string) => any;
|
|
12
13
|
close: (item: TabItem, index: number) => any;
|
|
13
14
|
click: (item: TabItem, index: number) => any;
|
|
14
|
-
"update:modelValue": (value: string) => any;
|
|
15
15
|
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
16
|
+
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
16
17
|
onClose?: ((item: TabItem, index: number) => any) | undefined;
|
|
17
18
|
onClick?: ((item: TabItem, index: number) => any) | undefined;
|
|
18
|
-
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
19
19
|
}>, {
|
|
20
20
|
closable: boolean;
|
|
21
21
|
position: "left" | "right" | "top" | "bottom";
|
|
@@ -21,9 +21,9 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
21
21
|
onBlur?: (() => any) | undefined;
|
|
22
22
|
}>, {
|
|
23
23
|
disabled: boolean;
|
|
24
|
+
readonly: boolean;
|
|
24
25
|
placeholder: string;
|
|
25
26
|
clearable: boolean;
|
|
26
|
-
readonly: boolean;
|
|
27
27
|
resize: boolean;
|
|
28
28
|
autosize: boolean;
|
|
29
29
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -23,15 +23,15 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
|
|
|
23
23
|
onChange?: ((value?: string | number | undefined, selectedData?: Record<string, any> | undefined) => any) | undefined;
|
|
24
24
|
"onUpdate:text"?: ((text?: string | undefined) => any) | undefined;
|
|
25
25
|
}>, {
|
|
26
|
-
minWidth: string;
|
|
27
26
|
disabled: boolean;
|
|
27
|
+
readonly: boolean;
|
|
28
|
+
minWidth: string;
|
|
28
29
|
expandAll: boolean;
|
|
29
30
|
labelKey: string;
|
|
30
31
|
valueKey: string;
|
|
31
32
|
placeholder: string;
|
|
32
33
|
clearable: boolean;
|
|
33
34
|
filterable: boolean;
|
|
34
|
-
readonly: boolean;
|
|
35
35
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
36
36
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
37
37
|
declare const _default: typeof __VLS_export;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veltra/desktop",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.34",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"src"
|
|
@@ -68,11 +68,11 @@
|
|
|
68
68
|
"@cat-kit/core": ">=1.1.6",
|
|
69
69
|
"@cat-kit/excel": ">=1.0.0",
|
|
70
70
|
"@cat-kit/fe": "^1.1.6",
|
|
71
|
-
"@veltra/compositions": "1.1.
|
|
72
|
-
"@veltra/directives": "1.1.
|
|
73
|
-
"@veltra/icons": "1.1.
|
|
74
|
-
"@veltra/styles": "1.1.
|
|
75
|
-
"@veltra/utils": "1.1.
|
|
71
|
+
"@veltra/compositions": "1.1.34",
|
|
72
|
+
"@veltra/directives": "1.1.34",
|
|
73
|
+
"@veltra/icons": "1.1.34",
|
|
74
|
+
"@veltra/styles": "1.1.34",
|
|
75
|
+
"@veltra/utils": "1.1.34",
|
|
76
76
|
"vue": ">=3.5.0"
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -24,11 +24,12 @@
|
|
|
24
24
|
v-for="option of tags"
|
|
25
25
|
:key="option[valueKey]"
|
|
26
26
|
:closable="!disabled"
|
|
27
|
+
size="small"
|
|
27
28
|
@close="handleClose(option)"
|
|
28
29
|
>
|
|
29
30
|
{{ option[labelKey] }}
|
|
30
31
|
</u-tag>
|
|
31
|
-
<u-tag v-if="restTag"> {{ restTag }}+ </u-tag>
|
|
32
|
+
<u-tag v-if="restTag" size="small"> {{ restTag }}+ </u-tag>
|
|
32
33
|
</div>
|
|
33
34
|
|
|
34
35
|
<transition name="zoom-in" mode="out-in">
|
|
@@ -127,7 +128,7 @@
|
|
|
127
128
|
|
|
128
129
|
<div v-else-if="model?.length" :class="[cls.m(size), cls.e('readonly-tags')]">
|
|
129
130
|
<div :class="cls.e('tags')">
|
|
130
|
-
<u-tag v-for="option of tags" :key="option[valueKey]">
|
|
131
|
+
<u-tag v-for="option of tags" :key="option[valueKey]" size="small">
|
|
131
132
|
{{ option[labelKey] }}
|
|
132
133
|
</u-tag>
|
|
133
134
|
</div>
|
|
@@ -330,12 +331,12 @@ const handleCheck = (option: Record<string, any>, checked: boolean) => {
|
|
|
330
331
|
createdOptions.value = [...createdOptions.value, created]
|
|
331
332
|
checkedSet.add(created)
|
|
332
333
|
internalChange = true
|
|
333
|
-
model.value = [...(model.value ?? []), chainObj(created).get(valueKey)]
|
|
334
|
+
model.value = [...(model.value ?? []), chainObj(created).get(valueKey)!]
|
|
334
335
|
queryString.value = ''
|
|
335
336
|
} else if (!checkedSet.has(option)) {
|
|
336
337
|
checkedSet.add(option)
|
|
337
338
|
internalChange = true
|
|
338
|
-
model.value = [...(model.value ?? []), chainObj(option).get(valueKey)]
|
|
339
|
+
model.value = [...(model.value ?? []), chainObj(option).get(valueKey)!]
|
|
339
340
|
}
|
|
340
341
|
} else {
|
|
341
342
|
checkedSet.delete(option)
|
|
@@ -357,7 +358,7 @@ const handleCheckAll = (checked: boolean) => {
|
|
|
357
358
|
if (!option.__isTemp) checkedSet.add(option)
|
|
358
359
|
})
|
|
359
360
|
internalChange = true
|
|
360
|
-
model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey))
|
|
361
|
+
model.value = Array.from(checkedSet).map((o) => chainObj(o).get(valueKey)!)
|
|
361
362
|
} else {
|
|
362
363
|
checkedSet.clear()
|
|
363
364
|
internalChange = true
|
|
@@ -410,7 +411,7 @@ const handleCreateByEnter = () => {
|
|
|
410
411
|
if (!checkedSet.has(existingCreated)) {
|
|
411
412
|
checkedSet.add(existingCreated)
|
|
412
413
|
internalChange = true
|
|
413
|
-
model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey)]
|
|
414
|
+
model.value = [...(model.value ?? []), chainObj(existingCreated).get(valueKey)!]
|
|
414
415
|
}
|
|
415
416
|
queryString.value = ''
|
|
416
417
|
emitChange()
|
|
@@ -423,7 +424,7 @@ const handleCreateByEnter = () => {
|
|
|
423
424
|
if (!checkedSet.has(exactMatch)) {
|
|
424
425
|
checkedSet.add(exactMatch)
|
|
425
426
|
internalChange = true
|
|
426
|
-
model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey)]
|
|
427
|
+
model.value = [...(model.value ?? []), chainObj(exactMatch).get(valueKey)!]
|
|
427
428
|
}
|
|
428
429
|
queryString.value = ''
|
|
429
430
|
emitChange()
|
|
@@ -94,9 +94,16 @@ export class ColumnNode extends TreeNode<TableColumn, ColumnNode> {
|
|
|
94
94
|
return this.data.resizable ?? true
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* 是否在列配置上显式指定了 width,或经表头拖拽锁定。
|
|
99
|
+
* 此类列不参与剩余宽度的均分。
|
|
100
|
+
*/
|
|
101
|
+
explicitWidth: boolean
|
|
102
|
+
|
|
97
103
|
style: Record<string, number> = reactive({})
|
|
98
104
|
|
|
99
105
|
constructor(val: TableColumn, index: number, depth: number, parent?: ColumnNode) {
|
|
100
106
|
super(isReactive(val) ? val : shallowReactive(val), index, depth, parent)
|
|
107
|
+
this.explicitWidth = val.width !== undefined
|
|
101
108
|
}
|
|
102
109
|
}
|
|
@@ -93,7 +93,7 @@ export const UTableRow: DefineComponent<{ row: ITableRow; index: number }> = def
|
|
|
93
93
|
const cellSpan = tableProps.mergeCell?.(expandCtx)
|
|
94
94
|
|
|
95
95
|
if (!cellSpan || (cellSpan.colspan && cellSpan.rowspan)) {
|
|
96
|
-
const marginLeft = tableProps.tree ?
|
|
96
|
+
const marginLeft = tableProps.tree ? row.depth * 14 : 0
|
|
97
97
|
expandCell = (
|
|
98
98
|
<UTabelCell
|
|
99
99
|
cellClass={getCellClass(_expandColumn)}
|
|
@@ -34,22 +34,23 @@ export function useColResize(options: Options): UseColResizeReturned {
|
|
|
34
34
|
|
|
35
35
|
if (!containerWidth || !leafColumns.value.length) return
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
37
|
+
const flexColumns = leafColumns.value.filter((column) => !column.explicitWidth)
|
|
38
|
+
const fixedWidthTotal = leafColumns.value
|
|
39
|
+
.filter((column) => column.explicitWidth)
|
|
40
|
+
.reduce((acc, cur) => acc + (cur.width ?? cur.minWidth!), 0)
|
|
41
|
+
const flexBaseTotal = flexColumns.reduce((acc, cur) => acc + cur.minWidth!, 0)
|
|
42
|
+
const totalBase = fixedWidthTotal + flexBaseTotal
|
|
43
|
+
|
|
44
|
+
// 仅未显式指定 width 的列参与剩余宽度均分;指定了 width 的列保持该宽度。
|
|
45
|
+
if (flexColumns.length > 0 && totalBase < containerWidth) {
|
|
46
|
+
const allocatedWidth = (containerWidth - totalBase) / flexColumns.length
|
|
47
|
+
|
|
48
|
+
flexColumns.forEach((column) => {
|
|
49
|
+
column.width = column.minWidth! + allocatedWidth
|
|
50
|
+
})
|
|
51
|
+
} else {
|
|
52
|
+
flexColumns.forEach((column) => {
|
|
53
|
+
column.data.width = undefined
|
|
53
54
|
})
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -110,6 +111,7 @@ export function useColResize(options: Options): UseColResizeReturned {
|
|
|
110
111
|
originWidth + e.pageX - originX,
|
|
111
112
|
currentResizeColumn!.minWidth!
|
|
112
113
|
)
|
|
114
|
+
currentResizeColumn!.explicitWidth = true
|
|
113
115
|
|
|
114
116
|
showResizeLine.value = false
|
|
115
117
|
currentResizeColumn = null
|