From 22df28f2d3e36a7c362db9dcd944f7ce5d284833 Mon Sep 17 00:00:00 2001 From: ericwyuan Date: Sat, 22 Aug 2026 07:19:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(fam-ui):=20=E5=90=84=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E7=8A=B6=E6=80=81=20-=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=B0=E8=BE=BE=E5=89=8D=E4=B8=8D=E5=86=8D=E6=98=AF=E7=A9=BA?= =?UTF-8?q?=E7=99=BD/=E5=8D=8A=E6=88=AA=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 Spinner 组件,接入时间轴/AI对话历史/人物管理/统计图表/模型统计/ 服务状态 6 个页面。People.vue 特殊处理:命名或合并后触发的刷新不重新 显示整页 Spinner(此时列表已有数据,会闪一下丢失滚动位置),只有首次 加载(列表为空)才转圈。ServiceStatus.vue 同理,手动点刷新只变按钮文 字,不重新蒙一层 Spinner。 --- fam-ui/src/components/Spinner.vue | 15 +++++++++ fam-ui/src/views/ChatHistory.vue | 8 ++++- fam-ui/src/views/ModelStats.vue | 51 +++++++++++++++++++++++------- fam-ui/src/views/People.vue | 10 +++++- fam-ui/src/views/ServiceStatus.vue | 8 ++++- fam-ui/src/views/Stats.vue | 8 +++++ fam-ui/src/views/Timeline.vue | 15 +++++++-- 7 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 fam-ui/src/components/Spinner.vue diff --git a/fam-ui/src/components/Spinner.vue b/fam-ui/src/components/Spinner.vue new file mode 100644 index 0000000..fc16470 --- /dev/null +++ b/fam-ui/src/components/Spinner.vue @@ -0,0 +1,15 @@ + + + diff --git a/fam-ui/src/views/ChatHistory.vue b/fam-ui/src/views/ChatHistory.vue index ab25643..a5c657b 100644 --- a/fam-ui/src/views/ChatHistory.vue +++ b/fam-ui/src/views/ChatHistory.vue @@ -3,20 +3,25 @@ import { onMounted, ref, watch } from 'vue' import { api, fmtDateTime } from '../api.js' import PageHeader from '../components/PageHeader.vue' import EmptyState from '../components/EmptyState.vue' +import Spinner from '../components/Spinner.vue' const page = ref(0) const pageSize = 20 const history = ref([]) const loadError = ref('') +const loading = ref(true) async function load() { loadError.value = '' + loading.value = true try { const data = await api.chatHistory({ limit: pageSize, offset: page.value * pageSize }) history.value = data.history } catch (e) { loadError.value = e.message history.value = [] + } finally { + loading.value = false } } @@ -27,7 +32,8 @@ onMounted(load)