Просмотр исходного кода

[Fix 0000] 修复了组件卸载是可能导致value被携带到下次使用时的问题

houzekong 3 месяцев назад
Родитель
Сommit
44052e84cb

+ 25 - 18
src/components/Form/src/jeecg/components/MineCascader/MineCascader.vue

@@ -70,25 +70,43 @@
         options.value = mineStore.filterDepartTree((e) => e.parentId === props.rootId);
       }
 
+      // 如果从STORE里初始化数据需要触发一次watcher以初始化组件状态
+      if (props.initFromStore) {
+        handleWatch(mineStore.getDepartId);
+        // 为了让使用该组件的各个页面能够第一时间使用到该组件传递的值,手动触发一次emit
+        handleChange([mineStore.getDepartId]);
+      } else {
+        handleWatch(props.value);
+        // 为了让使用该组件的各个页面能够第一时间使用到该组件传递的值,手动触发一次emit
+        handleChange([props.value]);
+      }
+
       /**
        * change事件
        * @param e
        */
       function handleChange(value: any[] = []) {
-        // const dep = mineStore.findDepartById(id, options.value);
-        const val = last(value) ? last(value) : mineStore.calcMineCodeByDepart(options.value);
-
-        emit('update:value', val);
-        emit('change', val);
+        if (!mineStore.findDepartById(last(value), options.value)) {
+          console.warn('[Change] The value provided is not included in MineOptions');
+          const val = mineStore.calcMineCodeByDepart(options.value);
+          emit('update:value', val);
+          emit('change', val);
+        } else {
+          emit('update:value', last(value));
+          emit('change', last(value));
+        }
       }
 
       function handleWatch(id: string = '') {
         // rootId提供了选项过滤功能,任何传入的值都应该检查
         if (!mineStore.findDepartById(id, options.value)) {
-          console.warn('The value of MineCascader is not included in MineOptions');
+          console.warn('[Watch] The id provided is not included in MineOptions');
           innerValue.value = [];
-          return;
+        } else {
+          const path = mineStore.calcDepartPathById(id, options.value, (e) => e.id);
+          innerValue.value = path;
         }
+
         if (props.syncToStore) {
           mineStore.setDepartById(id);
         }
@@ -97,17 +115,6 @@
         innerValue.value = path;
       }
 
-      // 如果从STORE里初始化数据需要触发一次watcher以初始化组件状态
-      if (props.initFromStore) {
-        handleWatch(mineStore.getDepartId);
-        // 为了让使用该组件的各个页面能够第一时间使用到该组件传递的值,手动触发一次emit
-        handleChange([mineStore.getDepartId]);
-      } else {
-        handleWatch(props.value);
-        // 为了让使用该组件的各个页面能够第一时间使用到该组件传递的值,手动触发一次emit
-        handleChange([props.value]);
-      }
-
       watch(() => props.value, handleWatch);
 
       return {

+ 2 - 2
src/store/modules/mine.ts

@@ -204,7 +204,7 @@ export const useMineDepartmentStore = defineStore('mine-department-store', () =>
       depart = [depart];
     }
     const target = depart.filter((e) => !isNil(e));
-    const path = findPath(target, (e) => e.id === id, DEFAULT_CONFIG);
+    const path = findPath(target, (e) => e.id === id || e.rawid === id, DEFAULT_CONFIG);
 
     if (!isArray(path)) {
       return [];
@@ -225,7 +225,7 @@ export const useMineDepartmentStore = defineStore('mine-department-store', () =>
     }
 
     const target = depart.filter((e) => !isNil(e));
-    const node = findNode(target, (e) => e.id === id, DEFAULT_CONFIG);
+    const node = findNode(target, (e) => e.id === id || e.rawid === id, DEFAULT_CONFIG);
     if (isNil(node)) return;
     return node;
   }