Vue CRUD 弹出窗口 表单验证 增删改查 接口文档

目录

1. 准备工作

2. 弹出窗口

3. 新增更新功能

5.表单验证

5. 接口文档


1. 准备工作

后台服务接口,对书本的增删改查操作

2. 弹出窗口

进入ElementUi官网, 找到Dialog对话框,可以参考“嵌套表单的dialog”实现。
该步骤先实现弹出窗口的前端逻辑,并不会调用后台接口服务进行实际的业务操作。
BookList.vue

<!--
弹出窗口:增加和修改书本信息共用一个弹出窗口,需要根据用户的选择动态的设置弹出窗口的标题
:tile  通过绑定值的方式设置dialog的标题
:visible.sync  控制弹出窗口的显示或隐藏,.sync同步修饰符
@close="closeBookForm",设置窗口关闭时调用的处理函数,可用于清空表单
:model="bookForm":用于定义表单对应的model,具体model的定义可见data部分。
v-show="optiontype == 'update'" 通过操作类型控制是否显示书本编号字段,如果当前操作类型为新增,则不用显示,书本编号在数据表中是自增的。
:label-width="formLabelWidth" 统一定义标签的宽度。
:style="{width: formEleWidth}"  统一定义form元素的宽度。
-->
<el-dialog :title="dialogName" :visible.sync="dialogFormVisible" @close="closeBookForm" width="500px"><el-form :model="bookForm"><el-form-item v-show="optiontype == 'update'" label="编号" :label-width="formLabelWidth"><el-input v-model="bookForm.id" autocomplete="off" :style="{width: formEleWidth}"></el-input></el-form-item><el-form-item label="书名" :label-width="formLabelWidth"><el-input v-model="bookForm.bookname" autocomplete="off" :style="{width: formEleWidth}"></el-input></el-form-item><el-form-item label="价格" :label-width="formLabelWidth"><el-input v-model="bookForm.price" autocomplete="off" :style="{width: formEleWidth}"></el-input></el-form-item><el-form-item label="类型" :label-width="formLabelWidth"><el-select v-model="bookForm.booktype" placeholder="选择类型" :style="{width:formEleWidth}"><el-option label="名著" value="mz"></el-option><el-option label="小说" value="xs"></el-option></el-select></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="dialogFormVisible = false">确 定</el-button></div>
</el-dialog>

在数据表格中添加“编辑”“删除”功能连接。(在element-ui官方demo -> table组件中,有如何加入删除,编辑等按钮的示例)

  <!--表格--><el-table :data="books" style="width: 100%;" :border="true" max-height="530"><el-table-column prop="id" label="编号" min-width="40" align="center"></el-table-column><el-table-column prop="bookname" label="名称" min-width="100" align="center"></el-table-column><el-table-column prop="price" label="价格" min-width="70" align="center"></el-table-column><el-table-column prop="booktype" label="类型" min-width="70" align="center"></el-table-column><!-- “编辑”“删除”功能连接 --><el-table-column label="操作"><!--在<template>上使用特殊的slot-scope 特性,可以接收传递给插槽的propslot-scope:类似将每一行的row对象封装到槽中,之后直接从scope中获取row对象信息和行索引index信息即可--><template slot-scope="scope"><el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button><el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button></template></el-table-column></el-table>

script部分:

export default {
name: 'BookList',data: function() {return {bookname: '',books: [],total: 0,rows: 10,page: 1,//控制对话框是否显示,默认是隐藏状态dialogFormVisible: false,//统一控制标签的宽度formLabelWidth: '40px',//统一控制表单元素的宽度formEleWidth: '400px',//对话框标题,默认为新增,如果是点击修改按钮打开对话框,则标题应为修改。dialogName:'新增书本',//操作类型,默认为添加,如果是点击修改打开对话框,则操作类类型应变为修改//该变量用于控制是否显示书本编号字段,当操作类型为新增时不需显示(书本编号数据表字段为自增)//当操作类型为修改时,需要显示。optiontype: 'add',//定义表单对应的modelbookForm: {id: '',bookname: '',price:null,booktype: ''}}
},methods: {qry: function() {let url = this.axios.urls.BOOKMSG_BOOKINFO_REQ;this.axios.post(url, {bookname: this.bookname,page: this.page,rows: this.rows}).then(resp => {console.log(resp);this.books = resp.data.data;this.total = resp.data.total;}).catch(error => {console.log(error);});},//当每页显示的记录数发生变化时,设置当前页码为1,执行查询。handleSizeChange: function(rows) {this.rows = rows;this.page = 1;this.qry();},//当前页码发生变化时,执行查询handleCurrentChange: function(page) {this.page = page;this.qry();},//当关闭对话框时,该方法用于清空表单closeBookForm: function() {this.bookForm.id=null;this.bookForm.bookname = null;this.bookForm.booktype = null;this.bookForm.price = null;},//打开对话框,将对话框标题设置为新增,操作类型设置为'add'addBook: function() {this.dialogName = '新增书本信息';this.dialogFormVisible = true;this.optiontype = 'add';},//打开对话框,将对话框标题设置为修改,操作类型设置为'update',//并使用获取的待修改的记录的值设置对应的表单元素handleEdit: function(row) {this.dialogName = '编辑书本信息';this.dialogFormVisible = true;this.bookForm.id=row.id;this.bookForm.bookname = row.bookname;this.bookForm.booktype = row.booktype;this.bookForm.price = row.price;this.optiontype = 'update';},//删除书本记录handleDelete: function(row) {console.log("dele  = " + row);}}
}

3. 新增更新功能

1) 在action.js中加入后台接口配置。配置时按照自己的项目实际进行

   //获取书本信息'BOOKMSG_BOOKINFO_REQ':'/bookMsg/bookAction!getBooks.action',//增加书本信息'BOOKMSG_BOOKINFO_ADD' : '/bookMsg/bookAction!addBook.action',//修改书本信息'BOOKMSG_BOOKINFO_UPDATE': '/bookMsg/bookAction!updateBook.action',//删除书本信息'BOOKMSG_BOOKINFO_DEL': '/bookMsg/bookAction!delBook.action',//VUEX 异步请求后台数据'VUE_ASYN_REQ':'/userMsg/vueAsynAction!asynAction.action',

2) 在前端调用接口, 注意在调用前请确认后台接口可正常使用

    //保存书本信息saveBook: function() {let url = this.axios.urls.BOOKMSG_BOOKINFO_ADD;//如果当前操作类型为update则需要调用更新接口if (this.optiontype == 'update') {url = this.axios.urls.BOOKMSG_BOOKINFO_UPDATE;}this.axios.post(url, this.bookForm).then(resp => {//操作成功,关闭弹出框,执行查询以便于显示最新数据//操作失败,提示失败,关闭弹出框if (resp.data.success) {this.$message({message: resp.data.msg,type: 'success'});this.dialogFormVisible = false;this.qry();} else {this.$message({message: resp.data.msg,type: 'error'});this.dialogFormVisible = false;}}).catch(error => {})},

4. 删除功能

    //删除书本记录handleDelete: function(row) {let url = this.axios.urls.BOOKMSG_BOOKINFO_DEL+"?id="+row.id;this.axios.delete(url).then(resp => {if(resp.data.success) {this.$message({message: resp.data.msg,type:'success'});this.qry();} else {this.$message({message: resp.data.msg,type: 'error'});}}).catch(error => {console.log(error);})}

5. 表单验证

查看Element-ui官方文档Form部分

        //定义表单验证规则,validatePrice为自定义验证函数,在下文有具体定义rules: {bookname: [{required: true, message: '请输入书本名', trigger: 'blur'}],price: [{required: true, validator: validatePrice, trigger: 'blur' }],booktype: [{required: true, message: '请输入书本类型', trigger: 'blur'}]}

validatePrice函数的定义:

      //用于验证订单金额var validatePrice = (rule, value, callback) => {if(!value){callback(new Error('请输入订单金额'));} else if (isNaN(value)) {callback(new Error('请输入数字值'));} else {callback();}}

表单验证:

    //保存书本信息saveBook: function(formName) {let url = this.axios.urls.BOOKMSG_BOOKINFO_ADD;//调用表单验证this.$refs[formName].validate((valid) => {//如果当前操作类型为update则需要调用更新接口if (this.optiontype == 'update') {url = this.axios.urls.BOOKMSG_BOOKINFO_UPDATE;}this.axios.post(url, this.bookForm).then(resp => {//操作成功,关闭弹出框,执行查询以便于显示最新数据//操作失败,提示失败,关闭弹出框if (resp.data.success) {this.$message({message: resp.data.msg,type: 'success'});this.dialogFormVisible = false;this.qry();} else {this.$message({message: resp.data.msg,type: 'error'});this.dialogFormVisible = false;}}).catch(error => {})});},

定义验证规则,及rule

5. 接口文档

接口文档需要包含的基本要素:

接口地址:
请求方式:get/post/put/delete等
请求示例:举例说明如何调用
请求参数:说明请求参数,及存放的位置,如url,form-data, body raw等等。
返回参数:
正确:说明返回的json数据
错误:指明不同错误的代码及含义

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

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

相关文章

任务管理工具

1. 任务规划 有效的任务管理始于适当的规划。取决于预算、资源、范围和时间表&#xff1b;有效的任务规划需要通过结构化方法将工作分解为多个阶段。 有了一个好的任务管理工具&#xff0c;您应该能够将您的工作分解为易于管理的更简单的任务。此外&#xff0c;应该有一个根据…

列举一些常用的Webpack配置和插件

以下是一些常用的Webpack配置和插件&#xff0c;可以用来优化和扩展前端项目的构建过程&#xff1a; 1&#xff1a;入口和出口配置&#xff1a; module.exports {entry: ./src/index.js, // 入口文件output: {path: path.resolve(__dirname, dist), // 输出目录filename: …

一分钟理解npm run dev 和 npm run serve

前端开发过程中运行Vue项目的时候&#xff0c;有时候使用npm run serve命令可以启动项目&#xff0c;有时候却会报错&#xff1b;有时候使用npm run dev命令可以启动项目&#xff0c;有时候却也会报错。是什么原因造成这种情况呢&#xff0c;原因在于Vue脚手架版本的问题&#…

内存池设计实现

1.设计原理 1.内存池实际就是预先分配不同大小的内存块, 然如果需要调用的时候, 直接把这个块的指针返回. 图中, 就是内存池划分. 2.通过一个链表, 将这些分配的内存块串联起来, 每一块最头部都记录这这个块的信息 3.分配的时候, 会遍历一遍链表, 找到is_used未被置1, pool…

相机存储卡被格式化了怎么恢复?数据恢复办法分享!

随着时代的发展&#xff0c;相机被越来越多的用户所使用&#xff0c;这也意味着更多的用户面临着相机数据丢失的问题&#xff0c;很多用户在使用相机的过程中&#xff0c;都出现过不小心格式化相机存储卡的情况&#xff0c;里面的数据也将一并消失&#xff0c;相机存储卡被格式…

[iOS开发]iOS中TabBar中间按钮凸起的实现

在日常使用app的过程中&#xff0c;经常能看到人家实现了底部分栏控制器的中间按钮凸起的效果&#xff0c;那么这是怎么实现的呢&#xff1f; 效果演示&#xff1a; 实现原理&#xff1a; 创建按钮 创建一个UITabBar的子类&#xff0c;重写它的layoutSubviews方法&#xff1…

Global-aware siamese network for change detection on remote sensing images

遥感图像中的变化检测是以有效的方式识别观测变化的最重要的技术选择之一。CD具有广泛的应用&#xff0c;如土地利用调查、城市规划、环境监测和灾害测绘。然而&#xff0c;频繁出现的类不平衡问题给变化检测应用带来了巨大的挑战。为了解决这个问题&#xff0c;我们开发了一种…

数字化时代,数据仓库是什么?有什么用?

在激烈的市场竞争和全新的数字经济共同作用下&#xff0c;数字化转型成为了大多数企业的共识&#xff0c;也是获取数字经济的最佳方式。在整个数据价值生产链路中&#xff0c;数据仓库的主要作用就是中心化分发&#xff0c;将原始数据与数据价值挖掘活动隔离。 所有的原始数据…

基于 LangChain 构建 LLM 应用程序设计与实践

▼最近直播超级多&#xff0c;预约保你有收获 近期直播&#xff1a;《基 LangChain大模型架构案例实践》 —1— LangChain 是什么&#xff1f; LangChain 和 Semantic Kernel 是当前比较受欢迎的两款 LLM 应用开发框架。 LangChain 作为一个大语言模型应用开发框架&#xff0c;…

SpringBoot 将 jar 包和 lib 依赖分离,dockerfile 构建镜像

前言 Spring Boot 是一个非常流行的 Java 开发框架&#xff0c;它提供了很多便利的功能&#xff0c;例如自动配置、快速开发等等。 在使用 Spring Boot 进行开发时&#xff0c;我们通常会使用 Maven 或 Gradle 进行项目构建。 本文将为您介绍如何使用 Maven 将 Spring Boot …

如何从站长的角度选择高防CDN以节省成本

在当今的数字化世界中&#xff0c;网站站长需要面对越来越复杂的网络安全威胁&#xff0c;如DDoS攻击、恶意爬虫和恶意请求等。为了保护网站的可用性和数据安全&#xff0c;站长通常会寻求使用高防CDN&#xff08;内容分发网络&#xff09;。然而&#xff0c;如何在选择高防CDN…

基于Jaccard相似度的推荐算法---示例

目录 数据展示推荐算法的分类基于相似度基于流行度/上下文/社交网络 Jaccard相似度分析数据的特点可以考虑的方法计算方法优缺点计算用户之间的Jaccard相似度获取与给定最相似的10个用户对1713353的用户推荐10本书 数据展示 import pandas as pd import numpy as np# 读取CSV文…

ubuntu下开发提效的小tips

一、常用操作使用简写的别名&#xff0c;写进bashrc文件中 背景&#xff1a;经常需要cd至某个文件夹中&#xff0c;然后再执行对应的操作&#xff1b;写进bashrc文件中后&#xff0c;可以直接用缩略命令替代这一连串的命令&#xff1b; 用到的工具&#xff1a; 设置命令别名a…

[uni-app] 防重复点击处理 - 自定义指令

一般用节流防抖的方式处理, 这里通过vue的自定义指令方式也可以 实现: import Vue from vue // 自定义指令防止按钮重复点击 v-debounceconst debounce {install(Vue) {// 防止重复点击Vue.directive(debounce, {inserted: function(el, binding) {el.addEventListener(clic…

Kotlin apply 交换两个数

代码&#xff1a; fun main() {var a 1var b 2a b.apply {b aprintln("$b")println("$this")}println("$a $b") }打印结果&#xff1a; 1 2 2 1原理分析&#xff1a; /*** Calls the specified function [block] with this value as its r…

面试梳理-Redis01

目录 开场白-追命3连 使用场景 01缓存穿透场景与方案 02布隆过滤器 03缓存击穿场景与方案 04缓存雪崩场景与方案 开场白-追命3连 看你项目中有说用到Redis&#xff0c;都是哪些场景使用了Redis呢&#xff1f; 如果发生了缓存穿透、击穿、雪崩如何应对呢&#xff1f;缓存…

【JVM】双亲委派机制、打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 一、双亲委派机制1.1 双亲委派的作用1.…

【实战Flask API项目指南】之二 Flask基础知识

实战Flask API项目指南之 Flask基础知识 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界&…

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

git更改远程仓库地址

1、输入命令【git remote -v】查看当前git远程仓库地址 2、输入命令【git remote set-url origin 新地址】替换成新地址 3、输入命令【git remote -v 】查看是否更新成功