sard-uniapp 1.24.6 → 1.24.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/components/action-sheet/action-sheet.d.ts +8 -1
- package/components/action-sheet/common.d.ts +99 -2
- package/components/alert/alert.d.ts +6 -0
- package/components/alert/common.d.ts +63 -1
- package/components/avatar/avatar.d.ts +8 -0
- package/components/avatar/common.d.ts +99 -1
- package/components/avatar-group/avatar-group.d.ts +6 -1
- package/components/avatar-group/common.d.ts +63 -2
- package/components/back-top/back-top.d.ts +4 -0
- package/components/back-top/common.d.ts +40 -1
- package/components/badge/badge.d.ts +7 -0
- package/components/badge/common.d.ts +99 -2
- package/components/button/button.d.ts +22 -0
- package/components/button/common.d.ts +960 -8
- package/components/calendar/calendar.d.ts +16 -1
- package/components/calendar/common.d.ts +360 -3
- package/components/calendar-input/calendar-input.d.ts +31 -2
- package/components/calendar-input/common.d.ts +1368 -7
- package/components/calendar-popout/calendar-popout.d.ts +22 -2
- package/components/calendar-popout/common.d.ts +675 -5
- package/components/cascader-input/cascader-input.d.ts +25 -0
- package/components/cascader-input/common.d.ts +783 -3
- package/components/cascader-popout/cascader-popout.d.ts +14 -0
- package/components/cascader-popout/common.d.ts +288 -2
- package/components/checkbox/checkbox.d.ts +11 -0
- package/components/checkbox/common.d.ts +323 -3
- package/components/checkbox-group/checkbox-group.d.ts +10 -0
- package/components/checkbox-input/checkbox-input.d.ts +28 -1
- package/components/checkbox-input/common.d.ts +960 -4
- package/components/checkbox-popout/checkbox-popout.d.ts +19 -1
- package/components/checkbox-popout/common.d.ts +460 -2
- package/components/config/index.d.ts +150 -482
- package/components/config/index.js +16 -34
- package/components/cool-icon/common.d.ts +63 -1
- package/components/cool-icon/cool-icon.d.ts +6 -0
- package/components/count-down/common.d.ts +48 -3
- package/components/count-down/count-down.d.ts +3 -0
- package/components/count-to/common.d.ts +35 -4
- package/components/count-to/count-to.d.ts +1 -0
- package/components/crop-image/common.d.ts +288 -4
- package/components/crop-image/crop-image.d.ts +12 -0
- package/components/crop-image-agent/common.d.ts +288 -5
- package/components/crop-image-agent/crop-image-agent.d.ts +11 -0
- package/components/datetime-picker/common.d.ts +120 -2
- package/components/datetime-picker/datetime-picker.d.ts +9 -1
- package/components/datetime-picker-input/common.d.ts +783 -4
- package/components/datetime-picker-input/datetime-picker-input.d.ts +23 -0
- package/components/datetime-picker-popout/common.d.ts +288 -3
- package/components/datetime-picker-popout/datetime-picker-popout.d.ts +13 -0
- package/components/datetime-range-picker/common.d.ts +143 -1
- package/components/datetime-range-picker/datetime-range-picker.d.ts +10 -0
- package/components/datetime-range-picker-input/common.d.ts +840 -3
- package/components/datetime-range-picker-input/datetime-range-picker-input.d.ts +25 -0
- package/components/datetime-range-picker-popout/common.d.ts +323 -2
- package/components/datetime-range-picker-popout/datetime-range-picker-popout.d.ts +15 -0
- package/components/dialog/common.d.ts +360 -6
- package/components/dialog/dialog.d.ts +16 -3
- package/components/dialog-agent/common.d.ts +1023 -7
- package/components/dialog-agent/dialog-agent.d.ts +28 -3
- package/components/divider/common.d.ts +48 -3
- package/components/divider/divider.d.ts +4 -1
- package/components/dropdown/common.d.ts +99 -5
- package/components/dropdown/dropdown.d.ts +7 -3
- package/components/empty/common.d.ts +48 -1
- package/components/empty/empty.d.ts +5 -0
- package/components/fab/common.d.ts +619 -7
- package/components/fab/fab.d.ts +20 -2
- package/components/floating-bubble/common.d.ts +153 -4
- package/components/floating-bubble/floating-bubble.d.ts +10 -1
- package/components/floating-panel/common.d.ts +63 -3
- package/components/floating-panel/floating-panel.d.ts +4 -0
- package/components/form/README.md +11 -12
- package/components/form/common.d.ts +304 -1
- package/components/form/form.d.ts +12 -1
- package/components/form-item/form-item.d.ts +15 -0
- package/components/form-item/useFormItem.d.ts +1 -1
- package/components/form-item-plain/form-item-plain.d.ts +15 -0
- package/components/form-item-plain/form-item-plain.vue +7 -3
- package/components/form-plain/common.d.ts +0 -1
- package/components/form-plain/form-plain.d.ts +12 -1
- package/components/grid/common.d.ts +99 -2
- package/components/grid/grid.d.ts +8 -1
- package/components/icon/common.d.ts +63 -3
- package/components/icon/icon.d.ts +5 -1
- package/components/indexes/common.d.ts +1 -0
- package/components/indexes/indexes.vue +2 -1
- package/components/input/common.d.ts +2400 -14
- package/components/input/input.d.ts +36 -2
- package/components/keyboard/common.d.ts +24 -2
- package/components/keyboard/keyboard.d.ts +2 -0
- package/components/list/common.d.ts +168 -1
- package/components/list-item/list-item.d.ts +11 -0
- package/components/loading/common.d.ts +117 -1
- package/components/loading/loading.d.ts +8 -0
- package/components/locale/lang/ar-SA.d.ts +2 -0
- package/components/locale/lang/ar-SA.js +2 -0
- package/components/locale/lang/en-US.d.ts +2 -0
- package/components/locale/lang/en-US.js +2 -0
- package/components/locale/lang/zh-CN.d.ts +2 -0
- package/components/locale/lang/zh-CN.js +2 -0
- package/components/marquee/common.d.ts +35 -3
- package/components/marquee/marquee.d.ts +2 -0
- package/components/notice-bar/common.d.ts +195 -4
- package/components/notice-bar/notice-bar.d.ts +10 -1
- package/components/notify/common.d.ts +143 -4
- package/components/notify/notify.d.ts +8 -1
- package/components/notify-agent/common.d.ts +483 -5
- package/components/notify-agent/notify-agent.d.ts +18 -1
- package/components/overlay/common.d.ts +63 -1
- package/components/overlay/overlay.d.ts +6 -0
- package/components/pagination/common.d.ts +143 -6
- package/components/pagination/pagination.d.ts +6 -1
- package/components/password-input/common.d.ts +168 -3
- package/components/password-input/password-input.d.ts +9 -0
- package/components/picker/common.d.ts +46 -1
- package/components/picker/picker.d.ts +5 -0
- package/components/picker-input/common.d.ts +599 -4
- package/components/picker-input/picker-input.d.ts +21 -1
- package/components/picker-popout/common.d.ts +181 -3
- package/components/picker-popout/picker-popout.d.ts +10 -0
- package/components/popout/common.d.ts +288 -6
- package/components/popout/popout.d.ts +11 -1
- package/components/popout-input/common.d.ts +181 -2
- package/components/popout-input/popout-input.d.ts +11 -0
- package/components/popover/common.d.ts +168 -7
- package/components/popover/popover.d.ts +8 -3
- package/components/popup/common.d.ts +168 -4
- package/components/popup/popup.d.ts +10 -2
- package/components/progress-bar/common.d.ts +143 -2
- package/components/progress-bar/progress-bar.d.ts +9 -0
- package/components/progress-circle/common.d.ts +80 -2
- package/components/progress-circle/progress-circle.d.ts +6 -0
- package/components/pull-down-refresh/common.d.ts +100 -8
- package/components/pull-down-refresh/pull-down-refresh.d.ts +3 -1
- package/components/qrcode/common.d.ts +168 -8
- package/components/qrcode/qrcode.d.ts +4 -0
- package/components/radio/common.d.ts +155 -2
- package/components/radio-group/radio-group.d.ts +10 -0
- package/components/radio-input/common.d.ts +869 -5
- package/components/radio-input/radio-input.d.ts +26 -1
- package/components/radio-popout/common.d.ts +397 -3
- package/components/radio-popout/radio-popout.d.ts +17 -1
- package/components/rate/common.d.ts +360 -4
- package/components/rate/rate.d.ts +15 -1
- package/components/read-more/common.d.ts +80 -1
- package/components/read-more/read-more.d.ts +7 -0
- package/components/resize-sensor/common.d.ts +24 -1
- package/components/resize-sensor/resize-sensor.d.ts +3 -0
- package/components/result/common.d.ts +80 -1
- package/components/result/result.d.ts +7 -0
- package/components/scroll-spy/README.md +9 -8
- package/components/scroll-spy/common.d.ts +1 -0
- package/components/scroll-spy/scroll-spy.vue +4 -2
- package/components/search/common.d.ts +224 -2
- package/components/search/search.d.ts +12 -0
- package/components/segmented/common.d.ts +131 -4
- package/components/segmented/segmented.d.ts +8 -1
- package/components/share-sheet/common.d.ts +120 -2
- package/components/share-sheet/share-sheet.d.ts +9 -1
- package/components/signature/common.d.ts +255 -7
- package/components/signature/signature.d.ts +9 -1
- package/components/skeleton/common.d.ts +120 -2
- package/components/skeleton/skeleton.d.ts +8 -0
- package/components/slider/common.d.ts +528 -4
- package/components/slider/slider.d.ts +18 -0
- package/components/space/common.d.ts +63 -2
- package/components/space/space.d.ts +5 -0
- package/components/status-bar/common.d.ts +24 -1
- package/components/status-bar/status-bar.d.ts +3 -0
- package/components/stepper/common.d.ts +360 -9
- package/components/stepper/stepper.d.ts +10 -1
- package/components/steps/common.d.ts +224 -8
- package/components/steps/steps.d.ts +6 -0
- package/components/swiper-dot/common.d.ts +63 -4
- package/components/swiper-dot/swiper-dot.d.ts +3 -0
- package/components/switch/common.d.ts +153 -3
- package/components/switch/switch.d.ts +10 -0
- package/components/tabbar/common.d.ts +80 -1
- package/components/tabbar/tabbar.d.ts +7 -0
- package/components/table/common.d.ts +35 -2
- package/components/table/table.d.ts +4 -1
- package/components/tabs/README.md +4 -3
- package/components/tabs/common.d.ts +49 -1
- package/components/tabs/index.scss +2 -1
- package/components/tabs/tabs.d.ts +5 -0
- package/components/tabs/tabs.vue +3 -1
- package/components/tag/common.d.ts +120 -2
- package/components/tag/tag.d.ts +8 -0
- package/components/toast/common.d.ts +120 -6
- package/components/toast/toast.d.ts +6 -2
- package/components/toast-agent/common.d.ts +440 -7
- package/components/toast-agent/toast-agent.d.ts +16 -2
- package/components/tree/README.md +34 -20
- package/components/tree/common.d.ts +391 -3
- package/components/tree/common.js +1 -0
- package/components/tree/index.scss +13 -0
- package/components/tree/tree.d.ts +16 -1
- package/components/tree/tree.vue +71 -22
- package/components/tree/variables.scss +4 -0
- package/components/tree-node/index.scss +6 -0
- package/components/tree-node/tree-node.vue +46 -12
- package/components/upload/common.d.ts +195 -1
- package/components/upload/upload.d.ts +13 -1
- package/components/upload-preview/upload-preview.d.ts +12 -0
- package/components/waterfall/common.d.ts +35 -3
- package/components/waterfall/waterfall.d.ts +2 -0
- package/components/watermark/common.d.ts +143 -5
- package/components/watermark/watermark.d.ts +7 -1
- package/package.json +1 -1
- package/use/useScrollSpy.js +5 -1
package/components/tree/tree.vue
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view :class="treeClass" :style="treeStyle">
|
|
3
|
+
<view v-if="lazy && !!load" :class="bem.e('load-status')">
|
|
4
|
+
<sar-loading v-if="loadStatus === 'loading'" />
|
|
5
|
+
<text
|
|
6
|
+
v-else-if="loadStatus === 'error'"
|
|
7
|
+
:class="bem.e('error')"
|
|
8
|
+
@click="onErrorClick"
|
|
9
|
+
>
|
|
10
|
+
{{ t('error') }}
|
|
11
|
+
</text>
|
|
12
|
+
<text v-else-if="loadStatus === 'loaded' && treeData.length === 0">
|
|
13
|
+
{{ t('noData') }}
|
|
14
|
+
</text>
|
|
15
|
+
</view>
|
|
3
16
|
<template v-for="(node, index) of treeData" :key="node.key">
|
|
4
17
|
<sar-tree-node v-if="node.visible" :index="index" :node="node" />
|
|
5
18
|
</template>
|
|
@@ -49,6 +62,7 @@ import {
|
|
|
49
62
|
} from "./common";
|
|
50
63
|
import SarTreeNode from "../tree-node/tree-node.vue";
|
|
51
64
|
import SarPopover from "../popover/popover.vue";
|
|
65
|
+
import SarLoading from "../loading/loading.vue";
|
|
52
66
|
import { usePopover } from "../popover";
|
|
53
67
|
import SarInput from "../input/input.vue";
|
|
54
68
|
import SarDialog from "../dialog/dialog.vue";
|
|
@@ -73,6 +87,8 @@ import { recurAncestor, recurDescendant, recurNodes } from "./utils";
|
|
|
73
87
|
* @property {boolean} editable 是否可编辑节点(增删改),默认值:false。
|
|
74
88
|
* @property {'lenient' | 'strict'} filterMode 节点过滤模式,默认值:'lenient'。
|
|
75
89
|
* @property {(value: string, node: TreeStateNode) => boolean} filterMethod 自定义过滤方法,默认值:-。
|
|
90
|
+
* @property {boolean} lazy 是否懒加载子节点,需与 load 方法结合使用,默认值:false。
|
|
91
|
+
* @property {(node?: TreeStateNode) => Promise<TreeNode[]> | TreeNode[]} load 加载子树数据的方法,仅当 lazy 属性为true 时生效,默认值:-。
|
|
76
92
|
* @event {(key: string | number, node: TreeStateNode) => void} update 选择节点后触发(单选)
|
|
77
93
|
* @event {(key: string | number, node: TreeStateNode) => void} select 选择节点后触发(单选)
|
|
78
94
|
* @event {(event: {checked: boolean; node: TreeStateNode}) => void} check 点击树节点复选框时触发
|
|
@@ -82,6 +98,7 @@ export default _defineComponent({
|
|
|
82
98
|
components: {
|
|
83
99
|
SarTreeNode,
|
|
84
100
|
SarPopover,
|
|
101
|
+
SarLoading,
|
|
85
102
|
SarInput,
|
|
86
103
|
SarDialog,
|
|
87
104
|
SarToast,
|
|
@@ -110,7 +127,9 @@ export default _defineComponent({
|
|
|
110
127
|
draggable: { type: Boolean, required: false },
|
|
111
128
|
editable: { type: Boolean, required: false },
|
|
112
129
|
filterMode: { type: String, required: false },
|
|
113
|
-
filterMethod: { type: Function, required: false }
|
|
130
|
+
filterMethod: { type: Function, required: false },
|
|
131
|
+
lazy: { type: Boolean, required: false },
|
|
132
|
+
load: { type: Function, required: false }
|
|
114
133
|
}, defaultTreeProps()),
|
|
115
134
|
emits: ["update:current", "select", "check", "node-click"],
|
|
116
135
|
setup(__props, { expose: __expose, emit: __emit }) {
|
|
@@ -124,7 +143,7 @@ export default _defineComponent({
|
|
|
124
143
|
const treeData = ref([]);
|
|
125
144
|
let treeMap = {};
|
|
126
145
|
const totalLevel = ref(0);
|
|
127
|
-
const
|
|
146
|
+
const toTreeStateNodes = (nodes, parent) => {
|
|
128
147
|
return nodes.map((node) => {
|
|
129
148
|
const key = node[fieldKeys.value.key] ?? uniqid();
|
|
130
149
|
const stateNode = reactive({
|
|
@@ -137,10 +156,13 @@ export default _defineComponent({
|
|
|
137
156
|
level: 0,
|
|
138
157
|
offsetLevel: 0,
|
|
139
158
|
visible: true,
|
|
140
|
-
disabled: !!node.disabled
|
|
159
|
+
disabled: !!node.disabled,
|
|
160
|
+
isLeaf: node[fieldKeys.value.isLeaf],
|
|
161
|
+
loadStatus: "idle",
|
|
162
|
+
depth: parent ? parent.depth + 1 : 0
|
|
141
163
|
});
|
|
142
164
|
if (node.children && node.children.length) {
|
|
143
|
-
stateNode.children =
|
|
165
|
+
stateNode.children = toTreeStateNodes(node.children, stateNode);
|
|
144
166
|
}
|
|
145
167
|
treeMap[key] = stateNode;
|
|
146
168
|
return stateNode;
|
|
@@ -388,17 +410,18 @@ export default _defineComponent({
|
|
|
388
410
|
};
|
|
389
411
|
const setRenderPosition = () => {
|
|
390
412
|
let count = 0;
|
|
391
|
-
function recur(nodes) {
|
|
413
|
+
function recur(nodes, parent) {
|
|
392
414
|
nodes.forEach((node) => {
|
|
415
|
+
node.depth = parent ? parent.depth + 1 : 0;
|
|
393
416
|
if (node.visible) {
|
|
394
417
|
node.level = count++;
|
|
395
418
|
}
|
|
396
419
|
if (node.children && node.expanded) {
|
|
397
|
-
recur(node.children);
|
|
420
|
+
recur(node.children, node);
|
|
398
421
|
}
|
|
399
422
|
});
|
|
400
423
|
}
|
|
401
|
-
recur(treeData.value);
|
|
424
|
+
recur(treeData.value, null);
|
|
402
425
|
totalLevel.value = count;
|
|
403
426
|
};
|
|
404
427
|
const toggleCheck = (node, checked) => {
|
|
@@ -408,22 +431,41 @@ export default _defineComponent({
|
|
|
408
431
|
node
|
|
409
432
|
});
|
|
410
433
|
};
|
|
434
|
+
const loadStatus = ref("loaded");
|
|
435
|
+
const initialize = async () => {
|
|
436
|
+
if (props.lazy && props.load) {
|
|
437
|
+
try {
|
|
438
|
+
loadStatus.value = "loading";
|
|
439
|
+
const data = await props.load();
|
|
440
|
+
loadStatus.value = "loaded";
|
|
441
|
+
initializeTree(data);
|
|
442
|
+
} catch {
|
|
443
|
+
loadStatus.value = "error";
|
|
444
|
+
}
|
|
445
|
+
} else {
|
|
446
|
+
initializeTree(props.data);
|
|
447
|
+
}
|
|
448
|
+
};
|
|
449
|
+
const initializeTree = (data) => {
|
|
450
|
+
treeData.value = toTreeStateNodes(data, null);
|
|
451
|
+
if (props.defaultCheckedKeys && props.defaultCheckedKeys.length > 0) {
|
|
452
|
+
setCheckedKeys(props.defaultCheckedKeys);
|
|
453
|
+
}
|
|
454
|
+
if (props.defaultExpandedKeys && props.defaultExpandedKeys.length > 0) {
|
|
455
|
+
setExpandedKeys(props.defaultExpandedKeys);
|
|
456
|
+
}
|
|
457
|
+
setRenderPosition();
|
|
458
|
+
};
|
|
459
|
+
const onErrorClick = () => {
|
|
460
|
+
initialize();
|
|
461
|
+
};
|
|
411
462
|
watch(
|
|
412
463
|
() => props.data,
|
|
413
464
|
() => {
|
|
414
|
-
|
|
415
|
-
if (props.defaultCheckedKeys && props.defaultCheckedKeys.length > 0) {
|
|
416
|
-
setCheckedKeys(props.defaultCheckedKeys);
|
|
417
|
-
}
|
|
418
|
-
if (props.defaultExpandedKeys && props.defaultExpandedKeys.length > 0) {
|
|
419
|
-
setExpandedKeys(props.defaultExpandedKeys);
|
|
420
|
-
}
|
|
421
|
-
setRenderPosition();
|
|
422
|
-
},
|
|
423
|
-
{
|
|
424
|
-
immediate: true
|
|
465
|
+
initializeTree(props.data);
|
|
425
466
|
}
|
|
426
467
|
);
|
|
468
|
+
initialize();
|
|
427
469
|
const popoverOptions = [
|
|
428
470
|
{ id: "sibling", icon: "plus", text: t("addSibling") },
|
|
429
471
|
{ id: "child", icon: "plus", text: t("addChild") },
|
|
@@ -482,7 +524,10 @@ export default _defineComponent({
|
|
|
482
524
|
level: 0,
|
|
483
525
|
offsetLevel: 0,
|
|
484
526
|
visible: true,
|
|
485
|
-
disabled: false
|
|
527
|
+
disabled: false,
|
|
528
|
+
isLeaf: false,
|
|
529
|
+
loadStatus: "idle",
|
|
530
|
+
depth: 0
|
|
486
531
|
});
|
|
487
532
|
switch (currentEditType.value) {
|
|
488
533
|
case "sibling":
|
|
@@ -568,6 +613,8 @@ export default _defineComponent({
|
|
|
568
613
|
singleSelectable: toRef(() => props.singleSelectable),
|
|
569
614
|
leafOnly: toRef(() => props.leafOnly),
|
|
570
615
|
treeData: toRef(() => treeData.value),
|
|
616
|
+
load: toRef(() => props.load),
|
|
617
|
+
lazy: toRef(() => props.lazy),
|
|
571
618
|
setExpandedByNode,
|
|
572
619
|
toggleExpandedByNode,
|
|
573
620
|
setCheckedByNode,
|
|
@@ -578,7 +625,9 @@ export default _defineComponent({
|
|
|
578
625
|
edit,
|
|
579
626
|
currentKey,
|
|
580
627
|
singleSelect,
|
|
581
|
-
nodeClick
|
|
628
|
+
nodeClick,
|
|
629
|
+
toTreeStateNodes,
|
|
630
|
+
setRenderPosition
|
|
582
631
|
});
|
|
583
632
|
provide(treeContextSymbol, context);
|
|
584
633
|
__expose({
|
|
@@ -609,11 +658,11 @@ export default _defineComponent({
|
|
|
609
658
|
return treeMap;
|
|
610
659
|
}, set treeMap(v) {
|
|
611
660
|
treeMap = v;
|
|
612
|
-
}, totalLevel,
|
|
661
|
+
}, totalLevel, toTreeStateNodes, setExpandedByNode, toggleExpandedByNode, setExpanded, toggleExpanded, setExpandedKeys, getExpandedKeys, setCheckedByNode, updateAncestorChecked, setCheckedKeys, setChecked, getCheckedKeys, getHalfCheckedKeys, prepend, append, appendRoot, before, after, remove, levelup, leveldown, drop, addRootNode, getCleanTreeData, setRenderPosition, toggleCheck, loadStatus, initialize, initializeTree, onErrorClick, popoverOptions, popover, get currentEditNode() {
|
|
613
662
|
return currentEditNode;
|
|
614
663
|
}, set currentEditNode(v) {
|
|
615
664
|
currentEditNode = v;
|
|
616
|
-
}, currentEditType, currentEditValue, mapEditTypeTitle, currentEditTitle, dialogVisible, toastVisible, onPopoverSelect, beforeClose, edit, focused, onVisibleHook, defaultFilterMethod, filter, currentKey, singleSelect, nodeClick, context, treeClass, treeStyle, SarTreeNode, SarPopover, SarInput, SarDialog, SarToast };
|
|
665
|
+
}, currentEditType, currentEditValue, mapEditTypeTitle, currentEditTitle, dialogVisible, toastVisible, onPopoverSelect, beforeClose, edit, focused, onVisibleHook, defaultFilterMethod, filter, currentKey, singleSelect, nodeClick, context, treeClass, treeStyle, SarTreeNode, SarPopover, SarLoading, SarInput, SarDialog, SarToast };
|
|
617
666
|
return __returned__;
|
|
618
667
|
}
|
|
619
668
|
});
|
|
@@ -4,6 +4,9 @@ page,
|
|
|
4
4
|
--sar-tree-border-color: var(--sar-border-color);
|
|
5
5
|
--sar-tree-bg: var(--sar-emphasis-bg);
|
|
6
6
|
--sar-tree-duration: var(--sar-duration);
|
|
7
|
+
--sar-tree-loading-size: var(--sar-text-base);
|
|
8
|
+
--sar-tree-loading-color: var(--sar-fourth-color);
|
|
9
|
+
--sar-tree-loading-margin-y: 20rpx;
|
|
7
10
|
|
|
8
11
|
--sar-tree-node-height: 80rpx;
|
|
9
12
|
--sar-tree-node-padding-x: 32rpx;
|
|
@@ -12,6 +15,7 @@ page,
|
|
|
12
15
|
--sar-tree-node-active-bg: var(--sar-active-bg);
|
|
13
16
|
--sar-tree-node-dragging-bg: var(--sar-mask-white-legible);
|
|
14
17
|
--sar-tree-node-dragging-shadow: var(--sar-shadow-dragging);
|
|
18
|
+
--sar-tree-node-loading-margin-right: 16rpx;
|
|
15
19
|
|
|
16
20
|
--sar-tree-toolbar-margin-right: -24rpx;
|
|
17
21
|
|
|
@@ -52,6 +52,12 @@
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
@include e(loading) {
|
|
56
|
+
margin-right: var(--sar-tree-node-loading-margin-right);
|
|
57
|
+
font-size: var(--sar-tree-loading-size);
|
|
58
|
+
color: var(--sar-tree-loading-color);
|
|
59
|
+
}
|
|
60
|
+
|
|
55
61
|
@include e(selection) {
|
|
56
62
|
@include universal;
|
|
57
63
|
margin: calc(var(--sar-tree-node-padding-y) * -1) 0
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
<view :class="arrowClass">
|
|
13
13
|
<sar-icon family="sari" name="right" />
|
|
14
14
|
</view>
|
|
15
|
+
<sar-loading
|
|
16
|
+
v-if="node.loadStatus === 'loading'"
|
|
17
|
+
:class="bem.e('loading')"
|
|
18
|
+
/>
|
|
15
19
|
<view
|
|
16
20
|
v-if="treeContext.selectable || canSingleSelectable"
|
|
17
21
|
:class="selectionClass"
|
|
@@ -75,7 +79,12 @@
|
|
|
75
79
|
</view>
|
|
76
80
|
|
|
77
81
|
<template
|
|
78
|
-
v-if="
|
|
82
|
+
v-if="
|
|
83
|
+
!isMergedLeaf &&
|
|
84
|
+
node.expanded &&
|
|
85
|
+
node.children &&
|
|
86
|
+
node.children.length > 0
|
|
87
|
+
"
|
|
79
88
|
>
|
|
80
89
|
<template v-for="(node, index) of node.children" :key="node.key">
|
|
81
90
|
<sar-tree-node v-if="node.visible" :index="index" :node="node" />
|
|
@@ -265,21 +274,46 @@ export default _defineComponent({
|
|
|
265
274
|
break;
|
|
266
275
|
}
|
|
267
276
|
};
|
|
268
|
-
const
|
|
269
|
-
|
|
277
|
+
const isMergedLeaf = computed(() => {
|
|
278
|
+
const { children, isLeaf } = props.node;
|
|
279
|
+
return treeContext.lazy && treeContext.load ? isLeaf : !children || children.length === 0;
|
|
270
280
|
});
|
|
271
|
-
const onNodeClick = (event) => {
|
|
272
|
-
|
|
273
|
-
|
|
281
|
+
const onNodeClick = async (event) => {
|
|
282
|
+
const node = props.node;
|
|
283
|
+
const { loadStatus, isLeaf } = node;
|
|
284
|
+
if (loadStatus === "loading") {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (treeContext.lazy && treeContext.load && !isLeaf && loadStatus === "idle") {
|
|
288
|
+
try {
|
|
289
|
+
node.loadStatus = "loading";
|
|
290
|
+
const treeNodes = await treeContext.load(node) || [];
|
|
291
|
+
node.loadStatus = "loaded";
|
|
292
|
+
node.children = treeContext.toTreeStateNodes(treeNodes, node);
|
|
293
|
+
if (node.children.length === 0) {
|
|
294
|
+
node.isLeaf = true;
|
|
295
|
+
} else {
|
|
296
|
+
treeContext.setRenderPosition();
|
|
297
|
+
if (node.checked) {
|
|
298
|
+
treeContext.setCheckedByNode(props.node, true);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
} catch {
|
|
302
|
+
node.loadStatus = "idle";
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
if (!isMergedLeaf.value) {
|
|
307
|
+
treeContext.toggleExpandedByNode(node);
|
|
274
308
|
}
|
|
275
309
|
if (canSingleSelectable.value && treeContext.leafOnly) {
|
|
276
|
-
treeContext.singleSelect(
|
|
310
|
+
treeContext.singleSelect(node);
|
|
277
311
|
}
|
|
278
|
-
treeContext.nodeClick(
|
|
312
|
+
treeContext.nodeClick(node, event);
|
|
279
313
|
};
|
|
280
314
|
const nodeActive = ref(false);
|
|
281
315
|
const onNodeTouchStart = () => {
|
|
282
|
-
if (!
|
|
316
|
+
if (!isMergedLeaf.value || canSingleSelectable.value && treeContext.leafOnly) {
|
|
283
317
|
nodeActive.value = true;
|
|
284
318
|
}
|
|
285
319
|
};
|
|
@@ -292,7 +326,7 @@ export default _defineComponent({
|
|
|
292
326
|
onNodeTouchEnd
|
|
293
327
|
);
|
|
294
328
|
const canSingleSelectable = computed(() => {
|
|
295
|
-
return treeContext.singleSelectable && (!treeContext.leafOnly ||
|
|
329
|
+
return treeContext.singleSelectable && (!treeContext.leafOnly || isMergedLeaf.value);
|
|
296
330
|
});
|
|
297
331
|
const isSingleChecked = computed(
|
|
298
332
|
() => props.node.key === treeContext.currentKey
|
|
@@ -353,7 +387,7 @@ export default _defineComponent({
|
|
|
353
387
|
return classNames(
|
|
354
388
|
bem.e("arrow"),
|
|
355
389
|
bem.em("arrow", "expanded", props.node.expanded),
|
|
356
|
-
bem.em("arrow", "is-leaf",
|
|
390
|
+
bem.em("arrow", "is-leaf", isMergedLeaf.value)
|
|
357
391
|
);
|
|
358
392
|
});
|
|
359
393
|
const selectionClass = computed(() => {
|
|
@@ -378,7 +412,7 @@ export default _defineComponent({
|
|
|
378
412
|
return obviousNodes;
|
|
379
413
|
}, set obviousNodes(v) {
|
|
380
414
|
obviousNodes = v;
|
|
381
|
-
}, onDragStart, onDragMove, onDragEnd, onDragSimulatedClickTouchStart, onDragSimulatedClickTouchEnd, onDragSimulatedPressTouchStart, onDragSimulatedPressTouchMove, onDragSimulatedPressTouchEnd, onDragTouchStart, onDragTouchMove, onDragTouchEnd, onDragMouseDown, dragId, popover, isLastNode, popoverOptions, onPopoverSelect,
|
|
415
|
+
}, onDragStart, onDragMove, onDragEnd, onDragSimulatedClickTouchStart, onDragSimulatedClickTouchEnd, onDragSimulatedPressTouchStart, onDragSimulatedPressTouchMove, onDragSimulatedPressTouchEnd, onDragTouchStart, onDragTouchMove, onDragTouchEnd, onDragMouseDown, dragId, popover, isLastNode, popoverOptions, onPopoverSelect, isMergedLeaf, onNodeClick, nodeActive, onNodeTouchStart, onNodeTouchEnd, onNodeMouseDown, canSingleSelectable, isSingleChecked, onSelectionTouchStart, onSelectionTouchEnd, onSelectionMouseDown, editId, getEditRect, onEditTouchStart, onEditTouchEnd, onEditMouseDown, nodeClass, nodeStyle, editClass, indentStyle, arrowClass, selectionClass, SarIcon, SarCheckbox, SarRadio, SarPopover };
|
|
382
416
|
return __returned__;
|
|
383
417
|
}
|
|
384
418
|
});
|
|
@@ -80,7 +80,201 @@ export interface UploadPreviewProps {
|
|
|
80
80
|
readonly?: boolean;
|
|
81
81
|
}
|
|
82
82
|
export declare const defaultUploadPreviewProps: {
|
|
83
|
-
|
|
83
|
+
rootStyle?: (string | false | ((props: {
|
|
84
|
+
rootStyle: StyleValue;
|
|
85
|
+
rootClass: string;
|
|
86
|
+
file: UploadFile;
|
|
87
|
+
url: string;
|
|
88
|
+
isImage: boolean;
|
|
89
|
+
isVideo: boolean;
|
|
90
|
+
status: UploadStatus;
|
|
91
|
+
name: string;
|
|
92
|
+
message: string;
|
|
93
|
+
removable: boolean;
|
|
94
|
+
index: number;
|
|
95
|
+
disabled: boolean;
|
|
96
|
+
readonly: boolean;
|
|
97
|
+
}) => string | false | import("vue").CSSProperties | StyleValue[]) | null) | undefined;
|
|
98
|
+
rootClass?: (string | ((props: {
|
|
99
|
+
rootStyle: StyleValue;
|
|
100
|
+
rootClass: string;
|
|
101
|
+
file: UploadFile;
|
|
102
|
+
url: string;
|
|
103
|
+
isImage: boolean;
|
|
104
|
+
isVideo: boolean;
|
|
105
|
+
status: UploadStatus;
|
|
106
|
+
name: string;
|
|
107
|
+
message: string;
|
|
108
|
+
removable: boolean;
|
|
109
|
+
index: number;
|
|
110
|
+
disabled: boolean;
|
|
111
|
+
readonly: boolean;
|
|
112
|
+
}) => string)) | undefined;
|
|
113
|
+
file?: ((props: {
|
|
114
|
+
rootStyle: StyleValue;
|
|
115
|
+
rootClass: string;
|
|
116
|
+
file: UploadFile;
|
|
117
|
+
url: string;
|
|
118
|
+
isImage: boolean;
|
|
119
|
+
isVideo: boolean;
|
|
120
|
+
status: UploadStatus;
|
|
121
|
+
name: string;
|
|
122
|
+
message: string;
|
|
123
|
+
removable: boolean;
|
|
124
|
+
index: number;
|
|
125
|
+
disabled: boolean;
|
|
126
|
+
readonly: boolean;
|
|
127
|
+
}) => UploadFile) | undefined;
|
|
128
|
+
url?: (string | ((props: {
|
|
129
|
+
rootStyle: StyleValue;
|
|
130
|
+
rootClass: string;
|
|
131
|
+
file: UploadFile;
|
|
132
|
+
url: string;
|
|
133
|
+
isImage: boolean;
|
|
134
|
+
isVideo: boolean;
|
|
135
|
+
status: UploadStatus;
|
|
136
|
+
name: string;
|
|
137
|
+
message: string;
|
|
138
|
+
removable: boolean;
|
|
139
|
+
index: number;
|
|
140
|
+
disabled: boolean;
|
|
141
|
+
readonly: boolean;
|
|
142
|
+
}) => string)) | undefined;
|
|
143
|
+
isImage?: (boolean | ((props: {
|
|
144
|
+
rootStyle: StyleValue;
|
|
145
|
+
rootClass: string;
|
|
146
|
+
file: UploadFile;
|
|
147
|
+
url: string;
|
|
148
|
+
isImage: boolean;
|
|
149
|
+
isVideo: boolean;
|
|
150
|
+
status: UploadStatus;
|
|
151
|
+
name: string;
|
|
152
|
+
message: string;
|
|
153
|
+
removable: boolean;
|
|
154
|
+
index: number;
|
|
155
|
+
disabled: boolean;
|
|
156
|
+
readonly: boolean;
|
|
157
|
+
}) => boolean)) | undefined;
|
|
158
|
+
isVideo?: (boolean | ((props: {
|
|
159
|
+
rootStyle: StyleValue;
|
|
160
|
+
rootClass: string;
|
|
161
|
+
file: UploadFile;
|
|
162
|
+
url: string;
|
|
163
|
+
isImage: boolean;
|
|
164
|
+
isVideo: boolean;
|
|
165
|
+
status: UploadStatus;
|
|
166
|
+
name: string;
|
|
167
|
+
message: string;
|
|
168
|
+
removable: boolean;
|
|
169
|
+
index: number;
|
|
170
|
+
disabled: boolean;
|
|
171
|
+
readonly: boolean;
|
|
172
|
+
}) => boolean)) | undefined;
|
|
173
|
+
status?: (UploadStatus | ((props: {
|
|
174
|
+
rootStyle: StyleValue;
|
|
175
|
+
rootClass: string;
|
|
176
|
+
file: UploadFile;
|
|
177
|
+
url: string;
|
|
178
|
+
isImage: boolean;
|
|
179
|
+
isVideo: boolean;
|
|
180
|
+
status: UploadStatus;
|
|
181
|
+
name: string;
|
|
182
|
+
message: string;
|
|
183
|
+
removable: boolean;
|
|
184
|
+
index: number;
|
|
185
|
+
disabled: boolean;
|
|
186
|
+
readonly: boolean;
|
|
187
|
+
}) => "done" | "pending" | "uploading" | "failed")) | undefined;
|
|
188
|
+
name?: (string | ((props: {
|
|
189
|
+
rootStyle: StyleValue;
|
|
190
|
+
rootClass: string;
|
|
191
|
+
file: UploadFile;
|
|
192
|
+
url: string;
|
|
193
|
+
isImage: boolean;
|
|
194
|
+
isVideo: boolean;
|
|
195
|
+
status: UploadStatus;
|
|
196
|
+
name: string;
|
|
197
|
+
message: string;
|
|
198
|
+
removable: boolean;
|
|
199
|
+
index: number;
|
|
200
|
+
disabled: boolean;
|
|
201
|
+
readonly: boolean;
|
|
202
|
+
}) => string)) | undefined;
|
|
203
|
+
message?: (string | ((props: {
|
|
204
|
+
rootStyle: StyleValue;
|
|
205
|
+
rootClass: string;
|
|
206
|
+
file: UploadFile;
|
|
207
|
+
url: string;
|
|
208
|
+
isImage: boolean;
|
|
209
|
+
isVideo: boolean;
|
|
210
|
+
status: UploadStatus;
|
|
211
|
+
name: string;
|
|
212
|
+
message: string;
|
|
213
|
+
removable: boolean;
|
|
214
|
+
index: number;
|
|
215
|
+
disabled: boolean;
|
|
216
|
+
readonly: boolean;
|
|
217
|
+
}) => string)) | undefined;
|
|
218
|
+
removable?: (boolean | ((props: {
|
|
219
|
+
rootStyle: StyleValue;
|
|
220
|
+
rootClass: string;
|
|
221
|
+
file: UploadFile;
|
|
222
|
+
url: string;
|
|
223
|
+
isImage: boolean;
|
|
224
|
+
isVideo: boolean;
|
|
225
|
+
status: UploadStatus;
|
|
226
|
+
name: string;
|
|
227
|
+
message: string;
|
|
228
|
+
removable: boolean;
|
|
229
|
+
index: number;
|
|
230
|
+
disabled: boolean;
|
|
231
|
+
readonly: boolean;
|
|
232
|
+
}) => boolean)) | undefined;
|
|
233
|
+
index?: (number | ((props: {
|
|
234
|
+
rootStyle: StyleValue;
|
|
235
|
+
rootClass: string;
|
|
236
|
+
file: UploadFile;
|
|
237
|
+
url: string;
|
|
238
|
+
isImage: boolean;
|
|
239
|
+
isVideo: boolean;
|
|
240
|
+
status: UploadStatus;
|
|
241
|
+
name: string;
|
|
242
|
+
message: string;
|
|
243
|
+
removable: boolean;
|
|
244
|
+
index: number;
|
|
245
|
+
disabled: boolean;
|
|
246
|
+
readonly: boolean;
|
|
247
|
+
}) => number)) | undefined;
|
|
248
|
+
disabled?: (boolean | ((props: {
|
|
249
|
+
rootStyle: StyleValue;
|
|
250
|
+
rootClass: string;
|
|
251
|
+
file: UploadFile;
|
|
252
|
+
url: string;
|
|
253
|
+
isImage: boolean;
|
|
254
|
+
isVideo: boolean;
|
|
255
|
+
status: UploadStatus;
|
|
256
|
+
name: string;
|
|
257
|
+
message: string;
|
|
258
|
+
removable: boolean;
|
|
259
|
+
index: number;
|
|
260
|
+
disabled: boolean;
|
|
261
|
+
readonly: boolean;
|
|
262
|
+
}) => boolean)) | undefined;
|
|
263
|
+
readonly?: (boolean | ((props: {
|
|
264
|
+
rootStyle: StyleValue;
|
|
265
|
+
rootClass: string;
|
|
266
|
+
file: UploadFile;
|
|
267
|
+
url: string;
|
|
268
|
+
isImage: boolean;
|
|
269
|
+
isVideo: boolean;
|
|
270
|
+
status: UploadStatus;
|
|
271
|
+
name: string;
|
|
272
|
+
message: string;
|
|
273
|
+
removable: boolean;
|
|
274
|
+
index: number;
|
|
275
|
+
disabled: boolean;
|
|
276
|
+
readonly: boolean;
|
|
277
|
+
}) => boolean)) | undefined;
|
|
84
278
|
};
|
|
85
279
|
export interface UploadPreviewEmits {
|
|
86
280
|
(e: 'image-click'): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type UploadProps, type UploadSlots, type UploadFile, type UploadFileItem } from './common';
|
|
1
|
+
import { type UploadProps, type UploadSlots, type UploadFile, type UploadFileItem, type UploadSelectOptions } from './common';
|
|
2
2
|
declare function __VLS_template(): Readonly<UploadSlots> & UploadSlots;
|
|
3
3
|
declare const __VLS_component: import("vue").DefineComponent<UploadProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
4
4
|
"update:model-value": (value: UploadFileItem[]) => any;
|
|
@@ -11,11 +11,23 @@ declare const __VLS_component: import("vue").DefineComponent<UploadProps, {}, {}
|
|
|
11
11
|
onRemove?: ((index: number, item: UploadFileItem) => any) | undefined;
|
|
12
12
|
"onItem-click"?: ((item: UploadFileItem, index: number) => any) | undefined;
|
|
13
13
|
}>, {
|
|
14
|
+
multiple: boolean;
|
|
15
|
+
rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
|
|
16
|
+
rootClass: string;
|
|
17
|
+
modelValue: UploadFileItem[];
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
readonly: boolean;
|
|
14
20
|
validateEvent: boolean;
|
|
21
|
+
camera: "back" | "front";
|
|
15
22
|
maxDuration: number;
|
|
16
23
|
maxCount: number;
|
|
17
24
|
maxSize: number | ((file: UploadFile) => boolean);
|
|
25
|
+
overSize: (fileItem: UploadFileItem[]) => void;
|
|
26
|
+
beforeChoose: (fileList: UploadFileItem[], next: (allowed: boolean | UploadSelectOptions) => void) => void;
|
|
27
|
+
beforeRead: (file: UploadFile) => boolean | Promise<UploadFile>;
|
|
28
|
+
afterRead: (fileItem: UploadFileItem) => void;
|
|
18
29
|
removable: boolean;
|
|
30
|
+
beforeRemove: (index: number, fileItem: UploadFileItem) => boolean | Promise<void>;
|
|
19
31
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
20
32
|
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
|
|
21
33
|
export default _default;
|
|
@@ -8,6 +8,18 @@ declare const _default: import("vue").DefineComponent<UploadPreviewProps, {}, {}
|
|
|
8
8
|
onRemove?: (() => any) | undefined;
|
|
9
9
|
"onImage-click"?: (() => any) | undefined;
|
|
10
10
|
}>, {
|
|
11
|
+
file: import("../upload/common").UploadFile;
|
|
12
|
+
name: string;
|
|
13
|
+
url: string;
|
|
14
|
+
rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
|
|
15
|
+
rootClass: string;
|
|
16
|
+
message: string;
|
|
11
17
|
status: import("../upload/common").UploadStatus;
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
readonly: boolean;
|
|
20
|
+
index: number;
|
|
21
|
+
isImage: boolean;
|
|
22
|
+
isVideo: boolean;
|
|
23
|
+
removable: boolean;
|
|
12
24
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
13
25
|
export default _default;
|
|
@@ -8,9 +8,41 @@ export interface WaterfallProps {
|
|
|
8
8
|
rowGap?: number;
|
|
9
9
|
}
|
|
10
10
|
export declare const defaultWaterfallProps: {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
rootStyle?: (string | false | ((props: {
|
|
12
|
+
rootStyle: StyleValue;
|
|
13
|
+
rootClass: string;
|
|
14
|
+
columns: number;
|
|
15
|
+
columnGap: number;
|
|
16
|
+
rowGap: number;
|
|
17
|
+
}) => string | false | import("vue").CSSProperties | StyleValue[]) | null) | undefined;
|
|
18
|
+
rootClass?: (string | ((props: {
|
|
19
|
+
rootStyle: StyleValue;
|
|
20
|
+
rootClass: string;
|
|
21
|
+
columns: number;
|
|
22
|
+
columnGap: number;
|
|
23
|
+
rowGap: number;
|
|
24
|
+
}) => string)) | undefined;
|
|
25
|
+
columns?: (number | ((props: {
|
|
26
|
+
rootStyle: StyleValue;
|
|
27
|
+
rootClass: string;
|
|
28
|
+
columns: number;
|
|
29
|
+
columnGap: number;
|
|
30
|
+
rowGap: number;
|
|
31
|
+
}) => number)) | undefined;
|
|
32
|
+
columnGap?: (number | ((props: {
|
|
33
|
+
rootStyle: StyleValue;
|
|
34
|
+
rootClass: string;
|
|
35
|
+
columns: number;
|
|
36
|
+
columnGap: number;
|
|
37
|
+
rowGap: number;
|
|
38
|
+
}) => number)) | undefined;
|
|
39
|
+
rowGap?: (number | ((props: {
|
|
40
|
+
rootStyle: StyleValue;
|
|
41
|
+
rootClass: string;
|
|
42
|
+
columns: number;
|
|
43
|
+
columnGap: number;
|
|
44
|
+
rowGap: number;
|
|
45
|
+
}) => number)) | undefined;
|
|
14
46
|
};
|
|
15
47
|
export interface WaterfallSlots {
|
|
16
48
|
default?(props: Record<string, never>): any;
|
|
@@ -10,6 +10,8 @@ declare const __VLS_component: import("vue").DefineComponent<WaterfallProps, {
|
|
|
10
10
|
onLoad?: (() => any) | undefined;
|
|
11
11
|
onLoadstart?: (() => any) | undefined;
|
|
12
12
|
}>, {
|
|
13
|
+
rootStyle: string | false | import("vue").CSSProperties | import("vue").StyleValue[] | null;
|
|
14
|
+
rootClass: string;
|
|
13
15
|
columns: number;
|
|
14
16
|
columnGap: number;
|
|
15
17
|
rowGap: number;
|