spring cloud+vue在线视频网站 6.章节编辑删除功能、前端优化和校验模块

news/2024/5/20 13:00:58/文章来源:https://blog.csdn.net/Mosiclone/article/details/109445356

这一节增加了大章的编辑和删除功能,这样大章的增删改查功能就都有了,但是在增加和修改时应该还要有校验功能。

编辑功能

这一节主要对大章模块增加编辑功能,其次还删除一些多余组件。首先,我们将多余对按钮进行了删除,并且对剩余按钮绑定函数;接着我们将修改功能和增加功能合并,修改了前端的 save 方法和后端对应的类。

修改页面

删除了部分按钮,并把编辑按钮和删除按钮绑定对应函数。

 <tbody><tr v-for="chapter in chapters" v-bind:key="chapter"><td>{{chapter.id}}</td><td>{{chapter.name}}</td><td>{{chapter.courseId}}</td><td><div class="hidden-sm hidden-xs btn-group"><button class="btn btn-xs btn-info"><i v-on:click="edit(chapter)" class="ace-icon fa fa-pencil bigger-120"></i></button><button class="btn btn-xs btn-danger"><i v-on:click="del(chapter.id)" class="ace-icon fa fa-trash-o bigger-120"></i></button></div></td></tr></tbody>

修改后页面如下:
在这里插入图片描述

前端修改

下面新增对应函数:

            edit(chapter) {let _this = this;_this.chapter = $.extend({},chapter);$("#form-modal").modal("show");},del(chapter.id) {}

这里也是点击编辑按钮先弹出修改框,在修改完之后点击 save 按钮后将数据传到后端处理。
这里需要注意的是用到了 extend 关键字,这样可以将当前的 chapter 信息传给 {} ,再绑定到弹出框,这样修改弹出框中的信息时不会把页面中的 chapter 改变。

后端修改

Controller 层没有改变,主要是修改 Service 层的 save 方法。首先判断传入的 chapter 是否有 Id 属性,然后对其进行修改或者新增操作。

    public void save(ChapterDto chapterDto){Chapter chapter = CopyUtil.copy(chapterDto,Chapter.class);if(StringUtils.isEmpty(chapter.getId())){this.insert(chapter);}else{this.update(chapter);}}private void insert(Chapter chapter){chapter.setId(UuidUtil.getShortUuid());chapterMapper.insert(chapter);}private void update(Chapter chapter){chapterMapper.updateByPrimaryKey(chapter);}

删除功能

上节已经将删除按钮和 del 函数绑定在一起,这节首先修改前端删除函数,然后在后端新增删除操作。

前端修改

前端删除功能用 delete 请求,将需要删除的章节 id 传给后端。

            del(id) {let _this = this;console.log(id);             _this.$ajax.delete('http://127.0.0.1:9000/business/admin/chapter/delete/'+id).then((response)=>{console.log("删除大章结果",response);let res = response.data;if(res.success){_this.list(1);}})}

后端控制层先增加 delete 方法 ,id 用 @PathVariable 接收。

    @DeleteMapping("/delete/{id}")public ResponseDto delete(@PathVariable String id){chapterService.delete(id);ResponseDto responseDto = new ResponseDto();return responseDto;}

然后增加服务层对应方法。

    public void delete(String id){chapterMapper.deleteByPrimaryKey(id);}

前端界面优化

这里页面点击删除就直接删除了,一般应该会有提示是否删除,再确认后才会删除。这里确认框和操作结果提示使用的是 sweetalter2 ;界面的等待框使用的是 blockui。

添加 js

这里采用的方式是在 vue 项目的 public/static 包中添加 js 包,用来存放一些前端组件。
在 js 包中新建一个 toast.js 文件,这个文件存放的是前端操作后提示的 js 组件。
新建一个 confirm.js 文件,这个文件存放的是前端确认提示的 js 组件。
新建一个 loading.js 文件,这个文件存放的是前端等待提示的 js 组件。

toast.js

Toast = {success: function (message) {Swal.fire({position: 'top-end',icon: 'success',title: message,showConfirmButton: false,timer: 3000})},error: function (message) {Swal.fire({position: 'top-end',icon: 'error',title: message,showConfirmButton: false,timer: 3000})},warning: function (message) {Swal.fire({position: 'top-end',icon: 'warning',title: message,showConfirmButton: false,timer: 3000})}
};

confirm.js

Confirm = {show: function (message, callback) {Swal.fire({title: 'Are you sure?',text: message,icon: 'warning',showCancelButton: true,confirmButtonColor: '#3085d6',cancelButtonColor: '#d33',confirmButtonText: 'sure!'}).then((result) => {if (result.value) {if (callback) {callback()}}})}
}

loading.js

Loading = {show: function () {$.blockUI({message: '<img src="/static/image/loading.gif" />',css: {zIndex: "10011",padding: "10px",left: "50%",width: "80px",marginLeft: "-40px",}});},hide: function () {// 本地查询速度太快,loading显示一瞬间,故意做个延迟setTimeout(function () {$.unblockUI();}, 500)}
};

这里的 loading.gif 就是一张动图,在网上找一下就有类似的了
在这里插入图片描述

index.html

<!--  确认框和提示框  -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@9"></script>
<script src="<%= BASE_URL %>static/js/toast.js"></script>
<script src="<%= BASE_URL %>static/js/confirm.js"></script><!--  loading等待框  -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery.blockUI/2.70.0-2014.11.23/jquery.blockUI.min.js"></script>
<script src="<%= BASE_URL %>static/js/loading.js"></script>

修改方法

前端组件添加后就应该在各个操作中调用这些提示。
1.在查询之前会显示 Loading 图标,然后查询完后会关闭 Loading 图标。
2.在保存编辑时,会先显示 Loading 图标,发送请求后关闭 Loading 图标,如果成功还会显示保存成功提示。
3.在删除时,先弹出确认提示,如果确认删除会先显示 Loading 图标,接着关闭 Loading 图标。
修改后的方法如下:

list(page) {let _this = this;Loading.show();console.log(page, _this.$refs.pagination.size);_this.$ajax.post('http://127.0.0.1:9000/business/admin/chapter/list',{page: page,size: _this.$refs.pagination.size}).then((response)=>{console.log(response);Loading.hide();let res = response.data;_this.chapters = res.content.list;_this.$refs.pagination.render(page, res.content.total);})
},
save(page) {let _this = this;Loading.show();console.log(page);_this.$ajax.post('http://127.0.0.1:9000/business/admin/chapter/save',_this.chapter).then((response)=>{console.log("保存大章结果",response);let res = response.data;Loading.hide();if(res.success){$("#form-modal").modal("hide");_this.list(1);Toast.success("保存成功");}})
},
del(id) {let _this = this;console.log(id);Confirm.show("删除后不能还原,是否确认删除?",function() {Loading.show();_this.$ajax.delete('http://127.0.0.1:9000/business/admin/chapter/delete/'+id).then((response)=>{console.log("删除大章结果",response);let res = response.data;Loading.hide();if(res.success){Toast.success("删除成功");_this.list(1);}})});
}

校验模块

前端校验

首先在 js 包中添加 tool.js 和 validator.js ,分别是分离出来的处理流程和校验流程,接着在 save 中添加校验。
Validator.js

Validator = {require: function (value, text) {if (Tool.isEmpty(value)) {Toast.warning(text + "不能为空");return false;} else {return true}},length: function (value, text, min, max) {if (Tool.isEmpty(value)) {return true;}if (!Tool.isLength(value, min, max)) {Toast.warning(text + "长度" + min + "~" + max + "位");return false;} else {return true}}
};

tool.js

Tool = {/*** 空校验 null或""都返回true*/isEmpty: function (obj) {if ((typeof obj == 'string')) {return !obj || obj.replace(/\s+/g, "") == ""} else {return (!obj || JSON.stringify(obj) === "{}" || obj.length === 0);}},/*** 非空校验*/isNotEmpty: function (obj) {return !this.isEmpty(obj);},/*** 长度校验*/isLength: function (str, min, max) {return $.trim(str).length >= min && $.trim(str).length <= max;}
}

index.html

<!--  通用工具类  -->
<script src="<%= BASE_URL %>static/js/tool.js"></script>
<!--  校验类  -->
<script src="<%= BASE_URL %>static/js/validator.js"></script>

后端校验

首先新增了 validatorException 类,然后在工具类中增加了校验的方法,接着新增了一个处理 validator 异常的类,最后在 save 方法中添加了校验。

validatorException 类继承 RuntimeException,这样可以不用写 try catch。

package com.course.server.exception;public class ValidatorException extends RuntimeException{public ValidatorException(String message) {super(message);}
}

接着在工具类中添加了校验的方法

package com.course.server.util;import com.course.server.exception.ValidatorException;
import org.springframework.util.StringUtils;public class ValidatorUtil {/*** 空校验(null or "")*/public static void require(Object str, String fieldName) {if (StringUtils.isEmpty(str)) {throw new ValidatorException(fieldName + "不能为空");}}/*** 长度校验*/public static void length(String str, String fieldName, int min, int max) {if (StringUtils.isEmpty(str)) {return;}int length = 0;if (!StringUtils.isEmpty(str)) {length = str.length();}if (length < min || length > max) {throw new ValidatorException(fieldName + "长度" + min + "~" + max + "位");}}
}

Controller 层中保存方法在最开始添加校验

// 保存校验
ValidatorUtil.require(chapterDto.getName(), "名称");
ValidatorUtil.require(chapterDto.getCourseId(), "课程ID");
ValidatorUtil.length(chapterDto.getCourseId(), "课程ID", 1, 8);

这时如果校验后不满足会抛出异常,所以添加一个处理 validatorException 异常的方法。

package com.course.business.controller;import com.course.server.dto.ResponseDto;
import com.course.server.exception.ValidatorException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;@ControllerAdvice
public class ControllerExceptionHandler {@ExceptionHandler(value = ValidatorException.class)@ResponseBodypublic ResponseDto validatorExceptionHandler(ValidatorException e){ResponseDto responseDto = new ResponseDto();responseDto.setMessage(e.getMessage());responseDto.setSuccess(false);return responseDto;}
}

这时把前端校验方法注释后可以看到后端的校验正常。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring cloud+vue在线视频网站 7.代码生成模块 part 1

这一章主要是完成代码生成的模块&#xff0c;用到的工具是 freemaker &#xff0c;在完成代码生成模块的同时会完成小节部分的代码。 freemaker 的基本用法 一般来说一个 freemaker 的模版基本会包括下面四部分。 文本:直接输出的部分 注释:<#–2333–>格式部分,不会输…

网站检测方式个人总结

这几天看架构看的头晕&#xff0c;觉得有点看不下去了 换个心情&#xff0c;等状态调整过来再继续看 趁这个时间休息一些&#xff0c;也正好把之前学过的知识做一个总结。 首先表明立场 这只是一个总结 并不是教大家什么 我的水平没有那么高 这是一个提醒自己的备忘 但是如果有…

用了2周时间,终于把Python网站开发库大全整理完了

用了 2 周的时间整理了 Python 中所有的网站开发库&#xff08;下文简称&#xff1a;Web 框架&#xff09;&#xff0c;供大家学习参考。 相关文件 小伙伴们可以关注小编的Python源码、问题解答&学习交流群&#xff1a;733089476 有很多的资源可以白嫖的哈&#xff0c;需…

今天给大家介绍一下~我学习 Python 的 三个神级网站

今天来给大家介绍三个我在学习 Python 路上帮助比较大的堪称神级的网站&#xff0c;尤其是对于刚刚入门的同学来说&#xff0c;绝对不容错过~ 相关文件 小伙伴们可以关注小编的Python源码、问题解答&学习交流群&#xff1a;733089476 有很多的资源可以白嫖的哈&#xff0…

WEB网站加速CND加速工作原理

转自&#xff1a;https://blog.csdn.net/5hongbing/article/details/78025349 通过传统的未加缓存服务的访问过程与加缓存服务的访问过程对比&#xff0c;了解CDN缓存访问方式与未加缓存访问方式的差别。 1.传统访问过程(未加速缓存服务) 访问未使用CDN缓存后的网站的过程&…

逛Github网站显示中文教程

打开Github对于看不懂英文的孩子来说刚打开官网就尬住了&#xff0c;后来逛了很多网站才发现一个方法可以将网站的部分内容转换为中文&#xff0c;虽然说是部分的&#xff0c;但是也够用了差不多。下面放教程。 1.找到自己浏览器安装扩展插件的地方&#xff0c;我测试的360浏览…

三日娱乐活动之——建立自己的网站

目录 云服务器搭建SSH登陆LNMP环境的搭建Nginx的设置小节总结 网页的编写CSS的调用php文件上传小节总结 云服务器搭建 我用的是阿里云的学生机&#xff0c;自己娱乐娱乐够用了&#xff0c;稍微懂点Linux的知识&#xff0c;选择Centos7的系统就可以耍了。 SSH登陆 我直接用密…

Vs2010创建网站

1.打开VS2010&#xff0c;新建——网站——ASP.Net空网站。 2.创建网站后你会发现你的项目并没有.sln结尾的文件&#xff0c;像这样。 事实上项目的.sln文件保存到了C:\Users\zjs\Documents\Visual Studio 2010\Projects 我一般会把这个.sln文件拷贝到项目所对应的文件夹目录。…

公安内网部署网站出现500.19-Internal Server Error

今天去桂林叠彩分局&#xff0c;帮他们部署一个内网平台的网站。去了机房&#xff0c;windowserver2012系统已装好。我本想我的工作会很快弄完。无非就是在这个系统上安装一个oracle数据库&#xff0c;然后在iis部署一个网站&#xff0c;网站能呈现数据就ok了。Oracle数据库安装…

我的网站收入

建站有好几个月了&#xff0c;但申请google adsense和阿里妈妈并且成功通过却是上个月的事情。到目前为止&#xff0c;google adsense帐户的估算总收入为1.79美元&#xff0c;阿里妈妈的收入为2.52元&#xff0c;看到这里&#xff0c;或者很多读者都会嗤之以鼻&#xff0c;甚至…

没有网站也能网赚

如果你能持之以恒&#xff0c;而且文档质量高的话&#xff0c;那么月入过万也不是没有可能的。 2009年5月&#xff0c;我在建站的过程中为了找点资料&#xff0c;通过搜索引擎搜索到了豆丁&#xff0c;还记得当时是为了搜索关于google map的资料&#xff0c;很多地方都没有找到…

前端常见SEO注意事项

前端开发工程师不仅需要要跟视觉设计师、交互式设计师配合&#xff0c;完美还原设计图稿&#xff0c;编写兼容各大浏览器、加载速度快、用户体验好的页面。现在还需要跟SEO人员配合&#xff0c;调整页面的代码结构和标签。 一些成熟的平台&#xff0c;在开发初期并没有考虑优化…

精通Web Analytics 2.0 (3) 第一章:网站分析的新奇世界

精通Web Analytics 2.0 &#xff08;3&#xff09; 第一章&#xff1a;网站分析的新奇世界 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第一章&#xff1a;Web Analytics 2.0的新奇世界 多年以来&#xff0c;我们很清楚的知道&#xff0c;网站分析能够真正的改革网络…

精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案

精通Web Analytics 2.0 &#xff08;12&#xff09; 第十章&#xff1a;针对潜在的网站分析陷阱的最佳解决方案 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十章&#xff1a;针对潜在的网站分析陷阱的最佳解决方案 是时候去处理网站分析中最棘手的一些问题了&…

学习Python一定要知道的八个网站,看看你知道几个

导语 最近很多人问我有没有可以跟着学习的网站&#xff0c;一个人学没方向&#xff0c;老是不知道该怎么学习&#xff0c;我今天就把自己知道的几个网站分享给大家&#xff0c;那些问我的小伙伴可以根据这个去找自己喜欢的网站哦! python是一个编程语言&#xff0c;相比其他的…

阿里云ECS建站全流程(Debian)

1. 购买域名和ECS服务器 2. 环境配置 2.1 官方教程位置 这里是按照官网上的教程进行的&#xff0c;入口如下图所示&#xff1a; 官网的教程就不抄下来了&#xff0c;看官网就行。本文章只记载官网内容之外需要补充的操作。 2.2 安装yum 因为购买服务器时选择的Debian&…

sqlmap如何用dirsearch.py协助--os -shell拿到目标网站shell

本文为博主原创文章首发于FreeBuf→https://www.freebuf.com/sectool/256588.html SQLMAP sqlmap是一个开源渗透测试工具&#xff0c; 它可以自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎&#xff0c;同时有众多功能&#xff0c;包括数据库指纹识别、从…

超棒的五个在线学习web编程的网站

超棒的五个在线学习web编程的网站 http://www.gbtags.com/gb/share/2523.htm# 如果你需要给自己冲冲电而又没有时间的话&#xff0c;使用一些在线学习编程的网站&#xff0c;利用一些碎片时间来学习提高自己的话&#xff0c;今天这篇文章肯定能够帮你大忙&#xff0c;本文里我…

【全源码及文档】基于JAVA的宠物网站设计与实现

摘 要 本系统是采用Java技术来构建的一个基于Web技术的B/S结构的宠物网站&#xff0c;该网站建立在Spring和Struts2框架之上&#xff0c;前台使用JSP作为开发语言&#xff0c;后台使用MySQL数据库管理系统对数据进行管理&#xff0c;开发环境选用MyEclipse&#xff0c;应用服务…