自学内容网 自学内容网

springboot框架VUE3心理健康服务管理系统开发mysql数据库网页设计java编程计算机网页源码maven项目

博主介绍:专注于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相关方法


@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<TokenEntity> page = this.selectPage(
                new Query<TokenEntity>(params).getPage(),
                new EntityWrapper<TokenEntity>()
        );
        return new PageUtils(page);
}

@Override
public List<TokenEntity> selectListView(Wrapper<TokenEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}

@Override
public 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;
}

@Override
public 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;
}

@Override
public 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].roleName
          context?.$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
四系统实现


大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者


原文地址:https://blog.csdn.net/qq_41221322/article/details/142461450

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!