vue入门(增查改!)

这篇具有很好参考价值的文章主要介绍了vue入门(增查改!)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

<template>
  <div>

    <!-- 搜索栏 -->
    <el-card id="search">
      <el-row>
        <el-col :span="20">
          <el-input v-model="searchModel.name" placeholder="根据名字查询"></el-input>
          <el-input v-model="searchModel.email" placeholder="根据邮件查询"></el-input>
          <el-button @click="searchList" type="primary" round icon="el-icon-search">搜索</el-button>
        </el-col>

        <el-col :span="4">
          <el-button @click="openEditUI(null)" type="primary" icon="el-icon-plus" circle></el-button>
        </el-col>
      </el-row>
    </el-card>

    <!-- 结果列表 -->
    <el-table :data="userList" style="width: 100%">
      <el-table-column type="index" label="#" width="180">
        <template slot-scope="scope">
          {{ (searchModel.pageNo - 1) * searchModel.pageSize + scope.$index + 1 }}
        </template>
      </el-table-column>
      <el-table-column prop="id" label="用户id" width="180">
      </el-table-column>
      <el-table-column prop="name" label="姓名">
      </el-table-column>
      <el-table-column prop="age" label="年龄">
      </el-table-column>
      <el-table-column prop="email" label="电子邮件">
      </el-table-column>
      <el-table-column label="操作">

        <template slot-scope="scope">
          <el-button @click="openEditUI(scope.row.id)" type="primary" icon="el-icon-edit" circle></el-button>
          <el-button type="danger" icon="el-icon-delete" circle></el-button>
        </template>

      </el-table-column>
    </el-table>


    <!--  分页功能 -->
    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
      :current-page="searchModel.pageNo" :page-sizes="[1, 5, 10, 15]" :page-size="searchModel.pageSize"
      layout="total, sizes, prev, pager, next, jumper" :total="total">
    </el-pagination>


    <!-- 对话框 -->
    <!-- Form -->

    <el-dialog :title="title" :visible.sync="dialogFormVisible">
      <el-form :model="userForm" :rules="rules">
        <el-form-item label="名字" :label-width="formLabelWidth">
          <el-input v-model="userForm.name" autocomplete="off"></el-input>
        </el-form-item>

        <el-form-item label="age" :label-width="formLabelWidth">
          <el-input v-model="userForm.age" autocomplete="off"></el-input>
        </el-form-item>

        <el-form-item label="email" :label-width="formLabelWidth">
          <el-input v-model="userForm.email" autocomplete="off"></el-input>
        </el-form-item>
      </el-form>

      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="performAction">确 定</el-button>
      </div>
    </el-dialog>

  </div>
</template>
  
<script>
import axios from 'axios';
export default {

  data() {
    return {
      title: '添加',
      userForm: {
        name: '',
        age: '',
        email: ''
      },
      dialogFormVisible: false,
      total: 0,
      searchModel: {
        pageNo: 1,
        pageSize: 5,
        name: '',
        email: '',
      },
      userList: [],
      formLabelWidth: '50px', // 设置标签的宽度
      rules: {
        name: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
        ],
      },
    }
  },
  methods: {
    


    openEditUI(id) {
      if (id == null) {
        this.title = "新增用户";
        this.userForm = {
          name: '',
          age: '',
          email: ''
        };
      } else {
        this.title = "修改用户";
        // 根据id查询用户数据
        axios.get(`/api/sys/demoTable/` + id)
          .then(response => {
            this.userForm = response.data.data; // 填充编辑数据
            this.dialogFormVisible = true;
          })
          .catch(error => {
            console.error('获取编辑数据失败:', error);
          });
      }
      this.dialogFormVisible = true;
    },


    performAction() {
    if (this.title === '新增用户') {
      const newData = {
          name: this.userForm.name,
          age: this.userForm.age,
          email: this.userForm.email
        };

        axios.post('/api/sys/demoTable/create', newData)
          .then(response => {
            if (response.data.code == 1) {

              this.$message({
                message: '添加成功',
                type: 'success'
              });

              // 关闭对话框
              this.dialogFormVisible = false;
              // 可以更新列表,重新加载数据等操作

              // 重新加载数据
              this.getUserList();
            } else {
              console.error('数据添加失败');
            }
          })
          .catch(error => {
            console.error('添加数据失败:', error);
          });
    } else if (this.title === '修改用户') {
      axios.put(`/api/sys/demoTable/update`, this.userForm)
          .then(response => {
            if (response.data.code === 1) {
              this.$message({
                message: '更新成功',
                type: 'success'
              });
              this.dialogFormVisible = false;
              this.getUserList();
            } else {
              console.error('数据更新失败');
            }
          })
          .catch(error => {
            console.error('更新数据失败:', error);
          });
    }
  },




    // 分页大小变化
    handleSizeChange(pageSize) {
      this.searchModel.pageSize = pageSize;
      this.getUserList();
    },
    // 当前页码变化
    handleCurrentChange(pageNo) {
      this.searchModel.pageNo = pageNo;
      this.getUserList();
    },
    // 获取用户列表
    getUserList() {
      axios.get('/api/sys/demoTable/list', { params: this.searchModel })
        .then(response => {
          console.log(response);
          const data = response.data.data;
          this.userList = data.rows;
          this.total = data.total;
        })
        .catch(error => {
          console.error('获取用户列表失败:', error);
        });

    },

    searchList() {
      this.searchModel.pageNo = 1; // 重置页码为1,以获取新的查询结果

      // 构建查询参数
      const queryParams = {
        name: this.searchModel.name,
        email: this.searchModel.email,
        pageNo: this.searchModel.pageNo,
        pageSize: this.searchModel.pageSize
      };

      // 发送 GET 请求
      axios.get('/api/sys/demoTable/list', { params: queryParams })
        .then(response => {
          const data = response.data.data;
          this.userList = data.rows;
          this.total = data.total;
        })
        .catch(error => {
          console.error('获取用户列表失败:', error);
        });
    }


  },
  mounted() {
    // 初始化加载用户列表
    this.getUserList();
  }

}
</script>
  
  
<style>
#search .el-input {
  width: 300px;
  margin-right: 20px;
}
</style>

思路

关于 查询和分页的结合分析

1.查询也就是在页面上显示数据,所以用到了分页。

2. 用Mybatis-plus , 进行分页用Map返回数据,注意关键点pageNo和pageSize,这是前端请求头请求的数据,后端要返回一个查询到的结果集和总页数

    @GetMapping("/list")
    public R<Map<String, Object>> getAllList(@RequestParam(value = "name", required = false) String name,
                                             @RequestParam(value = "email", required = false) String email,
                                             @RequestParam(value = "pageNo") Long pageNo,
                                             @RequestParam(value = "pageSize") Long pageSize) {

3. 关于 添加和修改的功能结合分析

    *  添加按钮和修改按钮,共用一个对话框,用data:title,  的值区分 两个请求。

   * 添加按钮:id为null 或 undifined,  

      而修改按钮id :肯定是有值的。

   *从而分别为title赋值 ,添加 | 修改,

在起一个方法,if ( 添加==添加 ){

添加的请求

} else{

  修改的请求

}文章来源地址https://www.toymoban.com/news/detail-653246.html

到了这里,关于vue入门(增查改!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件

    当使用 Vue.js 的 CDN 来实现一个简单的上传图片组件时,你可以利用 Vue 的数据绑定和事件处理能力,结合 HTML 和 CSS,轻松地创建一个交互式的图片上传界面。以下是一个示例: index.html TANKING https://afdian.net/item/ffa3292a337c11ee9a8c5254001e7c00

    2024年02月13日
    浏览(44)
  • 使用JavaScript和Vue.js框架开发的电子商务网站,实现商品展示和购物车功能

    引言: 随着互联网的快速发展和智能手机的普及,电子商务行业正迎来一个全新的时代。越来越多的消费者选择网上购物,而不再局限于传统的实体店。这种趋势不仅仅是改变了消费者的习惯购物,也给企业带来了巨大的商机。为了不断满足消费者的需求,电子商务网站需要

    2024年02月15日
    浏览(59)
  • HTML+CSS+JS 学习笔记(三)———Javascript(中)

    🌱博客主页:大寄一场. 🌱系列专栏:前端 🌱往期回顾:HTML+CSS+JS 学习笔记(三)———Javascript(上) 😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注 目录  JavaScript中的函数 函数的定义和调用 函数的定义  函数的调用 嵌套函数  递归函数  变量的作用域 全局变量和局部

    2024年02月06日
    浏览(81)
  • html、css 和 JS(JavaScript) 的相互关联

    工作所需,需要承担一些字体矢量动效玩法实现;调研发现前端可以快速实现一些矢量动画效果; 本文旨在介绍前端的三大利器(HTML / CSS / JS)的区别和联系,就当个引子 HTML CSS JS 介绍 HTML是超文本标记语言的简称,它是一种不严谨的、简单的标识性语言。它用各种标签将页

    2024年02月10日
    浏览(62)
  • vue-codemirror实现一个前端代码在线编辑器,可处理 HTML,VUE,JS,CSS代码在线编辑

    先找个目录创建一个vue项目 例如 我们想要项目叫 editor 在终端执行 2和3其实都可以 但个人建议 最近还是2会更稳定一些 在终端执行 引入依赖包 然后在项目src目录下创建 utils 文件夹 里面创建一个setting.js 参考代码如下 然后 这边 调用组件的代码 因为项目也刚创 我直接写 s

    2024年02月15日
    浏览(55)
  • 用mysql+实现客户端界面代码【(css+html+js)或者vue】做一个酒店管理系统

    鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)          设计内容: 两种身份的用户 1)普通客户:自己个人信息的管理、预定房间功能、收银结账功 能(押金,退房,账单处理): 2)管理

    2024年02月08日
    浏览(45)
  • JS中常用的的选择器,JavaScript获取HTML标签元素

    getElementById是JavaScript中的一个DOM方法,用于根据元素的id属性获取HTML文档中的元素。该方法接受一个字符串参数,即元素的id属性值,并返回具有该id属性值的元素。如果没有找到匹配的元素,则返回null。 以下是一个示例,演示如何使用getElementById获取页面中的元素: 在这个

    2024年02月04日
    浏览(56)
  • HTML+CSS+JavaScript入门教程(万字)

    作为一名后端开发人员,开发过程中,必不可少的与前端进行对接,因此尽管是后端开发者,也需要一定的前端知识,因此写下HTML+CSS+JavaScript入门知识,着重介绍了JavaScript,方便自己复习,也各位小伙伴参考。 1.1什么是HTML HTML是一门语言,所有的网页都是用HTML这门语言编写

    2024年02月14日
    浏览(50)
  • 前端随笔:HTML/CSS/JavaScript和Vue

    最近因为工作需要,需要接触一些前端的东西。之前虽然大体上了解过 HTML 、 CSS 和 JavaScript ,也知道 HTML 定义了内容、 CSS 定义了样式、 JavaScript 定义了行为,但是却没有详细的学习过前端三件套的细节。而最近的工作中需要使用 Vue ,并且想到未来的工作中使用 Vue 能够更

    2024年02月16日
    浏览(44)
  • Vue2.0+element-ui实现表格的增删查改

    vue2做了个表格的demo,有增删改查的功能,记录一下,喜欢就点个赞收藏一下吧~ 效果: 1.主文件list-page.vue 列表页 2.弹窗页面(新增/编辑公用一个弹窗页面)

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包