feat: UI全面改造 + 后端多项修复
【后端修复】 - 删除diet/consultation agent假工具声明 - 修复DayOfWeek实体注释 - 修复Vision API content序列化 - cleanup_service级联删除修复 - 用药提醒时区偏差修复 - 统一DateTime处理(UtcNow+8) - 新增UTC DateTime JSON转换器 【前端UI重构】 - 配色体系全面更新(#8B5CF6淡紫+#F0ECFF背景) - 登录页重设计 - 首页重设计(透明顶栏、渐变背景、胶囊输入区) - 聊天卡片加白蓝边框、渐变标题 - 侧边栏重构(渐变背景、合并顶部、删除底部设置) - 确认卡片可编辑字段恢复 - 所有子页面加返回按钮 - catch异常加日志 - 删除后refresh provider缓存
This commit is contained in:
@@ -84,7 +84,9 @@ class AuthNotifier extends Notifier<AuthState> {
|
||||
),
|
||||
);
|
||||
}
|
||||
} catch (_) {}
|
||||
} catch (e) {
|
||||
print('[Auth]加载个人信息失败: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// 发送验证码,返回 (error, devCode)
|
||||
@@ -131,7 +133,7 @@ class AuthNotifier extends Notifier<AuthState> {
|
||||
final db = ref.read(localDbProvider);
|
||||
final refresh = await db.read('refresh_token');
|
||||
if (refresh != null) {
|
||||
try { await api.post('/api/auth/logout', data: {'refreshToken': refresh}); } catch (_) {}
|
||||
try { await api.post('/api/auth/logout', data: {'refreshToken': refresh}); } catch (e) { print('[Auth]登出请求失败: $e'); }
|
||||
}
|
||||
await api.clearTokens();
|
||||
state = const AuthState(isLoggedIn: false, isLoading: false);
|
||||
|
||||
@@ -82,6 +82,31 @@ class ChatNotifier extends Notifier<ChatState> {
|
||||
|
||||
void markNeedsRebuild() => state = state.copyWith();
|
||||
|
||||
/// 不可变消息操作方法(供 chat_messages_view 新版代码调用)
|
||||
void confirmMessage(String id) {
|
||||
final msgs = state.messages.toList();
|
||||
final i = msgs.indexWhere((m) => m.id == id);
|
||||
if (i >= 0) { msgs[i].confirmed = true; state = state.copyWith(messages: msgs); }
|
||||
ref.invalidate(medicationListProvider);
|
||||
ref.invalidate(latestHealthProvider);
|
||||
}
|
||||
|
||||
void startEditingField(String msgId, String fieldLabel) {
|
||||
final msgs = state.messages.toList();
|
||||
final i = msgs.indexWhere((m) => m.id == msgId);
|
||||
if (i >= 0) { msgs[i].metadata?['_editingField'] = fieldLabel; state = state.copyWith(messages: msgs); }
|
||||
}
|
||||
|
||||
void finishEditingField(String msgId, String fieldLabel, String value) {
|
||||
final msgs = state.messages.toList();
|
||||
final i = msgs.indexWhere((m) => m.id == msgId);
|
||||
if (i >= 0) {
|
||||
if (value.isNotEmpty) msgs[i].metadata?[fieldLabel] = value;
|
||||
msgs[i].metadata?.remove('_editingField');
|
||||
state = state.copyWith(messages: msgs);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
ChatState build() {
|
||||
Future.microtask(() {
|
||||
|
||||
@@ -197,7 +197,7 @@ class ConsultationChatNotifier extends Notifier<ConsultationChatState> {
|
||||
doctorTitle: doc['title']?.toString() ?? '',
|
||||
doctorDepartment: doc['department']?.toString() ?? '',
|
||||
);
|
||||
} catch (_) {}
|
||||
} catch (e) { print('[Consultation]请求失败: $e'); }
|
||||
}
|
||||
|
||||
Future<void> _loadMessages(String consultationId) async {
|
||||
@@ -218,7 +218,7 @@ class ConsultationChatNotifier extends Notifier<ConsultationChatState> {
|
||||
if (msgs.isNotEmpty) {
|
||||
state = state.copyWith(messages: msgs);
|
||||
}
|
||||
} catch (_) {}
|
||||
} catch (e) { print('[Consultation]请求失败: $e'); }
|
||||
}
|
||||
|
||||
Future<void> sendMessage(String text) async {
|
||||
@@ -333,7 +333,7 @@ class ConsultationChatNotifier extends Notifier<ConsultationChatState> {
|
||||
if (newMsgs.isNotEmpty) {
|
||||
state = state.copyWith(messages: [...state.messages, ...newMsgs]);
|
||||
}
|
||||
} catch (_) {}
|
||||
} catch (e) { print('[Consultation]请求失败: $e'); }
|
||||
}
|
||||
|
||||
void stop() {
|
||||
|
||||
Reference in New Issue
Block a user