Browse Source

fix(announcement-form): 修复分类选择与名称同步问题

yz 1 week ago
parent
commit
9845b27e42
1 changed files with 24 additions and 7 deletions
  1. 24 7
      src/components/announcement/announcement-form-mixin.js

+ 24 - 7
src/components/announcement/announcement-form-mixin.js

@@ -378,14 +378,20 @@ export default {
     'formData.categoryId': {
       handler(newVal) {
         const key = newVal != null ? String(newVal) : '';
-        if (key && this.categoryOptions && this.categoryOptions.length > 0) {
-          const category = this.categoryOptions.find(item => item.id === key || item.value === key);
-          if (category) {
-            this.formData.categoryName = category.name;
-            return;
-          }
+        // 当未选择分类时,清空名称
+        if (!key) {
+          this.formData.categoryName = '';
+          return;
+        }
+        // 当分类选项尚未加载完成时,不覆盖已有的名称,避免被清空
+        if (!this.categoryOptions || this.categoryOptions.length === 0) {
+          return;
+        }
+        // 分类选项已就绪时,按选项同步名称;若未命中则保留现有名称
+        const category = this.categoryOptions.find(item => item.id === key || item.value === key);
+        if (category && category.name != null) {
+          this.formData.categoryName = String(category.name);
         }
-        this.formData.categoryName = '';
       },
       immediate: true
     },
@@ -696,6 +702,17 @@ export default {
           // 选项加载后,标准化当前categoryId为字符串以保证回显
           if (this.formData && this.formData.categoryId != null && this.formData.categoryId !== '') {
             this.formData.categoryId = String(this.formData.categoryId);
+            // 分类选项加载完成后,尝试回填分类名称
+            const key = String(this.formData.categoryId);
+            const matched = this.categoryOptions.find(item => item.id === key || item.value === key);
+            if (matched && matched.name != null) {
+              this.formData.categoryName = String(matched.name);
+            } else {
+              // 找不到匹配项时,保留现有分类名称并给予轻提示
+              if (this.formData.categoryName) {
+                this.$message && this.$message.warning && this.$message.warning('当前分类已不可选,保留原分类名称');
+              }
+            }
           }
           // 修复首次加载下拉无数据:同步更新表单配置中分类列的dicData,触发Avue响应式渲染
           if (this.formOption && Array.isArray(this.formOption.column)) {