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 相关文章推荐
js中将HTMLCollection/NodeList/伪数组转换成数组的代码
Jul 31 Javascript
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
Dec 30 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
vue高德地图之玩转周边
Jun 16 Javascript
vue实现登录后页面跳转到之前页面
Jan 07 Javascript
Angularjs Promise实例详解
Mar 15 Javascript
每天学点Vue源码之vm.$mount挂载函数
Mar 11 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
JS随机密码生成算法
Sep 23 Javascript
js+canvas实现转盘效果(两个版本)
Sep 13 Javascript
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
React组件内事件传参实现tab切换的示例代码
2018/07/04 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
python删除过期文件的方法
2015/05/29 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python数组定义方法
2016/04/13 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
transform python环境快速配置方法
2018/09/27 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
生日寿宴答谢词
2014/01/19 职场文书
年终总结会议主持词
2014/03/17 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL