基于SpringBoot2+vue3的客户关系管理系统(crm)
1. 代码获取https://blog.xiaobias.com/article/142. 项目简介本项目为客户关系管理系统用于企业管理客户信息、员工信息、客户线索、沟通记录及客户积分等。系统支持管理员和员工两种角色提供客户信息维护、线索跟进、沟通记录登记、积分增减等功能帮助提升客户管理效率。项目采用前后端分离架构后端基于 Spring Boot前端基于 Vue Element UI。3. 技术栈层次技术后端框架Spring Boot 2.2.2.RELEASEMyBatis-Plus 2.3Apache Shiro 1.3.2数据库MySQL 5.7.32-log前端框架Vue 2.xElement UIEChartsvue-amap高德地图vue-json-excel构建工具Maven其他工具POIExcel导入导出FastjsonHutool4. 详细介绍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)publicRsave(RequestBodyKehujifenEntitykehujifen,HttpServletRequestrequest){StringroleString.valueOf(request.getSession().getAttribute(role));if(员工.equals(role))kehujifen.setYuangongId(Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId))));KehuEntitykehuEntitykehuService.selectById(kehujifen.getKehuId());if(kehuEntitynull)returnR.error(查不到客户);kehujifen.setInsertTime(newDate());kehujifen.setCreateTime(newDate());kehujifenService.insert(kehujifen);kehuEntity.setKehuJifenNumber(kehuEntity.getKehuJifenNumber()kehujifen.getKehujifenNumber());kehuService.updateById(kehuEntity);returnR.ok();}5.2 员工登录接口// YuangongController.java – login 方法IgnoreAuthRequestMapping(value/login)publicRlogin(Stringusername,Stringpassword,Stringcaptcha,HttpServletRequestrequest){YuangongEntityyuangongyuangongService.selectOne(newEntityWrapperYuangongEntity().eq(username,username));if(yuangongnull||!yuangong.getPassword().equals(password))returnR.error(账号或密码不正确);elseif(yuangong.getJinyongTypes().intValue()!1)returnR.error(当前账户已被禁用);StringtokentokenService.generateToken(yuangong.getId(),username,yuangong,员工);RrR.ok();r.put(token,token);r.put(role,员工);r.put(username,yuangong.getYuangongName());r.put(tableName,yuangong);r.put(userId,yuangong.getId());returnr;}5.3 字典表转换工具方法部分// DictionaryServiceImpl.java – dictionaryConvert 方法publicvoiddictionaryConvert(Objectobj,HttpServletRequestrequest){// 获取所有 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.idwhereiftestparams.yuangongId ! null and params.yuangongId ! and ( a.yuangong_id #{params.yuangongId} or kehu.yuangong_id #{params.yuangongId} )/if.../where5.5 前端路由配置示例// router-static.js – 路由定义{path:/kehu,name:客户,component:kehu},{path:/yuangong,name:员工,component:yuangong},{path:/kehuxiansuo,name:客户线索,component:kehuxiansuo}Use the tool for decodingaHR0cHM6Ly9ibG9nLnhpYW9iaWFzLmNvbS9hcnRpY2xlLzE06. 部分截图7. 项目总结本客户关系管理系统基于 Spring Boot MyBatis-Plus Vue 构建实现了企业客户管理的基础需求。系统具备完整的 RBAC 权限控制支持管理员和员工双角色数据库设计规范字典表动态配置扩展性良好提供客户、线索、沟通记录、积分等核心业务功能能够有效辅助企业进行客户关系维护。通过该项目可以深入理解 Spring Boot 整合 MyBatis-Plus 的开发模式以及 Vue Element UI 后台管理系统的构建方式。