Parcourir la source

feat(items): 优化子类型选择功能

- 添加 visible-change 事件监听器处理子类型下拉框显示状态
- 修复更新表单时父类型ID重置逻辑,避免数据残留
- 在编辑模式下同步加载子类型选项数据
- 实现下拉框可见时自动选择唯一选项的功能
- 添加子类型变更后的异步更新处理机制
fugui001 il y a 4 semaines
Parent
commit
93a22b9f4b
1 fichiers modifiés avec 15 ajouts et 1 suppressions
  1. 15 1
      src/views/system/business/items/index.vue

+ 15 - 1
src/views/system/business/items/index.vue

@@ -113,7 +113,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="子类型" prop="giftTypeChildId">
-          <el-select v-model="form.giftTypeChildId" placeholder="请选择" clearable filterable @change="onParentChildChange">
+          <el-select v-model="form.giftTypeChildId" placeholder="请选择" clearable filterable  @visible-change="handleChildVisibleChange" @change="onParentChildChange">
             <el-option v-for="item in itemOptionsChildList" :key="item.id" :label="item.label" :value="item.id" />
           </el-select>
         </el-form-item>
@@ -379,6 +379,8 @@ const handleAdd = () => {
 const handleUpdate = async (row?: ItemsVO) => {
   reset();
   resetFormPrize();
+  form.value.giftTypeParentId = null;
+  form.value.giftTypeParentId = null;
   const _id = row?.id || ids.value[0];
   const res = await getItems(_id);
   Object.assign(form.value, res.data);
@@ -420,6 +422,9 @@ const handleUpdate = async (row?: ItemsVO) => {
   if (form.value.giftTypeParentId) {
     await onParentChange(form.value.giftTypeParentId);
   }
+  if (form.value.giftTypeChildId) {
+    await onParentChildChange(form.value.giftTypeChildId);
+  }
   dialog.visible = true;
   dialog.title = '修改';
 };
@@ -721,6 +726,15 @@ const handleIsGiveAwayChange = (value: number) => {
     form.value.giveStopTime = undefined;
   }
 };
+const handleChildVisibleChange = (visible: boolean) => {
+  if (visible && itemOptionsChildList.value.length === 1) {
+    const onlyItem = itemOptionsChildList.value[0];
+    if (form.value.giftTypeChildId !== onlyItem.id) {
+      form.value.giftTypeChildId = onlyItem.id;
+      nextTick(() => onParentChildChange(onlyItem.id));
+    }
+  }
+};
 </script>
 <style scoped>
 .upload-container {