SPA项目之主页面--数据表格的增删改查

news2024/11/16 20:50:09

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于Vue+ElementUI的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.增删改查

1.样式准备

2.编码

①增

代码

效果

②删

代码

效果

③改

代码

效果

④查

代码

效果

二.表单验证

1.在表单中使用验证规则

2.定义验证规则

3..触发表单验证


一.增删改查

1.样式准备

<template>
  <div class="books">

    <!-- 模糊查询-->
    <el-form :inline="true" class="demo-form-inline" style="margin-top: 40px; margin-left: 20px;">
      <el-form-item label="书本名称">
        <el-input v-model="bookname" placeholder="请输入书本名称..."></el-input>
      </el-form-item>

      <!-- 按钮 -->
      <el-form-item>
        <el-button type="primary" @click="onSubmit">查询</el-button>
        <el-button type="primary" @click="open">新增</el-button>
      </el-form-item>
    </el-form>

    <!-- 表格 -->
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="id" label="书本编号" width="180"></el-table-column>
      <el-table-column prop="bookname" label="书本名称" width="180"></el-table-column>
      <el-table-column prop="price" label="书本价格"></el-table-column>
      <el-table-column prop="booktype" label="书本类型"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button size="mini" type="warning" @click="open(scope.$index, scope.row)">编辑</el-button>
          <el-button size="mini" type="danger" @click="del(scope.$index, scope.row)">删除</el-button>
        </template>
      </el-table-column>

    </el-table>


    <!-- 分页 -->
    <div class="block">
      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
        :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>

    <!-- 编辑框 -->
    <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="myshow()">
      <el-form :model="book" :rules="rules" ref="book">
        <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookname">
          <el-input v-model="book.bookname" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍价格" :label-width="formLabelWidth" prop="price">
          <el-input v-model="book.price" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍类型" :label-width="formLabelWidth" prop="booktype">
          <el-select v-model="book.booktype" placeholder="请选择书籍类型">
            <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key'+t.id"></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="sure">确 定</el-button>
      </div>
    </el-dialog>




  </div>
</template>



<style>
</style>

2.编码

①增

代码

myshow() {
        this.dialogFormVisible = false;
        this.title = '新增窗体';
        this.book = {
          id: '',
          bookname: '',
          price: '',
          booktype: ''
        }
      },
 open(index, row) {
        this.dialogFormVisible = true;
        if (row) {
          this.title = '编辑窗体';
          this.book.id = row.id,
            this.book.bookname = row.bookname,
            this.book.price = row.price,
            this.book.booktype = row.booktype
        }
      },
      sure() {
        /* 表单验证 */
        this.$refs['book'].validate((valid) => {
          if (valid) {
            let url = this.axios.urls.BOOK_ADD;
            if (this.title == '编辑窗体') {
              url = this.axios.urls.BOOK_UPD;
            }
            let params = {
              id: this.book.id,
              bookname: this.book.bookname,
              price: this.book.price,
              booktype: this.book.booktype
            }
            this.axios.post(url, params).then(r => {
              console.log(r);
              this.myshow();
              this.select({});
            }).catch(e => {

            })
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
效果

②删

代码
 del(idx, row) {
        this.$confirm('此操作将永久删除该行数据, 是否继续??', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          let url = this.axios.urls.BOOK_DEL;
          this.axios.post(url, {id:row.id}).then(r => {
            console.log(r);
            this.$message({
              type: 'success',
              message: '删除成功!'
            });
            this.select({});
          }).catch(e => {

          })
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });
        });
      },
效果

③改

代码
myshow() {
        this.dialogFormVisible = false;
        this.title = '新增窗体';
        this.book = {
          id: '',
          bookname: '',
          price: '',
          booktype: ''
        }
      },
 open(index, row) {
        this.dialogFormVisible = true;
        if (row) {
          this.title = '编辑窗体';
          this.book.id = row.id,
            this.book.bookname = row.bookname,
            this.book.price = row.price,
            this.book.booktype = row.booktype
        }
      },
      sure() {
        /* 表单验证 */
        this.$refs['book'].validate((valid) => {
          if (valid) {
            let url = this.axios.urls.BOOK_ADD;
            if (this.title == '编辑窗体') {
              url = this.axios.urls.BOOK_UPD;
            }
            let params = {
              id: this.book.id,
              bookname: this.book.bookname,
              price: this.book.price,
              booktype: this.book.booktype
            }
            this.axios.post(url, params).then(r => {
              console.log(r);
              this.myshow();
              this.select({});
            }).catch(e => {

            })
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
效果

④查

代码
select(params) {
        let url = this.axios.urls.BOOK_LIST;
        this.axios.get(url, {
          params: params
        }).then(r => {
          console.log(r);
          this.tableData = r.data.rows;
          this.total = r.data.total;
        }).catch(e => {


        })
      },
      onSubmit() {
        let params = {
          bookname: this.bookname
        }

        this.select(params)
      },
      handleSizeChange(num) { //当前所展示的数据条数值发生变化时所触发的事件
        console.log("展示的条数是" + num)
        let params = {
          bookname: this.bookname,
          rows: num,
          page: this.page
        }
        this.select(params)
      },

      handleCurrentChange(p) { //当前所展示的页码发生变化
        console.log("当前是第" + p + "页")
        let params = {
          bookname: this.bookname,
          rows: this.rows,
          page: p
        }
        this.select(params)
      },
效果

所有代码

<template>
  <div class="books">

    <!-- 模糊查询-->
    <el-form :inline="true" class="demo-form-inline" style="margin-top: 40px; margin-left: 20px;">
      <el-form-item label="书本名称">
        <el-input v-model="bookname" placeholder="请输入书本名称..."></el-input>
      </el-form-item>

      <!-- 按钮 -->
      <el-form-item>
        <el-button type="primary" @click="onSubmit">查询</el-button>
        <el-button type="primary" @click="open">新增</el-button>
      </el-form-item>
    </el-form>

    <!-- 表格 -->
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="id" label="书本编号" width="180"></el-table-column>
      <el-table-column prop="bookname" label="书本名称" width="180"></el-table-column>
      <el-table-column prop="price" label="书本价格"></el-table-column>
      <el-table-column prop="booktype" label="书本类型"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button size="mini" type="warning" @click="open(scope.$index, scope.row)">编辑</el-button>
          <el-button size="mini" type="danger" @click="del(scope.$index, scope.row)">删除</el-button>
        </template>
      </el-table-column>

    </el-table>


    <!-- 分页 -->
    <div class="block">
      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
        :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </div>

    <!-- 编辑框 -->
    <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="myshow()">
      <el-form :model="book" :rules="rules" ref="book">
        <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookname">
          <el-input v-model="book.bookname" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍价格" :label-width="formLabelWidth" prop="price">
          <el-input v-model="book.price" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍类型" :label-width="formLabelWidth" prop="booktype">
          <el-select v-model="book.booktype" placeholder="请选择书籍类型">
            <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key'+t.id"></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="sure">确 定</el-button>
      </div>
    </el-dialog>




  </div>
</template>

<script>
  export default {
    data() {
      return {
        bookname: '',
        tableData: [],
        rows: 10,
        page: 1,
        total: 0,
        title: '',
        formLabelWidth: '100px',
        dialogFormVisible: false,
        types: [],
        book: {
          id: '',
          bookname: '',
          price: '',
          booktype: ''
        },
        rules: {
          bookname: [{
            required: true,
            message: '请输入书籍名称',
            trigger: 'blur'
          }],
          price: [{
            required: true,
            message: '请输入书籍价格',
            trigger: 'blur'
          }],
          booktype: [{
            required: true,
            message: '请选择书籍类型',
            trigger: 'blur'
          }]
        },
      }
    },
    methods: {
      select(params) {
        let url = this.axios.urls.BOOK_LIST;
        this.axios.get(url, {
          params: params
        }).then(r => {
          console.log(r);
          this.tableData = r.data.rows;
          this.total = r.data.total;
        }).catch(e => {


        })
      },
      onSubmit() {
        let params = {
          bookname: this.bookname
        }

        this.select(params)
      },
      handleSizeChange(num) { //当前所展示的数据条数值发生变化时所触发的事件
        console.log("展示的条数是" + num)
        let params = {
          bookname: this.bookname,
          rows: num,
          page: this.page
        }
        this.select(params)
      },

      handleCurrentChange(p) { //当前所展示的页码发生变化
        console.log("当前是第" + p + "页")
        let params = {
          bookname: this.bookname,
          rows: this.rows,
          page: p
        }
        this.select(params)
      },
      myshow() {
        this.dialogFormVisible = false;
        this.title = '新增窗体';
        this.book = {
          id: '',
          bookname: '',
          price: '',
          booktype: ''
        }
      },
      open(index, row) {
        this.dialogFormVisible = true;
        if (row) {
          this.title = '编辑窗体';
          this.book.id = row.id,
            this.book.bookname = row.bookname,
            this.book.price = row.price,
            this.book.booktype = row.booktype
        }
      },
      sure() {
        /* 表单验证 */
        this.$refs['book'].validate((valid) => {
          if (valid) {
            let url = this.axios.urls.BOOK_ADD;
            if (this.title == '编辑窗体') {
              url = this.axios.urls.BOOK_UPD;
            }
            let params = {
              id: this.book.id,
              bookname: this.book.bookname,
              price: this.book.price,
              booktype: this.book.booktype
            }
            this.axios.post(url, params).then(r => {
              console.log(r);
              this.myshow();
              this.select({});
            }).catch(e => {

            })
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      del(idx, row) {
        this.$confirm('此操作将永久删除该行数据, 是否继续??', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          let url = this.axios.urls.BOOK_DEL;
          this.axios.post(url, {id:row.id}).then(r => {
            console.log(r);
            this.$message({
              type: 'success',
              message: '删除成功!'
            });
            this.select({});
          }).catch(e => {

          })
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });
        });
      },
    },




    created() {
      this.select({})
      this.types = [{
        id: 1,
        name: "爽文"
      }, {
        id: 2,
        name: "爱情"
      }, {
        id: 3,
        name: "谍战"
      }, {
        id: 4,
        name: "古装"
      }]
    }
  }
</script>

<style>
</style>

url配置

/**
 * 对后台请求的地址的封装,URL格式如下:
 * 模块名_实体名_操作
 */
export default {
  'SERVER': 'http://localhost:8080', //服务器
  'SYSTEM_USER_DOLOGIN': '/user/userLogin', //登陆
  'SYSTEM_USER_DOREG': '/user/userRegister', //注册
  'SYSTEM_MENU_TREE': '/module/queryRootNode', //动态树
  'BOOK_LIST': '/book/queryBookPager', //书籍列表
  'BOOK_ADD': '/book/addBook', //书籍增加
  'BOOK_UPD': '/book/editBook', //书籍修改
  'BOOK_DEL': '/book/delBook', //书籍删除
  'getFullPath': k => { //获得请求的完整地址,用于mockjs测试时使用
    return this.SERVER + this[k];
  }
}

二.表单验证

1.在表单中使用验证规则

 <!-- 编辑框 -->
    <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="myshow()">
      <el-form :model="book" :rules="rules" ref="book">
        <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookname">
          <el-input v-model="book.bookname" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍价格" :label-width="formLabelWidth" prop="price">
          <el-input v-model="book.price" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="书籍类型" :label-width="formLabelWidth" prop="booktype">
          <el-select v-model="book.booktype" placeholder="请选择书籍类型">
            <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key'+t.id"></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="sure">确 定</el-button>
      </div>
    </el-dialog>

2.定义验证规则

rules: {
          bookname: [{
            required: true,
            message: '请输入书籍名称',
            trigger: 'blur'
          }],
          price: [{
            required: true,
            message: '请输入书籍价格',
            trigger: 'blur'
          }],
          booktype: [{
            required: true,
            message: '请选择书籍类型',
            trigger: 'blur'
          }]
        },

3..触发表单验证

sure() {
        /* 表单验证 */
        this.$refs['book'].validate((valid) => {
          if (valid) {
            let url = this.axios.urls.BOOK_ADD;
            if (this.title == '编辑窗体') {
              url = this.axios.urls.BOOK_UPD;
            }
            let params = {
              id: this.book.id,
              bookname: this.book.bookname,
              price: this.book.price,
              booktype: this.book.booktype
            }
            this.axios.post(url, params).then(r => {
              console.log(r);
              this.myshow();
              this.select({});
            }).catch(e => {

            })
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊 

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

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

相关文章

聚合统一,SpringBoot实现全局响应和全局异常处理

目录 前言 全局响应 数据规范 状态码(错误码) 全局响应类 使用 优化 全局异常处理 为什么需要全局异常处理 业务异常类 全局捕获 使用 优化 总结 前言 在悦享校园1.0版本中的数据返回采用了以Map对象返回的方式&#xff0c;虽然较为便捷但也带来一些问题。一是在…

机器人制作开源方案 | 货物输送小车

作者&#xff1a;周展鹏 黄万森 彭军铭 吕会权 聂文俊 单位&#xff1a;柳州工学院 指导老师&#xff1a;蔡洪炜 王一波 1. 场景调研 目前货物输送已成为人们生活中必不可少的部分&#xff0c;加之国内近年来有因快递配送导致疫情迅速传播的事件常有发生&#xff0c;因此在疫…

Mybatis3详解 之 全局配置文件详解

1、全局配置文件 前面我们看到的Mybatis全局文件并没有全部列举出来&#xff0c;所以这一章我们来详细的介绍一遍&#xff0c;Mybatis的全局配置文件并不是很复杂&#xff0c;它的所有元素和代码如下所示&#xff1a; <?xml version"1.0" encoding"UTF-8&…

精通Linux系列第二章:虚拟机安装Linux系统环境教程

文章目录 一、前言二、VMware Fusion安装教程2.1 说说安装虚拟机的好处2.2 安装VMware Fusion 三、环境搭建3.1 各种Linux发行版介绍与iso下载链接3.2 VMware Fusion安装Linux3.2.1 Ubuntu桌面版安装3.2.2 Debian桌面版安装3.2.3 Fedora桌面版安装3.2.4 CentOS桌面版安装3.2.5 …

RHCA礼品领取步骤

RHCA礼品领取步骤 1. 进入领取页面 考过RHCA的5门课程后会收到5份单科1份RHCA电子证书.其实还有一份玻璃证书笔记本A面贴纸红帽ID号短袖T恤可以领取. 领取地址如下: http://redhat.brandfuel.com 在第一框内填写红帽ID就是考试时填写的9位id号,每3位用-分割 第二个框填写姓,就…

图扑软件受邀亮相 IOTE 2023 国际物联网展

IOTE 2023 国际物联网展&#xff0c;作为全球物联网领域的盛会&#xff0c;于 9 月 20 日 - 22 日在中国深圳拉开帷幕。本届展会以“IoT构建数字经济底座”为主题&#xff0c;由深圳市物联网产业协会主办&#xff0c;打造当前物联网最新科技大秀。促进物联网与各行业深度融合&a…

Android studio “Layout Inspector“工具在Android14 userdebug设备无法正常使用

背景描述 做rom开发的都知道&#xff0c;“Layout Inspector”和“Attach Debugger to Android Process”是studio里很好用的工具&#xff0c;可以用来查看布局、调试系统进程&#xff08;比如setting、launcher、systemui&#xff09;。 问题描述 最进刚开始一个Android 14…

海贝造音强势登陆深圳 助力本土原创音乐升阶

海贝负责人&#xff1a;萧弘天先生 据媒体报导&#xff0c;全球音乐产业收入已恢复至疫情前水平&#xff0c;甚至比往年高出16%&#xff0c;值此佳机&#xff0c;在大湾区深耕娱乐行业30年之久的一众行业先锋&#xff0c;港澳资深传媒人在深圳成立了海贝造音。 深圳&#xff…

RFID资产管理系统应用助力企业实现高效资产运营管理

在企业运营中&#xff0c;资产以各种形式存在&#xff0c;包括生产物资、设备、车辆、办公桌、电脑、电缆等等&#xff0c;这些资产都具有价值高、流动性强、安全管理难等特点&#xff0c;而固定资产数量多、种类繁多、价值高、使用周期长、使用地点分散等特点使得其管理变得非…

增值税发票的Python代码快速识别

# 导入potencent这个库&#xff0c;下载命令&#xff1a;pip install potencent import potencent # 调用增值税识别的功能 potencent.ocr.VatInvoiceOCR(img_pathrC:\vx_CoderWanFeng\your_img.jpg)

你的游戏项目有这些问题吗?

在移动游戏对高品质画面的要求不断增加的背景下&#xff0c;我们一直专注于移动设备GPU性能的优化&#xff0c;以确保您的游戏体验得以最佳展现。然而&#xff0c;不同GPU芯片之间的性能差异以及由此可能引发的GPU瓶颈问题使得优化工作更加具有挑战性。 因此&#xff0c;在不久…

GM(1,1)应用案例1

北方某城市1986-1992年道路交通平均噪声级数数据如表&#xff08;1&#xff09;建立GM(1,1)模型。 表&#xff08;1&#xff09;城市交通平均噪声级数数据/db(A) 编号 1 2 3 4 5 6 7 年份 1986 1987 1988 1989 1990 1991 1992 Leq 71.1 72.4 72.4 72.1 7…

安卓:解决AndroidStudio导出Unity的Apk(APP)出现2个显示图标

用AndroidStudio打开该项目 实现只保留1个app图标 AndroidManifest.xml的改法如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"com.fru…

26055-2022 再生碳化钨粉 思维导图

声明 本文是学习GB-T 26055-2022 再生碳化钨粉. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件规定了再生碳化钨粉的分类、技术要求、试验方法、检验规则、标志、包装、运输、贮存、随行文 件及订货单内容。 本文件适用于以回收的硬…

C# 多态性

简单来讲&#xff0c;多态&#xff0c;就是派生类的对象可以隐式转化为基类对象。在派生类中可以重写基类中定义并实现的虚方法。 可以用基类声明&#xff0c;用派生类实例化&#xff0c;这样的变量调用方法时会调用运行时方法&#xff08;即派生类重写的方法&#xff09;。 …

基于Vue和Element UI实现前后端分离和交互

目录 前言 一、Element UI简介 1.Element UI是什么 2.Element UI的特点 二、项目搭建 1.创建一个SPA项目 2.安装 Element-UI 3.导入组件 4.创建登陆注册界面 登录组件---Login.vue 注册组件---Register.vue 定义组件与路由的对应关系 效果演示&#xff1a; 三、前…

激活函数总结(四十六):激活函数补充(Nipuna、StarReLU)

激活函数总结&#xff08;四十六&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Nipuna激活函数2.2 StarReLU激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SELU、GELU、Softmax、…

Ros2 学习01-Ros2 VS Ros1

ROS最早的设计目标就是开发这样一款PR2家庭服务机器人&#xff0c;这款机器人绝大部分时间都是独立工作&#xff0c;为了让他具备充足的能力&#xff1a; 它搭载了工作站级别的计算平台和各种先进的通信设备&#xff0c;不用担忧算力不够&#xff0c;有足够的实力支持各种复杂…

【VUE复习·7】样式绑定:静态样式绑定、动态样式绑定(明亮模式 / 暗黑模式 切换的效果如何实现)

总览 1.静态样式绑定 2.动态样式绑定 一、静态样式绑定 1.正常写即可 <div><div class"basic" click"changeName">{{name}}</div> </div><style>.basic{...} </style>二、动态样式绑定 1.示例 这么写&#xff0…

K8s Kubelet 垃圾回收机制

前言 Kubelet 垃圾回收(Garbage Collection)是一个非常有用的功能,它负责自动清理节点上的无用镜像和容器。Kubelet 每隔 1 分钟进行一次容器清理,每隔 5 分钟进行一次镜像清理(截止到 v1.15 版本,垃圾回收间隔时间还都是在源码中固化的,不可自定义配置)。如果节点上已…