# ai_quote_system
**Repository Path**: geogy/ai_quote_system
## Basic Information
- **Project Name**: ai_quote_system
- **Description**: 使用Claude Code开发的AI辅助报价系统
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: beifen
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-02-25
- **Last Updated**: 2026-02-27
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
AI 辅助报价系统
# 仓库地址
https://gitee.com/geogy/ai_quote_system
# 关于
基于 AI 的智能核价平台,实现「图纸上传 → OCR 识别 → AI 物料匹配 → 人工复核 → 报价单生成」全流程自动化,替代传统人工核价模式。
## 功能特性
- **图纸上传与 OCR 识别**:支持 PDF/JPG 格式上传,调用 PaddleOCR-VL 自动识别图纸中的物料信息,低置信度字段高亮提示人工复核
- **AI 智能物料匹配**:基于 LLM(阿里云千问)对 OCR 结果结构化解析,在物料库中进行模糊匹配,相似度 ≥ 0.95 自动通过,低于阈值引导人工决策
- **报价单生成与管理**:支持草稿、修订、确认、发出全状态流转,可导出 PDF/Excel
- **三类角色权限控制**:核价员(写)、销售助理(只读)、管理员(配置),基于 JWT 的 RBAC 权限体系
- **物料库管理**:Excel 批量导入/导出,别名映射,支持模糊搜索
- **操作审计日志**:全写操作留痕,记录操作人、时间、变更前后值
## 环境要求
| 依赖 | 版本要求 |
|------|---------|
| Node.js | >= 20 |
| pnpm | >= 10 |
| PostgreSQL | >= 14 |
## 快速开始
### 1. 安装依赖
```bash
pnpm install # 若没有 pnpm,请先使用 npm i pnpm -g 安装
```
### 2. 配置环境变量
修改 /backend/.env.dev 文件,填写自己的数据库连接信息,其他环境变量按需填写,(详情见[配置说明](#配置说明))
```bash
DB_TYPE = postgres # 数据库类型
DB_NAME = ai_quote_system # 数据库名称
DB_USER = postgres # 数据库用户名
DB_PASSWORD = 123654 # 数据库密码
DB_HOST = localhost # 数据库主机
DB_PORT = 5432 # 数据库端口
```
### 3. 初始化数据库
确保 PostgreSQL 已启动,数据库 `ai_quote_system` 已创建。TypeORM 在开发/测试环境会自动同步表结构。创建数据库 SQL 参考:
```sql
-- 创建数据库(指定字符集为UTF8,排序规则兼容中文)
CREATE DATABASE ai_quote_system
WITH OWNER = postgres
ENCODING = 'UTF8'
LC_COLLATE = 'zh_CN.UTF-8'
LC_CTYPE = 'zh_CN.UTF-8'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
TEMPLATE = template0;
```
初始化管理员账号:
```bash
pnpm seed
```
### 4. 启动开发服务
```bash
# 启动前端(默认 http://localhost:5173)
pnpm dev
# 启动后端(默认 http://localhost:3000)
pnpm dev:api
```
## 常用命令
所有命令均在项目根目录执行:
```bash
pnpm dev # 启动前端开发服务器
pnpm dev:api # 启动后端开发服务器(NODE_ENV=dev)
pnpm dev:test # 启动后端测试服务器(NODE_ENV=test)
pnpm build # 构建前端 + 后端
pnpm type-check # 前后端类型检查
pnpm format # 格式化所有代码
pnpm lint # 后端 ESLint 检查
pnpm test # 运行后端单元测试
pnpm test:e2e # 运行后端 E2E 测试
pnpm seed # 初始化管理员账号
```
子包单独命令:
```bash
pnpm -F frontend dev
pnpm -F backend start:dev
```
## 目录结构
```
ai_quote_system/
├── package.json # monorepo 根,聚合所有脚本
├── pnpm-workspace.yaml # 工作区声明
├── pnpm-lock.yaml # 统一锁文件
│
├── frontend/ # Vue 3 + Vite 前端
│ └── src/
│ ├── api/ # Axios 接口封装
│ ├── components/ # 公共组件
│ ├── router/ # Vue Router 路由配置(含角色守卫)
│ ├── stores/ # Pinia 状态管理
│ ├── utils/ # 工具函数(含 Axios 实例)
│ └── views/ # 页面视图
│ ├── orders/ # 客户订单
│ ├── drawing/ # 图纸上传与 OCR 复核
│ ├── workbench/ # AI 匹配工作台
│ ├── quotation/ # 报价单管理
│ ├── material/ # 物料库
│ ├── user/ # 用户管理
│ └── audit/ # 操作日志
│
├── backend/ # NestJS 11 后端
│ └── src/
│ ├── auth/ # JWT 认证
│ ├── users/ # 用户管理
│ ├── orders/ # 客户订单
│ ├── drawings/ # 图纸管理
│ ├── quotes/ # 报价单
│ ├── materials/ # 物料库
│ ├── ocr/ # OCR 识别服务
│ ├── llm/ # LLM 调用封装
│ ├── matching-engine/ # AI 匹配引擎
│ ├── audit-log/ # 操作审计日志
│ └── database/ # 数据库初始化与 Seed
│
├── docs/ # 需求与设计文档
└── openspec/ # OpenSpec 变更记录
```
## 配置说明
后端按 `NODE_ENV` 加载环境文件:`.env`(通用)+`.env.dev` / `.env.test` / `.env.prod`(覆盖)。
### 数据库(必填)
```env
DB_TYPE=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=your_password
DB_NAME=ai_quote_system
```
### 认证(必填)
```env
JWT_SECRET=your_strong_jwt_secret
SERVER_PORT=3000
THITE_LIST=http://localhost:5173 # CORS 白名单,多个用逗号分隔
```
### AI 服务(按需填写)
```env
# Anthropic Claude(物料匹配)
ANTHROPIC_API_KEY=sk-ant-...
# 百度 PaddleOCR-VL(图纸识别)
PADDLE_OCR_API_KEY=your_key
PADDLE_OCR_SECRET_KEY=your_secret
# 阿里云百炼/千问(OCR 结构化解析)
DASHSCOPE_API_KEY=sk-...
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
```
### 前端环境变量
在 `frontend/` 目录下创建 `.env.local`:
```env
VITE_API_BASE_URL=http://localhost:3000
```
## 技术栈
**前端**:Vue 3 · Vite · Element Plus · Pinia · Vue Router · Axios · TypeScript
**后端**:NestJS 11 · TypeORM · PostgreSQL · Passport JWT · TypeScript
**AI 服务**:Anthropic Claude API · 阿里云千问 · 百度 PaddleOCR-VL
**工具链**:pnpm Workspace · Prettier · ESLint · Jest