Skip to content

Commit 70f2ac4

Browse files
authored
feat(TreeSelect): support customValue props (#3400)
1 parent 81033f2 commit 70f2ac4

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

src/tree-select/tree-select.ts

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,14 @@ export default class TreeSelect extends SuperComponent {
2929
scrollIntoView: null,
3030
};
3131

32-
properties = props;
32+
properties = {
33+
...props,
34+
customValue: {
35+
// 用于自定义选中值,优先级高于value,用于弥补value为[]场景
36+
type: null,
37+
value: null,
38+
},
39+
};
3340

3441
controlledProps = [
3542
{
@@ -39,7 +46,7 @@ export default class TreeSelect extends SuperComponent {
3946
];
4047

4148
observers = {
42-
'value, options, keys, multiple'() {
49+
'value, customValue, options, keys, multiple'() {
4350
this.buildTreeOptions();
4451
},
4552
};
@@ -52,9 +59,8 @@ export default class TreeSelect extends SuperComponent {
5259

5360
methods = {
5461
buildTreeOptions() {
55-
const { options, value, multiple, keys } = this.data;
62+
const { options, value, defaultValue, customValue, multiple, keys } = this.data;
5663
const treeOptions = [];
57-
const innerValue = [];
5864

5965
let level = -1;
6066
let node = { children: options };
@@ -68,7 +74,7 @@ export default class TreeSelect extends SuperComponent {
6874
value: item[keys?.value || 'value'],
6975
children: item.children,
7076
}));
71-
const thisValue = value?.[level];
77+
const thisValue = customValue?.[level] || value?.[level];
7278

7379
treeOptions.push([...list]);
7480

@@ -83,33 +89,34 @@ export default class TreeSelect extends SuperComponent {
8389

8490
const leafLevel = Math.max(0, level);
8591

86-
treeOptions?.forEach((ele, idx) => {
87-
const v = idx === treeOptions.length - 1 && multiple ? [ele[0].value] : ele[0].value;
88-
innerValue.push(value?.[idx] || v);
89-
});
90-
9192
if (multiple) {
92-
const finalValue = this.data.value || this.data.defaultValue;
93+
const finalValue = customValue || value || defaultValue;
9394
if (finalValue[leafLevel] != null && !Array.isArray(finalValue[leafLevel])) {
9495
throw TypeError('应传入数组类型的 value');
9596
}
9697
}
9798

9899
this.setData({
99-
innerValue,
100+
innerValue:
101+
customValue ||
102+
treeOptions?.map((ele, idx) => {
103+
const v = idx === treeOptions.length - 1 && multiple ? [ele[0].value] : ele[0].value;
104+
return value?.[idx] || v;
105+
}),
100106
leafLevel,
101107
treeOptions,
102108
});
103109
},
104110

105111
getScrollIntoView(status: string) {
106-
const { value, scrollIntoView } = this.data;
112+
const { value, customValue, scrollIntoView } = this.data;
107113
if (status === 'init') {
108-
const scrollIntoView = Array.isArray(value)
109-
? value.map((item) => {
114+
const _value = customValue || value;
115+
const scrollIntoView = Array.isArray(_value)
116+
? _value.map((item) => {
110117
return Array.isArray(item) ? item[0] : item;
111118
})
112-
: [value];
119+
: [_value];
113120
this.setData({
114121
scrollIntoView,
115122
});

src/tree-select/tree-select.wxml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
<t-checkbox-group
6363
wx:else
6464
class="{{classPrefix}}__checkbox {{prefix}}-class-right-column"
65-
value="{{innerValue[level]}}"
65+
value="{{innerValue[level] || []}}"
6666
bind:change="handleRadioChange"
6767
data-level="{{level}}"
6868
>

0 commit comments

Comments
 (0)