Commit af8c1a1f54974eba9fd08df9aca1434509fc286d
Merge branch 'fix/product-objcet-model' into 'main_dev'
fix: 修复产品物模型编辑时未校验标识符是否已存在 See merge request yunteng/thingskit-front!1234
Showing
2 changed files
with
23 additions
and
16 deletions
1 | 1 | <script setup lang="ts"> |
2 | 2 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
3 | - import { ref, toRaw, unref } from 'vue'; | |
3 | + import { ref, unref } from 'vue'; | |
4 | 4 | import { StructJSON } from '/@/api/device/model/modelOfMatterModel'; |
5 | 5 | import { DataActionModeEnum } from '/@/enums/toolEnum'; |
6 | 6 | import { DataTypeForm } from '../DataTypeForm'; |
... | ... | @@ -20,11 +20,14 @@ |
20 | 20 | const emits = defineEmits(['register', 'complete']); |
21 | 21 | |
22 | 22 | const currentMode = ref(DataActionModeEnum.CREATE); |
23 | - const currentRecord = ref<StructJSON>(); | |
23 | + const currentEditIndex = ref<number>(-1); | |
24 | 24 | const [registerModal] = useModalInner(({ mode, record }: ModalParamsType<StructJSON>) => { |
25 | 25 | unref(dataTypeFormRef)?.resetFieldsValue?.(); |
26 | 26 | currentMode.value = mode; |
27 | - currentRecord.value = record; | |
27 | + currentEditIndex.value = props.value.findIndex( | |
28 | + (item) => item.identifier === record?.identifier | |
29 | + ); | |
30 | + | |
28 | 31 | if (mode === DataActionModeEnum.UPDATE) { |
29 | 32 | unref(dataTypeFormRef)?.setFieldsValue?.(record); |
30 | 33 | } |
... | ... | @@ -34,13 +37,19 @@ |
34 | 37 | |
35 | 38 | const handleValidateHasSameIdentifier = (formValue?: StructJSON) => { |
36 | 39 | const { identifier } = formValue || {}; |
37 | - if ( | |
38 | - unref(currentMode) === DataActionModeEnum.CREATE && | |
39 | - props.value.filter((item) => item.identifier === identifier).length >= 1 | |
40 | - ) { | |
41 | - const message = '存在一致的标识符'; | |
42 | - createMessage.warn(message); | |
43 | - return Promise.reject(message); | |
40 | + const message = '存在一致的标识符'; | |
41 | + | |
42 | + if (unref(currentMode) === DataActionModeEnum.CREATE) { | |
43 | + if (props.value.filter((item) => item.identifier === identifier).length >= 1) { | |
44 | + createMessage.warn(message); | |
45 | + return Promise.reject(message); | |
46 | + } | |
47 | + } else { | |
48 | + const index = props.value.findIndex((item) => item.identifier === formValue?.identifier); | |
49 | + if (index !== unref(currentEditIndex)) { | |
50 | + createMessage.warn(message); | |
51 | + return Promise.reject(message); | |
52 | + } | |
44 | 53 | } |
45 | 54 | |
46 | 55 | return Promise.resolve(); |
... | ... | @@ -50,7 +59,7 @@ |
50 | 59 | await unref(dataTypeFormRef)?.validate?.(); |
51 | 60 | const value = unref(dataTypeFormRef)?.getFieldsValue?.(); |
52 | 61 | await handleValidateHasSameIdentifier(value); |
53 | - emits('complete', value, toRaw(unref(currentRecord))); | |
62 | + emits('complete', value, unref(currentEditIndex)); | |
54 | 63 | }; |
55 | 64 | </script> |
56 | 65 | ... | ... |
... | ... | @@ -50,12 +50,10 @@ |
50 | 50 | } |
51 | 51 | }; |
52 | 52 | |
53 | - const handleEditComplete = (value: StructJSON, prevValue: StructJSON) => { | |
53 | + const handleEditComplete = (value: StructJSON, currentEditIndex: number) => { | |
54 | 54 | const _value = cloneDeep(toRaw(unref(props.value))); |
55 | - | |
56 | - if (prevValue) { | |
57 | - const index = _value.findIndex((item) => item.identifier === prevValue.identifier); | |
58 | - ~index && _value.splice(index, 1, value); | |
55 | + if (~currentEditIndex) { | |
56 | + _value.splice(currentEditIndex, 1, value); | |
59 | 57 | } else { |
60 | 58 | _value.push(value); |
61 | 59 | } | ... | ... |