新分支:Vite+React19+TS+Tailwind v4 重新搭建,先跑通四级响应式布局壳

不再沿用旧 im_webapp 的技术栈(webpack + class组件 + 15000行全局CSS + 手搓History路由),
按业务重新选型:Vite/React Router/Zustand预留/TanStack Query/保留tinode-sdk真实依赖
(协议客户端本身没有重写的业务理由)。新代码放在 web/ 子目录,旧代码原样保留在仓库根目录,
两者共存到重写完成。

这一步先验证布局壳本身:NavRail(消息/通讯录/收藏/文件助手/通话记录/设置)+ 会话列表 +
主区域 + 详情栏,按设计稿的四档断点(<640/640-959/960-1279/≥1280)用真实浏览器宽度逐档验证
过——两列及以下"列表/主区域二选一+返回键"、三列"详情栏抽屉化"、四列"详情栏常驻"均已用
真实点击/返回验证正确,不是只看了截图。会话列表和聊天内容目前是占位数据,业务数据接入和
Tinode连接是下一步。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-09-08 00:24:11 +08:00
co-authored by Claude Sonnet 5
parent 4e8f45d7d8
commit 8bcd9f3a5b
26 changed files with 3110 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { Navigate, createBrowserRouter, RouterProvider } from 'react-router-dom';
import { AppShell } from '@/app/AppShell';
import { SectionPlaceholder } from '@/app/SectionPlaceholder';
import { ConversationView } from '@/features/messages/ConversationView';
import { EmptyMain } from '@/features/messages/EmptyMain';
import { MessagesLayout } from '@/features/messages/MessagesLayout';
const queryClient = new QueryClient();
const router = createBrowserRouter([
{
element: <AppShell />,
children: [
{ index: true, element: <Navigate to="/messages" replace /> },
{
path: 'messages',
element: <MessagesLayout />,
children: [
{ index: true, element: <EmptyMain /> },
{ path: ':topicId', element: <ConversationView /> },
],
},
{ path: 'contacts', element: <SectionPlaceholder title="通讯录" /> },
{ path: 'favorites', element: <SectionPlaceholder title="我的收藏" /> },
{ path: 'files', element: <SectionPlaceholder title="文件助手" /> },
{ path: 'calls', element: <SectionPlaceholder title="通话记录" /> },
{ path: 'settings', element: <SectionPlaceholder title="设置" /> },
],
},
]);
export default function App() {
return (
<QueryClientProvider client={queryClient}>
<RouterProvider router={router} />
</QueryClientProvider>
);
}