在这里插入图片描述

轻量化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:viewcrm: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工具操作
    1. 打开DBDiagram.io,输入提示:“生成轻量化CRM数据库ER图,包含user、role、permission、customer、sales_opportunity、contact表,用户-角色多对多,角色-权限多对多,客户-联系人一对多,销售机会-客户多对一。”
    2. 导出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工具操作
    1. 新建auth-service目录,初始化Flask应用。
    2. 输入提示:“用Flask初始化一个包含JWT鉴权的服务,连接SQLite数据库,使用SQLAlchemy ORM,生成基础代码(含配置、数据库模型)。”
    3. 输出app.pymodels.py(用户、角色、权限模型)。

三、权限模块核心功能开发(第3天)

目标:实现权限模块的“用户认证”“角色权限管理”“接口鉴权”三大核心功能。

3.1 用户认证接口(登录/登出)
  • 功能描述:用户通过用户名/密码登录,返回JWT Token;登出时使Token失效。
  • AI工具操作
    1. 输入提示:“编写Flask登录接口,接收username/password,验证成功后返回JWT Token。使用bcrypt加密密码,查询user表。”
    2. 生成auth/routes/auth.py代码(含密码哈希校验逻辑)。
    3. 输入提示:“编写Flask登出接口,将Token加入黑名单(使用redis存储,轻量化场景可用内存缓存替代)。”
3.2 角色与权限管理接口
  • 功能描述
    • 角色CRUD(管理员可增删改查角色);
    • 权限CRUD(管理员可绑定角色与权限);
    • 用户角色绑定(管理员为用户分配角色)。
  • AI工具操作
    1. 输入提示:“编写角色管理接口(GET/POST/PUT/DELETE),路径为/auth/roles,使用SQLAlchemy操作role表,仅允许管理员角色访问(通过权限装饰器校验)。”
    2. 输入提示:“编写权限绑定接口(POST /auth/roles/{role_id}/permissions),接收权限码列表,更新role_permission关联表。”
3.3 接口鉴权装饰器(AI生成)
  • 功能描述:定义@require_permission(code)装饰器,校验用户是否拥有指定权限码。
  • AI工具操作
    1. 输入提示:“编写Flask装饰器@require_permission(code=‘crm:customer:view’),从JWT中获取用户ID,查询user_role关联角色,再查询role_permission关联权限,若未授权返回403。”
    2. 生成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工具操作

    1. 输入提示:“编写Flask客户接口,路径为/crm/customers,使用SQLAlchemy操作customer表,添加@require_permission装饰器校验权限,创建时自动填充owner_id为当前用户ID。”
    2. 生成crm/routes/customers.py代码(含数据校验和权限控制)。
  • 前端页面

    • 客户列表页(搜索/筛选/分页);
    • 客户详情页(查看/编辑);
    • 新增客户表单页。
  • AI工具操作

    1. 输入提示:“用Vue 3+Element Plus生成客户列表页,包含表格(显示客户名称、电话、负责人)、搜索框(按姓名/电话)、新增/编辑按钮(跳转表单页),调用后端/crm/customers接口。”
    2. 生成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工具操作

    1. 输入提示:“编写销售机会接口,路径为/crm/opportunities,字段包含stage(枚举:潜在/跟进中/成交)、amount(金额)、customer_id(外键),使用SQLAlchemy关联customer表,添加@require_permission装饰器。”
    2. 生成crm/routes/opportunities.py代码(含事务处理,避免客户不存在时创建机会)。
  • 前端页面

    • 销售机会列表页(阶段筛选下拉框、金额统计);
    • 销售机会详情页(查看/编辑阶段、金额)。
  • AI工具操作

    1. 输入提示:“用Vue生成销售机会列表页,表格列包含阶段、金额、客户名称,顶部添加阶段筛选下拉框(潜在/跟进中/成交),调用后端/crm/opportunities接口并传递stage参数。”
    2. 生成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 builddocker 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工具降低编码成本,确保系统可落地、可维护。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐