145 lines
4.4 KiB
Markdown
145 lines
4.4 KiB
Markdown
# NexDocus 功能增强实现计划
|
||
|
||
## Stage 1: 路由调整和项目成员管理
|
||
**Goal**: 调整路由结构,实现项目卡片上的成员管理功能
|
||
**Success Criteria**:
|
||
- /projects/my 路由正常工作
|
||
- /projects/share 路由正常工作
|
||
- 项目卡片上可以打开成员管理弹窗
|
||
- 可以添加/删除项目成员
|
||
**Tests**:
|
||
- 访问 /projects/my 显示我创建的项目
|
||
- 访问 /projects/share 显示我参与的项目
|
||
- 点击项目卡片的成员图标打开成员管理弹窗
|
||
- 成功添加用户到项目
|
||
- 成功从项目删除用户
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## Stage 2: 个人桌面统计增强
|
||
**Goal**: 在个人桌面增加"参加项目数"统计
|
||
**Success Criteria**:
|
||
- 个人桌面显示参加项目数
|
||
- 统计数据准确(我创建的项目 + 我参与的项目)
|
||
**Tests**:
|
||
- 创建新项目后,个人项目数 +1
|
||
- 加入协作项目后,参加项目数 +1
|
||
- 统计卡片正确显示两个数值
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## Stage 3: 参与项目视图和权限控制
|
||
**Goal**: 实现参与项目单独视图,区分所有者和成员权限
|
||
**Success Criteria**:
|
||
- /projects/share 页面单独展示我参与的项目(非所有者)
|
||
- 项目卡片根据角色显示不同操作选项
|
||
- 成员不能删除项目(删除按钮不显示)
|
||
- 成员可以编辑项目内文档
|
||
**Tests**:
|
||
- 参与者打开 /projects/share 只看到协作项目
|
||
- 参与者看不到删除项目按钮
|
||
- 参与者可以正常编辑文档
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## Stage 4: 操作日志功能
|
||
**Goal**: 为文档编辑操作记录日志
|
||
**Success Criteria**:
|
||
- 创建者编辑文档时记录到 operation_logs 表
|
||
- 参与者编辑文档时记录到 operation_logs 表
|
||
- 日志包含用户ID、操作类型、资源信息
|
||
**Tests**:
|
||
- 编辑文档后,operation_logs 表有新记录
|
||
- 日志包含正确的用户ID和文档路径
|
||
- 不同用户编辑生成不同日志
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## Stage 5: 项目编辑功能
|
||
**Goal**: 在我的项目卡片上增加编辑功能
|
||
**Success Criteria**:
|
||
- 项目卡片显示编辑按钮(仅所有者)
|
||
- 点击编辑弹出表单
|
||
- 可以修改项目名称、描述、公开性
|
||
**Tests**:
|
||
- 项目所有者看到编辑按钮
|
||
- 编辑项目信息成功保存
|
||
- 非所有者不显示编辑按钮
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## Stage 6: 全局搜索功能
|
||
**Goal**: 实现全局搜索文档内容
|
||
**Success Criteria**:
|
||
- 后端提供搜索API(搜索文档元数据+内容)
|
||
- 前端增加全局搜索框
|
||
- 搜索结果显示匹配的文档列表
|
||
- 点击结果跳转到对应文档
|
||
**Tests**:
|
||
- 搜索文档标题能找到对应文档
|
||
- 搜索文档内容能找到包含关键词的文档
|
||
- 搜索结果高亮显示关键词
|
||
- 点击搜索结果正确跳转
|
||
**Status**: ✅ Completed
|
||
|
||
---
|
||
|
||
## 技术决策
|
||
|
||
### 数据库变更
|
||
- 无需修改现有表结构(project_members 和 operation_logs 已存在)
|
||
|
||
### 后端API新增
|
||
1. `GET /projects/my` - 获取我创建的项目
|
||
2. `GET /projects/shared` - 获取我参与的项目
|
||
3. `POST /projects/{project_id}/members` - 添加项目成员(已存在,需测试)
|
||
4. `DELETE /projects/{project_id}/members/{user_id}` - 删除项目成员(需新增)
|
||
5. `POST /search/documents` - 全局文档搜索(需新增)
|
||
6. 修改 `POST /files/{project_id}/file` - 增加操作日志记录
|
||
|
||
### 前端路由调整
|
||
- `/projects/my` - 我的项目(原 /projects)
|
||
- `/projects/share` - 参与的项目(新增)
|
||
- 保持 `/projects` 作为默认,重定向到 `/projects/my`
|
||
|
||
### 权限控制策略
|
||
- 项目所有者:完全控制(增删改查、成员管理、删除项目)
|
||
- 项目管理员(ADMIN):文档管理、成员管理
|
||
- 项目编辑者(EDITOR):文档编辑
|
||
- 项目查看者(VIEWER):仅查看
|
||
|
||
### 操作日志设计
|
||
```json
|
||
{
|
||
"user_id": 1,
|
||
"username": "admin",
|
||
"operation_type": "update",
|
||
"resource_type": "document",
|
||
"resource_id": 123,
|
||
"detail": {
|
||
"project_id": 10,
|
||
"file_path": "/docs/readme.md",
|
||
"action": "edit",
|
||
"changes": "content_modified"
|
||
},
|
||
"ip_address": "192.168.1.1",
|
||
"status": 1
|
||
}
|
||
```
|
||
|
||
### 全局搜索实现方案
|
||
1. **基础版本(当前阶段)**:
|
||
- 搜索 document_meta 表的 title 字段
|
||
- 读取磁盘文件内容进行关键词匹配
|
||
- 适用于小规模项目
|
||
|
||
2. **未来优化(可选)**:
|
||
- 使用 Elasticsearch 全文检索
|
||
- 添加文档内容索引到数据库
|
||
- 实现增量索引更新
|