基于 Vue 和 Element Plus 的时间范围控制与数据展示

文章目录

      • [1. 核心功能 🎯](#1. 核心功能 🎯)
      • [2. 实现效果 🎨](#2. 实现效果 🎨)
      • [3. 代码实现 🛠️](#3. 代码实现 🛠️)
        • [3.1 HTML 部分 📝](#3.1 HTML 部分 📝)
        • [3.2 JavaScript 部分 📝](#3.2 JavaScript 部分 📝)
        • [3.3 CSS 部分 📝](#3.3 CSS 部分 📝)

本文将重点讲解如何在 Vue 项目中使用 Element Plus 的 el-date-picker 组件实现时间范围选择,并结合"日"、"月"、"年"按钮动态控制时间范围。!🚀


1. 核心功能 🎯

  • 时间范围选择 :使用 el-date-picker 实现日期范围选择。
  • 快速切换:通过"日"、"月"、"年"按钮快速设置时间范围。
  • 动态绑定:根据用户选择动态更新时间范围。

2. 实现效果 🎨

  • 时间选择器:用户可以选择自定义日期范围。
  • 按钮切换:点击"日"、"月"、"年"按钮,时间选择器会自动更新为对应范围。
  • 样式交互 :选中按钮高亮显示,提升用户体验。

3. 代码实现 🛠️

3.1 HTML 部分 📝

以下是时间选择器及相关按钮的 HTML 结构:

html 复制代码
<template>
  <div class="dataPanel-energyManagement-title-right">
    <!-- 时间选择器 -->
    <el-date-picker
      v-model="value1"
      type="daterange"
      range-separator="-"
      start-placeholder="开始时间"
      end-placeholder="结束时间"
      :size="size"
    />
    <!-- 时间范围按钮 -->
    <div
      class="picker-but"
      :class="{ active: selectedTimeRange === 'day' }"
      @click="selectTimeRange('day')"
    >
      日
    </div>
    <div
      class="picker-but"
      :class="{ active: selectedTimeRange === 'month' }"
      @click="selectTimeRange('month')"
    >
      月
    </div>
    <div
      class="picker-but"
      :class="{ active: selectedTimeRange === 'year' }"
      @click="selectTimeRange('year')"
    >
      年
    </div>
  </div>
</template>
  • el-date-picker :用于选择日期范围,v-model 绑定到 value1。
  • picker-but :三个按钮分别对应"日"、"月"、"年",点击后调用 selectTimeRange 方法。

3.2 JavaScript 部分 📝

以下是时间范围控制的 JavaScript 逻辑:

javascript 复制代码
<script>
export default {
  data() {
    return {
      value1: [], // 绑定日期范围
      selectedTimeRange: 'day', // 当前选择的时间范围
      size: 'default', // 组件大小
    };
  },
  methods: {
    // 根据选择的时间范围设置日期
    selectTimeRange(range) {
      this.selectedTimeRange = range;
      const now = new Date();

      switch (range) {
        case 'day': // 选择"日"
          this.value1 = [new Date(now), new Date(now)];
          break;
        case 'month': // 选择"月"
          const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1);
          const endOfMonth = new Date(now.getFullYear(), now.getMonth() + 1, 0);
          this.value1 = [startOfMonth, endOfMonth];
          break;
        case 'year': // 选择"年"
          const startOfYear = new Date(now.getFullYear(), 0, 1);
          const endOfYear = new Date(now.getFullYear(), 11, 31);
          this.value1 = [startOfYear, endOfYear];
          break;
        default:
          this.value1 = [];
      }
    },
  },
  mounted() {
    // 默认选择"日"范围
    this.selectTimeRange('day');
  },
};
</script>
  • value1 :绑定到 el-date-picker 的日期范围。
  • selectTimeRange 方法 :根据用户选择的"日"、"月"、"年"动态设置日期范围。
    • 日范围:设置为当天。
    • 月范围:设置为当前月的第一天和最后一天。
    • 年范围:设置为当前年的第一天和最后一天。
  • mounted 钩子:默认加载"日"范围。

3.3 CSS 部分 📝

以下是时间选择器和按钮的样式设计:

css 复制代码
<style scoped>
.dataPanel-energyManagement-title-right {
  display: flex;
  align-items: center;
}

.picker-but {
  margin-left: 10px;
  cursor: pointer;
  padding: 5px 10px;
  border: 1px solid #ccc;
  border-radius: 4px;
  background-color: #fff;
  color: #000;
  text-align: center;
  line-height: 32px;
}

.picker-but:hover {
  background-color: #ecf5ff;
}

.picker-but.active {
  background-color: #409eff;
  color: white;
  border-color: #409eff;
}
</style>
  • picker-but:按钮的基础样式。
  • active 类:高亮显示当前选中的按钮。
  • hover 效果:鼠标悬停时改变背景色。

小提示💡:如果你觉得按钮样式不够酷炫,可以尝试添加动画效果或图标,让界面更生动哦!🎉

您好,我是肥晨。

欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

相关推荐
拆房老料42 分钟前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
VX_bysjlw9851 小时前
数码设备销售网站设计与实现39138-计算机毕设原创(免费领源码+带部署教程)
java·vue.js·spring boot·mysql·tomcat·mybatis·idea
Solis程序员1 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明1 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8881 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖2 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34532 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计
不停喝水3 小时前
【前端转全栈java速通课】 项目实战④7-11节 操作数据库-登录-注册-修改密码-注销-mubatis-plus简化crud-
java·前端·数据库
一水鉴天3 小时前
统一对象拓扑(UOT)设计全链定稿:从三件事分离到三继承 之1 20261010(豆包“查看聊天内容”继续)
前端·css
栖凤4 小时前
Java 的 try-catch 在 Agent 里失效了,我用了 5 个模式才兜住
java·前端·python