Explorar o código

fix(BasicTable): showIndexColumn/showRowSelection cache should by route name (#3489)

xachary hai 1 ano
pai
achega
d88f455cd3

+ 18 - 8
src/components/Table/src/components/settings/ColumnSetting.vue

@@ -210,7 +210,9 @@
     // 更新 showIndexColumn
     showIndexColumnUpdate(e.target.checked);
     // 更新 showIndexColumn 缓存
-    props.cache && tableSettingStore.setShowIndexColumn(e.target.checked);
+    props.cache &&
+      typeof route.name === 'string' &&
+      tableSettingStore.setShowIndexColumn(route.name, e.target.checked);
   };
 
   // 是否显示选择列
@@ -220,7 +222,9 @@
     // 更新 showRowSelection
     showRowSelectionUpdate(e.target.checked);
     // 更新 showRowSelection 缓存
-    props.cache && tableSettingStore.setShowRowSelection(e.target.checked);
+    props.cache &&
+      typeof route.name === 'string' &&
+      tableSettingStore.setShowRowSelection(route.name, e.target.checked);
   };
 
   // 更新列缓存
@@ -435,12 +439,18 @@
 
   // 从缓存恢复
   const restore = () => {
-    // 设置过才恢复
-    if (typeof tableSettingStore.getShowIndexColumn === 'boolean') {
-      isIndexColumnShow.value = defaultIsIndexColumnShow && tableSettingStore.getShowIndexColumn;
-    }
-    if (typeof tableSettingStore.getShowRowSelection === 'boolean') {
-      isRowSelectionShow.value = defaultIsRowSelectionShow && tableSettingStore.getShowRowSelection;
+    if (typeof route.name === 'string') {
+      const isIndexColumnShowCache = tableSettingStore.getShowIndexColumn(route.name);
+      // 设置过才恢复
+      if (typeof isIndexColumnShowCache === 'boolean') {
+        isIndexColumnShow.value = defaultIsIndexColumnShow && isIndexColumnShowCache;
+      }
+
+      const isRowSelectionShowCache = tableSettingStore.getShowRowSelection(route.name);
+      // 设置过才恢复
+      if (typeof isRowSelectionShowCache === 'boolean') {
+        isRowSelectionShow.value = defaultIsRowSelectionShow && isRowSelectionShowCache;
+      }
     }
     // 序号列更新
     onIndexColumnShowChange({

+ 16 - 6
src/store/modules/tableSetting.ts

@@ -26,11 +26,15 @@ export const useTableSettingStore = defineStore({
     },
     //
     getShowIndexColumn(state) {
-      return state.setting?.showIndexColumn;
+      return (routerName: string) => {
+        return state.setting?.showIndexColumn?.[routerName];
+      };
     },
     //
     getShowRowSelection(state) {
-      return state.setting?.showRowSelection;
+      return (routerName: string) => {
+        return state.setting?.showRowSelection?.[routerName];
+      };
     },
     //
     getColumns(state) {
@@ -59,18 +63,24 @@ export const useTableSettingStore = defineStore({
       );
     },
     //
-    setShowIndexColumn(show: boolean) {
+    setShowIndexColumn(routerName: string, show: boolean) {
       this.setTableSetting(
         Object.assign({}, this.setting, {
-          showIndexColumn: show,
+          showIndexColumn: {
+            ...this.setting?.showIndexColumn,
+            [routerName]: show,
+          },
         }),
       );
     },
     //
-    setShowRowSelection(show: boolean) {
+    setShowRowSelection(routerName: string, show: boolean) {
       this.setTableSetting(
         Object.assign({}, this.setting, {
-          showRowSelection: show,
+          showRowSelection: {
+            ...this.setting?.showRowSelection,
+            [routerName]: show,
+          },
         }),
       );
     },

+ 2 - 2
types/store.d.ts

@@ -54,7 +54,7 @@ export interface BeforeMiniState {
 
 export interface TableSetting {
   size: Nullable<SizeType>;
-  showIndexColumn: Nullable<boolean>;
+  showIndexColumn: Recordable<Nullable<boolean>>;
   columns: Recordable<Nullable<Array<ColumnOptionsType>>>;
-  showRowSelection: Nullable<boolean>;
+  showRowSelection: Recordable<Nullable<boolean>>;
 }