vue2根据选中的日期动态渲染表格的列

news2024/9/9 3:54:56

根据用户选中日期在点击查询,表格的表头会根据查询的时间渲染,如果查询的是当前时间渲染的是00时~15时,如果查询的是上一天或者上几天渲染的是00时~23时,并且渲染后整个表格的样式不会乱

<template>
  <div class="esi">
    <!-- 顶部日期选择和操作按钮 -->
    <div class="esi_top">
      <div>
        日期1:
        <el-date-picker
          v-model="value1"
          type="date"
          placeholder="选择日期"
        >
        </el-date-picker>
      </div>
      <el-button type="primary" @click="queryData">查询</el-button>
    </div>
    <!-- 表格展示区域 -->
    <div class="esi_but" :class="{'custom-style': isCustomStyle}">
      <el-table
        :key="tableKey"
        ref="myTable"
        :data="tableData"
        border
        height="100%"
        show-summary
        style="width: 100%; height: 100%; overflow: auto"
      >
        <el-table-column type="selection" width="55" fixed> </el-table-column>
        <el-table-column fixed prop="date" label="电站名称" width="120">
          <template slot-scope="scope">
            <span
              style="
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
              "
              >{{ scope.row.date }}</span
            >
          </template>
        </el-table-column>
        <el-table-column prop="name" label="额定交流功率(kW)" width="140"></el-table-column>
        <el-table-column prop="province" label="组件峰值功率(kWp)" width="140"></el-table-column>
        <el-table-column
          v-for="(hour, index) in displayedHours"
          :key="hour.prop"
          prop="city"
          :label="hour.label"
          width="100"
        ></el-table-column>
        <el-table-column prop="zip" label="合计"></el-table-column>
      </el-table>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value1: "", // 绑定的日期选择器值
      tableData: [
        // 表格数据
        {
          date: "江苏安科",
          name: "0",
          province: "0.98",
          city: "8.18",
          address: "12.5",
          zip: "17.41",
        },
        {
          date: "江苏安科",
          name: "0",
          province: "0.98",
          city: "8.18",
          address: "12.5",
          zip: "17.41",
        },
        {
          date: "江苏安科",
          name: "0",
          province: "0.98",
          city: "8.18",
          address: "12.5",
          zip: "17.41",
        },
      ],
      isCustomStyle: false, // 是否应用自定义样式
      displayedHours: Array.from({ length: 24 }, (_, i) => ({ prop: `hour${i}`, label: `${i.toString().padStart(2, '0')}时` })), // 显示的小时列
      tableKey: 0, // 表格的唯一键,用于强制重新渲染
    };
  },
  methods: {
    // 查询按钮点击事件
    queryData() {
      const selectedDate = new Date(this.value1);
      const today = new Date();
      today.setHours(0, 0, 0, 0);

      if (selectedDate.getTime() === today.getTime()) {
        // 选择的是今天
        const currentHour = new Date().getHours();
        this.displayedHours = Array.from({ length: currentHour + 1 }, (_, i) => ({ prop: `hour${i}`, label: `${i.toString().padStart(2, '0')}时` }));
      } else {
        // 选择的是之前的日期
        this.displayedHours = Array.from({ length: 24 }, (_, i) => ({ prop: `hour${i}`, label: `${i.toString().padStart(2, '0')}时` }));
      }

      this.tableKey += 1; // 更新 tableKey 强制重新渲染表格
    },
  },
  watch: {
    displayedHours: {
      deep: true,
      handler(newValue, oldValue) {
        // 在这里处理数据变化时的逻辑,避免影响样式
      }
    }
  }
};
</script>

<style lang="scss" scoped>
.esi {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  justify-content: space-evenly;

 .esi_top {
    width: 100%;
    height: 8%;
    display: flex;
    justify-content: space-evenly;
    align-items: center;
  }

 .esi_but {
    width: 100%;
    height: 91.5%;

    &.custom-style {
      background-color: #f0f0f0; // 自定义样式
      border: 1px solid #ccc;
    }
  }
}
</style>

主要:

确保列的唯一性
在 el-table-column 中使用 :key 绑定一个唯一的值:

<el-table-column
  v-for="(hour, index) in displayedHours"
  :key="hour.prop"
  prop="city"
  :label="hour.label"
  width="100">
</el-table-column>

添加tableKey: 0

  data() {
    return {
        tableKey: 0  // 添加 tableKey
           }
         }

点击查询后更新 tableKey 强制重新渲染表格

methods: {
    // 查询按钮点击事件
    queryData() {
      const selectedDate = new Date(this.value1);
      const today = new Date();
      today.setHours(0, 0, 0, 0);

      if (selectedDate.getTime() === today.getTime()) {
        // 选择的是今天
        const currentHour = new Date().getHours();
        this.displayedHours = Array.from({ length: currentHour + 1 }, (_, i) => ({ prop: `hour${i}`, label: `${i.toString().padStart(2, '0')}时` }));
      } else {
        // 选择的是之前的日期
        this.displayedHours = Array.from({ length: 24 }, (_, i) => ({ prop: `hour${i}`, label: `${i.toString().padStart(2, '0')}时` }));
      }

      this.tableKey += 1; // 更新 tableKey 强制重新渲染表格
    },
  },}

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

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

相关文章

Unity UGUI 之 事件触发器

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是UI事件触发器…

linux安装jdk和jps(为rocketMq准备)

20240730 一、安装rocketMq之前的准备工作1. 安装jkd&#xff08;这里以1.8为例子&#xff09;1.1 下载jdk1.81.2 上传到linux&#xff08;拖拽&#xff09;1.3 解压1.4 配置环境变量1.5 使配置文件生效1.6 验证结果 2. JPS2.1 解决 一、安装rocketMq之前的准备工作 1. 安装jk…

angular入门基础教程(十)管道即过滤器

管道 何为管道&#xff0c;ng 翻译的真烂&#xff0c;但是听多了你就理解了&#xff0c;类似于 vue2 中的过滤器&#xff0c;过滤器在 vue3 中已经废弃 从common包里面引入&#xff0c;并注册 import { Component, inject } from "angular/core"; import { UpperC…

C# 调用Webservice接口接受数据测试

1.http://t.csdnimg.cn/96m2g 此链接提供测试代码&#xff1b; 2.http://t.csdnimg.cn/64iCC 此链接提供测试接口&#xff1b; 关于Webservice的基础部分不做赘述&#xff0c;下面贴上我的测试代码&#xff08;属于动态调用Webservice&#xff09;&#xff1a; 1&#xff…

Appium自动化测试 ------ 常见模拟操作!

Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为&#xff0c;这些操作对于自动化测试框架来说至关重要&#xff0c;因为它们能够模拟真实用户的使用场景&#xff0c;从而验证应用程序的功能和稳定性。 以下是一些Appium自动化测试中常见的模拟操作&#xff1a; 基本操…

XPathParser类

XPathParser类是mybatis对 javax.xml.xpath.XPath的包装类。 接下来我们来看下XPathParser类的结构 1、属性 // 存放读取到的整个XML文档private final Document document;// 是否开启验证private boolean validation;// 自定义的DTD约束文件实体解析器&#xff0c;与valida…

JavaSE面向对象进阶

static 介绍 static表示静态&#xff0c;是Java中的一个修饰符可以修饰成员方法、成员变量 被static修饰的成员变量&#xff0c;叫做静态变量被static修饰的成员方法&#xff0c;叫做静态方法 静态变量 特点&#xff1a;被该类所有对象共享 调用方式&#xff1a; 类名调用&am…

关于@Async

Spring Boot 2.x 开始&#xff0c;默认情况下&#xff0c;Spring AOP 使用 CGLIB 代理 Async不能在同一个类中直接调用 关于在控制器不能使用Async 并不是因为SpringBoot2以前使用JDK代理 因为JDK代理需要类实现接口,控制器没有实现接口等原因 真正原因是 Async 不能…

windows@powershell@任务计划@自动任务计划@taskschd.msc.md

文章目录 使用任务计划windows中的任务计划任务计划命令行程序开发windows 应用中相关api传统图形界面FAQ schtasks 命令常见用法创建计划任务删除计划任务查询计划任务修改计划任务运行计划任务 PowerShell ScheduledTasks常用 cmdlet 简介1. Get-ScheduledTask2. Register-Sc…

手动在ubuntu上搭建一个nginx,并安装证书的最简化完整过程

背景&#xff1a;由于想做个测试&#xff1a;即IP为A的服务器&#xff0c;绑定完域名X后&#xff0c;如果再绑定域名Y&#xff0c;能不能被访问到。&#xff08;假设对A不做绑定域名的设置&#xff09; 这个问题的来源&#xff0c;见上一篇文章&#xff1a;《云服务器被非法域名…

kaggle使用api下载数据集

背景 kaggle通过api并配置代理下载数据集datasets 步骤 获取api key 登录kaggle&#xff0c;点个人资料&#xff0c;获取到自己的api key 创建好的key会自动下载 将key放至家目录下的kaggle.json文件中 我这里是windows的administrator用户。 装包 我用了虚拟环境 pip …

021.自定义指纹浏览器编译-修改ClientRects指纹

一、什么是ClientRects指纹 ClientRects指纹获取的核心方法是DOM元素方法getClientRects()​ 。getClientRects()​ 可以返回一个元素的所有 CSS 边界框&#xff08;ClientRect对象数组&#xff09;&#xff0c;包括其大小、位置等信息。每个边界框由其左上角的 x, y 坐标和宽…

基于YOLOv10深度学习的商品条形码智能检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

小程序、H5、APP中的微信支付概述和实战总结

最近开发的一个微信小程序的项目结束了&#xff0c;里面用到了支付相关的api&#xff0c;借着项目总结一下小程序各种场景支付的逻辑。 1. 微信支付概述 1.1 微信支付的重要性 微信支付作为中国领先的移动支付方式之一&#xff0c;其便捷性、安全性以及广泛的用户基础使其成为…

已解决丨怎么快速的让IP地址实现HTTPS访问?

要快速让IP地址实现HTTPS访问&#xff0c;可以遵循以下简洁步骤&#xff1a; 1. 确认公网IP地址 确保你拥有一个固定的公网IP地址&#xff0c;因为HTTPS访问需要通过互联网上的公网IP进行。 2. 选择证书颁发机构&#xff08;CA&#xff09; 选择一个受信任的证书颁发机构&a…

从PLC到云端,ZP3000系列网关助力工业数字化转型

ZP3000系列远程控制网关是一款专为满足现代工业自动化和远程监控需求而设计且功能强大的通讯模块。它的多接口设计和灵活配置能力&#xff0c;使得它能够适应多种复杂的工业通信和监控场景。以下是关于ZP3000系列远程控制网关的详细特点和应用场景&#xff1a; 产品特点 双以太…

playwright 模拟F11 全屏

直接上源代码 import multiprocessing import time from multiprocessing import Processfrom playwright.sync_api import sync_playwrightdef run(playwright):# 使用 Chromium 浏览器运行 设置 headlessFalse 以打开可视化窗口browser playwright.chromium.launch(headles…

C语言——设计TVM(地铁自动售票机)机软件。

输入站数&#xff0c;计算费用&#xff0c;计费规则&#xff0c;6站2元&#xff0c;7-10站3元&#xff0c;11站以上为4元。 输入钱数&#xff0c;计算找零(找零时优先找回面额大的钞票)&#xff0c;找零方式为各种面额张数&#xff0c;可识别面额&#xff1a; 100,50,20,10,5,1…

linux中mysql的安装使用(普通版版本+docker版本)

linux中mysql的安装使用 一、普通安装1.下载安装包2.流程 二、用docker安装1.拉取mysql镜像2.启动镜像3.开启权限第一种情况第二种情况 三、用Navicat连接 一、普通安装 1.下载安装包 挑选个你喜欢的目录&#xff0c;用wget下载并且解压 wget http://dev.mysql.com/get/Down…

指针!!C语言 字符串篇(第四篇)

目录 一. sizeof和strlen的对比 二. 数组和指针笔试题解析 2.1 一维数组 2.2 字符数组 2.3 二维数组 一. sizeof和strlen的对比 在C语言中有两个比较相似的知识点&#xff0c;就是sizeof和strlen&#xff0c;下面我们来讲一下它们两者之间有什么不同之处&#xff1f; &a…