基于Java,SpringBoot,Vue智慧校园健康驿站体检论坛请假管理系统

news2024/10/4 16:53:08

摘要

互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用智慧校园管理系统可以有效管理,使信息管理能够更加科学和规范。

功能介绍

管理员、教师、学生三种用户角色,教师和学生可以注册再登录;

管理员:管理员管理、教师管理、学生管理、请假管理、体检管理、健康驿站管理、论坛管理、基础数据管理、资讯管理、轮播图管理等;

教师:学生管理、请假管理、体检管理、健康驿站管理、论坛管理等;

学生:逛论坛、查看健康驿站、预约体检、查看校园资讯、个人中心等;

技术介绍

后端:Java语言的Spring Boot框架、MySQL数据库、Maven依赖管理等;

前端:Vue、element-ui、axios等。

部分代码展示

<template>
    <div>
        <div class="container loginIn">

            <div :class="2 == 1 ? 'left' : 2 == 2 ? 'left center' : 'left right'">
                <el-form class="login-form" label-position="left" :label-width="2 == 3 || 2 == 2 ? '30px': '0px'">
                    <div class="title-container"><h3 class="title">智慧校园管理系统登录</h3></div>
                    <el-form-item :style='{"padding":"0","boxShadow":"0 0 6px rgba(0,0,0,0)","margin":"0 auto 12px ","borderColor":"rgba(0,0,0,0)","backgroundColor":"rgba(0,0,0,0)","borderRadius":"0","borderWidth":"0","width":"70%","borderStyle":"solid","height":"auto"}' :label="2 == 3 ? '用户名' : ''" :class="'style'+2">
            <span v-if="2 != 3" class="svg-container" style="
			color:#333;
			line-height:30px;
			font-size:14px;
			width:30px;
			padding:0;
			margin:0;
			radius:0;
			border-width:0;
			border-style:solid;
			border-color:rgba(0,0,0,0);
			background-color:rgba(0,0,0,0);
			box-shadow:0 0 6px rgba(0,0,0,0);
			}"><svg-icon icon-class="user" /></span>
                        <el-input placeholder="请输入用户名" name="username" type="text" v-model="rulesForm.username" />
                    </el-form-item>
                    <el-form-item :style='{"padding":"0","boxShadow":"0 0 6px rgba(0,0,0,0)","margin":"0 auto 12px ","borderColor":"rgba(0,0,0,0)","backgroundColor":"rgba(0,0,0,0)","borderRadius":"0","borderWidth":"0","width":"70%","borderStyle":"solid","height":"auto"}' :label="2 == 3 ? '密码' : ''" :class="'style'+2">
            <span v-if="2 != 3" class="svg-container" style="color:#333;
			line-height:30px;
			font-size:14px;
			width:30px;
			padding:0;
			margin:0;
			radius:0;
			border-width:0;
			border-style:solid;
			border-color:rgba(0,0,0,0);
			background-color:rgba(0,0,0,0);
			box-shadow:0 0 6px rgba(0,0,0,0);"><svg-icon icon-class="password" /></span>
                        <el-input placeholder="请输入密码" name="password" type="password" v-model="rulesForm.password" />
                    </el-form-item>
                    <el-form-item v-if="roleOptions.length>1" label="角色" prop="loginInRole" class="role" style="display: flex;align-items: center;">
                        <el-radio
                                @change="menuChange"
                                v-for="item in roleOptions"
                                v-bind:key="item.value"
                                v-model="rulesForm.role"
                                :label="item.value"
                        >{{item.key}}</el-radio>
                    </el-form-item>
                    <el-form-item v-if="roleOptions.length==1" label=" " prop="loginInRole" class="role" style="display: flex;align-items: center;">
                    </el-form-item>
                    <el-button type="primary" @click="login()" class="loginInBt">{{'1' == '1' ? '登录' : 'login'}}</el-button>          <el-form-item class="setting">
            <div class="register" @click="register('yonghu')">学生注册</div>
            <div class="register" @click="register('jiaoshi')">教师注册</div>
          </el-form-item>
        </el-form>
      </div>
<!--
                    <el-form-item class="code" :label="3 == 3 ? '验证码' : ''" :class="'style'+3">
                        <span class="svg-container" style="color:rgba(136, 154, 164, 1);line-height:46px"><svg-icon icon-class="code" /></span>
                        <el-input placeholder="请输入验证码" name="code" type="text" v-model="rulesForm.code" />
                        <div class="getCodeBt" @click="getRandCode(4)" style="height:46px;line-height:46px">
                            <span v-for="(item, index) in codes" :key="index" :style="{color:item.color,transform:item.rotate,fontSize:item.size}">{{ item.num }}</span>
                        </div>
                    </el-form-item>

-->

    </div>
  </div>
</template>
<script>

    import menu from "@/utils/menu";

    export default {
        data() {
            return {
                rulesForm: {
                    username: "",
                    password: "",
                    role: "",
                    code: '',
                },
                menus: [],
                roleOptions: [],
                tableName: "",
                codes: [{
                    num: 1,
                    color: '#000',
                    rotate: '10deg',
                    size: '16px'
                },{
                    num: 2,
                    color: '#000',
                    rotate: '10deg',
                    size: '16px'
                },{
                    num: 3,
                    color: '#000',
                    rotate: '10deg',
                    size: '16px'
                },{
                    num: 4,
                    color: '#000',
                    rotate: '10deg',
                    size: '16px'
                }],
            };
        },
        mounted() {
            let menus = menu.list();
            this.menus = menus;
            for (let i = 0; i < this.menus.length; i++) {
                if (this.menus[i].hasBackLogin=='是') {
                    let menuItem={};
                    menuItem["key"]=this.menus[i].roleName;
                    menuItem["value"]=this.menus[i].tableName;
                    this.roleOptions.push(menuItem);
                }
            }
        },
        created() {
            this.getRandCode()

        },
        methods: {
            menuChange(role){
            },
            register(tableName){
                this.$storage.set("loginTable", tableName);
                this.$router.push({path:'/register'})
            },
            // 登陆
            login() {
                let code = ''
                for(let i in this.codes) {
                    code += this.codes[i].num
                }
                if ('0' == '1' && !this.rulesForm.code) {
                    this.$message.error("请输入验证码");
                    return;
                }
                if ('0' == '1' && this.rulesForm.code.toLowerCase() != code.toLowerCase()) {
                    this.$message.error("验证码输入有误");
                    this.getRandCode()
                    return;
                }
                if (!this.rulesForm.username) {
                    this.$message.error("请输入用户名");
                    return;
                }
                if (!this.rulesForm.password) {
                    this.$message.error("请输入密码");
                    return;
                }
                if(this.roleOptions.length>1) {
                    console.log("1")
                    if (!this.rulesForm.role) {
                        this.$message.error("请选择角色");
                        return;
                    }
                    let menus = this.menus;
                    for (let i = 0; i < menus.length; i++) {
                        if (menus[i].tableName == this.rulesForm.role) {
                            this.tableName = menus[i].tableName;
                            this.rulesForm.role = menus[i].roleName;
                        }
                    }
                } else {
                    this.tableName = this.roleOptions[0].value;
                    this.rulesForm.role = this.roleOptions[0].key;
                }
                this.$http({
                    url: `${this.tableName}/login?username=${this.rulesForm.username}&password=${this.rulesForm.password}`,
                    method: "post"
                }).then(({ data }) => {
                    if (data && data.code === 0) {
                        this.$storage.set("Token", data.token);
                        this.$storage.set("userId", data.userId);
                        this.$storage.set("role", this.rulesForm.role);
                        this.$storage.set("sessionTable", this.tableName);
                        this.$storage.set("adminName", this.rulesForm.username);
                        this.$router.replace({ path: "/index/" });
                    } else {
                        this.$message.error(data.msg);
                    }
                });
            },
            getRandCode(len = 4){
                this.randomString(len)
            },
            randomString(len = 4) {
                let chars = [
                    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
                    "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
                    "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
                    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                    "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
                    "2", "4", "5", "6", "7", "8", "9"
                ]
                let colors = ["0", "1", "2","2", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]
                let sizes = ['14', '15', '16', '17', '18']

                let output = [];
                for (let i = 0; i < len; i++) {
                    // 随机验证码
                    let key = Math.floor(Math.random()*chars.length)
                    this.codes[i].num = chars[key]
                    // 随机验证码颜色
                    let code = '#'
                    for (let j = 0; j < 6; j++) {
                        let key = Math.floor(Math.random()*colors.length)
                        code += colors[key]
                    }
                    this.codes[i].color = code
                    // 随机验证码方向
                    let rotate = Math.floor(Math.random()*60)
                    let plus = Math.floor(Math.random()*2)
                    if(plus == 1) rotate = '-'+rotate
                    this.codes[i].rotate = 'rotate('+rotate+'deg)'
                    // 随机验证码字体大小
                    let size = Math.floor(Math.random()*sizes.length)
                    this.codes[i].size = sizes[size]+'px'
                }
            },
        }
    };
</script>

演示视频

Java,SpringBoot,Vue智慧校园健康驿站体检

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

持续更新:当前最好用的AI 编程工具,Cursor 编程指南

本文持续更新&#xff0c;敬请期待更多内容。 文章目录 这一次&#xff0c;AI真懂你的代码关注该关注的&#xff0c;忽略该忽略的1. 创建.cursorignore文件2. 重新索引代码库 参考资料 这一次&#xff0c;AI真懂你的代码 如果你偶尔关注一些AI编程相关的内容&#xff0c;想必你…

介绍多环境开发-分组(springboot-profile)

背景 在使用 Spring Boot 进行开发时&#xff0c;多环境配置是一项非常常见的需求。通常&#xff0c;我们会在开发、测试、生产等不同环境下部署同一个应用程序&#xff0c;而这些环境可能需要不同的配置&#xff0c;例如数据库连接、日志级别等。Spring Boot 通过 profile&am…

python交互式命令时如何清除

在交互模式中使用Python&#xff0c;如果要清屏&#xff0c;可以import os&#xff0c;通过os.system()来调用系统命令clear或者cls来实现清屏。 [python] view plain copy print? >>> import os >>> os.system(clear) 但是此时shell中的状态是&#xff1a;…

windows的一些容易忽视的使用记录

文章目录 快捷键更改电脑名字共享文件夹添加新账号&#xff08;本地的&#xff09;更改快捷访问 以下都基于 win 10。 快捷键 win I 直接打开设置。 win R 打开运行栏。这个非常常用。 更改电脑名字 先 win I 打开设置&#xff0c;然后点击系统。 左侧栏拉到最下面&…

Android开发高级篇:MVVM框架与数据双向绑定

在Android开发中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09;架构模式以其高效、简洁的特点&#xff0c;成为越来越多开发者的首选。MVVM不仅实现了界面&#xff08;UI&#xff09;与业务逻辑的分离&#xff0c;还通过数据双向绑定技术&#xff0c;极大地简化…

iterator的使用+求数组中的第n大值+十大经典排序算法

目录 一、iterator的用法 二、求一个数组中的第n大值&#xff08;n为2或者3&#xff09; 1、求一个数组中的第二大值&#xff08;不能使用排序&#xff09; 2、求一个数组中的第三大值&#xff08;不能使用排序&#xff09; 三、冒泡排序 1、基本思想 2、代码实现 3、存…

AQS原理(AbstractQueuedSynchronizer)

本篇为 [并发与多线程系列] 的第四篇&#xff0c;对应Java知识体系脑图中的 并发与多线程 模块。 这一系列将对Java中并发与多线程的内容来展开。 AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09; AQS原理&#xff08;AbstractQueuedSynchronizer&#xff09;AQS整…

java解决跨域问题时的403报错

什么是跨域问题&#xff1f; 当一个请求的url的协议&#xff0c;域名&#xff0c;端口三者之间任意一个与当前页面url不同 即为跨域 问题背景&#xff1a; 如图&#xff0c;前端端口为8090&#xff0c;而后端端口为8099&#xff0c;形成跨域&#xff0c;无法对接 试图利用Spr…

【MySQL面试高频误区】不可重复读和幻读到底有哪些区别?

欢迎关注公众号 【11来了】 &#xff0c;持续 MyBatis 源码系列内容&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址&#xff1a;点击查看文章导读&#xff01; 感谢你的关注&#xff…

zotero使用koofr+google drive/onedrive同步

最早了解到这个思路是来自 知乎-【从零开始使用Zotero】(3) Zotero文献同步方式 和 How to Sync Zotero Files Using WebDAV and Google Drive with Koofr: A Step-by-Step Guide 虽然周围很多人都在用Readpaper这种web端的了&#xff0c;但是经常逛Arxiv而且zotero的web插…

论文翻译 | Language Models are Few-Shot Learners 语言模型是少样本学习者(下)

6 更广泛的影响 语言模型对社会有着广泛的有益应用&#xff0c;包括代码和写作自动补全、语法辅助、游戏叙事生成、提高搜索引擎响应以及回答问题等。但它们也可能有潜在的危害性应用。GPT-3在文本生成质量和适应性方面优于较小的模型&#xff0c;并且增加了区分合成文本与人类…

使用GitLab CI构建持续集成案例

1. 部署GitLab &#xff08;1&#xff09;基础准备 解压软件包并导入镜像&#xff1a; [rootmaster ~]# curl -O http://mirrors.douxuedu.com/competition/Gitlab-CI.tar.gz [rootmaster ~]# tar -zxvf Gitlab-CI.tar.gz [rootmaster ~]# ctr -n k8s.io image import gitla…

408 笔记错题本

数据结构 树 线索二叉树 组成原理 第五章 计组 SISD 一两个指令和数据 不能采用数据并行技术&#xff0c;但是可以采用流水线技术&#xff0c;计组这门课 就是讨论的是SISD这个概念。 SIMD 应用&#xff1a;浮点机、向量处理机、优化for循环。 MISD 这个理论上是不存在…

考研论坛平台|考研论坛小程序系统|基于java和微信小程序的考研论坛平台小程序设计与实现(源码+数据库+文档)

考研论坛平台小程序 目录 基于java和微信小程序的考研论坛平台小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂…

华为资源分享

紫光云文档中心提供弹性计算服务文档https://www.unicloud.com/document/product/ElasticComputeService/index.html报文格式华为报文格式资料Info-Finder&#xff08;在线工具&#xff09; 报文格式华为IP网络电子书华为IP网络相关电子书IP网络系列丛书 - 华为企业业务华为产品…

[云] DockerCoins 练习笔记

DockerCoins DockerCoins 由 5 个服务组成 rng (随机数生成器): 这是一个Web服务&#xff0c;它的任务是生成随机字节。随机字节通常用于加密、安全令牌生成、测试等场景。 hasher (哈希计算器): 这个服务接收数据&#xff08;通常是通过POST请求发送的数据&#xff09;&#…

202408第十五届蓝桥杯青少组省赛C++中级组题解

202408第十五届蓝桥杯青少组省赛C++中级组题解 单选题 1、定义 char a[]="hello\nworld",执行 cout<<a,输出结果是(B) A、helloworld B、hello world C、 hellonworld D、 hello\nworld 解析:\n输出时会换行。 2、 的结果是(C)。 A、 B、

商城网站建设怎么建

商城网站已经成为企业迅速拓展市场、提升品牌形象的重要利器。随着互联网技术的飞速发展&#xff0c;传统的实体店面已经不能满足消费者多样化的购物需求。因此&#xff0c;搭建一个功能强大、用户友好的商城网站成为企业不可或缺的一环。 首先&#xff0c;商城网站的建设需要具…

OpenCAEPoro安装与测试(ASC 2024)

首先简单总结一下经验&#xff1a; 在之前的测试和学习中&#xff0c;由于自己是虚拟机或者云服务器&#xff0c;有root权限&#xff0c;经常无脑增删文件&#xff08;主要是为了图省事&#xff0c;看见报错就加回来&#xff0c;多出来就删除&#xff09;&#xff0c;但是在经…

D 咖饮品机闪耀荆州动漫嘉年华

在今年的国庆佳节&#xff0c;恰逢金秋时节&#xff0c;荆州动漫嘉年华盛大开幕&#xff0c;这场充满活力与创意的盛会吸引了无数动漫爱好者的目光。而在众多精彩的展示中&#xff0c;D 咖饮品机的出现无疑为这场嘉年华增添了一抹别样的色彩。 走进嘉年华现场&#xff0c;热闹的…