如何使用ssm实现毕业管理系统+vue

190 篇文章 0 订阅
136 篇文章 0 订阅

@TOC

ssm053毕业论文管理系统+vue

绪论

1.1 研究背景

我国经济的发展,我国学校越来越多,人们越来越重视学历,接受高等教育的学生越来越多,每年都有大量的大学生完成学业,在毕业之际,毕业论文是学校对大学生的重要审核。学校在学生毕业论文管理方面负担越来越重,在这样的情况下急需开发一套毕业论文管理系统。毕业论文管理系统能够提高学校毕业论文管理效率,备受学校的喜爱。

随着计算机网络在日常生工作中的广泛应用以及全国各地院校的校园网络办公平台容易健全,计算机网络办公模式将会逐步取代传统办公模式,为人们的工作生活带来了极大的便利。毕业论文作为高校大四学生四年学习生涯中关键的一步,也应该采用计算机的网络化管理模式,不仅减轻了毕业论文选题、指导、成绩等环节步骤,也极大的减少了许多繁琐的过程。因此,开发一个毕业论文管理系统对学校毕业论文进行规范化管理就显得格外必要和重要。它不但是实现教学管理现代化和网络化的一个重要手段,同时也是促进传统教学模式改革的一个方法。对于改进教学管理,提高教学质量具有十分重要的意义和较大的实用价值。

本毕业论文管理系统能够大大提高学校的毕业论文管理效率,促进学校的可持续发展,具有广阔的发展空间。

1.2 设计原则

在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:

(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。

(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。

(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。

(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。

(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。

1.3 研究组织结构

第一章主要是简单的介绍下设计本网站的研究背景和设计原则,在这一章里主要是让大家了解下我的设计的前因后果,为接下来我的其它章节做铺垫。

第二章主要是介绍在设计过程中所涉及到的技术。

第三章主要是介绍下设计这个网站所需要的需求以及我们的功能需求分析,因为只有更好的分析清楚我们的功能需求才能更好的完成我们的设计。

第四章网站系统设计,主要介绍了网站结构的设计以及展示了数据库E-R图设计,这一章主要是为了能让大家更好的了解网站的一些基本设计信息。

第五章系统的实现,介绍了系统每个模块的设计与实现,让大家能清晰的了解系统的主要功能。

第六章系统的测试,这章主要是测试下各个部分每个功能是否能用,看下是否有错误。

5

2 关键技术简介

2.1 JSP技术

JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件(*)。htm,*。Html)。

JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行,正因为JSP参照了许多编程语言的特性,使得JSP在web的脚本技术当中也占有一定的重要位置,对于刚入门编程行业的初学者来讲,jsp这种编程语言不仅容易学习,而且还具备许多高级的特性。在程序的开发过程中,使用jsp也不失为一种正确的选择,像表单数据的收集操作以及字符串信息的处理方面等等,jsp都能很轻松地解决,帮助程序开发者省下许多时间,JSP 新版本的发布,标志着一个全新的JSP时代的到来,它最大的特点就是引入了面向对象的全部机制,并保留了向下的兼容性。综上所述,使用JSP,可以自由的选择操作系统、Web服务器以及合适的数据库管理系统。同时,设计开发时,有两种选择,一种是面向过程,另一种是面向对象,或者也可以两种都使用,可以称为混和方式设计。

JSP的优点:编写一次,始终运行。还有jsp可以延展可以缩短的强大优势,还有就是支持多种开发语言并且兼容性好,适用于很多平台顺利运行。

2.2 MYSQL数据库

在数据库方面采用当前主流的MySQL数据库,MySQL具有开放性,它是一种关系型数据库管理系统,并且它的源代码可以被大众所熟知。由于MySQL是开放源代码的,因此,只要经过授权就可以在自己需求的基础上对其进行修改。MySQL因为其固有的特点而备受关注,它具有很强的适应性,并且十分可靠,查询速度快。MySQL安装起来非常方便,且数据存储量大,不需要事务化处理。Sql语言拥有很多的方法,在项目中编写sql语句时使用起来是非常方便的,不会像其他语言那样需要编写更多的语句。正因为MySQL使用sql语言进行数据库管理,所以它收到了大多数程序员的热爱。

2.3 B/S结构

Browse/Sever(浏览器/服务器)架构,是一种基于互联网系统的所开发的一种架构,是在C/S架构上进行完善开发的一种架构,它主要用于Web和移动端的软件开发。它的方便在于用户只需要在浏览器上连接部署上用户所需的数据库便可在浏览器浏览用户所需的数据。

从逻辑上B/S架构可以分为三层结构体系,客户机层浏览器,Web层和DB服务器层。客户机层可以将用户所需要的数据信息通过后端数据库数据模块的读取,显示到用户的客户层浏览器中。Web层主要是实现浏览器上的功能,来分析处理数据进行端口的对接。可以访问COM,ADO等对象。DB服务器层是整个B/S框架的核心,为其他技术提供数据库的支持,并对各种数据库进行更新,删除,添加,查询等功能。

B/S架构这种只需要用户在浏览器上运行不需要再下载客户端的模式,使用浏览器就可以实现和下载客户端的一样复杂的功能。给管理系统的用户带来了很大的方便,节约了大量的成本。现在B/S架构已经在Web开发上被广泛运用,它的基础内容也在不断的完善更新。

图2-1 B/S模式三层结构图

2.4 JAVA技术

Java是一门伟大的程序设计语言[5]。Java使得Web网页可以表现精彩和互动的多媒体内容,促进了Web的蓬勃发展[7]。之后随着Web的发展,应用Web成为大型应用所要求的主流方式,Java凭借其“一次编译,到处运行”的特性很好地支持了互联网应用所要求的跨平台能力,成为服务器端开发的主流语言[5]

Java语言是应用很广泛的语言,用它编写出的程序十分可靠安全,并且可以在任何系统平台运行。java在线程机制上也是十分简便,其多线程的机制可以在某一时间内同时执行多个任务不会出现中断,巧妙使用这一特性可以让程序具有更好的实时行为和交互性。

3 系统分析

3.1 可行性分析

通过对本毕业论文管理系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、操作可行性、经济可行性和时间可行性四方面进行分析。

3.1.1技术可行性

本系统运用SSM框架,结构清晰明了,网页采用的是JSP进行开发,相比Html更适合。系统使用Java语言编写,JAVA语言有着庞大的用户以及学习群体。数据库采用MySQL。这些都是比较基础,使用较为广泛的技术,因此具有技术可行性。

3.1.2 经济可行性

由于自己本身就是学生,还没有正式参加工作,金钱上面一直都处于缺乏状态。所以在开发程序过程中,我是不会花太多经济成本在上面的。针对开发软件和数据库,还有界面设计的photoshop软件等在百度上面就可以直接下载,然后根据各种安装视频进行安装,这些资源都是免费的,程序编码阶段使用的源代码在百度上面可以轻松获得,在有网络的环境下就能下载下来,不需要支付任何费用,经济成本很低。

3.1.3 操作可行性

本人自己就是学生,程序开发经验不足,在界面设计上面不会设计太复杂,要讲究简单好看,操作上要方便,不能让用户觉得不流畅。用户一旦进入操作界面,界面上就会有相应提示,跟着操作提示就可以找到对应的功能操作模块,对于用户来说免培训就能使用。本毕业论文管理系统的界面简单易操作,用户只要平时有在用过电脑,都能进行访问和操作,系统具有易操作、易管理、交互性好的特点,在操作上是非常简单的。所以系统在操作上具有很高的可行性。

3.1.4 时间可行性

从时间上看,在三个月的时间里学习相关知识,开发本毕业论文管理系统,时间上是有点紧,但是不是不可能实现,在做毕业设计的这几个月里,我通过努力使得功能应该基本可以实现。

从上面几个部分的可行性分析得出,这次开发的毕业论文管理系统在开发上面没有什么大问题,值得开发。

3.2 系统性能分析

(1)系统的存储性:因为是毕业论文管理系统,所以就会在数据库要求上比较严格,信息录入的比较多,而且丰富复杂, 这就需要一个强大的数据库来存放更多的数据和保证数据的时时性。

(2)系统的易学性:系统设计的应该简单易学的,设计的各种功能应该简单操作,不需要努力学习培训,缩短用户熟悉系统的进程。

(3)系统的数据要求:数据应该录入准确,需要更新时,数据应该可以及时的修改,数据还应该有独立保存,不能删除数据的时候会连带着把还需要的数据都删除掉。

(4)系统稳定性:开发的毕业论文管理系统要求运行稳定,运行过程中无界面不清楚、字体模糊等现象。

(5)系统可靠性:系统不可以有病毒类代码,必须有拦截器,验证方法,对里面信息的保护措施,这样才让人用的放心。

3.3 系统功能分析

本毕业论文管理系统主要实现的功能模块包括学生模块、导师模块和管理员模块三大部分,具体功能分析如下:

(1)导师功能模块:导师注册登录后主要功能模块包括个人中心、学生管理、导师管理、职称类型管理、课题管理、课题申请管理、导师选择管理、课题资料管理、成绩管理、文档管理、学院类型管理、管理员管理以及留言板管理。导师用例图如图3-1所示。

图3-1 导师用例图

(2)学生功能模块:学生在系统前台可查看系统信息,包括首页、导师、课题管理、课题资料、文档管理、公告以及留言反馈,注册登录后主要功能模块包括个人中心、课题申请管理、导师选择管理、课题资料管理、成绩管理以及文档管理。学生用例图如图3-2所示。

图3-2 学生用例图

(3)管理员功能模块:管理员登录后可对系统进行全面管理,管理员主要实现的功能模块包括个人中心、学生管理、导师管理、职称类型管理、课题管理、课题申请管理、导师选择管理、课题资料管理、成绩管理、文档管理、学院类型管理、管理员管理、留言板管理以及系统管理,管理员实现了对系统信息的查看、添加、修改和删除的功能。管理员用例图如图3-3所示。

图3-3 管理员用例图

3.4 系统流程分析

3.4.1注册登录流程

没有账号的学生和导师均可进行注册操作,注册后可实现登录功能,注册登录流程如图3-4所示。

图3-4注册登录流程图

3.4.2添加信息流程图

所有登录成功的用户都可以实现添加信息,在添加信息的过程中,编号不能手动输入,由系统生成,其他信息都要手动输入,输入后系统对输入的这些信息进行验证,验证通过就显示添加成功,相反添加失败。添加信息流程如图3-5所示。

图3-5添加信息流程图

3.4.3修改信息流程图

修改信息这一块的流程和添加信息类似,首先由用户选定需要修改的信息,然后输入对应要修改的数据,系统对输入的这些数据再进行验证,验证成功就可以添加到系统的数据库里面,相反不能添加成功。图3-6就是修改信息的流程图。

图3-6修改信息流程图

3.4.4删除信息流程图

用户在删除的时候,系统会再次提示是不是确定要删除,因为一旦删除了,信息就不存在了,确定要删除的话,就会从数据库里将这些数据删除,重新更新数据库。图3-7演示的就是删除信息的流程图。

图3-7删除信息流程图

4 系统设计

4.1 系统结构设计

系统结构设计是一个将一个庞大的任务细分为多个小的任务的过程,这些小的任务分段完成后,组合在一起形成一个完整的任务。在整个设计过程,以确定可能的具体方案达成每一个小的最终目标,对于每一个小的目标而言,我们必须先了解一些相关的需求分析的信息。然后对系统进行初步的设计,并对其逐渐进行优化,设计出一个具体可实现的系统结构。

本毕业论文管理系统的整体结构设计如图4-1所示。

图4-1 系统结构图

4.2 系统顺序图设计

(1)登录模块顺序图

登录模块主要满足了管理员、学生、导师的权限登录,登录模块顺序图如图4-2所示。

图4-2 登录模块顺序图

(2)添加信息模块顺序图

管理员、学生、导师登录后均可进行添加信息操作,添加信息模块顺序图如图4-3所示

图4-3 添加信息模块顺序图

4.3 系统数据库设计

一个好的数据库可以关系到程序开发的优劣,数据库设计离不开表结构的设计,还有表与表之间的联系,以及系统开发需要设计的数据表内容等信息。在进行数据库设计期间,还是需要多花时间进行考虑,最终设计出配套程序的数据库出来。

4.3.1 数据库E-R图设计

E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系。E-R图即由这三点组成。

实体:E-R图中数据的实体,用矩形表示上面为实体名,下面为实体属性,实体包含主外键等关系。

属性:E-R图中的属性,是指实体的属性,实体由多条属性所构成,属性拥有自己的数据类型,数据大小。属性的优劣决定了E-R图中实体的健全性、完整性。

关系:E-R图中的关系是指实体之间的关系,用菱形来表示实体间的关系,这些菱形关系的联系上有着一对多或多对多的数据联系,这些构成了E-R图的关系,E-R图的关系紧密连接了实体,使实体间的关联性更加的显著、易懂。本毕业论文管理系统的E-R图如下所示:

(1)导师选择实体属性图如图4-4所示。

图4-4 导师选择实体属性图

(2)课题实体属性图如图4-5所示。

图4-5 课题实体属性图

(3)申请课题实体属性图如图4-6所示。

图4-6 申请课题实体属性图

(4)导师实体属性图如图4-7所示。

图4-7 导师实体属性图

(5)学生实体属性图如图4-8所示。

图4-8 学生实体属性图

(6)管理员实体属性图如图4-9所示。

图4-9 管理员实体属性图

4.3.2 数据库表设计

本毕业论文管理系统采用MYSQL数据库进行系统数据的储存,主要的数据库表的具体设置如下:

表4-1 daoshixuanze导师选择信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
addtime创建时间timestamp
daoshizhanghao导师账号varchar200
daoshixingming导师姓名varchar200
`xuanze选择varchar200
xuehao学号varchar200
xueshengxingming学生姓名varchar200
shenqingriqi申请日期date

表4-2 ketixinxi课题信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
addtime创建时间timestamp
ketibianhao课题编号varchar200
ketimingcheng课题名称varchar200
nandu难度varchar200
`laiyuan来源varchar200
leixing`类型varchar200
miaoshu描述longtext
kechengziliao课程资料varchar200
gonghao工号varchar200
jiaoshixingming`教师姓名varchar200
faburiqi`发布日期date
sfsh是否审核varchar200
shhf审核回复longtext

表4-3 shenqingketi申请课题信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
addtime创建时间timestamp
ketibianhao课题编号varchar200
ketimingcheng课题名称varchar200
nandu难度varchar200
`laiyuan来源varchar200
leixing`类型varchar200
miaoshu描述longtext
kechengziliao课程资料varchar200
daoshizhanghao导师账号varchar200
daoshixingming导师姓名varchar200
faburiqi发布日期date
sfsh是否审核varchar200
shhf审核回复longtext

表4-4 daoshi导师信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
addtime创建时间timestamp
daoshizhanghao导师账号varchar200
mima密码varchar200
daoshixingming导师姓名varchar200
`xingbie性别varchar200
yuanxi院系varchar200
nianji年级varchar200
shoujihaoma手机号码varchar200
youxiang邮箱varchar200

表4-5 xuesheng学生信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
addtime创建时间timestamp
xuehao学号varchar200
mima密码varchar200
xueshengxingming学生姓名varchar200
`xingbie性别varchar200
`xueyuan学员varchar200
zhuanye专业varchar200
banji班级varchar200
lianxidianhua联系电话varchar200
youxiang`邮箱varchar200

表4-6 users管理员信息表

字段名称字段意义字段类型字段长度是否主键能否为空
id编号bigint20
username用户名varchar100
password密码varchar100
role角色varchar100
addtime新增时间timestamp

5 系统的实现

5.1 登录模块的实现

用户要想进入本系统必须进行登录操作,在登录界面输入用户名、密码选择登录角色点击登录按钮进行登录,系统登录界面展示如图5-1所示。

图5-1 系统登录界面图

5.2 学生管理模块的实现

管理员和导师均可添加、修改和删除学生信息,学生管理界面展示如图5-2所示,添加学生界面展示如图5-3所示。

图5-2 学生管理界面图

图5-3 添加学生界面图

5.3 导师管理模块的实现

管理员和导师均可添加、修改和删除导师信息,学生可选择导师查看详情信息,登录后可进行选择操作,导师管理界面如图5-5所示,导师详情界面展示如图5-6所示。

图5-5 导师管理界面图

图5-6 导师详情界面图

5.4 课题管理模块的实现

管理员和导师均可增删改查课题信息,学生可选择课题查看详情信息,登录后可进行课题申请操作,课题管理界面如图5-7所示,课题详情界面展示如图5-8所示。

图5-7 课题管理界面图

图5-8 课题详情界面图

5.5 注册模块的实现

没有账号的学生和导师均可进行注册操作,学生注册界面如图5-9所示,导师注册界面展示如图5-10所示。

图5-9 学生注册界面图

图5-10 导师注册界面图

5.6 系统主界面模块的实现

学生可进入系统前台查看系统信息,包括首页、导师、课题资料以及文档等,系统主界面展示如图5-11所示。

图5-11 系统主界面图

5.7 课题申请管理模块的实现

学生可选择课题进行申请操作,导师可查看学生课题申请信息,并可对其进行审核操作,课题申请界面展示如图5-12所示,课题申请管理界面展示如图5-13所示。

图5-12 课题申请界面图

图5-13 课题申请管理界面图

TichuyiwenServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.TichuyiwenDao;
import com.entity.TichuyiwenEntity;
import com.service.TichuyiwenService;
import com.entity.vo.TichuyiwenVO;
import com.entity.view.TichuyiwenView;

@Service("tichuyiwenService")
public class TichuyiwenServiceImpl extends ServiceImpl<TichuyiwenDao, TichuyiwenEntity> implements TichuyiwenService {
	

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<TichuyiwenEntity> page = this.selectPage(
                new Query<TichuyiwenEntity>(params).getPage(),
                new EntityWrapper<TichuyiwenEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<TichuyiwenEntity> wrapper) {
		  Page<TichuyiwenView> page =new Query<TichuyiwenView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<TichuyiwenVO> selectListVO(Wrapper<TichuyiwenEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public TichuyiwenVO selectVO(Wrapper<TichuyiwenEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<TichuyiwenView> selectListView(Wrapper<TichuyiwenEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public TichuyiwenView selectView(Wrapper<TichuyiwenEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

YuanxixinxiController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;

import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;

import com.entity.YuanxixinxiEntity;
import com.entity.view.YuanxixinxiView;

import com.service.YuanxixinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;


/**
 * 院系信息
 * 后端接口
 * @author 
 * @email 
 * @date 2021-03-19 16:32:30
 */
@RestController
@RequestMapping("/yuanxixinxi")
public class YuanxixinxiController {
    @Autowired
    private YuanxixinxiService yuanxixinxiService;
    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,YuanxixinxiEntity yuanxixinxi, 
		HttpServletRequest request){

        EntityWrapper<YuanxixinxiEntity> ew = new EntityWrapper<YuanxixinxiEntity>();
		PageUtils page = yuanxixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuanxixinxi), params), params));
        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,YuanxixinxiEntity yuanxixinxi, HttpServletRequest request){
        EntityWrapper<YuanxixinxiEntity> ew = new EntityWrapper<YuanxixinxiEntity>();
		PageUtils page = yuanxixinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yuanxixinxi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( YuanxixinxiEntity yuanxixinxi){
       	EntityWrapper<YuanxixinxiEntity> ew = new EntityWrapper<YuanxixinxiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( yuanxixinxi, "yuanxixinxi")); 
        return R.ok().put("data", yuanxixinxiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(YuanxixinxiEntity yuanxixinxi){
        EntityWrapper< YuanxixinxiEntity> ew = new EntityWrapper< YuanxixinxiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( yuanxixinxi, "yuanxixinxi")); 
		YuanxixinxiView yuanxixinxiView =  yuanxixinxiService.selectView(ew);
		return R.ok("查询院系信息成功").put("data", yuanxixinxiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        YuanxixinxiEntity yuanxixinxi = yuanxixinxiService.selectById(id);
        return R.ok().put("data", yuanxixinxi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        YuanxixinxiEntity yuanxixinxi = yuanxixinxiService.selectById(id);
        return R.ok().put("data", yuanxixinxi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody YuanxixinxiEntity yuanxixinxi, HttpServletRequest request){
    	yuanxixinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yuanxixinxi);

        yuanxixinxiService.insert(yuanxixinxi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody YuanxixinxiEntity yuanxixinxi, HttpServletRequest request){
    	yuanxixinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(yuanxixinxi);

        yuanxixinxiService.insert(yuanxixinxi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody YuanxixinxiEntity yuanxixinxi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(yuanxixinxi);
        yuanxixinxiService.updateById(yuanxixinxi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        yuanxixinxiService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
    
    /**
     * 提醒接口
     */
	@RequestMapping("/remind/{columnName}/{type}")
	public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, 
						 @PathVariable("type") String type,@RequestParam Map<String, Object> map) {
		map.put("column", columnName);
		map.put("type", type);
		
		if(type.equals("2")) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Calendar c = Calendar.getInstance();
			Date remindStartDate = null;
			Date remindEndDate = null;
			if(map.get("remindstart")!=null) {
				Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
				c.setTime(new Date()); 
				c.add(Calendar.DAY_OF_MONTH,remindStart);
				remindStartDate = c.getTime();
				map.put("remindstart", sdf.format(remindStartDate));
			}
			if(map.get("remindend")!=null) {
				Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
				c.setTime(new Date());
				c.add(Calendar.DAY_OF_MONTH,remindEnd);
				remindEndDate = c.getTime();
				map.put("remindend", sdf.format(remindEndDate));
			}
		}
		
		Wrapper<YuanxixinxiEntity> wrapper = new EntityWrapper<YuanxixinxiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = yuanxixinxiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

JiaoshiServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;


import com.dao.JiaoshiDao;
import com.entity.JiaoshiEntity;
import com.service.JiaoshiService;
import com.entity.vo.JiaoshiVO;
import com.entity.view.JiaoshiView;

@Service("jiaoshiService")
public class JiaoshiServiceImpl extends ServiceImpl<JiaoshiDao, JiaoshiEntity> implements JiaoshiService {
	

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<JiaoshiEntity> page = this.selectPage(
                new Query<JiaoshiEntity>(params).getPage(),
                new EntityWrapper<JiaoshiEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<JiaoshiEntity> wrapper) {
		  Page<JiaoshiView> page =new Query<JiaoshiView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<JiaoshiVO> selectListVO(Wrapper<JiaoshiEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public JiaoshiVO selectVO(Wrapper<JiaoshiEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<JiaoshiView> selectListView(Wrapper<JiaoshiEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	@Override
	public JiaoshiView selectView(Wrapper<JiaoshiEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}

}

register.vue
<template>
  <div>
    <div class="container">
      <div class="login-form" style="backgroundColor:rgba(255, 255, 255, 0.17);borderRadius:10px">
        <h1 class="h1" style="color:#000;fontSize:28px;">毕业论文管理系统注册</h1>
		<el-form ref="rgsForm" class="rgs-form" :model="rgsForm" label-width="120px">
															<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">学号</div>
			   <div class="input-container">
			     <input v-model="ruleForm.xuehao" class="input" type="text" placeholder="学号">
			   </div>
			 </div> -->
			<el-form-item label="学号" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.xuehao" autocomplete="off" placeholder="学号" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">密码</div>
			   <div class="input-container">
			     <input v-model="ruleForm.mima" class="input" type="text" placeholder="密码">
			   </div>
			 </div> -->
			<el-form-item label="密码" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.mima" autocomplete="off" placeholder="密码" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">学生姓名</div>
			   <div class="input-container">
			     <input v-model="ruleForm.xueshengxingming" class="input" type="text" placeholder="学生姓名">
			   </div>
			 </div> -->
			<el-form-item label="学生姓名" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.xueshengxingming" autocomplete="off" placeholder="学生姓名" type="text" />
			</el-form-item>
																														<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">专业</div>
			   <div class="input-container">
			     <input v-model="ruleForm.zhuanye" class="input" type="text" placeholder="专业">
			   </div>
			 </div> -->
			<el-form-item label="专业" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.zhuanye" autocomplete="off" placeholder="专业" type="text" />
			</el-form-item>
																					<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">联系电话</div>
			   <div class="input-container">
			     <input v-model="ruleForm.lianxidianhua" class="input" type="text" placeholder="联系电话">
			   </div>
			 </div> -->
			<el-form-item label="联系电话" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.lianxidianhua" autocomplete="off" placeholder="联系电话" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='xuesheng'" class="input-group">
			   <div class="label">邮箱</div>
			   <div class="input-container">
			     <input v-model="ruleForm.youxiang" class="input" type="text" placeholder="邮箱">
			   </div>
			 </div> -->
			<el-form-item label="邮箱" class="input" v-if="tableName=='xuesheng'">
			  <el-input v-model="ruleForm.youxiang" autocomplete="off" placeholder="邮箱" type="text" />
			</el-form-item>
																								<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">工号</div>
			   <div class="input-container">
			     <input v-model="ruleForm.gonghao" class="input" type="text" placeholder="工号">
			   </div>
			 </div> -->
			<el-form-item label="工号" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.gonghao" autocomplete="off" placeholder="工号" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">密码</div>
			   <div class="input-container">
			     <input v-model="ruleForm.mima" class="input" type="text" placeholder="密码">
			   </div>
			 </div> -->
			<el-form-item label="密码" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.mima" autocomplete="off" placeholder="密码" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">教师姓名</div>
			   <div class="input-container">
			     <input v-model="ruleForm.jiaoshixingming" class="input" type="text" placeholder="教师姓名">
			   </div>
			 </div> -->
			<el-form-item label="教师姓名" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.jiaoshixingming" autocomplete="off" placeholder="教师姓名" type="text" />
			</el-form-item>
																														<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">职称</div>
			   <div class="input-container">
			     <input v-model="ruleForm.zhicheng" class="input" type="text" placeholder="职称">
			   </div>
			 </div> -->
			<el-form-item label="职称" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.zhicheng" autocomplete="off" placeholder="职称" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">手机号码</div>
			   <div class="input-container">
			     <input v-model="ruleForm.shoujihaoma" class="input" type="text" placeholder="手机号码">
			   </div>
			 </div> -->
			<el-form-item label="手机号码" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.shoujihaoma" autocomplete="off" placeholder="手机号码" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='jiaoshi'" class="input-group">
			   <div class="label">邮箱</div>
			   <div class="input-container">
			     <input v-model="ruleForm.youxiang" class="input" type="text" placeholder="邮箱">
			   </div>
			 </div> -->
			<el-form-item label="邮箱" class="input" v-if="tableName=='jiaoshi'">
			  <el-input v-model="ruleForm.youxiang" autocomplete="off" placeholder="邮箱" type="text" />
			</el-form-item>
																								<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">导师账号</div>
			   <div class="input-container">
			     <input v-model="ruleForm.daoshizhanghao" class="input" type="text" placeholder="导师账号">
			   </div>
			 </div> -->
			<el-form-item label="导师账号" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.daoshizhanghao" autocomplete="off" placeholder="导师账号" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">密码</div>
			   <div class="input-container">
			     <input v-model="ruleForm.mima" class="input" type="text" placeholder="密码">
			   </div>
			 </div> -->
			<el-form-item label="密码" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.mima" autocomplete="off" placeholder="密码" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">导师姓名</div>
			   <div class="input-container">
			     <input v-model="ruleForm.daoshixingming" class="input" type="text" placeholder="导师姓名">
			   </div>
			 </div> -->
			<el-form-item label="导师姓名" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.daoshixingming" autocomplete="off" placeholder="导师姓名" type="text" />
			</el-form-item>
																														<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">年级</div>
			   <div class="input-container">
			     <input v-model="ruleForm.nianji" class="input" type="text" placeholder="年级">
			   </div>
			 </div> -->
			<el-form-item label="年级" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.nianji" autocomplete="off" placeholder="年级" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">手机号码</div>
			   <div class="input-container">
			     <input v-model="ruleForm.shoujihaoma" class="input" type="text" placeholder="手机号码">
			   </div>
			 </div> -->
			<el-form-item label="手机号码" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.shoujihaoma" autocomplete="off" placeholder="手机号码" type="text" />
			</el-form-item>
												<!-- <div v-if="tableName=='daoshi'" class="input-group">
			   <div class="label">邮箱</div>
			   <div class="input-container">
			     <input v-model="ruleForm.youxiang" class="input" type="text" placeholder="邮箱">
			   </div>
			 </div> -->
			<el-form-item label="邮箱" class="input" v-if="tableName=='daoshi'">
			  <el-input v-model="ruleForm.youxiang" autocomplete="off" placeholder="邮箱" type="text" />
			</el-form-item>
																																																																																																																											<div style="display: flex;flex-wrap: wrap;width: 100%;justify-content: center;">
				<el-button class="btn" type="primary" @click="login()">注册</el-button>
				<el-button class="btn close" type="primary" @click="close()">取消</el-button>
			</div>
		</el-form>
      </div>
      <!-- <div class="nk-navigation">
        <a href="#">
          <div @click="login()">注册</div>
        </a>
      </div> -->
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      ruleForm: {
              },
      tableName:"",
      rules: {}
    };
  },
  mounted(){
    let table = this.$storage.get("loginTable");
    this.tableName = table;
  },
  methods: {
    // 获取uuid
    getUUID () {
      return new Date().getTime();
    },
    close(){
	this.$router.push({ path: "/login" });
    },
    // 注册
    login() {
                              if((!this.ruleForm.xuehao) && `xuesheng` == this.tableName){
        this.$message.error(`学号不能为空`);
        return
      }
                                                                  if((!this.ruleForm.mima) && `xuesheng` == this.tableName){
        this.$message.error(`密码不能为空`);
        return
      }
                                                                  if((!this.ruleForm.xueshengxingming) && `xuesheng` == this.tableName){
        this.$message.error(`学生姓名不能为空`);
        return
      }
                                                                                                                                                                                                                                                                                                                  if(`xuesheng` == this.tableName && this.ruleForm.lianxidianhua&&(!this.$validate.isMobile(this.ruleForm.lianxidianhua))){
        this.$message.error(`联系电话应输入手机格式`);
        return
      }
                                                                        if(`xuesheng` == this.tableName && this.ruleForm.youxiang&&(!this.$validate.isEmail(this.ruleForm.youxiang))){
        this.$message.error(`邮箱应输入邮件格式`);
        return
      }
                                                            if((!this.ruleForm.gonghao) && `jiaoshi` == this.tableName){
        this.$message.error(`工号不能为空`);
        return
      }
                                                                  if((!this.ruleForm.mima) && `jiaoshi` == this.tableName){
        this.$message.error(`密码不能为空`);
        return
      }
                                                                  if((!this.ruleForm.jiaoshixingming) && `jiaoshi` == this.tableName){
        this.$message.error(`教师姓名不能为空`);
        return
      }
                                                                                                                                                                                                                                                            if(`jiaoshi` == this.tableName && this.ruleForm.shoujihaoma&&(!this.$validate.isMobile(this.ruleForm.shoujihaoma))){
        this.$message.error(`手机号码应输入手机格式`);
        return
      }
                                                                        if(`jiaoshi` == this.tableName && this.ruleForm.youxiang&&(!this.$validate.isEmail(this.ruleForm.youxiang))){
        this.$message.error(`邮箱应输入邮件格式`);
        return
      }
                                                            if((!this.ruleForm.daoshizhanghao) && `daoshi` == this.tableName){
        this.$message.error(`导师账号不能为空`);
        return
      }
                                                                  if((!this.ruleForm.mima) && `daoshi` == this.tableName){
        this.$message.error(`密码不能为空`);
        return
      }
                                                                  if((!this.ruleForm.daoshixingming) && `daoshi` == this.tableName){
        this.$message.error(`导师姓名不能为空`);
        return
      }
                                                                                                                                                                                                                                                            if(`daoshi` == this.tableName && this.ruleForm.shoujihaoma&&(!this.$validate.isMobile(this.ruleForm.shoujihaoma))){
        this.$message.error(`手机号码应输入手机格式`);
        return
      }
                                                                        if(`daoshi` == this.tableName && this.ruleForm.youxiang&&(!this.$validate.isEmail(this.ruleForm.youxiang))){
        this.$message.error(`邮箱应输入邮件格式`);
        return
      }
                                                                                                                                                                                                                                                                  this.$http({
        url: `${this.tableName}/register`,
        method: "post",
        data:this.ruleForm
      }).then(({ data }) => {
        if (data && data.code === 0) {
          this.$message({
            message: "注册成功",
            type: "success",
            duration: 1500,
            onClose: () => {
              this.$router.replace({ path: "/login" });
            }
          });
        } else {
          this.$message.error(data.msg);
        }
      });
    }
  }
};
</script>
<style lang="scss" scoped>
	.el-radio__input.is-checked .el-radio__inner {
		border-color: #00c292;
		background: #00c292;
	}

	.el-radio__input.is-checked .el-radio__inner {
		border-color: #00c292;
		background: #00c292;
	}

	.el-radio__input.is-checked .el-radio__inner {
		border-color: #00c292;
		background: #00c292;
	}

	.el-radio__input.is-checked+.el-radio__label {
		color: #00c292;
	}

	.el-radio__input.is-checked+.el-radio__label {
		color: #00c292;
	}

	.el-radio__input.is-checked+.el-radio__label {
		color: #00c292;
	}

	.h1 {
		margin-top: 10px;
	}

	body {
		padding: 0;
		margin: 0;
	}

	// .container {
 //    min-height: 100vh;
 //    text-align: center;
 //    // background-color: #00c292;
 //    padding-top: 20vh;
 //    background-image: url(../assets/img/bg.jpg);
 //    background-size: 100% 100%;
 //    opacity: 0.9;
 //  }

	// .login-form:before {
	// 	vertical-align: middle;
	// 	display: inline-block;
	// }

	// .login-form {
	// 	max-width: 500px;
	// 	padding: 20px 0;
	// 	width: 80%;
	// 	position: relative;
	// 	margin: 0 auto;

	// 	.label {
	// 		min-width: 60px;
	// 	}

	// 	.input-group {
	// 		max-width: 500px;
	// 		padding: 20px 0;
	// 		width: 80%;
	// 		position: relative;
	// 		margin: 0 auto;
	// 		display: flex;
	// 		align-items: center;

	// 		.input-container {
	// 			display: inline-block;
	// 			width: 100%;
	// 			text-align: left;
	// 			margin-left: 10px;
	// 		}

	// 		.icon {
	// 			width: 30px;
	// 			height: 30px;
	// 		}

	// 		.input {
	// 			position: relative;
	// 			z-index: 2;
	// 			float: left;
	// 			width: 100%;
	// 			margin-bottom: 0;
	// 			box-shadow: none;
	// 			border-top: 0px solid #ccc;
	// 			border-left: 0px solid #ccc;
	// 			border-right: 0px solid #ccc;
	// 			border-bottom: 1px solid #ccc;
	// 			padding: 0px;
	// 			resize: none;
	// 			border-radius: 0px;
	// 			display: block;
	// 			width: 100%;
	// 			height: 34px;
	// 			padding: 6px 12px;
	// 			font-size: 14px;
	// 			line-height: 1.42857143;
	// 			color: #555;
	// 			background-color: #fff;
	// 		}

	// 	}
	// }

	.nk-navigation {
		margin-top: 15px;

		a {
			display: inline-block;
			color: #fff;
			background: rgba(255, 255, 255, .2);
			width: 100px;
			height: 50px;
			border-radius: 30px;
			text-align: center;
			display: flex;
			align-items: center;
			margin: 0 auto;
			justify-content: center;
			padding: 0 20px;
		}

		.icon {
			margin-left: 10px;
			width: 30px;
			height: 30px;
		}
	}

	.register-container {
		margin-top: 10px;

		a {
			display: inline-block;
			color: #fff;
			max-width: 500px;
			height: 50px;
			border-radius: 30px;
			text-align: center;
			display: flex;
			align-items: center;
			margin: 0 auto;
			justify-content: center;
			padding: 0 20px;

			div {
				margin-left: 10px;
			}
		}
	}
	
	.container {
		background-image: url("http://codegen.caihongy.cn/20201221/ccad6ac766484dad8dd6e91b35e6d8d7.jpg");
		height: 100vh;
		background-position: center center;
		background-size: cover;
		background-repeat: no-repeat;
	
		.login-form {
			right: 50%;
			top: 50%;
			height: auto;
			transform: translate3d(50%, -50%, 0);
			border-radius: 10px;
			background-color: rgba(255,255,255,.5);
			width: 420px;
			padding: 30px 30px 40px 30px;
			font-size: 14px;
			font-weight: 500;
			
			.h1 {
				margin: 0;
				text-align: center;
				line-height: 54px;
			    font-size: 24px;
			    color: #000;
			}
				
			.rgs-form {
				display: flex;
				flex-direction: column;
				justify-content: center;
				align-items: center;
				
				.input {
					width: 100%;
					
					& /deep/ .el-form-item__label {
						line-height: 40px;
						color: 14px;
						font-size: #606266;
					}
					
					& /deep/ .el-input__inner {
						height: 40px;
						color: #606266;
						font-size: 14px;
						border-width: 1px;
						border-style: solid;
						border-color: #606266;
						border-radius: 4px;
						background-color: #fff;
					}
				}
				
				.btn {
					margin: 0 10px;
					width: 88px;
					height: 44px;
					color: #fff;
					font-size: 14px;
					border-width: 1px;
					border-style: solid;
					border-color: #409EFF;
					border-radius: 4px;
					background-color: #409EFF;
				}

				.close {
					margin: 0 10px;
					width: 88px;
					height: 44px;
					color: #409EFF;
					font-size: 14px;
					border-width: 1px;
					border-style: solid;
					border-color: #409EFF;
					border-radius: 5px;
					background-color: #FFF;
				}

			}
		}
	}
</style>

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值