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


Posted in Javascript onJuly 19, 2019

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的代码的。那么我们怎么来解决这个问题呢,请看我的下一篇文章,我最近会更新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
文字幻灯片
Jun 26 Javascript
通过Mootools 1.2来操纵HTML DOM元素
Sep 15 Javascript
javascript奇异的arguments分析
Oct 20 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
Jan 09 Javascript
用dtree实现树形菜单 dtree使用说明
Oct 17 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
Apr 26 Javascript
JS实现很酷的水波文字特效实例
Feb 26 Javascript
JavaScript学习笔记整理之引用类型
Jan 22 Javascript
微信小程序开发实战教程之手势解锁
Nov 18 Javascript
jQuery与js实现颜色渐变的方法
Dec 30 Javascript
JavaScript ES6中const、let与var的对比详解
Jun 18 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 #Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
Jul 19 #Javascript
bootstrap table插件动态加载表头
Jul 19 #Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 #Javascript
VueJS 取得 URL 参数值的方法
Jul 19 #Javascript
vue自定义表单生成器form-create使用详解
Jul 19 #Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 #Javascript
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
学习ExtJS table布局
2009/10/08 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
详解angularJs中自定义directive的数据交互
2017/01/13 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
利用vue.js实现被选中状态的改变方法
2018/02/08 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
Python使用get_text()方法从大段html中提取文本的实例
2019/08/27 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Python中的Cookie模块如何使用
2020/06/04 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
python实现简单的五子棋游戏
2020/09/01 Python
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
工程招投标邀请书
2014/01/26 职场文书
优秀企业获奖感言
2014/02/01 职场文书
大气污染防治方案
2014/05/19 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
邀请函格式范文
2015/02/02 职场文书
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers