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

news2024/9/21 14:45:43

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

<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>

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

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

相关文章

PHP的IntlChar类:处理Unicode字符的强大工具

PHP的IntlChar类&#xff1a;处理Unicode字符的强大工具 在处理多语言和国际化应用程序时&#xff0c;Unicode字符的解码是必不可少的一环。PHP的IntlChar类为我们提供了强大的工具来解码Unicode字符。本文将深入探讨PHP的IntlChar类&#xff0c;介绍其功能、用法和优势&#x…

鸿蒙:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变化是无法观察到的。这就引出了Observed/Object…

基于python+vue的幼儿园管理系统flask-django-php-nodejs

随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建幼儿园管理系统。本文通过课题背景、课题目的及意义相关技术&#xff0c;提出了一种活动信息、课程信息、菜谱信息、通知公告、家…

视频批量爬虫下载工具|可导出视频分享链接|抖音视频提取软件

便捷的视频批量爬虫软件操作指南 抖音视频下载界面图解 主要功能&#xff1a; 关键词批量提取视频和单独视频提取&#xff0c;提取后下载功能。 功能解析&#xff1a; 1. 关键词批量采集视频的解析 对特定关键词进行搜索和视频提取&#xff0c;例如输入“汽车配件”&#x…

基于深度学习的心律异常分类系统设计——算法设计

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

LeetCode刷题记录:(13)N皇后(难题不难)

leetcode传送通道 传说中的N皇后&#xff0c;不难&#xff0c;进来了就看完吧 注释序号代表鄙人写代码的顺序和思考逻辑&#xff0c;供参考 class Solution {// 1.定义结果数组List<List<String>> result new ArrayList<>();public List<List<String&…

.NET EF Core(Entity Framework Core)

文章目录 EF Core与其他ORM比较EF Core与EF比较Migration数据库迁移反向工程Migrations其他命令修改表结构 EF Core操作数据库插入数据查询数据修改、删除其他数据库 EF Core实体的配置Data Annotation配置方式Fluent API配置方式Fluent API 通过代码查看EF Core的sql语句方法1…

分布式链上随机数和keyless account

1. 引言 相关论文见&#xff1a; Aptos团队2024年论文 Distributed Randomness using Weighted VRFs 相关代码实现见&#xff1a; https://github.com/aptos-labs/aptos-core&#xff08;Rust&#xff09; 在链中生成和集成共享随机数&#xff0c;以扩展应用和强化安全。该…

基于python+vue体育场馆设施预约系统flask-django-php-nodejs

时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;体育场馆设施预约系统当然不能排除在外。整体设计包括系统的功能、系统总体结构、系统数据结构和对系统安全性进行设计&#xff1b;最后要对系统…

Tomcat启动报错 因为在清除过期缓存条目后可用空间仍不足

在Tomcat部署路径下的./conf/context.xml配置文件的标签内添加如下内容&#xff1a; <Resources cachingAllowed"true" cacheMaxSize"100000" />

图解 LFU 缓存淘汰算法以及在 Redis 中的应用(附带个人完整代码实现)

文章目录 LFU 算法理论介绍算法实现数据结构查询操作插入/更新操作 Redis 缓存淘汰算法缓存污染难题Redis LFU缓存淘汰策略 本篇博客的主要内容&#xff1a; 以图解的方式&#xff0c;介绍 LFU 算法的一种实现&#xff1b;介绍 LFU 算法在 Redis 中的应用。 LFU 算法 理论介…

Docker 搭建私人仓库

docker 搭建私人仓库有下面几种方式&#xff1a; 1、docker hub 官方私人镜像仓库2、本地私有仓库 官方私人镜像仓库搭建很简单(就是需要有魔法&#xff0c;否则就异步到第二种方法吧)&#xff0c;只需要 login、pull、tag、push 几种命令就完事了。而本地私人镜像仓库则比较麻…

探究BufferedOutputStream的奥秘

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java IO相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

[音视频学习笔记]六、自制音视频播放器Part1 -新版本ffmpeg,Qt +VS2022,都什么年代了还在写传统播放器?

前言 参考了雷神的自制播放器项目&#xff0c;100行代码实现最简单的基于FFMPEGSDL的视频播放器&#xff08;SDL1.x&#xff09; 不过老版本的代码参考意义不大了&#xff0c;我现在准备使用Qt VS2022 FFmpeg59重写这部分代码&#xff0c;具体的代码仓库如下&#xff1a; …

本地化语音识别、视频翻译和配音工具:赋能音频和视频内容处理

随着人工智能技术的飞速发展&#xff0c;语音识别、视频翻译和配音等任务已经变得更加容易和高效。然而&#xff0c;许多现有的工具和服务仍然依赖于互联网连接&#xff0c;这可能会导致延迟、隐私问题和成本问题。为了克服这些限制&#xff0c;我们介绍了一种本地化、离线运行…

RCE漏洞

RCE漏洞概述 远程命令执行/代码注入漏洞&#xff0c;英文全称为Reote Code/CommandExecute&#xff0c;简称RCE漏洞。PHPJava等Web开发语言包含命令执行和代码执行函数,攻击者可以直接向后台服务器远程执行操作系统命今或者运行注入代码&#xff0c;进而获取系统信息、控制后台…

社交媒体的未来:探讨Facebook的发展趋势

引言 在数字化时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在不断地追求创新&#xff0c;以满足用户日益增长的需求和适应科技发展的变革。本文将探讨Facebook在未来发展中可能面临的挑战和应对…

10W字解析 SpringBoot技术内幕文档,实战+原理齐飞,spring事务实现原理面试

第3章&#xff0c;Spring Boot构造流程源码分析&#xff0c;Spring Boot的启动非常简单&#xff0c;只需执行一个简单的main方法即可&#xff0c;但在整个main方法中&#xff0c;Spring Boot都做了些什么呢&#xff1f;本章会为大家详细讲解Spring Boot启动过程中所涉及的源代码…

Linux下Docker部署中间件(Mysql、Redis、Nginx等)

我的自备文件 文件传输 内网下直接上传很慢 使用scp命令将另一台服务器上的文件传输过来&#xff1b;在已有文件的服务器往没有文件的服务器传输 scp -r 传输的文件夹/文件 root要传输的地址:放置的地址 scp -r tools root172.xx.x.xxx:/data/ 安装二进制文件、脚本及各中间件…

《深入解析 C#》—— C# 3 部分

文章目录 第三章 C#3&#xff1a;LINQ及相关特性3.1 自动实现属性&#xff08;*&#xff09;3.2 隐式类型 var&#xff08;*&#xff09;3.3 对象和集合初始化3.3.1 对象初始化器3.3.2 集合初始化器 3.4 匿名类型3.4.1 基本语法和行为3.4.2 编译器生成类型3.4.3 匿名类型的局限…