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 | } | ... | ... |