Element-ui DatePicker显示周数的方法示例

作者:面包大虾 时间:2024-05-29 22:45:19 

1.场景描述

我们公司是做电商的,运营的工作指标都是按周来定的,所以他们对周特别敏感,希望我们能在日期选择器上显示周数。刚接到这个需求时,心中很不乐意,因为Element-ui的日期选择器根本不支持显示周数。我只能看看源码来看看能否有解决的办法

具体代码大家可以在github中看到https://github.com/ElemeFE/element/pull/16415/commits/2b810cf73d1127645054265469bbb353d036cb21

2.查看源码

我们很轻松就能找到DatePicker相关的代码,在packages > date-picker 整个目录都是date-picker的代码,在date-picker > src > basic > date-table.vue中就是显示日期的代码,在这里竟然发现了一个属性showWeekNumber,在date-table.vue的第83行。


showWeekNumber: {
 type: Boolean,
 default: false
},

为了验证这个参数对我们是否有帮助,我们把showWeekNumber默认设置为true试试,然后把第11行的


<th v-if="showWeekNumber">{{ t('el.datepicker.week') }}</th>

改为


<th v-if="showWeekNumber">周数</th>

设置用来设置国际化的,国际化文件中没有这个对应的翻译,我们暂时先这么写,不然会报错。当我们完成这个之后神奇的事情发生了

Element-ui DatePicker显示周数的方法示例

周数展示出来了,而且好像展示的事正确的,7.1-7.6就是2019年的第27周。既然能够展示周数,那么为什么element不开放出来这个参数了,是否是有什么问题呢。我们自己来简单的测试下

3. 发现并解决问题

Element-ui DatePicker显示周数的方法示例

Element-ui DatePicker显示周数的方法示例

Element-ui DatePicker显示周数的方法示例

问题

(1)切换月时,周数并不会发生变化

(2)选中的是29周,输入框中确展示的是28周

(3)hover选中时,周数不应该展示高亮的样式

(4)日期区间选中的样式也不正确

解决问题

(1)解决周数不变化的问题,我们找到date-table.vue中第149行到152行


if (this.showWeekNumber) {
if (!row[0]) {
 row[0] = { type: 'week', text: getWeekNumber(nextDate(startDate, i * 7 + 1)) };
}
}

当showWeekNumber为true时,row[0]就是用来展示周数的,当row[0],存在时,就不在去获取新的值,显然不正确,我们把if判断去掉就行,这样就会更新周数

(2)解决选中后周数展示不正确的问题,我们找到date-table.vue中第14行到18行


<tr
class="el-date-table__row"
v-for="(row, key) in rows"
:class="{ current: isWeekActive(row[1]) }"
:key="key">

isWeekActive就是用来获得当前展示的周数的,当展示周数之后我们要做适当的修改


<tr
class="el-date-table__row"
v-for="(row, key) in rows"
:class="{ current: isWeekActive(row[showWeekNumber ? 2 : 1]) }"
:key="key">

至于第三个问题和第三个问题都是样式的问题,我们修改下date-table对应的样式即可

最后看下展示效果

Element-ui DatePicker显示周数的方法示例

Element-ui DatePicker显示周数的方法示例

Element-ui DatePicker显示周数的方法示例

Element-ui DatePicker显示周数的方法示例

4. 最后

我已经向element-ui提了pr,但是还没有merge,具体的代码大家可以在github中看到https://github.com/ElemeFE/element/pull/16415/commits/2b810cf73d1127645054265469bbb353d036cb21,解决了国际化的问题和增加了参数展示周数

5. 问题

代码是已经改好了,但是我们引入饿了么的代码是直接通过npm下载的,线上环境也是npm下载的,我们是无法来更改npm的代码的。那么我们怎么来解决这个问题呢,请看我的下一篇文章,我最近会更新。

来源:https://www.cnblogs.com/mianbaodaxia/p/11170251.html

标签:Element,DatePicker,周数
0
投稿

猜你喜欢

  • 想学画画?python满足你!

    2022-03-28 02:52:30
  • Win 10下Anaconda虚拟环境的教程

    2022-09-18 16:42:06
  • Python中的for循环详情

    2022-04-11 04:30:54
  • 八个有用的WordPress的SQL语句

    2009-01-12 18:54:00
  • pytorch 两个GPU同时训练的解决方案

    2023-07-04 11:03:55
  • dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)

    2024-04-28 09:45:40
  • mysql 8.0.18 安装配置优化教程

    2024-01-19 22:43:59
  • 网页设计五原则

    2007-11-03 13:50:00
  • python 调试器pdb的简单使用

    2023-08-03 19:13:20
  • vue+swiper实现组件化开发的实例代码

    2024-06-05 15:30:09
  • ASP.NET处理HTTP请求的流程:IHttpModule、IHttpHandler与管道事件

    2024-05-09 09:04:58
  • Django项目搭建之实现简单的API访问

    2021-05-20 23:21:33
  • 使用Keras画神经网络准确性图教程

    2021-02-17 03:20:28
  • 使用Python脚本zabbix自定义key监控oracle连接状态

    2021-01-02 05:23:54
  • 使SQL用户只能看到自己拥有权限的库(图文教程)

    2024-01-27 11:07:27
  • Python学习之str重要函数

    2022-12-29 05:46:37
  • 如何处理json中不带双引号的key的问题

    2023-02-07 00:25:22
  • Python Flask入门

    2023-11-03 17:00:49
  • Python Socket编程入门教程

    2022-03-08 01:08:49
  • Bootstrap table学习笔记(2) 前后端分页模糊查询

    2024-04-29 13:12:22
  • asp之家 网络编程 m.aspxhome.com