Commit af8c1a1f54974eba9fd08df9aca1434509fc286d

Authored by xp.Huang
2 parents 7980ccf8 c7a6a93c

Merge branch 'fix/product-objcet-model' into 'main_dev'

fix: 修复产品物模型编辑时未校验标识符是否已存在

See merge request yunteng/thingskit-front!1234
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 }