feat: 修改调用逻辑
This commit is contained in:
@@ -90,9 +90,9 @@
|
||||
<view class="quick-row">
|
||||
<button
|
||||
class="quick-chip"
|
||||
:class="{ disabled: sending }"
|
||||
:class="{ active: selectedAssistantType === 'clinical-books', disabled: sending }"
|
||||
:disabled="sending"
|
||||
@click="handleClinicalBooks"
|
||||
@click="selectClinicalBooksType"
|
||||
>
|
||||
临床思维训练书籍
|
||||
</button>
|
||||
@@ -196,8 +196,6 @@ const emit = defineEmits<{
|
||||
|
||||
const goHome = createHomeNavigator(emit)
|
||||
|
||||
const clinicalBooksAction = '临床思维训练书籍'
|
||||
|
||||
const pathwaySteps = [
|
||||
{ index: '1', title: '早期识别', description: '10分钟内完成12导联心电图。' },
|
||||
{ index: '2', title: '药物干预', description: '阿司匹林、氯吡格雷。' },
|
||||
@@ -214,44 +212,15 @@ const toastVisible = ref(false)
|
||||
const scrollTop = ref(0)
|
||||
const assistantSession = ref<LearningAssistantSession | null>(null)
|
||||
const sending = ref(false)
|
||||
const selectedAssistantType = ref<'clinical-books' | ''>('')
|
||||
|
||||
let toastTimer: ReturnType<typeof setTimeout> | null = null
|
||||
let streamAbortController: AbortController | null = null
|
||||
let workflowAbortController: AbortController | null = null
|
||||
|
||||
async function handleClinicalBooks() {
|
||||
function selectClinicalBooksType() {
|
||||
if (sending.value) return
|
||||
|
||||
messages.value.push({
|
||||
id: `user-${Date.now()}`,
|
||||
role: 'user',
|
||||
content: clinicalBooksAction
|
||||
})
|
||||
typingVisible.value = true
|
||||
sending.value = true
|
||||
scrollToBottom()
|
||||
|
||||
const assistantMessageIndex = messages.value.length
|
||||
messages.value.push({
|
||||
id: `assistant-${Date.now()}`,
|
||||
role: 'assistant',
|
||||
variant: 'simple',
|
||||
content: ''
|
||||
})
|
||||
|
||||
try {
|
||||
workflowAbortController?.abort()
|
||||
workflowAbortController = new AbortController()
|
||||
const output = await runClinicalThinkingBooksWorkflow(workflowAbortController.signal)
|
||||
messages.value[assistantMessageIndex].content = output
|
||||
} catch (error) {
|
||||
messages.value[assistantMessageIndex].content = error instanceof Error ? error.message : '临床思维训练书籍生成失败'
|
||||
showToast(messages.value[assistantMessageIndex].content)
|
||||
} finally {
|
||||
typingVisible.value = false
|
||||
sending.value = false
|
||||
scrollToBottom()
|
||||
}
|
||||
selectedAssistantType.value = 'clinical-books'
|
||||
}
|
||||
|
||||
async function handleSend() {
|
||||
@@ -281,25 +250,35 @@ async function handleSend() {
|
||||
})
|
||||
|
||||
try {
|
||||
const session = await ensureAssistantSession(value)
|
||||
streamAbortController?.abort()
|
||||
streamAbortController = new AbortController()
|
||||
await streamLearningAssistantChat(
|
||||
session.assistant_session_id,
|
||||
{ question: value },
|
||||
{
|
||||
onDelta: delta => {
|
||||
messages.value[assistantMessageIndex].content += delta
|
||||
scrollToBottom()
|
||||
}
|
||||
},
|
||||
streamAbortController.signal
|
||||
)
|
||||
if (!messages.value[assistantMessageIndex].content.trim()) {
|
||||
messages.value[assistantMessageIndex].content = '暂未生成回复,请稍后重试。'
|
||||
if (selectedAssistantType.value === 'clinical-books') {
|
||||
workflowAbortController?.abort()
|
||||
workflowAbortController = new AbortController()
|
||||
const output = await runClinicalThinkingBooksWorkflow(value, workflowAbortController.signal)
|
||||
messages.value[assistantMessageIndex].content = output
|
||||
} else {
|
||||
const session = await ensureAssistantSession(value)
|
||||
streamAbortController?.abort()
|
||||
streamAbortController = new AbortController()
|
||||
await streamLearningAssistantChat(
|
||||
session.assistant_session_id,
|
||||
{ question: value },
|
||||
{
|
||||
onDelta: delta => {
|
||||
messages.value[assistantMessageIndex].content += delta
|
||||
scrollToBottom()
|
||||
}
|
||||
},
|
||||
streamAbortController.signal
|
||||
)
|
||||
if (!messages.value[assistantMessageIndex].content.trim()) {
|
||||
messages.value[assistantMessageIndex].content = '暂未生成回复,请稍后重试。'
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
messages.value[assistantMessageIndex].content = error instanceof Error ? error.message : 'AI 学习助手回复失败'
|
||||
const fallbackMessage = selectedAssistantType.value === 'clinical-books'
|
||||
? '临床思维训练书籍生成失败'
|
||||
: 'AI 学习助手回复失败'
|
||||
messages.value[assistantMessageIndex].content = error instanceof Error ? error.message : fallbackMessage
|
||||
showToast(messages.value[assistantMessageIndex].content)
|
||||
} finally {
|
||||
typingVisible.value = false
|
||||
@@ -771,10 +750,20 @@ page {
|
||||
opacity: 0.55;
|
||||
}
|
||||
|
||||
.quick-chip.active {
|
||||
border-color: #00478d;
|
||||
background: #00478d;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.quick-chip:active {
|
||||
background: #dcecff;
|
||||
}
|
||||
|
||||
.quick-chip.active:active {
|
||||
background: #003a73;
|
||||
}
|
||||
|
||||
.composer {
|
||||
box-sizing: border-box;
|
||||
padding: 8px;
|
||||
|
||||
Reference in New Issue
Block a user