|
|
4 сар өмнө | |
|---|---|---|
| client | 4 сар өмнө | |
| public | 4 сар өмнө | |
| scripts | 4 сар өмнө | |
| src | 4 сар өмнө | |
| .env.example | 4 сар өмнө | |
| .gitignore | 4 сар өмнө | |
| API_EXAMPLES.md | 4 сар өмнө | |
| CLIENT_README.md | 4 сар өмнө | |
| INSTALL.md | 4 сар өмнө | |
| QUICKSTART.md | 4 сар өмнө | |
| README.md | 4 сар өмнө | |
| START_GUIDE.md | 4 сар өмнө | |
| USER_MANAGEMENT_GUIDE.md | 4 сар өмнө | |
| package.json | 4 сар өмнө |
基于 Node.js + Express + MySQL + React + Ant Design 的企业级客户报备管理系统,实现标准化客户报备流程,防止销售撞单抢单,实现客户资源公司化、流程规范化、管理可视化。
查看详细启动指南:START_GUIDE.md
快速启动命令:
# 1. 安装后端依赖
npm install
# 2. 配置数据库(编辑 .env 文件)
# DB_PASSWORD=你的MySQL密码
# 3. 初始化数据库
npm run init-db
# 4. 启动后端服务
npm run dev
# 5. 启动前端界面(新终端窗口)
cd client
npm install
npm run dev
访问系统:
安装依赖
npm install
配置环境变量
cp .env.example .env
编辑 .env 文件,配置数据库连接信息:
PORT=3000
NODE_ENV=development
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=customer_crm
JWT_SECRET=your_jwt_secret_key_change_this_in_production
JWT_EXPIRES_IN=7d
DEFAULT_PROTECTION_DAYS=30
MAX_DAILY_LEADS=5
SIMILARITY_THRESHOLD=0.8
初始化数据库
npm run init-db
这将自动创建数据库表结构,并生成默认管理员账号:
adminadmin123开发环境(带热重载):
npm run dev
生产环境:
npm start
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "admin123"
}
响应:
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "uuid",
"username": "admin",
"real_name": "系统管理员",
"role": "admin"
}
}
}
GET /api/auth/me
Authorization: Bearer {token}
GET /api/customers/check-duplicate?customer_name=测试公司
Authorization: Bearer {token}
POST /api/customers
Authorization: Bearer {token}
Content-Type: application/json
{
"customer_name": "XX有限公司",
"industry": "互联网/软件",
"region": "北京",
"contact_person": "张三",
"contact_phone": "13800138000",
"demand_description": "需要CRM系统",
"source": "转介绍"
}
GET /api/customers?page=1&limit=20&status=following&keyword=测试
Authorization: Bearer {token}
参数说明:
page: 页码(默认1)limit: 每页数量(默认20)status: 客户状态(following/won/lost/released)keyword: 搜索关键词GET /api/customers/{customer_id}
Authorization: Bearer {token}
POST /api/customers/followup
Authorization: Bearer {token}
Content-Type: application/json
{
"customer_id": "uuid",
"followup_type": "call",
"content": "电话沟通,客户表示有兴趣",
"next_plan": "下周上门拜访"
}
GET /api/pool/customers?page=1&limit=20&industry=互联网
Authorization: Bearer {token}
POST /api/pool/claim
Authorization: Bearer {token}
Content-Type: application/json
{
"customer_id": "uuid"
}
POST /api/pool/release
Authorization: Bearer {token}
Content-Type: application/json
{
"customer_id": "uuid",
"release_reason": "客户暂无需求"
}
POST /api/approvals
Authorization: Bearer {token}
Content-Type: application/json
{
"type": "extension",
"customer_id": "uuid",
"reason": "客户决策周期较长,需要延长跟进时间",
"extension_days": 15
}
审批类型:
extension: 延期申请force_release: 强制释放collaboration: 协同跟进GET /api/approvals/pending?page=1&limit=20
Authorization: Bearer {token}
POST /api/approvals/{approval_id}/process
Authorization: Bearer {token}
Content-Type: application/json
{
"status": "approved",
"result_comment": "同意延期"
}
GET /api/stats/dashboard
Authorization: Bearer {token}
GET /api/stats/team?start_date=2024-01-01&end_date=2024-01-31&period=day
Authorization: Bearer {token}
GET /api/stats/source-analysis
Authorization: Bearer {token}
系统包含以下自动化任务:
保护期检查 - 每小时执行
到期提醒 - 每天 09:00 执行
customer-crm/
├── src/
│ ├── config/
│ │ └── database.js # 数据库配置
│ ├── controllers/
│ │ ├── authController.js # 认证控制器
│ │ ├── customerController.js # 客户管理控制器
│ │ ├── poolController.js # 公海池控制器
│ │ ├── approvalController.js # 审批流程控制器
│ │ └── statsController.js # 统计报表控制器
│ ├── middleware/
│ │ ├── auth.js # 认证中间件
│ │ └── logger.js # 日志中间件
│ ├── routes/
│ │ └── index.js # 路由配置
│ ├── utils/
│ │ └── scheduler.js # 定时任务
│ └── server.js # 服务器入口
├── scripts/
│ └── initDatabase.js # 数据库初始化脚本
├── public/
│ └── index.html # 前端页面
├── package.json
├── .env.example
└── README.md
在 .env 文件中可配置:
DEFAULT_PROTECTION_DAYS: 默认保护期天数(默认30天)MAX_DAILY_LEADS: 每日最大领取客户数(默认5个)SIMILARITY_THRESHOLD: 客户名称相似度阈值(默认0.8)在 src/utils/scheduler.js 中可修改定时任务执行时间。
检查 .env 文件中的数据库配置是否正确,确保 MySQL 服务已启动。
重新登录获取新的 Token。
检查是否达到每日领取上限,或客户是否已被其他人领取。
MIT License
欢迎提交 Issue 和 Pull Request!
如有问题,请提交 Issue 或联系开发团队。
祝您使用愉快! 🎉