基于SpringBoot2+vue3的客户关系管理系统(crm)
温馨提示:
本文最后更新于 2026年05月28日,已超过 13 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
1. 资源
浏览全文可获取
2. 项目简介
本项目为客户关系管理系统,用于企业管理客户信息、员工信息、客户线索、沟通记录及客户积分等。系统支持管理员和员工两种角色,提供客户信息维护、线索跟进、沟通记录登记、积分增减等功能,帮助提升客户管理效率。
项目采用前后端分离架构,后端基于 Spring Boot,前端基于 Vue + Element UI。
3. 技术栈
| 层次 | 技术 |
|---|---|
| 后端框架 | Spring Boot 2.2.2.RELEASE,MyBatis-Plus 2.3,Apache Shiro 1.3.2 |
| 数据库 | MySQL 5.7.32-log |
| 前端框架 | Vue 2.x,Element UI,ECharts,vue-amap(高德地图),vue-json-excel |
| 构建工具 | Maven |
| 其他工具 | POI(Excel导入导出),Fastjson,Hutool |
4. 详细介绍
4.1 模块与功能
4.1.1 客户管理
- 客户信息增删改查,字段包括:客户姓名、手机号、身份证号、照片、性别、邮箱、积分、详细介绍。
- 每个客户归属于一名负责的员工(员工与客户关联)。
- 积分字段由“客户积分”模块自动累加。
4.1.2 员工管理
- 员工账号管理(用户名、密码、姓名、手机号、身份证号、头像、性别、邮箱、是否禁用)。
- 员工初始密码为
123456,支持重置密码。 - 员工登录后只能操作自己负责的客户及相关记录。
4.1.3 客户线索管理
- 记录潜在客户线索,字段包括:姓名、手机号、身份证号、照片、性别、邮箱、线索类型(字典维护)、线索详情。
- 线索由员工添加,可转为正式客户(需通过业务操作)。
4.1.4 沟通记录管理
- 员工与客户的每次沟通记录,包含:沟通标题、沟通类型(字典维护)、沟通时间、沟通详情。
- 关联客户和员工,支持按员工或客户查询。
4.1.5 客户积分管理
- 记录客户积分增加明细,积分增加类型(字典维护,如年度反馈、购买商品增加、人头奖励等)。
- 增加积分时自动累加到对应客户的积分字段。
4.1.6 基础数据管理(字典管理)
- 维护系统中使用的下拉选项:性别类型、是否禁用、线索类型、沟通类型、积分增加类型。
- 字典数据支持动态增删改查。
4.1.7 管理员功能
- 管理员可以管理所有模块的数据,包括员工、客户、线索、沟通记录、积分、字典。
- 管理员可重置员工密码、禁用/启用员工账号。
4.2 数据库设计
| 表名 | 说明 | 关键字段 |
|---|---|---|
yuangong |
员工表 | 账户、密码、姓名、手机号、身份证号、头像、性别、邮箱、是否禁用 |
kehu |
客户表 | 负责员工ID、姓名、手机号、身份证号、照片、性别、邮箱、积分、详细介绍 |
kehuxiansuo |
客户线索表 | 员工ID、姓名、手机号、身份证号、照片、性别、邮箱、线索类型、线索详情 |
goutong |
沟通记录表 | 员工ID、客户ID、沟通标题、沟通类型、沟通时间、沟通详情 |
kehujifen |
客户积分明细表 | 员工ID、客户ID、增加类型、备注、增加积分数量、增加时间 |
dictionary |
字典表 | 字段代码、字段名、编码、编码名字、父ID、备注 |
users |
管理员表 | 用户名、密码、角色 |
token |
登录Token表 | 用户ID、用户名、表名、角色、token、过期时间 |
config |
配置表 | 配置参数名称、值(如百度地图AK、人脸识别API Key等) |
4.3 权限与角色
- 管理员(表
users):拥有所有后台管理权限,可管理员工、客户、线索、沟通记录、积分、字典等。 - 员工(表
yuangong):登录后只能查看和操作自己负责的客户、自己添加的线索、自己的沟通记录、自己给客户增加的积分。员工无权限管理字典和其他员工数据。
4.4 业务规则
- 员工注册或添加时,手机号、身份证号、用户名不可重复。
- 客户手机号、身份证号在系统内唯一。
- 客户线索的手机号、身份证号也需唯一,防止重复线索。
- 增加客户积分时自动更新
kehu表中的积分总数。 - 系统启动时加载字典数据到 ServletContext 全局缓存,用于页面下拉框显示。
5. 部分代码
5.1 后端控制器示例 – 客户积分保存
// KehujifenController.java – save 方法
@RequestMapping("/save")
public R save(@RequestBody KehujifenEntity kehujifen, HttpServletRequest request){
String role = String.valueOf(request.getSession().getAttribute("role"));
if("员工".equals(role))
kehujifen.setYuangongId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
KehuEntity kehuEntity = kehuService.selectById(kehujifen.getKehuId());
if(kehuEntity == null)
return R.error("查不到客户");
kehujifen.setInsertTime(new Date());
kehujifen.setCreateTime(new Date());
kehujifenService.insert(kehujifen);
kehuEntity.setKehuJifenNumber(kehuEntity.getKehuJifenNumber() + kehujifen.getKehujifenNumber());
kehuService.updateById(kehuEntity);
return R.ok();
}
5.2 员工登录接口
// YuangongController.java – login 方法
@IgnoreAuth
@RequestMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
YuangongEntity yuangong = yuangongService.selectOne(new EntityWrapper<YuangongEntity>().eq("username", username));
if(yuangong==null || !yuangong.getPassword().equals(password))
return R.error("账号或密码不正确");
else if(yuangong.getJinyongTypes().intValue() != 1)
return R.error("当前账户已被禁用");
String token = tokenService.generateToken(yuangong.getId(),username, "yuangong", "员工");
R r = R.ok();
r.put("token", token);
r.put("role","员工");
r.put("username",yuangong.getYuangongName());
r.put("tableName","yuangong");
r.put("userId",yuangong.getId());
return r;
}
5.3 字典表转换工具方法(部分)
// DictionaryServiceImpl.java – dictionaryConvert 方法
public void dictionaryConvert(Object obj, HttpServletRequest request) {
// 获取所有 Types 字段,通过字典缓存将编码转为显示名称
// 具体实现见代码文件
}
5.4 MyBatis 查询示例 – 沟通记录多表关联
<!-- GoutongDao.xml – selectListView -->
SELECT ... FROM goutong a
LEFT JOIN kehu kehu ON a.kehu_id = kehu.id
LEFT JOIN yuangong yuangong ON a.yuangong_id = yuangong.id
<where>
<if test="params.yuangongId != null and params.yuangongId != ''">
and ( a.yuangong_id = #{params.yuangongId} or kehu.yuangong_id = #{params.yuangongId} )
</if>
...
</where>
5.5 前端路由配置示例
// router-static.js – 路由定义
{
path: '/kehu',
name: '客户',
component: kehu
},
{
path: '/yuangong',
name: '员工',
component: yuangong
},
{
path: '/kehuxiansuo',
name: '客户线索',
component: kehuxiansuo
}
6. 部分截图












7. 项目总结
本客户关系管理系统基于 Spring Boot + MyBatis-Plus + Vue 构建,实现了企业客户管理的基础需求。系统具备完整的 RBAC 权限控制,支持管理员和员工双角色;数据库设计规范,字典表动态配置,扩展性良好;提供客户、线索、沟通记录、积分等核心业务功能,能够有效辅助企业进行客户关系维护。
通过该项目可以深入理解 Spring Boot 整合 MyBatis-Plus 的开发模式,以及 Vue + Element UI 后台管理系统的构建方式。
正文到此结束
- 本文标签: Java Spring Boot 毕业设计
- 本文链接: https://blog.xiaobias.com/article/14
- 版权声明: 本文由十五喵原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
