基于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 后台管理系统的构建方式。

相关新闻

Codex Plus订阅值不值,按我的使用频率算了一笔账

Codex Plus订阅值不值,按我的使用频率算了一笔账

先算一笔账:我的 Codex 使用画像 我大概是今年 3 月开始密集用 Codex 的。作为一个全栈开发者,日常工作里大概有这些场景会交给它: 代码生成与重构:平均每天 3-5 个功能点,从 API 接口到前端组件自动化文档&#xff1a…

2026/11/8 15:42:17 阅读更多 →
DHI仿生黑色素:为什么身体选了最不稳定的分子来做最重要的颜色?

DHI仿生黑色素:为什么身体选了最不稳定的分子来做最重要的颜色?

一个令人困惑的设计悖论做生物活性成分这么多年,我发现了一个有意思的规律—越重要的东西,往往越脆弱。DHI就是这样。DHI,全称5,6-二羟基吲哚,是人体黑色素合成的关键前体。没有DHI,就没有黑色素&#xff1…

2026/11/7 4:16:43 阅读更多 →
Java 数组从入门到掌握|一维数组、扩容、排序、二维数组详解

Java 数组从入门到掌握|一维数组、扩容、排序、二维数组详解

一、引入单个变量只能保存一份数据,如果需要操作大量数据,就要定义很多独立变量,编码十分繁琐。普通变量无法完成批量统一操作。解决方案:使用数组。二、一维数组1. 概念一次性分配多个相同数据类型的内存空间,可以对这…

2026/10/23 22:41:43 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻