feat(client): 初始化前端壳与鉴权守卫(P1-5)

- 技术栈:React 18 + TypeScript + Vite + Tailwind

- API 层:ApiError + 401 自动刷新 + single-flight 重试

- 鉴权:内存 Access Token + Cookie Refresh + 启动 bootstrap

- RBAC:权限映射 + RequireAuth/RequirePermission 路由守卫

- 布局:OA 工作台壳层 + 侧边栏 + 5 个占位页面

- 样式:复用 hyb-web 视觉 token(单向同步)

- 文档:新增 client README,补充 server 联调说明
这个提交包含在:
2026-02-07 16:43:57 +08:00
父节点 f527633716
当前提交 c290e03fef
共修改 35 个文件,包含 4127 行新增和 0 行删除
+47
查看文件
@@ -0,0 +1,47 @@
/*
Style tokens source (single-direction sync):
- /home/shunli/Projects/hyb-web
- commit: unavailable_local_reference
*/
@import url("https://fonts.googleapis.com/css2?family=Public+Sans:wght@400;500;700;900&display=swap");
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
body {
@apply bg-background-light text-slate-900 font-sans antialiased selection:bg-primary selection:text-white;
}
#root {
@apply min-h-screen;
}
}
@layer components {
.layout-container {
@apply mx-auto max-w-7xl px-4 sm:px-6 lg:px-8;
}
.btn-primary {
@apply rounded-lg bg-primary px-4 py-2 font-bold text-white transition-colors hover:bg-primary-600;
}
.btn-secondary {
@apply rounded-lg border border-slate-200 bg-white px-4 py-2 font-medium text-slate-700 transition-colors hover:bg-slate-50;
}
.card-std {
@apply rounded-xl border border-slate-200 bg-white p-6 text-left shadow-sm transition-all hover:shadow-md;
}
.card-title {
@apply mb-2 text-xl font-bold text-slate-900;
}
.card-desc {
@apply text-slate-600;
}
}