智慧党建系统设计与实现_1i659

news2024/11/27 22:45:24

@TOC

springboot629智慧党建系统设计与实现_1i659--论文

研究背景

近年来,由于计算机技术和互联网技术的快速发展,使得所有企事业单位内部都是数字化、信息化、无纸化的发展趋势,随着趋势的发展,各种决策系统、辅助系统也应运而生,其中,智慧党建系统就是其中的重要组成部分[1]。

智慧党建管理工作向来都是在党建管理中不可或缺的一部分,然而多年以来人们大都习惯使用传统方法,即人工来完成党建的管理,但是这种方法存在着工作效率低以及保密性差的问题,同时还会生成大量的文本和数据,在检索数据时极大不便。随着科技发展进步,我们已进入了信息化社会,仅仅依靠传统的表格管理方式已不能适应时代的要求。因此使用计算机来进行接手传统方式的党建管理已经势在必行。

而通过计算机技术来实现的智慧党建系统拥有对信息的快速检索、保存了大量的党建信息、信息系统保存的稳定性高和维护成本低等优点,对智慧党建管理的工作效率也能提高。如今,传统的人工管理方法、文件和图表打印等信息传输方法已经不能满足当下公司的发展需求,计算机科学与互联网技术的蓬勃发展,颠覆了人们的生活以及思维方式。智慧党建系统的出现,利用信息技术将智慧党建管理融于办公平台中,提高管理水平的有利手段,将会成为未来智慧党建管理的新模式。

1.2 课题研究意义

在当下,办公自动化以一种迅速并不可阻挡的速度在慢慢遍布到社会的每一个角落中,而智慧党建系统正是办公自动化的一个小小分支,解决了传统党建管理中繁杂且重复的操作,提高了工作的效率。

对于大部分的企事业单位来说,智慧党建系统对于管理人员进行管理来说是非常重要的,站在管理者的角度也一样。智慧党建系统应该做到让管理人员进行快捷的信息查询以及对信息的处理功能。然而,大多数的还没有使用电子化管理来进行智慧党建管理工作的意识,还是使用传统的人工管理方法。如今,伴随着计算机科学的不断发展,互联网科技的日渐成熟,计算机所带来的种种优势已经逐渐为人们所认识,它已经应用在社会中的各个领域中并且越来越重要,利用计算机将智慧党建信息进行电子化、系统化的管理能将智慧党建管理的效率提上一个台阶。所以,开发一套智慧党建系统,将党建信息进行电子化、系统化的管理,代替了传统的人工管理方式,提升了工作效率。

  1. 无纸化办公,节省了时间,减少了纸张的浪费同时节约了成本。
  2. 加快了信息传输的过程,使智慧党建管理更规范和科学。
  3. 利用计算机处理速度快、信息存储量大的特点,将党建管理工作信息化,可以积累和管理大量的数据。
  4. 对数据进行有效并且集中的管理,实现了用户信息的共享,使党建管理工作可以从传统的人工管理中解放出来,提升了工作的效率,使其有更多的时间去完成更多的工作,来提高自身的业务素质。

1.3 课题研究内容

本系统结合现今智慧党建系统的功能模块以及设计方式进行分析,使用Java语言和Springboot框架进行开发设计,具体研究内容如下:

  1. 系统管理员主要对个人中心、党员管理、党支部管理、党建要闻管理、党建地图管理、党建学习管理、学习心得管理、党费缴纳管理、党建活动管理、活动报名管理、问卷调查管理、问卷回答管理、民主投票管理、投票信息管理、试题管理、学习测试管理、系统管理、考试管理等功能进行管理。
  2. 党支部主要对个人中心、党员管理、党费缴纳管理、党建活动管理、活动报名管理等功能进行管理。
  3. 党员主要对个人中心、学习心得管理、党费缴纳管理、活动报名管理、问卷回答管理、投票信息管理等功能进行管理。

2 系统开发环境及相关技术

2.1 系统开发环境

本管理系统采用的集成开发环境为IntelliJ IDEA,使用Java等语言及Springboot框架进行开发,其中硬件环境和软件环境如下:

  1. 硬件环境

处理器:Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz 3.00GHz

内存:8GB

  1. 软件环境

操作系统:windows 10 64位操作系统

开发工具:IntelliJ IDEA 2019.1

2.2 系统开发技术

智慧党建系统采用B/S(Browser/Server)架构和MVC模型进行设计开发。在B/S架构下,用户在浏览器端进行使用,主要工作通过服务器端进行实现,用户通过网站进行访问大大节约了成本。本系统使用Java等语言同时运用了Springboot框架进行开发,使用MySQL进行数据存储。

2.2.1 Java技术

Java是一种在Web应用开发中得到广泛使用的脚本语言,经常被用来对用户的相关行为做出反应。它还具有面向对象的设计能力,使设计开发过程更加直观和模块化,并在HTML基础上进行交互Web页面的开发[9]。这种脚本语言的问世,使用户与页面之间的实时、动态交互成为现实,丰富了页面的内容,增强了页面的活力。另外,Java技术也被广泛地运用于该系统,比如对用户输入的数据进行检测,以保证其有效性。Java技术[10]可以在不依赖Web服务程序的基础上在本地客户机上运行。从而有效地解决了因网络速度所带来的迟缓问题,使用户能够更加顺畅、快捷地进行访问。一些功能,比如用户的数据输入,可以通过JavaScript这样的客户语言来完成。该系统采用Java客户机进行用户身份认证,确保了系统的安全性和可靠性。

2.2.2 SpringBoot框架

Spring Boot是由Pivotal的开发团队在2013年开发的一个免费、轻量级、开源的系统框架。SpringBoot的主要设计思想是约定大于配置,因此SpringBoot在设计时几乎达到零配置。SpringBoot集成了业界的开源框架。

SpringBoot是一个非常强大的后台框架,因为SpringBoot的开发基本上不需要写配置文件,所以利用SpringBoot来构建网站的后台环境,在SpringBoot的YML配置文件中写项目启动端口,项目就可以启动了。项目的Java和静态文件由SpringBoot管理。

2.2.3 MySQL数据库

MySql做为瑞典公司MySql AB开发的中小型开源数据库智能管理系统,具备配备低、低成本、运作速度更快的优势。与此同时,因为社区版的开源系统性,变成了许多网址减少开发成本费的最佳选择。被甲骨文回收后,MySQL也发布了商业版。另外Mysql具有以下特性:

(1)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

(2)为C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等多种编程语言提供了API。

(3)采用多线程并行的方法提高了CPU的利用率。

(4)改善算法,有效地提高查询速度。

2.2.4 B/S结构

B/S结构就是指系统客户端与服务器分离,客户端通过浏览器访问服务端进行操作[10]。

B/S结构目前广泛应用于绝大部分系统搭建中,这种结构摒弃C/S结构客户端服务端不分离的缺点,具有更多的优势:

(1)跨平台性:B/S的标准由标准化组织确立,适用于绝大多数的系统搭建,通用于应用之间。

(2)低维护成本:客户端和服务器端分离,减轻了两端的压力,尤其是客户端,对客户端设备,硬件、软件要求都比较低,并且系统需要升级或维护时,只需要在服务器端升级或维护就可以,使相应的费用减少。

3 系统需求分析

在当今的社会生活中,互联网已经变得非常普遍和重要。充分利用互联网大数据等技术可以解决很多问题。目前,智慧党建管理也面临着自身的问题。根据这一普遍现象,党建管理制度的出现需求巨大。该系统可以很好地解决这些问题。系统中这三类用户的数据在系统中非常关键,因此系统数据应该被组织起来,因为数据是以某种格式存储的,而不是无序的。其概念是,它可以根据长期稳定的格式在计算机内存中共享。数据库管理系统主要用于保存、修改和添加索引数据以及设置数据库。为了确保系统数据管理的顺利进行,一些有能力的处理器可以在不需要专业人员处理的情况下管理数据。创建数据表时,可以调整、重新组织和重建数据表中的数据,以确保数据可靠性。在数据库系统设计中,MySQL主要用于实现数据的集中管理。各方面表现良好。

2.1 可行性分析

根据智慧党建系统的功能,通过对经济效益、技术难点和管理方法进行全面的可行性分析,提供准确的可行性依据。以下是本系统的可行性分析:

  1. 经济可行性

使用了免费版的IntelliJ IDEA节省了开发成本,在购买服务器后部署项目便能通过浏览器进行访问。

  1. 技术可行性

本管理系统采用B/S架构进行设计,通过分层分包的方法,有利于日常的维护,同时降低了代码之间的耦合。

  1. 管理可行性

本管理系统要求管理难度低,只需要有管理员就能够对个人中心、党员管理、党支部管理、党建要闻管理、党建地图管理、党建学习管理、学习心得管理、党费缴纳管理、党建活动管理、活动报名管理、问卷调查管理、问卷回答管理、民主投票管理、投票信息管理、试题管理、学习测试管理、系统管理、考试管理等进行删除、修改和新增等操作。

3.2 功能需求分析

智慧党建系统综合网络空间开发设计要求。目的是将智慧党建通过网络平台将传统管理方式转换为在网上管理,完成智慧党建的方便快捷、安全性高、交易规范做了保障,目标明确。智慧党建系统可以将功能划分为管理员的使用功能,党支部的使用功能和党员功能。

(1)、管理员的功能是最高的,可以对系统所在功能进行查询、新增、修改和删除,包括党支部功能和党员功能。管理员用例如下:

图3-1管理员用例图

(2)、党员关键功能包含个人中心、学习心得管理、党费缴纳管理、活动报名管理、问卷回答管理、投票信息管理等有关功能进行管理。党员用例如下:

图3-2党员用例图

(3)、党支部关键功能包含个人中心、党员管理、党费缴纳管理、党建活动管理、活动报名管理等有关功能进行管理。党支部用例如下:

图3-3党支部用例图

3.3 系统流程分析

3.3.1 登录流程

每个用户都有专属的密码和账号,在输入合法的账号和密码之后即可进入系统。登录流程如图3-4所示:

登录流程图

图3-4 登录流程图

3.3.2 添加信息流程

管理层人员有添加角色、党支部和党员等信息功能。添加信息流程如图3-5所示:

C:\Users\lenovo\AppData\Local\Temp\WeChat Files\da8dfc62fa46238fbebe4d324ba8419.jpg

图3-5 添加信息流程图

3.3.3 修改信息流程

管理层人员有修改信息功能。修改信息流程如图3-6所示:

图3-6 修改信息流程图

4 系统设计

4.1 功能模块设计

智慧党建系统按照权限的类型进行划分,分为管理员、党支部和党员三个模块。系统用户实现注册登录、个人信息修改,同时对党员管理、党支部管理、党建要闻管理、党建地图管理、党建学习管理、学习心得管理、党费缴纳管理、党建活动管理、活动报名管理、问卷调查管理、问卷回答管理、民主投票管理、投票信息管理、试题管理、学习测试管理、系统管理、考试管理等功能进行操作,增强了系统用户的操作体验。管理员模块主要针对整个系统的管理进行设计,提高了管理的效率和标准。系统的总体模块设计如下图所示:

图4-1 系统总体模块设计

4.2 系统数据库设计

4.2.1 数据库系统

本系统采用MySQL来进行数据库的管理。MySQL数据库具有体积小、速度快、成本低等优点。具备同时处理数千万条记录,实现大型数据库的高并发读写和高效读写需求。

4.2.2 数据库概念设计

概念模型用于对信息世界建模,并与指定的数据库管理系统分离。它有助于将真实世界的事物抽象为适合于数据库管理系统的数据库模型。人们倾向于将现实世界抽象为信息世界,再把信息世界变成机器世界。也就是说,将现实世界的目标抽象成独立于专用计算机软件和专用数据库管理系统的信息结构的数据模型,然后将物理模型转化为适合电子计算机的数据库管理系统。事实上,数据模型是从真实世界到机器世界的中间层。

信息世界的基本要素包括实体和关联。现实存在且彼此可区别的事物称为实体。实体可以是实际的人、事或物,还可以是抽象化的概念或联络。以下是对部分主要的关键实体如下:

党建学习实体属性图如下图4-2所示。

图4-2党建学习实体属性图

党建活动实体属性图如下图4-3所示。

图4-3党建活动实体属性图

民主投票实体属性图如下图4-4所示。

图4-4民主投票实体属性图

活动报名实体属性图如下图4-5所示。

图4-5活动报名实体属性图

4.2.3 数据表设计

本设计根据数据表管理系统的具体流程进行管理,方便管理员、计划员和工艺员对数据的添加、删除、修改和查询等操作。

4.2.4 数据表的建立

系统采用Navicat Premium对数据库进行操作,数据库管理操作简单,数据处理能力强。数据表建立如下:

表4-1:配置文件

字段名称类型长度字段说明主键默认值
idbigint主键主键
namevarchar100配置参数名称
valuevarchar100配置参数值

表4-2:党建要闻评论表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

表4-3:党建学习评论表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

表4-4:党建地图评论表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
refidbigint关联表id
useridbigint用户id
avatarurllongtext4294967295头像
nicknamevarchar200用户名
contentlongtext4294967295评论内容
replylongtext4294967295回复内容

表4-5:用户表

字段名称类型长度字段说明主键默认值
idbigint主键主键
usernamevarchar100用户名
passwordvarchar100密码
rolevarchar100角色管理员
addtimetimestamp新增时间CURRENT_TIMESTAMP

表4-6:token表

字段名称类型长度字段说明主键默认值
idbigint主键主键
useridbigint用户id
usernamevarchar100用户名
tablenamevarchar100表名
rolevarchar100角色
tokenvarchar200密码
addtimetimestamp新增时间CURRENT_TIMESTAMP
expiratedtimetimestamp过期时间CURRENT_TIMESTAMP

表4-7:收藏表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint用户id
refidbigint商品id
tablenamevarchar200表名
namevarchar200名称
picturelongtext4294967295图片
typevarchar200类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注)1
inteltypevarchar200推荐类型
remarkvarchar200备注

表4-8:考试记录表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
useridbigint用户id
usernamevarchar200用户名
paperidbigint学习测试id(外键)
papernamevarchar200学习测试名称
questionidbigint试题id(外键)
questionnamevarchar200试题名称
optionslongtext4294967295选项,json字符串
scorebigint分值0
answervarchar200正确答案
analysislongtext4294967295答案解析
myscorebigint试题得分0
myanswervarchar200考生答案

表4-9:试题表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
paperidbigint所属学习测试id(外键)
papernamevarchar200学习测试名称
questionnamevarchar200试题名称
optionslongtext4294967295选项,json字符串
scorebigint分值0
answervarchar200正确答案
analysislongtext4294967295答案解析
typebigint试题类型,0:单选题 1:多选题 2:判断题 3:填空题(暂不考虑多项填空)0
sequencebigint试题排序,值越大排越前面100

表4-10:学习测试表

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
namevarchar200学习测试名称
timeint考试时长(分钟)
statusint学习测试状态0

表4-11:学习心得

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
ziliaobianhaovarchar200资料编号
ziliaomingchengvarchar200资料名称
xuexixindelongtext4294967295学习心得
xuexishijiandatetime学习时间
dangyuanzhanghaovarchar200党员账号
dangyuanxingmingvarchar200党员姓名
crossuseridbigint跨表用户id
crossrefidbigint跨表主键id

表4-12:问卷回答

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
wenjuanbiaotivarchar200问卷标题
wenjuanhuidavarchar200问卷回答
diaochashijiandatetime调查时间
dangyuanzhanghaovarchar200党员账号
dangyuanxingmingvarchar200党员姓名
crossuseridbigint跨表用户id
crossrefidbigint跨表主键id

表4-13:问卷调查

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
wenjuanbiaotivarchar200问卷标题
tupianlongtext4294967295图片
wenjuanneironglongtext4294967295问卷内容
daanyivarchar200答案一
daanervarchar200答案二
daansanvarchar200答案三
daansivarchar200答案四
fabushijiandatetime发布时间

表4-14:党支部

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
zhibuzhanghaovarchar200支部账号
mimavarchar200密码
zhibumingchengvarchar200支部名称
fuzerenvarchar200负责人
lianxidianhuavarchar200联系电话
zhibudizhivarchar200支部地址

表4-15:党员

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dangyuanzhanghaovarchar200党员账号
mimavarchar200密码
dangyuanxingmingvarchar200党员姓名
touxianglongtext4294967295头像
lianxifangshivarchar200联系方式
nianlingint年龄
xingbievarchar200性别
xuelivarchar200学历
shenfenzhenghaovarchar200身份证号
rudangshijiandate入党时间
zhibuzhanghaovarchar200支部账号
zhibumingchengvarchar200支部名称

表4-16:投票信息

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dangyuanzhanghaovarchar200党员账号
dangyuanxingmingvarchar200党员姓名
toupiaozhutivarchar200投票主题
xuanxiangaint选项a
xuanxiangbint选项b
xuanxiangcint选项c
xuanxiangdint选项d
toupiaoshijiandatetime投票时间
crossuseridbigint跨表用户id
crossrefidbigint跨表主键id

表4-17:党建要闻

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dangjianbiaotivarchar200党建标题
fengmianlongtext4294967295封面
jianjielongtext4294967295简介
shipinlongtext4294967295视频
xiangqingneironglongtext4294967295详情内容
fabushijiandate发布时间
thumbsupnumint0
crazilynumint0

表4-18:党建学习

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
ziliaobianhaovarchar200资料编号
ziliaomingchengvarchar200资料名称
tupianlongtext4294967295图片
ziliaojianjielongtext4294967295资料简介
shipinlongtext4294967295视频
fujianxiazailongtext4294967295附件下载
fabushijiandatetime发布时间

表4-19:党建活动

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
huodongmingchengvarchar200活动名称
huodongtupianlongtext4294967295活动图片
huodongdidianvarchar200活动地点
huodongshijiandatetime活动时间
huodongrenshuvarchar200活动人数
huodongneironglongtext4294967295活动内容
fabushijiandatetime发布时间
zhibuzhanghaovarchar200支部账号
zhibumingchengvarchar200支部名称

表4-20:民主投票

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
toupiaozhutivarchar200投票主题
fengmianlongtext4294967295封面
xuanxiangaint选项a
xuanxiangbint选项b
xuanxiangcint选项c
xuanxiangdint选项d
toupiaoneironglongtext4294967295投票内容
fabushijiandatetime发布时间
reversetimedatetime倒计结束时间

表4-21:党建地图

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
ditumingchengvarchar200地图名称
fengmianlongtext4294967295封面
dituxiangqinglongtext4294967295地图详情
fabushijiandatetime发布时间

表4-22:活动报名

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
huodongmingchengvarchar200活动名称
huodongdidianvarchar200活动地点
huodongshijianvarchar200活动时间
baomingshijiandatetime报名时间
beizhuvarchar200备注
dangyuanzhanghaovarchar200党员账号
dangyuanxingmingvarchar200党员姓名
lianxifangshivarchar200联系方式
zhibuzhanghaovarchar200支部账号
zhibumingchengvarchar200支部名称
crossuseridbigint跨表用户id
crossrefidbigint跨表主键id
sfshvarchar200是否审核待审核
shhflongtext4294967295审核回复

表4-23:党费缴纳

字段名称类型长度字段说明主键默认值
idbigint主键主键
addtimetimestamp创建时间CURRENT_TIMESTAMP
dangyuanzhanghaovarchar200党员账号
dangyuanxingmingvarchar200党员姓名
xingbievarchar200性别
lianxifangshivarchar200联系方式
zhibuzhanghaovarchar200支部账号
zhibumingchengvarchar200支部名称
dangfeifloat党费
yuefenvarchar200月份
ispayvarchar200是否支付未支付

5 系统实现

5.1系统功能实现

当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到系统的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图5-1所示:

图5-1 系统首页界面

党建要闻:在党建要闻页面的输入栏中输入党建标题、简介进行查询,可以查看到党建要闻详细信息,并根据需要进行评论或收藏操作;党建要闻页面如图5-2所示:

图5-2党建要闻详细页面

党建学习:在党建学习页面的输入栏中输入资料名称进行查询,可以查看到党建学习详细信息,党建学习页面如图5-3所示:

图5-3党建学习详细页面

党建活动:在党建活动页面的输入栏中输入活动名称进行查询,可以查看到党建活动详细信息,并根据需要进行报名操作;党建活动页面如图5-4所示:

图5-4党建活动详细页面

问卷调查:在问卷调查页面的输入栏中输入问卷标题进行查询,可以查看到问卷调查详细信息,并进行问卷回答操作;问卷调查页面如图5-5所示:

图5-5问卷调查详细页面

民主投票:在民主投票页面的输入栏中输入投票主题进行查询,可以查看到民主投票详细信息,并进行投票操作;民主投票页面如图5-6所示:

图5-6民主投票详细页面

学习测试:在学习测试页面可以查看学习测试名称、考试时长、创建时间等信息,并进行考试操作;党建要闻页面如图5-7所示:

图5-7学习测试详细页面

个人中心:在个人中心页面通过填写个人详细信息进行信息更新操作,还可以对考试管理、错题本、我的收藏进行详细操作;如图5-8所示:

图5-8个人中心界面

5.2后台模块实现

后台用户登录,在登录页面选择需要登录的角色,在正确输入用户名和密码后,进入操作系统进行操作;如图5-9所示。

图5-9 后台登录界面

5.2.1管理员模块实现

管理员进入主页面,主要功能包括对个人中心、党员管理、党支部管理、党建要闻管理、党建地图管理、党建学习管理、学习心得管理、党费缴纳管理、党建活动管理、活动报名管理、问卷调查管理、问卷回答管理、民主投票管理、投票信息管理、试题管理、学习测试管理、系统管理、考试管理等进行操作。管理员主页面如图5-10所示:

图5-10管理员主界面

管理员点击党员管理。在党员页面输入党员账号和选择性别进查询、新增、删除、年龄分析或学历统计党员列表,并根据需要对党员详情信息进行详情操作;如图5-11所示:

图5-11党员管理界面

管理员点击党支部管理。在党支部页面输入支部账号进行查询、新增或删除党支部列表,并根据需要对党支部详情信息进行详情、修改或删除操作;如图5-12所示:

图5-12党支部管理界面

管理员点击党建要闻管理。在党建要闻页面输入党建标题、简介进行查询、新增或删除党建要闻列表,并根据需要对党建要闻详情信息进行详情、查看评论、修改或删除操作;如图5-13所示:

图5-13党建要闻管理界面

管理员点击党建地图管理。在党建地图页面输入地图名称进行查询、新增或删除党建地图列表,并根据需要对党建地图详情信息进行详情、查看评论、修改或删除操作;如图5-14所示:

图5-14党建地图管理界面

管理员点击学习心得管理。在学习心得页面输入资料编号、资料名称进行查询或删除学习心得列表,并根据需要对学习心得详情信息进行详情、修改或删除操作;如图5-15所示:

图5-15学习心得管理界面

管理员点击活动报名管理。在活动报名页面输入活动名称、党员姓名、支部名称、是否通过进行查询或删除活动报名列表,并根据需要对活动报名详情信息进行详情操作;如图5-16所示:

图5-16活动报名管理界面

管理员点击问卷调查管理。在问卷调查页面输入问卷标题进查询、新增、删除、年龄分析或学历统计问卷调查列表,并根据需要对问卷调查详情信息进行详情操作;如图5-17所示:

图5-17问卷调查管理界面

管理员点击问卷回答管理。在问卷回答页面输入问卷标题进查询、删除或问卷回答统计问卷回答列表,并根据需要对问卷回答详情信息进行详情、修改或删除操作;如图5-18所示:

图5-18问卷回答管理界面

管理员点击党建活动管理。在党建活动页面输入活动名称进查询、新增或删除党建活动列表,并根据需要对党建活动详情信息进行详情操作;如图5-19所示:

图5-19党建活动管理界面

管理员点击民主投票管理。在民主投票页面输入投票主题进查询、新增或删除民主投票列表,并根据需要对民主投票详情信息进行详情、修改或删除操作;如图5-20所示:

图5-20民主投票管理界面

5.2.2党员模块实现

党员进入系统可以对个人中心、学习心得管理、党费缴纳管理、活动报名管理、问卷回答管理、投票信息管理等功能进行操作。党员主页面如图5-21所示:

图5-21党员主界面

5.2.3党支部模块实现

党支部进入系统可以对个人中心、党员管理、党费缴纳管理、党建活动管理、活动报名管理等功能进行操作。党支部主页面如图5-22所示:

图5-22党支部主界面

系统测试

MinzhutoupiaoController.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.MinzhutoupiaoEntity;
import com.entity.view.MinzhutoupiaoView;

import com.service.MinzhutoupiaoService;
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-08 22:48:08
 */
@RestController
@RequestMapping("/minzhutoupiao")
public class MinzhutoupiaoController {
    @Autowired
    private MinzhutoupiaoService minzhutoupiaoService;


    


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,MinzhutoupiaoEntity minzhutoupiao,
		HttpServletRequest request){
        EntityWrapper<MinzhutoupiaoEntity> ew = new EntityWrapper<MinzhutoupiaoEntity>();

		PageUtils page = minzhutoupiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, minzhutoupiao), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
	@IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,MinzhutoupiaoEntity minzhutoupiao, 
		HttpServletRequest request){
        EntityWrapper<MinzhutoupiaoEntity> ew = new EntityWrapper<MinzhutoupiaoEntity>();

		PageUtils page = minzhutoupiaoService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, minzhutoupiao), params), params));
        return R.ok().put("data", page);
    }

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

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(MinzhutoupiaoEntity minzhutoupiao){
        EntityWrapper< MinzhutoupiaoEntity> ew = new EntityWrapper< MinzhutoupiaoEntity>();
 		ew.allEq(MPUtil.allEQMapPre( minzhutoupiao, "minzhutoupiao")); 
		MinzhutoupiaoView minzhutoupiaoView =  minzhutoupiaoService.selectView(ew);
		return R.ok("查询民主投票成功").put("data", minzhutoupiaoView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        MinzhutoupiaoEntity minzhutoupiao = minzhutoupiaoService.selectById(id);
        return R.ok().put("data", minzhutoupiao);
    }

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



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



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


    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        minzhutoupiaoService.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<MinzhutoupiaoEntity> wrapper = new EntityWrapper<MinzhutoupiaoEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


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









}

DiscussdangjiandituServiceImpl.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.DiscussdangjiandituDao;
import com.entity.DiscussdangjiandituEntity;
import com.service.DiscussdangjiandituService;
import com.entity.vo.DiscussdangjiandituVO;
import com.entity.view.DiscussdangjiandituView;

@Service("discussdangjiandituService")
public class DiscussdangjiandituServiceImpl extends ServiceImpl<DiscussdangjiandituDao, DiscussdangjiandituEntity> implements DiscussdangjiandituService {
	
	
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        Page<DiscussdangjiandituEntity> page = this.selectPage(
                new Query<DiscussdangjiandituEntity>(params).getPage(),
                new EntityWrapper<DiscussdangjiandituEntity>()
        );
        return new PageUtils(page);
    }
    
    @Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<DiscussdangjiandituEntity> wrapper) {
		  Page<DiscussdangjiandituView> page =new Query<DiscussdangjiandituView>(params).getPage();
	        page.setRecords(baseMapper.selectListView(page,wrapper));
	    	PageUtils pageUtil = new PageUtils(page);
	    	return pageUtil;
 	}
    
    @Override
	public List<DiscussdangjiandituVO> selectListVO(Wrapper<DiscussdangjiandituEntity> wrapper) {
 		return baseMapper.selectListVO(wrapper);
	}
	
	@Override
	public DiscussdangjiandituVO selectVO(Wrapper<DiscussdangjiandituEntity> wrapper) {
 		return baseMapper.selectVO(wrapper);
	}
	
	@Override
	public List<DiscussdangjiandituView> selectListView(Wrapper<DiscussdangjiandituEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

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


}

AlipayConfig.java
package com.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
}


list.vue
<template>
	<div class="main-content">
		<!-- 列表页 -->
		<template v-if="showFlag">
			<el-form class="center-form-pv" :style='{"width":"180px","margin":"0 0 20px","position":"absolute","zIndex":"1003"}' :inline="true" :model="searchForm">
				<el-row :style='{"display":"block"}' >
					<div :style='{"margin":"0 0px 15px 0","display":"inline-block"}'>
						<label :style='{"margin":"0 10px 0 0","color":"#666","textAlign":"center","display":"inline-block","width":"auto","lineHeight":"40px","fontSize":"14px","fontWeight":"500","height":"40px"}' class="item-label">用户名</label>
						<el-input v-model="searchForm.nickname" placeholder="用户名" clearable></el-input>
					</div>
					<div :style='{"margin":"0 0px 15px 0","display":"inline-block"}'>
						<label :style='{"margin":"0 10px 0 0","color":"#666","textAlign":"center","display":"inline-block","width":"auto","lineHeight":"40px","fontSize":"14px","fontWeight":"500","height":"40px"}' class="item-label">评论内容</label>
						<el-input v-model="searchForm.content" placeholder="评论内容" clearable></el-input>
					</div>
					<el-button :style='{"border":"2px solid #3CB5AF","cursor":"pointer","padding":"0 20px","outline":"none","margin":"0px 0 5px 0","color":"#3CB5AF","borderRadius":"40px","background":"#fff","width":"160px","fontSize":"14px","height":"40px"}' type="success" @click="search()">查询</el-button>
				</el-row>

				<el-row :style='{"width":"170px","margin":"10px 0 0","flexDirection":"column","display":"flex"}'>
					<el-button :style='{"border":"2px solid #3CB5AF","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"#3CB5AF","borderRadius":"40px","background":"#fff","width":"160px","fontSize":"14px","height":"40px"}' v-if="isAuth('discussdangjianxuexi','新增')" type="success" @click="addOrUpdateHandler()">新增</el-button>
					<el-button :style='{"border":"2px solid #3CB5AF","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"#3CB5AF","borderRadius":"40px","background":"#fff","width":"160px","fontSize":"14px","height":"40px"}' v-if="isAuth('discussdangjianxuexi','删除')" :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","margin":"0 0 15px 210px","borderWidth":"1px 0 0 1px","background":"#fff","width":"80%","borderStyle":"solid"}' 
					: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="nickname"
					label="用户名">
						<template slot-scope="scope">
							{{scope.row.nickname}}
						</template>
					</el-table-column>
					<el-table-column :resizable='true' :sortable='false'  
						prop="content"
					label="评论内容">
						<template slot-scope="scope">
							{{scope.row.content}}
						</template>
					</el-table-column>
					<el-table-column :resizable='true' :sortable='false'  
						prop="reply"
					label="回复内容">
						<template slot-scope="scope">
							{{scope.row.reply}}
						</template>
					</el-table-column>
					<el-table-column width="300" label="操作">
						<template slot-scope="scope">
							<el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"#fff","width":"auto","fontSize":"14px","height":"32px"}' v-if=" isAuth('discussdangjianxuexi','修改')" type="primary" size="mini" @click="addOrUpdateHandler(scope.row.id)">修改</el-button>


							<el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"#fff","width":"auto","fontSize":"14px","height":"32px"}' v-if="isAuth('discussdangjianxuexi','查看评论')" type="primary" size="mini" @click="disscussListHandler(scope.row.id)">查看评论</el-button>


							<el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"#fff","width":"auto","fontSize":"14px","height":"32px"}' type="primary" size="mini" @click="addOrUpdateHandler(scope.row.id)">回复</el-button>

							<el-button :style='{"border":"1px solid rgba(135, 154, 108, 1)","cursor":"pointer","padding":"0 24px","margin":"0 10px 5px 0","outline":"none","color":"rgba(135, 154, 108, 1)","borderRadius":"4px","background":"#fff","width":"auto","fontSize":"14px","height":"32px"}' v-if="" 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="false"
					:style='{"padding":"0","margin":"20px 0 10px 310px","whiteSpace":"nowrap","color":"#333","textAlign":"center","width":"80%","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',
        refid : this.$route.query.refid,
      }
           if(this.searchForm.nickname!='' && this.searchForm.nickname!=undefined){
            params['nickname'] = '%' + this.searchForm.nickname + '%'
          }
           if(this.searchForm.content!='' && this.searchForm.content!=undefined){
            params['content'] = '%' + this.searchForm.content + '%'
          }
      this.$http({
        url: "discussdangjianxuexi/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);
      });
    },
    // 查看评论
    disscussListHandler(id,type) {
	this.$router.push({path:'/discussdiscussdangjianxuexi',query:{refid:id}});
    },
    // 下载
    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: "discussdangjianxuexi/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: 2px solid #3CB5AF;
				border-radius: 4px;
				padding: 0 12px;
				box-shadow: 5px 2px 0px 0px #3CB5AF;
				outline: none;
				color: #333;
				width: 160px;
				font-size: 14px;
				height: 40px;
			}
	
	.center-form-pv .el-select /deep/ .el-input__inner {
				border: 2px solid #3CB5AF;
				border-radius: 4px;
				padding: 0 10px;
				box-shadow: 5px 2px 0px 0px #3CB5AF;
				outline: none;
				color: #333;
				width: 160px;
				font-size: 14px;
				height: 40px;
			}
	
	.center-form-pv .el-date-editor /deep/ .el-input__inner {
				border: 2px solid #3CB5AF;
				border-radius: 4px;
				padding: 0 10px 0 30px;
				box-shadow: 5px 2px 0px 0px #3CB5AF;
				outline: none;
				color: #333;
				width: 160px;
				font-size: 14px;
				height: 40px;
			}
	
	// table
	.el-table /deep/ .el-table__header-wrapper thead {
				color: #fff;
				font-weight: 500;
				width: 100%;
			}
	
	.el-table /deep/ .el-table__header-wrapper thead tr {
				background: #fff;
			}
	
	.el-table /deep/ .el-table__header-wrapper thead tr th {
				padding: 12px 0;
				background: rgba(27, 167, 166, 1);
				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: #eee;
				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;
				border-color: #eee;
				border-width: 0 1px 1px 0;
				border-style: solid;
				text-align: center;
			}
	
	.el-table /deep/ .el-table__body-wrapper tbody tr td {
				padding: 12px 0;
				color: #999;
				background: #fff;
				border-color: #eee;
				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: #1ba7a6;
				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.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: #1ba7a6;
				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>

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

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

相关文章

Java | Leetcode Java题解之第350题两个数组的交集II

题目&#xff1a; 题解&#xff1a; class Solution {public int[] intersect(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int length1 nums1.length, length2 nums2.length;int[] intersection new int[Math.min(length1, length2)];int index1 …

27.移除元素---力扣

题目链接&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-element/description/ 问题描述&#xf…

Maven的简单使用

Maven使用 Maven的作用1. 自动构建标准化的java项目结构(1) 项目结构① 约定目录结构的意义② 约定大于配置 (2)项目创建坐标坐标的命名方法&#xff08;约定&#xff09; 2. 帮助管理java中jar包的依赖(1) 配置使用依赖引入属性配置 (2) maven指令(3) 依赖的范围(4) 依赖传递(…

Vitis AI 进阶认知(Torch量化基础+映射+量化参数+对称性+每通道+PTQ+QAT+敏感性)

目录 1. 介绍 2. 基本概念 2.1 映射函数 2.2 量化参数 2.3 校准 2.4 对称与非对称量化 2.5 Per-Tensor and Per-Channel 2.6 PTQ 2.7 QAT 2.8 敏感性分析 2.6 退火学习率 3. 几点建议 4. 总结 1. 介绍 Practical Quantization in PyTorch | PyTorchQuantization i…

OpenCV几何图像变换(4)亚像素图像截取函数getRectSubPix()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从图像中以亚像素精度检索像素矩形。 getRectSubPix 函数从 src 中提取像素&#xff1a; p a t c h ( x , y ) s r c ( x center.x − ( dst.…

怎么为pdf文件加密设置密码?8个实用pdf文件加密方法

随着数字化信息的普及&#xff0c;保护PDF文件免受未授权访问和篡改的需求日益增强。为了确保您的重要文档安全无虞&#xff0c;加密PDF文件并设置密码成为了一个至关重要的步骤。以下是详细指导&#xff0c;帮助您为PDF文档加密并设置密码&#xff0c;确保其内容的安全。怎么为…

深入理解Java虚拟机(类加载器)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 类加载器 类加载器有什么作用呢&#xff1f; 对于任意的一个类&a…

基于一阶高斯低通滤波器的软件设计

前言 一阶RC低通滤波器&#xff08;巴特沃斯滤波&#xff09;-CSDN博客 一阶高斯低通滤波器不是一个直接的概念&#xff08;因为一阶滤波器通常不产生高斯型频率响应&#xff09;&#xff0c;这里我用软件的方式来模拟高斯低通滤波器的效果。 有纰漏请指出&#xff0c;转载…

C++竞赛初阶L1-13-第五单元-循环嵌套(29~30课)538: T456457 第 n 小的质数

题目内容 输入一个正整数 n&#xff0c;求正整数范围中第 n 小的质数。 输入格式 一个不超过 30000 的正整数 n。 输出格式 第 n 小的质数。 样例 1 输入 10 全部程序代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {long long n,i;ci…

【数据分享】《中国社会统计年鉴》(2006-2023)

而今天要限时免费分享的数据就是2006-2023年间出版的《中国社会统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 一、《中国社会统计年鉴》是一部反映我国社会发展相关领域基本情况的综合性统计资料年刊。书中收录了年全国和…

Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析 本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数&#xff0c;并且这是一个二进制数组&#xff0c;只存在0和1&#xff0c;翻转0就是将0变为1 2.算法原理 首先我们想到的一定是暴力枚举&#xff0c;即依次列举出在最多翻转k个0的情况下所有连续1的子数组的…

类和对象(下)(2)

类和对象&#xff08;下&#xff09;(2) static成员 • ⽤static修饰的成员变量&#xff0c;称之为静态成员变量&#xff0c;静态成员变量⼀定要在类外进⾏初始化。 • 静态成员变量为当前类的所有对象所共享&#xff0c;不属于某个具体的对象&#xff0c;不存在对象中&#…

m4a转wav,使用FFmpeg和Python将M4A文件转换为WAV

你可以使用Python程序或Linux命令来将M4A文件转换为WAV文件。下面分别介绍这两种方法。 方法一:使用FFmpeg命令行工具(Linux命令) FFmpeg 是一个强大的多媒体处理工具,支持音视频转换、处理等操作。你可以在终端中使用以下命令将M4A文件转换为WAV文件: ffmpeg -i input…

网络通信(1)

网络&#xff1a; 不同主机间的通信问题 实现网络通信 物理层面 有一个 信息通路 &#xff08;有线 &#xff1b;无线 &#xff1b;5G&#xff1b;4G&#xff1b;星链 &#xff09;软件层面(逻辑层面) 也需要 一个通路 网络编程 Open System Interconnect (OSI网…

[OC]萝卜圈玩行车记录仪

图1-1&#xff0c;你的手动小车 代码是 #机器人驱动主程序 #请在main中编写您自己的机器人驱动代码 import tkinter as tk import turtle v0 # 速度 accFalse;slowFalse;leftFalse;rightFalse # 按键状态 step0.5 # 一次速度变化量 def keyup_press(event):global acc;accTru…

归并排序(Java实现)

目录 归并排序的思想 代码实现 思路 代码 归并排序的特点 归并排序的思想 归并排序的核心思想是分治&#xff0c;分而治之&#xff0c;就是把数组先分成若干个子数组&#xff0c;先将这些子数组排序后&#xff0c;再合并到一起去。 我们常说的归并排序是二路归并排序&…

uview-plus upload组件在上传视频在小程序环境下点击无反应

你们好&#xff0c;我是金金金。 场景 我正在使用uniapp开发微信小程序&#xff0c;使用的vue3&#xff0c;所以集成的uview-plus这个ui库 代码非常的简单&#xff0c;就是一个上传组件 在h5环境下点击是可以上传视频的&#xff0c;在微信小程序开发者工具里面点击完全没反应…

初阶数据结构之计数排序

非比较排序 计数排序 计数排序⼜称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应⽤。 操作步骤&#xff1a; 1&#xff09;统计相同元素出现次数 2&#xff09;根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…

利用GBDT进行对表格类数据的机器学习的实战项目

一&#xff1a;题目简介 在数据集中&#xff0c;每个样本都对应一个葡萄牙大学的学生。原始数据集中共有4424名学生&#xff0c;。对于每个学生&#xff0c;我们获得了人口统计数据、宏观经济数据以及课程前两个学期的表现。目标是预测学生在三年或四年学习后的状态&#xff1…

虚拟机桥接模式下设置静态IP

虚拟机桥接模式下设置静态ip 1. 设置虚拟机网络适配器为桥接模式2. 配置 CentOS 虚拟机的静态 IP3. 重启网络服务4. 验证配置5. 网络测试 要将 CentOS 虚拟机的网络模式从 NAT 模式更改为桥接模式&#xff0c;并设置静态 IP 地址以与 Windows 内网保持在相同网段&#xff0c;你…