feat(laydate): 新增 disabledDate, disabledTime 选项 (#1569)

* feat(laydate): 新增 `disabledDate`, `disabledTime` 选项

feat(laydate): 优化年、月面板的禁用检测

refactor: 简化代码

fix: 修复 4d7ae6e 造成的按钮检测 BUG

options.disabledDate 中不应携带时分秒信息

fix(laydate): 修复范围联动模式, 右侧面板检测另外一个日期有效范围错误, 导致无法标记范围的问题

2.8.0 ~ 2.9.4 均有此问题

feat: disabledTime 返回值改为对象,简化写法

docs: 添加文档

feat: 优化点击确定按钮时的提示

fix: 修复一些边界情况

docs: typo

refactor: 优化年月禁用

refactor: 优化确定按钮 hint

chore: typo

docs: update

* refactor: 优化代码结构

* refactor: 优化 disabledTime,减少不必要的计算

* chore(laydate): 使用 prettier 格式化头部代码

* docs(laydate): 补充新选项文档描述

---------

Co-authored-by: 贤心 <3277200+sentsim@users.noreply.github.com>
This commit is contained in:
morning-star
2024-03-31 14:33:47 +08:00
committed by GitHub
parent b7686d2228
commit e1562bdb48
4 changed files with 354 additions and 42 deletions

View File

@@ -325,6 +325,66 @@ max: 7 // 最大日期为 7 天后
</td>
</tr>
<tr>
<td>disabledDate <sup>2.9.8+</sup> </td>
<td>
用于设置不可选取的日期。示例:
```js
disabledDate: function(date, type){
// date - 当前的日期对象
// type - 面板类型,'start'/'end'
// 返回值为 true 的日期会被禁用
return date.getTime() < new Date(2024, 1).getTime(); // 2024-02-01
}
```
</td>
<td>function</td>
<td> - </td>
</tr>
<tr>
<td>disabledTime <sup>2.9.8+</sup> </td>
<td>
用于设置不可选取的时间。示例:
```js
disabledTime: function(date, type){
// date - 当前的日期对象
// type - 面板类型,'start'/'end'
// 数组中指定的时间会被禁用
return {
hours: function(){
return range(0, 10);
},
minutes:function(hour){
return hour > 5 ? range(0, 20) : [];
},
seconds:function(hour, minute){
return range(0, 2);
}
};
}
function range(start, end) {
var result = [];
for (var i = start; i < end; i++) {
result.push(i);
}
return result;
}
```
</td>
<td>function</td>
<td> - </td>
</tr>
<tr>
<td>trigger</td>
<td>
@@ -704,4 +764,4 @@ done: function(value, date, endDate){
</td>
</tr>
</tbody>
</table>
</table>

View File

@@ -21,6 +21,18 @@
这里以控制在 9:30-17:30 为例
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">禁用日期</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="ID-laydate-limit-4" placeholder="仅过去的时间可选">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">禁用指定时间</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="ID-laydate-limit-5" placeholder="时间范围禁用">
</div>
</div>
</div>
</div>
@@ -54,5 +66,41 @@ layui.use(function(){
max: '17:30:00',
btns: ['clear', 'confirm']
});
// 禁用日期
laydate.render({
elem: '#ID-laydate-limit-4',
disabledDate: function(date, type){
return date.getTime() > Date.now();
}
});
// 禁用指定时间
laydate.render({
elem: '#ID-laydate-limit-5',
type: 'time',
range: true,
disabledTime: function(date, type){
return {
hours: function(){
return range(0, 10);
},
minutes:function(hour){
return hour > 5 ? range(0, 20) : [];
},
seconds:function(hour, minute){
return range(0, 2);
}
};
}
});
function range(start, end) {
var result = [];
for (var i = start; i < end; i++) {
result.push(i);
}
return result;
}
});
</script>