vue3 实现el-date-picker日期筛选过程

一、图例

二、需求:

有2个查询条件,startTime 和 endTime

选中时间1,禁止选中时间2,当前值传递给 startTime

选中时间2,禁止选中时间1,当前值传递给 startTime 和 endTime

三、完整代码

<div class="select-list flex">
  <span>时间:</span>
  <div class="select-item" @click="dateChange(chi,chiIndex)" :class="[state.dateActive===chiIndex?'select-item-active':'']" v-for="(chi,chiIndex) in dateList" :key="chiIndex">{{ chi.text }}</div>
  <div class="date-box">
    <el-config-provider :locale="zhCn">
      <el-date-picker :editable="false" :unlink-panels="true" v-model="state.times" type="daterange"
      start-placeholder="开始时间" end-placeholder="结束时间" range-separator="——" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
    </el-config-provider>
  </div>
</div>

<script setup lang="ts">
import { onMounted, reactive, ref, watch } from 'vue'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
// hooks
import WholeReport from './hooks/index'
const { isRefresh, reportData, getStudentReport } = WholeReport()


// 基本信息
const state = reactive<any>({
  times: [],
  startTime: '',
  endTime: '',
  dateActive: 0,
  subjectId: 1
})
const dateList = ref<any>([
  { text: '全部' },
  { text: '近一周' },
  { text: '一月' },
  { text: '三月' },
  { text: '自定义' }
])


// ===============methods================
onMounted(() => {
  init()
})
const init = async () => {
  await getStudentReportData()
}

// 选择时间
watch(() => state.times, (newVal) => {
  if (newVal) {
    state.startTime = newVal[0]
    state.endTime = newVal[1]
    state.dateActive = 4
    getStudentReportData()
  } else {
    if (state.dateActive === 4) {
      state.dateActive = 0
      state.startTime = ''
      state.endTime = ''
      getStudentReportData()
    }
  }
})

// 筛选切换
const dateChange = async (item:any, index:number) => {
  if (index === 0 || index === 1 || index === 2 || index === 3) {
    state.times = null
    state.startTime = ''
    state.endTime = ''
    state.dateActive = index
  }
  const date = new Date()
  if (item.text === '近一周') {
    state.startTime = getDate(-7)
  } else if (item.text === '一月') {
    state.startTime = newDate(date.setMonth(date.getMonth() - 1))
  } else if (item.text === '三月') {
    state.startTime = newDate(date.setMonth(date.getMonth() - 3))
  }
  state.pageIndex = 1
  state.total = 0
  await getStudentReportData()
}
// 获取多少天前的日期
const getDate = (day:number) => {
  let today = new Date()
  let targetday = today.getTime() +1000*60*60*24* day
  today.setTime(targetday)
  let tYear = today.getFullYear()
  let tMonth = today.getMonth()
  let tDate = today.getDate()
  tMonth = doHandMonth(tMonth+1)
  tDate = doHandMonth(tDate)
  return tYear +"-" + tMonth+"-"+tDate
}
const doHandMonth=(month:any)=>{
  var m = month
  if(month.toString().length==1){
    m = "0"+month
  }
  return m
}
// 日期转换
const newDate = (time:any) => {
  let date = new Date(time)
  let y = date.getFullYear()
  let m = date.getMonth() + 1
  const month = m < 10 ? '0' + m : m
  let d = date.getDate()
  const day = d < 10 ? '0' + d : d
  return y + '-' + month + '-' + day
}

// 接口
const getStudentReportData = async () => {
  const dataReq = {
    StudentId: route.query.studentId,
    Subject: state.subjectId,
    StartDate: state.startTime,
    EndDate: state.endTime,
    Page: state.pageIndex,
    PageSize: state.pageSize
  }
  await getStudentReport(dataReq)
  console.log()
}
</script>

<style lang='scss' scoped>
.select-list{
  padding: 10px 0;
  span{
    width: 80px;
    white-space: nowrap;
  }
  .select-item{
    margin-right: 45px;
    padding: 5px 16px;
    border-radius: 10px;
    border: 1px solid #3C3C3C;
    font-size: 18px;
    cursor: pointer;
    &:nth-child(6){
      display: none;
    }
  }
  .select-item-active{
    background: #262626;
    border: 1px solid #262626;
  }
}
:deep(.date-box){
  .el-input__prefix {
    position: absolute;
    right: 15px;
  }
  .el-icon{
    color: #3C3C3C;
    font-size: 26px;
  }
  .el-date-editor.el-input{
    height: inherit;
  }
  .el-date-editor.el-input__wrapper{
    background: inherit;
    border-radius: 80px;
    border: 1px solid #3C3C3C;
    box-shadow: inherit;
    padding: 2px 60px 2px 5px !important;
    display: flex;
    border-radius: 10px;
    height: 36px !important;
    width: 300px;
  }
  .el-date-editor{
    .el-range-separator{
      color: #999;
    }
    .el-range-input{
      color: #fff;
      font-size: 18px;
      width: 110px;
      &::placeholder{
        color: rgba(219, 233, 251,.5);
      }
    }
    .el-range__icon{
      font-size: 30px;
      position: absolute;
      right: 20px;
    }
    .el-icon svg{
      color: #999;
      font-size: 26px;
    }
  }
}
</style>

      希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

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

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

相关文章

java中使用redis

1、redis数据类型 1.1、5种数据类型 redis存储的是key-value结构的数据&#xff0c;其中key是字符串类型&#xff0c;value有5种常用的数据类型&#xff1a;字符串 string、哈希 hash、列表 list、集合 set、有序集合 sorted set / zset。 字符串(string)&#xff1a;普通字符…

揭秘计算机内部通信:探秘数据、地址与控制信号的奥秘

引言 在我们前面的讲解中&#xff0c;我们详细了解了计算机系统的核心组件&#xff0c;包括CPU、内存和磁盘。然而&#xff0c;总线在这个体系中同样至关重要。总线是计算机内部各部件间通信的桥梁&#xff0c;涉及数据、地址和控制信号的传输。在接下来的内容中&#xff0c;我…

【C++】浅拷贝 / 深拷贝 / 写时拷贝

文章目录 1. 经典的string类问题2. 浅拷贝3. 深拷贝3.1 传统写法的String类3.2 现代写法的String类 4. 写时拷贝 1. 经典的string类问题 上一篇博客已经对string类进行了简单的介绍&#xff0c;大家只要能够正常使用即可。 链接&#xff1a;【C】string 在面试中&#xff0c;面…

用Redis实现实现全局唯一ID

全局唯一ID 如果使用数据库自增ID就存在一些问题&#xff1a; id的规律性太明显受表数据量的限制 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足下列特性&#xff1a; 唯一性高可用递增性安全性高性能 为了增加ID的安全性…

PMP如何续证?

PMP证书的有效期是3年&#xff0c;那过了有效期如何续证呢&#xff1f;对此你需要完成两个步骤&#xff1a; 1.在三年之内向PMI申报完成60个PDU&#xff1b; 2.向PMI申请下一个三年续证的有效期并缴费。 流程看着挺简单&#xff0c;但是对于首次操作的朋友可能会感到有些陌生…

深入解析云原生与Kubernetes:现代化应用开发的未来

云原生是一种创新的软件开发和部署方法论&#xff0c;旨在使应用程序能够更好地适应云环境的特性和需求。而Kubernetes作为云原生的核心技术&#xff0c;提供了强大的容器编排和管理能力&#xff0c;改变了应用部署和运行的方式。本文将深入探讨云原生和Kubernetes的概念、原理…

【VTK三维重建-体绘制】第四期 VTK中GPU加速

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 前言 上期内容讲到VTK的体绘制技术vtkGPUVolumeRayCastMapper&#xff0c;本文分享VTK中GPU加速的相关内容&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会…

WPF Blend for visual studio使用

Blend for visual studio介绍 VS自带Blend for visual studio是专门用来做WPF、Metro等的界面设计的可视化工具&#xff0c;其功能和PS类似。其目的让做界面和后台的程序分开&#xff0c;能快速绘制形状和路径、修改对象样式、动态显示对象(动画)、显示数据等高级操作。VS与Ble…

性能优化-OpenMP基础教程(一)

本文主要介绍OpenMP并行编程技术&#xff0c;编程模型、指令和函数的介绍、以及OpenMP实战的几个例子。希望给OpenMP并行编程者提供指导。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&am…

每日一练:LeeCode-LCR 123. 图书整理 I (反转链表)(简)【栈、头插法(虚拟头结点)、双指针、递归】

本文是力扣LeeCode-LCR 123. 图书整理 I &#xff08;简&#xff09; 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 书店店员有一张链表形式的书单&#xff0c;每个节点代表一本书&#xff0c;节点中的值表示书的编号。为…

漏洞扫描工具scan4all(15000+PoC)

scan4all拥有15000PoC漏洞扫描&#xff0c;23种应用弱口令爆破&#xff0c;7000Web指纹&#xff0c;146种协议&#xff0c;90000规则Port扫描。集成 vscan、nuclei、ksubdomain、subfinder等&#xff0c;充分自动化进行扫描。是一款Fuzz、HW打点、BugBounty神器等工具。 项目地…

Python入门第09篇(conda虚拟环境)

前言 一开始默认安装了最新的Python3.12&#xff0c;搞的倒也顺手&#xff0c;看别人会有不兼容的问题&#xff0c;在我这开始没出现。不过坑总会踩到的&#xff0c;这不就出问题了。pip install一个包一直不行&#xff0c;问了下度娘&#xff0c;说由于这个包使用了一些新技术…

caj转换成pdf有哪些方法?

caj转换成pdf有哪些方法&#xff1f;PDF是一个被广泛支持的文件格式&#xff0c;这种格式基本上在所有的操作系统和设备上都是支持使用的&#xff0c;也能够将PDF文件打开和查看的&#xff0c;相比于caj文件&#xff0c;它就只能通过一下特定的软件或者是插件才能够将caj打开或…

TDD-LTE 寻呼流程

目录 1. 寻呼成功流程 1.1 空闲态寻呼 1.2 连接态寻呼 2. 寻呼失败流程 2.1 Paging消息不可达 2.2 RRC建立失败 2.3 eNodeB未上发Initial UE message或达到超时 1. 寻呼成功流程 1.1 空闲态寻呼 寻呼成功&#xff1a;MME发起寻呼&#xff08;S1 接口发送Paing 消息&…

【HarmonyOS开发】分布式应用的开发实践(元旦快乐)

元旦快乐&#xff0c;再见2023&#xff0c;加油2024&#xff0c;未来可期&#xff0c;愿新的一年带来健康、幸福和成功&#xff01;&#x1f4aa; &#x1f4aa;&#x1f4aa; 多种设备之间能够实现硬件互助、资源共享&#xff0c;依赖的关键技术包括分布式软总线、分布式设备虚…

如何调用FastGPT的API

fastGPT提供兼容OpenAI格式的接口&#xff0c;但是还是有一些地方需要注意 新建一个应用&#xff0c;可以正常测试通过后。【外部使用】【API访问】【新建一个KEY】 我们在调用FastGPT API的时候&#xff0c;需要传递一个chatId的参数&#xff0c;这个是标识同一个会话的参数…

SpringBoot+SSM项目实战 苍穹外卖(08) 用户下单支付订单 内网穿透cpolar软件 绕开微信支付实现

继续上一节的内容&#xff0c;本节导入地址簿功能代码&#xff0c;并实现用户下单和订单支付功能。 这里写目录标题 导入地址簿功能代码接口分析代码实现 用户下单接口分析代码实现 订单支付内网穿透——cpolar软件代码导入绕开微信支付实现 导入地址簿功能代码 地址簿&#x…

注册 Mongodb 官网个人账号

上文 Mongodb基础介绍与应用场景我们简单说了一下 Mongodb 的场景 那么 我们先在他的官网创建一个个人账号 我们先访问官网 https://www.mongodb.com/zh-cn 这里 我们需要注册一下 这里 我们按要求填写信息 然后 点击下面创建账户 然后 点击下面创建账户 然后 他会要求我们邮…

OSCHINA Gitee 联合呈现,《2023 中国开源开发者报告》正式发布,总结分非常帮,可以免费看的报告!

《2023 中国开源开发者报告》 详细地址&#xff1a; https://talk.gitee.com/report/china-open-source-2023-annual-report.pdf 不需要收费下载&#xff01;&#xff01; 其中大模型的部分总结的非常棒 gietee 也支持 AI 模型托管了 如何在 Gitee 上托管 AI 模型 https://…

嵌入式视频播放器(mplayer)

1.文件准备&#xff1a; MPlayer-1.0rc2.tar.bz2 libmad-0.15.1b.tar.gz 直接Git到本地 git clone https://gitee.com/zxz_FINE/mplayer_tarball.git 2.文件夹准备&#xff1a; src存放解压后的源码文件&#xff0c;target_Mplayer存放编译安装的目标文件 mkdir src targe…
最新文章