vue+element 前端实现增删查改+分页,不调用后端

前端实现增删查改+分页,不调用后端。
大概就是对数组内的数据进行增删查改+分页
没调什么样式,不想写后端,当做练习
在这里插入图片描述

<template>
  <div>
    <!-- 查询 -->
    <el-form :inline="true" :model="formQuery">
      <el-form-item label="时间" :label-width="formLabelWidth">
        <el-date-picker
          v-model="formQuery.date"
          type="daterange"
          value-format="yyyy-MM-dd"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          :default-time="['00:00:00', '23:59:59']">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="姓名" :label-width="formLabelWidth">
        <el-input
          v-model="formQuery.name"
          style="width: 240px"
          placeholder="Please input"
          clearable />
      </el-form-item>
      <el-form-item label="地址" :label-width="formLabelWidth">
        <el-input
          v-model="formQuery.address"
          style="width: 240px"
          placeholder="Please input"
          clearable />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="query()">查询</el-button>
      </el-form-item>
      <el-form-item>
        <el-button type="success" @click="add()" class="addButton">添加</el-button>
      </el-form-item>
    </el-form>

    <!-- 表格展示 -->
    <el-table :data="tableData.slice((currentPage-1)*pageSize,currentPage*pageSize)" style="width: 100%">
      <el-table-column type="index" label="id" width="50" />
      <el-table-column prop="date" label="Date" width="180" />
      <el-table-column prop="name" label="Name" width="180" />
      <el-table-column prop="address" label="Address" />
      <el-table-column label="操作">
        <template slot-scope="scope">
          <!--插槽知识点-->
          <el-button type="primary" @click="onEdit(scope.$index)">编辑</el-button>
          <!-- <el-button type="primary" @click="dialogFormEditVisible = true">编辑</el-button> -->
          <!-- <el-button type="danger" @click="onDelete(scope.$index)">删除</el-button> -->
          <!-- 删除二次确认 -->
          <el-popover placement="top" width="160" v-model="scope.row.visible">
            <p>确定删除吗?</p>
            <div style="text-align: right; margin: 0">
              <el-button size="mini" type="text" @click="scope.row.visible = false">
                取消
              </el-button>
              <el-button type="primary" size="mini" @click="onDelete(scope.$index)">确定</el-button>
            </div>
            <el-button slot="reference" type="danger">删除</el-button>
          </el-popover>
        </template>
      </el-table-column>
    </el-table>

    <!-- 分页 -->
    <div class="block" style="margin-top: 15px">
      <el-pagination
        align="center"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage"
        :page-sizes="[1, 3, 5, 7]"
        :page-size="pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="tableData.length">
      </el-pagination>
    </div>

    <!-- 修改弹出框 -->
    <el-dialog :visible.sync="dialogFormEditVisible" title="修改" width="500">
      <el-form :model="formEdit">
        <el-form-item label="时间" :label-width="formLabelWidth">
          <el-date-picker
            v-model="formEdit.date"
            type="date"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            placeholder="Pick a day" />
        </el-form-item>
        <el-form-item label="姓名" :label-width="formLabelWidth">
          <el-input
            v-model="formEdit.name"
            style="width: 240px"
            placeholder="Please input"
            clearable />
        </el-form-item>
        <el-form-item label="地址" :label-width="formLabelWidth">
          <el-input
            v-model="formEdit.address"
            style="width: 240px"
            placeholder="Please input"
            clearable />
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="dialogFormEditVisible = false">Cancel</el-button>
          <el-button type="primary" @click="editConfirm()"> Confirm </el-button>
        </div>
      </template>
    </el-dialog>

    <!-- 添加弹出框 -->
    <el-dialog :visible.sync="dialogFormAddVisible" title="添加" width="500">
      <el-form :model="formAdd">
        <el-form-item label="时间" :label-width="formLabelWidth">
          <el-date-picker
            v-model="formAdd.date"
            type="date"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            placeholder="Pick a day" />
        </el-form-item>
        <el-form-item label="姓名" :label-width="formLabelWidth">
          <el-input
            v-model="formAdd.name"
            style="width: 240px"
            placeholder="Please input"
            clearable />
        </el-form-item>
        <el-form-item label="地址" :label-width="formLabelWidth">
          <el-input
            v-model="formAdd.address"
            style="width: 240px"
            placeholder="Please input"
            clearable />
        </el-form-item>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="dialogFormAddVisible = false">Cancel</el-button>
          <el-button type="primary" @click="addConfirm()"> Confirm </el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>

<script>
import { Container } from "element-ui";

export default {
  name: "practice",
  data() {
    return {
      tableData: [
        {
          date: "2024-05-03",
          name: "Tom1",
          address: "No. 11, Grove St, Los Angeles",
        },
        {
          date: "2024-06-02",
          name: "Tom2",
          address: "No. 22, Grove St, Los Angeles",
        },
        {
          date: "2024-03-04",
          name: "Tom3",
          address: "No. 33, Grove St, Los Angeles",
        },
        {
          date: "2024-03-21",
          name: "Tom4",
          address: "No. 44, Grove St, Los Angeles",
        },
      ],
      currentPage: 1, // 当前页码
      total: 20, // 总条数
      pageSize: 3, // 每页的数据条数

      formQuery: {
        date: "",
        name: "",
        address: "",
      },
      dialogFormEditVisible: false,
      dialogFormAddVisible: false,
      formEdit: {
        date: "",
        name: "",
        address: "",
      },
      formAdd: {
        date: "",
        name: "",
        address: "",
      },
      formLabelWidth: "140px",
      num: "",
    };
  },

  methods: {
    // 添加
    add() {
      this.formAdd = {};
      this.dialogFormAddVisible = true;
    },
    addConfirm() {
      this.tableData.push(this.formAdd);
      this.dialogFormAddVisible = false;
    },

    // 打开修改弹窗 回显
    onEdit(index) {
      // console.log(index);
      this.dialogFormEditVisible = true;
      this.num = index;
      // this.formEdit = this.tableData[index]; 在修改弹窗中进行修改,父表单的内容会被直接修改
      /*在你的代码中,当点击修改按钮时,通过onEdit方法打开弹窗并设置表单数据formEdit为tableData[index]。这里需要注意的是,Vue.js 中对象是引用类型,所以 this.formEdit = this.tableData[index]; 实际上是将 formEdit 和 tableData[index] 引用了同一个对象。因此,当你在弹窗中修改formEdit时,同时也修改了tableData[index] 对应的对象,导致父表单内容直接被修改了。
      为了避免这种情况,你可以在 onEdit 方法中对 tableData[index] 进行深拷贝,而不是简单地引用赋值。这样就可以保持弹窗中的表单数据和原始数据的独立性,不会相互影响。
      你可以使用 Object.assign() 或者扩展运算符(spread operator)来进行深拷贝,例如:
      this.formEdit = Object.assign({}, this.tableData[index]);
      // 或者
      this.formEdit = { ...this.tableData[index] };
      这样修改后,当你在弹窗中修改formEdit时,不会影响到tableData中的数据,直到点击确认按钮后才会将修改后的数据应用到tableData中。 */
      this.formEdit = Object.assign({}, this.tableData[index]);
    },

    // 修改确认
    editConfirm() {
      this.tableData[this.num].date = this.formEdit.date;
      this.tableData[this.num].name = this.formEdit.name;
      this.tableData[this.num].address = this.formEdit.address;
      this.dialogFormEditVisible = false;
    },

    // 删除
    onDelete(index) {
      // splice(index, 1) 表示从 tableData 数组中删除一个元素,从指定的 index 开始删除
      this.tableData.splice(index, 1);
    },

    //查询
    query() {
      // console.log(this.formQuery);
      var timeResult = [];
      var addressResult = [];
      var nameResult = [];
      var startDate = this.formQuery.date[0];
      var endDate = this.formQuery.date[1];

      var address = this.formQuery.address;
      var name = this.formQuery.name;
      var date = this.formQuery.date;

      // 判断日期
      if (date != "") {
        for (let index = 0; index < this.tableData.length; index++) {
          const element = this.tableData[index];
          if (startDate <= element.date && endDate >= element.date) {
            timeResult.push(this.tableData[index]);
          }
        }
      } else {
        timeResult = this.tableData;
      }

      // 判断地址
      if (address != "") {
        for (const iterator of timeResult) {
          if (iterator.address.includes(address)) {
            addressResult.push(iterator);
          }
        }
      } else {
        addressResult = this.tableData;
      }

      // 判断姓名
      if (name != "") {
        addressResult.forEach((element) => {
          if (element.name.includes(name)) {
            nameResult.push(element);
          }
        });
      } else {
        nameResult = this.tableData;
      }

      this.tableData = nameResult;
    },

    // 分页
    //每页条数改变时触发 选择一页显示多少行
    handleSizeChange(val) {
      // console.log(`每页 ${val} 条`);
      this.pageSize = val;
      // this.fetchData(this.currentPage);
    },
    //当前页改变时触发 跳转其他页
    handleCurrentChange(val) {
      // console.log(`当前页: ${val}`);
      this.currentPage = val;
      // this.fetchData(val);
    },
    
  },
};
</script>

<style scoped>
.el-button {
  margin-right: 10px;
}
</style>

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

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

相关文章

牛客NC403 编辑距离为一【中等 模拟法 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0b4b22ae020247ba8ac086674f1bd2bc 思路 注意&#xff1a;必须要新增一个&#xff0c;或者删除一个&#xff0c;或者替换一个&#xff0c;所以不能相等1.如果s和t相等&#xff0c;返回false,如果s和t长度差大于1…

全栈的自我修养 ———— uniapp中加密方法

直接按部就班一步一步来 一、首先创建一个js文件填入AES二、创建加密解密方法三、测试 一、首先创建一个js文件填入AES 直接复制以下内容 /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wi…

HTML_CSS学习:表格、表单、框架标签

一、表格_跨行与跨列 1.相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格_跨行与跨列</title> </head> <body><table border"1" cellspacing"0&qu…

5 线程网格、线程块以及线程(1)

5.1 简介 英伟达为它的硬件调度方式选择了一种比较有趣的模型&#xff0c;即SPMD(单程序多数据Single Program&#xff0c;Multiple Data)&#xff0c;属于SIMD(单指令多数据)的一种变体。从某些方面来说&#xff0c;这种调度方式的选择是基于英伟达自身底层硬件的实现。并行编…

GPT-5可能会在今年夏天作为对ChatGPT的“实质性改进”而到来

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

代码随想录算法训练营第十六天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

代码随想录算法训练营第十六天|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数 104.二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数…

为什么物联网网关需要边缘计算能力?边缘计算应用场景有哪些?

【前言】本篇为物联网硬件系列学习笔记&#xff0c;分享学习&#xff0c;欢迎评论区交流~ 什么是边缘计算&#xff1f; 边缘计算&#xff08;Edge Computing&#xff09;是一种分布式计算范式&#xff0c;旨在将计算和数据存储功能放置在接近数据源或终端设备的边缘位置&#…

OSError: We couldn‘t connect to ‘https://huggingface.co‘ to load this file

想折腾bert的同学&#xff0c;应该也遇到这个问题。 一、报错信息分析 完整报错信息&#xff1a;OSError: We couldnt connect to https://huggingface.co to load this file, couldnt find it in the cached files and it looks like google/mt5-small is not the path to a…

扶贫惠农推介系统|基于jsp技术+ Mysql+Java+ B/S结构的扶贫惠农推介系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

GPT-5揭秘:Lex Fridman与Sam Altman播客热议,AGI时代的新变革即将来临!

嘿&#xff0c;朋友们&#xff0c;你们知道吗&#xff1f;Lex Fridman和Sam Altman又聚在一起了&#xff0c;这次是在播客上。 在播客中&#xff0c;他们聊了很多&#xff0c;包括董事会的幕后故事、Elon Musk的诉讼案&#xff0c;甚至还提到了Ilya、Sora这些名字。 但真正让…

3.21作业

1、使用sqlite3实现简易的学生管理系统 #include<myhead.h>//封装添加学生信息函数 int do_add(sqlite3 *ppDb) {//准备sql语句int add_numb 0;char add_name[20] "";double add_socre 0;printf("输入学号:");scanf("%d",&add_num…

React 系列 之 React Hooks(一) JSX本质、理解Hooks

借鉴自极客时间《React Hooks 核心原理与实战》 JSX语法的本质 可以认为JSX是一种语法糖&#xff0c;允许将html和js代码进行结合。 JSX文件会通过babel编译成js文件 下面有一段JSX代码&#xff0c;实现了一个Counter组件 import React from "react";export defau…

Java代码基础算法练习-求一个三位数的各位平方之和-2024.03.21

任务描述&#xff1a; 输入一个正整数n&#xff08;取值范围&#xff1a;100<n<1000&#xff09;&#xff0c;然后输出每位数字的平方和。 任务要求&#xff1a; 代码示例&#xff1a; package march0317_0331;import java.util.Scanner;public class m240321 {public …

java.lang.String final

关于String不可变的问题&#xff1a;从毕业面试到现在&#xff0c;一个群里讨论的东西&#xff0c;反正码农面试啥都有&#xff0c;这也是我不咋喜欢面试代码&#xff0c;因为对于我而言&#xff0c;我并不喜欢这些面试。知道或不知道基本没啥含氧量&#xff0c;就是看看源代码…

程序员为什么宁愿失业都不愿意搭伙去接单?

我要说一个关键词&#xff1a;信息差&#xff0c;这个词将贯彻这整篇文章。 大多数程序员觉得&#xff0c;接单不稳定、金额低、单子少&#xff0c;又卷又没有性价比。从某种角度上说&#xff0c;这个说法也没错&#xff0c;但作为业余接单者&#xff0c;本就不应该把接单当做主…

【Java常用API】简单爬虫练习题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

【Unity实战系列】Unity的下载安装以及汉化教程

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;怎么说呢&#xff0c;其实这才是我以后真正想写想做的东西&#xff0c;虽然才刚开始&#xff0c;但好歹&#xff0c;我总算是启程了。今天要分享…

Java特性之设计模式【装饰器模式】

一、装饰器模式 概述 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其结构。这种类型的设计模式属于结构型模式&#xff0c;它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中&#xff0c;以…

单片机--数电(4)

触发器 数字电路中&#xff1a;分组合逻辑电路与时序逻辑电路两大类 组合逻辑电路的基本单元是门电路&#xff08;与或非等一些门电路&#xff09; 时序逻辑电路的基本单元是触发器 触发器与门电路的区别 门电路某一时刻的输出信号完全取决于该时刻的输入信号&#xff0c;…

【目标检测实验系列】AutoDL线上GPU服务器租用流程以及如何用Pycharm软件远程连接服务器进行模型训练 (以Pycharm远程训练Yolov5项目为例子 超详细)

目录 1. 文章主要内容2. 租用AutoDL服务器详细教程2.1 注册AutoDL账号&#xff0c;并申请学生认证(学生认证有优惠&#xff0c;如果不是学生可以忽略此点)2.2 算力市场选择GPU&#xff0c;并选择初始化配置环境2.3 控制台参数解析&#xff0c;并使用相关参数登录Xftp(Windows与…