SPA项目开发之表单验证与增删改功能实现

2024-01-13 21:18

本文主要是介绍SPA项目开发之表单验证与增删改功能实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SPA项目开发之表单验证与增删改功能实现

  • 1. 前言
  • 2. 表单验证
  • 3. 增删改功能
  • 4. 效果实现

1. 前言

续前篇SPA项目开发之动态树+数据表格+分页,对表格数据进行一个增删改功能。

2. 表单验证

Form组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,
并将Form-Item的prop属性设置为需校验的字段名即可

<!-- 编辑窗体 --><el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @before-close="closeDialog"><el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm"><el-form-item label="文章标题" prop="title"><el-input size="small" v-model="editForm.title" auto-complete="off" placeholder="请输入文章标题"></el-input></el-form-item><el-form-item label="文章内容" prop="body"><el-input size="small" v-model="editForm.body" auto-complete="off" placeholder="请输入文章内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button size="small" @click="closeDialog">取消</el-button><el-button size="small" type="primary" class="title" @click="submitForm('editForm')">保存</el-button></div></el-dialog>

rules验证

rules: {title: [{required: true,message: '请输入文章标题',trigger: 'blur'},{min: 3,max: 5,message: '长度在 3 到 5 个字符',trigger: 'blur'}],body: [{required: true,message: '请输入文章内容',trigger: 'blur'}]}

3. 增删改功能

先将按钮显示到界面

<template><div><!-- 搜索框 --><el-form :inline="true" :model="formInline"><el-form-item label="搜索:"><el-input size="small" v-model="formInline.title" placeholder="请输入文章标题"></el-input></el-form-item><el-form-item><el-button size="small" type="primary" @click="search">查询</el-button><el-button size="small" type="primary" @click="handleAdd">新增</el-button></el-form-item></el-form><!-- 表格数据 --><el-table size="small" :data="listData" style="width: 100%"><el-table-column align="center" type="selection" min-width="1"></el-table-column><el-table-column prop="id" label="文章id" min-width="1"></el-table-column><el-table-column prop="title" label="文章标题" min-width="2"></el-table-column><el-table-column prop="body" label="文章内容" min-width="3"></el-table-column><el-table-column label="操作" min-width="2"><template slot-scope="scope"><el-button size="mini"  @click="handleEdit(scope.$index, scope.row)">编辑</el-button><el-button size="mini"  type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table><!-- 分页条current-page=传输当前页page-sizes=传输的页码--><el-pagination style="margin-top: 20px;" @size-change="handleSizeChange" @current-change="handleCurrentChange":current-page="formInline.page" :page-sizes="[10, 20, 30, 50]" :page-size="100" layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination><!-- 编辑窗体 --><el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @before-close="closeDialog"><el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm"><el-form-item label="文章标题" prop="title"><el-input size="small" v-model="editForm.title" auto-complete="off" placeholder="请输入文章标题"></el-input></el-form-item><el-form-item label="文章内容" prop="body"><el-input size="small" v-model="editForm.body" auto-complete="off" placeholder="请输入文章内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button size="small" @click="closeDialog">取消</el-button><el-button size="small" type="primary" class="title" @click="submitForm('editForm')">保存</el-button></div></el-dialog></div>
</template>

界面样式
在这里插入图片描述

书写方法
新增,打开窗体

/* 新增,仅限打开窗体 */handleAdd() {this.clearData();this.editFormVisible = true;this.title = "新增文章"},

将当前所需编辑打开显示在窗体

/* 修改 */handleEdit(index,row){this.editFormVisible = true;this.title = "编辑文章";this.editForm.id=row.id;this.editForm.title=row.title;this.editForm.body=row.body;},

清空窗体数据

/* 清空数据 */clearData(){this.editFormVisible = false;this.title = "";this.editForm.id=0;this.editForm.title='';this.editForm.body='';}

新增与编辑

submitForm(formName) {/* 表单验证 */this.$refs[formName].validate((valid) => {if (valid) {//移交后台数据let url;/* 判断调用新增或修改方法 */if(this.editForm.id == 0){url = this.axios.urls.SYSTEM_ARTICLE_ADD;}else{url = this.axios.urls.SYSTEM_ARTICLE_EDIT;}this.axios.post(url,this.editForm).then((response) => {console.log(response);//操作成功后关闭框,并自动刷新this.clearData();this.search();}).catch(function(error) {console.log(error);});		} else {console.log('error submit!!');return false;}});}

删除方法

/* 删除 */handleDelete(index,row){let url = this.axios.urls.SYSTEM_ARTICLE_DELthis.axios.post(url, {id:row.id}).then((response) => {console.log(response);alert('删除成功');//操作成功后关闭框,并自动刷新this.clearData();this.search();}).catch(function(error) {console.log(error);});}

页面完整代码块

<template><div><!-- 搜索框 --><el-form :inline="true" :model="formInline"><el-form-item label="搜索:"><el-input size="small" v-model="formInline.title" placeholder="请输入文章标题"></el-input></el-form-item><el-form-item><el-button size="small" type="primary" @click="search">查询</el-button><el-button size="small" type="primary" @click="handleAdd">新增</el-button></el-form-item></el-form><!-- 表格数据 --><el-table size="small" :data="listData" style="width: 100%"><el-table-column align="center" type="selection" min-width="1"></el-table-column><el-table-column prop="id" label="文章id" min-width="1"></el-table-column><el-table-column prop="title" label="文章标题" min-width="2"></el-table-column><el-table-column prop="body" label="文章内容" min-width="3"></el-table-column><el-table-column label="操作" min-width="2"><template slot-scope="scope"><el-button size="mini"  @click="handleEdit(scope.$index, scope.row)">编辑</el-button><el-button size="mini"  type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button></template></el-table-column></el-table><!-- 分页条current-page=传输当前页page-sizes=传输的页码--><el-pagination style="margin-top: 20px;" @size-change="handleSizeChange" @current-change="handleCurrentChange":current-page="formInline.page" :page-sizes="[10, 20, 30, 50]" :page-size="100" layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination><!-- 编辑窗体 --><el-dialog :title="title" :visible.sync="editFormVisible" width="30%" @before-close="closeDialog"><el-form label-width="120px" :model="editForm" :rules="rules" ref="editForm"><el-form-item label="文章标题" prop="title"><el-input size="small" v-model="editForm.title" auto-complete="off" placeholder="请输入文章标题"></el-input></el-form-item><el-form-item label="文章内容" prop="body"><el-input size="small" v-model="editForm.body" auto-complete="off" placeholder="请输入文章内容"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button size="small" @click="closeDialog">取消</el-button><el-button size="small" type="primary" class="title" @click="submitForm('editForm')">保存</el-button></div></el-dialog></div>
</template><script>export default {data() {return {listData: [],formInline: {page: 1,rows: 10,title: ''},total: 0,editForm: {id: 0,title: '',body: ''},/* 是否打开窗体,默认关闭 */editFormVisible: false,title: '',rules: {title: [{required: true,message: '请输入文章标题',trigger: 'blur'},{min: 3,max: 5,message: '长度在 3 到 5 个字符',trigger: 'blur'}],body: [{required: true,message: '请输入文章内容',trigger: 'blur'}]}};},methods: {doSearch(params) {let url = this.axios.urls.SYSTEM_ARTICLE_LISTthis.axios.post(url, params).then((response) => {console.log(response);this.listData = response.data.result;this.total = response.data.pageBean.total;}).catch(function(error) {console.log(error);});},handleSizeChange(rows) {console.log("页大小发生改变" + rows)this.formInline.page = 1;this.formInline.rows = rows;this.search();},handleCurrentChange(page) {console.log("当前页发生改变" + page)this.formInline.page = page;this.search();},search() {this.doSearch(this.formInline);},closeDialog() {},submitForm(formName) {/* 表单验证 */this.$refs[formName].validate((valid) => {if (valid) {//移交后台数据let url;/* 判断调用新增或修改方法 */if(this.editForm.id == 0){url = this.axios.urls.SYSTEM_ARTICLE_ADD;}else{url = this.axios.urls.SYSTEM_ARTICLE_EDIT;}this.axios.post(url,this.editForm).then((response) => {console.log(response);//操作成功后关闭框,并自动刷新this.clearData();	this.search();}).catch(function(error) {console.log(error);});		} else {console.log('error submit!!');return false;}});},/* 新增 */handleAdd() {this.clearData();this.editFormVisible = true;this.title = "新增文章"},/* 修改 */handleEdit(index,row){this.editFormVisible = true;this.title = "编辑文章";this.editForm.id=row.id;this.editForm.title=row.title;this.editForm.body=row.body;},/* 删除 */handleDelete(index,row){let url = this.axios.urls.SYSTEM_ARTICLE_DELthis.axios.post(url, {id:row.id}).then((response) => {console.log(response);alert('删除成功');//操作成功后关闭框,并自动刷新this.clearData();this.search();}).catch(function(error) {console.log(error);});},/* 清空数据 */clearData(){this.editFormVisible = false;this.title = "";this.editForm.id=0;this.editForm.title='';this.editForm.body='';}},created() {this.doSearch({});}}
</script><style>
</style>

4. 效果实现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这篇关于SPA项目开发之表单验证与增删改功能实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602801

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

用Microsoft.Extensions.Hosting 管理WPF项目.

首先引入必要的包: <ItemGroup><PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /><PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" /><PackageReference Include="Serilog

eclipse运行springboot项目,找不到主类

解决办法尝试了很多种,下载sts压缩包行不通。最后解决办法如图: help--->Eclipse Marketplace--->Popular--->找到Spring Tools 3---->Installed。

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现