refactor(mini-program): runGeneration+交互函数改为操作对话消息

This commit is contained in:
2026-07-19 15:15:49 +08:00
parent 84b6a77632
commit b4fca0abfa
+31 -17
View File
@@ -1661,8 +1661,11 @@ const runGeneration = async ({ prompt, displayText, source = 'text', saveTheme }
streamWriter.reset() streamWriter.reset()
startGenerationFeedback() startGenerationFeedback()
ttsPlayer.reset() ttsPlayer.reset()
viewState.value = 'generating' viewState.value = 'chat'
keepGenerationAtBottom() generationPhase.value = 'generating'
resultMessages.value = []
addResultMessage({ role: 'user', kind: 'text', content: display })
keepResultAtBottom()
try { try {
currentStreamTask.value = startNovelStream({ currentStreamTask.value = startNovelStream({
@@ -1745,37 +1748,50 @@ const handleShortNovelEvent = (event) => {
} }
} }
const submitClarification = (answer) => { const submitClarification = (msg, answer) => {
if (answeringClarification.value) return if (answeringClarification.value) return
if (msg) {
msg.submitted = true
msg.answer = answer
}
addResultMessage({ role: 'user', kind: 'text', content: answer })
answeringClarification.value = true answeringClarification.value = true
currentStreamTask.value = followupStream({ currentStreamTask.value = followupStream({
sessionId: novelSessionId.value, sessionId: novelSessionId.value,
action: 'answer_clarification', action: 'answer_clarification',
payload: { answer }, payload: { answer },
onEvent: handleShortNovelEvent, onEvent: handleShortNovelEvent,
onError: (msg) => markGenerationFailed(msg) onError: (errMsg) => markGenerationFailed(errMsg)
}) })
setTimeout(() => { answeringClarification.value = false }, 200) setTimeout(() => { answeringClarification.value = false }, 200)
} }
const confirmOutline = () => { const confirmOutline = (msg) => {
if (msg) msg.confirmed = true
addResultMessage({ role: 'user', kind: 'text', content: '确认大纲' })
currentStreamTask.value = followupStream({ currentStreamTask.value = followupStream({
sessionId: novelSessionId.value, sessionId: novelSessionId.value,
action: 'confirm_outline', action: 'confirm_outline',
payload: null, payload: null,
onEvent: handleShortNovelEvent, onEvent: handleShortNovelEvent,
onError: (msg) => markGenerationFailed(msg) onError: (errMsg) => markGenerationFailed(errMsg)
}) })
} }
const modifyOutline = (feedback) => { const modifyOutline = (msg) => {
if (!feedback || !feedback.trim()) return const feedback = msg?.feedback || ''
if (!feedback.trim()) {
uni.showToast({ title: '请先填写修改意见', icon: 'none' })
return
}
if (msg) msg.confirmed = true
addResultMessage({ role: 'user', kind: 'text', content: feedback })
currentStreamTask.value = followupStream({ currentStreamTask.value = followupStream({
sessionId: novelSessionId.value, sessionId: novelSessionId.value,
action: 'modify_outline', action: 'modify_outline',
payload: { feedback }, payload: { feedback },
onEvent: handleShortNovelEvent, onEvent: handleShortNovelEvent,
onError: (msg) => markGenerationFailed(msg) onError: (errMsg) => markGenerationFailed(errMsg)
}) })
} }
@@ -1784,15 +1800,13 @@ const resumeSession = () => {
novelSessionId.value = resumeableSessionId.value novelSessionId.value = resumeableSessionId.value
resumeableSessionId.value = '' resumeableSessionId.value = ''
generating.value = true generating.value = true
streamContent.value = '' generationPhase.value = 'generating'
novelFullText.value = ''
generationStatus.value = 'waiting' generationStatus.value = 'waiting'
generationError.value = '' generationError.value = ''
generationDisplayText.value = '继续之前的创作' addResultMessage({ role: 'user', kind: 'text', content: '继续之前的创作' })
streamWriter.reset() streamWriter.reset()
startGenerationFeedback() startGenerationFeedback()
viewState.value = 'generating' keepResultAtBottom()
keepGenerationAtBottom()
try { try {
currentStreamTask.value = followupStream({ currentStreamTask.value = followupStream({
@@ -1800,11 +1814,11 @@ const resumeSession = () => {
action: 'retry', action: 'retry',
payload: null, payload: null,
onEvent: handleShortNovelEvent, onEvent: handleShortNovelEvent,
onError: (msg) => { onError: (errMsg) => {
markGenerationFailed(msg) markGenerationFailed(errMsg)
analytics.track('script_generate_fail', { analytics.track('script_generate_fail', {
source: 'resume', source: 'resume',
error: msg error: errMsg
}, { eventType: 'script', pagePath }) }, { eventType: 'script', pagePath })
} }
}) })