博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
一、源码特点
springboot VUE3心理健康服务系统是一套完善的完整信息管理类型系统,结合springboot3框架和VUE3、mybatisplus完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。
前段主要技术 vue3
后端主要技术 springboot java
数据库 mysql
开发工具 IDEA JDK1.8
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以 不建议。
2.IDE环境:推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;;
5.数据库 :mysql8.0 需要修改数据连接配置,以及maven中的mysql 驱动包;
6.是Maven项目;查看源码目录中是否包含pom.xml;
使用说明
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件 数据库字符集utf-8;
2. 使用IDEA导入项目;
3.vue 项目启动 npm run serve (若已集成,直接访问) 注意 工程文件所在路劲不能含有中文,否则会报错
vue 版本 3.2
node 版本 16.14.2
二、功能介绍
前台功能:
首页浏览
论坛交流
坐诊医生浏览
案例信息浏览
试卷列表
个人中心
用户注册、登录
后台功能:
管理员登录、个人信息修改
用户管理
心理医生管理
病例信息管理
案例信息管理
测试信息管理
试卷信息管理
论坛管理
轮播图管理
数据库设计
表名:binglixinxi
功能:病历信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
binglibianhao | varchar | 200 | 病历编号 | ||
yonghuzhanghao | varchar | 200 | 用户账号 | ||
yonghuxingming | varchar | 200 | 用户姓名 | ||
nianling | varchar | 200 | 年龄 | ||
xingbie | varchar | 200 | 性别 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
bingqingxiangqing | longtext | 4294967295 | 病情详情 | ||
jiuzhenshijian | datetime | 就诊时间 | |||
zhenduanjieguo | longtext | 4294967295 | 诊断结果 | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengxingming | varchar | 200 | 医生姓名 |
表名:anlixinxi
功能:案例信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
anlimingcheng | varchar | 200 | 案例名称 | ||
tupian | longtext | 4294967295 | 图片 | ||
anlileixing | varchar | 200 | 案例类型 | ||
anlishipin | longtext | 4294967295 | 案例视频 | ||
anlixiangqing | longtext | 4294967295 | 案例详情 | ||
fabushijian | datetime | 发布时间 | |||
storeupnum | int | 收藏数量 |
表名:token
功能:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表名:anlileixing
功能:案例类型
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
anlileixing | varchar | 200 | 案例类型 |
表名:yishengjiuzhen
功能:医生就诊
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yuyuebianhao | varchar | 200 | 预约编号 | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
yonghuzhanghao | varchar | 200 | 用户账号 | ||
yonghuxingming | varchar | 200 | 用户姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
jiwangbingshi | longtext | 4294967295 | 既往病史 | ||
zhenduanwenti | longtext | 4294967295 | 诊断问题 | ||
zhiliaofangan | longtext | 4294967295 | 治疗方案 | ||
jiuzhenxiangqing | longtext | 4294967295 | 就诊详情 | ||
jiuzhenshijian | datetime | 就诊时间 | |||
jiuzhenzhuangtai | varchar | 200 | 就诊状态 | ||
yanzhongchengdu | varchar | 200 | 严重程度 |
表名:menu
功能:菜单
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
menujson | longtext | 4294967295 | 菜单 |
表名:config
功能:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表名:xinliyisheng
功能:心理医生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengmima | varchar | 200 | 医生密码 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
zhaopian | longtext | 4294967295 | 照片 | ||
xingbie | varchar | 200 | 性别 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
sfsh | varchar | 200 | 是否审核 | ||
shhf | longtext | 4294967295 | 回复内容 |
表名:zuozhenyisheng
功能:坐诊医生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
zhaopian | longtext | 4294967295 | 照片 | ||
keyuerenshu | int | 可约人数 | |||
zixunfeiyong | double | 咨询费用 | |||
keyueshijian | varchar | 200 | 可约时间 | ||
zhuanyezizhi | longtext | 4294967295 | 专业资质 | ||
zhuanyelingyu | longtext | 4294967295 | 专业领域 | ||
gerenjianjie | longtext | 4294967295 | 个人简介 | ||
storeupnum | int | 收藏数量 | |||
jiuzhendidian | varchar | 200 | 就诊地点 |
表名:users
功能:管理员
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
username | varchar | 200 | 用户名 | ||
password | varchar | 200 | 密码 | ||
role | varchar | 200 | 角色 |
表名:yuyueyisheng
功能:预约医生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
keyueshijian | varchar | 200 | 可约时间 | ||
zixunfeiyong | double | 咨询费用 | |||
keyuerenshu | int | 预约数量 | |||
yuyueshijian | datetime | 预约时间 | |||
yonghuzhanghao | varchar | 200 | 用户账号 | ||
yonghuxingming | varchar | 200 | 用户姓名 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
zhuzhi | varchar | 200 | 住址 | ||
sfsh | varchar | 200 | 是否审核 | ||
shhf | longtext | 4294967295 | 回复内容 | ||
ispay | varchar | 200 | 是否支付 | ||
jiuzhenzhuangtai | varchar | 200 | 就诊状态 |
表名:yonghu
功能:用户
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yonghuzhanghao | varchar | 200 | 用户账号 | ||
yonghumima | varchar | 200 | 用户密码 | ||
yonghuxingming | varchar | 200 | 用户姓名 | ||
touxiang | longtext | 4294967295 | 头像 | ||
xingbie | varchar | 200 | 性别 | ||
shoujihaoma | varchar | 200 | 手机号码 | ||
nianling | int | 年龄 | |||
zhuzhi | varchar | 200 | 住址 |
表名:storeup
功能:我的收藏
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
refid | bigint | refid | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 名称 | ||
picture | longtext | 4294967295 | 图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) | ||
inteltype | varchar | 200 | 推荐类型 | ||
remark | varchar | 200 | 备注 | ||
userid | bigint | 用户id |
表名:quxiaoyuyue
功能:取消预约
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yishengzhanghao | varchar | 200 | 医生账号 | ||
yishengxingming | varchar | 200 | 医生姓名 | ||
lianxidianhua | varchar | 200 | 联系电话 | ||
keyueshijian | varchar | 200 | 可约时间 | ||
keyuerenshu | int | 取消次数 | |||
quxiaoyuanyin | varchar | 200 | 取消原因 | ||
quxiaoshijian | datetime | 取消时间 | |||
yonghuzhanghao | varchar | 200 | 用户账号 | ||
yonghuxingming | varchar | 200 | 用户姓名 | ||
sfsh | varchar | 200 | 是否审核 | ||
shhf | longtext | 4294967295 | 回复内容 |
表名:forum
功能:论坛交流
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 帖子标题 | ||
content | longtext | 4294967295 | 帖子内容 | ||
parentid | bigint | 父节点id | |||
username | varchar | 200 | 用户名 | ||
avatarurl | longtext | 4294967295 | 头像 | ||
isdone | varchar | 200 | 状态 | ||
userid | bigint | 用户id |
表名:examrecord
功能:心理测试
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
username | varchar | 200 | 用户名 | ||
paperid | bigint | 试卷id(外键) | |||
papername | varchar | 200 | 试卷名称 | ||
questionid | bigint | 试题id(外键) | |||
questionname | varchar | 200 | 试题名称 | ||
options | longtext | 4294967295 | 选项,json字符串 | ||
score | bigint | 分值 | |||
answer | varchar | 200 | 正确答案 | ||
analysis | longtext | 4294967295 | 答案解析 | ||
myscore | bigint | 试题得分 | |||
myanswer | varchar | 200 | 考生答案 | ||
userid | bigint | 用户id |
表名:examquestion
功能:试题管理
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
paperid | bigint | 试卷id(外键) | |||
papername | varchar | 200 | 试卷名称 | ||
questionname | varchar | 200 | 试题名称 | ||
options | longtext | 4294967295 | 选项,json字符串 | ||
score | bigint | 分值 | |||
answer | varchar | 200 | 正确答案 | ||
analysis | longtext | 4294967295 | 答案解析 | ||
type | bigint | 试题类型 | |||
sequence | bigint | 试题排序,值越大排越前面 |
表名:exampaper
功能:试卷管理
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
name | varchar | 200 | 试卷名称 | ||
time | int | 考试时长(分钟) | |||
status | varchar | 200 | 试卷状态 |
后端代码实现
核心token相关方法
@Overridepublic PageUtils queryPage(Map<String, Object> params) {Page<TokenEntity> page = this.selectPage(new Query<TokenEntity>(params).getPage(),new EntityWrapper<TokenEntity>());return new PageUtils(page);}@Overridepublic List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {return baseMapper.selectListView(wrapper);}@Overridepublic PageUtils queryPage(Map<String, Object> params,Wrapper<TokenEntity> wrapper) {Page<TokenEntity> page =new Query<TokenEntity>(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil = new PageUtils(page);return pageUtil;}@Overridepublic String generateToken(Long userid,String username, String tableName, String role) {TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));String token = CommonUtil.getRandomString(32);Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.HOUR_OF_DAY, 1);if(tokenEntity!=null) {tokenEntity.setToken(token);tokenEntity.setExpiratedtime(cal.getTime());this.updateById(tokenEntity);} else {this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));}return token;}@Overridepublic TokenEntity getTokenEntity(String token) {TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("token", token));if(tokenEntity == null || tokenEntity.getExpiratedtime().getTime()<new Date().getTime()) {return null;}return tokenEntity;}
控制类
@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if(user==null || !user.getPassword().equals(password)) {return R.error("账号或密码不正确");}String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());return R.ok().put("token", token);}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {return R.error("用户已存在");}userService.insert(user);return R.ok();}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 密码重置*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request){UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));if(user==null) {return R.error("账号不存在");}user.setPassword("123456");userService.update(user,null);return R.ok("密码已重置为:123456");}/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,UsersEntity user){EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/list")public R list( UsersEntity user){EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();ew.allEq(MPUtil.allEQMapPre( user, "user")); return R.ok().put("data", userService.selectListView(ew));}
前端代码实现
登录功能:
<template><div><div class="login_view"><el-form :model="loginForm" class="login_form"><div class="title_view">基于spring boot心理健康服务系统登录</div><div class="list_item" v-if="loginType==1"><div class="list_label">账号:</div><input class="list_inp" v-model="loginForm.username" placeholder="请输入账号" /></div><div class="list_item" v-if="loginType==1"><div class="list_label">密码:</div><input class="list_inp" v-model="loginForm.password" type="password" placeholder="请输入密码" @keydown.enter.native="handleLogin" /></div><div class="list_type" v-if="userList.length>1"><div class="list_label">用户类型:</div><el-select v-model="loginForm.role" placeholder="请选择用户类型"><el-option v-for="(item,index) in userList" :label="item.roleName" :value="item.roleName"></el-option></el-select></div><div class="btn_view"><el-button class="login" v-if="loginType==1" type="success" @click="handleLogin">登录</el-button><el-button class="register" type="primary" @click="handleRegister('xinliyisheng')">注册心理医生</el-button></div></el-form></div><Vcode :show="isShow" @success="success" @close="close" @fail='fail'></Vcode></div>
</template>
<script setup>import {ref,getCurrentInstance,nextTick,onMounted,} from "vue";const userList = ref([])const menus = ref([])const loginForm = ref({role: '',username: '',password: ''})const tableName = ref('')const loginType = ref(1)const context = getCurrentInstance()?.appContext.config.globalProperties;//注册const handleRegister = (tableName) => {context?.$router.push(`/${tableName}Register`)}const handleLogin = () => {if (!loginForm.value.username) {context?.$toolUtil.message('请输入用户名', 'error')return;}if (!loginForm.value.password) {context?.$toolUtil.message('请输入密码', 'error')return;}if (userList.value.length > 1) {if (!loginForm.value.role) {context?.$toolUtil.message('请选择角色', 'error')verifySlider.value.reset()return;}for (let i = 0; i < menus.value.length; i++) {if (menus.value[i].roleName == loginForm.value.role) {tableName.value = menus.value[i].tableName;}}} else {tableName.value = userList.value[0].tableName;loginForm.value.role = userList.value[0].roleName;}login()}const login = () => {context?.$http({url: `${tableName.value}/login?username=${loginForm.value.username}&password=${loginForm.value.password}`,method: 'post'}).then(res => {context?.$toolUtil.storageSet("Token", res.data.token);context?.$toolUtil.storageSet("role", loginForm.value.role);context?.$toolUtil.storageSet("sessionTable", tableName.value);context?.$toolUtil.storageSet("adminName", loginForm.value.username);context?.$router.push('/')}, err => {})}//获取菜单const getMenu=()=> {let params = {page: 1,limit: 1,sort: 'id',}context?.$http({url: "menu/list",method: "get",params: params}).then(res => {menus.value = JSON.parse(res.data.data.list[0].menujson)for (let i = 0; i < menus.value.length; i++) {if (menus.value[i].hasBackLogin=='是') {userList.value.push(menus.value[i])}}loginForm.value.role = userList.value[0].roleNamecontext?.$toolUtil.storageSet("menus", JSON.stringify(menus.value));})}//初始化const init = () => {getMenu();}onMounted(()=>{init()})
</script><style lang="scss" scoped>.login_view {background-repeat: no-repeat;flex-direction: column;background-size: 100% 100%;background: url(http://clfile.zggen.cn/20240301/cb59505e774a42899501d8d7f1360b75.jpg);display: flex;min-height: 100vh;justify-content: center;align-items: center;position: relative;background-position: center center;// 表单盒子.login_form {border-radius: 0px;padding: 50px 80px 30px 40px;margin: 0 auto;background: url(http://clfile.zggen.cn/20240301/7ac2edfec9b84ae5be0a62f62e8af7bb.png) no-repeat center top / 100% auto,#f7f2ec;display: flex;width: 600px;justify-content: flex-start;flex-wrap: wrap;}.title_view {padding: 0px;margin: 0 auto 30px;color: #333;font-weight: 500;width: 80%;font-size: 22px;text-align: center;}// item盒子.list_item {margin: 0 0 20px;display: flex;width: 100%;justify-content: flex-start;align-items: center;// label.list_label {color: #666;background: none;width: 130px;font-size: 14px;line-height: 36px;text-align: right;}// 输入框.list_inp {border: 1px solid #ddd;border-radius: 0px;padding: 0 10px;color: #666;background: #fff;width: 100%;line-height: 36px;height: 36px;}}.list_type {margin: 0 0 20px;display: flex;width: 100%;justify-content: flex-start;align-items: center;order: 3;.list_label {color: #666;background: none;width: 130px;font-size: 14px;line-height: 36px;text-align: right;}// 下拉框样式:deep(.el-select) {border: 1px solid #ddd;border-radius: 0px;padding: 0 10px;color: #666;background: #fff;width: 100%;font-size: 14px;line-height: 36px;box-sizing: border-box;height: 36px;//去掉默认样式.select-trigger{height: 100%;.el-input{height: 100%;.el-input__wrapper{border: none;box-shadow: none;background: none;border-radius: 0;height: 100%;padding: 0;}.is-focus {box-shadow: none !important;}}}}}// 按钮盒子.btn_view {padding: 0;margin: 20px 0 0;background: none;display: flex;width: 100%;justify-content: center;align-items: center;flex-wrap: wrap;order: 5;// 登录.login {border: 0;cursor: pointer;border-radius: 0px;padding: 0 24px;margin: 0 10px 10px 0;color: #fff;background: linear-gradient(270deg, rgba(130,196,209,1) 0%, rgba(115,186,200,1) 24%, rgba(174,210,217,1) 100%);width: auto;font-size: 16px;height: 40px;}// 注册.register {border: 1px solid #ddd;cursor: pointer;border-radius: 0px;padding: 0 10px;margin: 0 10px 10px 0;color: #333;background: #fff;width: auto;font-size: 14px;height: 40px;}}}</style>
三、注意事项
1、管理员账号:admin密码:admin 数据库配置文件server_code\src\main\resources\application.yml
2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。
3、数据库文件名是cl52924225.sql
4
前台地址:
http://localhost:8082/index/home
123,123
后台地址:
http://localhost:8081/#/login
http://localhost:8082
admin,admin
四系统实现
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者