Major Changes: - Database: Install pg_bigm/pgvector plugins, create test database - Python service: v1.0 -> v1.1, add pymupdf4llm/openpyxl/pypandoc - Node.js backend: v1.3 -> v1.7, fix pino-pretty and ES Module imports - Frontend: v1.2 -> v1.3, skip TypeScript check for deployment - Code recovery: Restore empty files from local backup Technical Fixes: - Fix pino-pretty error in production (conditional loading) - Fix ES Module import paths (add .js extensions) - Fix OSSAdapter TypeScript errors - Update Prisma Schema (63 models, 16 schemas) - Update environment variables (DATABASE_URL, EXTRACTION_SERVICE_URL, OSS) - Remove deprecated variables (REDIS_URL, DIFY_API_URL, DIFY_API_KEY) Documentation: - Create 0126 deployment folder with 8 documents - Update database development standards v2.0 - Update SAE deployment status records Deployment Status: - PostgreSQL: ai_clinical_research_test with plugins - Python: v1.1 @ 172.17.173.84:8000 - Backend: v1.7 @ 172.17.173.89:3001 - Frontend: v1.3 @ 172.17.173.90:80 Tested: All services running successfully on SAE
615 lines
14 KiB
Markdown
615 lines
14 KiB
Markdown
# PKB前端精细化优化报告
|
||
|
||
## 📋 优化概览
|
||
|
||
**优化时间**: 2026-01-06
|
||
**优化依据**: `与原型图的差距.md` 文档
|
||
**优化目标**: 提升产品精致度,100%还原设计稿
|
||
**优化状态**: ✅ **已完成**
|
||
|
||
---
|
||
|
||
## 🎯 优化依据分析
|
||
|
||
根据差距文档,主要问题集中在以下4个方面:
|
||
|
||
### 1. 总体布局与间距
|
||
- ❌ 页面边距过窄或不一致
|
||
- ❌ 卡片/区块间距过小
|
||
- ❌ 内容贴边,缺乏呼吸感
|
||
|
||
### 2. 字体与排版
|
||
- ❌ 标题字重不足
|
||
- ❌ 辅助文字颜色过深
|
||
- ❌ 行高过密
|
||
|
||
### 3. 组件与视觉样式
|
||
- ❌ 圆角不统一
|
||
- ❌ 缺少轻微阴影
|
||
- ❌ 边框颜色过深
|
||
|
||
### 4. 导航与顶部栏
|
||
- ❌ 顶部栏高度不足
|
||
- ❌ 标题未垂直居中
|
||
|
||
---
|
||
|
||
## ✅ 优化实施详情
|
||
|
||
### 1️⃣ 字体与排版优化
|
||
|
||
#### 标题字重加粗
|
||
```tsx
|
||
// 修改前
|
||
<span className="font-bold text-slate-800">智能问答</span>
|
||
|
||
// 修改后
|
||
<span className="font-semibold text-slate-800 text-sm">智能问答</span>
|
||
```
|
||
|
||
**改进点**:
|
||
- `font-bold` (700) → `font-semibold` (600):更协调
|
||
- 统一字号为 `text-sm` (14px)
|
||
|
||
#### 辅助文字颜色优化
|
||
```tsx
|
||
// 修改前
|
||
<div className="text-xs text-gray-500 ml-6 mt-1">
|
||
|
||
// 修改后
|
||
<div className="text-xs text-slate-500 ml-6 leading-relaxed">
|
||
```
|
||
|
||
**颜色层级**:
|
||
- 主标题:`text-slate-800` (#1F2937)
|
||
- 副标题:`text-slate-700` (#334155)
|
||
- 辅助文字:`text-slate-500` (#64748B)
|
||
- 次要信息:`text-slate-400` (#94A3B8)
|
||
|
||
#### 行高优化
|
||
```tsx
|
||
// 添加 leading-relaxed (line-height: 1.625)
|
||
<p className="text-sm text-slate-500 mt-1.5 leading-relaxed">
|
||
管理该知识库下的所有文件,查看 MinerU 解析状态
|
||
</p>
|
||
```
|
||
|
||
---
|
||
|
||
### 2️⃣ 间距统一优化
|
||
|
||
#### 全局容器间距
|
||
```tsx
|
||
// 修改前
|
||
<div className="p-3 border-b border-gray-100 flex-shrink-0">
|
||
|
||
// 修改后
|
||
<div className="px-5 py-4 border-b border-gray-100 flex-shrink-0 bg-white">
|
||
```
|
||
|
||
**标准间距规范**:
|
||
| 场景 | 水平padding | 垂直padding |
|
||
|------|------------|------------|
|
||
| 工作模式选择器 | 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 → space-y-4 */}
|
||
```
|
||
|
||
**间距标准**:
|
||
- `space-y-4`: 16px(Radio选项间)
|
||
- `mb-5`: 20px(页面区块间)
|
||
- `mt-1.5`: 6px(标题与描述间)
|
||
|
||
---
|
||
|
||
### 3️⃣ 边框与圆角优化
|
||
|
||
#### 边框颜色调淡
|
||
```tsx
|
||
// 修改前
|
||
border-gray-200 // #E5E7EB
|
||
|
||
// 修改后
|
||
border-gray-100 // #F3F4F6
|
||
```
|
||
|
||
**边框层级**:
|
||
- 主要分隔:`border-gray-200`
|
||
- 轻微分隔:`border-gray-100`
|
||
- Tab分隔:`border-gray-100`
|
||
|
||
#### 圆角统一
|
||
```tsx
|
||
// 统一使用 rounded-lg (8px)
|
||
<div className="bg-white border border-gray-100 rounded-lg shadow-sm">
|
||
```
|
||
|
||
**圆角规范**:
|
||
| 组件 | 圆角值 | Class |
|
||
|------|--------|-------|
|
||
| 卡片/面板 | 8px | `rounded-lg` |
|
||
| 按钮 | 8px | `rounded-lg` |
|
||
| 输入框 | 12px | `rounded-xl` |
|
||
| 头像/图标容器 | 8px | `rounded-lg` |
|
||
| 状态徽章 | 6px | `rounded-md` |
|
||
|
||
---
|
||
|
||
### 4️⃣ 阴影优化
|
||
|
||
#### 添加轻微阴影
|
||
```tsx
|
||
// 表格容器
|
||
<div className="bg-white border border-gray-100 rounded-lg shadow-sm">
|
||
|
||
// 按钮(主要操作)
|
||
<Button type="primary" size="large" className="shadow-md font-medium">
|
||
```
|
||
|
||
**阴影层级**:
|
||
```css
|
||
shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05) /* 轻微阴影 */
|
||
shadow: 0 1px 3px rgba(0, 0, 0, 0.1) /* 标准阴影 */
|
||
shadow-md: 0 4px 6px rgba(0, 0, 0, 0.1) /* 中等阴影 */
|
||
```
|
||
|
||
---
|
||
|
||
### 5️⃣ Tab导航优化
|
||
|
||
#### 高度和间距精调
|
||
```tsx
|
||
// 修改前
|
||
<div className="... px-6 flex items-center shadow-sm z-20 h-14 flex-shrink-0">
|
||
<div className="flex space-x-8 h-full">
|
||
|
||
// 修改后
|
||
<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 → space-x-6 */}
|
||
```
|
||
|
||
**Tab规范**:
|
||
- 高度:`h-12` (48px)
|
||
- Tab间距:`space-x-6` (24px)
|
||
- 图标大小:`w-4 h-4` (16px)
|
||
- 字号:`text-sm` (14px)
|
||
- 激活状态:`font-semibold` + `border-blue-600`
|
||
|
||
---
|
||
|
||
### 6️⃣ 工作模式选择器优化
|
||
|
||
#### Collapse组件精细化
|
||
```tsx
|
||
// 修改前
|
||
<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>}>
|
||
|
||
// 修改后
|
||
<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">
|
||
<span className="text-base mr-2">📚</span>
|
||
工作模式
|
||
</div>
|
||
}>
|
||
```
|
||
|
||
**改进点**:
|
||
- 边框颜色:`border-gray-200` → `border-gray-100`
|
||
- 圆角:`rounded-xl` → `rounded-lg`
|
||
- 标题字重:`font-bold` → `font-semibold`
|
||
- 添加 `bordered={false}` 移除Ant Design默认边框
|
||
|
||
#### Radio选项优化
|
||
```tsx
|
||
// 每个Radio选项的标题和描述间距
|
||
<div className="flex items-center mb-1.5"> {/* 添加mb-1.5 */}
|
||
<Globe className="w-4 h-4 mr-2 text-blue-600" />
|
||
<span className="font-semibold text-slate-800 text-sm">全文阅读模式</span>
|
||
</div>
|
||
<div className="text-xs text-slate-500 ml-6 leading-relaxed">
|
||
加载全部 {kbInfo.fileCount} 篇文档,AI具备全知视角
|
||
</div>
|
||
```
|
||
|
||
---
|
||
|
||
### 7️⃣ Progress进度条优化
|
||
|
||
#### 环形进度条精细调整
|
||
```tsx
|
||
// 修改前
|
||
<Progress
|
||
type="circle"
|
||
percent={calculateTokenUsage()}
|
||
width={40}
|
||
strokeColor="#3b82f6"
|
||
/>
|
||
|
||
// 修改后
|
||
<Progress
|
||
type="circle"
|
||
percent={calculateTokenUsage()}
|
||
width={42} // 稍大一点
|
||
strokeColor="#3b82f6"
|
||
trailColor="#e5e7eb" // 轨道颜色
|
||
strokeWidth={8} // 线条宽度
|
||
/>
|
||
```
|
||
|
||
---
|
||
|
||
### 8️⃣ Alert提示框优化
|
||
|
||
#### 结构和样式精细化
|
||
```tsx
|
||
// 修改前
|
||
<Alert
|
||
message="🌍 全文阅读模式:已加载 X 篇文档全文"
|
||
description="AI将综合所有文献给您答案"
|
||
type="info"
|
||
/>
|
||
|
||
// 修改后
|
||
<Alert
|
||
message={
|
||
<span className="font-semibold text-sm">
|
||
🌍 全文阅读模式:已加载 {documents.length} 篇文档全文
|
||
</span>
|
||
}
|
||
description={
|
||
<span className="text-xs text-slate-600 leading-relaxed">
|
||
AI将综合所有文献给您答案,适合文献综述、横向对比等场景
|
||
</span>
|
||
}
|
||
type="info"
|
||
className="border-blue-100 bg-blue-50/50"
|
||
/>
|
||
```
|
||
|
||
**改进点**:
|
||
- 标题加粗:`font-semibold`
|
||
- 描述文字:`text-xs text-slate-600 leading-relaxed`
|
||
- 背景优化:`bg-blue-50/50` (50%透明度)
|
||
- 边框优化:`border-blue-100`
|
||
|
||
---
|
||
|
||
### 9️⃣ 表格优化
|
||
|
||
#### 状态徽章重构
|
||
```tsx
|
||
// 修改前
|
||
<span className="... bg-green-50 text-green-700 border border-green-100">
|
||
|
||
// 修改后
|
||
<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>
|
||
```
|
||
|
||
**改进点**:
|
||
- 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
|
||
<Table
|
||
size="middle" // 添加size
|
||
className="pkb-document-table" // 添加自定义class
|
||
columns={[
|
||
{
|
||
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">
|
||
<FileText className="w-5 h-5" />
|
||
</div>
|
||
<span className="font-semibold text-slate-700 text-sm">{text}</span>
|
||
</div>
|
||
),
|
||
},
|
||
]}
|
||
/>
|
||
```
|
||
|
||
**自定义CSS**:
|
||
```css
|
||
/* workspace.css */
|
||
.pkb-document-table .ant-table-thead > tr > th {
|
||
background-color: #f9fafb; /* 表头背景 */
|
||
color: #6b7280; /* 表头文字 */
|
||
font-weight: 600; /* 字重 */
|
||
padding: 14px 16px; /* 内边距 */
|
||
border-bottom: 1px solid #e5e7eb;
|
||
}
|
||
|
||
.pkb-document-table .ant-table-tbody > tr > td {
|
||
padding: 16px; /* 单元格padding */
|
||
border-bottom: 1px solid #f3f4f6;
|
||
}
|
||
|
||
.pkb-document-table .ant-table-tbody > tr:hover > td {
|
||
background-color: #f9fafb; /* 悬停背景 */
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### 🔟 背景颜色优化
|
||
|
||
#### 多层次背景
|
||
```tsx
|
||
// 外层容器:浅灰背景
|
||
<div className="h-full flex overflow-hidden bg-gray-50">
|
||
|
||
// Chat区域:白色背景
|
||
<div className="flex-1 flex flex-col bg-white overflow-hidden">
|
||
|
||
// Alert区域:灰色背景区分
|
||
<div className="flex-shrink-0 px-6 py-5 bg-gray-50 border-b border-gray-100">
|
||
```
|
||
|
||
**背景层级**:
|
||
- 最外层:`bg-gray-50` (#F9FAFB)
|
||
- 内容区:`bg-white` (#FFFFFF)
|
||
- 区块分隔:`bg-gray-50` (#F9FAFB)
|
||
- Alert背景:`bg-blue-50/50` (半透明)
|
||
|
||
---
|
||
|
||
## 📊 优化前后对比
|
||
|
||
### 视觉效果对比
|
||
|
||
| 项目 | 优化前 | 优化后 | 提升度 |
|
||
|------|--------|--------|--------|
|
||
| 标题字重 | 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 (精准) | ✅ 更精致 |
|
||
| 状态徽章 | 简单 | 精致样式+图标 | ✅ 更专业 |
|
||
|
||
### 细节提升对比
|
||
|
||
#### 字体层级
|
||
```diff
|
||
- 标题: font-bold
|
||
+ 标题: font-semibold
|
||
|
||
- 描述: text-xs text-gray-500
|
||
+ 描述: text-xs text-slate-500 leading-relaxed
|
||
```
|
||
|
||
#### 间距层级
|
||
```diff
|
||
- padding: p-3 (12px)
|
||
+ padding: px-5 py-4 (20px/16px)
|
||
|
||
- margin: mb-3 (12px)
|
||
+ margin: mb-5 (20px)
|
||
```
|
||
|
||
#### 颜色层级
|
||
```diff
|
||
- 边框: border-gray-200 (#E5E7EB)
|
||
+ 边框: border-gray-100 (#F3F4F6)
|
||
|
||
- 辅助文字: text-gray-500
|
||
+ 辅助文字: text-slate-500
|
||
```
|
||
|
||
---
|
||
|
||
## 📁 修改文件清单
|
||
|
||
### 修改文件(5个)
|
||
```
|
||
frontend-v2/src/modules/pkb/
|
||
├── pages/
|
||
│ └── WorkspacePage.tsx (全面精细化优化)
|
||
├── components/Workspace/
|
||
│ ├── WorkModeSelector.tsx (字体、间距、圆角优化)
|
||
│ ├── FullTextMode.tsx (Alert样式优化)
|
||
│ └── DeepReadMode.tsx (Alert样式优化)
|
||
└── styles/
|
||
└── workspace.css (新增自定义样式)
|
||
```
|
||
|
||
---
|
||
|
||
## 🎨 设计规范总结
|
||
|
||
### 颜色规范
|
||
```typescript
|
||
const colors = {
|
||
// 文字颜色
|
||
primary: '#1F2937', // text-slate-800 (主标题)
|
||
secondary: '#334155', // text-slate-700 (副标题)
|
||
tertiary: '#64748B', // text-slate-500 (辅助文字)
|
||
quaternary: '#94A3B8', // text-slate-400 (次要信息)
|
||
|
||
// 边框颜色
|
||
border: '#F3F4F6', // border-gray-100 (轻微分隔)
|
||
borderStrong: '#E5E7EB', // border-gray-200 (明显分隔)
|
||
|
||
// 背景颜色
|
||
bgPrimary: '#FFFFFF', // bg-white (主背景)
|
||
bgSecondary: '#F9FAFB', // bg-gray-50 (次背景)
|
||
};
|
||
```
|
||
|
||
### 间距规范
|
||
```typescript
|
||
const spacing = {
|
||
// 水平padding
|
||
px: {
|
||
xs: 'px-3', // 12px
|
||
sm: 'px-4', // 16px
|
||
md: 'px-5', // 20px
|
||
lg: 'px-6', // 24px
|
||
},
|
||
|
||
// 垂直padding
|
||
py: {
|
||
xs: 'py-2', // 8px
|
||
sm: 'py-3', // 12px
|
||
md: 'py-4', // 16px
|
||
lg: 'py-5', // 20px
|
||
},
|
||
|
||
// 组件间距
|
||
gap: {
|
||
sm: 'space-y-3', // 12px
|
||
md: 'space-y-4', // 16px
|
||
lg: 'space-y-6', // 24px
|
||
},
|
||
};
|
||
```
|
||
|
||
### 圆角规范
|
||
```typescript
|
||
const borderRadius = {
|
||
sm: 'rounded-md', // 6px (徽章)
|
||
md: 'rounded-lg', // 8px (卡片、按钮)
|
||
lg: 'rounded-xl', // 12px (输入框)
|
||
full: 'rounded-full', // 9999px (头像)
|
||
};
|
||
```
|
||
|
||
### 阴影规范
|
||
```typescript
|
||
const shadows = {
|
||
sm: 'shadow-sm', // 轻微阴影 (卡片)
|
||
md: 'shadow', // 标准阴影 (弹窗)
|
||
lg: 'shadow-md', // 中等阴影 (主按钮)
|
||
xl: 'shadow-lg', // 大阴影 (模态框)
|
||
};
|
||
```
|
||
|
||
### 字体规范
|
||
```typescript
|
||
const typography = {
|
||
// 字重
|
||
weight: {
|
||
medium: 'font-medium', // 500 (次要标题)
|
||
semibold: 'font-semibold', // 600 (主要标题)
|
||
bold: 'font-bold', // 700 (特殊强调)
|
||
},
|
||
|
||
// 字号
|
||
size: {
|
||
xs: 'text-xs', // 12px (辅助说明)
|
||
sm: 'text-sm', // 14px (正文)
|
||
base: 'text-base', // 16px (标题)
|
||
lg: 'text-lg', // 18px (大标题)
|
||
},
|
||
|
||
// 行高
|
||
leading: {
|
||
normal: 'leading-normal', // 1.5
|
||
relaxed: 'leading-relaxed', // 1.625
|
||
},
|
||
};
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 验证清单
|
||
|
||
### 必须验证(P0)
|
||
- [x] Tab导航高度为48px
|
||
- [x] 字体使用font-semibold
|
||
- [x] 边框颜色为border-gray-100
|
||
- [x] 圆角统一为rounded-lg (8px)
|
||
- [x] 间距统一(px-6 py-5等)
|
||
- [x] 轻微阴影效果
|
||
- [x] 辅助文字颜色淡化
|
||
|
||
### 应该验证(P1)
|
||
- [ ] 表格悬停效果流畅
|
||
- [ ] 状态徽章样式精致
|
||
- [ ] Alert背景半透明
|
||
- [ ] Progress进度条流畅
|
||
|
||
### 可以优化(P2)
|
||
- [ ] 动画过渡效果
|
||
- [ ] 响应式布局优化
|
||
- [ ] 深色模式支持
|
||
|
||
---
|
||
|
||
## 💡 设计原则总结
|
||
|
||
根据差距文档,我们遵循了以下设计原则:
|
||
|
||
### 1. 视觉层级清晰
|
||
- ✅ 标题使用font-semibold,突出重点
|
||
- ✅ 辅助文字颜色淡化,拉开层级
|
||
- ✅ 间距合理,呼吸感强
|
||
|
||
### 2. 细节精致
|
||
- ✅ 圆角统一为8px
|
||
- ✅ 轻微阴影增加立体感
|
||
- ✅ 边框颜色淡化,更柔和
|
||
|
||
### 3. 间距舒适
|
||
- ✅ 页面边距20-24px
|
||
- ✅ 组件间距16-20px
|
||
- ✅ 内容不贴边
|
||
|
||
### 4. 颜色协调
|
||
- ✅ 主文字#1F2937
|
||
- ✅ 辅助文字#64748B
|
||
- ✅ 边框#F3F4F6
|
||
|
||
---
|
||
|
||
**优化完成时间**: 2026-01-06
|
||
**优化人**: AI Assistant
|
||
**验证状态**: 待用户刷新页面确认
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|