分享一套锋哥原创的SpringBoot4+Vue3通讯录管理系统

发布时间:2026/7/16 15:40:17

分享一套锋哥原创的SpringBoot4+Vue3通讯录管理系统
大家好我是Java1234_小锋老师分享一套锋哥原创的SpringBoot4Vue3通讯录管理系统项目介绍随着移动互联网与信息化办公的快速发展个人与组织对联系人信息的高效管理需求日益增长。传统的纸质通讯录或分散的电子表格方式存在检索困难、数据易丢失、难以多人协同和扩展性差等问题。因此设计并实现一套基于B/S架构的通讯录管理系统具有较强的实际应用价值。本文以Spring Boot作为后端核心框架结合MyBatis-Plus完成持久层访问前端采用Vue3与Element Plus构建交互界面数据库选用MySQL认证机制采用JWT构建了一套功能完整的通讯录管理系统。系统实现了用户注册与登录、联系人增删改查、分组管理、收藏联系人、Excel导入导出、个人中心头像上传、资料修改、密码修改、管理员用户管理、首页数据统计图表以及操作日志查询等功能。在数据库设计方面围绕用户、联系人、联系人分组和操作日志四类核心实体完成概念结构设计与逻辑结构设计并给出详细的数据表字段说明。在系统实现方面重点阐述了Spring Boot分层架构、MyBatis-Plus条件构造与分页、Vue3组合式API及前后端分离交互流程。测试结果表明系统功能运行稳定界面交互清晰能够满足日常通讯录管理的基本业务需求。本文的研究与实现过程可为同类中小型信息管理系统的开发提供参考。源码下载链接: https://pan.baidu.com/s/1ylAImSIMkYUc47iTmF2nbA?pwd1234提取码: 1234系统展示核心代码package com.java1234.addressbook.controller; import com.java1234.addressbook.common.Result; import com.java1234.addressbook.common.UserContext; import com.java1234.addressbook.dto.PasswordDTO; import com.java1234.addressbook.entity.User; import com.java1234.addressbook.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; /** * 个人中心控制器 * * author addressbook */ RestController RequestMapping(/api/profile) RequiredArgsConstructor public class ProfileController { private final UserService userService; /** * 获取当前用户信息 */ GetMapping public ResultUser getProfile() { User user userService.getById(UserContext.getUserId()); if (user ! null) { user.setPassword(null); } return Result.success(user); } /** * 更新个人资料 */ PutMapping public ResultVoid updateProfile(RequestBody User user) { user.setId(UserContext.getUserId()); userService.updateProfile(user); return Result.success(资料更新成功, null); } /** * 修改密码 */ PutMapping(/password) public ResultVoid changePassword(RequestBody PasswordDTO dto) { userService.changePassword(UserContext.getUserId(), dto.getOldPassword(), dto.getNewPassword()); return Result.success(密码修改成功, null); } }template div classpage-container !-- 统计卡片 -- el-row :gutter16 classstat-row el-col :span6 div classstat-card blue div classstat-label联系人总数/div div classstat-value{{ stats.contactCount || 0 }}/div el-icon :size40 styleopacity:0.3;position:absolute;right:20px;top:20pxUser //el-icon /div /el-col el-col :span6 div classstat-card green div classstat-label分组数量/div div classstat-value{{ stats.groupCount || 0 }}/div el-icon :size40 styleopacity:0.3;position:absolute;right:20px;top:20pxFolderOpened //el-icon /div /el-col el-col :span6 div classstat-card orange div classstat-label收藏联系人/div div classstat-value{{ stats.starredCount || 0 }}/div el-icon :size40 styleopacity:0.3;position:absolute;right:20px;top:20pxStar //el-icon /div /el-col el-col :span6 div classstat-card purple div classstat-label{{ userStore.isAdmin ? 用户总数 : 我的联系人 }}/div div classstat-value{{ userStore.isAdmin ? (stats.userCount || 0) : (stats.contactCount || 0) }}/div el-icon :size40 styleopacity:0.3;position:absolute;right:20px;top:20pxAvatar //el-icon /div /el-col /el-row !-- 图表区域 -- el-row :gutter16 stylemargin-top:16px el-col :span12 div classchart-card div classchart-title联系人分组分布/div div refpieChartRef styleheight:320px/div /div /el-col el-col :span12 div classchart-card div classchart-title近6个月新增趋势/div div refbarChartRef styleheight:320px/div /div /el-col /el-row !-- 生日提醒 -- div classchart-card stylemargin-top:16px div classchart-title近期生日提醒 (30天内)/div el-table :datastats.birthdays || [] stripe stylewidth:100% el-table-column propname label姓名 min-width120 / el-table-column propmobile label手机号 min-width140 / el-table-column propgroupName label分组 min-width100 / el-table-column label生日 min-width120 template #default{ row } {{ formatDate(row.birthday) }} /template /el-table-column el-table-column propcompany label公司 min-width160 show-overflow-tooltip / /el-table el-empty v-if!stats.birthdays?.length description近期暂无生日提醒 / /div /div /template script setup import { ref, onMounted, onUnmounted } from vue import * as echarts from echarts import dayjs from dayjs import { getDashboard } from /api import { useUserStore } from /store/user const userStore useUserStore() const stats ref({}) const pieChartRef ref() const barChartRef ref() let pieChart null let barChart null /** 格式化日期 */ function formatDate(date) { return date ? dayjs(date).format(YYYY-MM-DD) : } /** 加载统计数据 */ async function loadData() { const res await getDashboard() stats.value res.data renderPieChart(res.data.groupDistribution || []) renderBarChart(res.data.monthlyTrend || []) } /** 渲染饼图 */ function renderPieChart(data) { if (!pieChartRef.value) return pieChart echarts.init(pieChartRef.value) pieChart.setOption({ tooltip: { trigger: item, formatter: {b}: {c} ({d}%) }, legend: { bottom: 0, type: scroll }, color: [#667eea, #11998e, #f5576c, #4facfe, #f093fb, #38ef7d], series: [{ type: pie, radius: [40%, 70%], center: [50%, 45%], itemStyle: { borderRadius: 8, borderColor: #fff, borderWidth: 2 }, label: { show: true, formatter: {b}\n{c}人 }, data: data.length ? data : [{ name: 暂无数据, value: 0 }] }] }) } /** 渲染柱状图 */ function renderBarChart(data) { if (!barChartRef.value) return barChart echarts.init(barChartRef.value) barChart.setOption({ tooltip: { trigger: axis }, grid: { left: 3%, right: 4%, bottom: 3%, containLabel: true }, xAxis: { type: category, data: data.map(d d.month), axisLabel: { rotate: 30 } }, yAxis: { type: value, minInterval: 1 }, series: [{ type: bar, data: data.map(d d.count), barWidth: 40%, itemStyle: { borderRadius: [6, 6, 0, 0], color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: #667eea }, { offset: 1, color: #764ba2 } ]) } }] }) } /** 窗口大小变化时重绘图表 */ function handleResize() { pieChart?.resize() barChart?.resize() } onMounted(() { loadData() window.addEventListener(resize, handleResize) }) onUnmounted(() { window.removeEventListener(resize, handleResize) pieChart?.dispose() barChart?.dispose() }) /script style scoped .stat-row .stat-card { position: relative; overflow: hidden; } /style

相关新闻

Illustrator智能填充终极指南:如何用Fillinger脚本提升10倍设计效率 [特殊字符]

Illustrator智能填充终极指南:如何用Fillinger脚本提升10倍设计效率 [特殊字符]

2026/7/16 15:40:17

Illustrator智能填充终极指南:如何用Fillinger脚本提升10倍设计效率 🎨 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 还在为Illustrator中繁琐的图案填充而…

Moonlight主题与其他流行VS Code主题对比:为什么选择月光配色

Moonlight主题与其他流行VS Code主题对比:为什么选择月光配色

2026/7/16 15:40:17

Moonlight主题与其他流行VS Code主题对比:为什么选择月光配色 【免费下载链接】moonlight-vscode-theme A VS Code theme with bubblegum colors on a moonlit background 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-vscode-theme 在众多VS Cod…

如何快速优化Windows系统:开源Win11Debloat工具的完整指南

如何快速优化Windows系统:开源Win11Debloat工具的完整指南

2026/7/16 15:40:17

如何快速优化Windows系统:开源Win11Debloat工具的完整指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…

大麦抢票神器终极指南:从零开始实现自动化抢票

大麦抢票神器终极指南:从零开始实现自动化抢票

2026/7/16 17:10:20

大麦抢票神器终极指南:从零开始实现自动化抢票 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 你是否曾因手速不够快而错失心仪的演唱会…

人脸识别技术核心原理与工程实践指南

人脸识别技术核心原理与工程实践指南

2026/7/16 17:10:20

1. 人脸识别技术概述人脸识别作为计算机视觉领域的重要分支,已经广泛应用于安防、金融、零售等多个行业。这项技术通过分析人脸特征点进行身份验证或识别,其核心在于特征提取和匹配算法的优化。近年来随着深度学习的发展,人脸识别准确率已经突…

基于YOLOv8的木材表面缺陷检测系统设计与优化

基于YOLOv8的木材表面缺陷检测系统设计与优化

2026/7/16 17:10:20

1. 项目概述:木材表面缺陷检测的智能化升级木材加工业一直面临着表面缺陷检测的难题。传统人工检测方式效率低下,平均每小时只能检查20-30块木板,且准确率难以超过85%。而基于深度学习的解决方案可以轻松实现每秒5-10张图像的检测速度&#x…

GPT-5.6国内合法使用指南:从API集成到移动端配置

GPT-5.6国内合法使用指南:从API集成到移动端配置

2026/7/16 17:10:20

最近很多开发者都在问同一个问题:GPT-5.6这么强大,国内到底能不能用上?特别是GPT-5.6 Sol这个旗舰模型,在编程、知识工作、网络安全和科学领域都达到了新的高度,但官方渠道在国内访问确实存在限制。好消息是&#xff0…

让你的音乐品味成为社交名片:Discord音乐状态同步指南

让你的音乐品味成为社交名片:Discord音乐状态同步指南

2026/7/16 17:10:20

让你的音乐品味成为社交名片:Discord音乐状态同步指南 【免费下载链接】NetEase-Cloud-Music-DiscordRPC 在Discord上显示网抑云/QQ音乐. Enables Discord Rich Presence For Netease Cloud Music/Tencent QQ Music. 项目地址: https://gitcode.com/gh_mirrors/n…

TradingView图表库多框架整合实战:从Web到移动端的完整解决方案

TradingView图表库多框架整合实战:从Web到移动端的完整解决方案

2026/7/16 17:00:20

TradingView图表库多框架整合实战:从Web到移动端的完整解决方案 【免费下载链接】charting-library-examples Examples of Charting Library integrations with other libraries, frameworks and data transports 项目地址: https://gitcode.com/gh_mirrors/ch/ch…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/16 14:29:31

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/16 14:18:17

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…