persagy-vant 0.0.43 → 0.0.44
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/es/index.d.ts +1 -1
- package/es/index.mjs +1 -1
- package/es/object-select/ObjectSelect.d.ts +7 -2
- package/es/object-select/ObjectSelect.mjs +26 -13
- package/es/object-select/index.d.ts +5 -1
- package/es/tree-select/TreeSelect.d.ts +7 -1
- package/es/tree-select/TreeSelect.mjs +107 -54
- package/es/tree-select/index.css +1 -1
- package/es/tree-select/index.d.ts +6 -2
- package/es/tree-select/index.less +6 -0
- package/es/tree-select/style/index.mjs +1 -0
- package/es/tree-select/style/less.mjs +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/object-select/ObjectSelect.d.ts +7 -2
- package/lib/object-select/ObjectSelect.js +25 -12
- package/lib/object-select/index.d.ts +5 -1
- package/lib/tree-select/TreeSelect.d.ts +7 -1
- package/lib/tree-select/TreeSelect.js +107 -52
- package/lib/tree-select/index.css +1 -1
- package/lib/tree-select/index.d.ts +6 -2
- package/lib/tree-select/index.less +6 -0
- package/lib/tree-select/style/index.js +1 -0
- package/lib/tree-select/style/less.js +1 -0
- package/lib/vant.cjs.js +144 -79
- package/lib/vant.es.js +145 -80
- package/lib/vant.js +144 -79
- package/lib/vant.min.js +1 -1
- package/lib/web-types.json +1 -1
- package/package.json +1 -1
- package/skills/use-persagy-vant/references/business-component-catalog.md +1 -1
- package/skills/use-persagy-vant/references/component-catalog.md +1 -1
package/es/index.d.ts
CHANGED
package/es/index.mjs
CHANGED
|
@@ -110,7 +110,7 @@ import { Uploader } from "./uploader/index.mjs";
|
|
|
110
110
|
import { VideoPreview } from "./video-preview/index.mjs";
|
|
111
111
|
import { WorkOrderCard } from "./work-order-card/index.mjs";
|
|
112
112
|
import { WorkOrderFilter } from "./work-order-filter/index.mjs";
|
|
113
|
-
const version = "0.0.
|
|
113
|
+
const version = "0.0.44";
|
|
114
114
|
function install(app) {
|
|
115
115
|
const components = [
|
|
116
116
|
ActionBar,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ExtractPropTypes, type PropType } from 'vue';
|
|
2
2
|
import { type Numeric } from '../utils';
|
|
3
|
-
import { type TreeSelectItem } from '../tree-select';
|
|
3
|
+
import { type TreeSelectItem, type TreeSelectLoadChildren } from '../tree-select';
|
|
4
4
|
import type { ObjectSelectSpecialty } from './types';
|
|
5
5
|
declare const objectSelectProps: {
|
|
6
6
|
show: BooleanConstructor;
|
|
@@ -24,6 +24,7 @@ declare const objectSelectProps: {
|
|
|
24
24
|
type: PropType<ObjectSelectSpecialty[]>;
|
|
25
25
|
default: () => ObjectSelectSpecialty[];
|
|
26
26
|
};
|
|
27
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
27
28
|
};
|
|
28
29
|
export declare type ObjectSelectProps = ExtractPropTypes<typeof objectSelectProps>;
|
|
29
30
|
declare const _default: import("vue").DefineComponent<{
|
|
@@ -48,7 +49,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
48
49
|
type: PropType<ObjectSelectSpecialty[]>;
|
|
49
50
|
default: () => ObjectSelectSpecialty[];
|
|
50
51
|
};
|
|
51
|
-
|
|
52
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
53
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("change" | "update:modelValue" | "load" | "update:show" | "confirm" | "load-error")[], "change" | "update:modelValue" | "load" | "update:show" | "confirm" | "load-error", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
52
54
|
show: BooleanConstructor;
|
|
53
55
|
modelValue: {
|
|
54
56
|
type: PropType<Numeric[]>;
|
|
@@ -70,11 +72,14 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
70
72
|
type: PropType<ObjectSelectSpecialty[]>;
|
|
71
73
|
default: () => ObjectSelectSpecialty[];
|
|
72
74
|
};
|
|
75
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
73
76
|
}>> & {
|
|
74
77
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
78
|
+
onLoad?: ((...args: any[]) => any) | undefined;
|
|
75
79
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
76
80
|
"onUpdate:show"?: ((...args: any[]) => any) | undefined;
|
|
77
81
|
onConfirm?: ((...args: any[]) => any) | undefined;
|
|
82
|
+
"onLoad-error"?: ((...args: any[]) => any) | undefined;
|
|
78
83
|
}, {
|
|
79
84
|
title: string;
|
|
80
85
|
modelValue: Numeric[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, defineComponent, ref, watch, createVNode as _createVNode, Fragment as _Fragment, createTextVNode as _createTextVNode } from "vue";
|
|
1
|
+
import { computed, defineComponent, ref, shallowReactive, watch, createVNode as _createVNode, Fragment as _Fragment, createTextVNode as _createTextVNode } from "vue";
|
|
2
2
|
import { createNamespace, extend, makeArrayProp, makeStringProp } from "../utils/index.mjs";
|
|
3
3
|
import { ActionSheet } from "../action-sheet/index.mjs";
|
|
4
4
|
import { BlueMarkHeader } from "../blue-mark/index.mjs";
|
|
@@ -46,13 +46,7 @@ const spaceItems = [{
|
|
|
46
46
|
id: "high-voltage",
|
|
47
47
|
text: "\u9AD8\u538B\u8BA1\u91CF\u67DC",
|
|
48
48
|
selectable: false,
|
|
49
|
-
children: [
|
|
50
|
-
id: "metering-cabinet-1",
|
|
51
|
-
text: "B3_\u9AD8\u538B\u8BA1\u91CF\u67DC_1#"
|
|
52
|
-
}, {
|
|
53
|
-
id: "metering-cabinet-2",
|
|
54
|
-
text: "B3_\u9AD8\u538B\u8BA1\u91CF\u67DC_2#"
|
|
55
|
-
}]
|
|
49
|
+
children: []
|
|
56
50
|
}]
|
|
57
51
|
}, {
|
|
58
52
|
id: "chiller-room",
|
|
@@ -372,13 +366,14 @@ const objectSelectProps = {
|
|
|
372
366
|
specialties: {
|
|
373
367
|
type: Array,
|
|
374
368
|
default: () => specialties
|
|
375
|
-
}
|
|
369
|
+
},
|
|
370
|
+
loadChildren: Function
|
|
376
371
|
};
|
|
377
372
|
const flattenItems = (items) => items.flatMap((item) => [item, ...item.children ? flattenItems(item.children) : []]);
|
|
378
373
|
var stdin_default = defineComponent({
|
|
379
374
|
name,
|
|
380
375
|
props: objectSelectProps,
|
|
381
|
-
emits: ["update:show", "update:modelValue", "change", "confirm"],
|
|
376
|
+
emits: ["update:show", "update:modelValue", "change", "confirm", "load", "load-error"],
|
|
382
377
|
setup(props, {
|
|
383
378
|
emit
|
|
384
379
|
}) {
|
|
@@ -391,6 +386,14 @@ var stdin_default = defineComponent({
|
|
|
391
386
|
const expandedSelected = ref(false);
|
|
392
387
|
const searching = ref(false);
|
|
393
388
|
const keyword = ref("");
|
|
389
|
+
const loadedChildren = shallowReactive(/* @__PURE__ */ new Map());
|
|
390
|
+
const getChildren = (item) => loadedChildren.get(item.id) || item.children || [];
|
|
391
|
+
const hydrateItems = (items) => items.map((item) => {
|
|
392
|
+
const children = getChildren(item);
|
|
393
|
+
return children.length ? extend({}, item, {
|
|
394
|
+
children: hydrateItems(children)
|
|
395
|
+
}) : item;
|
|
396
|
+
});
|
|
394
397
|
const currentSpecialtyItems = (specialty) => specialtyType.value === 0 ? specialty.deviceItems : specialty.systemItems;
|
|
395
398
|
const expandOnlySpecialty = () => {
|
|
396
399
|
if (props.specialties.length === 1) {
|
|
@@ -415,7 +418,7 @@ var stdin_default = defineComponent({
|
|
|
415
418
|
immediate: true
|
|
416
419
|
});
|
|
417
420
|
const selected = computed(() => props.modelValue);
|
|
418
|
-
const allItems = computed(() => flattenItems([...props.spaceItems, ...props.specialties.flatMap((specialty) => [...specialty.deviceItems, ...specialty.systemItems])]));
|
|
421
|
+
const allItems = computed(() => flattenItems(hydrateItems([...props.spaceItems, ...props.specialties.flatMap((specialty) => [...specialty.deviceItems, ...specialty.systemItems])])));
|
|
419
422
|
const selectedItems = computed(() => allItems.value.filter((item) => selected.value.includes(item.id)));
|
|
420
423
|
const searchResults = computed(() => {
|
|
421
424
|
const query = keyword.value.trim().toLowerCase();
|
|
@@ -460,19 +463,29 @@ var stdin_default = defineComponent({
|
|
|
460
463
|
update([]);
|
|
461
464
|
expandedSelected.value = false;
|
|
462
465
|
};
|
|
466
|
+
const onLoad = (item, children) => {
|
|
467
|
+
loadedChildren.set(item.id, children);
|
|
468
|
+
emit("load", item, children);
|
|
469
|
+
};
|
|
470
|
+
const onLoadError = (item, error) => {
|
|
471
|
+
emit("load-error", item, error);
|
|
472
|
+
};
|
|
463
473
|
const renderTree = (items) => _createVNode("div", {
|
|
464
474
|
"class": bem("tree-card")
|
|
465
475
|
}, [_createVNode(TreeSelect, {
|
|
466
476
|
"modelValue": selected.value,
|
|
467
477
|
"expandedKeys": expandedKeys.value,
|
|
468
|
-
"items": items,
|
|
478
|
+
"items": hydrateItems(items),
|
|
469
479
|
"multiple": true,
|
|
470
480
|
"showParentSelect": true,
|
|
471
481
|
"cascade": false,
|
|
482
|
+
"loadChildren": props.loadChildren,
|
|
472
483
|
"onUpdate:modelValue": update,
|
|
473
484
|
"onUpdate:expandedKeys": (value) => {
|
|
474
485
|
expandedKeys.value = value;
|
|
475
|
-
}
|
|
486
|
+
},
|
|
487
|
+
"onLoad": onLoad,
|
|
488
|
+
"onLoad-error": onLoadError
|
|
476
489
|
}, null)]);
|
|
477
490
|
const renderSpecialty = (specialty) => {
|
|
478
491
|
var _a;
|
|
@@ -20,7 +20,8 @@ export declare const ObjectSelect: import("../utils").WithInstall<import("vue").
|
|
|
20
20
|
type: import("vue").PropType<import("./types").ObjectSelectSpecialty[]>;
|
|
21
21
|
default: () => import("./types").ObjectSelectSpecialty[];
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
loadChildren: import("vue").PropType<import("..").TreeSelectLoadChildren>;
|
|
24
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("change" | "update:modelValue" | "load" | "update:show" | "confirm" | "load-error")[], "change" | "update:modelValue" | "load" | "update:show" | "confirm" | "load-error", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
24
25
|
show: BooleanConstructor;
|
|
25
26
|
modelValue: {
|
|
26
27
|
type: import("vue").PropType<import("../utils").Numeric[]>;
|
|
@@ -42,11 +43,14 @@ export declare const ObjectSelect: import("../utils").WithInstall<import("vue").
|
|
|
42
43
|
type: import("vue").PropType<import("./types").ObjectSelectSpecialty[]>;
|
|
43
44
|
default: () => import("./types").ObjectSelectSpecialty[];
|
|
44
45
|
};
|
|
46
|
+
loadChildren: import("vue").PropType<import("..").TreeSelectLoadChildren>;
|
|
45
47
|
}>> & {
|
|
46
48
|
onChange?: ((...args: any[]) => any) | undefined;
|
|
49
|
+
onLoad?: ((...args: any[]) => any) | undefined;
|
|
47
50
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
48
51
|
"onUpdate:show"?: ((...args: any[]) => any) | undefined;
|
|
49
52
|
onConfirm?: ((...args: any[]) => any) | undefined;
|
|
53
|
+
"onLoad-error"?: ((...args: any[]) => any) | undefined;
|
|
50
54
|
}, {
|
|
51
55
|
title: string;
|
|
52
56
|
modelValue: import("../utils").Numeric[];
|
|
@@ -8,6 +8,7 @@ export declare type TreeSelectItem = {
|
|
|
8
8
|
selectable?: boolean;
|
|
9
9
|
};
|
|
10
10
|
export declare type TreeSelectChild = TreeSelectItem;
|
|
11
|
+
export declare type TreeSelectLoadChildren = (item: TreeSelectItem) => TreeSelectItem[] | Promise<TreeSelectItem[]>;
|
|
11
12
|
declare const treeSelectProps: {
|
|
12
13
|
items: {
|
|
13
14
|
type: PropType<TreeSelectItem[]>;
|
|
@@ -30,6 +31,7 @@ declare const treeSelectProps: {
|
|
|
30
31
|
type: BooleanConstructor;
|
|
31
32
|
default: true;
|
|
32
33
|
};
|
|
34
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
33
35
|
};
|
|
34
36
|
export declare type TreeSelectProps = ExtractPropTypes<typeof treeSelectProps>;
|
|
35
37
|
declare const _default: import("vue").DefineComponent<{
|
|
@@ -54,7 +56,8 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
54
56
|
type: BooleanConstructor;
|
|
55
57
|
default: true;
|
|
56
58
|
};
|
|
57
|
-
|
|
59
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
60
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("select" | "update:modelValue" | "load" | "update:expandedKeys" | "expand" | "load-error")[], "select" | "update:modelValue" | "load" | "update:expandedKeys" | "expand" | "load-error", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
58
61
|
items: {
|
|
59
62
|
type: PropType<TreeSelectItem[]>;
|
|
60
63
|
default: () => never[];
|
|
@@ -76,11 +79,14 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
76
79
|
type: BooleanConstructor;
|
|
77
80
|
default: true;
|
|
78
81
|
};
|
|
82
|
+
loadChildren: PropType<TreeSelectLoadChildren>;
|
|
79
83
|
}>> & {
|
|
84
|
+
onLoad?: ((...args: any[]) => any) | undefined;
|
|
80
85
|
onSelect?: ((...args: any[]) => any) | undefined;
|
|
81
86
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
82
87
|
"onUpdate:expandedKeys"?: ((...args: any[]) => any) | undefined;
|
|
83
88
|
onExpand?: ((...args: any[]) => any) | undefined;
|
|
89
|
+
"onLoad-error"?: ((...args: any[]) => any) | undefined;
|
|
84
90
|
}, {
|
|
85
91
|
modelValue: Numeric[];
|
|
86
92
|
multiple: boolean;
|
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
16
20
|
};
|
|
17
|
-
import { computed, defineComponent, Transition, createVNode as _createVNode } from "vue";
|
|
21
|
+
import { computed, defineComponent, shallowReactive, Transition, createVNode as _createVNode } from "vue";
|
|
18
22
|
import { makeArrayProp, createNamespace, truthProp } from "../utils/index.mjs";
|
|
19
23
|
import { Cell } from "../cell/index.mjs";
|
|
20
24
|
import { Icon } from "../icon/index.mjs";
|
|
25
|
+
import { Loading } from "../loading/index.mjs";
|
|
21
26
|
const [name, bem] = createNamespace("tree-select");
|
|
22
27
|
const treeSelectProps = {
|
|
23
28
|
items: makeArrayProp(),
|
|
@@ -28,20 +33,31 @@ const treeSelectProps = {
|
|
|
28
33
|
selectableParent: Boolean,
|
|
29
34
|
showParentSelect: Boolean,
|
|
30
35
|
showSelectLevels: Array,
|
|
31
|
-
showDivider: truthProp
|
|
36
|
+
showDivider: truthProp,
|
|
37
|
+
loadChildren: Function
|
|
32
38
|
};
|
|
33
39
|
var stdin_default = defineComponent({
|
|
34
40
|
name,
|
|
35
41
|
props: treeSelectProps,
|
|
36
|
-
emits: ["update:modelValue", "update:expandedKeys", "select", "expand"],
|
|
42
|
+
emits: ["update:modelValue", "update:expandedKeys", "select", "expand", "load", "load-error"],
|
|
37
43
|
setup(props, {
|
|
38
44
|
emit,
|
|
39
45
|
slots
|
|
40
46
|
}) {
|
|
41
47
|
const selectedKeys = computed(() => props.modelValue);
|
|
42
48
|
const expandedKeys = computed(() => props.expandedKeys);
|
|
49
|
+
const resolvedChildren = shallowReactive(/* @__PURE__ */ new Map());
|
|
50
|
+
const loadingKeys = shallowReactive(/* @__PURE__ */ new Set());
|
|
51
|
+
const loadedKeys = shallowReactive(/* @__PURE__ */ new Set());
|
|
43
52
|
const isExpanded = (id) => expandedKeys.value.includes(id);
|
|
44
53
|
const isSelected = (id) => selectedKeys.value.includes(id);
|
|
54
|
+
const isLoading = (id) => loadingKeys.has(id);
|
|
55
|
+
const getChildren = (item) => {
|
|
56
|
+
var _a;
|
|
57
|
+
return ((_a = item.children) == null ? void 0 : _a.length) ? item.children : resolvedChildren.get(item.id) || item.children || [];
|
|
58
|
+
};
|
|
59
|
+
const isLoadable = (item) => !!props.loadChildren && Array.isArray(item.children) && !item.children.length && !loadedKeys.has(item.id);
|
|
60
|
+
const isBranch = (item) => !!getChildren(item).length || isLoadable(item) || isLoading(item.id);
|
|
45
61
|
const isSelectionVisible = (hasChildren, level) => {
|
|
46
62
|
var _a;
|
|
47
63
|
const configuredVisibility = (_a = props.showSelectLevels) == null ? void 0 : _a[level];
|
|
@@ -53,10 +69,7 @@ var stdin_default = defineComponent({
|
|
|
53
69
|
paddingLeft: `calc(var(--van-padding-md) + ${level * 16}px)`,
|
|
54
70
|
"--van-tree-select-divider-left": `calc(var(--van-padding-md) + ${level * 16}px)`
|
|
55
71
|
});
|
|
56
|
-
const getDescendantIds = (item) =>
|
|
57
|
-
var _a;
|
|
58
|
-
return ((_a = item.children) == null ? void 0 : _a.flatMap((child) => [child.id, ...getDescendantIds(child)])) || [];
|
|
59
|
-
};
|
|
72
|
+
const getDescendantIds = (item) => getChildren(item).flatMap((child) => [child.id, ...getDescendantIds(child)]);
|
|
60
73
|
const getSelectionState = (item) => {
|
|
61
74
|
const descendantIds = getDescendantIds(item);
|
|
62
75
|
if (!props.cascade || !descendantIds.length) {
|
|
@@ -71,11 +84,11 @@ var stdin_default = defineComponent({
|
|
|
71
84
|
};
|
|
72
85
|
const syncParentSelection = (items, values) => {
|
|
73
86
|
items.forEach((item) => {
|
|
74
|
-
|
|
75
|
-
if (!
|
|
87
|
+
const children = getChildren(item);
|
|
88
|
+
if (!children.length)
|
|
76
89
|
return;
|
|
77
|
-
syncParentSelection(
|
|
78
|
-
const childIds =
|
|
90
|
+
syncParentSelection(children, values);
|
|
91
|
+
const childIds = children.map((child) => child.id);
|
|
79
92
|
const index = values.indexOf(item.id);
|
|
80
93
|
const allChildrenSelected = childIds.every((id) => values.includes(id));
|
|
81
94
|
if (allChildrenSelected && index === -1)
|
|
@@ -84,13 +97,45 @@ var stdin_default = defineComponent({
|
|
|
84
97
|
values.splice(index, 1);
|
|
85
98
|
});
|
|
86
99
|
};
|
|
87
|
-
const
|
|
100
|
+
const updateExpanded = (id, expanded) => {
|
|
88
101
|
const next = expandedKeys.value.slice();
|
|
89
102
|
const index = next.indexOf(id);
|
|
90
|
-
|
|
103
|
+
if (expanded && index === -1)
|
|
104
|
+
next.push(id);
|
|
105
|
+
if (!expanded && index !== -1)
|
|
106
|
+
next.splice(index, 1);
|
|
91
107
|
emit("update:expandedKeys", next);
|
|
92
|
-
emit("expand", id,
|
|
108
|
+
emit("expand", id, expanded);
|
|
93
109
|
};
|
|
110
|
+
const toggleExpanded = (item) => __async(this, null, function* () {
|
|
111
|
+
const {
|
|
112
|
+
id
|
|
113
|
+
} = item;
|
|
114
|
+
if (isLoading(id))
|
|
115
|
+
return;
|
|
116
|
+
if (isExpanded(id)) {
|
|
117
|
+
updateExpanded(id, false);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (isLoadable(item)) {
|
|
121
|
+
loadingKeys.add(id);
|
|
122
|
+
try {
|
|
123
|
+
const result = yield props.loadChildren(item);
|
|
124
|
+
const children = Array.isArray(result) ? result : [];
|
|
125
|
+
resolvedChildren.set(id, children);
|
|
126
|
+
loadedKeys.add(id);
|
|
127
|
+
emit("load", item, children);
|
|
128
|
+
if (children.length)
|
|
129
|
+
updateExpanded(id, true);
|
|
130
|
+
} catch (error) {
|
|
131
|
+
emit("load-error", item, error);
|
|
132
|
+
} finally {
|
|
133
|
+
loadingKeys.delete(id);
|
|
134
|
+
}
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
updateExpanded(id, true);
|
|
138
|
+
});
|
|
94
139
|
const updateSelected = (item, selected) => {
|
|
95
140
|
if (item.disabled || item.selectable === false)
|
|
96
141
|
return;
|
|
@@ -109,12 +154,13 @@ var stdin_default = defineComponent({
|
|
|
109
154
|
emit("select", item, selected);
|
|
110
155
|
};
|
|
111
156
|
const renderNodes = (items, level = 0) => items.map((item) => {
|
|
112
|
-
|
|
113
|
-
const hasChildren =
|
|
157
|
+
const children = getChildren(item);
|
|
158
|
+
const hasChildren = isBranch(item);
|
|
114
159
|
const expanded = isExpanded(item.id);
|
|
160
|
+
const loading = isLoading(item.id);
|
|
115
161
|
const renderTitle = () => {
|
|
116
|
-
var
|
|
117
|
-
return ((
|
|
162
|
+
var _a;
|
|
163
|
+
return ((_a = slots.title) == null ? void 0 : _a.call(slots, {
|
|
118
164
|
item,
|
|
119
165
|
level,
|
|
120
166
|
hasChildren
|
|
@@ -134,36 +180,29 @@ var stdin_default = defineComponent({
|
|
|
134
180
|
}
|
|
135
181
|
const selectable = item.selectable !== false && isSelectionVisible(hasChildren, level);
|
|
136
182
|
const selectionState = getSelectionState(item);
|
|
137
|
-
|
|
138
|
-
"key": item.id,
|
|
139
|
-
"class": bem("node")
|
|
140
|
-
}, [_createVNode(Cell, {
|
|
141
|
-
"class": bem("cell", {
|
|
142
|
-
branch: hasChildren
|
|
143
|
-
}),
|
|
144
|
-
"title": item.text,
|
|
145
|
-
"border": props.showDivider,
|
|
146
|
-
"style": getNodeStyle(level),
|
|
147
|
-
"rightSelect": selectable && selectionState !== "indeterminate" ? selectionState === "checked" : void 0,
|
|
148
|
-
"selectType": props.multiple ? "checkbox" : "radio",
|
|
149
|
-
"onUpdate:rightSelect": (value) => updateSelected(item, value)
|
|
150
|
-
}, __spreadValues({
|
|
183
|
+
const cellSlots = {
|
|
151
184
|
title: () => [hasChildren ? _createVNode("button", {
|
|
152
185
|
"type": "button",
|
|
153
186
|
"class": bem("expand-control"),
|
|
154
187
|
"disabled": item.disabled,
|
|
188
|
+
"aria-busy": loading,
|
|
189
|
+
"aria-disabled": loading,
|
|
155
190
|
"onClick": (event) => {
|
|
156
191
|
event.stopPropagation();
|
|
157
|
-
toggleExpanded(item
|
|
192
|
+
toggleExpanded(item);
|
|
158
193
|
}
|
|
159
|
-
}, [_createVNode(
|
|
194
|
+
}, [loading ? _createVNode(Loading, {
|
|
195
|
+
"class": bem("loading"),
|
|
196
|
+
"size": "var(--van-tree-select-arrow-size)"
|
|
197
|
+
}, null) : _createVNode(Icon, {
|
|
160
198
|
"name": "trangle-down",
|
|
161
199
|
"class": bem("arrow", {
|
|
162
200
|
expanded
|
|
163
201
|
})
|
|
164
202
|
}, null), _createVNode("span", null, [renderTitle()])]) : _createVNode("span", null, [renderTitle()])]
|
|
165
|
-
}
|
|
166
|
-
|
|
203
|
+
};
|
|
204
|
+
if (selectable && selectionState === "indeterminate") {
|
|
205
|
+
cellSlots["right-select"] = () => _createVNode("button", {
|
|
167
206
|
"type": "button",
|
|
168
207
|
"class": bem("indeterminate"),
|
|
169
208
|
"aria-label": `\u90E8\u5206\u9009\u4E2D${item.text}`,
|
|
@@ -171,13 +210,27 @@ var stdin_default = defineComponent({
|
|
|
171
210
|
event.stopPropagation();
|
|
172
211
|
updateSelected(item, true);
|
|
173
212
|
}
|
|
174
|
-
}, null)
|
|
175
|
-
}
|
|
213
|
+
}, null);
|
|
214
|
+
}
|
|
215
|
+
return _createVNode("div", {
|
|
216
|
+
"key": item.id,
|
|
217
|
+
"class": bem("node")
|
|
218
|
+
}, [_createVNode(Cell, {
|
|
219
|
+
"class": bem("cell", {
|
|
220
|
+
branch: hasChildren
|
|
221
|
+
}),
|
|
222
|
+
"title": item.text,
|
|
223
|
+
"border": props.showDivider,
|
|
224
|
+
"style": getNodeStyle(level),
|
|
225
|
+
"rightSelect": selectable && selectionState !== "indeterminate" ? selectionState === "checked" : void 0,
|
|
226
|
+
"selectType": props.multiple ? "checkbox" : "radio",
|
|
227
|
+
"onUpdate:rightSelect": (value) => updateSelected(item, value)
|
|
228
|
+
}, cellSlots), _createVNode(Transition, {
|
|
176
229
|
"name": "van-tree-select-expand"
|
|
177
230
|
}, {
|
|
178
231
|
default: () => [hasChildren && expanded && _createVNode("div", {
|
|
179
232
|
"class": bem("children")
|
|
180
|
-
}, [renderNodes(
|
|
233
|
+
}, [renderNodes(children, level + 1)])]
|
|
181
234
|
})]);
|
|
182
235
|
});
|
|
183
236
|
return () => _createVNode("div", {
|
package/es/tree-select/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--van-tree-select-indent: var(--van-padding-md);--van-tree-select-arrow-size: 16px;--van-tree-select-animation-duration: .24s;--van-tree-select-divider-left: var(--van-padding-md)}.van-tree-select{overflow:hidden;color:var(--van-cell-text-color);background:var(--van-white)}.van-tree-select__node{overflow:hidden}.van-tree-select__leaf{position:relative;box-sizing:border-box}.van-tree-select__leaf--divider:not(:last-child):after{position:absolute;right:var(--van-padding-md);bottom:0;left:var(--van-tree-select-divider-left);height:1px;background:var(--van-border-color);content:"";transform:scaleY(.5)}.van-tree-select__cell{min-height:44px;padding:10px var(--van-padding-md)}.van-tree-select__cell .van-cell__title-row{align-items:center}.van-tree-select__cell .van-cell__title{font-size:var(--van-font-size-md);line-height:22px}.van-tree-select__node:not(:last-child)>.van-tree-select__cell:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__cell--branch:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__arrow{flex:none;margin-right:var(--van-padding-base);color:var(--van-gray-5);font-size:var(--van-tree-select-arrow-size);transition:transform var(--van-tree-select-animation-duration) ease}.van-tree-select__arrow--expanded{transform:rotate(0)}.van-tree-select__arrow:not(.van-tree-select__arrow--expanded){transform:rotate(-90deg)}.van-tree-select__expand-control{display:inline-flex;align-items:center;padding:0;color:inherit;font:inherit;line-height:inherit;text-align:left;background:transparent;border:0}.van-tree-select__expand-control:not(:disabled){cursor:pointer}.van-tree-select__expand-control:disabled{color:var(--van-text-color-3);cursor:not-allowed}.van-tree-select__children{overflow:hidden}.van-tree-select__indeterminate{position:relative;display:block;width:14px;height:14px;padding:0;background:var(--van-primary-color);border:0;border-radius:50%}.van-tree-select__indeterminate:after{position:absolute;top:calc(50% - 1px);right:25%;left:25%;height:2px;content:"";background:var(--van-white);border-radius:1px}.van-tree-select-expand-enter-active,.van-tree-select-expand-leave-active{overflow:hidden;transition:max-height var(--van-tree-select-animation-duration) ease,opacity var(--van-tree-select-animation-duration) ease}.van-tree-select-expand-enter-from,.van-tree-select-expand-leave-to{max-height:0;opacity:0}.van-tree-select-expand-enter-to,.van-tree-select-expand-leave-from{max-height:1000px;opacity:1}
|
|
1
|
+
:root{--van-tree-select-indent: var(--van-padding-md);--van-tree-select-arrow-size: 16px;--van-tree-select-animation-duration: .24s;--van-tree-select-divider-left: var(--van-padding-md)}.van-tree-select{overflow:hidden;color:var(--van-cell-text-color);background:var(--van-white)}.van-tree-select__node{overflow:hidden}.van-tree-select__leaf{position:relative;box-sizing:border-box}.van-tree-select__leaf--divider:not(:last-child):after{position:absolute;right:var(--van-padding-md);bottom:0;left:var(--van-tree-select-divider-left);height:1px;background:var(--van-border-color);content:"";transform:scaleY(.5)}.van-tree-select__cell{min-height:44px;padding:10px var(--van-padding-md)}.van-tree-select__cell .van-cell__title-row{align-items:center}.van-tree-select__cell .van-cell__title{font-size:var(--van-font-size-md);line-height:22px}.van-tree-select__node:not(:last-child)>.van-tree-select__cell:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__cell--branch:not(.van-cell--borderless):after{display:block;left:var(--van-tree-select-divider-left)}.van-tree-select__arrow{flex:none;margin-right:var(--van-padding-base);color:var(--van-gray-5);font-size:var(--van-tree-select-arrow-size);transition:transform var(--van-tree-select-animation-duration) ease}.van-tree-select__arrow--expanded{transform:rotate(0)}.van-tree-select__arrow:not(.van-tree-select__arrow--expanded){transform:rotate(-90deg)}.van-tree-select__loading{flex:none;margin-right:var(--van-padding-base);color:var(--van-gray-5)}.van-tree-select__expand-control{display:inline-flex;align-items:center;padding:0;color:inherit;font:inherit;line-height:inherit;text-align:left;background:transparent;border:0}.van-tree-select__expand-control:not(:disabled){cursor:pointer}.van-tree-select__expand-control:disabled{color:var(--van-text-color-3);cursor:not-allowed}.van-tree-select__children{overflow:hidden}.van-tree-select__indeterminate{position:relative;display:block;width:14px;height:14px;padding:0;background:var(--van-primary-color);border:0;border-radius:50%}.van-tree-select__indeterminate:after{position:absolute;top:calc(50% - 1px);right:25%;left:25%;height:2px;content:"";background:var(--van-white);border-radius:1px}.van-tree-select-expand-enter-active,.van-tree-select-expand-leave-active{overflow:hidden;transition:max-height var(--van-tree-select-animation-duration) ease,opacity var(--van-tree-select-animation-duration) ease}.van-tree-select-expand-enter-from,.van-tree-select-expand-leave-to{max-height:0;opacity:0}.van-tree-select-expand-enter-to,.van-tree-select-expand-leave-from{max-height:1000px;opacity:1}
|
|
@@ -20,7 +20,8 @@ export declare const TreeSelect: import("../utils").WithInstall<import("vue").De
|
|
|
20
20
|
type: BooleanConstructor;
|
|
21
21
|
default: true;
|
|
22
22
|
};
|
|
23
|
-
|
|
23
|
+
loadChildren: import("vue").PropType<import("./TreeSelect").TreeSelectLoadChildren>;
|
|
24
|
+
}, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("select" | "update:modelValue" | "load" | "update:expandedKeys" | "expand" | "load-error")[], "select" | "update:modelValue" | "load" | "update:expandedKeys" | "expand" | "load-error", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
|
|
24
25
|
items: {
|
|
25
26
|
type: import("vue").PropType<import("./TreeSelect").TreeSelectItem[]>;
|
|
26
27
|
default: () => never[];
|
|
@@ -42,11 +43,14 @@ export declare const TreeSelect: import("../utils").WithInstall<import("vue").De
|
|
|
42
43
|
type: BooleanConstructor;
|
|
43
44
|
default: true;
|
|
44
45
|
};
|
|
46
|
+
loadChildren: import("vue").PropType<import("./TreeSelect").TreeSelectLoadChildren>;
|
|
45
47
|
}>> & {
|
|
48
|
+
onLoad?: ((...args: any[]) => any) | undefined;
|
|
46
49
|
onSelect?: ((...args: any[]) => any) | undefined;
|
|
47
50
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
48
51
|
"onUpdate:expandedKeys"?: ((...args: any[]) => any) | undefined;
|
|
49
52
|
onExpand?: ((...args: any[]) => any) | undefined;
|
|
53
|
+
"onLoad-error"?: ((...args: any[]) => any) | undefined;
|
|
50
54
|
}, {
|
|
51
55
|
modelValue: import("../utils").Numeric[];
|
|
52
56
|
multiple: boolean;
|
|
@@ -58,7 +62,7 @@ export declare const TreeSelect: import("../utils").WithInstall<import("vue").De
|
|
|
58
62
|
showDivider: boolean;
|
|
59
63
|
}>>;
|
|
60
64
|
export default TreeSelect;
|
|
61
|
-
export type { TreeSelectItem, TreeSelectChild, TreeSelectProps, } from './TreeSelect';
|
|
65
|
+
export type { TreeSelectItem, TreeSelectChild, TreeSelectLoadChildren, TreeSelectProps, } from './TreeSelect';
|
|
62
66
|
declare module 'vue' {
|
|
63
67
|
interface GlobalComponents {
|
|
64
68
|
VanTreeSelect: typeof TreeSelect;
|
|
@@ -66,6 +66,12 @@
|
|
|
66
66
|
&:not(.van-tree-select__arrow--expanded) { transform: rotate(-90deg); }
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
&__loading {
|
|
70
|
+
flex: none;
|
|
71
|
+
margin-right: var(--van-padding-base);
|
|
72
|
+
color: var(--van-gray-5);
|
|
73
|
+
}
|
|
74
|
+
|
|
69
75
|
&__expand-control {
|
|
70
76
|
display: inline-flex;
|
|
71
77
|
align-items: center;
|
|
@@ -2,6 +2,7 @@ import "../../style/base.css";
|
|
|
2
2
|
import "../../badge/index.css";
|
|
3
3
|
import "../../icon/index.css";
|
|
4
4
|
import "../../tag/index.css";
|
|
5
|
+
import "../../loading/index.css";
|
|
5
6
|
import "../../checkbox-group/index.css";
|
|
6
7
|
import "../../checkbox/index.css";
|
|
7
8
|
import "../../radio-group/index.css";
|
|
@@ -2,6 +2,7 @@ import "../../style/base.less";
|
|
|
2
2
|
import "../../badge/index.less";
|
|
3
3
|
import "../../icon/index.less";
|
|
4
4
|
import "../../tag/index.less";
|
|
5
|
+
import "../../loading/index.less";
|
|
5
6
|
import "../../checkbox-group/index.less";
|
|
6
7
|
import "../../checkbox/index.less";
|
|
7
8
|
import "../../radio-group/index.less";
|