校园生活服务平台pf
@TOC
springboot435校园生活服务平台pf
第1章 绪论
1.1 课题背景
互联网的出现改变了上千年来的社会存在形态。不仅推动了物质文明的发展,
而且极大地提升了精神文明建设的整体水平。
在互联网尚未产生时期,
地域性的思想隔阂始终是人们无法跨越的精神鸿沟,
而信息传播速度缓慢,
加之受限于马匹邮件等传统通讯手段,
使得信息处理效率低下且准确性无法得到保障,
这些限制因素都可能导致信息传递中的丢失风险。
如今,
计算机作为核心工具的应用已经深入到各个领域,
不仅实现了内部管理系统的完善优化,
而且能够通过数据采集和分析提升管理效能,
同时也能通过网络获取外部市场数据进行精准运营。
可以说,
现代信息技术已经成为经济社会发展的核心驱动力。
本课题致力于研发一个校园生活服务平台管理系统,在计算机上安装该系统后将为管理人员提供便捷的操作支持。通过优化相关功能模块以显著提升信息处理效率,并建立标准化的信息处理规范流程。最终目标是以更高效的运作模式使管理人员的工作产出效率得到进一步提升。
1.2 课题意义
传统的数据处理方式必须依赖于一张张纸质介质的反复操作,在经过统计分析后又记录在纸质介质上。这种不断重复的过程最终得出的结果供高层管理人员参考,在互联网技术尚未出现之前这一模式是一种普遍存在的现象。尽管信息管理的效率难以显著提升但单纯增加人员数量未必能带来明显效益因为过度的手工操作会消耗大量资源而且会导致工作压力增大因此人类社会逐渐研究出专门用于辅助计算的机械装置这就是计算机技术的前身随着互联网时代的到来人们逐渐认识到完全可以通过程序供应商提供的解决方案实现个性化选择从而提高自身的产出效率在日常工作中我们也会不断发现各种各样的工具与解决方案来满足不同需求提高工作效率
本课题研究开发出的一种校园生活服务平台管理系统, 主要承担 campus life service information processing tasks. 这一系统能够快速完成各类业务数据, 并配备专用存储设施; 数据备份及转移操作可实现无需人员干预。从人力配置、信息系统管理以及信息安全保障等多个方面来看, 该系统相较于传统的纸介质操作方式具有显著优势。
1.3 研究内容
本文对校园生活服务平台管理系统的设计与实现分成六个章节来说明。
改写说明
第2章:对开发校园生活服务平台管理系统的环境还有技术进行说明。
第3章:分析校园生活服务平台管理系统的可行性,性能,流程以及功能。
第4章:规划校园生活服务平台管理平台系统的功能模块,并规划其数据库E-R图以及对各数据表的存储结构进行详细规划。
第5章:实现校园生活服务平台管理系统的功能并进行功能界面展示。
第6章:对系统测试进行阐述,以及对本系统部分功能进行检测。
第2章 开发环境与技术
本节内容阐述了开发校园生活服务平台管理系统所需的基础硬件配置以及系统在开发过程中所依赖的编程技术等关键信息。
2.1 Java语言
Java语言作为编程语言行业的明星产品,在过去几十年中始终保持着旺盛的生命力。
最初的设计就体现了对编程效率的关注,
特别是在业务逻辑处理方面,
为了简化复杂的指针操作和垃圾回收流程,
使得解决问题的时间往往比正常业务逻辑处理时间更长。
为此,
创造者巧妙地解决了这些问题,
通过自动化指针管理和垃圾回收,
虽然带来了一定性能上的牺牲,
但计算机技术的进步速度足以使这些损失变得可忽略。
相比之下,
C语言虽然在执行效率上表现出色,
但在硬件环境变化或操作系统的更新迭代下,
需要频繁重写代码以适应新需求。
只有具备强大适应能力的语言才能真正满足生存和发展规律的要求。
因此,
创造者开发出了Java语言。
这种设计理念使得Java程序可以在各种不同的环境中运行,
无需依赖特定硬件或操作系统支持。
2.2 MYSQL数据库
MySQL数据库是一种专门用于数据存储的专业软件,在传统的行式数据模式下,默认的操作流程通常是先进行一次性的查询获取所需的数据信息,并将这些信息逐一展示出来与列式数据库不同的是行式数据库主要关注的核心数据逻辑必须是完整有效的这样才能确保每条记录之间的关联关系不会被破坏同时MySQL对数据安全的要求也非常高这也是为什么很多人倾向于选择MySQL作为首选的原因之一 MySQL虽然在安装包大小上与Oracle或SQL Server相比稍显小巧但其强大的功能却不容小觑 MySQL严格遵循基于SQL的标准语法其独特的存储机制采用了一种表格化的组织方式从大到小排列则是数据库的最大特点每个表中存储的数据都有明确的组织规则并且以表格形式呈现横竖并存其中横为行一般代表一条完整的记录表与表之间还可以实现关联操作所谓的分表操作即针对同一主题进行深入细分如果一条记录包含过多的相关属性那么可以通过设定是否唯一来实现有效的关联关系
2.3 IDEA开发工具
由捷克共和国Java程序员开发团队创建的IDEA软件最初由于Eclipse缺乏代码优化功能而导致使用不便
2.4 Spring Boot框架
Spring Boot是一种无需编写代码生成框架,并且能够完全省去XML配置的需求满足类库。由于其内置了多种接口特性,在实际应用中只需根据需求选择并配置相应的接口即可自动应用所需功能,并能便捷地管理依赖关系。使用起来几乎感觉没有使用框架一样简便易用。该框架提供丰富的默认配置文件,并支持对这些设置进行灵活调整;用户还可以通过简单的修改即可轻松实现自定义功能;支持自动加载功能;将异常处理分为全局和默认两种类型;在使用过程中类似于直接注册相应的类和方法即可完成操作。
第3章 系统分析
改写说明
3.1 可行性分析
通过多维度的角度对项目进行全面评估和分析,在程序开发中成功的关键在于具有可靠的可行性方案。只有经过预先的可行性评估,并遵循程序开发的基本流程才能避免潜在的问题和潜在的风险。
3.1.1 技术可行性
在技术实现层次上,我们对多种技术方案进行了系统性考察,并每种方案都配有实际应用案例;同时提供了丰富的可参考资源;就技术可行性而言,则不存在任何障碍
3.1.2 经济可行性
对于学生开发者而言,在经济资源方面可用者数量有限。为了构建校园生活服务平台管理系统, 我们针对软件开发的需求, 发现自己的电脑完全可以满足需求, 同样也符合学校的硬件配置要求。关键是所选技术均能在网络上免费获取相关教程和资料, 因此从成本角度来看, 这一方向具备较高的可行性
3.1.3 操作可行性
详细阐述校园生活服务平台管理系统的核心功能设计时,默认借鉴人类的常规操作模式,并将常见操作模式作为主要导航路径进行构建。这样不仅能够使用户更容易理解和快速掌握使用方法,并且确保整个系统的操作流程符合自然逻辑和常规认知模式。
以上所述就是通过多维度的分析保证了校园生活服务平台管理系统能够顺利运行。
3.2 系统流程
校园生活服务平台管理系统上线后,在线用户若能观览相关流程操作指南,则有助于提升其对系统的理解能力。
3.2.1 操作流程
用户在使用该平台时应遵循该平台的操作指导(如图3.1所示)进行操作。这将有助于避免操作错误,并提高使用效率。

图3.1 系统操作流程
3.2.2 登录流程
校园生活服务平台管理系统通过登录功能(如图3.2所示)促使使用者进入指定的操作区域,并防止非本系统用户访问其服务内容及信息资料的同时确保了用户的使用安全

图3.2 登录流程
3.2.3 删除信息流程
校园生活服务平台管理系统在长期使用后会生成大量数据信息。为了释放存储空间以容纳更多数据,在本系统的数据库中存在大量数据。其中存在一些无用或无参考价值的数据需要进行处理(如图3.3所示)。在删除数据的过程中,请根据系统提示确认是否要执行操作以避免误删。

图3.3 删除信息流程
3.2.4 添加信息流程
校园生活服务平台管理系统设有直观的功能分区,并极为简便地供用户执行数据操作。每当用户将数据输入至系统中(如图3.4所示即为添加信息的过程),本系统会自动判断数据的有效性。符合标准的信息将会被允许并注册于数据库指定的表格中。

图3.4 添加信息流程
3.3 性能需求
在进行需求分析时,必须对项目所涉及的硬件设备进行深入分析。这有助于确保整个分析过程的系统性和完整性。仅仅关注功能性需求而忽视性能要求的做法是不可取的,并可能带来一系列无法预见的问题出现。
以下从这几个角度来分析系统性能。
当系统中的每个表或每个数据库的数据量增长到一定规模时……如果此时系统中的总数据量超过了设定范围……这可能导致响应速度变慢,并降低系统的容错能力
(2) 数据精度的相关要求:在需求分析过程中涉及的数据设定环节中,应考虑相关的数据精度问题,判断这些数据属于常用精度级别还是非常用级别的,从而设置相应的数值参数。
时间响应要求:从用户的提交操作到页面反馈之间存在一个数据处理问题。其中涉及到预测的数据量大小这一因素,在设计分库分表时就需要考虑是否引入列式数据库这一技术选择。这些问题并非轻易能够确定下来,并且都涉及一定的经验和行业内的数据分析支持才能满足用户的期望。鉴于此,在实际应用中需要根据具体情况权衡取舍以确保良好的用户体验
普适性问题:在实际应用中普通用户使用时通常无需考虑服务端的数据量相关限制或响应机制的影响,在这种情况下仅需一台普通的个人电脑即可完成基本操作无需额外配置或操作流程即可轻松上手使用。如果存在过多复杂的设置和操作步骤则违背了普遍适用性原则
(5)页面设计问题:当功能满足需求时自然会要求我们对其进行优化。可以说页面设计是影响用户体验的核心要素,在实际操作中应当优先考虑数据的一致性和统一性安排布局使界面能够达到整洁直观的效果。在颜色配置上应当遵循"一色对应一用途"的原则避免因色彩搭配不当导致的视觉疲劳现象确保用户的使用体验能够维持在一个较为稳定的水平
系统的稳定性:确保正常的操作系统界面,在数据提交过程中必须保证数据的正确性与合理性。任何用户的正常操作不应出现意外问题,并且系统应严格遵循用户的实际需求进行数据处理与反馈输出。如果在常规操作中出现异常情况,则表明系统设计存在缺陷,这不符合稳定性的基本要求。对于所有与数据交互的功能模块来说都需要具备高度稳定性。从开发部署的角度来看可以考虑引入数据冗余备份机制自动值守功能以及机房独立设置等技术手段以有效提升系统的整体稳定性
系统的性能需求方面,则要求在具备对业务深入了解的前提下进行判断和分析,并按照系统性能需求逐步实现。从而使得设计出的系统具有实用价值。
3.4 功能需求
基于使用权限的角度展开功能分析的同时利用功能流程图来呈现各权限所需操作的具体功能
第4章 系统设计
当用户在浏览器中执行操作时
4.1 系统设计思想
系统设计工作必须对设计思想进行统一规划,只有制定统一的设计思想才能作为指导程序开发的基础,从而帮助众多程序开发者更快地进入工作状态,加快了整体开发效率.基于目前系统的功能需求出发,下面将详细阐述本系统的整体设计理念.
可扩展性方面,在开发任何一个系统时都不可避免地需要考虑这一问题。软件版本的迭代更新是一种常识,在软件开发中难以一劳永逸地完成。软件本身就是一个不断发展的存在。因此,在分析问题时应充分考虑将现有数据扩大化处理,并进行系统化的归纳和整理工作。最终形成一个具有一定可扩展性的程序框架。这种可扩展性因素必然会影响到整个项目的开发进程。进而需要全面评估和分析项目的可扩展性程度,并能够有的放矢地制定合理的开发策略。
(2) 实用性:程序设计是一个先构想全局性整体规划后再具体化的过程,在这一阶段中,实用性就是构建基础性的框架这一重要环节。为了充分考虑到用户的非技术背景以及他们只需掌握常规网络操作的基本知识的事实,在应用过程中必须确保能够让用户感受到便利性和实用性存在的意义。如果在实际操作中发现应用程序并没有带来预期的好处,则整个程序设计的实用性将会受到严重影响。
(3)安全性:在用户使用过程中会产生大量相关数据这些数据必须具有安全性保障否则如果用户发现数据出现问题的原因是程序设计问题时将会导致开发者失去信任甚至可能会产生较大的费用赔偿问题这是一个无法回避的问题因此安全性与开发及使用双方的经济利益息息相关程序的安全性必须得到保障
程序设计的先进性是由开发者在实际应用中所决定的,在满足系统功能的前提下,在经过全面考量后会选择最适合当前技术,并通过从开发成本、使用成本以及维护成本等多个角度进行综合评估来确定最优解决方案。以先进的技术水平维持系统的高效运行。
(5) 维护性:在程序开发初期就应预见到后续的维护需求。
实际上,在程序进入生产试用阶段以及被实际使用的过程中才会意识到维护的重要性。
并非意味着减少维护次数就能保证开发质量;毕竟程序是由人类设计制造的,
所以有效保障其正常运行也是技术上的一项重要工作。
通过综合措施来降低程序维护成本是必要的,
而不是简单地追求零故障目标就可以达到高质量开发的目的。
如何有效保障程序正常运行也是一门重要的技术学问。
4.2 功能结构设计
图4.1即是所设计的管理员功能结构图示。该模块主要负责实现公告发布、校园生活服务平台信息管理和跑腿服务、文娱活动组织与协调以及日常事项记录等功能。

图4.1 管理员功能结构
4.3 数据库设计
系统运行过程中生成的数据需要按照既定的存储规则进行归档,并设计一套符合项目需求的数据存储规范。该规范有助于缩短用户等待时间,并提高系统响应速度。在数据库设计阶段,则需对功能需求进行详细分解,并根据业务状态划分具体场景,在此基础上制定科学的存储规则以确保数据库正常运行,并有效缩短数据处理时长;同时尽量降低数据冗余、节省存储空间。
4.3.1 数据库概念设计
除了‘实体-联系图’之外,另一个名称是‘E-R图’。这种概念模型由Entity Relationship Diagram英文单词首字母缩写而成,并通常用于描述现实世界。它不仅能够直观地表达数据中的实体、联系和属性。它还常被选作绘制E-R图的首选工具。椭圆表示属性即实体的特征 矩形表示实体即数据库中的一个具体数据表 菱形则表示实体之间的关系 实线段则用于连接这些基本构成元素
(1)下图是文娱活动实体和其具备的属性。

文娱活动实体属性图
(2)下图是用户实体和其具备的属性。

用户实体属性图
(3)下图是公告实体和其具备的属性。

公告实体属性图
(4)下图是跑腿接单实体和其具备的属性。

跑腿接单实体属性图
(5)下图是分享大厅实体和其具备的属性。

分享大厅实体属性图
(6)下图是文娱活动报名实体和其具备的属性。

文娱活动报名实体属性图
(7)下图是活动申请实体和其具备的属性。

活动申请实体属性图
(8)下图是备忘录实体和其具备的属性。

备忘录实体属性图
(9)下图是跑腿实体和其具备的属性。

跑腿实体属性图
4.3.2 数据库物理设计
本小节的主要任务即为根据上述内容对数据存储结构进行设计。实体的属性则用于表示字段名称;每个字段所代表的数据类型及取值也各不相同。此外,在设计完成后建立一张数据表的结构后,在保存时同样要命名;尽量采用英文名称作为表名并存储起来;这有助于减少系统可能出现的问题。随后将对设计好的表进行简要介绍
表4.1备忘录表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | beiwanglu_name | String | 备忘录名称 | 是 |
| 3 | beiwanglu_uuid_number | String | 备忘录编号 | 是 |
| 4 | beiwanglu_content | String | 备忘录内容 | 是 |
| 5 | beiwanglu_delete | Integer | 逻辑删除 | 是 |
| 6 | insert_time | Date | 录入时间 | 是 |
| 7 | create_time | Date | 创建时间 | 是 |
表4.2字典表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | dic_code | String | 字段 | 是 |
| 3 | dic_name | String | 字段名 | 是 |
| 4 | code_index | Integer | 编码 | 是 |
| 5 | index_name | String | 编码名字 | 是 |
| 6 | super_id | Integer | 父字段id | 是 |
| 7 | beizhu | String | 备注 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表4.3分享大厅表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | forum_name | String | 帖子标题 | 是 |
| 3 | yonghu_id | Integer | 用户 | 是 |
| 4 | users_id | Integer | 管理员 | 是 |
| 5 | forum_content | String | 发布内容 | 是 |
| 6 | super_ids | Integer | 父id | 是 |
| 7 | forum_state_types | Integer | 帖子状态 | 是 |
| 8 | insert_time | Date | 发帖时间 | 是 |
| 9 | update_time | Date | 修改时间 | 是 |
| 10 | create_time | Date | 创建时间 | 是 |
表4.4公告表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | gonggao_name | String | 公告名称 | 是 |
| 3 | gonggao_photo | String | 公告图片 | 是 |
| 4 | gonggao_types | Integer | 公告类型 | 是 |
| 5 | insert_time | Date | 公告发布时间 | 是 |
| 6 | gonggao_content | String | 公告详情 | 是 |
| 7 | create_time | Date | 创建时间 | 是 |
表4.5活动申请表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | huodong_yuyue_uuid_number | String | 报名编号 | 是 |
| 3 | yonghu_id | Integer | 用户 | 是 |
| 4 | huodong_yuyue_text | String | 报名理由 | 是 |
| 5 | huodong_yuyue_yesno_types | Integer | 报名状态 | 是 |
| 6 | huodong_yuyue_yesno_text | String | 审核回复 | 是 |
| 7 | huodong_yuyue_shenhe_time | Date | 审核时间 | 是 |
| 8 | insert_time | Date | 活动报名时间 | 是 |
| 9 | create_time | Date | 创建时间 | 是 |
表4.6跑腿表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | yonghu_id | Integer | 用户 | 是 |
| 3 | paotui_name | String | 跑腿名称 | 是 |
| 4 | paotui_uuid_number | String | 跑腿编号 | 是 |
| 5 | paotui_photo | String | 跑腿照片 | 是 |
| 6 | paotui_address | String | 跑腿地点 | 是 |
| 7 | paotui_types | Integer | 跑腿类型 | 是 |
| 8 | paotui_new_money | BigDecimal | 现价/积分 | 是 |
| 9 | paotui_content | String | 跑腿介绍 | 是 |
| 10 | shangxia_types | Integer | 是否上架 | 是 |
| 11 | paotui_delete | Integer | 逻辑删除 | 是 |
| 12 | insert_time | Date | 录入时间 | 是 |
| 13 | create_time | Date | 创建时间 | 是 |
表4.7跑腿接单表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | paotui_order_uuid_number | String | 接单编号 | 是 |
| 3 | paotui_id | Integer | 跑腿 | 是 |
| 4 | yonghu_id | Integer | 用户 | 是 |
| 5 | paotui_order_true_price | BigDecimal | 实付价格 | 是 |
| 6 | paotui_order_types | Integer | 接单类型 | 是 |
| 7 | insert_time | Date | 接单创建时间 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表4.8文娱活动表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | yonghu_id | Integer | 用户 | 是 |
| 3 | wenyu_name | String | 活动名称 | 是 |
| 4 | wenyu_uuid_number | String | 活动编号 | 是 |
| 5 | wenyu_photo | String | 活动照片 | 是 |
| 6 | wenyu_address | String | 活动地点 | 是 |
| 7 | wenyu_types | Integer | 活动类型 | 是 |
| 8 | wenyu_kucun_number | Integer | 活动人数 | 是 |
| 9 | wenyu_content | String | 活动介绍 | 是 |
| 10 | wenyu_delete | Integer | 逻辑删除 | 是 |
| 11 | insert_time | Date | 录入时间 | 是 |
| 12 | create_time | Date | 创建时间 | 是 |
表4.9文娱活动报名表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | wenyu_order_uuid_number | String | 订单编号 | 是 |
| 3 | wenyu_id | Integer | 文娱活动 | 是 |
| 4 | yonghu_id | Integer | 用户 | 是 |
| 5 | buy_number | Integer | 购买数量 | 是 |
| 6 | wenyu_order_types | Integer | 订单类型 | 是 |
| 7 | insert_time | Date | 订单创建时间 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表4.10用户表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | yonghu_name | String | 用户姓名 | 是 |
| 3 | yonghu_phone | String | 用户手机号 | 是 |
| 4 | yonghu_id_number | String | 用户身份证号 | 是 |
| 5 | yonghu_photo | String | 用户头像 | 是 |
| 6 | yonghu_email | String | 用户邮箱 | 是 |
| 7 | new_money | BigDecimal | 余额 | 是 |
| 8 | create_time | Date | 创建时间 | 是 |
表4.11管理员表
| 序号 | 列名 | 数据类型 | 说明 | 允许空 |
|---|---|---|---|---|
| 1 | Id | Int | id | 否 |
| 2 | username | String | 儿童名 | 是 |
| 3 | password | String | 密码 | 是 |
| 4 | role | String | 角色 | 是 |
| 5 | addtime | Date | 新增时间 | 是 |
第5章 系统实现
开发人员在构建一个完整的开发平台时会整合多种编程技术以确保系统的稳定性和高效性。本节将详细阐述各个核心组件的功能实现及其交互体验
5.1 管理员功能实现
5.1.1 跑腿管理
图5.1 即为基于编码实现的跑腿管理界面,在该界面中管理员可以通过实时监控各跑腿任务的状态变化,并根据需要新增或更新相关任务信息

图5.1 跑腿管理界面
5.1.2 文娱活动管理
图5.2 是通过编码实现的文娱活动管理界面,在文娱活动管理界面中,管理人员可在查看文娱活动信息时增添文娱活动相关信息。

图5.2 文娱活动管理界面
5.1.3 分享管理
图5.3即是基于编码技术构建的分享管理界面,在该界面中管理员可以通过特定功能模块进行信息发布,并支持对发布内容进行删除操作

图5.3 分享管理界面
5.1.4 公告管理
图5-4展示了编码实现的公告管理界面,在该界面上管理员可观察到各类发布信息的状态,并支持从该系统导出相关信息。此外系统还提供了新增发布内容以及修改现有发布信息的功能,并允许管理员移除相关信息。

图5.4 公告管理界面
5.2 用户功能实现
5.2.1 跑腿管理
图5.5 即为编码实现的跑腿管理界面。

图5.5 跑腿管理界面
5.2.2 文娱活动管理
图5.6 即为编码实现的文娱活动管理界面。

图5.6 文娱活动管理界面
5.2.3 备忘录管理
图5.7 即为编码实现的备忘录管理界面。

图5.7 备忘录管理界面
InterceptorConfig.java
package com.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import com.interceptor.AuthorizationInterceptor;
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport{
@Bean
public AuthorizationInterceptor getAuthorizationInterceptor() {
return new AuthorizationInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
super.addInterceptors(registry);
}
/** * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/resources/")
.addResourceLocations("classpath:/static/")
.addResourceLocations("classpath:/admin/")
.addResourceLocations("classpath:/img/")
.addResourceLocations("classpath:/front/")
.addResourceLocations("classpath:/public/");
super.addResourceHandlers(registry);
}
}
UsersServiceImpl.java
package com.service.impl;
import java.util.List;
import java.util.Map;
import com.service.UsersService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.UsersDao;
import com.entity.UsersEntity;
import com.utils.PageUtils;
import com.utils.Query;
/** * 系统用户
* @author
*/
@Service("userService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersEntity> implements UsersService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<UsersEntity> page = this.selectPage(
new Query<UsersEntity>(params).getPage(),
new EntityWrapper<UsersEntity>()
);
return new PageUtils(page);
}
@Override
public List<UsersEntity> selectListView(Wrapper<UsersEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public PageUtils queryPage(Map<String, Object> params,
Wrapper<UsersEntity> wrapper) {
Page<UsersEntity> page =new Query<UsersEntity>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
}
YonghuServiceImpl.java
package com.service.impl;
import com.utils.StringUtil;
import com.service.DictionaryService;
import com.utils.ClazzDiff;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import com.dao.YonghuDao;
import com.entity.YonghuEntity;
import com.service.YonghuService;
import com.entity.view.YonghuView;
/** * 用户 服务实现类
*/
@Service("yonghuService")
@Transactional
public class YonghuServiceImpl extends ServiceImpl<YonghuDao, YonghuEntity> implements YonghuService {
@Override
public PageUtils queryPage(Map<String,Object> params) {
Page<YonghuView> page =new Query<YonghuView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,params));
return new PageUtils(page);
}
}
BreadCrumbs.vue
<template>
<el-breadcrumb class="app-breadcrumb" separator="/" style="height:40px;backgroundColor:var(--publicMainColor);borderRadius:4px;padding:0px 75% 0px 20px;boxShadow:0px 0px 0px #f903d4;borderWidth:0;borderStyle:dotted solid double dashed;borderColor:var(--publicMainColor);">
<transition-group name="breadcrumb" class="box" :style="1==1?'justifyContent:flex-start;':1==2?'justifyContent:center;':'justifyContent:flex-end;'">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect" style="color:rgba(255, 255, 255, 1)">{{ item.name }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.name }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</template>
<script>
import pathToRegexp from 'path-to-regexp'
import { generateTitle } from '@/utils/i18n'
export default {
data() {
return {
levelList: null
}
},
watch: {
$route() {
this.getBreadcrumb()
}
},
created() {
this.getBreadcrumb()
this.breadcrumbStyleChange()
},
methods: {
generateTitle,
getBreadcrumb() {
// only show routes with meta.title
let route = this.$route
let matched = route.matched.filter(item => item.meta)
const first = matched[0]
matched = [{ path: '/index' }].concat(matched)
this.levelList = matched.filter(item => item.meta)
},
isDashboard(route) {
const name = route && route.name
if (!name) {
return false
}
return name.trim().toLocaleLowerCase() === 'Index'.toLocaleLowerCase()
},
pathCompile(path) {
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
const { params } = this.$route
var toPath = pathToRegexp.compile(path)
return toPath(params)
},
handleLink(item) {
const { redirect, path } = item
if (redirect) {
this.$router.push(redirect)
return
}
this.$router.push(path)
},
breadcrumbStyleChange(val) {
this.$nextTick(()=>{
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__separator').forEach(el=>{
el.innerText = "/"
el.style.color = "#C0C4CC"
})
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__inner a').forEach(el=>{
el.style.color = "rgba(255, 255, 255, 1)"
})
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__inner .no-redirect').forEach(el=>{
el.style.color = "rgba(255, 255, 255, 1)"
})
let str = "1"
if(2 == str) {
let headHeight = "80px"
headHeight = parseInt(headHeight) + 10 + 'px'
document.querySelectorAll('.app-breadcrumb').forEach(el=>{
el.style.marginTop = headHeight
})
}
})
},
}
}
</script>
<style lang="scss" scoped>
.app-breadcrumb {
display: block;
font-size: 14px;
line-height: 50px;
.box {
display: flex;
width: 100%;
height: 100%;
justify-content: flex-start;
align-items: center;
}
.no-redirect {
color: #97a8be;
cursor: text;
}
}
</style>
声明
本博客主要面向广大学术与教育领域,并涵盖个人学习、开发设计以及产品设计等多个方面。该平台仅作为参考资料提供,并旨在帮助读者深入理解相关知识并开展学术研究。
