Root cause: save_index() serializes entire 31KB db to JSON and writes to disk for every PUT operation (synchronous blocking call). Fix: Disabled versioning for user WebDAV by changing line 2547 from Some(versioning.clone()) to None. Performance improvement: - Before: 2+ minutes timeout - After: 10-27 milliseconds - Speedup: 12000x faster Tested: 31B, 100KB, 1MB files all upload successfully in <30ms
11 KiB
11 KiB
MarkBase GUI 管理介面检讨报告
版本: 1.0
日期: 2026-06-25
作者: AI Assistant
一、GUI 架构概览
1.1 技术栈
| 组件 | 技术 | 版本 |
|---|---|---|
| 前端框架 | Vue.js 3 | Composition API |
| UI 库 | Element Plus | Latest |
| 桌面框架 | Tauri | v2 |
| 后端语言 | Rust | 1.92+ |
| 数据存储 | SQLite | auth.sqlite |
1.2 代码统计
| 类型 | 数量 | 行数 |
|---|---|---|
| Vue Components | 11 个 | 4860 行 |
| Tauri Commands | 12 个 | ~1500 行 |
| Router Routes | 11 个 | 77 行 |
| 总计 | ~6437 行 |
二、已实现功能
2.1 User Management (Users.vue)
功能完整度: ⭐⭐⭐⭐⭐ (5/5)
| 功能 | 状态 | 说明 |
|---|---|---|
| 用户列表 | ✅ 完成 | 显示 username, home_dir, status |
| 创建用户 | ✅ 完成 | bcrypt 密码加密 + SqliteProvider |
| 编辑用户 | ✅ 完成 | home_dir/status 更新 + 密码可选 |
| 删除用户 | ✅ 完成 | 确认对话框 + SqliteProvider |
| 重置密码 | ✅ 完成 | 弹窗输入新密码 |
代码量: 264 行 Vue + 100 行 Rust
2.2 Share Management (Shares.vue)
功能完整度: ⭐⭐⭐ (3/5)
| 功能 | 状态 | 说明 |
|---|---|---|
| 共享列表 | ✅ 完成 | name, path, protocol, users, permissions |
| 创建共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
| 编辑共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
| 删除共享 | ⚠️ 内存存储 | 重启丢失(需持久化) |
| 连接测试 | ✅ 完成 | path 存在验证 |
| 协议支持 | ✅ 完成 | SMB/SFTP/WebDAV/S3 |
代码量: 295 行 Vue + 152 行 Rust
2.3 Dashboard (Dashboard.vue)
功能完整度: ⭐⭐⭐ (3/5)
| 功能 | 状态 | 说明 |
|---|---|---|
| CPU 监控 | ✅ 完成 | macOS/Linux 双平台 |
| Memory 监控 | ✅ 完成 | macOS/Linux 双平台 |
| Disk 监控 | ✅ 完成 | macOS/Linux 双平台 |
| Service Status | ❌ 硬编码 | 返回固定 4 个服务(未检查实际进程) |
| Recent Activity | ❌ 硬编码 | 返回固定 4 条记录(未连接日志系统) |
| Quick Actions | ❌ 未实现 | 只有 UI,无实际功能 |
| 实时刷新 | ✅ 完成 | 5 秒定时刷新 |
代码量: 302 行 Vue + 290 行 Rust
2.4 Backup Management (Backup.vue)
功能完整度: ⭐⭐⭐⭐ (4/5)
代码量: 497 行 Vue + 3732 行 Rust
三、存在的问题
3.1 关键问题
| 问题 | 严重程度 | 影响 |
|---|---|---|
| Share Management 内存存储 | ⚠️⚠️⚠️⚠️⚠️ 极高 | 重启丢失所有共享配置 |
| Service Status 硬编码 | ⚠️⚠️⚠️⚠️ 高 | 无法反映真实服务状态 |
| Recent Activity 硬编码 | ⚠️⚠️⚠️⚠️ 高 | 无法查看真实操作记录 |
| Quick Actions 未实现 | ⚠️⚠️⚠️ 中 | 用户体验不完整 |
| 无权限管理 | ⚠️⚠️⚠️⚠️ 高 | 无法控制用户访问权限 |
3.2 详细分析
问题 #1: Share Management 内存存储
当前实现:
lazy_static::lazy_static! {
static ref SHARES: Arc<Mutex<Vec<ShareInfo>>> =
Arc::new(Mutex::new(Vec::new()));
}
问题影响:
- 服务器重启后,所有共享配置丢失
- 无法持久化到数据库或配置文件
- 不符合生产环境要求
推荐方案:
- 使用 SQLite 存储(
data/shares.sqlite) - 或 TOML 配置文件(
config/shares.toml)
问题 #2: Service Status 硬编码
当前实现:
pub async fn get_all_services_status() -> Result<Vec<ServiceStatus>, String> {
Ok(vec![
ServiceStatus {
name: "SMB Server".to_string(),
status: "running".to_string(),
port: 4445,
uptime: "2h 30m".to_string(),
},
// ... 固定返回 4 个服务
])
}
问题影响:
- 无法检测服务真实状态(running/stopped)
- 无法获取真实 uptime
- 无法监控服务异常
推荐方案:
- 使用
ps aux | grep检查进程状态 - 或使用 PID 文件追踪服务
- 或使用 systemd/launchd 服务管理
问题 #3: Recent Activity 硬编码
当前实现:
pub async fn get_recent_activity() -> Result<Vec<ActivityLog>, String> {
Ok(vec![
ActivityLog {
timestamp: "2026-06-23 14:30:00".to_string(),
activity_type: "Upload".to_string(),
description: "Uploaded document.pdf to /data/files".to_string(),
user: "alice".to_string(),
},
// ... 固定返回 4 条记录
])
}
问题影响:
- 无法查看真实用户操作
- 无法审计系统行为
- 无法追踪异常事件
推荐方案:
- 使用日志文件(
data/activity.log) - 或 SQLite 存储(
data/activity.sqlite) - 集成现有 SSH/SMB/WebDAV 日志
问题 #4: Quick Actions 未实现
当前实现:
<el-button type="primary" :icon="Upload" class="action-btn">
Upload File
</el-button>
<el-button type="success" :icon="Document" class="action-btn">
Create Backup
</el-button>
// ... 只有按钮,无 @click handler
问题影响:
- 用户点击按钮无响应
- Dashboard 功能不完整
推荐方案:
- Upload File: 调用 Tauri dialog + file_ops.rs
- Create Backup: 调用 backup.rs snapshot 功能
- View Backups: 跳转到 Backup.vue
- Download File: 调用 Tauri dialog + file_ops.rs
问题 #5: 无权限管理
当前实现:
- User Management 只有 CRUD 用户
- Share Management 只有 CRUD 共享
- 缺失:用户-共享权限关联
问题影响:
- 无法控制用户访问哪些共享
- 无法设置读/写权限
- 无法实现多租户隔离
推荐方案:
- 添加 Permission Management 页面
- 用户-共享关联表(user_id, share_id, permission)
- 权限类型:read/write/admin
四、竞争对手对比
4.1 功能对比表
| 功能 | Proxmox VE | Unraid | OpenNAS | MarkBase | 覆盖率 |
|---|---|---|---|---|---|
| Dashboard | ✅ 完整 | ✅ 完整 | ✅ 完整 | ⚠️ 部分 | 60% |
| User Management | ✅ 完整 | ✅ 完整 | ✅ 完整 | ✅ 完整 | 100% |
| Share Management | ✅ 完整 | ✅ 完整 | ✅ 完整 | ⚠️ 内存 | 50% |
| Backup Management | ✅ 完整 | ✅ 完整 | ✅ 完整 | ✅ 完整 | 100% |
| Permission Management | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 缺失 | 0% |
| Service Monitoring | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 硬编码 | 30% |
| Activity Log | ✅ 完整 | ✅ 完整 | ✅ 完整 | ❌ 硕编码 | 30% |
| VM Management | ✅ 完整 | ❌ 无 | ❌ 无 | ❌ 无 | N/A |
| Container Management | ✅ 完整 | ✅ 完整 | ❌ 无 | ❌ 无 | N/A |
| HA Cluster | ✅ 完整 | ❌ 无 | ❌ 无 | ❌ 无 | N/A |
总体覆盖率: 47% (存储 + 备份)
4.2 竞争对手优势
Proxmox VE:
- ✅ 完整的 VM/Container 管理
- ✅ HA Cluster 支持
- ✅ 企业级权限管理
- ✅ 完整的监控告警系统
- ✅ API + CLI + Web UI 三位一体
Unraid:
- ✅ Docker Container 管理
- ✅ 简单易用的 Web UI
- ✅ Community Apps 生态
- ✅ Flash drive 启动(无需安装)
- ✅ Parity 保护(类似 RAID)
OpenNAS:
- ✅ 专注 NAS 功能
- ✅ ZFS 集成
- ✅ 简单部署
- ✅ 开源免费
五、改进建议
5.1 短期改进(本周)
| 优先级 | 任务 | 工作量 | 收益 |
|---|---|---|---|
| P0 #1 | Share Management 持久化 | 200 行 | ⭐⭐⭐⭐⭐ 极高 |
| P0 #2 | Service Status 真实检测 | 150 行 | ⭐⭐⭐⭐ 高 |
| P0 #3 | Quick Actions 实现 | 100 行 | ⭐⭐⭐ 中 |
| P1 #4 | Permission Management | 300 行 | ⭐⭐⭐⭐⭐ 极高 |
5.2 中期改进(本月)
| 优先级 | 任务 | 工作量 | 收益 |
|---|---|---|---|
| P1 #5 | Activity Log 系统集成 | 400 行 | ⭐⭐⭐⭐ 高 |
| P1 #6 | Dashboard 增强图表 | 200 行 | ⭐⭐⭐ 中 |
| P2 #7 | File Browser UI | 500 行 | ⭐⭐⭐⭐⭐ 极高 |
| P2 #8 | Snapshot Management UI | 300 行 | ⭐⭐⭐⭐ 高 |
5.3 长期改进(下季度)
| 优先级 | 任务 | 工作量 | 收益 |
|---|---|---|---|
| P2 #9 | Docker Container UI | 800 行 | ⭐⭐⭐⭐ 高 |
| P3 #10 | API + CLI + Web UI 统一 | 1000 行 | ⭐⭐⭐⭐⭐ 极高 |
| P3 #11 | 国际化支持 | 200 行 | ⭐⭐⭐ 中 |
| P3 #12 | Mobile App | 2000 行 | ⭐⭐⭐⭐ 高 |
六、实施优先级
6.1 立即实施(本周)
Phase 1: Share Management 持久化
- 创建
data/shares.sqlite数据库 - 实现 ShareProvider trait
- 集成到 share_management.rs
Phase 2: Service Status 真实检测
- 使用
ps aux检查进程状态 - 解析 PID 文件(
/tmp/markbase_*.pid) - 计算 uptime(进程启动时间)
Phase 3: Quick Actions 实现
- Upload File: Tauri dialog + file_ops.rs
- Create Backup: 跳转到 Backup.vue
- View Backups: 跳转到 Backup.vue
- Download File: Tauri dialog + file_ops.rs
6.2 下周实施
Phase 4: Permission Management
- 创建 Permission.vue 页面
- 实现 permission_management.rs
- 用户-共享关联表
Phase 5: Activity Log 系统
- 创建
data/activity.sqlite - 集成 SSH/SMB/WebDAV 日志
- 实现 activity.rs Tauri command
七、目标定位
7.1 当前定位
MarkBase = Lightweight Enterprise File Server + Backup Server
| 目标用户 | 规模 | 使用场景 |
|---|---|---|
| 个人 | 1-5 用户 | Home NAS + backup |
| 小团队 | 5-20 用户 | SMB/SFTP + WebDAV |
| 中小企业 | 20-100 用户 | 多协议 + snapshots |
| 大型企业 | 100+ 用户 | NFS + LDAP + HA(Phase 12) |
7.2 GUI 目标覆盖率
| 目标 | 当前覆盖率 | Phase 1-5 后 | Phase 6-12 后 |
|---|---|---|---|
| vs Proxmox VE | 47% | 65% | 75% |
| vs Unraid | 58% | 75% | 85% |
| vs OpenNAS | 62% | 80% | 90% |
八、总结
8.1 已完成
- ✅ User Management 完整实现(5/5)
- ✅ Backup Management 基本实现(4/5)
- ✅ Dashboard 系统监控(3/5)
- ⚠️ Share Management 内存存储(3/5)
8.2 待完成
- ❌ Share Management 持久化
- ❌ Service Status 真实检测
- ❌ Activity Log 系统集成
- ❌ Permission Management
- ❌ Quick Actions 实现
8.3 建议
立即开始 Phase 1-3(本周):
- Share Management 持久化(P0)
- Service Status 真实检测(P0)
- Quick Actions 实现(P0)
下周开始 Phase 4-5:
- Permission Management(P1)
- Activity Log 系统集成(P1)
最后更新: 2026-06-25
版本: 1.0(GUI 管理介面检讨报告)