Skip to content

Commit 39e87d1

Browse files
authored
fix: Tree selector related bug (#5178)
1 parent 32948d7 commit 39e87d1

4 files changed

Lines changed: 21 additions & 10 deletions

File tree

ui/src/components/dynamics-form/constructor/items/TreeSelectConstructor.vue

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
<template>
2-
<el-form-item>
2+
<el-form-item
3+
prop="treeData"
4+
:rules="[
5+
{
6+
message: $t('dynamicsForm.TreeSelect.selectRequired'),
7+
blur: 'change',
8+
type: 'array',
9+
min: 1,
10+
},
11+
]"
12+
>
313
<template #label>
414
<div class="flex-between">
515
<span>
@@ -21,7 +31,7 @@
2131
</template>
2232
<el-card shadow="never" class="border-r-6 w-full" style="--el-card-padding: 8px">
2333
<el-tree
24-
:data="treeData"
34+
:data="formValue.treeData"
2535
node-key="id"
2636
default-expand-all
2737
:expand-on-click-node="false"
@@ -75,7 +85,7 @@
7585
>
7686
<el-tree-select
7787
v-model="formValue.default_value"
78-
:data="treeData"
88+
:data="formValue.treeData"
7989
:multiple="formValue.multiple"
8090
:render-after-expand="false"
8191
style="width: 100%"
@@ -194,7 +204,7 @@
194204
</el-dialog>
195205
</template>
196206
<script setup lang="ts">
197-
import { computed, onMounted, watch, ref, reactive } from 'vue'
207+
import { computed, onMounted, reactive } from 'vue'
198208
import { t } from '@/locales/'
199209
200210
import { ElMessage, ElMessageBox } from 'element-plus'
@@ -214,15 +224,15 @@ const formValue = computed({
214224
const getData = () => {
215225
return {
216226
input_type: 'TreeSelect',
217-
attrs: { multiple: formValue.value.multiple, data: treeData.value },
227+
attrs: { multiple: formValue.value.multiple, data: formValue.value.treeData, filterable: true },
218228
default_value: formValue.value.default_value,
219229
show_default_value: formValue.value.show_default_value,
220230
}
221231
}
222232
const rander = (form_data: any) => {
223233
const attrs = form_data.attrs || {}
224234
formValue.value.multiple = attrs.multiple
225-
treeData.value = attrs.data || []
235+
formValue.value.treeData = attrs.data || []
226236
formValue.value.default_value = form_data.default_value
227237
formValue.value.show_default_value = form_data.show_default_value
228238
}
@@ -255,8 +265,6 @@ const treeProps = {
255265
label: 'label',
256266
}
257267
258-
const treeData = ref<TreeNode[]>([])
259-
260268
const addDialog = reactive<{
261269
visible: boolean
262270
mode: AddMode
@@ -349,7 +357,7 @@ function submitAdd() {
349357
}))
350358
351359
if (addDialog.mode === 'root') {
352-
treeData.value.push(...newNodes)
360+
formValue.value.treeData.push(...newNodes)
353361
} else {
354362
const parent = addDialog.parentNode
355363
if (!parent) {
@@ -411,7 +419,7 @@ function handleDelete(node: TreeNode) {
411419
type: 'warning',
412420
})
413421
.then(() => {
414-
const removed = removeNodeById(treeData.value, node.id)
422+
const removed = removeNodeById(formValue.value.treeData, node.id)
415423
if (removed) {
416424
ElMessage.success(t('common.deleteSuccess'))
417425
} else {

ui/src/locales/lang/en-US/dynamics-form.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export default {
5959
TreeSelect: {
6060
label: 'Tree Select',
6161
select: 'Option',
62+
selectRequired: 'Options are required',
6263
allowMultipleSelections: 'Allow Multiple Selections',
6364
addDialog: {
6465
addFirstOption: 'Add Root Option',

ui/src/locales/lang/zh-CN/dynamics-form.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export default {
6060
TreeSelect: {
6161
label: '树形选择器',
6262
select: '选项',
63+
selectRequired: '选项必填',
6364
allowMultipleSelections: '允许多选',
6465
addDialog: {
6566
addFirstOption: '添加一级选项',

ui/src/locales/lang/zh-Hant/dynamics-form.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ export default {
5959
TreeSelect: {
6060
label: '樹狀選擇器',
6161
select: '選項',
62+
selectRequired: '選項必填',
6263
allowMultipleSelections: '允許多選',
6364
addDialog: {
6465
addFirstOption: '新增第一層選項',

0 commit comments

Comments
 (0)