# bid_generator **Repository Path**: mainiutech/bid_generator ## Basic Information - **Project Name**: bid_generator - **Description**: 标书生成器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-08-14 - **Last Updated**: 2026-08-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 标书生成应用 一个完整的标书生成应用,支持用户上传招标文件(doc、docx、dotx格式),自动解析并提取技术需求与技术要求的结构化内容,存储到SQLite数据库中供后续标书生成时参考。同时提供OnlyOffice预览功能,方便用户查看上传的招标文件。 ## 功能特性 - ✅ 文件上传:支持 doc、docx、dotx 格式 - ✅ 文件解析:自动提取技术需求和技术要求 - ✅ 内容存储:SQLite 数据库存储结构化内容 - ✅ OnlyOffice 预览:在线预览上传的文档 - ✅ JWT 安全认证:OnlyOffice API 调用使用 JWT 签名 ## 技术栈 ### 后端 - Node.js + Express - SQLite3 - mammoth.js(Word 文档解析) - jsonwebtoken(JWT 签名) - axios(HTTP 请求) ### 前端 - React + Vite - Ant Design - React Router ## 快速开始 ### 1. 安装依赖 ```bash npm run install:all ``` ### 2. 配置环境变量 复制 `backend/.env.example` 到 `backend/.env` 并修改配置: ```env # OnlyOffice Document Server 地址 ONLYOFFICE_SERVER_URL=http://192.168.52.135/ # ⚠️ 重要:后端服务地址(OnlyOffice 服务器可以访问的地址) # 如果 OnlyOffice 服务器在不同的机器上,必须设置为服务器的实际 IP # 不能使用 localhost,除非 OnlyOffice 和本应用在同一服务器 ONLYOFFICE_BACKEND_URL=http://your-server-ip:3001 # JWT Secret(必须与 OnlyOffice Document Server 配置一致) ONLYOFFICE_JWT_SECRET=secret # 服务器端口 PORT=3001 ``` **重要提示:** - `ONLYOFFICE_BACKEND_URL` 必须设置为 OnlyOffice 服务器可以访问的地址 - 如果 OnlyOffice 服务器在 `192.168.52.135`,而本应用在另一台机器上(例如 `192.168.52.100`),则应该设置: ```env ONLYOFFICE_BACKEND_URL=http://192.168.52.100:3001 ``` - 如果遇到 "Download failed" 错误,通常是 `ONLYOFFICE_BACKEND_URL` 配置不正确导致的 ### 3. 初始化数据库 ```bash cd backend npm run init-db ``` 如果数据库已存在但表结构不完整,可以运行迁移脚本: ```bash npm run migrate-db ``` ### 4. 启动开发服务器 ```bash npm run dev ``` 这将同时启动: - 后端服务:http://localhost:3001 - 前端服务:http://localhost:3000 ## 项目结构 ``` bid_generator/ ├── backend/ # 后端代码 │ ├── src/ │ │ ├── routes/ # API 路由 │ │ ├── services/ # 业务逻辑 │ │ ├── models/ # 数据模型 │ │ └── utils/ # 工具函数 │ ├── data/ # SQLite 数据库 │ └── uploads/ # 上传文件存储 ├── frontend/ # 前端代码 │ └── src/ │ ├── components/ # React 组件 │ ├── pages/ # 页面组件 │ └── services/ # API 服务 └── openspec/ # OpenSpec 规范文档 ``` ## API 接口 ### 文件上传 - `POST /api/upload` - 上传文件 ### 文档管理 - `GET /api/documents` - 获取文档列表 - `GET /api/documents/:id` - 获取文档详情 ### 预览功能 - `GET /api/preview/config/:id` - 获取预览配置 - `GET /api/preview/health` - OnlyOffice 健康检查 ## 开发说明 ### OnlyOffice 集成 应用使用 OnlyOffice Document Server 进行文档预览。集成方式参考了[官方 Node.js 示例](https://api.onlyoffice.com/zh-CN/docs/docs-api/samples/language-specific-examples/nodejs-example/)。 #### 配置要求 1. **OnlyOffice Document Server** - 确保 OnlyOffice 服务已部署并可访问(默认:http://192.168.52.135/) - 如果 OnlyOffice 和本应用不在同一服务器,需要确保网络互通 2. **JWT 配置** - JWT Secret 必须与 OnlyOffice Document Server 配置中的 `secret` 一致 - 在 OnlyOffice Document Server 配置文件中设置: ```json { "server": { "token": { "enable": true, "secret": "your-secret-key" } } } ``` - 在本应用的 `.env` 文件中设置相同的 secret: ```env ONLYOFFICE_JWT_SECRET=your-secret-key ``` - 如果不需要 JWT,可以设置 `ONLYOFFICE_JWT_ENABLED=false` 3. **文件访问 URL** - OnlyOffice 服务器需要能够通过 HTTP URL 访问文件 - 如果应用和 OnlyOffice 不在同一服务器,需要设置 `ONLYOFFICE_BACKEND_URL`: ```env ONLYOFFICE_BACKEND_URL=http://your-server-ip:3001 ``` - 不能使用 `localhost` 或 `127.0.0.1`,除非 OnlyOffice 和本应用在同一服务器 4. **回调 URL** - OnlyOffice 会在文档保存时调用回调接口 - 确保回调 URL 可被 OnlyOffice 服务器访问 - 回调接口会自动下载并保存更新后的文档 #### 环境变量说明 ```env # OnlyOffice Document Server 地址 ONLYOFFICE_SERVER_URL=http://192.168.52.135/ # JWT 密钥(必须与 OnlyOffice 配置一致) ONLYOFFICE_JWT_SECRET=your-secret-key # 是否启用 JWT(默认:true) ONLYOFFICE_JWT_ENABLED=true # 后端服务地址(OnlyOffice 可访问的地址) ONLYOFFICE_BACKEND_URL=http://your-server-ip:3001 BACKEND_URL=http://localhost:3001 ``` ### 文件解析 系统会自动识别文档中的"技术需求"和"技术要求"章节,并提取结构化内容。 ## 许可证 ISC