优化: F-09生成中新建对话不中断(决策e)

去中断弹窗+去generatingConvs.clear(对齐switchConversation真并发)+死key清理;vue-tsc
This commit is contained in:
2026-06-20 15:54:51 +08:00
parent e2ece2d898
commit 126bee5b24
6 changed files with 15 additions and 25 deletions

View File

@@ -238,15 +238,14 @@ async function confirmClearChat() {
}
/**
* 新建对话(UX-08 §3.4):生成中点新建 → 弹 ConfirmDialog「当前正在生成,确定中断并新建?」,
* 确认走原软复位流程(B-260615-10 store.newConversation,中断 + 新建);取消不动(保持生成)。
* 非生成中直接走原新建流程(零行为变化)。仅「当前视图正在生成」才弹确认 ——
* 切走后台生成时(streaming && !isGenerating(activeConversationId))不算中断当前视图
* 新建对话(UX-08 §3.4 / F-09 决策e):新建 = createConversation + 切 active,
* 旧 conv 后台 loop 继续(后端 ai_conversation_create 决策e 不杀旧 loop),与 switchConversation
* 同属真并发语义——不弹「中断并新建」确认(与并行矛盾)。对齐 switchConversation:89-91
* 「允许生成中切换:后台继续生成,事件按 conversation_id 路由」
*
* 历史:B-260615-10 单 loop 软复位弹中断确认,F-09 决策e 上线后已废弃(A 路线遗留)。
*/
async function confirmNewConversation() {
if (isViewingGenerating.value) {
if (!await confirmDialog(t('aiChat.confirmNewConvWhileGenerating'))) return
}
await store.newConversation()
}
@@ -275,13 +274,6 @@ const convSidebarRef = ref<InstanceType<typeof ConversationSidebar> | null>(null
// cycleProvider/providerBarVisible/showProviderSwitched 已迁移至 ai/TopBar.vue
// (顶部工具栏 + provider/model 选择逻辑,零行为变更,store 单例共享 modelOverride)。
// 当前视图是否正在生成(切走后台生成时光标不显示)
// F-09: 多会话并发 — 用 isGenerating(activeConversationId) 替代单值比对,
// 当前会话在生成 Set 中即算"视图正在生成"(其他会话后台生成不影响本视图判定)
const isViewingGenerating = computed(() =>
store.state.streaming && store.isGenerating(store.state.activeConversationId)
)
/** UX-09:进入编辑态 — 置 editingMsgId(透传 ChatInput prop)+ 委托 ChatInput.startEditFocus 回填/聚焦。 */
function startEdit(msg: AiMessage): void {
editingMsgId.value = msg.id