基于springboot vue 高校学生健康打卡系统

博主介绍:专注于Java vue  .net  php phython  小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
更多项目地址 介绍 qq_251836457-CSDN博客
下方有源码获取地址

系统实现抢先看

    1. 功能需求分析

在系统开发设计前,应该对功能做初步设想,清楚这个管理系统有什么板块,每个板块有什么功能,整体的设计是否满足使用者的需求,接着对所开发的系统功能进行的详细分析总结,从而设计出完整的系统并将其实现。用户和开发人员的交流分析,使其达到最佳理解程度,使系统功能达到最佳。

学生后台功能图如下所示。

图3-1 学生后台功能图

管理员后台功能图如下所示。

图3-2 管理员用例图

教师后台功能图如下所示。

图3-3 教师后台功能图

高校学生健康打卡系统在对需求做解析后,整个系统主要分为三个部分:管理员、教师和学生,每个模块下的分支功能不一样。对功能做出如下说明:

学生模块:

账号登录认证。

管理个人资料信息,修改可修改的信息项。

每日安排(健康打卡、请假、日记)添加和查询已有安排的记录。

教师模块:

个人资料管理,修改删除自己的信息。

学生的添加与查询、每日安排的查询、健康打卡的查询、请假管理的查询与审核请假、日记管理的查询及删除、通知公告的查询、日记统计的查看。

管理员模块:

系统用户的管理,管理和添加删除管理员,可以设置登录权限,或者删除所有用户账号。

教师管理,添加教师的具体信息与查询教师同时也具备删除教师。

通知管理,添加发布公告查询公告和删除公告的功能。

学生管理,查询学生的信息,也具备修改和删除功能。

每日安排管理,查询学生安排的信息,也具备修改和删除功能。

健康打卡管理,查询学生打卡的信息,也具备修改和删除功能。

请假管理,查询学生请假的信息,也具备修改和删除功能。

日记管理,查询学生日记的信息,也具备修改和删除功能。

日记统计,查询统计视图。

系统管理,系统的备份功能。

非功能需求分析

系统非功能需求有非常多,比如性能需求、可承载最大用户数、稳定性、易用性需求等。本系统分析时考虑到易用性需求,因为系统是给人使用的,所以必须充分从用户的角度出发,考虑用户体验,使系统易理解易上手易操作。

    1. 数据流程分析

零层数据流程图包括了登录、用户功能和检索维护等模块,在登录模块使用到的数据存储有用户账户文档,用户功能模块需要的存储是用户各功能模块数据文档,检索维护是使用以上这些数据文档通过关键词进行检索。

系统的零层数据流图如下图所示。

图3-2系统数据流图(零层)

一层数据流程图是对零层数据流程图的细化,将登录细分为填制登录数据和完善数据,用户功能细分为用户基本功能和用户主要功能。

系统的一层数据流图如下图所示。

图3-3系统数据流图(一层)

  1. 系统设计
    1. 系统架构设计

目前B/S体系的系统主要的数据访问方式是:通过浏览器页面用户可以进入系统,系统可以自动对用户向服务器发送的请求进行处理,处理请求是在系统后台中进行的,用户在浏览器页面上进行相应操作,就能够看到服务端传递的处理结果。高校学生健康打卡系统主要分为视图-模型-控制三层架构设计。在视图层中,主要是操作在服务器端向客户端反馈并显示的数据,在模型层中,主要处理相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的传递。

系统架构图如下图所示。

图4-1系统架构图

    1. 系统功能结构

系统设计的目的是分析系统包括的所有功能结构,为开发人员设计开发和实现系统做好准备工作。经过前期的需求调查、分析和整理之后,确定的总体需求主要包括多个模块,分别是:系统用户管理、教师管理、通知公告管理、班级管理、学生管理、每日安排原来管理、健康打卡管理、请假管理、日记管理、日记统计、数据备份。系统整体角色分为三个部分,一是学生、二是教师、最后是管理员。权限分布也是很明显,普通用户是在除去浏览信息之外还具有查询和管理自己账户信息、教师资料修改、每日安排查询、健康打卡查询、请假查询、日记查询、通知公告查询、日记统计查询等权限;管理员是最高权限拥有者。

系统功能结构图如下图所示。

图4-2系统功能结构图

    1. 功能模块设计

用户管理模块

该模块是为所有用户登录设计的,如学生用户这种普通用户登录后只能进行自己的普通功能操作(如个人信息修改),管理员和超级管理员登录后有不同的权限,管理员不能超越权限。超级管理员能对整个系统的数据进行管理,主要是用户的登录权限以及用户登录后在系统里的操作权限。

每日安排模块

学生和安排存在关系为一对多,根据每日安排来将安排数据传入到系统数据中,操作人为教师用户,然后生成每日安排列表,学生可查看个人历史安排列表每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。

健康打卡模块

学生来录如打卡数据,点击打卡按钮,依次填写要录入的打卡个人状态信息数据,身体状态信息点击提交按钮,将数据提交至数据库,然后刷打卡数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。

请假模块

学生录入请假数据,点击请假录入按钮,依次填写要录入的请假信息数据,点击提交按钮,将数据提交至数据库,然后刷新请假数据页面,每条数据右边有删除和编辑按钮,来完成相应的删除和更新功能。

日记模块

学生点击日记管理菜单,点击添日记,添加心情,日记内容提交成功后,公告数据页面刷新,新数据成功载入页面。

    1. 数据库设计
      1. 概念模型

对于一个要开发的系统来说,E-R图可以让别人能更快更轻松的了解此系统的事务及它们之间的关系。根据系统分析阶段所得出的结论确定了在高校学生健康打卡系统中存在着多个实体分别是用每日安排、健康打卡、请假、日记、学生、教师。

系统总体ER图如下图所示。

图4-4系统总体ER图

      1. 关系模型

管理员(管理员id、用户名、密码、权限)

教师管理(教师工号、密码、教师姓名、性别、身份证、电话、职称、助教课程、照片)

通知公告(标题、内容、附件、发布人)

学生管理(学号、密码、姓名、性别、身份证、电话、院系、班级、照片、教师工号、添加时间)修改删除详情。

每日安排管理(学号、学生姓名、班级、院系、教师工号添加时间)修改删除详情。

健康打卡管理(学号、学生姓名、班级、院系、教师工号、个人状态、身体状态、当前地址、添加时间)修改删除详情。

请假管理(请假单号、请假类型、请假开始时间、请假结束时间、是否离校、相关凭证、学号、姓名、班级、院系、教师工号、添加时间、)修改删除详情。

日记管理(学号、学生姓名、班级、院系、教师工号、心情、添加时间)修改删除详情。

      1. 数据表

数据库逻辑结构就是将E-R图在数据库中用具体的字段进行描述。用字段和数据类型描述来使对象特征实体化,最后形成具有一定逻辑关系的数据库表结构。高校学生健康打卡系统所需要的部分数据结构表如下表所示。

class_management

字段名称

类型

长度

不是null

主键

字段说明

class_management_id

int

11

主键

班级管理ID

class_name

varchar

64

班级名称

headmaster

varchar

64

班主任

contact_number

varchar

64

联系电话

class_size

int

11

班级人数

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

daily_schedule

字段名称

类型

长度

不是null

主键

字段说明

daily_schedule_id

int

11

主键

每日安排ID

student_number

int

11

学号

student_name

varchar

64

学生姓名

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

class_name

varchar

64

班级名称

record_date

date

0

记录日期

schedule

text

0

时间安排

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

epidemic_reporting

字段名称

类型

长度

不是null

主键

字段说明

epidemic_reporting_id

int

11

主键

疫情上报ID

student_number

int

11

学号

student_name

varchar

64

学生姓名

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

class_name

varchar

64

班级名称

report_type

varchar

64

上报类型

nucleic_acid_results

varchar

64

核酸结果

detection_time

datetime

0

检测时间

health_code

varchar

255

健康码

remarks

text

0

备注

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

notice_announcement

字段名称

类型

长度

不是null

主键

字段说明

notice_announcement_id

int

11

主键

通知公告ID

title

varchar

64

标题

relevant_attachments

varchar

255

相关附件

publisher

varchar

64

发布人

release_date

date

0

发布日期

content

text

0

内容

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

punch_in_every_day

字段名称

类型

长度

不是null

主键

字段说明

punch_in_every_day_id

int

11

主键

每日打卡ID

student_number

int

11

学号

student_name

varchar

64

学生姓名

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

class_name

varchar

64

班级名称

record_date

date

0

记录日期

today_temperature

varchar

64

今日体温

physical_state

varchar

64

身体状态

punch_in_address

varchar

64

打卡地址

health_code

varchar

255

健康码

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

student

字段名称

类型

长度

不是null

主键

字段说明

student_id

int

11

主键

学生ID

student_number

varchar

64

学号

student_name

varchar

64

学生姓名

class_name

varchar

64

班级名称

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

student_diary

字段名称

类型

长度

不是null

主键

字段说明

student_diary_id

int

11

主键

学生日记ID

student_number

int

11

学号

student_name

varchar

64

学生姓名

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

class_name

varchar

64

班级名称

mood

varchar

64

心情

date

date

0

日期

content

longtext

0

内容

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

students_ask_for_leave

字段名称

类型

长度

不是null

主键

字段说明

students_ask_for_leave_id

int

11

主键

学生请假ID

student_number

int

11

学号

student_name

varchar

64

学生姓名

teacher_job_number

int

11

教师工号

teacher_name

varchar

64

教师姓名

class_name

varchar

64

班级名称

leave_type

varchar

64

请假类型

leave_days

int

11

请假天数

start_time

datetime

0

开始时间

end_time

datetime

0

结束时间

relevant_vouchers

varchar

255

相关凭证

reason_for_leave

text

0

请假原因

examine_state

varchar

16

审核状态

examine_reply

varchar

255

审核回复

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

teacher

字段名称

类型

长度

不是null

主键

字段说明

teacher_id

int

11

主键

教师ID

teacher_job_number

varchar

64

教师工号

teacher_name

varchar

64

教师姓名

examine_state

varchar

16

审核状态

recommend

int

11

智能推荐

user_id

int

11

用户ID

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

  1. 系统实现
    1. 登录模块的实现

系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。

登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。

用户登录模块的IPO如下所示:

输入:用户名和密码。

处理:

1)检测用户输入的账号、密码是否正确及在数据库已对应存在。

2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。

3)根据用户名,将其显示在系统首页上。

输出:是否成功的信息。

登录流程图如下所示。

图5-1登录流程图

系统登录界面如下所示。

图5-2系统登录界面

5.2用户子系统模块的实现

5.2.1  用户首页模块

系统呈现出一种简洁大方的首页:界面简约、鳞次栉比,用户能轻车熟路的使用。出于对系统使用群体广泛的顾虑,应有良好性能的后台。

如下图所示为系统的首页界面。

图5-3系统首页界面

5.2.2每日安排模块

每日安排学生编辑学号、教师工号、教师姓名、班级名称、学生账号、学生姓名、记录日期等内容,并可根据需要进行修改、删除等操作。如图5-4所示。

图5-4每日安排界面图

5.2.3每日打卡模块

每日打卡学生编辑学号、教师工号、教师姓名、班级名称、学生账号、学生姓名、记录日期、今日体温等内容,并可根据需要进行修改、删除等操作。如图5-5所示。

图5-5每日打卡录入界面如图

5.2.4学生请假模块

学生请假学生编辑学号、教师工号、教师姓名、班级名称、学生账号、学生姓名、请假类型、请假天数等内容,并可根据需要进行修改、删除等操作。如图5-6所示。

图5-6学生请假申请界面

5.3管理员子系统模块的实现

5.3.1学生管理模块

学生在yhzhgl查看学生信息,先使用sql语句查询出所有学生表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用jsp得到每个ArrayList对象的数据,在jsp页面中解析ArrayList对象,得到其各个键值对的值。

学生管理界面如下图所示。

图5-7学生管理界面

5.3.2每日安排管理模块

添加安排信息时,输入必填字段后,表现层的KechengController接受传过来的安排信息参数,再调用KechengController类的addKecheng方法,经过KechengService业务层到KechengMapper持久层的处理,完成对整个添加安排信息的操作。addKecheng方法也和用户管理中的addUser方法类似,同时做添加和修改工作。

修改安排信息时,选择需要修改的安排进行修改,调用KechengController控制器的editKecheng方法,拿到该安排原本的信息并显示到页面,管理员再对需要修改的安排信息字段进行修改,完成后调用addKecheng方法,调用业务层的updateByKey方法,更新数据库的安排信息表的数据。

每日安排管理流程图如下所示。

图5-8每日安排管理流程图

主要代码:

<template>
	<el-main class="bg">
		<el-form label-position="right" :model="query" class="form p_4" label-width="120">
			<el-row>
				<el-col :xs="24" :sm="24" :lg="8">
					<el-form-item label="学生姓名">
						<el-input v-model="query.student_name"></el-input>
					</el-form-item>
				</el-col>
				<el-col :xs="24" :sm="24" :lg="8">
					<el-form-item label="教师姓名">
						<el-input v-model="query.teacher_name"></el-input>
					</el-form-item>
				</el-col>
				<el-col :xs="24" :sm="24" :lg="8">
					<el-form-item label="班级名称">
						<el-input v-model="query.class_name"></el-input>
					</el-form-item>
				</el-col>
				<el-col :xs="24" :sm="24" :lg="8">
					<el-form-item label="上报类型">
						<el-select v-model="query.report_type">
                            <el-option v-for="o in list_report_type" :key="o" :label="o"
                            	:value="o">
                            </el-option>
						</el-select>
					</el-form-item>
				</el-col>
				<el-col :xs="24" :sm="24" :lg="8">
					<el-form-item label="核酸结果">
						<el-select v-model="query.nucleic_acid_results">
                            <el-option v-for="o in list_nucleic_acid_results" :key="o" :label="o"
                            	:value="o">
                            </el-option>
						</el-select>
					</el-form-item>
				</el-col>

				<el-col :xs="24" :sm="10" :lg="8">
					<el-form-item>
						<el-button type="primary" @click="search()">查询</el-button>
						<el-button @click="reset()" style="margin-right: 74px;">重置</el-button>
						<router-link v-if="user_group == '管理员' || $check_action('/epidemic_reporting/table','add') || $check_action('/epidemic_reporting/view','add')" class="el-button el-button--default el-button--primary" to="./view?">添加
						</router-link>
						<el-button v-if="user_group == '管理员' || $check_action('/epidemic_reporting/table','del') || $check_action('/epidemic_reporting/view','del')" class="" type="danger" @click="delInfo()">删除</el-button>
					</el-form-item>
				</el-col>

			</el-row>
		</el-form>
		<el-table :data="list" @selection-change="selectionChange" @sort-change="$sortChange" style="width: 100%" id="dataTable">
			<el-table-column fixed type="selection" tooltip-effect="dark" width="55">
			</el-table-column>
			<el-table-column prop="student_number" label="学号"
				v-if="user_group == '管理员' || $check_field('get','student_number')" min-width="200">
				<template slot-scope="scope">
					{{ get_user_student_number(scope.row['student_number']) }}
				</template>
			</el-table-column>
			<el-table-column prop="student_name" label="学生姓名"
				v-if="user_group == '管理员' || $check_field('get','student_name')" min-width="200">
			</el-table-column>
			<el-table-column prop="teacher_job_number" label="教师工号"
				v-if="user_group == '管理员' || $check_field('get','teacher_job_number')" min-width="200">
				<template slot-scope="scope">
					{{ get_user_teacher_job_number(scope.row['teacher_job_number']) }}
				</template>
			</el-table-column>
			<el-table-column prop="teacher_name" label="教师姓名"
				v-if="user_group == '管理员' || $check_field('get','teacher_name')" min-width="200">
			</el-table-column>
			<el-table-column prop="class_name" label="班级名称"
				v-if="user_group == '管理员' || $check_field('get','class_name')" min-width="200">
			</el-table-column>
			<el-table-column prop="report_type" label="上报类型"
				v-if="user_group == '管理员' || $check_field('get','report_type')" min-width="200">
			</el-table-column>
			<el-table-column prop="nucleic_acid_results" label="核酸结果"
				v-if="user_group == '管理员' || $check_field('get','nucleic_acid_results')" min-width="200">
			</el-table-column>
			<el-table-column prop="detection_time" label="检测时间"
				v-if="user_group == '管理员' || $check_field('get','detection_time')" min-width="200">
				<template slot-scope="scope">
					{{ $toTime(scope.row["detection_time"],"yyyy-MM-dd hh:mm:ss") }}
				</template>
			</el-table-column>
			<el-table-column prop="health_code" label="健康码"
				v-if="user_group == '管理员' || $check_field('get','health_code')" min-width="200">
				<template slot-scope="scope">
					<el-image style="width: 100px; height: 100px" :src="$fullUrl(scope.row['health_code'])"
						:preview-src-list="[$fullUrl(scope.row['health_code'])]">
						<div slot="error" class="image-slot">
							<img src="../../../public/img/error.png" style="width: 90px; height: 90px" />
						</div>
					</el-image>
				</template>
			</el-table-column>
			<el-table-column prop="remarks" label="备注"
				v-if="user_group == '管理员' || $check_field('get','remarks')" min-width="200">
			</el-table-column>

            <el-table-column sortable prop="create_time" label="创建时间" min-width="200">
                <template slot-scope="scope">
                	{{ $toTime(scope.row["create_time"],"yyyy-MM-dd hh:mm:ss") }}
                </template>
            </el-table-column>

			<el-table-column sortable prop="update_time" label="更新时间" min-width="200">
                <template slot-scope="scope">
                	{{ $toTime(scope.row["update_time"],"yyyy-MM-dd hh:mm:ss") }}
                </template>
			</el-table-column>
			<el-table-column fixed="right" label="操作" min-width="120" v-if="user_group == '管理员' || $check_action('/epidemic_reporting/table','set') || $check_action('/epidemic_reporting/view','set') || $check_action('/epidemic_reporting/view','get') || $check_action('//table','add') || $check_action('//view','add')" >


				<template slot-scope="scope">
					<router-link class="el-button el-button--small is-plain el-button--success" style="margin: 5px !important;"
					v-if="user_group == '管理员' || $check_action('/epidemic_reporting/table','set') || $check_action('/epidemic_reporting/view','set') || $check_action('/epidemic_reporting/view','get')"
						:to="'./view?' + field + '=' + scope.row[field]"
						 size="small">
						<span>编辑</span>
					</router-link>
				</template>
			</el-table-column>

		</el-table>

		<!-- 分页器 -->
		<div class="mt text_center">
			<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
				:current-page="query.page" :page-sizes="[7, 10, 30, 100]" :page-size="query.size"
				layout="total, sizes, prev, pager, next, jumper" :total="count">
			</el-pagination>
		</div>
		<!-- /分页器 -->

		<div class="modal_wrap" v-if="showModal">
			<div class="modal_box">
				<!-- <div class="modal_box_close" @click="closeModal">X</div> -->
				<p class="modal_box_title">重要提醒</p>
				<p class="modal_box_text">当前有数据达到预警值!</p>
				<div class="btn_box">
					<span @click="closeModal">取消</span>
					<span @click="closeModal">确定</span>
				</div>
			</div>
		</div>


	</el-main>
</template>
<script>
	import mixin from "@/mixins/page.js";

	export default {
		mixins: [mixin],
		data() {
			return {
				// 弹框
				showModal: false,
				// 获取数据地址
				url_get_list: "~/api/epidemic_reporting/get_list?like=0",
				url_del: "~/api/epidemic_reporting/del?",

				// 字段ID
				field: "epidemic_reporting_id",

				// 查询
				query: {
					"size": 7,
					"page": 1,
					"student_name": "",
					"teacher_name": "",
					"class_name": "",
					"report_type": "",
					"nucleic_acid_results": "",
					"login_time": "",
					"create_time": "",
					"orderby": `create_time desc`
				},
				// 数据
				list: [],
				// 用户列表
				list_user_student_number: [],
				// 用户列表
				list_user_teacher_job_number: [],
				// 上报类型列表
				list_report_type: ['确诊病例','密切接触者','无症状患者','其他'],
				// 核酸结果列表
				list_nucleic_acid_results: ['阴性','阳性'],
			}
		},
		methods: {
			// 关闭弹框
			closeModal(){
				this.showModal = false;
				},
			get_list_before(param){
				var user_group = this.user.user_group;
				if(user_group != "管理员"){
					switch(user_group){
						case "学生":
						param["student_number"] = this.user.user_id;
						break;
						case "教师":
						param["teacher_job_number"] = this.user.user_id;
						break;
					}
				}
				return param;
			},

			open_tip() {
				const h = this.$createElement;

				var message = "";
				var list = this.list;

				var ifs = [ ];
				for (var n = 0; n < ifs.length; n++) {
					var o = ifs[n];
					for (var i = 0; i < list.length; i++) {
						var lt = list[i];
						if (o.type == "数内") {
							if ((o.start || o.start === 0) && (o.end || o.end === 0)) {
								if (lt[o.factor] > o.start && lt[o.factor] < o.end) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.start || o.start === 0) {
								if (lt[o.factor] > o.start) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.end || o.end === 0) {
								if (lt[o.factor] < o.end) {
									o["idx"] = o["idx"] + 1;
								}
							}
						} else if (o.type == "数外") {
							if ((o.start || o.start === 0) && (o.end || o.end === 0)) {
								if (lt[o.factor] < o.start || lt[o.factor] > o.end) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.start || o.start === 0) {
								if (lt[o.factor] < o.start) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.end || o.end === 0) {
								if (lt[o.factor] > o.end) {
									o["idx"] = o["idx"] + 1;
								}
							}
						} else if (o.type == "日内") {
							if ((o.start) && (o.end)) {
								if (lt[o.factor] > o.start && lt[o.factor] < o.end) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.start) {
								if (lt[o.factor] < o.start) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.end) {
								if (lt[o.factor] > o.end) {
									o["idx"] = o["idx"] + 1;
								}
							}
						} else if (o.type == "日外") {
							if (o.start && o.end) {
								if (lt[o.factor] < o.start || lt[o.factor] > o.end) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.start) {
								if (lt[o.factor] < o.start) {
									o["idx"] = o["idx"] + 1;
								}
							} else if (o.end) {
								if (lt[o.factor] > o.end) {
									o["idx"] = o["idx"] + 1;
								}
							}
						}
					}

					if (o["idx"]) {
						message += o.title;
						if (o["type"] == "数内") {
							if (o.start || o.start === 0) {
								message += "大于" + o.start;
							}
							if ((o.start || o.start === 0) && (o.end || o.end === 0)) {
								message += "并且";
							}
							if (o.end || o.end === 0) {
								message += "小于" + o.end;
							}
						} else if (o["type"] == "数外") {
							if (o.start || o.start === 0) {
								message += "小于" + o.start;
							}
							if ((o.start || o.start === 0) || (o.end || o.end === 0)) {
								message += "或者";
							}
							if (o.end || o.end === 0) {
								message += "大于" + o.end;
							}
						} else if (o["type"] == "日内") {
							if (o.start) {
								message += "在" + o.start + "之后";
							}
							if (o.start && o.end) {
								message += "并且";
							}
							if (o.end) {
								message += "在" + o.end + "之前";
							}
						} else if (o["type"] == "日外") {
							if (o.start) {
								message += "在" + o.start + "之前";
							}
							if (o.start || o.end) {
								message += "或者";
							}
							if (o.end) {
								message += "在" + o.end + "之后";
							}
						}
						message += "的有" + o["idx"] + "条";
					}
				}

				if (message) {
					message += ",需要处理、请尽快处理。";
					this.showModal = true;
					// this.$notify({
					// 	title: '提醒',
					// 	dangerouslyUseHTMLString: true,
					// 	message: h('i', {
					// 		style: 'color: teal'
					// 	}, message)
					// });
				}
			},
			/**
			 * 获取学生用户列表
			 */
			async get_list_user_student_number() {
				var json = await this.$get("~/api/user/get_list?user_group=学生");
				if(json.result && json.result.list){
					this.list_user_student_number = json.result.list;
				}
				else if(json.error){
					console.error(json.error);
				}
			},

			get_user_student_number(id){
				var obj = this.list_user_student_number.getObj({"user_id":id});
				var ret = "";
				if(obj){
					ret = obj.nickname+"-"+obj.username;
					// if(obj.nickname){
					// 	ret = obj.nickname;
					// }
					// else{
					// 	ret = obj.username;
					// }
				}
				return ret;
			},
			/**
			 * 获取教师用户列表
			 */
			async get_list_user_teacher_job_number() {
				var json = await this.$get("~/api/user/get_list?user_group=教师");
				if(json.result && json.result.list){
					this.list_user_teacher_job_number = json.result.list;
				}
				else if(json.error){
					console.error(json.error);
				}
			},

			get_user_teacher_job_number(id){
				var obj = this.list_user_teacher_job_number.getObj({"user_id":id});
				var ret = "";
				if(obj){
					ret = obj.nickname+"-"+obj.username;
					// if(obj.nickname){
					// 	ret = obj.nickname;
					// }
					// else{
					// 	ret = obj.username;
					// }
				}
				return ret;
			},
			deleteRow(index, rows) {
				rows.splice(index, 1);
			}

		},
		created() {
			this.get_list_user_student_number();
			this.get_list_user_teacher_job_number();
			setTimeout(() => {
				this.open_tip();
			}, 1000)
		}
	}
</script>

<style type="text/css">
	.bg {
		background: white;
	}

	.form.p_4 {
		padding: 1rem;
	}

	.form .el-input {
		width: initial;
	}

	.mt {
		margin-top: 1rem;
	}

	.text_center {
		text-align: center;
	}

	.float-right {
		float: right;
	}


	.modal_wrap{
		width: 100vw;
		height: 100vh;
		position: fixed;
		top: 0;
		left: 0;
		background: rgba(0,0,0,0.5);
		z-index: 9999999999;
	}
	.modal_wrap .modal_box{
		width: 400px;
		height: 200px;
		background: url("../../assets/modal_bg.jpg") no-repeat center;
		background-size: cover;
		position: absolute;
		top: 50%;
		left: 50%;
		margin-left: -200px;
		margin-top: -100px;
		border-radius: 10px;
		}
	.modal_wrap .modal_box .modal_box_close{
		font-size: 20px;
		position: absolute;
		top: 10px;
		right: 10px;
		cursor: pointer;
		}
	.modal_wrap .modal_box .modal_box_title{
	  text-align: center;
    font-size: 18px;
    margin: 16px auto;
    color: #fff;
    border-bottom: 1px solid rgba(117, 116, 116,0.5);
    padding-bottom: 16px;
    width: 356px;
		}
	.modal_wrap .modal_box .modal_box_text{
			text-align: center;
		font-size: 15px;
		color: #fff;
		margin-top: 25px;
		}
	.modal_wrap .modal_box .btn_box{
		display: flex;
		flex-direction: row;
		justify-content: center;
		margin-top: 42px;
		}
			.modal_wrap .modal_box .btn_box span{
				display: inline-block;
				width: 80px;
				height: 30px;
				line-height: 30px;
				text-align: center;
				border: 1px solid #ccc;
				font-size: 14px;
				cursor: pointer;
				color: #fff;
			}
	.modal_wrap .modal_box .btn_box span:nth-child(2){
		background: #409EFF;
		color: #fff;
		border-color: #409EFF;
		margin-left: 15px;
	}
</style>

每日安排界面如下图所示。

图5-9每日安排添加界面

源码下载获取地址

【计算机程序设计源码】(springboot+mysql)高校学生健康打卡系统.zip资源-CSDN文库


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翰文编程

你的鼓励 是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值