基于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/8/26 17:02:10 阅读更多 →
DHI仿生黑色素:为什么身体选了最不稳定的分子来做最重要的颜色?

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

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

2026/8/26 17:01:09 阅读更多 →
Java 数组从入门到掌握|一维数组、扩容、排序、二维数组详解

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

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

2026/8/26 17:01:09 阅读更多 →

最新新闻

基于颜色的人眼检测

基于颜色的人眼检测

8.2 人眼检测红眼检测最主要的难点在于红眼状态变化极大。 在简单场景下,瞳孔形状、大小正常,和普通瞳孔唯一区别只是颜色。然而红色反光扩散到虹膜区域,造成不自然亮度分布的情况也十分常见。通常还会存在一小块白色高光点,它是闪…

2026/8/26 17:32:06 阅读更多 →
从一条直线到大模型输出一个token(九):输出矩阵与多层堆叠

从一条直线到大模型输出一个token(九):输出矩阵与多层堆叠

从一条直线到大模型输出一个token(九):输出矩阵与多层堆叠 建议先看:从一条直线到大模型输出一个token(八):残差连接与前馈网络 上一篇走完了单个 Block 的六步。这一篇把 Block 复制 32 份串起…

2026/8/26 17:32:06 阅读更多 →
转:怎样招到优秀的核心人才

转:怎样招到优秀的核心人才

个人理解: 薪资越高不代表岗位吸引力就越强 每个人都喜欢钱 工作更具吸引力比单纯改进某个流程更有意义 创造与竞争对手等量的员工价值 能带来可预见性结果的方式来降低员工愿意接受的最低薪酬 薪酬低于行业水平的公司,怎样招到同样优秀的核心人才&…

2026/8/26 17:32:06 阅读更多 →
【花雕动手做】直流电机调速器12V24V36V48V 大功率驱动模块PWM控制器 20A调流器

【花雕动手做】直流电机调速器12V24V36V48V 大功率驱动模块PWM控制器 20A调流器

9‑60V 大功率 PWM 直流电机调速器 这是一款高压宽压 PWM 有刷直流电机调速板,外置分离电位器旋钮,采用大功率 MOS 管,支持 9‑60V 宽直流电压输入,依靠 PWM 脉冲调占空比实现电机无级调速;只做速度调节,不…

2026/8/26 17:32:06 阅读更多 →
SunnyUI常用控件

SunnyUI常用控件

SunnyUI常用控件一、基础文本/标签控件(显示文字) UlLabel:普通文字标签:UiDigitalLabel:数码数字显示屏(温湿度数值):UiLedLabel:LED指示灯式数字:主要属性&…

2026/8/26 17:32:06 阅读更多 →
数据结构:选择排序

数据结构:选择排序

上一篇我们讲了插入排序,这一篇我们来讲选择排序。因为堆排序之前我们有详细讲过,所以这里只给出堆排序的思路,有兴趣的可以看一看。 选择排序 选择排序就是从数组中选出最小值和最大值,最小值放在第一个位置,最大值放…

2026/8/26 17:31:05 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →