# Document-Assistant **Repository Path**: xuejinlin/document-assistant ## Basic Information - **Project Name**: Document-Assistant - **Description**: 一款基于 Vue3 开发、纯本地离线运行的轻量化文档助手,采用 SQLite 本地文件存储,专注编写元器件操作文档、开发文档、技术规范、运维手册等。 支持项目化管理、多主题分类、多页面文档、Markdown 编辑、实时在线预览、独立沉浸式阅读预览、文档发布管理、一键导出纯净静态 HTML,全程无云端上传,数据本地闭环,安全离线。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-27 - **Last Updated**: 2026-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文档助手 一个基于 Vue 3、Express 和 SQLite 构建的现代化文档管理系统。 ## 功能特性 - **项目管理**: 创建和管理多个项目 - **文档管理**: 在项目内组织文档 - **页面与文件夹**: 支持页面和文件夹的层级结构 - **Markdown 编辑**: 支持实时预览的 Markdown 编辑器 - **富内容支持**: 数学公式 (KaTeX)、图表 (Mermaid)、代码高亮 - **图片管理**: 支持图片上传和管理 - **主题切换**: 支持浅色/深色/深绿/深蓝主题 - **数据导入导出**: 支持数据的导入和导出 - **用户管理**: 用户、角色、部门、权限管理 - **操作日志**: 记录用户操作日志 - **回收站**: 支持删除文件的恢复和彻底删除 - **个人中心**: 用户可以管理个人信息 - **数据库持久化**: 基于 SQLite 的数据存储 - **权限申请**: 支持项目/文档权限的申请和审批流程 - **安全特性**: HTTPS 支持、密码强度校验、结构化日志 ## 技术栈 - **前端**: Vue 3, Element Plus, Vue Router, Pinia, Vite - **后端**: Express.js, SQLite (sql.js) - **构建工具**: Vite - **容器化**: Docker ## 数据结构 ``` 项目 (Project) └── 文档 (Document) └── 页面/文件夹 (Page) ``` ## 快速开始 ### 环境要求 - Node.js 18+ - pnpm (推荐) 或 npm ### 开发模式 ```bash # 安装依赖 pnpm install # 启动前端开发服务器 (端口 3000) pnpm run dev # 启动后端服务器 (端口 3002) pnpm run server ``` 前端访问: http://localhost:3000 ### 生产模式 ```bash # 构建并启动生产服务器 pnpm start ``` 应用将在 http://localhost:3002 访问 ## Docker 部署 ### 使用 Docker Compose (推荐) ```bash # 构建并启动 docker-compose up -d --build # 查看日志 docker-compose logs -f # 停止服务 docker-compose down ``` 应用将在 http://localhost:3300 访问 ### 数据持久化 Docker 部署时,数据挂载到项目目录下: - **数据库**: `./data/document_assistant.db` - **上传文件**: `./uploads/` ## 环境变量 | 变量名 | 默认值 | 说明 | | ----------------- | ------------- | --------------------------- | | `PORT` | `3002` | 服务器端口 | | `JWT_SECRET` | - | JWT 密钥(**生产环境必须设置**) | | `DATA_DIR` | `./data` | 数据库存储目录 | | `ALLOWED_ORIGINS` | `*` | 允许的跨域来源(多个用逗号分隔,`*` 表示所有来源) | | `NODE_ENV` | `development` | 运行环境 | | `USE_HTTPS` | `false` | 是否启用 HTTPS | | `HTTP_PORT` | `80` | HTTP 端口(用于重定向到 HTTPS) | | `HTTPS_PORT` | `443` | HTTPS 端口 | | `SSL_KEY_PATH` | `./ssl/private.key` | SSL 私钥路径 | | `SSL_CERT_PATH` | `./ssl/certificate.crt` | SSL 证书路径 | | `LOG_LEVEL` | `INFO` | 日志级别 (ERROR, WARN, INFO, DEBUG) | ### 配置示例 创建 `.env` 文件: ```env PORT=3002 JWT_SECRET=your-super-secret-jwt-key-change-in-production DATA_DIR=./data ALLOWED_ORIGINS=http://localhost:3000,http://localhost:3002 LOG_LEVEL=INFO # HTTPS 配置(生产环境启用) # USE_HTTPS=true # SSL_KEY_PATH=./ssl/private.key # SSL_CERT_PATH=./ssl/certificate.crt ``` ## 默认账号 系统初始化时会创建一个默认管理员账号: - **用户名**: `admin` - **密码**: `admin123` > ⚠️ **安全提示**: 生产环境请及时修改默认密码! ## 安全特性 ### 密码策略 - 最小长度: 8 位 - 必须包含大写字母 - 必须包含小写字母 - 必须包含数字 ### HTTPS 支持 生产环境建议启用 HTTPS。 ### 启用 HTTPS 1. 生成 SSL 证书(开发环境可以使用自签名证书): ```bash node scripts/setup-ssl.js ``` 2. 编辑 `.env` 文件,设置 `USE_HTTPS=true` 3. 重启服务器 ### 开发环境 开发环境建议保持 `USE_HTTPS=false` 使用 HTTP,无需配置证书。 ### 注意事项 - 使用自签名证书时,浏览器会显示安全警告,请点击"高级"继续访问 - 生产环境请使用来自受信任的证书颁发机构(CA)的证书 - 证书文件位置:`ssl/private.key`(私钥)和 `ssl/certificate.crt`(证书) ### 安全响应头 应用会自动设置以下安全响应头: - `Strict-Transport-Security`: 强制 HTTPS - `X-Content-Type-Options`: 防止 MIME 类型混淆 - `X-Frame-Options`: 防止点击劫持 - `X-XSS-Protection`: 启用 XSS 保护 - `Content-Security-Policy`: 限制资源加载 ## API 接口 ### 认证相关 - `POST /api/users/login` - 用户登录 - `POST /api/users/register` - 用户注册 ### 项目管理 - `GET /api/projects` - 获取项目列表 - `GET /api/projects/:id` - 获取项目详情 - `POST /api/projects` - 创建项目 - `PUT /api/projects/:id` - 更新项目 - `DELETE /api/projects/:id` - 删除项目 ### 文档管理 - `GET /api/documents/project/:projectId` - 获取项目文档列表 - `GET /api/documents/:id` - 获取文档详情 - `POST /api/documents` - 创建文档 - `PUT /api/documents/:id` - 更新文档 - `DELETE /api/documents/:id` - 删除文档 ### 页面管理 - `GET /api/pages/doc/:docId` - 获取文档页面列表 - `GET /api/pages/:id` - 获取页面详情 - `POST /api/pages` - 创建页面 - `PUT /api/pages/:id` - 更新页面 - `DELETE /api/pages/:id` - 删除页面 ### 图片管理 - `GET /api/images` - 获取图片列表 - `POST /api/images/upload` - 上传图片 - `DELETE /api/images/:id` - 删除图片 ### 用户管理 - `GET /api/users` - 获取用户列表 - `POST /api/users` - 创建用户 - `PUT /api/users/:id` - 更新用户 - `DELETE /api/users/:id` - 删除用户 - `PUT /api/users/:id/password` - 修改密码 ### 角色管理 - `GET /api/roles` - 获取角色列表 - `POST /api/roles` - 创建角色 - `PUT /api/roles/:id` - 更新角色 - `DELETE /api/roles/:id` - 删除角色 ### 部门管理 - `GET /api/departments` - 获取部门列表 - `POST /api/departments` - 创建部门 - `PUT /api/departments/:id` - 更新部门 - `DELETE /api/departments/:id` - 删除部门 ### 权限管理 - `GET /api/permissions` - 获取权限列表 - `POST /api/permissions` - 创建权限 - `PUT /api/permissions/:id` - 更新权限 - `DELETE /api/permissions/:id` - 删除权限 ### 权限申请 - `GET /api/permission-requests` - 获取权限申请列表 - `POST /api/permission-requests` - 提交权限申请 - `PUT /api/permission-requests/:id/approve` - 批准申请 - `PUT /api/permission-requests/:id/reject` - 拒绝申请 ### 日志管理 - `GET /api/logs` - 获取操作日志列表 ### 回收站 - `GET /api/recycle-bin` - 获取回收站列表 - `POST /api/recycle-bin/:id/restore` - 恢复删除的项目 - `DELETE /api/recycle-bin/:id` - 彻底删除项目 ### 配置管理 - `GET /api/config` - 获取所有配置 - `GET /api/config/:key` - 获取配置值 - `PUT /api/config/:key` - 设置配置值 - `DELETE /api/config/:key` - 删除配置 ### 数据字典 - `GET /api/dicts` - 获取字典列表 - `GET /api/dicts/all-with-items` - 获取所有字典及其子项 ## 项目结构 ``` Document-Assistant/ ├── docs/ # 文档目录 ├── public/ # 静态资源 ├── server/ # 后端代码 │ ├── config/ # 配置文件 │ ├── db/ # 数据库相关 │ ├── routes/ # API 路由 │ └── utils/ # 工具函数 ├── src/ # 前端代码 │ ├── components/ # 组件 │ ├── composables/ # 组合式函数 │ ├── db/ # 前端数据库访问 │ ├── router/ # 路由配置 │ ├── stores/ # Pinia 状态管理 │ ├── styles/ # 样式文件 │ ├── utils/ # 工具函数 │ ├── views/ # 页面视图 │ ├── App.vue # 根组件 │ └── main.js # 入口文件 ├── data/ # 数据目录 (git ignore) ├── uploads/ # 上传目录 (git ignore) ├── .dockerignore # Docker 忽略文件 ├── .gitignore # Git 忽略文件 ├── docker-compose.yml # Docker Compose 配置 ├── Dockerfile # Dockerfile ├── vite.config.js # Vite 配置 ├── package.json # 项目依赖 ├── server.js # 后端服务器入口 └── README.md # 项目说明 ``` ## 常见问题 ### 1. 数据库迁移错误 如果遇到 `UNIQUE constraint failed: schema_version.version` 错误,删除数据库文件重新启动即可: ```bash rm -rf data/document_assistant.db pnpm run server ``` ### 2. Docker 中 bcrypt 模块错误 项目已使用 `bcryptjs` 替代 `bcrypt`,无需编译原生模块,可直接在 Docker 中运行。 ### 3. 登录后 401 错误 确保: - JWT_SECRET 环境变量已正确设置 - 前端请求的 API 地址正确 - ALLOWED_ORIGINS 包含前端域名 ### 4. Windows 上 Docker 数据目录 Docker Desktop 在 Windows 上使用 WSL2,数据挂载到项目目录下的 `./data` 和 `./uploads`。 ### 5. 502 Bad Gateway 错误 确保后端服务器已启动且运行在正确的端口(默认 3002),Vite 代理配置正确指向后端地址。 ## 许可证 MIT