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 | <script setup lang="ts"> | 1 | <script setup lang="ts"> |
2 | import { BasicModal, useModalInner } from '/@/components/Modal'; | 2 | import { BasicModal, useModalInner } from '/@/components/Modal'; |
3 | - import { ref, toRaw, unref } from 'vue'; | 3 | + import { ref, unref } from 'vue'; |
4 | import { StructJSON } from '/@/api/device/model/modelOfMatterModel'; | 4 | import { StructJSON } from '/@/api/device/model/modelOfMatterModel'; |
5 | import { DataActionModeEnum } from '/@/enums/toolEnum'; | 5 | import { DataActionModeEnum } from '/@/enums/toolEnum'; |
6 | import { DataTypeForm } from '../DataTypeForm'; | 6 | import { DataTypeForm } from '../DataTypeForm'; |
@@ -20,11 +20,14 @@ | @@ -20,11 +20,14 @@ | ||
20 | const emits = defineEmits(['register', 'complete']); | 20 | const emits = defineEmits(['register', 'complete']); |
21 | 21 | ||
22 | const currentMode = ref(DataActionModeEnum.CREATE); | 22 | const currentMode = ref(DataActionModeEnum.CREATE); |
23 | - const currentRecord = ref<StructJSON>(); | 23 | + const currentEditIndex = ref<number>(-1); |
24 | const [registerModal] = useModalInner(({ mode, record }: ModalParamsType<StructJSON>) => { | 24 | const [registerModal] = useModalInner(({ mode, record }: ModalParamsType<StructJSON>) => { |
25 | unref(dataTypeFormRef)?.resetFieldsValue?.(); | 25 | unref(dataTypeFormRef)?.resetFieldsValue?.(); |
26 | currentMode.value = mode; | 26 | currentMode.value = mode; |
27 | - currentRecord.value = record; | 27 | + currentEditIndex.value = props.value.findIndex( |
28 | + (item) => item.identifier === record?.identifier | ||
29 | + ); | ||
30 | + | ||
28 | if (mode === DataActionModeEnum.UPDATE) { | 31 | if (mode === DataActionModeEnum.UPDATE) { |
29 | unref(dataTypeFormRef)?.setFieldsValue?.(record); | 32 | unref(dataTypeFormRef)?.setFieldsValue?.(record); |
30 | } | 33 | } |
@@ -34,13 +37,19 @@ | @@ -34,13 +37,19 @@ | ||
34 | 37 | ||
35 | const handleValidateHasSameIdentifier = (formValue?: StructJSON) => { | 38 | const handleValidateHasSameIdentifier = (formValue?: StructJSON) => { |
36 | const { identifier } = formValue || {}; | 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 | return Promise.resolve(); | 55 | return Promise.resolve(); |
@@ -50,7 +59,7 @@ | @@ -50,7 +59,7 @@ | ||
50 | await unref(dataTypeFormRef)?.validate?.(); | 59 | await unref(dataTypeFormRef)?.validate?.(); |
51 | const value = unref(dataTypeFormRef)?.getFieldsValue?.(); | 60 | const value = unref(dataTypeFormRef)?.getFieldsValue?.(); |
52 | await handleValidateHasSameIdentifier(value); | 61 | await handleValidateHasSameIdentifier(value); |
53 | - emits('complete', value, toRaw(unref(currentRecord))); | 62 | + emits('complete', value, unref(currentEditIndex)); |
54 | }; | 63 | }; |
55 | </script> | 64 | </script> |
56 | 65 |
@@ -50,12 +50,10 @@ | @@ -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 | const _value = cloneDeep(toRaw(unref(props.value))); | 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 | } else { | 57 | } else { |
60 | _value.push(value); | 58 | _value.push(value); |
61 | } | 59 | } |