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

news2024/11/25 6:45:10

上文 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中调用它
在这里插入图片描述
然后 我们再添加一条数据
在这里插入图片描述
我们再重新打开弹窗 可以看到 一切正常了就
在这里插入图片描述

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

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

相关文章

想要经营好抖音小店,你还需要了解这些活动方法

抖音小店作为抖音上的新零售业务形态&#xff0c;旨在为用户提供更加便捷的购物体验&#xff0c;同时也为商家提供了一个新的销售渠道。在使用抖音小店的过程中&#xff0c;有一些主流的玩法&#xff0c;今天不若与众科技就来介绍一下。 1. 抖音小店开通直播带货服务 开通直播…

PowerToys工具介绍及使用

目录 介绍下载使用和功能介绍1.安装后的效果2.始终置顶3.唤醒4.颜色选择器5.FancyZones 窗口分屏器6.File Locksmith7.文件资源管理器加载项8.Host文件编辑器9.图像大小调整器10.键盘管理器11.速览12.PowerRename13.文本提取器 介绍 PowerToys 是微软最初发布于 Windows 95 平…

计算机毕业论文选题推荐|软件工程|小程序系列选题

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于微信小程序和深度学习的宠物…

Minio设置文件链接永久有效的完整步骤

目录 前言1.下载MinIO Client2.运行MinIO Client3.添加一个云存储服务4.验证5.policy命令 - 管理存储桶策略总结 前言 minio分享文件的链接&#xff0c;最多支持分享七天 通过 MinIO客户端 管理存储桶策略的方式实现文件链接永久有效 1.下载MinIO Client 采用 Docker 方式 …

拓展销售渠道是客户管理系统的重要功能

随着市场竞争的加剧&#xff0c;人们对于未来的期望和追求越来越高。科技的飞速发展和全球化的趋势&#xff0c;使得我们的生活方式和工作方式都发生了翻天覆地的变化。企业需要不断拓展销售渠道&#xff0c;以吸引更多的客户和提高销售额。客户管理系统&#xff08;CRM&#x…

性能测试岗位常见面试题及答案,希望可以帮到你

目录 前言 一、基础篇 二、工具篇 三、系统架构篇 四、服务器&中间件篇 五、数据库篇 七、案例篇 总结&#xff1a; 前言 最近有童鞋找我问一些性能测试相关的问题&#xff0c;其中问的次数最多的&#xff0c;还是面试性能测试岗位&#xff0c;一般会问哪些问题&am…

Nacos架构与原理 -服务网格生态

文章目录 背景什么是服务网格单体架构向微服务体系架构的演进服务发现负载均衡熔断限流可观测 &#xff08;监控告警&#xff09;认证鉴权其他....小结 微服务体系架构的传统解决方案下⼀代微服务架构——服务网格 服务网格明星产品 Istio什么是 IstioEnvoyEnvoy 和 Istio Isti…

将Python的py文件打包成exe可执行文件

安装依赖包&#xff1a;pip install Pyinstaller pip install Pyinstaller 切换你要打包程序的路径 打开路径文件夹&#xff0c;在路径输入cmd即可 3.执行命令 pip install Pyinstaller 会在当前的py文件夹下生成一个dist文件&#xff0c;里面有一个exe文件

【java面试题】java那些经典的面试题,你还记得吗,少年加油,java八股文

java八股文&#xff0c;你能答对95%以上吗&#xff1f;少年 还有更多文档&#xff1a; 需要给我留言&#xff0c;我发给你。 java八股文&#xff0c;你能答对95%以上吗&#xff1f;少年 感恩于心&#xff0c;回报于行。 面试宝典系列-Java 第一章 内容介绍 ...................…

7.5 内存交换空间(swap)之创建

安装时一定需要的两个 partition &#xff0c;一个是根目录&#xff0c;另外一个就是 swap&#xff08;内存交换空间&#xff09;。 一般来说&#xff0c;如果硬件的配备资源足够的话&#xff0c;那么 swap 应该不会被我们的系统所使用到&#xff0c;swap 会被利用到的时刻通常…

const函数和assert函数:提高代码质量的利器

前言 在C中&#xff0c;const函数和assert函数是非常重要的概念。它们可以帮助我们确保代码的正确性和可靠性。那么在本期&#xff0c;我们将深入探讨这两个概念的作用和用法 目录 前言 一、如何写出优秀的代码&#xff1f; 二、assert 三、const const左修饰&#xff1a;…

halcon实现对点云的平移、旋转、线性运动等动画效果操作

一、点云从点A沿直线运动至B点 过程为&#xff1a; 1、读取点云 本例子用凸包算子convex_hull_object_model_3d生成点云&#xff0c;这个步骤可以换成自己的&#xff0c;直接读取点云即可。 2、设置旋转的角度 3、对点云进行转化 4、显示 5、带动画效果的移动代码 dev_…

3D机器视觉市场现状及未来发展趋势

原创 | 文 BFT机器人 当前&#xff0c;3D机器视觉市场正在经历快速发展阶段。多年来&#xff0c;该技术的应用领域也在不断扩大&#xff0c;特别是在工业制造和安防监控等多个领域具有广泛应用。这一持续发展得益于行业技术的不断进步。 3D机器视觉是指利用计算机视觉技术实现对…

关于开源项目 Tinywebserver的使用与配置fatal error: mysql.h: No such file or directory

Tinywebserver的配置和使用可以先看这篇文章配置 但是编译如果报错&#xff1a;fatal error: mysql.h: No such file or directory 文中提示是apt-get install libmysqlclient-dev 如果你执行了上面这条指令后还是编译报出同样错&#xff0c;请继续往下看。 根据提示是没找到m…

广东省21个地市谷歌卫星影像公开下载

广东省21个地市离线谷歌卫星影像数据资源&#xff08;mbt格式&#xff09;&#xff0c;精度在18级0.5米左右分辨率&#xff0c;网盘下载链接&#xff1a;https://pan.baidu.com/s/1gsRNvz_Q1sPooCDdZMqpAw?pwd6666 提取码&#xff1a;6666

基于Zstack协议栈的智慧农业

界面演示 实物演示 包含两个终端节点以及一个协调器&#xff0c;协调器与上位机通过串口线连接&#xff0c;协调器与终端节点树形组网 硬件 cc2530 DHT11 超声波传感器 MQ-2 LED 三极管 直流电机 软件 Qt IAR Sqlyug Mysql 项目架构 智慧农业系统分为上位机和下位机&…

nvm安装后出现node不是内部或外部命令,也不是可运行的程序

nvm作为node管理工具可以在前端开发时&#xff0c;在本地安装多个node版本从来适应不同的工程代码&#xff0c;是比较推荐使用的&#xff01;&#xff01; 注意&#xff1a;在安装使用nvm时&#xff0c;需确保本地没有安装任意版本的nodejs&#xff08;防止环境路径覆盖&#x…

opencv/深度学习框架/图像识别零基础学习课程(代码+视频+详细pdf资料)

课程介绍 open cv 学习掌握OpenCV的所有必要知识是成为一名优秀计算机视觉工程师的必经之路。通过深入学习OpenCV的图像处理、图像分割、特征提取、目标跟踪、机器学习等相关知识&#xff0c;可以让你在面试中更有信心&#xff0c;同时也能够更加流畅地编写高效的代码。不仅如…

代码随想录算法训练营第五十六天

第一题、两个字符串的删除操作 力扣题目链接 class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()1, vector<int>(word2.size()1, 0));for(int i 1; i < word1.size()1; i){for(int j 1; j &l…

程序员转项目经理 快速成长的5个重点

程序员转项目经理&#xff0c;在刚开始时往往保留原有的固定思维&#xff0c;专注于项目技术的提升和突破&#xff0c;往往容易忽略干系人管理、进度管理、团队建设等问题&#xff0c;从而造成项目进度延期、费用超支等一系列的风险问题。那么我们该如何快速顺利地转型成为合格…