@TOC
springboot573学院个人信息管理系统_21j0r--论文
系统概述
该系统由个人管理员和教师,学生三部分组成。其中:学生进入系统首页可以实现首页,课程信息,在线论坛,新闻公告,留言板,后台管理,个人中心等;教师可以对个人中心,课程信息管理,学习课程管理,作业通知管理,学生作业管理,批改作业管理等功能进行管理;管理员则是根据不同需求设置了不同功能,可以通过后台管理用户信息。
3.2 需求分析
需求分析,也称为软件需求分析、系统需求分析或需求分析工程,是指开发人员经过充分的研究和分析,准确地理解用户和项目在功能、性能、可靠性等方面的具体需求,并将用户的非正式需求表述转化为确定系统必须执行的需求的完整定义的过程[11]。
功能需求分析是系统设计的前提,它要求开发者和用户定义开发什么样的体系和系统需要什么样的功能。本文主要介绍了一种基于windows系统实现的学院个人信息管理系统。该系统为用户找到学院个人信息提供了更安全、更高效、更便捷的途径。本系统有三个角色:管理员和教师,学生,要求具备以下功能:
- 学生可以浏览主页了解学院个人信息,可以查看首页,课程信息,在线论坛,新闻公告,留言板,后台管理,个人中心等功能;
图3-1:学生用例图
- 管理员通过后台管理员界面,实现对个人中心,学生管理,教师管理,课程分类管理,班级管理,课程信息管理,学习课程管理,作业通知管理,学生作业管理,批改作业管理,留言板,在线讨论,系统管理等功能的操作;
图3-2:管理员用例图
- 教师通过系统实现对课程信息,在线论坛,新闻公告,留言板,后台管理,个人中心等功能的操作;
图3-3:教师用例图
3.3 可行性分析
可行性分析是指通过比较项目的主要内容和支撑条件,如市场需求、资源供应、环境影响、资金筹措情况、盈利能力等,预测项目建成后可能产生的资金、经济效益、社会和环境影响,为项目决策提供依据的综合性系统分析方法。可行性研究报告编制的质量直接影响着投资决策的成,而可行性研究报告编制程序又决定了可行性研究报告能否得到有效执行。因此,必须重视可行性研究工作,提高其编制水平。可行性分析应当具有预见性、公正性、可靠性和科学性[13]。
3.3.1 技术可行性分析
本系统是为了为用户寻找学院个人信息提供更加安全、高效、便捷的方式,本系统需要运用到Java、MySQL、springboot、B/S结构等技术,这些技术在国内外已经非常成熟[14],在大学期间也有所涉及,相关的知识和工具在网络上也可以查到,再加上老师的指导,在技术上的难题可以得到解决。
3.3.2 经济可行性分析
该系统的主题是学院个人信息管理系统的设计与实现。开发所需的软件资源是Eclipse。我们可以在它的网站上安装一个免费的版本,这对我们的开发和使用是足够好的。数据库就是MySQL数据库。是开源是免费的,服务器使用Tomcat服务器,浏览器使用日常IE浏览器,springboot框架是开源的。经过可行性评估,软件资源支出符合经济可行性[15]。硬件方面,配备齐全的笔记本电脑作为工具在经济上是可行的。
3.4流程设计
3.4.1程序流程图设计
非本系统的用户要想进行学院个人信息管理就要注册本系统,登录时需要填写相应的资料,如有使用者,则会显示使用者名称已经存在,请再次键入使用者名称的提示框,若使用者不存在,则填写密码、确认密码等资料,并由系统判定密码与确认密码相符,确认无误后,填写使用者所填写的资料,即可进行登记。而且,为了保证系统的安全,只有在登录了本系统以后,才能进行学院个人信息管理。该系统的工作流程见图3-4。
图3-4 程序流程图
3.4.2添加信息流程图设计
在添加信息的时候,会判断是哪类用户,并根据用户类型判断执行是否合法,合法者可以进行添加,不合法者则不能进行此操作[12]。管理员登录账号后可以对内容进行添加,拥有着最高的权限,用户权限次于管理员。添加信息流程图如图3-5所示:
图3-5系统添加流程图
3.4.3删除信息流程图设计
删除数据时与添加数据功能类似,删除数据具体流程如图3-6所示:
图3-6系统删除流程图
3.5 本章小结
学院个人信息管理系统从市场、技术、经济、功能等方面分析了系统的功能需求,可以满足用户的学院个人信息管理需求,帮助用户安全、高效地找到合适的学院个人信息,因此有必要对其进行课题研究。
第4章 系统设计
系统设计是将被设计对象划分为单个模块进行构建,各个模块相互支持,相互制约,它们的组合是一个完整的系统。通过系统设计,可以最大限度地满足系统的预期目标,明确软件开发的目的。
4.1 系统基本结构设计
本次系统采用springboot框架集进行开发,springboot框架是一款企业界主流的软件开发框架,其简化了开发流程,大大缩减了软件开发所需的时间提高了软件的响应速度。系统总体结构图如图4-1所示。
图4-1 系统总体结构图
4.2 数据库设计
数据库结构设计的好坏直接影响到学院个人信息管理系统的效率和实现的效果。本系统的数据库采用MySQL数据库,MySQL是一种开放源代码的关系型数据库管理系统,使用最常见的数据库管理语言SQL进行数据库管理。
4.2.1 数据库E-R图设计
E-R图也可称为实体-联系图,其可以清楚的显示实体与实体之间的关系,是描述概念模型的有效方式,通过各实体间的关系方便数据库结构的设计。以下是本系统主要的实体属性图如下所示。
批改作业实体如图4-2所示。
图4-2批改作业实体属性图
新闻公告实体如图4-3所示。
图4-3新闻公告实体属性图
在线论坛实体如图4-4所示。
图4-4在线论坛实体属性图
课程信息评论实体如图4-5所示。
图4-5课程信息评论实体属性图
作业通知实体如图4-6所示。
图4-6作业通知实体属性图
4.2.2 数据库表设计
数据表是用来保存多种数据的表,它是所有数据库的核心对象,且对于软件开发有着不可替代的作用。其相关数据表如下:
表4-1:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表4-2:关于我们
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
subtitle | varchar | 200 | 副标题 | ||
content | longtext | 4294967295 | 内容 | ||
picture1 | longtext | 4294967295 | 图片1 | ||
picture2 | longtext | 4294967295 | 图片2 | ||
picture3 | longtext | 4294967295 | 图片3 |
表4-3:收藏表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
refid | bigint | 商品id | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 名称 | ||
picture | longtext | 4294967295 | 图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) | 1 | |
inteltype | varchar | 200 | 推荐类型 | ||
remark | varchar | 200 | 备注 |
表4-4:批改作业
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengfenlei | varchar | 200 | 课程分类 | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
zhanghao | varchar | 200 | 账号 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
pigairiqi | date | 批改日期 | |||
pingfen | int | 评分 |
表4-5:新闻公告
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
introduction | longtext | 4294967295 | 简介 | ||
picture | longtext | 4294967295 | 图片 | ||
content | longtext | 4294967295 | 内容 |
表4-6:留言板
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 留言人id | |||
username | varchar | 200 | 用户名 | ||
avatarurl | longtext | 4294967295 | 头像 | ||
content | longtext | 4294967295 | 留言内容 | ||
cpicture | longtext | 4294967295 | 留言图片 | ||
reply | longtext | 4294967295 | 回复内容 | ||
rpicture | longtext | 4294967295 | 回复图片 |
表4-7:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
表4-8:在线论坛
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 帖子标题 | ||
content | longtext | 4294967295 | 帖子内容 | ||
parentid | bigint | 父节点id | |||
userid | bigint | 用户id | |||
username | varchar | 200 | 用户名 | ||
avatarurl | longtext | 4294967295 | 头像 | ||
isdone | varchar | 200 | 状态 |
表4-9:课程信息评论表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
refid | bigint | 关联表id | |||
userid | bigint | 用户id | |||
avatarurl | longtext | 4294967295 | 头像 | ||
nickname | varchar | 200 | 用户名 | ||
content | longtext | 4294967295 | 评论内容 | ||
reply | longtext | 4294967295 | 回复内容 |
表4-10: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 |
表4-11:班级
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
banji | varchar | 200 | 班级 |
表4-12:作业通知
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengfenlei | varchar | 200 | 课程分类 | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
zhanghao | varchar | 200 | 账号 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
zuoyebuzhi | varchar | 200 | 作业布置 | ||
zhuyaoneirong | varchar | 200 | 主要内容 | ||
wanchengzhuangtai | varchar | 200 | 完成状态 |
表4-13:学习课程
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengfenlei | varchar | 200 | 课程分类 | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
zhanghao | varchar | 200 | 账号 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
xuexiriqi | date | 学习日期 |
表4-14:学生作业
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengfenlei | varchar | 200 | 课程分类 | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
zhanghao | varchar | 200 | 账号 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
zuoyeneirong | longtext | 4294967295 | 作业内容 | ||
wanchengriqi | date | 完成日期 |
表4-15:课程信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengmingcheng | varchar | 200 | 课程名称 | ||
kechengfenlei | varchar | 200 | 课程分类 | ||
tupian | longtext | 4294967295 | 图片 | ||
kechengziliao | longtext | 4294967295 | 课程资料 | ||
jiaoxueshipin | longtext | 4294967295 | 教学视频 | ||
zhuyaoneirong | longtext | 4294967295 | 主要内容 | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
thumbsupnum | int | 赞 | 0 | ||
crazilynum | int | 踩 | 0 | ||
clicktime | datetime | 最近点击时间 | |||
clicknum | int | 点击次数 | 0 |
表4-16:学生
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
mima | varchar | 200 | 密码 | ||
xueshengxingming | varchar | 200 | 学生姓名 | ||
touxiang | longtext | 4294967295 | 头像 | ||
xingbie | varchar | 200 | 性别 | ||
nianling | int | 年龄 | |||
banji | varchar | 200 | 班级 | ||
zhuanye | varchar | 200 | 专业 | ||
xueyuan | varchar | 200 | 学院 | ||
shouji | varchar | 200 | 手机 |
表4-17:课程分类
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
kechengfenlei | varchar | 200 | 课程分类 |
表4-18:教师
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
---|---|---|---|---|---|
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
jiaoshizhanghao | varchar | 200 | 教师账号 | ||
mima | varchar | 200 | 密码 | ||
jiaoshixingming | varchar | 200 | 教师姓名 | ||
zhaopian | longtext | 4294967295 | 照片 | ||
nianling | varchar | 200 | 年龄 | ||
zili | varchar | 200 | 资历 | ||
lianxifangshi | varchar | 200 | 联系方式 | ||
youxiang | varchar | 200 | 邮箱 | ||
zigezhengshu | longtext | 4294967295 | 资格证书 |
4.3 本章小结
通过本章针对学院个人信息管理系统功能的总体结构、E-R属性图和数据表的大概介绍,对在开发系统时所要涉及到的数据库进行简单设计,为下一章系统的实现做好铺垫。
第五章 系统实现
5.1系统功能实现
当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到学院个人信息管理系统的导航条。系统首页界面如图5-1所示:
图5-1 系统首页界面
系统注册:在系统注册页面输入用户注册信息进行注册操作;系统注册页面如图如图5-2所示:
图5-2系统注册页面
课程信息:在课程信息页面的输入栏中输入课程名称和选择课程分类进行查询;还可以进行下载,收藏和点赞操作;课程信息页面如图5-3所示:
图5-3课程信息详细页面
新闻公告:在新闻公告页面的输入栏中输入标题进行查询,可以查看新闻公告详细信息;热门景点页面如图5-4所示:
图5-4新闻公告详细页面
个人中心:在个人中心页面通过填写个人详细信息进行信息更新操作,还可以对我的收藏和我的发布进行详细操作;如图5-5所示:
图5-5个人中心界面
5.2后台模块实现
后台登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-6所示。
图5-6后台登录界面
5.2.1管理员模块实现
管理员进入主页面,主要功能包括对个人中心,学生管理,教师管理,课程分类管理,班级管理,课程信息管理,学习课程管理,作业通知管理,学生作业管理,批改作业管理,留言板,在线讨论,系统管理等进行操作。管理员主页面如图5-7所示:
图5-7 管理员主界面
管理员点击课程信息管理。在课程信息页面输入课程名称和选择课程分类进行查询或删除课程信息列表,并根据需要对课程详情信息进行详情、修改、查看评论或删除操作;如图5-8所示:
图5-8课程信息管理界面
管理员点击学生作业管理。在学生作业页面输入课程名称进行查询或删除学生作业列表,并根据需要对学生作业详情信息进行详情、修改或删除操作;如图5-9所示:
图5-9学生作业管理界面
管理员点击批改作业管理。在批改作业页面输入课程名称进行查询、新增或删除批改作业列表,并根据需要对批改作业详情信息进行详情、修改或删除操作;如图5-10所示:
图5-10批改作业管理界面
管理员点击作业通知管理。在作业通知页面输入课程名称进行查询或删除作业通知列表,并根据需要对作业通知详情信息进行详情、修改或删除操作;如图5-11所示:
图5-11作业通知管理界面
5.2.2学生模块实现
学生进入系统可以对首页,个人中心,学习课程管理,作业通知管理,学生作业管理,批改作业管理等功能进行操作。学生主页面如图5-12所示:
图5-12学生主界面
5.2.3教师模块实现
教师进入系统可以对个人中心,课程信息管理,学习课程管理,作业通知管理,学生作业管理,批改作业管理等功能进行操作。教师主页面如图5-13所示:
图5-13教师主界面
5.3本章小结
第五章主要内容是系统实现,首先实现了本系统中最重要的前台功能,其次分别实现了对管理员功能的管理和对学生,教师后台的管理,并对主要代码的编写,完成了系统全部功能设计。
ConfigController.java
package com.controller;
import java.util.Arrays;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("config")
@RestController
public class ConfigController{
@Autowired
private ConfigService configService;
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, config), params), params));
return R.ok().put("data", page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 根据name获取信息
*/
@RequestMapping("/info")
public R infoByName(@RequestParam String name){
ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
return R.ok().put("data", config);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.insert(config);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.updateById(config);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
configService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
CommonController.java
package com.controller;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
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.annotation.IgnoreAuth;
import com.baidu.aip.face.AipFace;
import com.baidu.aip.face.MatchRequest;
import com.baidu.aip.util.Base64Util;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.CommonService;
import com.service.ConfigService;
import com.utils.BaiduUtil;
import com.utils.FileUtil;
import com.utils.R;
import com.utils.CommonUtil;
/**
* 通用接口
*/
@RestController
public class CommonController{
@Autowired
private CommonService commonService;
private static AipFace client = null;
@Autowired
private ConfigService configService;
/**
* 获取table表中的column列表(联动接口)
* @param table
* @param column
* @return
*/
@IgnoreAuth
@RequestMapping("/option/{tableName}/{columnName}")
public R getOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,@RequestParam(required = false) String conditionColumn,@RequestParam(required = false) String conditionValue,String level,String parent) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
if(StringUtils.isNotBlank(level)) {
params.put("level", level);
}
if(StringUtils.isNotBlank(parent)) {
params.put("parent", parent);
}
if(StringUtils.isNotBlank(conditionColumn)) {
params.put("conditionColumn", conditionColumn);
}
if(StringUtils.isNotBlank(conditionValue)) {
params.put("conditionValue", conditionValue);
}
List<String> data = commonService.getOption(params);
return R.ok().put("data", data);
}
/**
* 根据table中的column获取单条记录
* @param table
* @param column
* @return
*/
@IgnoreAuth
@RequestMapping("/follow/{tableName}/{columnName}")
public R getFollowByOption(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName, @RequestParam String columnValue) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
params.put("columnValue", columnValue);
Map<String, Object> result = commonService.getFollowByOption(params);
return R.ok().put("data", result);
}
/**
* 修改table表的sfsh状态
* @param table
* @param map
* @return
*/
@RequestMapping("/sh/{tableName}")
public R sh(@PathVariable("tableName") String tableName, @RequestBody Map<String, Object> map) {
map.put("table", tableName);
commonService.sh(map);
return R.ok();
}
/**
* 获取需要提醒的记录数
* @param tableName
* @param columnName
* @param type 1:数字 2:日期
* @param map
* @return
*/
@IgnoreAuth
@RequestMapping("/remind/{tableName}/{columnName}/{type}")
public R remindCount(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("table", tableName);
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));
}
}
int count = commonService.remindCount(map);
return R.ok().put("count", count);
}
/**
* 单列求和
*/
@IgnoreAuth
@RequestMapping("/cal/{tableName}/{columnName}")
public R cal(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
Map<String, Object> result = commonService.selectCal(params);
return R.ok().put("data", result);
}
/**
* 分组统计
*/
@IgnoreAuth
@RequestMapping("/group/{tableName}/{columnName}")
public R group(@PathVariable("tableName") String tableName, @PathVariable("columnName") String columnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("column", columnName);
List<Map<String, Object>> result = commonService.selectGroup(params);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计)
*/
@IgnoreAuth
@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}")
public R value(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
List<Map<String, Object>> result = commonService.selectValue(params);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
/**
* (按值统计)时间统计类型
*/
@IgnoreAuth
@RequestMapping("/value/{tableName}/{xColumnName}/{yColumnName}/{timeStatType}")
public R valueDay(@PathVariable("tableName") String tableName, @PathVariable("yColumnName") String yColumnName, @PathVariable("xColumnName") String xColumnName, @PathVariable("timeStatType") String timeStatType) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("table", tableName);
params.put("xColumn", xColumnName);
params.put("yColumn", yColumnName);
params.put("timeStatType", timeStatType);
List<Map<String, Object>> result = commonService.selectTimeStatValue(params);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
for(Map<String, Object> m : result) {
for(String k : m.keySet()) {
if(m.get(k) instanceof Date) {
m.put(k, sdf.format((Date)m.get(k)));
}
}
}
return R.ok().put("data", result);
}
}
DiscusskechengxinxiController.java
package com.controller;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.text.ParseException;
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.transaction.annotation.Transactional;
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.DiscusskechengxinxiEntity;
import com.entity.view.DiscusskechengxinxiView;
import com.service.DiscusskechengxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
import java.io.IOException;
/**
* 课程信息评论表
* 后端接口
* @author
* @email
* @date 2023-03-02 11:33:51
*/
@RestController
@RequestMapping("/discusskechengxinxi")
public class DiscusskechengxinxiController {
@Autowired
private DiscusskechengxinxiService discusskechengxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscusskechengxinxiEntity discusskechengxinxi,
HttpServletRequest request){
EntityWrapper<DiscusskechengxinxiEntity> ew = new EntityWrapper<DiscusskechengxinxiEntity>();
PageUtils page = discusskechengxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusskechengxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscusskechengxinxiEntity discusskechengxinxi,
HttpServletRequest request){
EntityWrapper<DiscusskechengxinxiEntity> ew = new EntityWrapper<DiscusskechengxinxiEntity>();
PageUtils page = discusskechengxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discusskechengxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DiscusskechengxinxiEntity discusskechengxinxi){
EntityWrapper<DiscusskechengxinxiEntity> ew = new EntityWrapper<DiscusskechengxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusskechengxinxi, "discusskechengxinxi"));
return R.ok().put("data", discusskechengxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DiscusskechengxinxiEntity discusskechengxinxi){
EntityWrapper< DiscusskechengxinxiEntity> ew = new EntityWrapper< DiscusskechengxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discusskechengxinxi, "discusskechengxinxi"));
DiscusskechengxinxiView discusskechengxinxiView = discusskechengxinxiService.selectView(ew);
return R.ok("查询课程信息评论表成功").put("data", discusskechengxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscusskechengxinxiEntity discusskechengxinxi = discusskechengxinxiService.selectById(id);
return R.ok().put("data", discusskechengxinxi);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscusskechengxinxiEntity discusskechengxinxi = discusskechengxinxiService.selectById(id);
return R.ok().put("data", discusskechengxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscusskechengxinxiEntity discusskechengxinxi, HttpServletRequest request){
discusskechengxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusskechengxinxi);
discusskechengxinxiService.insert(discusskechengxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscusskechengxinxiEntity discusskechengxinxi, HttpServletRequest request){
discusskechengxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discusskechengxinxi);
discusskechengxinxiService.insert(discusskechengxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody DiscusskechengxinxiEntity discusskechengxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discusskechengxinxi);
discusskechengxinxiService.updateById(discusskechengxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discusskechengxinxiService.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<DiscusskechengxinxiEntity> wrapper = new EntityWrapper<DiscusskechengxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discusskechengxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
list.vue
<template>
<div class="main-content">
<!-- 列表页 -->
<template v-if="showFlag">
<el-form class="center-form-pv" :style='{"margin":"0 0 20px"}' :inline="true" :model="searchForm">
<el-row :style='{"display":"block"}' >
<div :style='{"width":"auto","margin":"0 10px 30px 0","background":"none","display":"inline-block"}'>
<label :style='{"padding":"0 10px","margin":"0 10px 0 0","color":"#000","display":"inline-block","lineHeight":"40px","fontSize":"14px","fontWeight":"500","height":"40px"}' class="item-label">课程名称</label>
<el-input v-model="searchForm.kechengmingcheng" placeholder="课程名称" clearable></el-input>
</div>
<el-button :style='{"border":"1px solid #4662A1","cursor":"pointer","padding":"0 24px","boxShadow":"0 2px 0 0 #97C9D6","outline":"none","margin":"0 10px","color":"#4662A1","borderRadius":"0","background":"#fff","width":"auto","fontSize":"14px","height":"40px"}' type="success" @click="search()">查询</el-button>
</el-row>
<el-row :style='{"margin":"40px 0","display":"flex"}'>
<el-button :style='{"border":"1px solid #4662A1","cursor":"pointer","padding":"0 24px","boxShadow":"0 2px 0 0 #97C9D6","margin":"0 10px 0 0","outline":"none","color":"#4662A1","borderRadius":"0","background":"#fff","width":"auto","fontSize":"14px","height":"40px"}' v-if="isAuth('pigaizuoye','新增')" type="success" @click="addOrUpdateHandler()">新增</el-button>
<el-button :style='{"border":"1px solid #4662A1","cursor":"pointer","padding":"0 24px","boxShadow":"0 2px 0 0 #97C9D6","margin":"0 10px 0 0","outline":"none","color":"#4662A1","borderRadius":"0","background":"#fff","width":"auto","fontSize":"14px","height":"40px"}' v-if="isAuth('pigaizuoye','删除')" :disabled="dataListSelections.length <= 0" type="danger" @click="deleteHandler()">删除</el-button>
</el-row>
</el-form>
<!-- <div> -->
<el-table class="tables"
:stripe='false'
:style='{"padding":"0","boxShadow":"0px 4px 10px 0px rgba(0,0,0,0.3020)","borderColor":"#eee","borderRadius":"30px","borderWidth":"1px 0 0 1px","background":"#fff","width":"100%","borderStyle":"solid"}'
v-if="isAuth('pigaizuoye','查看')"
:data="dataList"
v-loading="dataListLoading"
@selection-change="selectionChangeHandler">
<el-table-column :resizable='true' type="selection" align="center" width="50"></el-table-column>
<el-table-column :resizable='true' :sortable='false' label="索引" type="index" width="50" />
<el-table-column :resizable='true' :sortable='false'
prop="kechengmingcheng"
label="课程名称">
<template slot-scope="scope">
{{scope.row.kechengmingcheng}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="kechengfenlei"
label="课程分类">
<template slot-scope="scope">
{{scope.row.kechengfenlei}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="jiaoshizhanghao"
label="教师账号">
<template slot-scope="scope">
{{scope.row.jiaoshizhanghao}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="jiaoshixingming"
label="教师姓名">
<template slot-scope="scope">
{{scope.row.jiaoshixingming}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="lianxifangshi"
label="联系方式">
<template slot-scope="scope">
{{scope.row.lianxifangshi}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="zhanghao"
label="账号">
<template slot-scope="scope">
{{scope.row.zhanghao}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="xueshengxingming"
label="学生姓名">
<template slot-scope="scope">
{{scope.row.xueshengxingming}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="pigairiqi"
label="批改日期">
<template slot-scope="scope">
{{scope.row.pigairiqi}}
</template>
</el-table-column>
<el-table-column :resizable='true' :sortable='false'
prop="pingfen"
label="评分">
<template slot-scope="scope">
{{scope.row.pingfen}}
</template>
</el-table-column>
<el-table-column width="300" label="操作">
<template slot-scope="scope">
<el-button :style='{"border":"0","cursor":"pointer","padding":"0 24px","margin":"0 10px 6px 0","outline":"none","color":"#fff","borderRadius":"30px","background":"#4662A1","width":"auto","fontSize":"14px","height":"32px"}' v-if=" isAuth('pigaizuoye','查看')" type="success" size="mini" @click="addOrUpdateHandler(scope.row.id,'info')">详情</el-button>
<el-button :style='{"border":"0","cursor":"pointer","padding":"0 24px","margin":"0 10px 6px 0","outline":"none","color":"#fff","borderRadius":"30px","background":"#4662A1","width":"auto","fontSize":"14px","height":"32px"}' v-if=" isAuth('pigaizuoye','修改')" type="primary" size="mini" @click="addOrUpdateHandler(scope.row.id)">修改</el-button>
<el-button :style='{"border":"0","cursor":"pointer","padding":"0 24px","margin":"0 10px 6px 0","outline":"none","color":"#fff","borderRadius":"30px","background":"#4662A1","width":"auto","fontSize":"14px","height":"32px"}' v-if="isAuth('pigaizuoye','删除') " type="danger" size="mini" @click="deleteHandler(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
background
:page-sizes="[10, 20, 30, 50]"
:page-size="pageSize"
:layout="layouts.join()"
:total="totalPage"
prev-text="<"
next-text=">"
:hide-on-single-page="true"
:style='{"width":"100%","padding":"0","margin":"20px 0 0","whiteSpace":"nowrap","color":"#333","fontWeight":"500"}'
></el-pagination>
<!-- </div> -->
</template>
<!-- 添加/修改页面 将父组件的search方法传递给子组件-->
<add-or-update v-if="addOrUpdateFlag" :parent="this" ref="addOrUpdate"></add-or-update>
</div>
</template>
<script>
import axios from 'axios'
import AddOrUpdate from "./add-or-update";
export default {
data() {
return {
searchForm: {
key: ""
},
form:{},
dataList: [],
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
showFlag: true,
sfshVisiable: false,
shForm: {},
chartVisiable: false,
chartVisiable1: false,
chartVisiable2: false,
chartVisiable3: false,
chartVisiable4: false,
chartVisiable5: false,
addOrUpdateFlag:false,
layouts: ["total","prev","pager","next","sizes","jumper"],
};
},
created() {
this.init();
this.getDataList();
this.contentStyleChange()
},
mounted() {
},
filters: {
htmlfilter: function (val) {
return val.replace(/<[^>]*>/g).replace(/undefined/g,'');
}
},
components: {
AddOrUpdate,
},
methods: {
contentStyleChange() {
this.contentPageStyleChange()
},
// 分页
contentPageStyleChange(){
let arr = []
// if(this.contents.pageTotal) arr.push('total')
// if(this.contents.pageSizes) arr.push('sizes')
// if(this.contents.pagePrevNext){
// arr.push('prev')
// if(this.contents.pagePager) arr.push('pager')
// arr.push('next')
// }
// if(this.contents.pageJumper) arr.push('jumper')
// this.layouts = arr.join()
// this.contents.pageEachNum = 10
},
init () {
},
search() {
this.pageIndex = 1;
this.getDataList();
},
// 获取数据列表
getDataList() {
this.dataListLoading = true;
let params = {
page: this.pageIndex,
limit: this.pageSize,
sort: 'id',
order: 'desc',
}
if(this.searchForm.kechengmingcheng!='' && this.searchForm.kechengmingcheng!=undefined){
params['kechengmingcheng'] = '%' + this.searchForm.kechengmingcheng + '%'
}
this.$http({
url: "pigaizuoye/page",
method: "get",
params: params
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.data.list;
this.totalPage = data.data.total;
} else {
this.dataList = [];
this.totalPage = 0;
}
this.dataListLoading = false;
});
},
// 每页数
sizeChangeHandle(val) {
this.pageSize = val;
this.pageIndex = 1;
this.getDataList();
},
// 当前页
currentChangeHandle(val) {
this.pageIndex = val;
this.getDataList();
},
// 多选
selectionChangeHandler(val) {
this.dataListSelections = val;
},
// 添加/修改
addOrUpdateHandler(id,type) {
this.showFlag = false;
this.addOrUpdateFlag = true;
this.crossAddOrUpdateFlag = false;
if(type!='info'){
type = 'else';
}
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id,type);
});
},
// 下载
download(file){
window.open(`${file}`)
},
// 删除
deleteHandler(id) {
var ids = id
? [Number(id)]
: this.dataListSelections.map(item => {
return Number(item.id);
});
this.$confirm(`确定进行[${id ? "删除" : "批量删除"}]操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$http({
url: "pigaizuoye/delete",
method: "post",
data: ids
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.search();
}
});
} else {
this.$message.error(data.msg);
}
});
});
},
}
};
</script>
<style lang="scss" scoped>
.center-form-pv {
.el-date-editor.el-input {
width: auto;
}
}
.el-input {
width: auto;
}
// form
.center-form-pv .el-input /deep/ .el-input__inner {
border: 1px solid #4662A1;
border-radius: 0;
padding: 0 12px;
box-shadow: 0px 10px 0px 10px #4662A1;
outline: none;
color: #000;
width: 170px;
font-size: 14px;
height: 40px;
}
.center-form-pv .el-select /deep/ .el-input__inner {
border: 1px solid #4662A1;
border-radius: 0;
padding: 0 10px;
box-shadow: 0px 10px 0px 10px #4662A1;
outline: none;
color: #000;
width: 170px;
font-size: 14px;
height: 40px;
}
.center-form-pv .el-date-editor /deep/ .el-input__inner {
border: 1px solid #4662A1;
border-radius: 0;
padding: 0 10px 0 30px;
box-shadow: 0px 10px 0px 10px #4662A1;
outline: none;
color: rgba(64, 158, 255, 1);
width: 170px;
font-size: 14px;
height: 40px;
}
// table
.el-table /deep/ .el-table__header-wrapper thead {
color: #999;
font-weight: 500;
width: 100%;
}
.el-table /deep/ .el-table__header-wrapper thead tr {
background: #D4D4D4;
}
.el-table /deep/ .el-table__header-wrapper thead tr th {
padding: 12px 0;
color: #000;
background: transparent;
border-color: #eee;
border-width: 0 1px 1px 0;
border-style: solid;
text-align: center;
}
.el-table /deep/ .el-table__header-wrapper thead tr th .cell {
padding: 0 10px;
word-wrap: normal;
word-break: break-all;
white-space: normal;
font-weight: bold;
display: inline-block;
vertical-align: middle;
width: 100%;
line-height: 24px;
position: relative;
text-overflow: ellipsis;
}
.el-table /deep/ .el-table__body-wrapper tbody {
width: 100%;
}
.el-table /deep/ .el-table__body-wrapper tbody tr {
background: #fff;
}
.el-table /deep/ .el-table__body-wrapper tbody tr td {
padding: 12px 0;
color: #999;
background: #fff;
border-color: #6F6F97;
border-width: 0 1px 1px 0;
border-style: solid;
text-align: center;
}
.el-table /deep/ .el-table__body-wrapper tbody tr:hover td {
padding: 12px 0;
color: #000;
background: #EFEFF0;
border-color: #6F6F97;
border-width: 0 1px 1px 0;
border-style: solid;
}
.el-table /deep/ .el-table__body-wrapper tbody tr td {
padding: 12px 0;
color: #999;
background: #fff;
border-color: #6F6F97;
border-width: 0 1px 1px 0;
border-style: solid;
text-align: center;
}
.el-table /deep/ .el-table__body-wrapper tbody tr td .cell {
padding: 0 10px;
overflow: hidden;
word-break: break-all;
white-space: normal;
line-height: 24px;
text-overflow: ellipsis;
}
// pagination
.main-content .el-pagination /deep/ .el-pagination__total {
margin: 0 10px 0 0;
color: #666;
font-weight: 400;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
height: 28px;
}
.main-content .el-pagination /deep/ .btn-prev {
border: none;
border-radius: 2px;
padding: 0;
margin: 0 5px;
color: #666;
background: #f4f4f5;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
min-width: 35px;
height: 28px;
}
.main-content .el-pagination /deep/ .btn-next {
border: none;
border-radius: 2px;
padding: 0;
margin: 0 5px;
color: #666;
background: #f4f4f5;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
min-width: 35px;
height: 28px;
}
.main-content .el-pagination /deep/ .btn-prev:disabled {
border: none;
cursor: not-allowed;
border-radius: 2px;
padding: 0;
margin: 0 5px;
color: #C0C4CC;
background: #f4f4f5;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
height: 28px;
}
.main-content .el-pagination /deep/ .btn-next:disabled {
border: none;
cursor: not-allowed;
border-radius: 2px;
padding: 0;
margin: 0 5px;
color: #C0C4CC;
background: #f4f4f5;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pager {
padding: 0;
margin: 0;
display: inline-block;
vertical-align: top;
}
.main-content .el-pagination /deep/ .el-pager .number {
cursor: pointer;
padding: 0 4px;
margin: 0 5px;
color: #666;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
border-radius: 2px;
background: #f4f4f5;
text-align: center;
min-width: 30px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pager .number:hover {
cursor: pointer;
padding: 0 4px;
margin: 0 5px;
color: #fff;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
border-radius: 2px;
background: #4662A1;
text-align: center;
min-width: 30px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pager .number.active {
cursor: default;
padding: 0 4px;
margin: 0 5px;
color: #FFF;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
border-radius: 2px;
background: #4662A1;
text-align: center;
min-width: 30px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pagination__sizes {
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pagination__sizes .el-input {
margin: 0 5px;
width: 100px;
position: relative;
}
.main-content .el-pagination /deep/ .el-pagination__sizes .el-input .el-input__inner {
border: 1px solid #DCDFE6;
cursor: pointer;
padding: 0 25px 0 8px;
color: #606266;
display: inline-block;
font-size: 13px;
line-height: 28px;
border-radius: 3px;
outline: 0;
background: #FFF;
width: 100%;
text-align: center;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pagination__sizes .el-input span.el-input__suffix {
top: 0;
position: absolute;
right: 0;
height: 100%;
}
.main-content .el-pagination /deep/ .el-pagination__sizes .el-input .el-input__suffix .el-select__caret {
cursor: pointer;
color: #C0C4CC;
width: 25px;
font-size: 14px;
line-height: 28px;
text-align: center;
}
.main-content .el-pagination /deep/ .el-pagination__jump {
margin: 0 0 0 24px;
color: #606266;
display: inline-block;
vertical-align: top;
font-size: 13px;
line-height: 28px;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pagination__jump .el-input {
border-radius: 3px;
padding: 0 2px;
margin: 0 2px;
display: inline-block;
width: 50px;
font-size: 14px;
line-height: 18px;
position: relative;
text-align: center;
height: 28px;
}
.main-content .el-pagination /deep/ .el-pagination__jump .el-input .el-input__inner {
border: 1px solid #DCDFE6;
cursor: pointer;
padding: 0 3px;
color: #606266;
display: inline-block;
font-size: 14px;
line-height: 28px;
border-radius: 3px;
outline: 0;
background: #FFF;
width: 100%;
text-align: center;
height: 28px;
}
</style>