Skip to content

Commit 8524d07

Browse files
committed
fix(ui): 修复跨功能模式切换时的 subMode 设置错误
问题: - handleHistoryReuse 和 handleUseFavorite 在跨功能模式切换时,使用当前功能模式判断导致错误修改 subMode - 例如:从 basic 模式复用 pro 模式历史记录时,会错误地修改 basicSubMode 而非 proSubMode 修正: - handleHistoryReuse:基于目标功能模式而非当前功能模式判断和设置 subMode - handleUseFavorite:采用相同的修正策略,基于目标功能模式精准设置 - 删除重复的子模式设置逻辑,功能模式切换后不再重复设置 - 提前计算 targetFunctionMode 和 currentSubMode,避免重复计算 优化: - 代码行数减少 32 行 - 消除了冗余的子模式设置逻辑 - 提高了代码可读性和可维护性 - 确保跨功能模式切换时状态一致性
1 parent 3832c1a commit 8524d07

File tree

2 files changed

+58
-90
lines changed

2 files changed

+58
-90
lines changed

packages/extension/src/App.vue

Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,17 +1994,24 @@ const handleHistoryReuse = async (context: {
19941994
chain.rootRecord.metadata?.optimizationMode || "system";
19951995
}
19961996
1997-
// 如果目标模式与当前模式不同,自动切换
1998-
if (targetMode !== selectedOptimizationMode.value) {
1999-
// 根据功能模式分别处理子模式的持久化
2000-
// selectedOptimizationMode 会自动从对应 subMode 同步
2001-
if (functionMode.value === "basic") {
2002-
// 基础模式:持久化子模式选择
1997+
// 根据根记录类型自动切换功能模式
1998+
const isContext =
1999+
rt === "contextSystemOptimize" ||
2000+
rt === "contextUserOptimize" ||
2001+
rt === "contextIterate";
2002+
const targetFunctionMode: "basic" | "pro" = isContext ? "pro" : "basic";
2003+
const currentSubMode = (
2004+
targetFunctionMode === "pro" ? proSubMode.value : basicSubMode.value
2005+
) as OptimizationMode;
2006+
2007+
// 如果目标模式与目标功能模式的子模式不同,自动切换
2008+
if (targetMode !== currentSubMode) {
2009+
// 根据目标功能模式分别处理子模式的持久化
2010+
if (targetFunctionMode === "basic") {
20032011
await setBasicSubMode(
20042012
targetMode as import("@prompt-optimizer/core").BasicSubMode,
20052013
);
2006-
} else if (functionMode.value === "pro") {
2007-
// 上下文模式:持久化子模式并同步 contextMode
2014+
} else {
20082015
await setProSubMode(
20092016
targetMode as import("@prompt-optimizer/core").ProSubMode,
20102017
);
@@ -2023,12 +2030,7 @@ const handleHistoryReuse = async (context: {
20232030
);
20242031
}
20252032
2026-
// 根据根记录类型自动切换功能模式
2027-
const isContext =
2028-
rt === "contextSystemOptimize" ||
2029-
rt === "contextUserOptimize" ||
2030-
rt === "contextIterate";
2031-
await setFunctionMode(isContext ? "pro" : "basic");
2033+
await setFunctionMode(targetFunctionMode);
20322034
20332035
// 调用原有的历史记录处理逻辑
20342036
await promptHistory.handleSelectHistory(context);
@@ -2153,19 +2155,21 @@ const handleUseFavorite = async (favorite: any) => {
21532155
} else {
21542156
// 基础模式或上下文模式
21552157
2156-
// 2. 切换优化模式
2157-
if (
2158-
favOptimizationMode &&
2159-
favOptimizationMode !== selectedOptimizationMode.value
2160-
) {
2161-
// 根据功能模式分别处理子模式的持久化
2162-
// selectedOptimizationMode 会自动从对应 subMode 同步
2163-
if (functionMode.value === "basic") {
2158+
// 2. 确定目标功能模式
2159+
const targetFunctionMode =
2160+
favFunctionMode === "context" ? "pro" : "basic";
2161+
const currentSubMode = (
2162+
targetFunctionMode === "pro" ? proSubMode.value : basicSubMode.value
2163+
) as OptimizationMode;
2164+
2165+
// 3. 如果目标模式与目标功能模式的子模式不同,切换子模式
2166+
if (favOptimizationMode && favOptimizationMode !== currentSubMode) {
2167+
if (targetFunctionMode === "basic") {
21642168
// 基础模式:持久化子模式选择
21652169
await setBasicSubMode(
21662170
favOptimizationMode as import("@prompt-optimizer/core").BasicSubMode,
21672171
);
2168-
} else if (functionMode.value === "pro") {
2172+
} else {
21692173
// 上下文模式:持久化子模式并同步 contextMode
21702174
await setProSubMode(
21712175
favOptimizationMode as import("@prompt-optimizer/core").ProSubMode,
@@ -2185,35 +2189,15 @@ const handleUseFavorite = async (favorite: any) => {
21852189
);
21862190
}
21872191
2188-
// 3. 切换功能模式(basic vs context)
2189-
const targetFunctionMode =
2190-
favFunctionMode === "context" ? "pro" : "basic";
2192+
// 4. 切换功能模式
21912193
if (targetFunctionMode !== functionMode.value) {
21922194
await setFunctionMode(targetFunctionMode);
21932195
useToast().info(
21942196
`已自动切换到${targetFunctionMode === "pro" ? "上下文" : "基础"}模式`,
21952197
);
2196-
2197-
// 功能模式切换后,如果有优化模式信息,确保同步各自的子模式持久化
2198-
if (favOptimizationMode) {
2199-
if (targetFunctionMode === "basic") {
2200-
// 基础模式:持久化子模式选择
2201-
await setBasicSubMode(
2202-
favOptimizationMode as import("@prompt-optimizer/core").BasicSubMode,
2203-
);
2204-
} else if (targetFunctionMode === "pro") {
2205-
// 上下文模式:持久化子模式并同步 contextMode
2206-
await setProSubMode(
2207-
favOptimizationMode as import("@prompt-optimizer/core").ProSubMode,
2208-
);
2209-
await handleContextModeChange(
2210-
favOptimizationMode as import("@prompt-optimizer/core").ContextMode,
2211-
);
2212-
}
2213-
}
22142198
}
22152199
2216-
// 4. 将收藏的提示词内容设置到输入框
2200+
// 5. 将收藏的提示词内容设置到输入框
22172201
optimizer.prompt = favorite.content;
22182202
}
22192203

packages/web/src/App.vue

Lines changed: 29 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,17 +1998,24 @@ const handleHistoryReuse = async (context: {
19981998
chain.rootRecord.metadata?.optimizationMode || "system";
19991999
}
20002000
2001-
// 如果目标模式与当前模式不同,自动切换
2002-
if (targetMode !== selectedOptimizationMode.value) {
2003-
// 根据功能模式分别处理子模式的持久化
2004-
// selectedOptimizationMode 会自动从对应 subMode 同步
2005-
if (functionMode.value === "basic") {
2006-
// 基础模式:持久化子模式选择
2001+
// 根据根记录类型自动切换功能模式
2002+
const isContext =
2003+
rt === "contextSystemOptimize" ||
2004+
rt === "contextUserOptimize" ||
2005+
rt === "contextIterate";
2006+
const targetFunctionMode: "basic" | "pro" = isContext ? "pro" : "basic";
2007+
const currentSubMode = (
2008+
targetFunctionMode === "pro" ? proSubMode.value : basicSubMode.value
2009+
) as OptimizationMode;
2010+
2011+
// 如果目标模式与目标功能模式的子模式不同,自动切换
2012+
if (targetMode !== currentSubMode) {
2013+
// 根据目标功能模式分别处理子模式的持久化
2014+
if (targetFunctionMode === "basic") {
20072015
await setBasicSubMode(
20082016
targetMode as import("@prompt-optimizer/core").BasicSubMode,
20092017
);
2010-
} else if (functionMode.value === "pro") {
2011-
// 上下文模式:持久化子模式并同步 contextMode
2018+
} else {
20122019
await setProSubMode(
20132020
targetMode as import("@prompt-optimizer/core").ProSubMode,
20142021
);
@@ -2027,12 +2034,7 @@ const handleHistoryReuse = async (context: {
20272034
);
20282035
}
20292036
2030-
// 根据根记录类型自动切换功能模式
2031-
const isContext =
2032-
rt === "contextSystemOptimize" ||
2033-
rt === "contextUserOptimize" ||
2034-
rt === "contextIterate";
2035-
await setFunctionMode(isContext ? "pro" : "basic");
2037+
await setFunctionMode(targetFunctionMode);
20362038
20372039
// 调用原有的历史记录处理逻辑
20382040
await promptHistory.handleSelectHistory(context);
@@ -2157,19 +2159,21 @@ const handleUseFavorite = async (favorite: any) => {
21572159
} else {
21582160
// 基础模式或上下文模式
21592161
2160-
// 2. 切换优化模式
2161-
if (
2162-
favOptimizationMode &&
2163-
favOptimizationMode !== selectedOptimizationMode.value
2164-
) {
2165-
// 根据功能模式分别处理子模式的持久化
2166-
// selectedOptimizationMode 会自动从对应 subMode 同步
2167-
if (functionMode.value === "basic") {
2162+
// 2. 确定目标功能模式
2163+
const targetFunctionMode =
2164+
favFunctionMode === "context" ? "pro" : "basic";
2165+
const currentSubMode = (
2166+
targetFunctionMode === "pro" ? proSubMode.value : basicSubMode.value
2167+
) as OptimizationMode;
2168+
2169+
// 3. 如果目标模式与目标功能模式的子模式不同,切换子模式
2170+
if (favOptimizationMode && favOptimizationMode !== currentSubMode) {
2171+
if (targetFunctionMode === "basic") {
21682172
// 基础模式:持久化子模式选择
21692173
await setBasicSubMode(
21702174
favOptimizationMode as import("@prompt-optimizer/core").BasicSubMode,
21712175
);
2172-
} else if (functionMode.value === "pro") {
2176+
} else {
21732177
// 上下文模式:持久化子模式并同步 contextMode
21742178
await setProSubMode(
21752179
favOptimizationMode as import("@prompt-optimizer/core").ProSubMode,
@@ -2189,35 +2193,15 @@ const handleUseFavorite = async (favorite: any) => {
21892193
);
21902194
}
21912195
2192-
// 3. 切换功能模式(basic vs context)
2193-
const targetFunctionMode =
2194-
favFunctionMode === "context" ? "pro" : "basic";
2196+
// 4. 切换功能模式
21952197
if (targetFunctionMode !== functionMode.value) {
21962198
await setFunctionMode(targetFunctionMode);
21972199
useToast().info(
21982200
`已自动切换到${targetFunctionMode === "pro" ? "上下文" : "基础"}模式`,
21992201
);
2200-
2201-
// 功能模式切换后,如果有优化模式信息,确保同步各自的子模式持久化
2202-
if (favOptimizationMode) {
2203-
if (targetFunctionMode === "basic") {
2204-
// 基础模式:持久化子模式选择
2205-
await setBasicSubMode(
2206-
favOptimizationMode as import("@prompt-optimizer/core").BasicSubMode,
2207-
);
2208-
} else if (targetFunctionMode === "pro") {
2209-
// 上下文模式:持久化子模式并同步 contextMode
2210-
await setProSubMode(
2211-
favOptimizationMode as import("@prompt-optimizer/core").ProSubMode,
2212-
);
2213-
await handleContextModeChange(
2214-
favOptimizationMode as import("@prompt-optimizer/core").ContextMode,
2215-
);
2216-
}
2217-
}
22182202
}
22192203
2220-
// 4. 将收藏的提示词内容设置到输入框
2204+
// 5. 将收藏的提示词内容设置到输入框
22212205
optimizer.prompt = favorite.content;
22222206
}
22232207

0 commit comments

Comments
 (0)