v6ole 3285e22142 feat: 导入增强 + 客户合并 + 同伴自定义 + 性能优化
=== 导入系统全面增强 ===
- 5 Sheet 完整导入:拜访/计划/商机/要客/纪要
- 同访人智能解析:中英文逗号/顿号/分号 → 系统用户UUID + 外部人员TEXT
- 客户自动创建:Excel中不存在的客户自动入库
- 模糊名称匹配:去空格 + 包含关系纠错
- manager_id 修正:导入时用客户分配的经理(非Excel列/非导入人)
- 模板更新:Sheet5「客户经理」→「填报人」,同访人示例含逗号分隔

=== 客户合并功能 ===
- PUT 改名碰撞检测 → 409 + 合并预览
- GET merge-preview / POST merge 端点
- 事务级迁移:Visit/WorkPlan/MiniBusiness/KeyVisit/联系人/分配
- 去重逻辑:联系人(name+phone)、分配(manager+role)
- last_visit_date 取最大值

=== 拜访记录完善 ===
- visits 新增 companion_names TEXT[] 列
- 同访人支持自定义输入(外部人员),el-select allow-create
- 移动端 VisitForm + PC端 ManagerWorkspace 统一
- 周报「客户经理」→「相关人员」(创建人+同访人)
- 纪要「客户经理」→「填报人」
- 删除拜访后重新计算 customer.last_visit_date

=== 客户选择放开 ===
- 客户经理可看到全部客户(不再限自己分配的)
- 拜访时客户下拉返回全量

=== 前端性能优化 ===
- Element Plus 按需加载 (unplugin-vue-components + unplugin-element-plus)
- 周报照片URL并行请求 (Promise.all)
- onMounted 三路并行 (loadReport + dropdowns + AI)
- nginx Cache-Control: immutable for /assets/
- Google Fonts preconnect hints
- 图片上传前 Canvas 压缩 (max 1920px, quality 0.8)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-29 22:25:04 +08:00

企迹 (qiji) — 政企周报管理系统

面向中国电信政企客户经理团队的周报管理系统,替代传统 Excel 填报流程。

功能模块

模块 说明
📊 仪表盘 本周拜访/计划/商机/要客四卡统计 + 填报进度 + 按周翻看历史
📋 周报 按周汇总拜访记录 + 每日纪要,支局长/分管领导查看全员
📅 工作计划 面向未来的计划安排,支持状态流转(计划中→已完成→已取消)
💰 商机跟单 小微业务商机管道,按状态跟踪(跟进中→已签约→已流失)
要客拜访 重要客户拜访计划,紧急度排序,多拜访人协作
🏢 客户管理 客户档案 CRUD + 联系人 + 归属分配 + Excel 导入/导出
👤 用户管理 支局长修改用户角色(经理/支局长/分管领导)
📱 移动端 外勤填报适配,拍照上传,底部 TabBar

技术栈

技术
后端 FastAPI + SQLAlchemy 2.0 (async) + asyncpg
数据库 PostgreSQL
文件存储 MinIO (预签名直传)
认证 Casdoor OIDC + JWT
前端 Vue 3 + Vite + TypeScript + Element Plus
状态管理 Pinia
定时任务 APScheduler (每日 18:00 填报提醒)

项目结构

qiji/
├── docker-compose.yml
├── backend/
│   ├── app/
│   │   ├── main.py              # FastAPI 入口
│   │   ├── config.py            # 配置管理
│   │   ├── database.py          # async engine + session
│   │   ├── models/              # 8 张表 SQLAlchemy 模型
│   │   ├── schemas/             # Pydantic 请求/响应
│   │   ├── api/                 # REST 路由 (12 模块)
│   │   ├── services/            # 业务逻辑层
│   │   ├── middleware/          # JWT 鉴权 + 角色权限
│   │   └── utils/               # 工具 (JWT/时区/edit_log)
│   ├── alembic/                 # 数据库迁移
│   └── requirements.txt
├── frontend/
│   ├── src/
│   │   ├── router/              # 路由 (mobile + desktop)
│   │   ├── stores/              # Pinia 状态管理
│   │   ├── api/                 # Axios API 封装
│   │   ├── views/
│   │   │   ├── mobile/          # 移动端页面
│   │   │   └── desktop/         # PC 端页面
│   │   └── components/          # 通用组件
│   ├── Dockerfile
│   └── nginx.conf
└── 政企周报管理系统-设计文档.md

快速启动

1. 配置环境变量

# 后端
cd backend
cp .env.example .env
# 编辑 .env 填入数据库/认证/存储信息

# 前端
cd frontend
cp .env.example .env

2. 启动基础设施

# 如已有 PostgreSQL + MinIO 实例可跳过
docker-compose up -d postgres minio

3. 启动后端

cd backend
uvicorn app.main:app --reload --port 8002 --host 0.0.0.0
# API 文档 → http://localhost:8002/docs

4. 启动前端

cd frontend
npm install
npm run dev -- --host 0.0.0.0
# 页面 → http://localhost:5173

一键部署

docker-compose up -d
# 后端 :8000 + PostgreSQL :5432 + MinIO :9000/:9001
# 前端需单独部署到 nginx,见 frontend/Dockerfile

环境变量

配置项 说明 必须
DATABASE_URL PostgreSQL 连接串
CASDOOR_* Casdoor OIDC 地址/Client ID/Secret
MINIO_* MinIO 地址/密钥
SECRET_KEY JWT 签发密钥
CORS_ORIGINS 前端地址白名单
WECOM_* 企微 Corp ID / Agent ID / Secret ⚠️
VITE_CASDOOR_* 前端 Casdoor 配置
S
Description
No description provided
Readme 1.1 MiB
Languages
Vue 56.8%
Python 38%
TypeScript 4.5%
JavaScript 0.2%
CSS 0.2%
Other 0.2%