如何用AI工具开发一个轻量化CRM系统(一):7天开发总体规划
轻量化CRM系统7天开发规划摘要 本文提供一套7天高效开发轻量化CRM系统的完整计划,重点整合AI工具链(GitHub Copilot、DBDiagram.io等)并采用独立权限模块设计。系统定位小型团队,核心功能包括客户管理、销售跟踪及RBAC权限控制。技术栈选用Python+Flask+Vue3+SQLite,权限模块设计为独立服务(auth-service),支持JWT认证和细粒度权限校验。
轻量化CRM系统(含独立权限模块)7天开发总体规划
以下是结合AI代码工具(GitHub Copilot、Cursor、DBDiagram.io、Postman)的7天开发计划,重点突出“权限模块独立设计”和“轻量化落地”,确保每天目标明确、可执行。
一、系统整体规划设计(第1天)
目标:明确系统边界、功能模块、技术选型和权限模块设计,避免开发过程中“走偏”。
1.1 系统核心定位
- 产品定位:轻量化CRM(客户关系管理系统),面向小型团队(≤50人),聚焦“客户管理+销售跟进+基础权限控制”,避免复杂功能(如工作流引擎、多租户)。
- 核心功能:
- 客户管理(增删改查、关联联系人);
- 销售机会跟踪(阶段管理、金额统计);
- 权限模块(独立服务,支持角色:管理员/销售/查看员,细粒度权限控制如“销售仅能修改自己的客户”)。
1.2 技术选型(AI辅助决策)
- 后端:Python + Flask(轻量、生态友好,AI工具对Python代码生成支持强);
- 前端:Vue 3 + Element Plus(轻量前端框架,组件库丰富,AI可生成基础组件);
- 数据库:SQLite(无需独立部署,适合轻量化场景);
- 权限模块:独立为
auth-service
(RESTful API),采用RBAC模型(角色-权限-用户三级关联); - AI工具链:
- 代码生成:GitHub Copilot(自动补全代码)、Cursor(对话式生成代码);
- 数据库设计:DBDiagram.io(可视化ER图,支持AI辅助生成SQL);
- 接口测试:Postman(AI生成测试用例)。
1.3 权限模块详细设计(独立服务)
- 功能需求:
- 用户认证(JWT Token登录/登出);
- 角色管理(预定义角色:admin/sales/viewer,支持自定义角色);
- 权限控制(细粒度权限码,如
crm:customer:view
、crm:opportunity:edit
); - 接口鉴权(所有CRM接口需携带Token,权限模块校验用户权限)。
- 非功能需求:
- 低延迟(权限校验响应时间≤200ms);
- 高内聚低耦合(权限模块通过API对外提供服务,不与CRM业务逻辑强绑定)。
1.4 系统架构图(AI生成)
用AI工具(如CodeGeeX)绘制架构图,明确模块交互:
[前端(Vue)] ↔ [权限模块(auth-service)] ↔ [CRM业务模块(crm-service)]
│ │
└───────── [SQLite数据库] ───────────┘
二、数据库设计与权限模块基础搭建(第2天)
目标:完成数据库表结构设计和权限模块后端基础框架搭建。
2.1 数据库ER图设计(AI辅助)
- 核心表:用户表(user)、角色表(role)、权限表(permission)、客户表(customer)、销售机会表(sales_opportunity)、联系人表(contact)。
- 关系:
- 用户-角色:多对多(user_role);
- 角色-权限:多对多(role_permission);
- 客户-联系人:一对多(customer_contact);
- 销售机会-客户:多对一(sales_opportunity_customer)。
- AI工具操作:
- 打开DBDiagram.io,输入提示:“生成轻量化CRM数据库ER图,包含user、role、permission、customer、sales_opportunity、contact表,用户-角色多对多,角色-权限多对多,客户-联系人一对多,销售机会-客户多对一。”
- 导出ER图(PNG)和DBML代码(用于后续生成SQL)。
2.2 数据库SQL脚本生成(AI辅助)
- 输入提示:“根据上述ER图的DBML代码,生成SQLite建表SQL语句,包含字段注释、索引(如user.username唯一索引)和关联外键。”
- 输出示例(
schema.sql
):CREATE TABLE user ( id INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, role_ids TEXT -- 存储角色ID列表(JSON格式,如"[1,2]") ); CREATE TABLE role ( id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(50) NOT NULL UNIQUE, -- 如"admin"/"sales" description TEXT ); CREATE TABLE permission ( id INTEGER PRIMARY KEY AUTOINCREMENT, code VARCHAR(50) NOT NULL UNIQUE, -- 如"crm:customer:view" description TEXT ); CREATE TABLE user_role ( user_id INTEGER NOT NULL, role_id INTEGER NOT NULL, PRIMARY KEY (user_id, role_id), FOREIGN KEY (user_id) REFERENCES user(id), FOREIGN KEY (role_id) REFERENCES role(id) ); CREATE TABLE role_permission ( role_id INTEGER NOT NULL, permission_id INTEGER NOT NULL, PRIMARY KEY (role_id, permission_id), FOREIGN KEY (role_id) REFERENCES role(id), FOREIGN KEY (permission_id) REFERENCES permission(id) );
2.3 权限模块后端框架搭建(AI生成)
- 技术栈:Python + Flask + Flask-JWT-Extended(JWT鉴权) + SQLAlchemy(ORM)。
- AI工具操作:
- 新建
auth-service
目录,初始化Flask应用。 - 输入提示:“用Flask初始化一个包含JWT鉴权的服务,连接SQLite数据库,使用SQLAlchemy ORM,生成基础代码(含配置、数据库模型)。”
- 输出
app.py
和models.py
(用户、角色、权限模型)。
- 新建
三、权限模块核心功能开发(第3天)
目标:实现权限模块的“用户认证”“角色权限管理”“接口鉴权”三大核心功能。
3.1 用户认证接口(登录/登出)
- 功能描述:用户通过用户名/密码登录,返回JWT Token;登出时使Token失效。
- AI工具操作:
- 输入提示:“编写Flask登录接口,接收username/password,验证成功后返回JWT Token。使用bcrypt加密密码,查询user表。”
- 生成
auth/routes/auth.py
代码(含密码哈希校验逻辑)。 - 输入提示:“编写Flask登出接口,将Token加入黑名单(使用redis存储,轻量化场景可用内存缓存替代)。”
3.2 角色与权限管理接口
- 功能描述:
- 角色CRUD(管理员可增删改查角色);
- 权限CRUD(管理员可绑定角色与权限);
- 用户角色绑定(管理员为用户分配角色)。
- AI工具操作:
- 输入提示:“编写角色管理接口(GET/POST/PUT/DELETE),路径为/auth/roles,使用SQLAlchemy操作role表,仅允许管理员角色访问(通过权限装饰器校验)。”
- 输入提示:“编写权限绑定接口(POST /auth/roles/{role_id}/permissions),接收权限码列表,更新role_permission关联表。”
3.3 接口鉴权装饰器(AI生成)
- 功能描述:定义
@require_permission(code)
装饰器,校验用户是否拥有指定权限码。 - AI工具操作:
- 输入提示:“编写Flask装饰器@require_permission(code=‘crm:customer:view’),从JWT中获取用户ID,查询user_role关联角色,再查询role_permission关联权限,若未授权返回403。”
- 生成
auth/decorators.py
代码(含权限查询逻辑)。
四、CRM核心模块开发(第4-5天)
目标:完成客户管理、销售机会管理的CRUD功能,与权限模块集成。
4.1 客户管理模块(第4天)
-
后端接口:
GET /crm/customers
:获取客户列表(需crm:customer:view
权限);POST /crm/customers
:创建客户(需crm:customer:create
权限,自动关联当前用户为“负责人”);PUT /crm/customers/{id}
:修改客户(需crm:customer:edit
权限,仅允许负责人或管理员修改);DELETE /crm/customers/{id}
:删除客户(需crm:customer:delete
权限,仅管理员可操作)。
-
AI工具操作:
- 输入提示:“编写Flask客户接口,路径为/crm/customers,使用SQLAlchemy操作customer表,添加@require_permission装饰器校验权限,创建时自动填充owner_id为当前用户ID。”
- 生成
crm/routes/customers.py
代码(含数据校验和权限控制)。
-
前端页面:
- 客户列表页(搜索/筛选/分页);
- 客户详情页(查看/编辑);
- 新增客户表单页。
-
AI工具操作:
- 输入提示:“用Vue 3+Element Plus生成客户列表页,包含表格(显示客户名称、电话、负责人)、搜索框(按姓名/电话)、新增/编辑按钮(跳转表单页),调用后端/crm/customers接口。”
- 生成
CustomerList.vue
组件(含API调用逻辑)。
4.2 销售机会管理模块(第5天)
-
后端接口:
GET /crm/opportunities
:获取销售机会列表(需crm:opportunity:view
权限,支持按客户/阶段筛选);POST /crm/opportunities
:创建销售机会(需crm:opportunity:create
权限,关联客户ID);PUT /crm/opportunities/{id}
:修改销售机会(需crm:opportunity:edit
权限,仅允许负责人或管理员修改)。
-
AI工具操作:
- 输入提示:“编写销售机会接口,路径为/crm/opportunities,字段包含stage(枚举:潜在/跟进中/成交)、amount(金额)、customer_id(外键),使用SQLAlchemy关联customer表,添加@require_permission装饰器。”
- 生成
crm/routes/opportunities.py
代码(含事务处理,避免客户不存在时创建机会)。
-
前端页面:
- 销售机会列表页(阶段筛选下拉框、金额统计);
- 销售机会详情页(查看/编辑阶段、金额)。
-
AI工具操作:
- 输入提示:“用Vue生成销售机会列表页,表格列包含阶段、金额、客户名称,顶部添加阶段筛选下拉框(潜在/跟进中/成交),调用后端/crm/opportunities接口并传递stage参数。”
- 生成
OpportunityList.vue
组件(含筛选逻辑)。
五、系统测试与联调(第6天)
目标:验证功能完整性、权限控制有效性、接口稳定性。
5.1 单元测试(AI生成)
-
后端测试:
输入提示:“为Flask的客户接口编写单元测试,覆盖登录鉴权(无Token返回401)、权限校验(viewer角色无法访问POST /crm/customers)、数据增删改查(正常返回200)。”
生成test_crm.py
测试脚本(使用pytest和Flask测试客户端)。 -
前端测试:
输入提示:“用Vue Test Utils编写客户列表页测试用例,验证搜索框输入后是否调用接口、按钮点击是否跳转表单页。”
5.2 接口测试(Postman+AI)
- 输入提示:“根据Flask客户接口文档,生成Postman Collection JSON文件,包含/login(POST)、/crm/customers(GET/POST)等接口的请求示例和预期响应。”
生成crm_api.postman_collection.json
,导入Postman执行测试。
5.3 权限验证测试(手动+AI辅助)
- 操作:使用不同角色账号(admin/sales/viewer)登录,验证:
- sales角色能否访问自己的客户(允许);
- viewer角色能否修改客户(拒绝,返回403);
- admin角色能否删除任意客户(允许)。
- AI辅助:用CodeGeeX检查权限装饰器逻辑,提示潜在漏洞(如未校验
owner_id
导致越权)。
六、部署上线(第7天)
目标:将系统部署到云服务器,支持公网访问。
6.1 Docker打包(AI生成)
- 输入提示:“为Flask+Vue轻量化CRM编写Dockerfile,要求:前端构建静态文件(npm run build),后端使用Gunicorn运行,依赖Python 3.9,暴露5000端口。”
生成Dockerfile
(包含前端构建、后端依赖安装、启动命令)。
6.2 云服务器部署(AI辅助脚本)
- 输入提示:“在阿里云ECS(Ubuntu 20.04)上部署Docker化的Flask+Vue应用,需要执行的步骤(安装Docker、上传代码、启动容器),用bash脚本实现。”
生成deploy.sh
脚本(含docker build
、docker run
命令)。
6.3 HTTPS配置(AI辅助)
- 输入提示:“为域名crm.example.com申请Let’s Encrypt SSL证书,使用certbot工具,配置Nginx反向代理到Docker容器的5000端口,生成Nginx配置示例。”
生成nginx.conf
片段(含SSL配置和反向代理规则)。
总结
通过7天计划,结合AI代码工具(Copilot、Cursor等)和轻量化技术栈(Flask+Vue+SQLite),可高效开发含独立权限模块的轻量化CRM系统。核心是“需求聚焦→权限模块独立设计→快速开发→测试部署”,全程通过AI工具降低编码成本,确保系统可落地、可维护。
更多推荐
所有评论(0)