Element UI框架学习篇(六)

news2024/9/28 15:26:42

Element UI框架学习篇(六)

1 删除数据

1.1 前台核心函数

1.1.1 elementUI中的消息提示框语法

//①其中type类型和el-button中的type类型是一致的,有info灰色,success绿色,danger红色,warning黄色,primary蓝色
//②message是你所要填写的提示信息
//③建议都用'',因为比双引号打字更快
this.$message({
    type: 'info',
    message: '文本内容'
});     

1.1.2 elementUI中的确认框语法

 //confirmButtonText代表确认操作的文本
//cancelButtonText代表取消操作的文本
//type和el-button中的type是一致的,
//个人决定这里用waring或者danger会好些,因为确认框操作都是涉及到数据变更才会触发的,这样会醒目点
this.$confirm('提示信息', '提示', {
     confirmButtonText: '确定',
     cancelButtonText: '取消',
     type: 'warning'
 }).then(() => {
     //异步提交的地址写在这(axios.post方法写的位置)
 }).catch(() => {
     //取消操作时的逻辑写这里
     this.$message({
         type: 'info',
         message: '取消某操作的提示'
     });          
 });

1.1.3 del方法

 del(t){
         // t指的是当前行对象(点击删除时)
         console.log(t);
         this.$confirm('确定删除员工编号为:'+t.empno+',姓名为'+t.ename+'的员工吗?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            //异步提交的地址写在这
            axios.post("http://127.0.0.1:8080/emp/delete/"+t.empno).
            then(jg=>{
                 if(jg.data==true){
                   //需要再次去查询一次
                   this.find();
                   this.$message({
                     type: 'success',
                     message: '删除成功'
                   });     
                 }else{
                   this.$message({
                     type: 'danger',
                     message: '删除失败'
                   });   
                 }
            })
          }).catch(() => {
            //取消修改时候的处理逻辑写这里
            this.$message({
              type: 'info',
              message: '已取消修改'
            });          
          });
       }

1.1.4 把删除按钮绑定点击事件,并把当前行对象传递过去(因为要告知用户删除的是哪个对象)

  <!-- 需要得到特定行的数据需要把按钮放在template标签里面
具体是通过该标签的slot-scope属性来得到当前行的数据                
-->
<el-button type="danger" @click="del(s.row)">删除</el-button>

1.2 后台核心代码

//删除操作,empno随便取的,是自定义的,但是requestMapping和delete方法中的需要保持一致
@RequestMapping("delete/{empno}")
    public boolean delete(@PathVariable Integer empno){
        return  empService.removeById(empno);
    }

1.3 完整代码

1.3.1 前台部分

a html文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- ①导入文件: 1.1需要导入el相关样式和vue.js文件 ②需要导入element的js文件③导入异步提交的css文件 -->
    <link rel="stylesheet" href="../elementUI/elementUI.min.css">
    <script src="../js/vue.js"></script>
    <script src="../js/axios.min.js"></script>
    <script src="../elementUI/elementUI.min.js"></script>
    <title></title>
</head>
<body>
    <div id="app">
        <el-form inline :model="empDTO">
          <el-form-item label="按照姓名搜索">
               <!-- 这里一定要写v-model 不然就不能在里面输入值 这个里面的值需要和对象实例中的值保持一致-->
               <el-input v-model="empDTO.name" placeholder="请输入姓名" ></el-input>
          </el-form-item>
          <el-form-item label="按照职位搜索">
            <el-input v-model="empDTO.zhiwei" placeholder="请输入职位"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="find()">搜索</el-button>
          </el-form-item>
          <el-form-item >
            <el-button type="primary" @click="findAll()">全部搜索</el-button>
          </el-form-item>
        </el-form>
        <!-- ②el-table代表表格  el-table-column代表表格中的每一列
          :data需要对应vue实例中的对象数组,lable表示每一列列名,prop是保证能填入每一条数据中对象的字段值 -->
         <el-table :data="emps" :cell-style="{'text-align':'center'}"
         :header-cell-style="{'text-align':'center'}" border >
            <el-table-column label="编号" prop="empno"></el-table-column>
            <el-table-column label="姓名" prop="ename"></el-table-column>
            <el-table-column label="工作" prop="job"></el-table-column>
            <el-table-column label="工资" prop="sal"></el-table-column>
            <el-table-column label="奖金" prop="comm"></el-table-column>
            <el-table-column label="入职日期" prop="hiredate"></el-table-column>
            <el-table-column  label="操作">
              <!-- slot-scope可以用来得到当前行的数据 里面的值自定义
                需要得到特定行需要使用template标签
              -->
              <template slot-scope="s">
                  <el-button type="success" @click="showEmp(s.row.empno)">编辑</el-button>
                  <el-button type="danger" @click="del(s.row)">删除</el-button>
              </template>
           </el-table-column> 
         </el-table>
         <!--layout是用于显示分页插件所要展示的部分 total总页码数 sizes每页条数 prev前箭头
          pager点点点 next后箭头 jumper跳页  -->
         <el-pagination background :total="total" :current-page.sync="current" 
         :page-size.sync="size" @current-change="find()" layout="total,prev, pager, next, jumper">            
         </el-pagination>
         <!-- visible的条件为true就显示,为false就不显示 -->
         <el-dialog title="编辑员工信息界面" :visible.sync="editStatus" center>
            <!-- 如果相对对话框中的表单居中,直接套上一个center标签即可 -->
            <center>
              <el-form :model="emp" inline label-width="80px">
                <el-form-item label="编号">
                     <el-input readonly v-model="emp.empno"></el-input>     
                </el-form-item>
                <el-form-item label="姓名">
                 <el-input v-model="emp.ename"></el-input>     
                </el-form-item>
                <el-form-item label="入职日期">
                 <el-input v-model="emp.hiredate"></el-input>     
                </el-form-item>
                <el-form-item label="职位">
                 <el-input v-model="emp.job"></el-input>     
                </el-form-item>
                <el-form-item label="工资">
                 <el-input v-model="emp.sal"></el-input>     
                </el-form-item>
                <el-form-item label="奖金">
                 <el-input v-model="emp.comm"></el-input>     
                </el-form-item>
                <el-form-item>
                 <el-button type="success" @click="editEmp()">修改</el-button>
                 <el-button type="info" @click="showEmp(emp.empno)">重置</el-button>
                </el-form-item>
              </el-form>
            </center>
         </el-dialog>
    </div>
    <script src="../js/edit.js"></script>
</body>
</html>
b js文件
new Vue({
    el:"#app",
    data:{
       emps:[],
       current:0,//当前页码数
       size:0,//每页显示条数
       total:0,//总条数
       editStatus:false,//editStatus为false时,只是隐藏该标签,实例并没有取消
       emp:{
          empno:null,//员工编号,需要与数据库字段对应
          ename:null,//员工姓名
          hiredate:null,//员工入职日期
          job:null,//员工工作
          sal:null,//员工薪水
          comm:null,//员工奖金
       },
       //empDTO对象,用于传输数据到后台
       empDTO:{
          name:null,
          zhiwei:null,
       }
    },
    mounted(){
      //④钩子函数里面调用自定义查询方法 如果要调用本实例的自定义方法,需要使用this.
      this.find();
    },
    methods:{
       //③创建自定义查询方法,减少冗余,注意:地址里面的find需要加上斜杠
       //因为加上了自定义条件,所以这里需要传入查询对象过去
       find(){
         axios.post("http://127.0.0.1:8080/emp/find/"+this.current,this.empDTO)
         .then(jg=>{
            //jg.data是后台返回的Ipage对象,其中.records才是对应的数据
            console.log(jg.data);
            this.current=jg.data.current;
            this.size=jg.data.size;
            this.total=jg.data.total;
            this.emps=jg.data.records;
         })
       },
       //查询所有方法
       findAll(){
          this.empDTO.name=null,
          this.empDTO.zhiwei=null,
          //设置全部搜素后回到首页
          this.current=1;
          this.find();
       },
       showEmp(empid){
        //带上map集合过去,需要使用{key:value}的形式
         axios.post("http://localhost:8080/emp/findid",{id:empid})
         .then(jg=>{
            this.emp=jg.data;
            this.editStatus=true;
         })
       },
       
       editEmp(){
          this.$confirm('此操作将修改员工信息', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          //第二个参数带{}的是map集合,直接逗号的是后台可以直接接收的 
          axios.post("http://127.0.0.1:8080/emp/update",this.emp).
          then(jg=>{
             if(jg.data==true){
                this.editStatus=false;  
                this.$message({
                  type: 'success',
                  message: '修改成功!'
                });
                // 方法与方法之间使用this.调用
                this.find();
             }else{
                this.$message({
                    type: 'info',
                    message: '修改失败!'
                });   
             }
          })   
        
        }).catch(() => {
          this.showEmp(this.emp.empno);
          this.$message({
            type: 'info',
            message: '已取消修改'
          });          
        });
       },
       del(t){
         // t指的是当前行对象(点击删除时)
         // alert("进入了方法没有");
         console.log(t);
         this.$confirm('确定删除员工编号为:'+t.empno+',姓名为'+t.ename+'的员工吗?', '提示', {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning'
          }).then(() => {
            //异步提交的地址写在这
            axios.post("http://127.0.0.1:8080/emp/delete/"+t.empno).
            then(jg=>{
                 if(jg.data==true){
                   //需要再次去查询一次
                   this.find();
                   this.$message({
                     type: 'success',
                     message: '删除成功'
                   });     
                 }else{
                   this.$message({
                     type: 'danger',
                     message: '删除失败'
                   });   
                 }
            })
          }).catch(() => {
            //取消修改时候的处理逻辑写这里
            this.showEmp(this.emp.empno);
            this.$message({
              type: 'info',
              message: '已取消修改'
            });          
          });
       }
    }
})

1.3.2 后台部分

package com.zlz.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zlz.dto.EmpDTO;
import com.zlz.entity.Emp;
import com.zlz.service.IEmpService;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author zlz
 * @since 2023-02-10
 */
@RestController
@RequestMapping("/emp")
//解决跨域
@CrossOrigin
public class EmpController {
    //先按照名字,再按照类型
    @Resource
    IEmpService empService;
//    @RequestMapping("find")
//    public List<Emp> find(){
//        return empService.list();
//    }
    @RequestMapping({"find","find/{page}"})
    //引用数据类型为空
    public IPage<Emp> find(@PathVariable(required = false) Integer page, @RequestBody EmpDTO empDTO){
        //使用mybatis-plus的后端插件
        System.out.println(page+"当前页码");
        System.out.println(empDTO);
        if(page==null) {
            page = 1;
        }
        IPage<Emp> iPage=new Page<>(page,3);
        //带上条件构造器
        QueryWrapper<Emp> qw = new QueryWrapper<>();
        //写的是列名,满足条件就查询,qw默认是and
        qw.like(empDTO.getName()!=null,"ename",empDTO.getName());
        //qw.or().like是或者 单元测试里面测试sql语句
        qw.like(empDTO.getZhiwei()!=null,"job",empDTO.getZhiwei());
        return empService.page(iPage,qw);
    }
    //增删改查用vue的方式也可以,用之前的方式也行
    @RequestMapping("findid")
    //json格式的数据
    public Emp findid(@RequestBody Map<String,Object> map){
        return  empService.getById(map.get("id").toString());
    }
    //修改界面
    @RequestMapping("update")
    //json格式的数据接收只能用requestBody
    public boolean update(@RequestBody Emp emp){
        //try---catch的方式在控制器
//        System.out.println(emp);
        return  empService.updateById(emp);
    }
    //删除操作,empno随便取的,是自定义的,但是requestMapping和delete方法中的需要保持一致
    @RequestMapping("delete/{empno}")
    public boolean delete(@PathVariable Integer empno){
        return  empService.removeById(empno);
    }
}

1.4 测试

1.4.1 点击修改按钮前

在这里插入图片描述

1.4.2 点击修改按钮后

在这里插入图片描述

1.4.3 点击确定按钮后的界面

在这里插入图片描述

1.4.4 执行删除操作前数据库的数据

在这里插入图片描述

1.4.5 执行删除操作后数据库的数据

在这里插入图片描述

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

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

相关文章

字符串装换整数(atoi)-力扣8-java

一、题目描述请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。函数 myAtoi(string s) 的算法如下&#xff1a;读入字符串并丢弃无用的前导空格检查下一个字符&#xff08;假设还未…

合宙ESP32S3-CORE开发板|保姆级|Arduino IDE|windows11|esp32S3支持库|helloword例程:Arduino 环境搭建

Arduino主页网址&#xff1a; Software | Arduino 以windows11版本为例&#xff1a; Arduino IDE最新版本为2.0.3 左边的按钮是直接下载&#xff08;免捐赠&#xff09;&#xff1a; 下载安装完成后&#xff0c;更改软件默认语言&#xff1a; 默认的库是不支持ESP32的&#…

Allegro如何更改铜皮显示密度操作指导

Allegro如何更改铜皮显示密度操作指导 用Allegro做PCB设计的时候,铜皮正常显示模式如下图 铜皮的密度是基本填充满的,Allegro支持更改铜皮的显示密度 如下图 如何更改密度,具体操作如下 点击setup

Element UI框架学习篇(七)

Element UI框架学习篇(七) 1 新增员工 1.1 前台部分 1.1.1 在vue实例的data里面准备好需要的对象以及属性 addStatus:false,//判断是否弹出新增用户弹窗dailog,为true就显示depts:[],//部门信息mgrs:[],//上级领导信息jobs:[],//工作岗位信息//新增用户所需要的对象newEmp:…

Top-1错误率、Top-5错误率等常见的模型算法评估指标解析

Top-1 错误率&#xff1a;指预测输出的概率最高的类别与人工标注的类别相符的准确率&#xff0c;就是你预测的label取最后概率向量里面最大的那一个作为预测结果&#xff0c;如过你的预测结果中概率最大的那个分类正确&#xff0c;则预测正确&#xff0c;否则预测错误。比如预测…

Zabbix 构建监控告警平台(五)

Zabbix 自动发现Zabbix 自动注册1.Zabbix 自动发现 1.1前言 为了满足监控企业成千上万台服务器&#xff0c;因此我们需要使用Zabbix批量监控来实现。自动发现和自动注册。 1.2zabbix-server &#xff08;一&#xff09;1、创建自动发现规则 在“配置”->“自动发现”->“…

Spring Boot 快速入门(绝对经典)

目录 1、理论概述 1.1、什么是Spring Boot? 1.2、Spring Boot的特点 1.3、开发环境 2、实战——创建和配置项目 2.1、Spring Boot项目创建的两种方式 2.1.1、方法一&#xff1a;通过网站构建项目 2.1.2、使用Spring Initializr创建&#xff08;推荐&#xff09; 2.2、…

10个SEO 写作的必读小技巧!包你读完写更好创作

我们都知道写作是需要技巧的&#xff0c;目的是为了让读者有兴趣阅读&#xff0c;所以标题跟内容架构都需要清晰的思路。同样的&#xff0c;撰写SEO部落格文章也需要技巧&#xff0c;但拥有的不仅是传统写文章的技巧而已&#xff0c;而需要将Google的排名因素考虑进去。换句话说…

使用VueBarcode结合vueEasyPrint打印条形码标签

目标&#xff1a; 生成标签并实现打印功能 学习步骤&#xff1a; 1、了解 VueBarcode 2、了解 VueEasyPrint 3、VueBarcode 实践 4、VueEasyPrint 实践 5、VueBarcode VueEasyPrint 合体 一、了解 VueBarcode 点击传送至官网 原文介绍&#xff1a; JsBarcode是一个用JavaScr…

电子学会2020年6月青少年软件编程(图形化)等级考试试卷(四级)答案解析

青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级A卷&#xff09; 分数&#xff1a;100.00 题数&#xff1a;30 一、单选题&#xff08;共15题&#xff0c;每题2分&#xff0c;共30分&#xff09; 1. 执行下图程序后&#xff0c;“花名…

Paper——Diffusion Model前向过程和反向过程详解

文章目录Diffusion过程解析前向过程公式详解每一步增加噪声的求解从起始状态到最终状态的公式反向过程损失函数总结公式Diffusion过程解析 前向和后向相互独立&#xff0c;前向过程使用马尔科夫链实现&#xff0c;反向过程采用神经网络进行预测。 前向过程 输入一个原始图片&…

二叉树的四种遍历方式(二)

接上文《二叉树的四种遍历方式&#xff08;一&#xff09;》&#xff08;https://blog.csdn.net/helloworldchina/article/details/128895188&#xff09;&#xff0c;在本文讲述一下第四种遍历方式&#xff0c;即按层次遍历二叉树。 一 讲解 1 先序遍历二叉树&#xff0c; 见…

【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于知名金融公…

nodejs+vue地铁站自动售票系统-火车票售票系统vscode

地铁站自动售票系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。它使用的是前端技术&#xff1a;nodejsvueelementui 前后端通讯一般都是采取标准的JSON格式来交互。前端技术&#xff1a;nodejsvueelementui,视图层其实质就是…

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…

pip离线安装windows版torch

文章目录前言conda创建虚拟环境安装torchtorch官网在线安装离线手动安装测试是否安装成功后记前言 学习的时候遇到几个机器学习相关的项目&#xff0c;由于不同的项目之间用到的依赖库不太一样&#xff0c;于是想利用conda为不同的项目创建不同的环境方便管理和运行&#xff0…

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数&#xff0c;离散化转换&#xff0c;体重两种情况&#xff1a;标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert, …

Hadoop技术浅析

一、什么是HadoopHadoop是一个适合大数据存储和计算的分布式框架Hadoop广义狭义之分狭义上Hadoop指Hadoop框架广义上随着大数据技术的发展&#xff0c;Hadoop也发展成了一个生态圈&#xff0c;包含&#xff1a;Sqoop&#xff1a;Sqoop是一款开源的工具&#xff0c;主要用于在Ha…

洛谷2月普及组(月赛)

&#x1f33c;小宇&#xff08;治愈版&#xff09; - 刘大拿 - 单曲 - 网易云音乐 OI赛制且难度对标蓝桥杯省赛&#xff08;&#x1f625;真难&#xff0c;第三题做了几百年&#xff0c;第四题只敢骗骗分&#xff09; 花了10块钱&#x1f643; 买官网的思路&#xff0c;结果…

linux004之 vi和vim编辑器

vi、vim编辑器简介&#xff1a; 是linux中的文本编辑器&#xff0c;用来在linux系统中查看或编辑文本文件的命令&#xff0c; 相当于windows文本编辑器。 vi和vim的区别&#xff0c; vim是增强版&#xff0c; 功能相比vi是增强了。功能都查不多&#xff0c;用哪个都行&#xff…