From 1826d2906f62992ba7d4f27ef9f3d45c4bd2d36d Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 10 Sep 2026 11:06:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(web):=20=E4=BC=9A=E8=AF=9D=E5=A4=B4?= =?UTF-8?q?=E5=83=8F/=E5=90=8D=E7=A7=B0=E5=8F=AF=E7=82=B9=E5=87=BB?= =?UTF-8?q?=E5=B1=95=E5=BC=80=E8=AF=A6=E6=83=85=E6=A0=8F=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4"=E5=85=B3=E4=BA=8E=20MeetingIM"=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 聊天窗口头部的头像和昵称此前只是静态展示,只有右侧"i"图标能展开 详情栏;现在点击头像或名称同样会触发 onToggleDetail,单聊群聊均 生效。 按产品决定移除设置里的"关于 MeetingIM"页面(桌面目录、移动端"我的" 二级设置列表两处入口一并去掉),该页面唯一内容是版本号和一个后端 本就不支持 platform=web 的检查更新按钮,删除后 AboutPage.tsx 和 仅被它使用的 lib/api/app.ts 一并清理为死代码。 Co-Authored-By: Claude Sonnet 5 --- web/src/App.tsx | 2 - .../features/messages/ConversationView.tsx | 38 ++++++++------- web/src/features/settings/AboutPage.tsx | 47 ------------------- web/src/features/settings/SettingsLayout.tsx | 19 +++----- web/src/lib/api/app.ts | 20 -------- 5 files changed, 27 insertions(+), 99 deletions(-) delete mode 100644 web/src/features/settings/AboutPage.tsx delete mode 100644 web/src/lib/api/app.ts diff --git a/web/src/App.tsx b/web/src/App.tsx index ac21002f..891af9c6 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -20,7 +20,6 @@ import { FavoritesLayout } from '@/features/favorites/FavoritesLayout'; import { ConversationView } from '@/features/messages/ConversationView'; import { EmptyMain } from '@/features/messages/EmptyMain'; import { MessagesLayout } from '@/features/messages/MessagesLayout'; -import { AboutPage } from '@/features/settings/AboutPage'; import { GeneralSettingsPage } from '@/features/settings/GeneralSettingsPage'; import { NotificationsSettingsPage } from '@/features/settings/NotificationsSettingsPage'; import { PrivacySettingsPage } from '@/features/settings/PrivacySettingsPage'; @@ -84,7 +83,6 @@ const router = createBrowserRouter([ { path: 'notifications', element: }, { path: 'privacy', element: }, { path: 'general', element: }, - { path: 'about', element: }, ], }, ], diff --git a/web/src/features/messages/ConversationView.tsx b/web/src/features/messages/ConversationView.tsx index 842f7415..a84959ff 100644 --- a/web/src/features/messages/ConversationView.tsx +++ b/web/src/features/messages/ConversationView.tsx @@ -546,24 +546,26 @@ export function ConversationView() { - - {avatarLetter(peerName)} - -
- - {peerName} - {isGroup ? ({groupMemberCount}) : null} - - {isGroup ? ( - groupSublineParts.length ? {groupSublineParts.join(' · ')} : null - ) : ( - - {contact?.online ? '在线' : '离线'} - - )} -
+
{isGroup ? null : ( diff --git a/web/src/features/settings/AboutPage.tsx b/web/src/features/settings/AboutPage.tsx deleted file mode 100644 index 09bbe1a5..00000000 --- a/web/src/features/settings/AboutPage.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { useMutation } from '@tanstack/react-query'; - -import { getLatestRelease } from '@/lib/api/app'; - -const CURRENT_VERSION = __APP_VERSION__; - -/** - * README §8.7's "v0.25 · 有新版本" row. Confirmed live (2026-09-08): `platform:"web"` is REJECTED - * outright -- `400 MALFORMED_REQUEST {"details":{"field":"platform"}}` -- the real backend only - * accepts the doc's own example values (`ios`/`android`), no web support at all. Passing a wrong - * platform to get SOME answer would be dishonest (it'd be checking updates for the wrong client), - * so this shows an honest "not supported" state instead of pretending the check succeeded. - */ -export function AboutPage() { - const checkMutation = useMutation({ mutationFn: () => getLatestRelease(CURRENT_VERSION) }); - - return ( -
-

关于 MeetingIM

-
-
- 当前版本 - {CURRENT_VERSION} -
- -
-
- ); -} diff --git a/web/src/features/settings/SettingsLayout.tsx b/web/src/features/settings/SettingsLayout.tsx index ba3c2212..05b34849 100644 --- a/web/src/features/settings/SettingsLayout.tsx +++ b/web/src/features/settings/SettingsLayout.tsx @@ -15,7 +15,6 @@ const DIRECTORY = [ { key: 'notifications', to: '/settings/notifications', icon: 'notifications', label: '消息通知' }, { key: 'privacy', to: '/settings/privacy', icon: 'lock', label: '隐私' }, { key: 'general', to: '/settings/general', icon: 'tune', label: '通用' }, - { key: 'about', to: '/settings/about', icon: 'info', label: '关于 MeetingIM' }, ]; /** @@ -183,14 +182,14 @@ export function SettingsLayout() {
{/* Mobile "设置" sub-list (mock `07/1e`) -- a second, DIFFERENT grouping from both the hub - above and the desktop directory: 清空缓存/意见反馈/关于 sit here directly, not nested - under 通用. 清空缓存 links through to 通用 rather than duplicating that action (and its + above and the desktop directory: 清空缓存/意见反馈 sit here directly, not nested under + 通用. 清空缓存 links through to 通用 rather than duplicating that action (and its already-established "no fake byte count" honesty) in a second place; 意见反馈 has no generic post-login feedback endpoint anywhere in this protocol (the only feedback API, `/tenant-entry-feedback`, is unauthenticated and pre-login-only per its own name) so this - is a real, recorded backend gap, not a missed wire-up. 关于 omits the mock's red-dot - "有新版本" -- already confirmed elsewhere that state can never be real (the update-check - endpoint always rejects `platform=web`), showing it would be lying about system state. */} + is a real, recorded backend gap, not a missed wire-up. 关于 MeetingIM removed entirely per + product decision -- its only real content was a version string and an update-check the + backend rejects for `platform=web`, not worth a dedicated page. */}
- {DIRECTORY.filter((item) => item.key !== 'profile' && item.key !== 'about').map((item, i, arr) => ( + {DIRECTORY.filter((item) => item.key !== 'profile').map((item, i, arr) => ( 清空缓存 - - - 关于 MeetingIM - -