需求5:增加一个按钮

news2024/11/19 15:37:57

在之前的几个需求中,我们逐步从修改字段到新增字段,按部就班地完成了相关工作。通过最近的文章,不难看出我目前正在处理前端的“未完成”和“已完成”按钮。借此机会,我决定趁热打铁,重新梳理一下之前关于按钮实现的需求。

了解需求

当前的问题是,当我上报了一张故障单后,在处理过程中只有一个“开始处理”按钮。如果上报人确实上报了一张故障单,并且该故障单尚未被处理,但故障突然自行解决了,这时就会出现一些不便。

例如,上报人的电脑出现蓝屏故障,他肯定会填写并上报故障单。然而,在故障单还未被接单处理的时间内,蓝屏问题突然消失了,那么这张故障单就变得多余了。

如果我们能够增加一个“撤销故障”的按钮,上报人在上报故障单后,可以自行撤销该故障单,这将会大大提高系统的灵活性和用户的便利性。

大纲思路

在处理需求时,我通常会先考虑模仿现有的功能来实现,因为我知道自己独立编写肯定不会写。然而,如果有一个类似的功能供我参考,我模仿着来写,应该是能够完成任务的。

但具体模仿哪个功能呢?对此我并不太确定。于是我请教了睿哥,他建议我模仿“退回”按钮的实现方式。那么就按照这个思路来进行吧!

代码实现需求

定位接口

首先找到“退回”按钮,点击这个按钮,看看这个按钮调用了哪个接口:

其实,这个按钮相对简单。点击“退回”按钮时,只会触发两个接口,很容易就能找到与按钮对应的接口。但是,有些按钮点击后会触发一堆接口,卧槽,他妈的,你根本不知道哪个接口才是真正与按钮直接交互的。

当时我把这个疑问告诉了睿哥,睿哥建议我查看前端的事件处理函数,看看哪个接口向事件处理函数传递数据,这样就能确定哪个接口是与按钮直接交互的。

修改controller层

现在,接口已经找到了,那么我们就仿照这个接口来写:

其实这个撤销按钮的controller层的模仿没啥难度。

修改service层

进入service层:

其实前面这两步都不算很难,关键在于service层的核心部分,这是最难的。一旦这个service层的核心部分写好了,接下来的工作就会顺利很多。我们来试着写一下service层的核心代码:

其实很简单,先把“退回”按钮的service层核心代码拷贝过来,然后保留有用的部分,注释掉没用的部分。有时候还需要添加一些东西,修改一下代码,这样就可以了。关键是你要清楚这个核心逻辑是什么样的:

把“退回”按钮的service层内核复制一份到“撤回按钮”的service层核心部分后,然后再一行一行的进行修改:

来解释一下第一行代码:

FaultReportEntity report = getFaultReportEntity(reportId);

比如,上报人上报了一张故障单,那么reportId就是故障单的编号。FaultReport表中的每一行其实就是一张故障单。

如果你理解了上面这两句话,那么这行代码就不难理解了。代码的作用是通过故障单编号将属于这个编号的那一行数据提取出来,并放到report对象里。

Assert.isTrue(FaultConfigConstant.FAULT_REPORT_STATUS_0.equals(report.getStatus()), "只有在初始状态下才能进行撤回操作!");
Assert.isTrue(ObjectUtil.equals(UserUtils.getUserId(), report.getReporterId()), "仅上报人可执行撤回操作!");

第一行代码已经获取到了这个故障单的数据。接下来,你需要判断当前尝试点击撤销按钮的用户是否是上报人。如果他不是上报人,那么他就没有权限撤销这张故障单。简而言之,只有上报人自己才可以撤销故障单。

除此之外,你还需要判断这张故障单的状态。只有在故障单处于“待开始”状态时,才可以被撤销。如果故障单已经在处理中,你突然撤销它,那就不合适了。

report.setStatus(FaultConfigConstant.FAULT_REPORT_STATUS_11);

你撤销完之后,就需要把这张故障单的状态设置成“已撤销”状态。

updateById(report);

经过一系列处理后,这个report对象相比于一开始从数据库中获取到的report对象已经发生了变化。这时候,你需要将这个新的report对象同步回数据库。

最后这个接口的service层长这样:

修改mapper层

我想了想,mapper层不需要修改,那我这个撤销按钮的后端接口就完成了。

前端把接口呈现出来

写一个按钮其实不难,真的不难。主要是照猫画虎。我之前的文章已经详细描述了如何照猫画虎。现在我就模仿着“退回”按钮来写,首先先看看“退回”按钮是怎么写的:

通过上面这四幅图,我们已经知道了“退回”按钮的前端是怎么写的,那我们就直接仿照就好了:

写这个需求的一些小心得

其实对于这种需求的修改,我和光哥中午的时候也交流过。你拿到一个需求,不可能从零开始凭空想象。比如说我让你加一个撤回的按钮,你不可能凭空想象然后盲写,这怎么写啊?肯定是先看看有没有一些和这个需求相似的功能,别人已经写好的,可以参照着来写。比如这个需求中的“退回”按钮。能Ctrl+C和Ctrl+V的就绝不会自己重新写,都是复制粘贴完之后,再进行小修小改,然后加一些必要的东西就行了。

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

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

相关文章

4、MapReduce编程实践

目录 1、创建文件2、启动HDFS3、启动eclipse 创建项目并导入jar包file->new->java project导入jar包finish 4、编写Java应用程序5、编译打包应用程序(1)查看直接运行结果(2)打包程序(3)查看 JAR 包是…

软硬协同方案破解IT瓶颈,龙蜥衍生版KOS助力内蒙古大学成功迁移10+业务软件 | 龙蜥案例

2024 云栖大会上,龙蜥社区发布了《龙蜥操作系统生态用户实践精选 V2》,为面临 CentOS 迁移的广大用户提供成熟实践样板。截至目前,阿里云、浪潮信息、中兴通讯 | 新支点、移动、联通、龙芯、统信软件等超 12 家厂商基于龙蜥操作系统发布商业衍…

【在Linux世界中追寻伟大的One Piece】命名管道

目录 1 -> 命名管道 1.1 -> 创建一个命名管道 1.2 -> 匿名管道与命名管道的区别 1.3 -> 命名管道的打开规则 1.4 -> 例子 1 -> 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据&…

串行化执行、并行化执行

文章目录 1、串行化执行2、并行化测试(多线程环境)3、任务的执行是异步的,但主程序的继续执行是同步的 可以将多个任务编排为并行和串行化执行。 也可以处理编排的多个任务的异常,也可以返回兜底数据。 1、串行化执行 顺序执行、…

C++类和对象(下) 初始化列表 、static成员、友元、内部类等等

1.再探构造函数 之前使用构造函数时都是在函数体内初始化成员变量,还有一种构造函数的用法,叫做初始化列表;那么怎么使用呢? 使用方法用冒号开始(" : ")要写多个就用逗号(" , ")隔开数据成队列每个成员变量后…

DC00023基于jsp+MySQL新生报到管理系统

1、项目功能演示 DC00023基于jsp新生报到管理系统java webMySQL新生管理系统 2、项目功能描述 基于jspMySQL新生报到管理系统项目分为学生、辅导员、财务处和系统管理员四个角色。 2.1 学生功能 1、系统登录 2、校园新闻、报到流程、学校简介、在线留言、校园风光、入校须知…

解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题

在使用unique_ptr声明成员变量后,我习惯性地在初始化构造列表中进行如下构造: 注意看,我将m_menuBtnGroup的父类指定为ui->center_menu_widget,这便是导致崩溃的根本原因,解决办法便是先用this初始化,后…

pdf页面尺寸裁减

1、编辑pdf 2、点击裁减页面,并在空白区域双击裁减 3、输入裁减数据:

calibre-web浏览器标题icon修改

calibre-web浏览器标题icon修改 Windows安装calibre-web,Python-CSDN博客文章浏览阅读537次,点赞10次,收藏11次。pip install calibreweb报错:error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

Springboot中基于注解实现公共字段自动填充

1.使用场景 当我们有大量的表需要管理公共字段,并且希望提高开发效率和确保数据一致性时,使用这种自动填充方式是很有必要的。它可以达到一下作用 统一管理数据库表中的公共字段:如创建时间、修改时间、创建人ID、修改人ID等,这些…

视频剪辑软件哪个好?剪辑更高效用这些

众所周知,视频已经成为我们记录生活、表达自我的重要方式。 无论是制作旅行Vlog,还是剪辑短片分享故事,优秀的视频剪辑软件是让创意变为现实的利器。 那么,如何在众多免费软件中做出明智选择,成为剪辑高手呢&#xf…

通信工程学习:什么是SISO单入单出

SISO:单入单出 SISO,即单输入单输出(Single-Input Single-Output)系统,也被称为单变量系统。在这种系统中,输入量与输出量各为一个,是控制理论中的一个基本概念。以下是对SISO系统的详细解释&am…

为什么说函数传递参数最好小于四个

有一个说法说是函数传递参数最好不超过四个,原因有一个是参数太多难以维护,另一个重要的原因就是函数传递小于四个参数时候效率会更高,其实这个说法也不全对,在不同的结构下不太一样,也不一定是4 其实那么下面将探究函…

【RocketMQ】消费失败重试与死信消息

🎯 导读:本文档详细介绍了RocketMQ中的重试机制与死信消息处理方法。对于生产者而言,文档提供了如何配置重试次数的具体示例;而对于消费者,它解释了默认情况下消息消费失败后的重试策略,并展示了如何通过代…

STM32LL库之printf函数重定向

1. 加入以下代码 int fputc(int ch,FILE *f) {LL_USART_TransmitData8(USART1,ch);while(!LL_USART_IsActiveFlag_TXE(USART1));//需要等待发送完成return(ch); }记得添加 stdio.h 头文件 2. 在MDK中勾选:Use MicroLIB

C++【类和对象】(取地址运算符重载与实现Date类)

文章目录 取地址运算符重载const成员函数取地址运算符重载 Date类的实现Date.hDate.cpp1.检查日期合法性2. 构造函数/赋值运算符重载3.得到某月的天数4. Date类 - 天数的操作4.1 日期 天数4.2 日期 天数4.3 日期 - 天数4.4 日期 - 天数 5. Date的前后置/--5.1 前置5.2 后置5.…

学习鸿蒙HarmongOS(基础一)

最近听到一个朋友在干鸿蒙系统开发,于是我也来看看,我看到的第一感觉和前端TS好像,鸿蒙的是叫ArkTS,于是来看一下视频,学习了一下,我的随手笔记记录一下吧,方便我以后阅读 基本 语句 函数

unity3D雨雪等粒子特效不穿透房屋效果实现

做项目有时候会做天气模拟,模拟雨雪天气等等。但是容易忽略一个问题,就是房屋内不应该下雨或者下雪,这样不就穿帮了嘛。 下面就粒子穿透物体问题做一个demo。 正常下雨下雪在室内的话,你可以看到,粒子是穿透建筑的。…

【C++篇】启航——初识C++(上篇)

目录 引言 一、C的起源和发展史 1.起源 2.C版本更新 二、C在⼯作领域中的应⽤ 三、C入门建议 1.参考文档 2.推荐书籍 四、C的第一个程序 1.C语言写法 2.C写法 五、命名空间 1.为什么要有命名空间 2.定义命名空间 3.主要特点 4.使用示例 六、C输⼊&输出 …