feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# PKB<EFBFBD>滨垢蝎曄<EFBFBD><EFBFBD>碶<EFBFBD><EFBFBD>𡝗𥁒<EFBFBD>?
|
||||
# PKB前端精细化优化报告
|
||||
|
||||
## 📋 优化概览
|
||||
|
||||
**优化时间**: 2026-01-06
|
||||
**隡睃<EFBFBD>靘脲旿**: `銝𤾸<EFBFBD><EFBFBD>见㦛<EFBFBD><EFBFBD>榆頝?md` <EFBFBD><EFBFBD>﹝
|
||||
**隡睃<EFBFBD><EFBFBD>格<EFBFBD>**: <EFBFBD>𣂼<EFBFBD>鈭批<EFBFBD>蝎曇稲摨佗<EFBFBD>100%餈睃<E9A488>霈曇恣蝔?
|
||||
**隡睃<EFBFBD><EFBFBD>嗆<EFBFBD>?*: <20>?**撌脣<E6928C><E884A3>?*
|
||||
**优化依据**: `与原型图的差距.md` 文档
|
||||
**优化目标**: 提升产品精致度,100%还原设计稿
|
||||
**优化状态**: ✅ **已完成**
|
||||
|
||||
---
|
||||
|
||||
@@ -13,50 +13,50 @@
|
||||
|
||||
根据差距文档,主要问题集中在以下4个方面:
|
||||
|
||||
### 1. <EFBFBD>颱<EFBFBD>撣<EFBFBD><EFBFBD>銝𡡞𡢿頝?
|
||||
- <EFBFBD>?憿菟𢒰颲寡<E9A2B2>餈<EFBFBD><E9A488><EFBFBD>碶<EFBFBD>銝<EFBFBD><E98A9D>?
|
||||
- <EFBFBD>?<3F>∠<EFBFBD>/<2F>箏<EFBFBD><E7AE8F>渲<EFBFBD>餈<EFBFBD><E9A488>
|
||||
- <EFBFBD>?<3F><>捆韐渲器嚗𣬚撩銋誩鐤<E8AAA9>豢<EFBFBD>
|
||||
### 1. 总体布局与间距
|
||||
- ❌ 页面边距过窄或不一致
|
||||
- ❌ 卡片/区块间距过小
|
||||
- ❌ 内容贴边,缺乏呼吸感
|
||||
|
||||
### 2. 摮𦯀<EFBFBD>銝擧<EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>?<3F><><EFBFBD>摮烾<E691AE>銝滩雲
|
||||
- <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>憸𡏭𠧧餈<F0A0A7A7>楛
|
||||
- <EFBFBD>?銵屸<E98AB5>餈<EFBFBD><E9A488>
|
||||
### 2. 字体与排版
|
||||
- ❌ 标题字重不足
|
||||
- ❌ 辅助文字颜色过深
|
||||
- ❌ 行高过密
|
||||
|
||||
### 3. 蝏<EFBFBD>辣銝舘<EFBFBD>閫㗇甅撘?
|
||||
- <EFBFBD>?<3F><><EFBFBD>銝滨<E98A9D>銝<EFBFBD>
|
||||
- <EFBFBD>?蝻箏<E89DBB>頧餃凝<E9A483>游蔣
|
||||
- <EFBFBD>?颲寞<E9A2B2>憸𡏭𠧧餈<F0A0A7A7>楛
|
||||
### 3. 组件与视觉样式
|
||||
- ❌ 圆角不统一
|
||||
- ❌ 缺少轻微阴影
|
||||
- ❌ 边框颜色过深
|
||||
|
||||
### 4. 导航与顶部栏
|
||||
- <EFBFBD>?憿園<E686BF><E59C92>誯<EFBFBD>摨虫<E691A8>頞?
|
||||
- <EFBFBD>?<3F><><EFBFBD><EFBFBD>芸<EFBFBD><E88AB8>游<EFBFBD>銝?
|
||||
- ❌ 顶部栏高度不足
|
||||
- ❌ 标题未垂直居中
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>?隡睃<E99AA1>摰墧鴌霂行<E99C82>
|
||||
## ✅ 优化实施详情
|
||||
|
||||
### 1儭謿<EFBFBD> 摮𦯀<E691AE>銝擧<E98A9D><E693A7><EFBFBD><EFBFBD><EFBFBD>?
|
||||
### 1️⃣ 字体与排版优化
|
||||
|
||||
#### 标题字重加粗
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<span className="font-bold text-slate-800">智能问答</span>
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<span className="font-semibold text-slate-800 text-sm">智能问答</span>
|
||||
```
|
||||
|
||||
**<EFBFBD>寡<EFBFBD><EFBFBD>?*:
|
||||
- `font-bold` (700) <EFBFBD>?`font-semibold` (600)嚗𡁏凒<EFBFBD>讛<EFBFBD>
|
||||
- 蝏煺<EFBFBD>摮堒噡銝?`text-sm` (14px)
|
||||
**改进点**:
|
||||
- `font-bold` (700) → `font-semibold` (600):更协调
|
||||
- 统一字号为 `text-sm` (14px)
|
||||
|
||||
#### 辅助文字颜色优化
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<div className="text-xs text-gray-500 ml-6 mt-1">
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<div className="text-xs text-slate-500 ml-6 leading-relaxed">
|
||||
```
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
```tsx
|
||||
// 添加 leading-relaxed (line-height: 1.625)
|
||||
<p className="text-sm text-slate-500 mt-1.5 leading-relaxed">
|
||||
蝞∠<EFBFBD>霂亦䰻霂<EFBFBD><EFBFBD>銝讠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD>隞塚<EFBFBD><EFBFBD>亦<EFBFBD> MinerU 閫<EFBFBD><EFBFBD><EFBFBD>嗆<EFBFBD>?
|
||||
管理该知识库下的所有文件,查看 MinerU 解析状态
|
||||
</p>
|
||||
```
|
||||
|
||||
@@ -80,42 +80,42 @@
|
||||
|
||||
#### 全局容器间距
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<div className="p-3 border-b border-gray-100 flex-shrink-0">
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<div className="px-5 py-4 border-b border-gray-100 flex-shrink-0 bg-white">
|
||||
```
|
||||
|
||||
**标准间距规范**:
|
||||
| 场景 | 水平padding | 垂直padding |
|
||||
|------|------------|------------|
|
||||
| 撌乩<EFBFBD>璅∪<EFBFBD><EFBFBD>㗇𥋘<EFBFBD>?| px-5 (20px) | py-4 (16px) |
|
||||
| Alert<EFBFBD>鞟內獢?| px-6 (24px) | py-5 (20px) |
|
||||
| Chat<EFBFBD><EFBFBD>捆<EFBFBD>?| px-6 (24px) | py-4 (16px) |
|
||||
| <EFBFBD>亥<EFBFBD>韏<EFBFBD>漣憿?| p-6 (24px) | - |
|
||||
| 工作模式选择器 | px-5 (20px) | py-4 (16px) |
|
||||
| Alert提示框 | px-6 (24px) | py-5 (20px) |
|
||||
| Chat内容区 | px-6 (24px) | py-4 (16px) |
|
||||
| 知识资产页 | p-6 (24px) | - |
|
||||
|
||||
#### 卡片间距优化
|
||||
```tsx
|
||||
// Radio.Group间距
|
||||
<Radio.Group className="w-full space-y-4"> {/* space-y-3 <EFBFBD>?space-y-4 */}
|
||||
<Radio.Group className="w-full space-y-4"> {/* space-y-3 → space-y-4 */}
|
||||
```
|
||||
|
||||
**间距标准**:
|
||||
- `space-y-4`: 16px(Radio选项间)
|
||||
- `mb-5`: 20px嚗<EFBFBD>△<EFBFBD>W躹<EFBFBD>烾𡢿嚗?
|
||||
- `mb-5`: 20px(页面区块间)
|
||||
- `mt-1.5`: 6px(标题与描述间)
|
||||
|
||||
---
|
||||
|
||||
### 3儭謿<EFBFBD> 颲寞<E9A2B2>銝𤾸<E98A9D>閫雴<E996AB><E99BB4>?
|
||||
### 3️⃣ 边框与圆角优化
|
||||
|
||||
#### 边框颜色调淡
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
border-gray-200 // #E5E7EB
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
border-gray-100 // #F3F4F6
|
||||
```
|
||||
|
||||
@@ -131,13 +131,13 @@ border-gray-100 // #F3F4F6
|
||||
```
|
||||
|
||||
**圆角规范**:
|
||||
| 蝏<EFBFBD>辣 | <20><><EFBFBD><EFBFBD>?| Class |
|
||||
| 组件 | 圆角值 | Class |
|
||||
|------|--------|-------|
|
||||
| 卡片/面板 | 8px | `rounded-lg` |
|
||||
| 按钮 | 8px | `rounded-lg` |
|
||||
| 颲枏<EFBFBD>獢?| 12px | `rounded-xl` |
|
||||
| 输入框 | 12px | `rounded-xl` |
|
||||
| 头像/图标容器 | 8px | `rounded-lg` |
|
||||
| <EFBFBD>嗆<EFBFBD><EFBFBD>噬蝡?| 6px | `rounded-md` |
|
||||
| 状态徽章 | 6px | `rounded-md` |
|
||||
|
||||
---
|
||||
|
||||
@@ -163,15 +163,15 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
### 5️⃣ Tab导航优化
|
||||
|
||||
#### 擃睃漲<EFBFBD>屸𡢿頝萘移靚?
|
||||
#### 高度和间距精调
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<div className="... px-6 flex items-center shadow-sm z-20 h-14 flex-shrink-0">
|
||||
<div className="flex space-x-8 h-full">
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<div className="... px-6 flex items-center z-20 h-12 flex-shrink-0">
|
||||
<div className="flex space-x-6 h-full"> {/* space-x-8 <EFBFBD>?space-x-6 */}
|
||||
<div className="flex space-x-6 h-full"> {/* space-x-8 → space-x-6 */}
|
||||
```
|
||||
|
||||
**Tab规范**:
|
||||
@@ -183,15 +183,15 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
---
|
||||
|
||||
### 6儭謿<EFBFBD> 撌乩<E6928C>璅∪<E79285><E288AA>㗇𥋘<E39787>其<EFBFBD><E585B6>?
|
||||
### 6️⃣ 工作模式选择器优化
|
||||
|
||||
#### Collapse蝏<EFBFBD>辣蝎曄<EFBFBD><EFBFBD>?
|
||||
#### Collapse组件精细化
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<Collapse className="mb-4 bg-white border border-gray-200 rounded-xl shadow-sm">
|
||||
<Collapse.Panel header={<div className="font-bold text-slate-800">📚 工作模式</div>}>
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<Collapse className="bg-white border border-gray-100 rounded-lg shadow-sm" bordered={false}>
|
||||
<Collapse.Panel header={
|
||||
<div className="font-semibold text-slate-800 text-sm flex items-center">
|
||||
@@ -201,10 +201,10 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
}>
|
||||
```
|
||||
|
||||
**<EFBFBD>寡<EFBFBD><EFBFBD>?*:
|
||||
- 颲寞<EFBFBD>憸𡏭𠧧嚗䫤border-gray-200` <20>?`border-gray-100`
|
||||
- <EFBFBD><EFBFBD><EFBFBD>嚗䫤rounded-xl` <20>?`rounded-lg`
|
||||
- <EFBFBD><EFBFBD><EFBFBD>摮烾<EFBFBD>嚗䫤font-bold` <20>?`font-semibold`
|
||||
**改进点**:
|
||||
- 边框颜色:`border-gray-200` → `border-gray-100`
|
||||
- 圆角:`rounded-xl` → `rounded-lg`
|
||||
- 标题字重:`font-bold` → `font-semibold`
|
||||
- 添加 `bordered={false}` 移除Ant Design默认边框
|
||||
|
||||
#### Radio选项优化
|
||||
@@ -221,11 +221,11 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
---
|
||||
|
||||
### 7儭謿<EFBFBD> Progress餈𥕦漲<EFBFBD>∩<EFBFBD><EFBFBD>?
|
||||
### 7️⃣ Progress进度条优化
|
||||
|
||||
#### <EFBFBD>臬耦餈𥕦漲<EFBFBD>∠移蝏<EFBFBD><EFBFBD><EFBFBD>?
|
||||
#### 环形进度条精细调整
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<Progress
|
||||
type="circle"
|
||||
percent={calculateTokenUsage()}
|
||||
@@ -233,11 +233,11 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
strokeColor="#3b82f6"
|
||||
/>
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<Progress
|
||||
type="circle"
|
||||
percent={calculateTokenUsage()}
|
||||
width={42} // 蝔滚之銝<EFBFBD><EFBFBD>?
|
||||
width={42} // 稍大一点
|
||||
strokeColor="#3b82f6"
|
||||
trailColor="#e5e7eb" // 轨道颜色
|
||||
strokeWidth={8} // 线条宽度
|
||||
@@ -246,22 +246,22 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
---
|
||||
|
||||
### 8儭謿<EFBFBD> Alert<EFBFBD>鞟內獢<EFBFBD><EFBFBD><EFBFBD>?
|
||||
### 8️⃣ Alert提示框优化
|
||||
|
||||
#### 结构和样式精细化
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<Alert
|
||||
message="<EFBFBD><EFBFBD> <20>冽<EFBFBD><E586BD><EFBFBD>粉璅∪<E79285>嚗𡁜歇<F0A1819C>㰘蝸 X 蝭<><E89DAD>獢<EFBFBD><E78DA2><EFBFBD>?
|
||||
description="AI撠<EFBFBD>遞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>桃<EFBFBD><EFBFBD>函<EFBFBD>獢?
|
||||
message="🌍 全文阅读模式:已加载 X 篇文档全文"
|
||||
description="AI将综合所有文献给您答案"
|
||||
type="info"
|
||||
/>
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<Alert
|
||||
message={
|
||||
<span className="font-semibold text-sm">
|
||||
<EFBFBD><EFBFBD> <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>粉璅∪<EFBFBD>嚗𡁜歇<EFBFBD>㰘蝸 {documents.length} 蝭<EFBFBD><EFBFBD>獢<EFBFBD><EFBFBD><EFBFBD>?
|
||||
🌍 全文阅读模式:已加载 {documents.length} 篇文档全文
|
||||
</span>
|
||||
}
|
||||
description={
|
||||
@@ -274,33 +274,33 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
/>
|
||||
```
|
||||
|
||||
**<EFBFBD>寡<EFBFBD><EFBFBD>?*:
|
||||
**改进点**:
|
||||
- 标题加粗:`font-semibold`
|
||||
- 描述文字:`text-xs text-slate-600 leading-relaxed`
|
||||
- <EFBFBD>峕艶隡睃<EFBFBD>嚗䫤bg-blue-50/50` (50%<EFBFBD>𤩺<EFBFBD>摨?
|
||||
- 背景优化:`bg-blue-50/50` (50%透明度)
|
||||
- 边框优化:`border-blue-100`
|
||||
|
||||
---
|
||||
|
||||
### 9️⃣ 表格优化
|
||||
|
||||
#### <EFBFBD>嗆<EFBFBD><EFBFBD>噬蝡𣳇<EFBFBD><EFBFBD>?
|
||||
#### 状态徽章重构
|
||||
```tsx
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改前
|
||||
<span className="... bg-green-50 text-green-700 border border-green-100">
|
||||
|
||||
// 靽格㺿<EFBFBD>?
|
||||
// 修改后
|
||||
<span className="inline-flex items-center px-2.5 py-1 rounded-md text-xs font-medium border bg-green-50 text-green-700 border-green-200">
|
||||
<CheckCircle2 className="w-3 h-3" />
|
||||
<span className="ml-1.5">解析完成</span>
|
||||
</span>
|
||||
```
|
||||
|
||||
**<EFBFBD>寡<EFBFBD><EFBFBD>?*:
|
||||
- padding憓𧼮<EFBFBD>嚗䫤px-2 py-0.5` <20>?`px-2.5 py-1`
|
||||
- <EFBFBD><EFBFBD><EFBFBD>嚗䫤rounded` <20>?`rounded-md`
|
||||
- <EFBFBD>暹<EFBFBD><EFBFBD>渲<EFBFBD>嚗䫤mr-1` <20>?`ml-1.5`
|
||||
- 颲寞<EFBFBD>憸𡏭𠧧<EFBFBD>䭾楛嚗䫤border-green-100` <20>?`border-green-200`
|
||||
**改进点**:
|
||||
- padding增加:`px-2 py-0.5` → `px-2.5 py-1`
|
||||
- 圆角:`rounded` → `rounded-md`
|
||||
- 图标间距:`mr-1` → `ml-1.5`
|
||||
- 边框颜色加深:`border-green-100` → `border-green-200`
|
||||
|
||||
#### 表格样式优化
|
||||
```tsx
|
||||
@@ -309,7 +309,7 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
className="pkb-document-table" // 添加自定义class
|
||||
columns={[
|
||||
{
|
||||
title: '<EFBFBD><EFBFBD>辣<EFBFBD>?,
|
||||
title: '文件名',
|
||||
render: (text) => (
|
||||
<div className="flex items-center py-1"> {/* 添加py-1 */}
|
||||
<div className="w-9 h-9 bg-red-50 text-red-500 rounded-lg flex items-center justify-center mr-3 flex-shrink-0">
|
||||
@@ -330,7 +330,7 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
background-color: #f9fafb; /* 表头背景 */
|
||||
color: #6b7280; /* 表头文字 */
|
||||
font-weight: 600; /* 字重 */
|
||||
padding: 14px 16px; /* <EFBFBD><EFBFBD>器頝?*/
|
||||
padding: 14px 16px; /* 内边距 */
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
}
|
||||
|
||||
@@ -348,15 +348,15 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
### 🔟 背景颜色优化
|
||||
|
||||
#### 憭𡁜<EFBFBD>甈∟<EFBFBD><EFBFBD>?
|
||||
#### 多层次背景
|
||||
```tsx
|
||||
// 憭硋<EFBFBD>摰孵膥嚗𡁏<EFBFBD><EFBFBD>啗<EFBFBD><EFBFBD>?
|
||||
// 外层容器:浅灰背景
|
||||
<div className="h-full flex overflow-hidden bg-gray-50">
|
||||
|
||||
// Chat<EFBFBD>箏<EFBFBD>嚗𡁶蒾<EFBFBD>脰<EFBFBD><EFBFBD>?
|
||||
// Chat区域:白色背景
|
||||
<div className="flex-1 flex flex-col bg-white overflow-hidden">
|
||||
|
||||
// Alert<EFBFBD>箏<EFBFBD>嚗𡁶<EFBFBD><EFBFBD>脰<EFBFBD><EFBFBD>臬躹<EFBFBD>?
|
||||
// Alert区域:灰色背景区分
|
||||
<div className="flex-shrink-0 px-6 py-5 bg-gray-50 border-b border-gray-100">
|
||||
```
|
||||
|
||||
@@ -372,16 +372,16 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
### 视觉效果对比
|
||||
|
||||
| 憿寧𤌍 | 隡睃<E99AA1><E79D83>?| 隡睃<E99AA1><E79D83>?| <20>𣂼<EFBFBD>摨?|
|
||||
| 项目 | 优化前 | 优化后 | 提升度 |
|
||||
|------|--------|--------|--------|
|
||||
| <EFBFBD><EFBFBD><EFBFBD>摮烾<EFBFBD> | font-bold (700) | font-semibold (600) | <EFBFBD>?<3F>游<EFBFBD>靚?|
|
||||
| 颲<EFBFBD>𨭌<EFBFBD><EFBFBD><EFBFBD> | text-gray-500 | text-slate-500 + leading-relaxed | <EFBFBD>?<3F>湔<EFBFBD><E6B994>?|
|
||||
| 颲寞<EFBFBD>憸𡏭𠧧 | border-gray-200 | border-gray-100 | <EFBFBD>?<3F>湔<EFBFBD><E6B994>?|
|
||||
| <EFBFBD><EFBFBD><EFBFBD>憭批<EFBFBD> | 銝滨<E98A9D>銝<EFBFBD> | 蝏煺<E89D8F>8px (rounded-lg) | <EFBFBD>?<3F>港<EFBFBD><E6B8AF>?|
|
||||
| <EFBFBD>渲<EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 銝滩<E98A9D><E6BBA9>?| px-6 py-5 <20><><EFBFBD><EFBFBD>?| <20>?<3F>渲<EFBFBD><E6B8B2>?|
|
||||
| <EFBFBD>游蔣<EFBFBD><EFBFBD><EFBFBD> | <20>䭾<EFBFBD>餈<EFBFBD><E9A488> | shadow-sm頧餃凝<E9A483>游蔣 | <20>?<3F>渡<EFBFBD>雿?|
|
||||
| Tab擃睃漲 | 56px (餈<EFBFBD><EFBFBD>) | 48px (蝎曉<EFBFBD>) | <EFBFBD>?<3F>渡移<E6B8A1>?|
|
||||
| <EFBFBD>嗆<EFBFBD><EFBFBD>噬蝡?| 蝞<><E89D9E>?| 蝎曇稲<E69B87>瑕<EFBFBD>+<2B>暹<EFBFBD> | <20>?<3F>港<EFBFBD>銝?|
|
||||
| 标题字重 | font-bold (700) | font-semibold (600) | ✅ 更协调 |
|
||||
| 辅助文字 | text-gray-500 | text-slate-500 + leading-relaxed | ✅ 更清晰 |
|
||||
| 边框颜色 | border-gray-200 | border-gray-100 | ✅ 更柔和 |
|
||||
| 圆角大小 | 不统一 | 统一8px (rounded-lg) | ✅ 更一致 |
|
||||
| 间距标准 | 不规范 | px-6 py-5 标准化 | ✅ 更舒适 |
|
||||
| 阴影效果 | 无或过重 | shadow-sm轻微阴影 | ✅ 更立体 |
|
||||
| Tab高度 | 56px (过高) | 48px (精准) | ✅ 更精致 |
|
||||
| 状态徽章 | 简单 | 精致样式+图标 | ✅ 更专业 |
|
||||
|
||||
### 细节提升对比
|
||||
|
||||
@@ -416,17 +416,17 @@ shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||||
|
||||
## 📁 修改文件清单
|
||||
|
||||
### 靽格㺿<EFBFBD><EFBFBD>辣嚗?銝迎<E98A9D>
|
||||
### 修改文件(5个)
|
||||
```
|
||||
frontend-v2/src/modules/pkb/
|
||||
├── pages/
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> WorkspacePage.tsx (<EFBFBD>券𢒰蝎曄<EFBFBD><EFBFBD>碶<EFBFBD><EFBFBD>?
|
||||
│ └── WorkspacePage.tsx (全面精细化优化)
|
||||
├── components/Workspace/
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> WorkModeSelector.tsx (摮𦯀<EFBFBD><EFBFBD><EFBFBD>𡢿頝腈<EFBFBD><EFBFBD><EFBFBD>閫雴<EFBFBD><EFBFBD>?
|
||||
<EFBFBD>? <20>鎿<EFBFBD><E98EBF><EFBFBD> FullTextMode.tsx (Alert<EFBFBD>瑕<EFBFBD>隡睃<EFBFBD>)
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> DeepReadMode.tsx (Alert<EFBFBD>瑕<EFBFBD>隡睃<EFBFBD>)
|
||||
│ ├── WorkModeSelector.tsx (字体、间距、圆角优化)
|
||||
│ ├── FullTextMode.tsx (Alert样式优化)
|
||||
│ └── DeepReadMode.tsx (Alert样式优化)
|
||||
└── styles/
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> workspace.css (<EFBFBD>啣<EFBFBD><EFBFBD>芸<EFBFBD>銋㗇甅撘?
|
||||
└── workspace.css (新增自定义样式)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -437,8 +437,8 @@ frontend-v2/src/modules/pkb/
|
||||
```typescript
|
||||
const colors = {
|
||||
// 文字颜色
|
||||
primary: '#1F2937', // text-slate-800 (銝餅<EFBFBD>憸?
|
||||
secondary: '#334155', // text-slate-700 (<EFBFBD>舀<EFBFBD>憸?
|
||||
primary: '#1F2937', // text-slate-800 (主标题)
|
||||
secondary: '#334155', // text-slate-700 (副标题)
|
||||
tertiary: '#64748B', // text-slate-500 (辅助文字)
|
||||
quaternary: '#94A3B8', // text-slate-400 (次要信息)
|
||||
|
||||
@@ -447,8 +447,8 @@ const colors = {
|
||||
borderStrong: '#E5E7EB', // border-gray-200 (明显分隔)
|
||||
|
||||
// 背景颜色
|
||||
bgPrimary: '#FFFFFF', // bg-white (銝餉<EFBFBD><EFBFBD>?
|
||||
bgSecondary: '#F9FAFB', // bg-gray-50 (甈∟<EFBFBD><EFBFBD>?
|
||||
bgPrimary: '#FFFFFF', // bg-white (主背景)
|
||||
bgSecondary: '#F9FAFB', // bg-gray-50 (次背景)
|
||||
};
|
||||
```
|
||||
|
||||
@@ -484,8 +484,8 @@ const spacing = {
|
||||
```typescript
|
||||
const borderRadius = {
|
||||
sm: 'rounded-md', // 6px (徽章)
|
||||
md: 'rounded-lg', // 8px (<EFBFBD>∠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
lg: 'rounded-xl', // 12px (颲枏<EFBFBD>獢?
|
||||
md: 'rounded-lg', // 8px (卡片、按钮)
|
||||
lg: 'rounded-xl', // 12px (输入框)
|
||||
full: 'rounded-full', // 9999px (头像)
|
||||
};
|
||||
```
|
||||
@@ -495,8 +495,8 @@ const borderRadius = {
|
||||
const shadows = {
|
||||
sm: 'shadow-sm', // 轻微阴影 (卡片)
|
||||
md: 'shadow', // 标准阴影 (弹窗)
|
||||
lg: 'shadow-md', // 銝剔<EFBFBD><EFBFBD>游蔣 (銝餅<E98A9D><E9A485>?
|
||||
xl: 'shadow-lg', // 憭折狍敶?(璅⊥<E79285><E28AA5><EFBFBD>)
|
||||
lg: 'shadow-md', // 中等阴影 (主按钮)
|
||||
xl: 'shadow-lg', // 大阴影 (模态框)
|
||||
};
|
||||
```
|
||||
|
||||
@@ -515,7 +515,7 @@ const typography = {
|
||||
xs: 'text-xs', // 12px (辅助说明)
|
||||
sm: 'text-sm', // 14px (正文)
|
||||
base: 'text-base', // 16px (标题)
|
||||
lg: 'text-lg', // 18px (憭扳<EFBFBD>憸?
|
||||
lg: 'text-lg', // 18px (大标题)
|
||||
},
|
||||
|
||||
// 行高
|
||||
@@ -528,10 +528,10 @@ const typography = {
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>?撉諹<E69289>皜<EFBFBD><E79A9C>
|
||||
## ✅ 验证清单
|
||||
|
||||
### 敹<EFBFBD>◆撉諹<EFBFBD>嚗㇊0嚗?
|
||||
- [x] Tab撖潸⏛擃睃漲銝?8px
|
||||
### 必须验证(P0)
|
||||
- [x] Tab导航高度为48px
|
||||
- [x] 字体使用font-semibold
|
||||
- [x] 边框颜色为border-gray-100
|
||||
- [x] 圆角统一为rounded-lg (8px)
|
||||
@@ -539,13 +539,13 @@ const typography = {
|
||||
- [x] 轻微阴影效果
|
||||
- [x] 辅助文字颜色淡化
|
||||
|
||||
### 摨磰砲撉諹<EFBFBD>嚗㇊1嚗?
|
||||
### 应该验证(P1)
|
||||
- [ ] 表格悬停效果流畅
|
||||
- [ ] <EFBFBD>嗆<EFBFBD><EFBFBD>噬蝡䭾甅撘讐移<EFBFBD>?
|
||||
- [ ] 状态徽章样式精致
|
||||
- [ ] Alert背景半透明
|
||||
- [ ] Progress餈𥕦漲<EFBFBD>⊥<EFBFBD><EFBFBD>?
|
||||
- [ ] Progress进度条流畅
|
||||
|
||||
### <EFBFBD>臭誑隡睃<EFBFBD>嚗㇊2嚗?
|
||||
### 可以优化(P2)
|
||||
- [ ] 动画过渡效果
|
||||
- [ ] 响应式布局优化
|
||||
- [ ] 深色模式支持
|
||||
@@ -554,34 +554,33 @@ const typography = {
|
||||
|
||||
## 💡 设计原则总结
|
||||
|
||||
<EFBFBD>寞旿撌株<EFBFBD><EFBFBD><EFBFBD>﹝嚗峕<EFBFBD>隞祇<EFBFBD>敺芯<EFBFBD>隞乩<EFBFBD>霈曇恣<EFBFBD>笔<EFBFBD>嚗?
|
||||
根据差距文档,我们遵循了以下设计原则:
|
||||
|
||||
### 1. 视觉层级清晰
|
||||
- <EFBFBD>?<3F><><EFBFBD>雿輻鍂font-semibold嚗𣬚<EFBFBD><EFBFBD>粹<EFBFBD><EFBFBD>?
|
||||
- <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>憸𡏭𠧧瘛∪<E7989B>嚗峕<E59A97>撘<EFBFBD>撅<EFBFBD>漣
|
||||
- <EFBFBD>?<3F>渲<EFBFBD><E6B8B2><EFBFBD><EFBFBD>嚗<EFBFBD>鐤<EFBFBD>豢<EFBFBD>撘?
|
||||
- ✅ 标题使用font-semibold,突出重点
|
||||
- ✅ 辅助文字颜色淡化,拉开层级
|
||||
- ✅ 间距合理,呼吸感强
|
||||
|
||||
### 2. 细节精致
|
||||
- <EFBFBD>?<3F><><EFBFBD>蝏煺<E89D8F>銝?px
|
||||
- <EFBFBD>?頧餃凝<E9A483>游蔣憓𧼮<E68693>蝡衤<E89DA1><E8A1A4>?
|
||||
- <EFBFBD>?颲寞<E9A2B2>憸𡏭𠧧瘛∪<E7989B>嚗峕凒<E5B395>𥪜<EFBFBD>
|
||||
- ✅ 圆角统一为8px
|
||||
- ✅ 轻微阴影增加立体感
|
||||
- ✅ 边框颜色淡化,更柔和
|
||||
|
||||
### 3. <EFBFBD>渲<EFBFBD><EFBFBD>㘾<EFBFBD>?
|
||||
- <EFBFBD>?憿菟𢒰颲寡<E9A2B2>20-24px
|
||||
- <EFBFBD>?蝏<>辣<EFBFBD>渲<EFBFBD>16-20px
|
||||
- <EFBFBD>?<3F><>捆銝滩斐颲?
|
||||
### 3. 间距舒适
|
||||
- ✅ 页面边距20-24px
|
||||
- ✅ 组件间距16-20px
|
||||
- ✅ 内容不贴边
|
||||
|
||||
### 4. 颜色协调
|
||||
- <EFBFBD>?銝餅<E98A9D>摮?1F2937
|
||||
- <EFBFBD>?颲<>𨭌<EFBFBD><F0A8AD8C><EFBFBD>#64748B
|
||||
- <EFBFBD>?颲寞<E9A2B2>#F3F4F6
|
||||
- ✅ 主文字#1F2937
|
||||
- ✅ 辅助文字#64748B
|
||||
- ✅ 边框#F3F4F6
|
||||
|
||||
---
|
||||
|
||||
**优化完成时间**: 2026-01-06
|
||||
**隡睃<EFBFBD>鈭?*: AI Assistant
|
||||
**撉諹<EFBFBD><EFBFBD>嗆<EFBFBD>?*: 敺<>鍂<EFBFBD>瑕<EFBFBD><E79195>圈△<E59C88>Y&霈?
|
||||
|
||||
**优化人**: AI Assistant
|
||||
**验证状态**: 待用户刷新页面确认
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user