Ver código fonte

fix(sixHatPage): 优化workData监听逻辑,避免重复执行初始化

新增新旧值对比判断,仅在workData实际变更时才执行数据合并和初始化逻辑,减少不必要的重复渲染和计算
lsc 4 dias atrás
pai
commit
16ada5016b
1 arquivos alterados com 52 adições e 50 exclusões
  1. 52 50
      src/components/pages/workPage/components/sixHatPage.vue

+ 52 - 50
src/components/pages/workPage/components/sixHatPage.vue

@@ -683,59 +683,61 @@ export default {
     workData: {
       handler(newVal, oldVal) {
         const _data = JSON.parse(JSON.stringify((newVal && newVal.json) || {}));
-        // 构造默认 work 值(含所有配置字段)
-        const base = {
-          stage: 'member',
-          isSetting: true,
-          members: [],
-          scenario: '',
-          timerEnabled: true,
-          timerDuration: 60,
-          timerCustomValue: 60,
-          hats: ['white', 'red', 'black', 'yellow', 'green', 'blue'],
-          hatContent: {},
-          enableMemberSelect: true,
-          enableContentConfigurable: true,
-          autoExpandHowTo: false,
-          customScenario: '',
-          customTimerEnabled: true,
-          customTimerDuration: 60,
-          customHats: null,
-          howToSteps: null,
-        };
-        const merged = Object.assign(base, _data || {});
-
-        // 仅当没有任何业务数据时(首次进入)才根据配置决定初始 stage
-        const isFresh = !(merged.members && merged.members.length)
-          && !(merged.scenario && merged.scenario.trim())
-          && !(merged.hatContent && Object.keys(merged.hatContent).some(k => merged.hatContent[k]));
-
-        if (isFresh) {
-          // 应用后台预设值(当 enableContentConfigurable=false 时)
-          if (!merged.enableContentConfigurable) {
-            if (merged.customScenario) merged.scenario = merged.customScenario;
-            merged.timerEnabled = merged.customTimerEnabled;
-            merged.timerDuration = merged.customTimerDuration;
-            if (merged.customHats && merged.customHats.length) merged.hats = merged.customHats;
-          }
-          // 决定初始 stage
-          if (!merged.enableMemberSelect && !merged.enableContentConfigurable) {
-            merged.stage = 'activity';
-          } else if (!merged.enableMemberSelect) {
-            merged.stage = 'setup';
-          } else if (!merged.enableContentConfigurable) {
-            merged.stage = 'member';
+        if (JSON.stringify(newValue) != JSON.stringify(oldValue) || JSON.stringify(this.work) != JSON.stringify(_data)) {
+          // 构造默认 work 值(含所有配置字段)
+          const base = {
+            stage: 'member',
+            isSetting: true,
+            members: [],
+            scenario: '',
+            timerEnabled: true,
+            timerDuration: 60,
+            timerCustomValue: 60,
+            hats: ['white', 'red', 'black', 'yellow', 'green', 'blue'],
+            hatContent: {},
+            enableMemberSelect: true,
+            enableContentConfigurable: true,
+            autoExpandHowTo: false,
+            customScenario: '',
+            customTimerEnabled: true,
+            customTimerDuration: 60,
+            customHats: null,
+            howToSteps: null,
+          };
+          const merged = Object.assign(base, _data || {});
+
+          // 仅当没有任何业务数据时(首次进入)才根据配置决定初始 stage
+          const isFresh = !(merged.members && merged.members.length)
+            && !(merged.scenario && merged.scenario.trim())
+            && !(merged.hatContent && Object.keys(merged.hatContent).some(k => merged.hatContent[k]));
+
+          if (isFresh) {
+            // 应用后台预设值(当 enableContentConfigurable=false 时)
+            if (!merged.enableContentConfigurable) {
+              if (merged.customScenario) merged.scenario = merged.customScenario;
+              merged.timerEnabled = merged.customTimerEnabled;
+              merged.timerDuration = merged.customTimerDuration;
+              if (merged.customHats && merged.customHats.length) merged.hats = merged.customHats;
+            }
+            // 决定初始 stage
+            if (!merged.enableMemberSelect && !merged.enableContentConfigurable) {
+              merged.stage = 'activity';
+            } else if (!merged.enableMemberSelect) {
+              merged.stage = 'setup';
+            } else if (!merged.enableContentConfigurable) {
+              merged.stage = 'member';
+            }
+            // 初始化 UI 状态
+            this.showHowTo = !!merged.autoExpandHowTo;
+            this.setupStep = 0;
+            this.currentHatIdx = 0;
+
+            // 同步父组件保存,避免下次加载重复 isFresh
+            this.$nextTick(() => this.$emit('setTestJson', merged));
           }
-          // 初始化 UI 状态
-          this.showHowTo = !!merged.autoExpandHowTo;
-          this.setupStep = 0;
-          this.currentHatIdx = 0;
 
-          // 同步父组件保存,避免下次加载重复 isFresh
-          this.$nextTick(() => this.$emit('setTestJson', merged));
+          this.work = merged;
         }
-
-        this.work = merged;
       },
       deep: true,
       immediate: true,