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 = 4getStudentReportData()} else {if (state.dateActive === 4) {state.dateActive = 0state.startTime = ''state.endTime = ''getStudentReportData()}}
})// 筛选切换
const dateChange = async (item:any, index:number) => {if (index === 0 || index === 1 || index === 2 || index === 3) {state.times = nullstate.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 = 1state.total = 0await getStudentReportData()
}
// 获取多少天前的日期
const getDate = (day:number) => {let today = new Date()let targetday = today.getTime() +1000*60*60*24* daytoday.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 = monthif(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() + 1const month = m < 10 ? '0' + m : mlet d = date.getDate()const day = d < 10 ? '0' + d : dreturn 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.hqwc.cn/news/326653.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无心剑七绝《译无止境》

七绝译无止境 人生跌宕几春秋 苦辣酸甜永不休 只待通灵成妙译 神思曼舞醉琼楼 2024年1月6日 平水韵十一尤平韵 无心剑的这首《译无止境》以七言绝句的形式&#xff0c;表达了对翻译事业的热爱和追求。 首句“人生跌宕几春秋”&#xff0c;意味着人生的曲折变化&#xff0c…

K8S部署GitLab

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Jmeter相关知识介绍

Jmeter 是Apache 组织开发的基于JAVA 的压力测试工具,用于对软件做压力测试,特别适合于WEB 应用测试(包括压力,接口测试) 今天简单介绍Jemeter的入门相关概念的理解 一、在安装目录下有一个Bin\Jmeter.bat 双击打开 打开之后是一个这样的界面 二、测试计划 1、添加和删…

【Python机器学习】线性模型——lasso

除了岭回归&#xff0c;还有一种正则化的线性回归是lasso&#xff0c;与岭回归相同&#xff0c;使用lasso也是约束系数使其接近于0&#xff0c;但方法不同&#xff0c;叫做L1正则化。L1正则化的结果是使用lasso时某些系数刚好为0。说明某些特征被模型完全忽略。 同样以波士顿房…

亚马逊自养号测评:提升商品排名与流量的必要操作

自养号测评是通过使用自主注册的海外买家账号&#xff0c;对商品进行评价&#xff0c;以提升其在平台上的排名和流量的操作。卖家选择自养号这种方式来增强商品的曝光度和吸引更多潜在买家。然而&#xff0c;养号并非易事&#xff0c;需要卖家提高养号技术、掌握相应技巧&#…

SonarQube 漏洞扫描

SonarQube 漏洞扫描 一、部署服务 1.1 docker方式部署 #安装docker curl -L download.beyourself.org.cn/shell-project/os/get-docker-latest.sh | sh yum install -y docker-compose #进去输入:set paste可以保证不穿行 [rootlocalhost sonar]# vim docker-compose.yml v…

git本地创建分支并推送到远程关联起来

git本地创建分支并推送到远程关联起来 git本地基于当前分支创建个新的分支&#xff0c;然后推送到远程&#xff0c;并把本地新创建的分支和远程分支关联 在当前分支下&#xff0c;新建分支 git checkout -b test推送到远程仓库 git push origin test将本地分支和远程分支关联…

0基础学习VR全景平台篇第134篇:720VR全景,云台调整节点

相机、云台和脚架全套设备组装完成后需要进行调校才能开始拍摄。这一节&#xff0c;我们将主要介绍云台调整的两个内容&#xff1a;对中心靶、调三点一线。&#xff08;后附调校原理&#xff09; 云台部件名称 一、调节准备 &#xff08;一&#xff09;对于安装好的云台 1.检…

音量控制软件sound control mac功能亮点

sound control mac可以帮助用户控制某个独立应用程序的音量&#xff0c;通过每应用音量&#xff0c;均衡器&#xff0c;平衡和音频路由独立控制每个应用的音频&#xff0c;还有整个系统的音量。 sound control mac功能亮点 每个应用程序的音量控制 独立控制应用的数量。 键盘音…

docker安装nodejs,并更改为淘宝源

拉取官方 Node.js 镜像 docker pull node:latest创建 Dockerfile&#xff0c;并更改 NPM 下载源为淘宝源&#xff0c;设置为全局持久化 # 使用最新版本的Node.js作为基础镜像 FROM node:latest# 设置工作目录为/app WORKDIR /app # 更改 NPM 下载源为淘宝源&#xff0c;并设置…

让桥梁学会“说话”

背景 2023年7月6日凌晨时分&#xff0c;G5012恩广高速达万段230公里加80米处6号大桥部分桥面发生垮塌&#xff0c;导致造成2车受损后自燃&#xff0c;3人受轻伤。目前&#xff0c;四川省公安厅交通警察总队高速公路五支队十四大队民警已对现场进行双向管制。 作为世界第一桥梁…

Vue介绍和基本使用

0 前端的发展史 1.HTML(5)、CSS(3)、JavaScript(ES5、ES6)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看 2.Ajax的出现 -> 后台发送异步请求&#xff0c;Re…