ant-vue-design时间控件快捷筛选时间范围,可选择今天、昨天、最近一周、最近2周、最近1个月、3个月、半年

本文介绍了如何在Ant Design Vue中利用RangePicker控件创建类似Element-UI的时间范围选择功能,通过自定义`ranges`属性实现了筛选最近一周、一个月等快捷选项,并展示了代码实现和样式调整的过程。

之前在使用element-ui,其中有个时间控件使用起来方便,就是日期范围控件,看可以便捷的筛选最近1周、2周、1个月、3个月、半年等这样的快捷筛选方式,使用起来感觉简单、易用,体验挺好,最近一个项目在使用ant-design-vue,也想要实现个类似的时间范围选择的效果。element-ui的效果的样子:

我在ant-design-vue里面没有找到类似的控件,最终发现了RangePicker,可查看demo的时候并没有和element-ui中那个效果类似的案例,这我也不能为了一个控件就再引入一个UI库呀(如果必须要这种效果的话,自己不会实现,也只能引入了)。不过好在最后发现了RangePicker的一个属性:ranges,可以预设时间范围快捷选择,直接上代码吧:

<a-range-picker @change="onChange" :ranges="dataRange"></a-range-picker>
<script>
import moment from "moment"; //使用到了moment控件,需要引入一下
let dataRange = {
  今天: [moment().startOf("day"), moment()],
  昨天: [
    moment().startOf("day").subtract(1, "days"),
    moment().startOf("day").subtract(1, "days"),
  ],
  最近一周: [moment().startOf("day").subtract(1, "weeks"), moment()],
  最近两周: [moment().startOf("day").subtract(2, "weeks"), moment()],
  最近1个月: [moment().startOf("day").subtract(1, "months"), moment()],
  最近3个月: [moment().startOf("day").subtract(3, "months"), moment()],
  最近半年: [moment().startOf("day").subtract(6, "months"), moment()],
  最近1年: [moment().startOf("day").subtract(1, "years"), moment()],
};
export default {
  data() {
    return {
      dataRange
    };
  },
  methods: {
    onChange(data, dataString) {
      console.log(data);
      console.log(dataString);
    },
  },
};
</script>

虽然在样式上和element-ui有些差距,但是功能已无任何问题。

Vue 3Ant Design中实现支持年、季度、选择的自定义日历控件可按如下步骤进行: ### 1. 环境搭建 确保项目中已安装Vue 3Ant Design Vue。若未安装,可通过以下命令安装: ```bash npm install vue@next npm install ant-design-vue ``` ### 2. 引入必要组件和依赖 在Vue 3项目里引入Ant Design Vue的日历组件与相关依赖: ```vue <template> <a-calendar v-model:value="value" :locale="locale" @panelChange="onPanelChange" /> </template> <script setup> import { ref } from &#39;vue&#39;; import dayjs from &#39;dayjs&#39;; import locale from &#39;ant-design-vue/es/date-picker/locale/zh_CN&#39;; const locale = locale; const value = ref(); const onPanelChange = (value, mode) => { console.log(value, mode); }; </script> ``` 上述代码引入了Ant Design Vue的日历组件,且实现了基本的日期选择功能。 ### 3. 实现年、季度、维度选择 借助自定义操作栏与事件处理达成不同日期维度的选择: ```vue <template> <a-calendar v-model:value="value" :locale="locale" :fullscreen="false" :date-render="dateRender" :header-render="headerRender" @panelChange="onPanelChange" /> </template> <script setup> import { ref } from &#39;vue&#39;; import dayjs from &#39;dayjs&#39;; import locale from &#39;ant-design-vue/es/date-picker/locale/zh_CN&#39;; const locale = locale; const value = ref(); const dateRender = (current) => { // 自定义日期渲染逻辑 return <div>{current.date()}</div>; }; const headerRender = ({ value, type, onChange, onTypeChange }) => { const start = value.clone().startOf(type); const end = value.clone().endOf(type); const title = `${start.format(&#39;YYYY-MM-DD&#39;)} - ${end.format(&#39;YYYY-MM-DD&#39;)}`; return ( <div> <a-radio-group value={type} onChange={(e) => onTypeChange(e.target.value)} > <a-radio value="year">年</a-radio> <a-radio value="quarter">季度</a-radio> <a-radio value="month"></a-radio> <a-radio value="week"></a-radio> </a-radio-group> <span>{title}</span> </div> ); }; const onPanelChange = (value, mode) => { console.log(value, mode); }; </script> ``` 在上述代码中,`headerRender` 方法自定义了日历的操作栏,提供年、季度、的选择。`dateRender` 方法可用于自定义日期的渲染逻辑。 ### 4. 处理不同维度下的特定交互需求 依据不同的日期维度,在 `onPanelChange` 方法里处理特定的交互逻辑: ```vue const onPanelChange = (value, mode) => { if (mode === &#39;year&#39;) { // 处理年维度的交互逻辑 console.log(&#39;当前选择的年份:&#39;, value.year()); } else if (mode === &#39;quarter&#39;) { // 处理季度维度的交互逻辑 console.log(&#39;当前选择的季度:&#39;, value.quarter()); } else if (mode === &#39;month&#39;) { // 处理维度的交互逻辑 console.log(&#39;当前选择的份:&#39;, value.month() + 1); } else if (mode === &#39;week&#39;) { // 处理维度的交互逻辑 console.log(&#39;当前选择的:&#39;, value.week()); } }; ``` 通过以上步骤,就能实现一个支持年、季度、选择的自定义日历控件,并且满足不同维度下的特定交互需求。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值