【Vue2】一个数组按时间分割为【今年】和【往年】俩个数组

news2025/6/7 18:12:52

一. 需求

后端返回一个数组,前端按时间维度将该数组的分割为【今年】和【往年】俩个数组
  1. 后端返回的数组格式如下
timeList:[
	{id:1,billTime:"2024-01-10",createTime:"2024-01-10 00:00:00",status:0},
	{id:2,billTime:"2022-05-25",createTime:"2022-05-25 00:00:00",status:1},
	{id:3,billTime:"2022-03-23",createTime:"2022-03-23 00:00:00",status:2},
	{id:4,billTime:"2022-02-11",createTime:"2022-02-11 00:00:00",status:0},
	{id:5,billTime:"2022-01-01",createTime:"2022-01-01 00:00:00",status:2},
	{id:6,billTime:"2021-12-01",createTime:"2021-12-01 00:00:00",status:2},
	{id:7,billTime:"2021-11-01",createTime:"2021-11-01 00:00:00",status:2},
]
  1. 需要的数组如下
// 往年
preYear:[
	{billTime:"2022-05",value:"2022-05"},
	{billTime:"2022-03",value:"2022-03"},
	{billTime:"2022-02",value:"2022-02"},
	{billTime:"2022-01",value:"2022-01"},
	{billTime:"2021-12",value:"2021-12"},
	{billTime:"2021-11",value:"2021-11"},
]
// 今年
newYear:[
	{billTime:"2024-01",value:"2024-01"},
]
  1. 效果如下
    全部账期【今年账期】(点击切换标签)、往年账期(下拉框)

在这里插入图片描述

二. 实现

<template>
	<div>
		<!-- 本年账期 -->
		<el-radio-group v-model="newTime" @change="handleChangeNewTime" size="mini">
			<el-radio-button v-for="(item,index) in newYear" :key="index" :label="item.billTime" :value="item.value">
				<template>
					<span>{{item.value}}</span>
				</template>
			</el-radio-button>
		</el-radio-group>
		<!-- 往年账期 -->
		<el-button size="mini" style="margin-left: 20px" split-button>往年账期</el-button>
		<el-select @change="billTimeSearch" v-model="preTime" size="mini" placeholder="请选择" clearable>
			<el-option v-for="(item,index) in preYear" :key="index" :label="item.billTime" :value="item.billTime">
			</el-option>
		</el-select>
	<div>
</template>

<script>
import { getBillTime,getList } from "@/api/xxx"
import { dateFormat } from "@/utils/index";

	export default{
		data(){
			return{
				query:{
					pageNum:1,
					pageSize:10,
					startTime:"" // 选中的账期
				},
				list:[],
				listLoading:false,
				newYear:[], // 本年账期列表
				preYear:[], // 往年账期列表
				preTime:"", // 选中的往年账期
				newTime:""	// 选中的今年账期
			}
		},
		mounted(){
			this.fetchData()
			this.getBillTime()
		},
		methods:{
			/**
			* 初始化列表数据
			*/
			fetchData(){
				this.listLoading = true
				getList(this.query).then(res=>{
					this.list = res.data.list
					this.listLoading = false
				})
			},

			/**
			* 获取列表,并按照时间分割为【往年】和【今年】账期
			*/
			getBillTime(){
				getBillTime().then(res=>{
					let currentYear = this.formatDateYear(new Date())
					res.data.list.forEach(item=>{
						item.billTime = this.formatDate(item.billTime)
						let obj = {billTime:item.billTime,value:item.billTime};
						if(item.billTime.indexOf(currentYear) == -1 || this.newYear.length == 12){
							this.preYear.push(obj)
							// 去重
							this.preYear = this.preYear.reduce((preVal,curVal) => {
                            	object[curVal.billTime] ? "" : (object[curVal.billTime] = preVal.push(curVal));
                            	return preVal;
                        	}, []);
						}else{
							this.newYear.push(obj);
                        	// 账单日重复问题
                        	let object = {};
                        	this.newYear = this.newYear.reduce((preVal, curVal) => {
                            	object[curVal.billTime] ? "" : (object[curVal.billTime] = preVal.push(curVal));
                            	return preVal;
                        	}, []);
						}
					});
					var result = this.newYear.some(item => {
                    	if (item.billTime == "") {
                        	return true;
                    	}
                	});
                	if (!result) {
                    	// 如果存在
                    	this.newYear.unshift({ billTime: "", value: "全部账单" });
               		}
				})
			},

			/**
         	* 切换今年账单日标签项
         	* @param {String} val 
         	*/
        	handleChangeNewTime(val) {
            	this.query.startTime = val;
            	this.preTime = ""
            	// this.$refs.orderListRef.clearSelection();
            	this.fetchData();
        	},

        	/**
         	* 往年账单筛选 此处仅需要传一个值年月即可,后端进行模糊查询
         	* @param {String} val 
         	*/
        	billTimeSearch(val) {
            	this.query.startTime = val;
            	this.newTime = ""
            	this.fetchData();
        	},

        	/**
         	* 账单日格式化
         	* @param {Date} date 
         	*/
        	formatDate(date) {
            	return dateFormat(new Date(date), "yyyy-MM");
        	},
        	formatDateYear(date) {
            	return dateFormat(new Date(date), "yyyy");
        	},
		}
	}
</script>

三. 时间转换

@/utils/index

//格式化时间
export function dateFormat(date, format) {
  format = format || "yyyy-MM-dd hh:mm:ss";
  if (date !== "Invalid Date") {
    let o = {
      "M+": date.getMonth() + 1, //month
      "d+": date.getDate(), //day
      "h+": date.getHours(), //hour
      "m+": date.getMinutes(), //minute
      "s+": date.getSeconds(), //second
      "q+": Math.floor((date.getMonth() + 3) / 3), //quarter
      S: date.getMilliseconds() //millisecond
    };
    if (/(y+)/.test(format))
      format = format.replace(
        RegExp.$1,
        (date.getFullYear() + "").substr(4 - RegExp.$1.length)
      );
    for (let k in o)
      if (new RegExp("(" + k + ")").test(format))
        format = format.replace(
          RegExp.$1,
          RegExp.$1.length === 1 ?
          o[k] :
          ("00" + o[k]).substr(("" + o[k]).length)
        );
    return format;
  }
  return "";
}

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

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

相关文章

(收藏)数据治理:一文讲透数据安全

数据治理&#xff1a;一文讲透数据安全 数据安全是数据治理的核心内容之一&#xff0c;随着数据治理的深入&#xff0c;我不断的碰到数据安全中的金发姑娘问题&#xff08;指安全和效率的平衡&#xff09;。 DAMA说&#xff0c;降低风险和促进业务增长是数据安全活动的主要…

详解Java信号量-Semaphore

第1章&#xff1a;引言 大家好&#xff0c;我是小黑。今天&#xff0c;咱们一起来深入探讨一下Semaphore。在Java中&#xff0c;正确地管理并发是一件既挑战又有趣的事情。当谈到并发控制&#xff0c;大家可能首先想到的是synchronized关键字或者是ReentrantLock。但其实&…

Open3D 获取点云坐标最值(17)

Open3D 获取点云坐标最值(17) 一、算法介绍二、算法实现1.代码2.结果人生天地间,忽如远行客 一、算法介绍 快速获取点云块,沿着 x y z 各方向的坐标最值,这些在点云处理中的应用范围是如此广泛,这也是点云最常被用到的关键信息,后续的很多算法都会设置到这一处理方法。…

迈入AI智能时代!ChatGPT国内版免费AI助手工具 peropure·AI正式上线 一个想法写一首歌?这事AI还真能干!

号外&#xff01;前几天推荐的Peropure.Ai迎来升级&#xff0c;现已支持联网模式&#xff0c;回答更新更准&#xff0c;欢迎注册体验&#xff1a; https://sourl.cn/5T74Hu 相信很多人都有过这样的想法&#xff0c;有没有一首歌能表达自己此时此刻的心情&#xff1a; 当你在深…

【LabVIEW FPGA入门】模拟输入和模拟输出

1.简单模拟输入和输出测试 1.打开项目&#xff0c;在FPGA终端下面新建一个VI 2.本示例以模拟输入卡和模拟输出卡同时举例。 3.新建一个VI编写程序&#xff0c;同时将卡1的输出连接到卡2的输入使用物理连线。 4.编译并运行程序&#xff0c;观察是否能从通道中采集和输出信号。 5…

计算机缺失msvcr100.dll如何修复?分享五种实测靠谱的方法

在计算机系统的日常运行与维护过程中&#xff0c;我们可能会遇到一种特定的故障场景&#xff0c;即系统中关键性动态链接库文件msvcr100.dll的丢失。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说&#xff…

【动态规划】LeetCode-42. 接雨水

42. 接雨水。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1…

GPUMD分子动力学模拟-学习与实践

GPUMD分子动力学模拟-学习与实践 【20220813-樊哲勇 |基于GPUMD程序包的机器学习势和分子动力学模拟】 https://www.bilibili.com/video/BV1cd4y1Z7zi?share_sourcecopy_web 纯GPU下的MD分子模型系统软件 https://github.com/brucefan1983/GPUMD 跟GPUMD对接的一些python程…

绘制几何图形(Shape)

目录 1、创建绘制组件 2、形状视口viewport 3、自定义样式 4、场景示例 绘制组件用于在页面绘制图形&#xff0c;Shape组件是绘制组件的父组件&#xff0c;父组件中会描述所有绘制组件均支持的通用属性。具体用法请参考Shape。 1、创建绘制组件 绘制组件可以由以下两种形式…

Servlet-Request

一、预览 在上一篇Servlet体系结构中&#xff0c;我们初步了解了怎么快速本篇将介绍Servlet中请求Request的相关内容&#xff0c;包括Request的体系结构&#xff0c;Request常用API。 二、Request体系结构 我们注意到我们定义的Servlet类若实现Servlet接口时&#xff0c;请求…

第十七周周报

文章目录 摘要目标检测锚框交并比NMS 非极大值抑制输出 文献阅读&#xff1a;SMPL: A Skinned Multi-Person Linear ModelIntroductionRelated WorkModel FormulationTraining评估动态SMPL讨论结论 总结 摘要 本周看了三维人体重建的领域&#xff0c;看了一篇SMPL的文章&#…

C++算法学习心得五.二叉树(4)

1.二叉搜索树中的插入操作&#xff08;701题&#xff09; 题目描述&#xff1a;给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意…

Go 知多少?

作为一名已接触过其他语言的开发&#xff0c;再去学习一门新语言可比之前轻松不少&#xff0c; 语言之间存在很多相似点&#xff0c;但是新语言也有自己的不同点&#xff0c;通常我会先了解它与其他语言常遇到的不同点有哪些&#xff0c; 使自己先能够上手编写基础程序&#…

【LabVIEW FPGA入门】LabVIEW FPGA实现I2S解码器

该示例演示了如何使用 LabVIEW FPGA 解码 IS 信号。该代码可用于大多数支持高速数字输入的LabVIEW FPGA 目标&#xff08;例如R 系列、CompactRIO&#xff09;。IS 用于对系统和组件内的数字音频数据进行编码。例如&#xff0c;MP3 播放器或 DVD 播放器内部的数字音频通常使用 …

【b站咸虾米】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 三、vue语法 继续回到官…

飞桨分子动力学模拟-论文复现第六期:复现TorchMD

飞桨分子动力学模拟-论文复现第六期&#xff1a;复现TorchMD Paddle for MD 飞桨分子动力学模拟科学计算 复现论文-TorchMD: A deep learning framework for molecular simulations 本项目可在AIStudio一键运行&#xff1a;飞桨分子动力学模拟PaddleMD-复现TorchMD 【论文复…

浅析三种Anaconda虚拟环境创建方式和第三方包的安装

目录 引言 一、Anaconda虚拟环境创建方式 1. 使用conda命令创建虚拟环境 2. 使用conda-forge创建虚拟环境 3. 使用Miniconda创建虚拟环境 二、第三方包的安装和管理 1. 使用 pip 安装包&#xff1a; 2. 使用 conda 安装包&#xff1a; 三、结论与建议 引言 在当今的数…

Ceph入门到精通-通过 CloudBerry Explorer 管理对象bucket

简介 CloudBerry Explorer 是一款可用于管理对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;的客户端工具。通过 CloudBerry Explorer 可实现将 COS 挂载在 Windows 等操作系统上&#xff0c;方便用户访问、移动和管理 COS 文件。 支持系统 支持 Wind…

【ceph】在虚拟环境中需要给osd所在的虚拟盘扩容操作

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

力扣每日一练(24-1-13)

如果用列表生成式&#xff0c;可以满足输出的型式&#xff0c;但是不满足题意&#xff1a; nums[:] [i for i in nums if i ! val]return len(nums) 题意要求是&#xff1a; 你需要原地修改数组&#xff0c;并且只使用O(1)的额外空间。这意味着我们不能创建新的列表&#xff…