Commit 0fc2341a8abb7efdb074b25b26176b4ba4f16bf5
Merge branch 'feat/object-model-enums-type' into 'main_dev'
fix: 修复枚举项可以重复 See merge request yunteng/thingskit-front!1134
Showing
1 changed file
with
26 additions
and
2 deletions
| 1 | <script setup lang="ts"> | 1 | <script setup lang="ts"> |
| 2 | import { Button, Tooltip } from 'ant-design-vue'; | 2 | import { Button, Tooltip } from 'ant-design-vue'; |
| 3 | - import { nextTick, ref, unref, watch } from 'vue'; | 3 | + import { computed, nextTick, ref, unref, watch } from 'vue'; |
| 4 | import { useForm, BasicForm } from '/@/components/Form'; | 4 | import { useForm, BasicForm } from '/@/components/Form'; |
| 5 | import { Specs } from '/@/api/device/model/modelOfMatterModel'; | 5 | import { Specs } from '/@/api/device/model/modelOfMatterModel'; |
| 6 | import { Icon } from '/@/components/Icon'; | 6 | import { Icon } from '/@/components/Icon'; |
| @@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
| 8 | import { FormActionType } from '../../../types/form'; | 8 | import { FormActionType } from '../../../types/form'; |
| 9 | import { buildUUID } from '/@/utils/uuid'; | 9 | import { buildUUID } from '/@/utils/uuid'; |
| 10 | import { DataTypeEnum } from '/@/enums/objectModelEnum'; | 10 | import { DataTypeEnum } from '/@/enums/objectModelEnum'; |
| 11 | + import { isNullOrUnDef } from '/@/utils/is'; | ||
| 11 | 12 | ||
| 12 | const props = defineProps<{ disabled?: boolean; value?: Specs[] }>(); | 13 | const props = defineProps<{ disabled?: boolean; value?: Specs[] }>(); |
| 13 | 14 | ||
| @@ -29,10 +30,27 @@ | @@ -29,10 +30,27 @@ | ||
| 29 | item.formActionType = el as unknown as FormActionType; | 30 | item.formActionType = el as unknown as FormActionType; |
| 30 | }; | 31 | }; |
| 31 | 32 | ||
| 33 | + const getEnumsLimit = computed(() => unref(enumsListElRef).length >= 100); | ||
| 34 | + | ||
| 35 | + const hasSameEnum = ref(false); | ||
| 36 | + | ||
| 37 | + const validateSameEnum = () => { | ||
| 38 | + const value = getFieldsValue(); | ||
| 39 | + hasSameEnum.value = false; | ||
| 40 | + const values = value.map((item) => item.value).filter((value) => !isNullOrUnDef(value)); | ||
| 41 | + const names = value.map((item) => item.name).filter((value) => !isNullOrUnDef(value)); | ||
| 42 | + | ||
| 43 | + if (values.length !== new Set(values).size || names.length !== new Set(names).size) { | ||
| 44 | + hasSameEnum.value = true; | ||
| 45 | + } | ||
| 46 | + }; | ||
| 47 | + | ||
| 32 | const validate = async () => { | 48 | const validate = async () => { |
| 49 | + if (unref(hasSameEnum)) throw Error('存在相同的枚举'); | ||
| 33 | for (const enumElItem of unref(enumsListElRef)) { | 50 | for (const enumElItem of unref(enumsListElRef)) { |
| 34 | await enumElItem.formActionType?.validate?.(); | 51 | await enumElItem.formActionType?.validate?.(); |
| 35 | } | 52 | } |
| 53 | + validateSameEnum(); | ||
| 36 | }; | 54 | }; |
| 37 | 55 | ||
| 38 | const getFieldsValue = () => { | 56 | const getFieldsValue = () => { |
| @@ -107,6 +125,7 @@ | @@ -107,6 +125,7 @@ | ||
| 107 | @register="registerForm" | 125 | @register="registerForm" |
| 108 | class="enums-form" | 126 | class="enums-form" |
| 109 | :disabled="disabled" | 127 | :disabled="disabled" |
| 128 | + @field-value-change="validateSameEnum" | ||
| 110 | > | 129 | > |
| 111 | <template #division> | 130 | <template #division> |
| 112 | <div>~</div> | 131 | <div>~</div> |
| @@ -122,7 +141,12 @@ | @@ -122,7 +141,12 @@ | ||
| 122 | </Button> | 141 | </Button> |
| 123 | </section> | 142 | </section> |
| 124 | </main> | 143 | </main> |
| 125 | - <Button type="link" @click="handleAddEnums" :disabled="disabled">+添加枚举项</Button> | 144 | + <div v-if="hasSameEnum" class="text-red-400">枚举项中存在相同的参数值或参数描述</div> |
| 145 | + <Tooltip title="枚举项最多创建 100 个"> | ||
| 146 | + <Button type="link" @click="handleAddEnums" :disabled="disabled || getEnumsLimit"> | ||
| 147 | + +添加枚举项 | ||
| 148 | + </Button> | ||
| 149 | + </Tooltip> | ||
| 126 | </section> | 150 | </section> |
| 127 | </template> | 151 | </template> |
| 128 | 152 |