From e39a4456083262e1faf5ae4ca6fe7dfa15065293 Mon Sep 17 00:00:00 2001 From: liubiren Date: Wed, 22 Jul 2026 01:33:29 +0800 Subject: [PATCH] 1 --- agent/application/pages/conversation.py | 4 +- agent/application/states/auth.py | 31 ++++++++++--- agent/application/states/conversation.py | 54 +++++++++++------------ agent/database.db | Bin 118784 -> 118784 bytes 4 files changed, 52 insertions(+), 37 deletions(-) diff --git a/agent/application/pages/conversation.py b/agent/application/pages/conversation.py index 8db4d72..427c968 100644 --- a/agent/application/pages/conversation.py +++ b/agent/application/pages/conversation.py @@ -598,8 +598,8 @@ def render_create_conversation_button() -> rx.Component: ), background_color=rx.color("mauve", 1), ), - open=ConversationState.is_creating_conversation, - on_open_change=ConversationState.toggle_creating_conversation, + open=ConversationState.is_conversation_creating, + on_open_change=ConversationState.toggle_conversation_creating, ), display="flex", width="100%", diff --git a/agent/application/states/auth.py b/agent/application/states/auth.py index 113f9cb..b6f0443 100644 --- a/agent/application/states/auth.py +++ b/agent/application/states/auth.py @@ -2,15 +2,17 @@ """ 认证状态 """ -from asyncio import sleep, create_task +from asyncio import sleep from email.header import Header from email.mime.text import MIMEText import re -from typing import Any, AsyncGenerator, Coroutine, cast +from typing import AsyncGenerator + from aiosmtplib import SMTP, SMTPException import reflex as rx from reflex.event import EventCallback +from application.states.conversation import ConversationState from application.states.database import DatabaseState # 验证码HTML模板 @@ -203,12 +205,12 @@ class AuthState(rx.State): if not self.validate_email(): return - # 验证码非空校验 + # 校验验证码非空 if not self.captcha: self.login_error_message = "请输入验证码" return - # 验证码格式校验 + # 校验验证码格式 if not re.fullmatch(r"^\d{6}$", self.captcha): self.login_error_message = "验证码格式不正确,请重新输入" return @@ -220,7 +222,7 @@ class AuthState(rx.State): self.is_logging_in = True - # 更新验证码记录,若更新成功则创建用户记录 + # 更新验证码记录 database_state = await self.get_state(DatabaseState) if not await database_state.update_captcha( email=self.email, captcha=self.captcha @@ -228,7 +230,14 @@ class AuthState(rx.State): self.is_logging_in = False self.login_error_message = "验证码错误" return - self.user_id = await database_state.create_users_record(email=self.email) + # 创建用户记录 + user_id = await database_state.create_users_record(email=self.email) + + # 初始化 + conversation_state = await self.get_state(ConversationState) + await conversation_state.init(user_id=user_id) + + self.user_id = user_id self.email = "" self.captcha = "" @@ -248,12 +257,20 @@ class AuthState(rx.State): self.is_settings_hover_card_open = is_settings_hover_card_open @rx.event - def logout(self) -> None: + async def logout(self) -> None: """ 退出登录 :return: None """ self.is_settings_hover_card_open = False + + conversation_state = await self.get_state(ConversationState) + conversation_state.user_id = "" + conversation_state.conversations = {} + conversation_state.conversation_id = "" + conversation_state.is_conversation_history_shown = False + conversation_state.is_conversation_creating = False + self.user_id = "" @rx.event diff --git a/agent/application/states/conversation.py b/agent/application/states/conversation.py index 44e27ec..62dae9e 100644 --- a/agent/application/states/conversation.py +++ b/agent/application/states/conversation.py @@ -77,38 +77,27 @@ class ConversationState(rx.State): # 会话历史展示状态,True表示展示,False表示隐藏 is_conversation_history_shown: bool = False - # 正在新建会话状态,True表示正在新建,False表示未正在新建 - is_creating_conversation: bool = False + # 会话创建状态,True表示正在创建,False表示未正在创建 + is_conversation_creating: bool = False - @rx.event - def load_conversation_id(self, conversation_id: str) -> None: + async def init(self, user_id: str) -> None: """ - 设置当前会话唯一标识 - :param conversation_id: 当前会话唯一标识 + 初始化 + :param user_id: 用户唯一标识 :return: None """ - self.conversation_id = conversation_id - - - @rx.event - async def on_mount(self): - """ - 页面挂载时初始化会话列表和会话唯一标识 - """ - # 获取当前用户唯一标识 - auth_state = await self.get_state(AuthState) - self.user_id = auth_state.user_id + self.user_id = user_id if not self.user_id: return - # 获取数据库状态 + # 数据库状态 database_state = await self.get_state(DatabaseState) - # 检索会话字典并赋值 + # 获取会话字典 self.conversations = await database_state.retrieve_conversations( user_id=self.user_id ) - # 若会话字典为空则先创建会话记录再在会话字典中添加默认会话 + # 若会话字典为空则先创建会话记录再在会话字典中添加 if not self.conversations: conversation_id, created_at = ( await database_state.create_conversations_record(user_id=self.user_id) @@ -118,6 +107,16 @@ class ConversationState(rx.State): # 将最后一个会话的唯一标识设置为当前会话唯一标识 self.conversation_id = next(reversed(self.conversations.keys())) + @rx.event + async def on_mount(self): + """ + 挂载时 + """ + # 获取当前用户唯一标识 + auth_state = await self.get_state(AuthState) + # 初始化 + await self.init(user_id=auth_state.user_id) + @rx.event def toggle_conversation_history_shown(self) -> None: """ @@ -144,7 +143,7 @@ class ConversationState(rx.State): # 获取会话描述 description = form_data["description"].strip() or "新会话" - # 先创建会话记录再在会话字典中添加会话 + # 先创建会话记录再在会话字典中添加 database_state = await self.get_state(DatabaseState) conversation_id, created_at = await database_state.create_conversations_record( user_id=self.user_id, description=description @@ -152,11 +151,8 @@ class ConversationState(rx.State): self.conversations[conversation_id] = Conversation( description=description, created_at=created_at ) - - # 将所添加的会话唯一标识设置为当前会话唯一标识 self.conversation_id = conversation_id - # 将正在新建会话状态设置为已完成 - self.is_creating_conversation = False + self.is_conversation_creating = False @rx.event async def delete_conversation(self, conversation_id: str) -> None: @@ -170,7 +166,9 @@ class ConversationState(rx.State): # 先逻辑删除会话记录再在会话字典中删除会话 database_state = await self.get_state(DatabaseState) - await database_state.delete_conversations_record(conversation_id=conversation_id) + await database_state.delete_conversations_record( + conversation_id=conversation_id + ) del self.conversations[conversation_id] # 删除后,若会话字典为空则先创建会话记录再在会话字典中添加默认会话 @@ -196,11 +194,11 @@ class ConversationState(rx.State): self.conversation_id = conversation_id @rx.event - def toggle_creating_conversation(self) -> None: + def toggle_conversation_creating(self) -> None: """ 切换正在新建会话状态 """ - self.is_creating_conversation = not self.is_creating_conversation + self.is_conversation_creating = not self.is_conversation_creating @rx.var def dialog_history(self) -> Dict[str, Dialog]: diff --git a/agent/database.db b/agent/database.db index 23f33901a38fe04fec9f455a9a47358b122ba647..72a8c6f23f3973f255f5ba27c861b56d0b973ecb 100644 GIT binary patch delta 246 zcmZozz}~QceS$RO#ECM_tP>gZxrJ znPy>{XrY^GYGI^nZf0hxn`Dw^sB4j8WNemdo|cxJl4SU7+J+~4X1!QH*T}%gOxM6% z*T_i0z|hLj(8|C}&)D3=)Od1_eFe~l^$h$s_}6ddEBMPdnbUunrUr8;BQZ8GO}^o; z1Jr*Br2o=po`7TgT&&FejD}3=%%Pl<>*7_K61F8UvLpc2d}rYQ!~cCd&jH5Q{G2Sz L9E?oN%p9Bmh}uLs delta 231 zcmZozz}~QceS$ROgo!fFtP>dY>LNF$EYRm*>K|4cp1w(Ty zLrW`D3q2EKOCu9Y1_lOQet8Z@14GL+GmF$zUDG6^G+lF(G-F*0qa+~LJUPWIF)=C4 z(!hLjk9`FjBmWHs{u`Tl3jXs==Ja2t2{b^17|j}!Z}{r~odnX&pSPJO;21v_(8@H^ sG