hw-cus-ui 1.1.21 → 1.1.23
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/HwPickerTree/HwPickerTree.vue +160 -184
- package/HwPickerTree/index.ts +10 -12
- package/index.d.ts +1 -4
- package/package.json +2 -2
- package/HwPickerTree/HwPickerTree.d.ts +0 -84
|
@@ -90,144 +90,119 @@
|
|
|
90
90
|
</view>
|
|
91
91
|
</template>
|
|
92
92
|
|
|
93
|
-
<script setup>
|
|
93
|
+
<script lang="ts" setup>
|
|
94
94
|
import { ref, onMounted, watch, nextTick } from 'vue';
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
},
|
|
175
|
-
confirmColor: {
|
|
176
|
-
// 确定按钮颜色
|
|
177
|
-
type: String,
|
|
178
|
-
default: '#007aff' // #1facac
|
|
179
|
-
},
|
|
180
|
-
cancelColor: {
|
|
181
|
-
// 取消按钮颜色
|
|
182
|
-
type: String,
|
|
183
|
-
default: '#757575' // #757575
|
|
184
|
-
},
|
|
185
|
-
titleColor: {
|
|
186
|
-
// 标题颜色
|
|
187
|
-
type: String,
|
|
188
|
-
default: '#757575' // #757575
|
|
189
|
-
},
|
|
190
|
-
currentIcon: {
|
|
191
|
-
// 展开时候的ic
|
|
192
|
-
type: String,
|
|
193
|
-
default:
|
|
194
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ0QTM0MzQ1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ0QTM0MzU1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRDRBMzQzMjVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDRBMzQzMzVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PidwepsAAAK0SURBVHja7JxbTsJAFIYHww7ciStgCeoGvGxAiOsgURegoL5720AXYLiIr0aJviq3Zx3PhIEnKG3ndtr+f3KixrSUj/ZjzjClIqUUiFm2gAAQAREQEUAEREAERAQQAREQAREBREAEREBEEqa67h9RFDWllDv0awWYlqlQHmu1WjMRRMoV1QFttA12y3xRtdNczq8EsE4/f8FumX2q77ROvNXk8UGMEKdUz6tYJHljaZAbuyUH+UR1to5BEohTuqwPCeS4pAA/qY6o/kyHOAMCeRK3owJnj+rH1jjxhqpVsstaebCz6TmnHWyXyY+xHjSBWBY/bvSgadtXBj9u9KCN3rnIfkzkQVsTEEX0Y2IP2oKo/HhMICcFAThUcwVZNGU6FdbX/XURzkbVF4+ybGhjPrFdgP66QdXNurGtSdk6Xdb9nAJ8oDo3OQlsQZzkdPw41ONBo6vI5scDefRjZg+6gpg3Pxp50CXEvPjR2IOuIXL3oxUPuobI3Y9WPOgDIlc/WvOgL4iL/vqFCcD7LH0xB4hj7cfQ/fWH9qCT+FhG0tN+DBk1PzjOM0SVllixcsBT1AvYc/kAPhc0hRg/3uvxoCgKRN9+dOrBUBB9+9GpB0NC9OVH5x4MDdG1H714kANEV3705kEOEBf9dcPi/lQnsuvLg1wgSu3Ha0v7Uh4MMgUXeuG71H407a+VBy9CPQkOdw+MtB+nGbd/D+FBbhBNxo9SjwcngJjNj0E9yBFiFj8G9SBXiGn8GNyDnCEm8SMLD3KHGOdHNh7kDjHOj2w8mAeIi/5arX+c6b/fxHz9oADEdGdjR/fXCw/OOB5oVfCOgnepz8IB14PMw03jCmTE+QBx5z0gAmKSqK9OUF+hcAeIhu/QYr4Qie8rjW83hhMBERARQAREQAREBBABERCLnH8BBgA+TQI7U4t53AAAAABJRU5ErkJggg=='
|
|
195
|
-
},
|
|
196
|
-
defaultIcon: {
|
|
197
|
-
// 折叠时候的ic
|
|
198
|
-
type: String,
|
|
199
|
-
default:
|
|
200
|
-
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAACE0lEQVR4Xu3c200DMRCF4XEltJAOkEugA+ggpUAHoQMqiFMCdEAJUMEiS4mEELlIO7bPOeN9i6K1rG/952myyea1WiCtXmEuYBPR4RBMxInoIOCwhOtJLKVszWyXc/5y2BvNEq6I+/3+kFK6M7OHnPM7jcLKjbZAvD/uaZtzflm5P4rbWyJWgDcze1LPuzVihfxUz7sH4ilJ2bx7Isrm3RtRMu8RiHJ5j0SUyXs0okTeCIj0eSMh0uaNhkiZNyIiXd7IiDR5oyNS5M2ACJ83EyJs3myIkHkzIsLlzYwIkzc7IkTeCojD81ZCHJa3GuKQvBURu+etjNgtb3XELnlHQGyedyTEZnlHQ2ySd0RE97wjI7rlHR3RJe+JeIrbLOecD6ePpZQ6W1kn2epo4MUrPOKyLN8ppYq1+y1VStncOjIdGnFZlo+U0uOtWOeOY2TE12Ouq//pEA7xXL7XfvcufR8K0Svfv6CREN3yDYfYIt9QiK3yjYTYLF95xB75SiP2ylcZsVu+cogj8pVCHJWvEuKwfOkREfKlRkTJlxkRJl86RMR8qRBR82VChM0XHpEhX2hElnyREWnyhUNkzBcKkTVfJETafIcjKuQ7FFEl35GIMvl2R1TMtyuiar49EWXzbY5oZpv/hibXTF2h3+s60FRKeT6+3TjMS3nrA3ZFRD8xrfY3ER1kJ+JEdBBwWGKeRAfEH1wS5WFZSDB/AAAAAElFTkSuQmCC'
|
|
201
|
-
},
|
|
202
|
-
lastIcon: {
|
|
203
|
-
// 没有子集的ic
|
|
204
|
-
type: String,
|
|
205
|
-
default: ''
|
|
206
|
-
}
|
|
96
|
+
// 树节点接口
|
|
97
|
+
interface TreeNode {
|
|
98
|
+
id: string | number;
|
|
99
|
+
name: string;
|
|
100
|
+
value?: any;
|
|
101
|
+
children?: TreeNode[];
|
|
102
|
+
[key: string]: any;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// 树列表项接口
|
|
106
|
+
interface TreeListItem {
|
|
107
|
+
id: string | number;
|
|
108
|
+
name: string;
|
|
109
|
+
value: any;
|
|
110
|
+
source: any;
|
|
111
|
+
parentId: (string | number)[];
|
|
112
|
+
parents: any[];
|
|
113
|
+
rank: number;
|
|
114
|
+
showChild: boolean;
|
|
115
|
+
open: boolean;
|
|
116
|
+
show: boolean;
|
|
117
|
+
hideArr: (string | number | null)[];
|
|
118
|
+
orChecked: boolean;
|
|
119
|
+
checked: boolean;
|
|
120
|
+
childNum: number;
|
|
121
|
+
lastRank?: boolean;
|
|
122
|
+
children?: TreeListItem[];
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Props 接口
|
|
126
|
+
interface PickerTreeProps {
|
|
127
|
+
range: TreeNode[];
|
|
128
|
+
rangeNext: TreeNode[];
|
|
129
|
+
request?: ((params: { pageSize: number; pageNum: number; resourceC: string }) => Promise<{ rows: any[]; total?: number }>) | null;
|
|
130
|
+
idKey: string;
|
|
131
|
+
modelValue: string | string[];
|
|
132
|
+
nameKey: string;
|
|
133
|
+
allKey: string;
|
|
134
|
+
placeholder: string;
|
|
135
|
+
title: string;
|
|
136
|
+
multiple: boolean;
|
|
137
|
+
isSearch: boolean;
|
|
138
|
+
disabled: boolean;
|
|
139
|
+
cascade: boolean;
|
|
140
|
+
isShowLabel: boolean;
|
|
141
|
+
selectParent: boolean;
|
|
142
|
+
foldAll: boolean;
|
|
143
|
+
confirmColor: string;
|
|
144
|
+
cancelColor: string;
|
|
145
|
+
titleColor: string;
|
|
146
|
+
currentIcon: string;
|
|
147
|
+
defaultIcon: string;
|
|
148
|
+
lastIcon: string;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const props = withDefaults(defineProps<PickerTreeProps>(), {
|
|
152
|
+
range: () => [],
|
|
153
|
+
rangeNext: () => [],
|
|
154
|
+
request: null,
|
|
155
|
+
idKey: 'id',
|
|
156
|
+
modelValue: '',
|
|
157
|
+
nameKey: 'name',
|
|
158
|
+
allKey: 'value',
|
|
159
|
+
placeholder: '请选择',
|
|
160
|
+
title: '',
|
|
161
|
+
multiple: true,
|
|
162
|
+
isSearch: false,
|
|
163
|
+
disabled: false,
|
|
164
|
+
cascade: false,
|
|
165
|
+
isShowLabel: true,
|
|
166
|
+
selectParent: true,
|
|
167
|
+
foldAll: false,
|
|
168
|
+
confirmColor: '#007aff',
|
|
169
|
+
cancelColor: '#757575',
|
|
170
|
+
titleColor: '#757575',
|
|
171
|
+
currentIcon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEQ0QTM0MzQ1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEQ0QTM0MzU1Q0RBMTFFOUE0MjY4NzI1Njc1RjI1ODIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRDRBMzQzMjVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRDRBMzQzMzVDREExMUU5QTQyNjg3MjU2NzVGMjU4MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PidwepsAAAK0SURBVHja7JxbTsJAFIYHww7ciStgCeoGvGxAiOsgURegoL5720AXYLiIr0aJviq3Zx3PhIEnKG3ndtr+f3KixrSUj/ZjzjClIqUUiFm2gAAQAREQEUAEREAERAQQAREQAREBREAEREBEEqa67h9RFDWllDv0awWYlqlQHmu1WjMRRMoV1QFttA12y3xRtdNczq8EsE4/f8FumX2q77ROvNXk8UGMEKdUz6tYJHljaZAbuyUH+UR1to5BEohTuqwPCeS4pAA/qY6o/kyHOAMCeRK3owJnj+rH1jjxhqpVsstaebCz6TmnHWyXyY+xHjSBWBY/bvSgadtXBj9u9KCN3rnIfkzkQVsTEEX0Y2IP2oKo/HhMICcFAThUcwVZNGU6FdbX/XURzkbVF4+ybGhjPrFdgP66QdXNurGtSdk6Xdb9nAJ8oDo3OQlsQZzkdPw41ONBo6vI5scDefRjZg+6gpg3Pxp50CXEvPjR2IOuIXL3oxUPuobI3Y9WPOgDIlc/WvOgL4iL/vqFCcD7LH0xB4hj7cfQ/fWH9qCT+FhG0tN+DBk1PzjOM0SVllixcsBT1AvYc/kAPhc0hRg/3uvxoCgKRN9+dOrBUBB9+9GpB0NC9OVH5x4MDdG1H714kANEV3705kEOEBf9dcPi/lQnsuvLg1wgSu3Ha0v7Uh4MMgUXeuG71H407a+VBy9CPQkOdw+MtB+nGbd/D+FBbhBNxo9SjwcngJjNj0E9yBFiFj8G9SBXiGn8GNyDnCEm8SMLD3KHGOdHNh7kDjHOj2w8mAeIi/5arX+c6b/fxHz9oADEdGdjR/fXCw/OOB5oVfCOgnepz8IB14PMw03jCmTE+QBx5z0gAmKSqK9OUF+hcAeIhu/QYr4Qie8rjW83hhMBERARQAREQAREBBABERCLnH8BBgA+TQI7U4t53AAAAABJRU5ErkJggg==',
|
|
172
|
+
defaultIcon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFEAAABRCAYAAACqj0o2AAACE0lEQVR4Xu3c200DMRCF4XEltJAOkEugA+ggpUAHoQMqiFMCdEAJUMEiS4mEELlIO7bPOeN9i6K1rG/952myyea1WiCtXmEuYBPR4RBMxInoIOCwhOtJLKVszWyXc/5y2BvNEq6I+/3+kFK6M7OHnPM7jcLKjbZAvD/uaZtzflm5P4rbWyJWgDcze1LPuzVihfxUz7sH4ilJ2bx7Isrm3RtRMu8RiHJ5j0SUyXs0okTeCIj0eSMh0uaNhkiZNyIiXd7IiDR5oyNS5M2ACJ83EyJs3myIkHkzIsLlzYwIkzc7IkTeCojD81ZCHJa3GuKQvBURu+etjNgtb3XELnlHQGyedyTEZnlHQ2ySd0RE97wjI7rlHR3RJe+JeIrbLOecD6ePpZQ6W1kn2epo4MUrPOKyLN8ppYq1+y1VStncOjIdGnFZlo+U0uOtWOeOY2TE12Ouq//pEA7xXL7XfvcufR8K0Svfv6CREN3yDYfYIt9QiK3yjYTYLF95xB75SiP2ylcZsVu+cogj8pVCHJWvEuKwfOkREfKlRkTJlxkRJl86RMR8qRBR82VChM0XHpEhX2hElnyREWnyhUNkzBcKkTVfJETafIcjKuQ7FFEl35GIMvl2R1TMtyuiar49EWXzbY5oZpv/hibXTF2h3+s60FRKeT6+3TjMS3nrA3ZFRD8xrfY3ER1kJ+JEdBBwWGKeRAfEH1wS5WFZSDB/AAAAAElFTkSuQmCC',
|
|
173
|
+
lastIcon: ''
|
|
207
174
|
});
|
|
208
175
|
|
|
209
|
-
|
|
176
|
+
// Emits 接口
|
|
177
|
+
interface PickerTreeEmits {
|
|
178
|
+
(e: 'cancel'): void;
|
|
179
|
+
(e: 'confirm', data: TreeListItem[]): void;
|
|
180
|
+
(e: 'update:modelValue', value: string | string[]): void;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const emit = defineEmits<PickerTreeEmits>();
|
|
210
184
|
|
|
211
185
|
defineExpose({
|
|
212
186
|
_show,
|
|
213
187
|
_hide
|
|
214
188
|
});
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
const
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
let
|
|
227
|
-
let
|
|
228
|
-
let
|
|
229
|
-
|
|
230
|
-
|
|
189
|
+
|
|
190
|
+
const paging = ref<any>(null);
|
|
191
|
+
|
|
192
|
+
const showTree = ref<boolean>(false);
|
|
193
|
+
const dataList = ref<any[]>([]);
|
|
194
|
+
const searchName = ref<string>('');
|
|
195
|
+
const treeList = ref<TreeListItem[]>([]);
|
|
196
|
+
const returnedItem = ref<TreeNode | null>(null);
|
|
197
|
+
const childNums = ref<Record<string | number, number>>({});
|
|
198
|
+
const curLabel = defineModel<string>('label', { default: '', type: String });
|
|
199
|
+
|
|
200
|
+
let val: (string | number)[] = [];
|
|
201
|
+
let temporarySelectedValue: (string | number)[] = [];
|
|
202
|
+
let label: string[] = [];
|
|
203
|
+
let originalTreeList: TreeListItem[] = []; // 保存原始数据
|
|
204
|
+
|
|
205
|
+
const changeSelect = (val: string): void => {
|
|
231
206
|
// 如果没有输入搜索内容,则恢复原始列表
|
|
232
207
|
if (props.request) {
|
|
233
208
|
paging.value && paging.value.reload();
|
|
@@ -252,7 +227,7 @@ const changeSelect = (val) => {
|
|
|
252
227
|
*/
|
|
253
228
|
watch(
|
|
254
229
|
() => props.range,
|
|
255
|
-
(newVal) => {
|
|
230
|
+
(newVal: TreeNode[]) => {
|
|
256
231
|
if (!props.request) {
|
|
257
232
|
_initTree(newVal);
|
|
258
233
|
}
|
|
@@ -260,7 +235,7 @@ watch(
|
|
|
260
235
|
);
|
|
261
236
|
watch(
|
|
262
237
|
() => dataList.value,
|
|
263
|
-
(newVal) => {
|
|
238
|
+
(newVal: any[]) => {
|
|
264
239
|
if (props.request) {
|
|
265
240
|
const data = newVal.map((item) => {
|
|
266
241
|
return {
|
|
@@ -300,7 +275,7 @@ watch(
|
|
|
300
275
|
*/
|
|
301
276
|
watch(
|
|
302
277
|
() => props.modelValue,
|
|
303
|
-
(newVal) => {
|
|
278
|
+
(newVal: string | string[]) => {
|
|
304
279
|
if (!newVal) {
|
|
305
280
|
curLabel.value = '';
|
|
306
281
|
}
|
|
@@ -324,7 +299,7 @@ onMounted(() => {
|
|
|
324
299
|
}
|
|
325
300
|
});
|
|
326
301
|
|
|
327
|
-
function queryList(pageNum, pageSize) {
|
|
302
|
+
function queryList(pageNum: number, pageSize: number): void {
|
|
328
303
|
if (!props.request) return;
|
|
329
304
|
props
|
|
330
305
|
.request({
|
|
@@ -343,7 +318,7 @@ function queryList(pageNum, pageSize) {
|
|
|
343
318
|
/**
|
|
344
319
|
* 显示树选择器
|
|
345
320
|
*/
|
|
346
|
-
function _show() {
|
|
321
|
+
function _show(): void {
|
|
347
322
|
if (props.disabled) return;
|
|
348
323
|
showTree.value = true;
|
|
349
324
|
if (props.request) {
|
|
@@ -356,7 +331,7 @@ function _show() {
|
|
|
356
331
|
/**
|
|
357
332
|
* 隐藏树选择器
|
|
358
333
|
*/
|
|
359
|
-
function _hide() {
|
|
334
|
+
function _hide(): void {
|
|
360
335
|
// temporarySelectedValue = [];
|
|
361
336
|
showTree.value = false;
|
|
362
337
|
emit('cancel');
|
|
@@ -365,7 +340,7 @@ function _hide() {
|
|
|
365
340
|
/**
|
|
366
341
|
* 取消选择操作
|
|
367
342
|
*/
|
|
368
|
-
function _cancel() {
|
|
343
|
+
function _cancel(): void {
|
|
369
344
|
// if (!props.multiple) {
|
|
370
345
|
// curLabel.value = '';
|
|
371
346
|
// emit('update:modelValue', '');
|
|
@@ -382,9 +357,9 @@ function _cancel() {
|
|
|
382
357
|
/**
|
|
383
358
|
* 确认选择操作,处理选中数据并触发事件
|
|
384
359
|
*/
|
|
385
|
-
function _confirm() {
|
|
360
|
+
function _confirm(): void {
|
|
386
361
|
// 处理所选数据
|
|
387
|
-
let rt = [];
|
|
362
|
+
let rt: TreeListItem[] = [];
|
|
388
363
|
treeList.value.forEach((v, i) => {
|
|
389
364
|
if (treeList.value[i].checked) {
|
|
390
365
|
rt.push({
|
|
@@ -420,12 +395,12 @@ function _confirm() {
|
|
|
420
395
|
|
|
421
396
|
/**
|
|
422
397
|
* 扁平化树结构,将嵌套数据转换为列表形式
|
|
423
|
-
* @param
|
|
424
|
-
* @param
|
|
425
|
-
* @param
|
|
426
|
-
* @param
|
|
398
|
+
* @param list - 树形数据列表
|
|
399
|
+
* @param rank - 当前节点层级
|
|
400
|
+
* @param parentId - 父节点ID数组
|
|
401
|
+
* @param parents - 父节点对象数组
|
|
427
402
|
*/
|
|
428
|
-
function _renderTreeList(list = [], rank = 0, parentId = [], parents = []) {
|
|
403
|
+
function _renderTreeList(list: TreeNode[] = [], rank: number = 0, parentId: (string | number)[] = [], parents: any[] = []): void {
|
|
429
404
|
val = [];
|
|
430
405
|
temporarySelectedValue = [];
|
|
431
406
|
if (Array.isArray(props.modelValue)) {
|
|
@@ -461,9 +436,8 @@ function _renderTreeList(list = [], rank = 0, parentId = [], parents = []) {
|
|
|
461
436
|
});
|
|
462
437
|
|
|
463
438
|
if (Array.isArray(item.children) && item.children.length > 0) {
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
delete parentArr.children;
|
|
439
|
+
const parentid = [...parentId];
|
|
440
|
+
const parentArr: any[] = [...parents];
|
|
467
441
|
parentid.push(item[props.idKey]);
|
|
468
442
|
parentArr.push({
|
|
469
443
|
[props.idKey]: item[props.idKey],
|
|
@@ -481,7 +455,7 @@ function _renderTreeList(list = [], rank = 0, parentId = [], parents = []) {
|
|
|
481
455
|
/**
|
|
482
456
|
* 处理默认选中项,展开已选中节点的父级
|
|
483
457
|
*/
|
|
484
|
-
function _defaultSelect() {
|
|
458
|
+
function _defaultSelect(range?: TreeNode[]): void {
|
|
485
459
|
treeList.value.forEach((v) => {
|
|
486
460
|
if (v.checked) {
|
|
487
461
|
treeList.value.forEach((v2) => {
|
|
@@ -499,11 +473,11 @@ function _defaultSelect() {
|
|
|
499
473
|
|
|
500
474
|
/**
|
|
501
475
|
* 根据ID查找节点
|
|
502
|
-
* @param
|
|
503
|
-
* @param
|
|
504
|
-
* @returns
|
|
476
|
+
* @param id - 节点ID
|
|
477
|
+
* @param arr - 查找范围数组
|
|
478
|
+
* @returns 查找到的节点对象
|
|
505
479
|
*/
|
|
506
|
-
function getOwn(id, arr) {
|
|
480
|
+
function getOwn(id: string | number, arr: TreeNode[]): TreeNode | undefined {
|
|
507
481
|
if (arr && arr.length) {
|
|
508
482
|
//利用foreach循环遍历
|
|
509
483
|
arr.forEach((item) => {
|
|
@@ -511,23 +485,24 @@ function getOwn(id, arr) {
|
|
|
511
485
|
if (item[props.idKey] === id) {
|
|
512
486
|
// 存储数据到空数组
|
|
513
487
|
returnedItem.value = item;
|
|
514
|
-
} else if (item.children !== null) {
|
|
488
|
+
} else if (item.children !== null && item.children !== undefined) {
|
|
515
489
|
//判断chlidren是否有数据
|
|
516
490
|
//递归调用
|
|
517
491
|
getOwn(id, item.children);
|
|
518
492
|
}
|
|
519
493
|
});
|
|
520
|
-
return returnedItem.value;
|
|
494
|
+
return returnedItem.value || undefined;
|
|
521
495
|
}
|
|
496
|
+
return undefined;
|
|
522
497
|
}
|
|
523
498
|
|
|
524
499
|
/**
|
|
525
500
|
* 设置节点显示状态
|
|
526
|
-
* @param
|
|
527
|
-
* @param
|
|
528
|
-
* @param
|
|
501
|
+
* @param id - 节点ID
|
|
502
|
+
* @param arr - 节点数组
|
|
503
|
+
* @param isShow - 是否显示
|
|
529
504
|
*/
|
|
530
|
-
function setShow(id, arr, isShow) {
|
|
505
|
+
function setShow(id: string | number, arr: any[], isShow: boolean): void {
|
|
531
506
|
arr.forEach((item, index) => {
|
|
532
507
|
if (item.parentId.includes(id)) {
|
|
533
508
|
treeList.value[index].showChild = isShow;
|
|
@@ -539,10 +514,10 @@ function setShow(id, arr, isShow) {
|
|
|
539
514
|
}
|
|
540
515
|
/**
|
|
541
516
|
* 点击树节点处理函数
|
|
542
|
-
* @param
|
|
543
|
-
* @param
|
|
517
|
+
* @param item - 被点击的节点对象
|
|
518
|
+
* @param index - 节点在列表中的索引
|
|
544
519
|
*/
|
|
545
|
-
function _treeItemTap(item, index) {
|
|
520
|
+
function _treeItemTap(item: TreeListItem, index: number): void {
|
|
546
521
|
if (item.lastRank === true) {
|
|
547
522
|
//点击最后一级时触发事件
|
|
548
523
|
treeList.value[index].checked = !treeList.value[index].checked;
|
|
@@ -556,7 +531,7 @@ function _treeItemTap(item, index) {
|
|
|
556
531
|
const range = props.range;
|
|
557
532
|
// 找到当前元素
|
|
558
533
|
const own = getOwn(id, range);
|
|
559
|
-
const checkedChildren = own
|
|
534
|
+
const checkedChildren = own?.children;
|
|
560
535
|
// 子元素插入的索引位置
|
|
561
536
|
const nextIndex = treeList.value.findIndex((itemT) => itemT.id === item.id);
|
|
562
537
|
if (checkedChildren === undefined || checkedChildren.length < 1) {
|
|
@@ -566,7 +541,7 @@ function _treeItemTap(item, index) {
|
|
|
566
541
|
treeList.value[index].childNum = checkedChildren.length;
|
|
567
542
|
const newRank = item.rank + 1;
|
|
568
543
|
checkedChildren.forEach((itemC) => {
|
|
569
|
-
const childObj = {
|
|
544
|
+
const childObj: TreeListItem = {
|
|
570
545
|
id: itemC[props.idKey],
|
|
571
546
|
name: itemC[props.nameKey],
|
|
572
547
|
value: itemC[props.allKey],
|
|
@@ -576,11 +551,12 @@ function _treeItemTap(item, index) {
|
|
|
576
551
|
rank: newRank, // 层级
|
|
577
552
|
showChild: false, //子级是否显示
|
|
578
553
|
open: false, //是否打开
|
|
579
|
-
show:
|
|
554
|
+
show: true, // 自身是否显示
|
|
580
555
|
hideArr: [],
|
|
581
556
|
lastRank: itemC.children && itemC.children.length > 0 ? false : true,
|
|
582
557
|
orChecked: treeList.value[index].checked,
|
|
583
|
-
checked: props.cascade ? treeList.value[index].checked : false
|
|
558
|
+
checked: props.cascade ? treeList.value[index].checked : false,
|
|
559
|
+
childNum: 0
|
|
584
560
|
};
|
|
585
561
|
if (!treeList.value.some((itemT) => itemT.id === itemC[props.idKey])) {
|
|
586
562
|
treeList.value.splice(nextIndex + 1, 0, childObj);
|
|
@@ -613,13 +589,13 @@ function _treeItemTap(item, index) {
|
|
|
613
589
|
setShow(childItem.id, treeList.value, false);
|
|
614
590
|
}
|
|
615
591
|
}
|
|
616
|
-
if (childItem.children !== undefined) {
|
|
617
|
-
childItem.children.forEach((childItem1, i1) => {
|
|
592
|
+
if (childItem.children !== undefined && Array.isArray(childItem.children)) {
|
|
593
|
+
childItem.children.forEach((childItem1: TreeListItem, i1: number) => {
|
|
618
594
|
if (!childItem1.parentId.includes(childItem.id)) {
|
|
619
595
|
return;
|
|
620
596
|
}
|
|
621
|
-
childItem.children[i1].showChild = false;
|
|
622
|
-
childItem.children[i1].show = false;
|
|
597
|
+
childItem.children![i1].showChild = false;
|
|
598
|
+
childItem.children![i1].show = false;
|
|
623
599
|
});
|
|
624
600
|
}
|
|
625
601
|
childItem.show = false;
|
|
@@ -645,26 +621,26 @@ function _treeItemTap(item, index) {
|
|
|
645
621
|
}
|
|
646
622
|
/**
|
|
647
623
|
* 同步选中状态到子节点
|
|
648
|
-
* @param
|
|
649
|
-
* @param
|
|
650
|
-
* @param
|
|
624
|
+
* @param trees - 树节点数组
|
|
625
|
+
* @param pid - 父节点ID
|
|
626
|
+
* @param checked - 选中状态
|
|
651
627
|
*/
|
|
652
|
-
function syncChecked(trees, pid, checked) {
|
|
628
|
+
function syncChecked(trees: TreeListItem[], pid: string | number, checked: boolean): void {
|
|
653
629
|
trees.forEach((item, index) => {
|
|
654
630
|
if (item.parentId.includes(pid)) {
|
|
655
631
|
treeList.value[index].checked = checked;
|
|
656
632
|
syncChecked(trees, item.id, checked);
|
|
657
|
-
} else if (item.children !== undefined) {
|
|
633
|
+
} else if (item.children !== undefined && Array.isArray(item.children)) {
|
|
658
634
|
syncChecked(item.children, pid, checked);
|
|
659
635
|
}
|
|
660
636
|
});
|
|
661
637
|
}
|
|
662
638
|
/**
|
|
663
639
|
* 设置祖先节点选中状态
|
|
664
|
-
* @param
|
|
665
|
-
* @param
|
|
640
|
+
* @param pids - 父节点ID数组
|
|
641
|
+
* @param checked - 选中状态
|
|
666
642
|
*/
|
|
667
|
-
function setAncestors(pids, checked) {
|
|
643
|
+
function setAncestors(pids: (string | number)[], checked: boolean): void {
|
|
668
644
|
treeList.value.forEach((item, index) => {
|
|
669
645
|
if (pids.includes(item.id)) {
|
|
670
646
|
if (checked && childNums.value[item.id] !== undefined && item.childNum === childNums.value[item.id]) {
|
|
@@ -680,10 +656,10 @@ function setAncestors(pids, checked) {
|
|
|
680
656
|
|
|
681
657
|
/**
|
|
682
658
|
* 树节点选择处理函数
|
|
683
|
-
* @param
|
|
684
|
-
* @param
|
|
659
|
+
* @param item - 被选择的节点对象
|
|
660
|
+
* @param index - 节点在列表中的索引
|
|
685
661
|
*/
|
|
686
|
-
function _treeItemSelect(item, index) {
|
|
662
|
+
function _treeItemSelect(item: TreeListItem, index: number): void {
|
|
687
663
|
treeList.value[index].checked = !treeList.value[index].checked;
|
|
688
664
|
|
|
689
665
|
if (treeList.value[index].checked) {
|
|
@@ -718,9 +694,9 @@ function _treeItemSelect(item, index) {
|
|
|
718
694
|
}
|
|
719
695
|
/**
|
|
720
696
|
* 处理单选/多选逻辑
|
|
721
|
-
* @param
|
|
697
|
+
* @param index - 当前选中项的索引
|
|
722
698
|
*/
|
|
723
|
-
function _fixMultiple(index) {
|
|
699
|
+
function _fixMultiple(index: number): void {
|
|
724
700
|
if (!props.multiple) {
|
|
725
701
|
// 如果是单选
|
|
726
702
|
treeList.value.forEach((v, i) => {
|
|
@@ -735,7 +711,7 @@ function _fixMultiple(index) {
|
|
|
735
711
|
/**
|
|
736
712
|
* 重置树列表数据
|
|
737
713
|
*/
|
|
738
|
-
function _reTreeList() {
|
|
714
|
+
function _reTreeList(): void {
|
|
739
715
|
if (!props.range.length) {
|
|
740
716
|
return;
|
|
741
717
|
}
|
|
@@ -746,9 +722,9 @@ function _reTreeList() {
|
|
|
746
722
|
|
|
747
723
|
/**
|
|
748
724
|
* 初始化树结构
|
|
749
|
-
* @param
|
|
725
|
+
* @param range - 树数据范围
|
|
750
726
|
*/
|
|
751
|
-
function _initTree(range = props.range) {
|
|
727
|
+
function _initTree(range: TreeNode[] = props.range): void {
|
|
752
728
|
treeList.value = [];
|
|
753
729
|
val = [];
|
|
754
730
|
label = [];
|
package/HwPickerTree/index.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
// index.ts
|
|
2
|
-
import type { App } from 'vue';
|
|
3
|
-
import HwPickerTree from './HwPickerTree.vue';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
HwPickerTree.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export default HwPickerTree;
|
|
12
|
-
export type { HwPickerTreeProps, HwPickerTreeEmits, HwPickerTreeInstance };
|
|
1
|
+
// index.ts
|
|
2
|
+
import type { App } from 'vue';
|
|
3
|
+
import HwPickerTree from './HwPickerTree.vue';
|
|
4
|
+
|
|
5
|
+
// 使用install方法,在app.use挂载
|
|
6
|
+
HwPickerTree.install = (app: App) => {
|
|
7
|
+
app.component(HwPickerTree.__name as string, HwPickerTree); //注册组件
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default HwPickerTree;
|
package/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { App } from 'vue';
|
|
|
2
2
|
import HwBtn from './HwBtn';
|
|
3
3
|
import HwDraggableBottomPopup from './HwDraggableBottomPopup';
|
|
4
4
|
import HwSelect from './HwSelect';
|
|
5
|
-
import HwPickerTree
|
|
5
|
+
import HwPickerTree from './HwPickerTree';
|
|
6
6
|
import HwInput from './HwInput';
|
|
7
7
|
import HwFileUpload from './HwFileUpload';
|
|
8
8
|
import HwCheckbox from './HwCheckbox';
|
|
@@ -24,9 +24,6 @@ export {
|
|
|
24
24
|
HwModal
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
// 导出组件类型
|
|
28
|
-
export type { HwPickerTreeProps, HwPickerTreeEmits, HwPickerTreeInstance };
|
|
29
|
-
|
|
30
27
|
// 导出类型定义
|
|
31
28
|
export type { ZPagingInstance } from './types';
|
|
32
29
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hw-cus-ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.23",
|
|
4
4
|
"description": "使用该组件库需安装uniapp插件@dcloudio/uni-ui",
|
|
5
5
|
"main": "index.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"@vueuse/core": "^10.0.0"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"vue": "^3.
|
|
18
|
+
"vue": "^3.5.24",
|
|
19
19
|
"sass": "^1.0.0"
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { DefineComponent } from 'vue';
|
|
2
|
-
|
|
3
|
-
// HwPickerTree 组件的 Props 接口定义
|
|
4
|
-
export interface HwPickerTreeProps {
|
|
5
|
-
/** 树形数据范围 */
|
|
6
|
-
range?: any[];
|
|
7
|
-
/** 下一级数据范围(用于分页加载) */
|
|
8
|
-
rangeNext?: any[];
|
|
9
|
-
/** 请求函数,用于分页加载数据 */
|
|
10
|
-
request?: Function | null;
|
|
11
|
-
/** ID 字段键名,默认 'id' */
|
|
12
|
-
idKey?: string;
|
|
13
|
-
/** 绑定值,字符串或字符串数组 */
|
|
14
|
-
modelValue?: string | string[];
|
|
15
|
-
/** 名称字段键名,默认 'name' */
|
|
16
|
-
nameKey?: string;
|
|
17
|
-
/** 值字段键名,默认 'value' */
|
|
18
|
-
allKey?: string;
|
|
19
|
-
/** 占位符文本,默认 '请选择' */
|
|
20
|
-
placeholder?: string;
|
|
21
|
-
/** 弹窗标题 */
|
|
22
|
-
title?: string;
|
|
23
|
-
/** 是否支持多选,默认 true */
|
|
24
|
-
multiple?: boolean;
|
|
25
|
-
/** 是否显示搜索框,默认 false */
|
|
26
|
-
isSearch?: boolean;
|
|
27
|
-
/** 是否禁用,默认 false */
|
|
28
|
-
disabled?: boolean;
|
|
29
|
-
/** 是否级联选择,默认 false */
|
|
30
|
-
cascade?: boolean;
|
|
31
|
-
/** 是否显示标签,默认 true */
|
|
32
|
-
isShowLabel?: boolean;
|
|
33
|
-
/** 是否可以选择父级,默认 true */
|
|
34
|
-
selectParent?: boolean;
|
|
35
|
-
/** 折叠时是否关闭所有已打开的子集,默认 false */
|
|
36
|
-
foldAll?: boolean;
|
|
37
|
-
/** 确定按钮颜色,默认 '#007aff' */
|
|
38
|
-
confirmColor?: string;
|
|
39
|
-
/** 取消按钮颜色,默认 '#757575' */
|
|
40
|
-
cancelColor?: string;
|
|
41
|
-
/** 标题颜色,默认 '#757575' */
|
|
42
|
-
titleColor?: string;
|
|
43
|
-
/** 展开时的图标(base64 或 URL) */
|
|
44
|
-
currentIcon?: string;
|
|
45
|
-
/** 折叠时的图标(base64 或 URL) */
|
|
46
|
-
defaultIcon?: string;
|
|
47
|
-
/** 末级图标(base64 或 URL) */
|
|
48
|
-
lastIcon?: string;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// HwPickerTree 组件事件定义
|
|
52
|
-
export interface HwPickerTreeEmits {
|
|
53
|
-
(e: 'cancel'): void;
|
|
54
|
-
(e: 'confirm', value: any[]): void;
|
|
55
|
-
(e: 'update:modelValue', value: string | string[]): void;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// HwPickerTree 组件实例方法
|
|
59
|
-
export interface HwPickerTreeInstance {
|
|
60
|
-
/** 显示树选择器 */
|
|
61
|
-
_show: () => void;
|
|
62
|
-
/** 隐藏树选择器 */
|
|
63
|
-
_hide: () => void;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// HwPickerTree 组件类型声明
|
|
67
|
-
declare const HwPickerTree: DefineComponent<
|
|
68
|
-
HwPickerTreeProps,
|
|
69
|
-
{},
|
|
70
|
-
{},
|
|
71
|
-
{},
|
|
72
|
-
{},
|
|
73
|
-
{},
|
|
74
|
-
{},
|
|
75
|
-
{
|
|
76
|
-
cancel: () => void;
|
|
77
|
-
confirm: (value: any[]) => void;
|
|
78
|
-
'update:modelValue': (value: string | string[]) => void;
|
|
79
|
-
}
|
|
80
|
-
> & {
|
|
81
|
-
install: (app: any) => void;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
export default HwPickerTree;
|