# 修改记录 ## 2026-06-10 ### 1. 优化图片上传性能 **文件**: `server/src/routes/settings.js` **问题**: 批量上传图片到 RUSTFS 时串行执行,每张图片需等待上一张完成,导致上传时间过长。 **解决方案**: 将 `for...of` 串行上传改为 `Promise.all` 并行上传。 **改动内容**: - 将批量上传接口 `/upload-images` 的串行逻辑改为并行 - 使用 `Promise.all()` 同时上传所有图片 --- ### 2. 新增服务端配置页面 **目标**: 在前端设置界面添加配置页面,支持动态修改 .env 配置并重启后端服务。 #### 后端新增文件 **`server/src/config/envManager.js`** - `readEnv()` - 读取并解析 .env 文件 - `writeEnv(config)` - 将配置对象写入 .env 文件 - `getSafeConfig()` - 返回安全展示的配置(密码用 `******` 替代) **`server/src/routes/config.js`** - `GET /api/config` - 获取当前配置(密码隐藏) - `PUT /api/config` - 更新配置并写入 .env 文件 - `POST /api/config/restart` - 优雅重启后端服务 #### 后端修改文件 **`server/src/index.js`** - 注册新路由 `app.use('/api/config', configRouter)` #### 前端新增文件 **`src/views/ServerConfigView.vue`** - 配置分组显示:数据库、RUSTFS、服务器 - 密码字段显示为 `******`,修改时留空则不修改原密码 - 保存按钮 - 调用 API 保存配置到 .env - 重启按钮 - 调用 API 优雅重启服务(需 PM2 等进程管理器) #### 前端修改文件 **`src/router/index.js`** - 添加路由 `/server-config` -> ServerConfigView(懒加载) **`src/i18n/index.js`** - 添加 `serverConfig` 中英文翻译 **`src/components/SiteHeader.vue`** - 导航栏添加"服务端配置"链接 --- ### 使用说明 1. **启动后端**(需使用 PM2 管理进程): ```bash pm2 start npm -- run dev ``` 2. **访问配置页面**: 启动后端后访问 `/server-config` 3. **保存配置**: 点击"保存配置"按钮,配置会写入 `.env` 文件 4. **重启服务**: 点击"重启服务"按钮,后端会优雅退出(`process.exit(0)`),PM2 会自动重启 ### 注意事项 - 密码字段显示为 `******`,如需修改请输入新密码,留空则保持原密码不变 - 重启功能需要配合 PM2 等进程管理器使用,否则服务将无法自动恢复 --- ### 3. 新增文章编辑功能 **目标**: 提供完整的文章新建和编辑功能。 #### 前端新增文件 **`src/views/PostEditorView.vue`** - 新建文章页面 (`/post/new`) - 编辑文章页面 (`/post/edit/:id`) - 包含标题、日期、摘要、正文等字段 - 保存后自动返回文章列表 #### 前端修改文件 **`src/views/HomeView.vue`** - 页面头部添加"新建文章"按钮 **`src/views/PostDetail.vue`** - 添加"编辑"和"删除"按钮 - 支持从文章详情页直接编辑或删除 **`src/router/index.js`** - 添加路由 `/post/new` -> PostEditorView - 添加路由 `/post/edit/:id` -> PostEditorView **`src/i18n/index.js`** - 添加 `home.newPost` 翻译 - 添加 `postEditor` 完整翻译(中英文) --- ### 4. 后端定时任务调度器 **目标**: 将定时任务调度逻辑从前端移到后端,确保即使没有人打开页面,任务也会按计划执行。 #### 新增文件 **`server/src/config/cronScheduler.js`** - `start()` - 启动调度器,每 10 秒检查一次到期任务 - `stop()` - 停止调度器 - `checkAndRunTasks()` - 检查并执行到期的任务 - `executeTask(task)` - 执行单个定时任务 #### 后端修改文件 **`server/src/index.js`** - 导入 `cronScheduler` 模块 - 在服务器启动时调用 `cronScheduler.start()` #### 功能说明 - 调度器每 10 秒检查一次所有已启用的定时任务 - 当任务的 `nextRun` 时间已到,立即执行任务 - 执行后自动计算下一次执行时间并更新数据库 - 任务在后端运行,不依赖前端页面打开 ### 注意事项 - 定时任务由后端调度,前端 CronView 仍可手动执行和查看任务状态 - 后端调度需在服务器运行期间持续工作(由 PM2 等进程管理器保持)