SSMP整合案例(11) 在界面中实现添加操作

上文 SSMP整合案例(10) vue端调整项目环境 发送请求 基本界面编写我们搭建了基本的页面结构

然后 我们来做个新增的功能
首先 新增 我们肯定是用户点击了这个新建之后 我们再来处理这个逻辑
在这里插入图片描述
我们之前的代码 新增是有绑定 一个事件的
在这里插入图片描述
但是这个 AddBook中并没有内容
在这里插入图片描述
首先 我们要写一个组件 来处理我们添加一条图书数据的逻辑
我们在components文件夹下创建一个文件 叫 bookFillIn.vue
参考代码如下

<template>
  <el-dialog
    :title="title"
    :visible.sync="switchs"
    :before-close="bookClose"
    width="500px"
  >
        <el-form
          label-width="120px"
          :model="formInline"
          :rules="rules"
          ref = "formInline"
          size="small"
        >
          <el-form-item
            label="图书名称:"
            prop="name"
          >
            <el-input
              v-model="formInline.name"
              placeholder="请输入图书名称"
              style="width: 300px;"
            ></el-input>
          </el-form-item>
          <el-form-item
            label="图书类别:"
            prop="type"
          >
            <el-select
              v-model="formInline.type"
              placeholder="请选择图书类别"
              style="width: 300px;"
            >
              <el-option
                v-for = "item in typeIn"
                :label="item.label"
                :value="item.value"
                :key="item.value"
              ></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="图书描述:">
              <el-input
                type="textarea"
                style="width: 300px;"
                :rows="2"
                placeholder="请输入图书描述"
                v-model="formInline.description">
              </el-input>
          </el-form-item>
        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click="bookClose">关闭</el-button>
          <el-button type="primary" @click="submitTo">确定</el-button>
        </div>
  </el-dialog>
</template>

<script>
export default {
  name: 'bookFillIn',
  data() {
    return {
      title: "",
      switchs: false,
      formInline: {
          name: "",
          type: "",
          description: ""
      },
      rules: {
        name: [
          { required: true, message: '图书名称不能为空', trigger: 'blur' },
        ],
        type: [
          { required: true, message: '图书类别为必选项', trigger: 'blur' },
        ]
      },
      typeIn: [
        {
          value: 0,
          label: "知识科普"
        },
        {
          value: 1,
          label: "休闲图书"
        },
        {
          value: 2,
          label: "官方记录"
        },
        {
          value: 3,
          label: "典藏"
        }
      ]
    }
  },
  methods: {
    bookClose() {
      this.switchs = false;
    },
    submitTo(){
        this.$refs.formInline.validate((valid) => {
          if (valid) {
            console.log("提交");
          }
        });
    },
    sensor(name){
      this.switchs = true;
      this.title = name?name:"";
    },

  }
}
</script>

<style scoped>

</style>

这里 我们编写了一个el-dialog Element弹窗组件
然后 我们定义了一个表单 让用户手动填写图书的信息
这里我们通过遍历 typeIn 给el-select下拉框循环加上选择项目
然后 我们通过rules 验证了数据为空的情况 防止用户提交空数据给我们
这里 需要大家有一点vue2+Element UI的基础
然后写好之后 就是我们App.vue要去调用这个组件

我们如下图 调用 然后使用
在这里插入图片描述
然后 我们将AddBook函数修改如下

AddBook() {
    this.$refs.bookFill.sensor("添加图书");
},

当AddBook触发时 我们通过refs拿到我们的bookFillIn组件元素 然后 调用下面的sensor函数 打开弹窗
我们启动项目 然后点击 新建按钮
运行结果如下
在这里插入图片描述
可以看到 我们的弹窗就出来了

然后 我们什么都不填 直接点击右下角确定按钮
在这里插入图片描述
上面就会提示我们了

那么 现在 我们就需要来调用接口了
我们在 src下的 api 下的bookApi.js加一个函数
参考代码如下

export function AddBook(data){
    return request({
        url:`/books`,
        method:'post',
        data:data,
    })
}

在这里插入图片描述
因为我们之前是post请求 添加 然后 我们数据用的是 body下的 所以 我们用data传参

然后我们在src下的components下的bookFillIn.vue
引入一下我们刚刚写的AddBook
在这里插入图片描述
然后将bookFillIn.vue中的submitTo 提交数据方法更改如下

submitTo(){
   this.$refs.formInline.validate((valid) => {
      if (valid) {
        AddBook(this.formInline).then(res => {
          if(res.state == 200) {
            this.$message({
              message: res.message,
              type: 'success'
            });
          }else{
            this.$message.error(res.message);
          }
        })
      }
    });
},

这里 我们直接调用AddBook 传入表单处理好的formInline
然后 判断返回值 res.state == 200
因为 我们之前处理的就是 state 200 表示成功 500则失败
用两个对用不同的提示语法
用我们后台返回的message 做提示
然后 我们运行代码 在弹出表单中填上对应表单的信息
在这里插入图片描述
然后 我们点击确定
运行结果如下
在这里插入图片描述
我们看控制台请求返回的信息
在这里插入图片描述
也是没有任何问题

然后 看数据库表 我们的数据就已经加上去了
在这里插入图片描述
但是 这里 我们还有几个问题 要处理
首先 我们添加完 在列表上 第一时间看不到 第二 添加之后 弹出框不会自动关掉

首先 我们在 App.vue 中 将bookFill组件使用的地方代码改成这样

<book-fill ref = "bookFill" @getAll = "getAll" />

将我们查询的 getAll 函数传给子组件
在这里插入图片描述
然后 我们子组件bookFillIn.vue
submitTo函数更改如下

submitTo(){
this.$refs.formInline.validate((valid) => {
      if (valid) {
        AddBook(this.formInline).then(res => {
          if(res.state == 200) {
            this.$message({
              message: res.message,
              type: 'success'
            });
            this.bookClose();
            this.$emit('getAll');
          }else{
            this.$message.error(res.message);
          }
        })
      }
    });
},

可以看到 我们成功之后 调用bookClose 关闭当前弹出 然后调用父组件传来的getAll
让列表重新查询
在这里插入图片描述
我们点击确定
在这里插入图片描述
弹出也关了 然后 我们的数据就刷新了

但是 这里又带来了一个问题
我们添加完之后 再次点击新建 我们会发现我们之前输入的内容还在上面
在这里插入图片描述
因为 vue是一个前端响应式框架 这里的表单提交之后 他是不会跳转的 所以 界面没有更新
我们需要在每次打开弹窗时重置一下数据

我们在 bookFillIn.vue 中定义一个函数
参考代码如下

resetting() {
 this.formInline = {
      name: "",
      type: "",
      description: ""
  }
}

然后 在打开弹窗的sensor中调用它
在这里插入图片描述
然后 我们再添加一条数据
在这里插入图片描述
我们再重新打开弹窗 可以看到 一切正常了就
在这里插入图片描述

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

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

相关文章

4.44ue4:相机抖动

1.创建相机抖动类 右键内容面板&#xff0c;点击创建蓝图类&#xff0c;搜索shake&#xff08;camera shake&#xff09; 2.使用相机抖动&#xff1a; 节点&#xff1a;play world .. api解释&#xff1a; epicenter&#xff1a;震源 inner Radius&#xff1a;内圈范围&a…

【梦辛工作室】java实现简易消息队列处理器 可分区 分区顺序消费MxMQ

大家好哇&#xff0c;又是我&#xff0c;梦辛工作室的灵&#xff0c;最近在巩固JUC并发包&#xff0c;突然想到如果自己的应用体量不大&#xff0c;但有需要消息队列来实现应用解耦和削峰来缓解服务器突增压力&#xff0c;比如抢票时&#xff0c;突然有比较用户同时抢票&#x…

分布式运用——rsync远程同步

分布式运用——rsync远程同步 一、rsync的背景和原理1.rsync的功能2.rsync的应用场景3.使用rsync的基本命令4.scp与rsync的区别 二、配置rsync源服务器1.关闭防火墙2.建立/etc/rsyncd.conf 配置文件3.保证所有用户对源目录/var/www/html 都有读取权限4.启动 rsync 服务程序5.关…

flutter3.7版本下使用flutter boost解决使用platview崩溃或异常问题

背景 工程使用了混合开发&#xff0c;使用flutter boost插件&#xff0c;flutter 的activity1 frament1 跳转activity2 frament2&#xff0c;frament1 包含platformView&#xff0c;按照上面老哥解决崩溃问题的基础上&#xff0c;出现activity2 frament2返回activity1 framen…

“未来之光:揭秘创新科技下的挂灯魅力“

写在前面&#xff1a; 高度信息化当下时代&#xff0c;对电脑及数字设备的需求与日俱增无处不在&#xff0c;随之而来的视觉疲劳和眼睛问题也攀升到了前所未有的高度。传统台灯对于长时间使用电脑的人群来说是完全无法解决这些问题的。一款ScreenBar Halo 屏幕挂灯&#xff0c;…

数学建模——插值(下)

本文是面向数学建模准备的&#xff0c;是介绍性文章&#xff0c;没有过多关于原理的说明&#xff01;&#xff01;&#xff01; 目录 一、2维插值原理及公式 1、二维插值问题 2、最邻近插值 3、分片线性插值 4、双线性插值 5、二维样条插值 二、二维插值及其Matlab工具箱…

微信小程序

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

opencv使用applyColorMap()函数,可以将灰度图或彩色图转换成自定义的彩色图,或opencv提供的20多种色彩值

文章目录 1、applyColorMap()函数的使用&#xff1a;&#xff08;1&#xff09;函数原型&#xff1a;void applyColorMap(InputArray src, OutputArray dst, int colormap)void applyColorMap(InputArray src, OutputArray dst, InputArray userColor) &#xff08;2&#xff0…

利用Python构建宁德时代、比亚迪、隆基绿能股票时间序列预测模型

存货 import tushare as ts # 导包 import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks from scipy.stats import norm import datetime import pandas as pd import seaborn as sns # pip install seaborn import matplotlib.patches …

WideNet:让网络更宽而不是更深

这是新加坡国立大学在2022 aaai发布的一篇论文。WideNet是一种参数有效的框架&#xff0c;它的方向是更宽而不是更深。通过混合专家(MoE)代替前馈网络(FFN)&#xff0c;使模型沿宽度缩放。使用单独LN用于转换各种语义表示&#xff0c;而不是共享权重。 混合专家(MoEs) 条件计…

数通王国历险记之TCP协议下的三大协议的验证实验

系列文章目录 数通王国历险记&#xff08;1&#xff09; 前言 一&#xff0c;我们要先知道PDU是什么&#xff1f; 二、TCP协议下的三大协议的验证实验 1.FTP的验证实验 1&#xff0c;拓扑图 2.将lsw4配置一下 3&#xff0c;FTP服务器端开启FTP服务&#xff1a; 4&#x…

LIN诊断实现MCU本地OTA升级

一、目标 通过PC端上位机实现MCU本地的OTA升级,本篇文章对实现的目的、需要用到的第三方工具、LIN诊断帧、升级协议、MCU端升级过程以及PC端升级过程做详细说明。 二、目的 最近在做MCU项目时需要将样机寄给客户进行验证,在客户的验证过程中要求参数可调试,如果需要修改软…

vue下基于elementui自定义表单-后端数据设计篇

vue下基于elementui自定义表单-后端篇 自定义表单目前数据表单设计是基于数据量不大的信息单据场景&#xff0c;因为不考虑数据量带来的影响。 数据表有: 1.表单模版表&#xff0c;2.表单实例表&#xff0c;3.表单实例项明细表&#xff0c;4表单审批设计绑定表 以FormJson存…

RuoYi(分离版) 使用代码生成器添加子模块(idea版)

右键总文件夹&#xff0c;选择新模块添加新模块 新建的业务模块 新建的业务模块中添加若依通用模块工具 <dependencies><dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-common</artifactId></dependency></depen…

【Thunder送书 | 第三期 】「Python系列丛书」

文章目录 前言《Python高效编程——基于Rust语言》《Python从入门到精通》《Python Web深度学习》《Python分布式机器学习》文末福利 | 赠书活动 前言 Thunder送书第三期开始啦&#xff01;前面两期都是以【文末送书】的形式开展&#xff0c;本期将赠送Python系列丛书&#xff…

学习系统编程No.25【核心转储实战】

引言&#xff1a; 北京时间&#xff1a;2023/6/16/8:39&#xff0c;实训课中&#xff0c;大一下学期最后有课的一天&#xff0c;还有两天就要期末考啦&#xff01;目前什么都还没有复习&#xff0c;不到星期天晚上&#xff0c;咱不慌&#xff0c;小小挂科&#xff0c;岂能拦得…

ElementUI plus框架Table表格cell-style属性的使用

官方文档说明&#xff1a; 例&#xff1a;设置单元格文字居中 Object方式&#xff1a; function方式&#xff1a;

NOSQL——redis的安装,配置与简单操作

一、缓存的概述 缓存是为了调节速度不一致的两个或多个不同的物质的速度&#xff0c;在中间对速度较慢的一方起到加速作用&#xff0c;比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据&#xff0c;内存是保存CPU经常访问硬盘的数据&#xff0c;而且硬盘也有大小不一的缓…

抖音seo矩阵系统源码开发部署|抖音小程序接入(一)

一、 开发部署步骤&#xff1a; &#xff08;1&#xff09;申请开放平台服务商 &#xff08;2&#xff09;申请开放平台网站应用 &#xff08;3&#xff09;申请开放平台应用权限 &#xff08;4&#xff09;提交各个API接口申请文档 &#xff08;5&#xff09;审核通过技…

详解JS 作用域与作用域链、IIFE模式、js执行过程

文章目录 一、什么是作用域二. 全局作用域、函数作用域、块级作用域全局作用域函数作用域注意 if、for循环、while循环变量 块级作用域 二、什么是作用域链1. 什么是自由变量2.什么是作用域链3. 关于自由变量的取值 三、IIFE模式由来语法基本语法带参 四、JavaScript 执行过程编…