# work-tools **Repository Path**: challengerV/work-tools ## Basic Information - **Project Name**: work-tools - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-29 - **Last Updated**: 2026-09-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 办公工具集(Office Toolkit) 一套前后端分离的在线办公工具箱,涵盖文件处理、图片处理、文本处理、办公助手、开发助手五大类共 20 个工具。 ## 功能 | 分类 | 工具 | |------|------| | 文件处理 | 发票打印排版、PDF 拆分合并、Excel 合并、Excel/CSV 转换 | | 图片处理 | 图片压缩、图片裁剪、图片转码 | | 文本处理 | 文本清理、文本对比、文本统计 | | 办公助手 | 日期计算、二维码生成与识别、大写数字转换 | | 开发助手 | 时间戳转换、进制转换、JSON 序列化、URL 编码转换、MD5/HASH、AES 加解密 | ## 技术栈 - 前端:Vue 3 + TypeScript + Vite + Element Plus + Vue Router + Axios - 后端:Node.js + Express,使用 pdf-lib、exceljs、sharp、qrcode、jsQR、archiver、csv-parse/csv-stringify 等 ## 目录结构 ``` . ├── backend/ # Express API 服务(生产模式同时托管前端静态资源) │ ├── src/ │ │ ├── routes/ # 各分类路由 │ │ ├── services/ # 业务实现 │ │ └── utils/ # 错误、上传、发送、临时文件、ZIP │ └── test/ # node:test 逻辑与接口测试 ├── frontend/ # Vue 3 单页应用 │ ├── src/ │ │ ├── api/ # HTTP 客户端 │ │ ├── components/ # PageHeader、SideMenu │ │ ├── layouts/ # MainLayout │ │ ├── views/ # 20 个工具页面 │ │ └── tools.ts # 工具元数据 │ └── vite.config.ts # 开发代理 /api -> localhost:3001 ├── .cosmocode/specs/ # 需求与设计文档 └── start.sh # 一键启动脚本 ``` ## 快速开始 生产模式(后端单端口同时提供页面与 API): ```bash ./start.sh ``` 访问 http://localhost:3001 启动脚本支持子命令: ```bash ./start.sh # 生产模式启动(缺少 dist 时自动构建,服务后台常驻) ./start.sh build # 仅重新构建前端 ./start.sh restart # 重启服务 ./start.sh stop # 停止服务 ./start.sh status # 查看运行状态 ./start.sh dev # 开发模式:后端 3001 + 前端 5173(Vite 代理 /api) ``` 生产模式下服务通过 `setsid nohup` 脱离终端运行,PID 记录在 `.run/server.pid`,日志输出到 `.run/server.log`。开发模式前端默认运行在 http://localhost:5173,API 请求经代理转发到 http://localhost:3001。 ## 测试 ```bash cd backend node --test ``` ## 接口约定 - 统一前缀 `/api`,健康检查 `GET /api/health`。 - JSON 接口失败返回 `{ "ok": false, "error": { "code", "message" } }` 与对应 HTTP 状态码。 - 文件接口成功返回二进制流,并通过 `Content-Disposition` 提供文件名。 - 上传文件大小上限 20 MB,单次最多 50 个文件。