Complete V2 user H5 flow
This commit is contained in:
@@ -23,6 +23,7 @@ const loading = ref(false);
|
||||
const booting = ref(true);
|
||||
const statusText = ref("连接后端中");
|
||||
const bottomRef = ref<HTMLElement | null>(null);
|
||||
const activeAbortController = ref<AbortController | null>(null);
|
||||
|
||||
onMounted(async () => {
|
||||
if (!getToken()) {
|
||||
@@ -82,28 +83,53 @@ async function send(message: string) {
|
||||
const assistantMessage: UiMessage = { id: `assistant-${Date.now()}`, role: "assistant", content: "", streaming: true };
|
||||
messages.value.push(userMessage, assistantMessage);
|
||||
loading.value = true;
|
||||
activeAbortController.value = new AbortController();
|
||||
await scrollToBottom();
|
||||
try {
|
||||
await streamChat(activeSessionId.value, message, async (chunk) => {
|
||||
assistantMessage.content += chunk;
|
||||
await scrollToBottom();
|
||||
});
|
||||
}, activeAbortController.value.signal);
|
||||
assistantMessage.streaming = false;
|
||||
await refreshSessions(activeSessionId.value);
|
||||
user.value = await api.profile();
|
||||
} catch (error) {
|
||||
assistantMessage.streaming = false;
|
||||
assistantMessage.content = error instanceof Error ? error.message : "AI 回复失败";
|
||||
if (error instanceof DOMException && error.name === "AbortError") {
|
||||
assistantMessage.content = assistantMessage.content || "已停止生成";
|
||||
} else {
|
||||
assistantMessage.content = error instanceof Error ? error.message : "AI 回复失败";
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
activeAbortController.value = null;
|
||||
}
|
||||
}
|
||||
|
||||
async function stop() {
|
||||
if (!activeSessionId.value) return;
|
||||
activeAbortController.value?.abort();
|
||||
await api.stop(activeSessionId.value);
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
async function renameSession(sessionId: number, title: string) {
|
||||
await api.renameSession(sessionId, title);
|
||||
await refreshSessions(sessionId);
|
||||
}
|
||||
|
||||
async function deleteSession(sessionId: number) {
|
||||
await api.deleteSession(sessionId);
|
||||
sessions.value = await api.listSessions();
|
||||
if (activeSessionId.value === sessionId) {
|
||||
messages.value = [];
|
||||
activeSessionId.value = null;
|
||||
if (sessions.value.length > 0) {
|
||||
await selectSession(sessions.value[0].id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
try {
|
||||
await api.logout();
|
||||
@@ -175,6 +201,8 @@ async function scrollToBottom() {
|
||||
@close="drawerOpen = false"
|
||||
@select="selectSession"
|
||||
@create="createSession"
|
||||
@rename="renameSession"
|
||||
@delete="deleteSession"
|
||||
/>
|
||||
</template>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user