表格内日期比较计算

news2024/11/20 8:38:54

需求:在表格中新增数据,计算开始日期中最早的和结束日期中最晚的,回显到下方。在这里插入图片描述

  <el-form
    ref="formRef"
     :model="ruleForm"
     :rules="rules"
     style="margin-top: 20px;"
     label-position="top"
   >
	<el-button style="margin:10px 0" :disabled="disabledEdit" @click="handleAddList">新增</el-button>
	
	<el-table :data="ruleForm.tableData" border style="width: 100%">
	  <el-table-column label="">
	    <template slot="header">
	      <span class="required">*</span>
	      开始日期
	    </template>
	    <template slot-scope="scope">
	      <el-form-item :prop="'tableData.' + scope.$index + '.startDate'" :rules="[{required: true, row:scope.row, validator:validStartDate, trigger: 'change'}]" label="">
	        <el-date-picker
	          v-model="scope.row.startDate"
	          :disabled="disabledEdit"
	          type="date"
	          value-format="yyyy-MM-dd"
	          placeholder="选择日期"
	          @change="handleStartDate(scope.$index)"
	          style="width: 100%;">
	        </el-date-picker>
	      </el-form-item>
	    </template>
	  </el-table-column>
	  <el-table-column label="">
	    <template slot="header">
	      <span class="required">*</span>
	      结束日期
	    </template>
	    <template slot-scope="scope">
	      <el-form-item :prop="'tableData.' + scope.$index + '.endDate'" :rules="[{required: true, row:scope.row, validator:validEndDate, trigger: 'change'}]" label="">
	        <el-date-picker
	          v-model="scope.row.endDate"
	          :disabled="disabledEdit"
	          type="date"
	          value-format="yyyy-MM-dd"
	          placeholder="选择日期"
	          @change="handleEndDate(scope.$index)"
	          style="width: 100%;">
	        </el-date-picker>
	      </el-form-item>
	    </template>
	  </el-table-column>
	  
	  
	  <el-table-column label="操作" width="80">
	    <template slot-scope="scope">
	      <el-form-item label="">
	        <el-button
	          size="mini"
	          type="text"
	          :disabled="disabledEdit"
	          class="required"
	          @click.stop="handleDelTable(scope.$index)"
	        >删除
	        </el-button>
	      </el-form-item>
	    </template>
	  </el-table-column>
	</el-table>
	
	<section>
	   <el-form-item label="开始时间">
	     {{ ruleForm.startDate?.substring?.(0,10) }}
	   </el-form-item>
	   <el-form-item label="结束时间">
	     {{ ruleForm.endDate?.substring?.(0,10) }}
	   </el-form-item>
	 </section>
  </el-form>
  data() {
    return {
      ruleForm: {
        tableData: [],
        startDate:"",
        endDate:"",
      },
      rules:[],
    }
  },
  methods: {
    //开始日期
    validStartDate(rule, value, callback) {
      let row = rule.row
      if(!row.startDate) {
        callback(new Error("开始日期不能为空"))
      } else if(row.endDate&&value&&new Date(value) > new Date(row.endDate)) {
        callback(new Error("开始日期不能大于结束日期"))
      }else{
        callback()
      }
    },
    //结束日期
    validEndDate(rule, value, callback) {
      let row = rule.row
      if(!row.endDate) {
        callback(new Error("结束日期不能为空"))
      } else if(row.startDate&&value&&new Date(row.startDate) > new Date(value)) {
        callback(new Error("结束日期不能小于开始日期"))
      }else{
        callback()
      }
    },
    // 日期大小比较
    compare(attr, rev) {
      rev = (rev || typeof rev === 'undefined') ? 1 : -1;
      return (a, b) => {
        a = a[attr];
        b = b[attr];
        if (a < b) { return rev * -1; }
        if (a > b) { return rev * 1; }
        return 0;
      };
    },
    handleStartDate(i) {
      if(!this.ruleForm.tableData.length) {
        this.ruleForm.startDate = ''
      } else {
        let arr = this.ruleForm.tableData.filter(item=>{
          return item.startDate !== null
        })
        const DESC = arr.sort(this.compare("startDate", true)); // 降序
        this.ruleForm.startDate = !arr.length ? '' : this.newDate(DESC[0].startDate)
        this.$refs.formRef.validateField('tableData.' + i + '.endDate');
      }
    },
    handleEndDate(i) {
      if(!this.ruleForm.tableData.length) {
        this.ruleForm.endDate = ''
      } else {
        let arr = this.ruleForm.tableData.filter(item=>{
          return item.endDate !== null
        })
        const DESC = arr.sort(this.compare("endDate", false)); // 降序
        this.ruleForm.endDate = !arr.length ? '' : this.newDate(DESC[0].endDate)
        this.$refs.formRef.validateField('tableData.' + i + '.startDate');
      }
    },
    // 中国标准时间转为年月日
    newDate(time) {
      var date = new Date(time)
      var y = date.getFullYear()
      var m = date.getMonth() + 1
      m = m < 10 ? '0' + m : m
      var d = date.getDate()
      d = d < 10 ? '0' + d : d
      return y + '-' + m + '-' + d
    },
    // 新增
    handleAddList() {
      this.ruleForm.tableData.push({
        id: this.$route.query.id * 1,
        content: '', 
        startDate: '', 
        endDate: '', 
        responsible: '',
      })
    },
    // 删除
    handleDelTable(index) {
      this.ruleForm.tableData.splice(index,1 )
      this.handleStartDate()
      this.handleEndDate()
    },    
  },

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

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

相关文章

rar格式转换zip格式,如何做?

平时大家压缩文件时对压缩包格式可能没有什么要求&#xff0c;但是&#xff0c;可能因为工作需要&#xff0c;我们要将压缩包格式进行转换&#xff0c;那么我们如何将rar格式转换为其他格式呢&#xff1f;方法如下&#xff1a; 工具&#xff1a;WinRAR 打开WinRAR&#xff0c…

GaussDB数据库SQL系列-定义重载函数

目录 一、前言 二、函数重载的定义 三、GaussDB创建自定义重载函数的事项说明 四、GaussDB数据库中的自定义重载函数示例 示例一&#xff1a;创建package属性重载函数&#xff0c;根据不同的SQL条件获取生成视图 示例二&#xff1a;创建package属性重载函数&#xff0c;根…

windows下实现mysql8的主从复制

1、下载mysql8的安装包 MySQL :: Download MySQL Community Server 2、放到指定目录进行解压&#xff0c;更改名称为mysql-8.1.0-winx64-master,并复制一份作为从数据库 3、在bin目录下创建一个my.ini文件 添加如下内容 [mysqld] basedir"D:/soft/mysql/mysql-8.1.0-win…

【技能树笔记】网络篇——练习题解析(三)

目录 前言 一、网络层的功能 1.1 网络层的功能 1.2 网络层PDU 1.3 网络层功能 二、IP协议的特点 2.1 网络层的功能 2.2 IP协议特点 2.3 IP协议 三、IPv4地址的分类和计算 3.1 IP地址的组成 3.2 IP地址的分类1 3.2 IP地址的分类2 3.3 IP地址的分类3 3.4 IP地址的…

用例图学习

用例图是什么 用例图&#xff08;Use Case Diagram&#xff09;是UML&#xff08;统一建模语言&#xff09;中的一种行为图&#xff0c;用于描述系统的功能和用户&#xff08;或其他外部实体&#xff09;与系统之间的交互。用例图是一种高级图&#xff0c;通常用于捕捉系统的需…

管理多个项目的主要挑战与应对方法

在当今快节奏的商业环境中&#xff0c;企业越来越多地需要同时承担多个项目。有效管理多个项目已成为企业寻求优化资源、提高效率和最大化项目成果的一项关键技能。 同时管理多个项目的挑战 对于管理多个项目的人来说&#xff0c;最大的挑战是由于时间压力而无法匹配“工作质…

02 MIT线性代数-矩阵消元 Elimination with matrices

一, 消元法 Method of Elimination 消元法是计算机软件求解线形方程组所用的最常见的方法。任何情况下&#xff0c;只要是矩阵A可逆&#xff0c;均可以通过消元法求得Axb的解 eg: 我们将矩阵左上角的1称之为“主元一”&#xff08;the first pivot&#xff09;&#xff0c;第…

【Xilinx】基于MPSoC的OpenAMP实现(一)

【Xilinx】基于MPSoC的OpenAMP实现&#xff08;一&#xff09; 一、开发环境1、开发思路2、下载官方bsp包 二、编译Linux1、配置petalinux环境变量2、创建工程3、进入目录4、设置缓存目录&#xff08;重点&#xff1a;可离线编译&#xff0c;加快编译速度&#xff09;5、配置u-…

浏览器截图扩展增加快捷键

Tabshot – 下载 &#x1f98a; Firefox 扩展&#xff08;zh-CN&#xff09; 最近一个用户找到我&#xff0c;想要这个浏览器扩展有一个快捷键截图功能。 我找了一下&#xff0c;发现火狐扩展的确支持快捷键 研究源码 about:support 配置文件夹&#xff0c;打开文件夹。 附…

MATLAB APP纯小白入门 两数相加

万事开头难&#xff0c;最怕第一次。使用matlab APP 实现两数求和&#xff0c;如下图所示&#xff0c;c a b&#xff0c;输入数字后&#xff0c;按 “” 就计算。 步骤 拖拽三个 Edit Field(Numeric) 过来&#xff0c;并且双击名字分别改为 a,b,c。注意修改名字后右边会有点变…

第6讲:v-for使用

目录 1.循环遍历 2.v-for遍历整形变量&#xff08;99乘法表&#xff09; 3.v-for遍历普通数组 4.v-for遍历数组对象 1.循环遍历 v-for指令基于一个数组渲染一个列表&#xff0c;它和JavaScript的遍历语法相似&#xff1a; v-for”item in list” list 是一个数组&#xff0c; i…

文件审计及文件完整性监控

什么是文件审核 对文件服务器中发生的所有事件的检查称为文件审核。这包括监视文件访问&#xff0c;其中包含谁访问了什么文件、何时以及从何处访问的详细信息;对访问最多和修改的文件的分析;成功和失败的文件访问尝试;等等。文件服务器审核过程的主要目标是跟踪在配置的服务器…

复习Day03:数组part03:76 . 最小覆盖子串、438. 找到z字符串z中所有字母异位词

之前的blog链接&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131700482?spm1001.2014.3001.5501 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Lab…

PY32F003F18之窗口看门狗

一、PY32F003F18窗口看门狗特点&#xff1a; 即使窗口看门狗被禁止&#xff0c;窗口看门狗的"递减计数器"也会继续递减计数。 二、窗口看门狗复位的条件&#xff1a; 1、将"控制寄存器WWDG_CR"中的WDGA1,激活"窗口看门狗计数器等于0x3F"时,则产…

次时代摸鱼骚操作:人在办公室轻松观看家里电脑上的4k电影(移动端公网访问本地群辉存储视频文件)

如何使用iPhone15在办公室观看家里电脑上的4k电影&#xff1f; 文章目录 如何使用iPhone15在办公室观看家里电脑上的4k电影&#xff1f;1.使用环境要求&#xff1a;2.下载群晖videostation&#xff1a;3.公网访问本地群晖videostation中的电影&#xff1a;4.公网条件下使用电脑…

Unity3D 简易音频管理器

依赖于Addressable 依赖于单例模板&#xff1a;传送门 using System.Collections.Generic; using System.Security.Cryptography; using System; using UnityEngine; using UnityEngine.AddressableAssets;namespace EasyAVG {public class AudioManager : MonoSingleton<…

2023第十二届中国智能产业高峰论坛之文档大模型的探索与思考

文章目录 前言合合信息多模态大模型与文档图像智能理解文档图像分析识别与理解的技术难题文档图像分析与预处理文档解析与识别版面分析与还原文档信息抽取与理解AI安全知识化&存储检索和管理 文档图像的分析识别与理解和大模型的关系文档图像大模型的进展LayoutLMUDOPDonut…

科技云报道:勒索金额再创新高,企业应如何防范?

科技云报道原创。 今年上半年的数据表明&#xff0c;勒索软件活动和赎金金额有望创下历史新高。 Check Point Research在《2023 年年中安全报告》中指出&#xff0c;今年上半年&#xff0c;随着新的勒索软件团伙不断涌现&#xff0c;勒索软件攻击态势持续升级。 区块链分析公…

【Proteus仿真】【STM32单片机】基于单片机的智能晾衣架控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 系统运行后&#xff0c;LCD1604显示传感器检测的温湿度、光线强度和风速&#xff0c;工作模式&#xff0c;以及相应阈值&#xff0c;系统工作状态等&#xff1b;系统默认为自动模式&#xff0c; 可通过K4…

企业如何寻找适合的CRM系统软件

在数字化转型步伐不断加快的今天&#xff0c;CRM软件成为企业必不可少的一项工具。如果您并不清楚如何寻找合适的CRM系统软件&#xff1f;不妨通过下列几点来寻觅。 1.根据CRM系统行业和类别 例如企业重视营销功能&#xff0c;搜寻营销型CRM软件&#xff1b; 企业希望梳理好…