mirror of https://github.com/layui/layui
commit
35c2fa101d
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -109,7 +109,7 @@ npm i layui
|
||||||
|
|
||||||
点击上方 `Preview` 标签可进行效果预览。
|
点击上方 `Preview` 标签可进行效果预览。
|
||||||
|
|
||||||
<h2 id="help" lay-toc="{}">其他帮助</h2>
|
<h2 id="help">其他帮助</h2>
|
||||||
|
|
||||||
- <a href="https://codepen.io/layui/pen/bGxZXrd" target="_blank" rel="nofollow">在线测试</a>
|
- <a href="https://codepen.io/layui/pen/bGxZXrd" target="_blank" rel="nofollow">在线测试</a>
|
||||||
- <a href="https://github.com/Sight-wcg/layui-theme-dark" target="_blank">深色主题</a> (社区贡献)
|
- <a href="https://github.com/Sight-wcg/layui-theme-dark" target="_blank">深色主题</a> (社区贡献)
|
||||||
|
|
|
@ -205,7 +205,7 @@ table.render({
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>exportTemplet <sup>2.6.9+</sup></td>
|
<td>exportTemplet <sup>2.6.9+</sup></td>
|
||||||
<td>
|
<td colspan="3">
|
||||||
|
|
||||||
<div class="ws-anchor" id="cols.exportTemplet">
|
<div class="ws-anchor" id="cols.exportTemplet">
|
||||||
|
|
||||||
|
@ -223,8 +223,6 @@ exportTemplet: function(d, obj){
|
||||||
```
|
```
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td>string<br>function</td>
|
|
||||||
<td>-</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
@ -232,21 +230,31 @@ exportTemplet: function(d, obj){
|
||||||
[totalRow](#cols.totalRow)
|
[totalRow](#cols.totalRow)
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td colspan="3">
|
||||||
|
|
||||||
<div class="ws-anchor" id="cols.totalRow">
|
<div class="ws-anchor" id="cols.totalRow">
|
||||||
是否开启该列的自动合计功能。
|
是否开启该列的自动合计功能,默认不开启。
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
- 前端合计
|
- **采用前端合计**
|
||||||
|
|
||||||
|
{{!
|
||||||
```
|
```
|
||||||
totalRow: true // 开启合计行,并默认对当前所有行数据进行前端合计
|
// 开启并输出合计行前端合计结果
|
||||||
|
totalRow: true
|
||||||
|
|
||||||
|
// 开启并输出合计行自定义模板。此处 TOTAL_NUMS 即为合计结果的固定特定字段
|
||||||
|
totalRow: '{{= d.TOTAL_NUMS }} 单位'
|
||||||
|
// 取整或其他运算
|
||||||
|
totalRow: '{{= parseInt(d.TOTAL_NUMS) }}'
|
||||||
```
|
```
|
||||||
|
!}}
|
||||||
|
|
||||||
- 后端合计
|
注意:*合计行模板仅支持字符写法,不支持函数写法,请勿与 `templet` 用法混淆。*
|
||||||
|
|
||||||
前端合计的数据有限,因此常常需要后端直接返回合计行结果,此时将优先读取后端的合计行返回结果,其格式如下:
|
- **采用后端合计**
|
||||||
|
|
||||||
|
前端合计的数据有限,因此常需要后端直接返回合计结果,组件将优先读取。数据格式如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
|
@ -261,26 +269,18 @@ totalRow: true // 开启合计行,并默认对当前所有行数据进行前
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
如上,在 `totalRow` 中返回所需统计的列字段名和值即可。
|
在合计行自定义模板中输出后端返回的合计数据
|
||||||
<br>`totalRow` 字段同样可以通过 `parseData` 回调来解析成为 table 组件所规定的数据格式。
|
|
||||||
|
|
||||||
|
|
||||||
- 合计行模板
|
|
||||||
|
|
||||||
{{!
|
{{!
|
||||||
```
|
```
|
||||||
// 获取前端统计的动态字段
|
// 获取后端接口返回数据中的统计字段。此处 TOTAL_ROW 即对应返回据中的 totalRow
|
||||||
totalRow: '{{= d.TOTAL_NUMS }} 单位' // 还比如只取整:'{{= parseInt(d.TOTAL_NUMS) }}'
|
totalRow: '分数:{{= d.TOTAL_ROW.score }}'
|
||||||
// 获取返回数据中的统计字段
|
|
||||||
totalRow: '分数:{{= d.TOTAL_ROW.score }}' // TOTAL_ROW 即对应返回据中的 totalRow
|
|
||||||
```
|
```
|
||||||
!}}
|
!}}
|
||||||
|
|
||||||
</td>
|
如上,在 `totalRow` 中返回所需统计的列字段名和值即可。
|
||||||
<td>boolean<br>string</td>
|
`totalRow` 字段同样可以通过 `parseData` 回调来解析成为 table 组件所规定的数据格式。
|
||||||
<td>
|
|
||||||
|
|
||||||
`false`
|
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
|
@ -26,6 +26,7 @@ layui.use(function(){
|
||||||
elem: '#ID-tree-demo',
|
elem: '#ID-tree-demo',
|
||||||
data: data,
|
data: data,
|
||||||
showCheckbox: true, // 是否显示复选框
|
showCheckbox: true, // 是否显示复选框
|
||||||
|
onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩
|
||||||
id: 'demo-id-1',
|
id: 'demo-id-1',
|
||||||
isJump: true, // 是否允许点击节点时弹出新窗口跳转
|
isJump: true, // 是否允许点击节点时弹出新窗口跳转
|
||||||
click: function(obj){
|
click: function(obj){
|
||||||
|
|
|
@ -6,6 +6,7 @@ toc: true
|
||||||
# 树表组件 <sup title="指在该版本新增的组件">2.8+</sup>
|
# 树表组件 <sup title="指在该版本新增的组件">2.8+</sup>
|
||||||
|
|
||||||
> 树表组件 `treeTable` 是基于 `table` 组件延伸的树形表格组件,支持常见的树组件功能。
|
> 树表组件 `treeTable` 是基于 `table` 组件延伸的树形表格组件,支持常见的树组件功能。
|
||||||
|
> 注意:*该组件不支持 IE8*
|
||||||
|
|
||||||
<h2 id="examples" lay-toc="{anchor: null}" style="margin-bottom: 0;">示例</h2>
|
<h2 id="examples" lay-toc="{anchor: null}" style="margin-bottom: 0;">示例</h2>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ toc: true
|
||||||
| [util.fixbar(options)](../fixbar/) | 固定条组件 |
|
| [util.fixbar(options)](../fixbar/) | 固定条组件 |
|
||||||
| [util.countdown(options)](#countdown) | 倒计时组件 |
|
| [util.countdown(options)](#countdown) | 倒计时组件 |
|
||||||
| [util.timeAgo(time, onlyDate)](#timeAgo) | 某个时间在多久前 |
|
| [util.timeAgo(time, onlyDate)](#timeAgo) | 某个时间在多久前 |
|
||||||
| [util.toDateString(time, format)](#toDateString) | 将毫秒数或日期对象转换成日期格式字符 |
|
| [util.toDateString(time, format, options)](#toDateString) | 将毫秒数或日期对象转换成日期格式字符 |
|
||||||
| [util.digit(num, length)](#digit) | 数字前置补零 |
|
| [util.digit(num, length)](#digit) | 数字前置补零 |
|
||||||
| [util.escape(str)](#escape) | 转义 HTML 字符 |
|
| [util.escape(str)](#escape) | 转义 HTML 字符 |
|
||||||
| [util.unescape(str)](#escape) | 还原 HTML 字符 |
|
| [util.unescape(str)](#escape) | 还原 HTML 字符 |
|
||||||
|
@ -97,15 +97,57 @@ var result = util.timeAgo(1672531200000); // 2023-01-01 00:00:00
|
||||||
|
|
||||||
<h3 id="toDateString" class="ws-anchor ws-bold">转换日期格式字符</h3>
|
<h3 id="toDateString" class="ws-anchor ws-bold">转换日期格式字符</h3>
|
||||||
|
|
||||||
`var result = util.toDateString(time, format);`
|
`var result = util.toDateString(time, format, options);`
|
||||||
|
|
||||||
- 参数 `time` : 毫秒数或日期对象
|
- 参数 `time` : 毫秒数或日期对象
|
||||||
- 参数 `format` : 日期字符格式。默认格式:`yyyy-MM-dd HH:mm:ss` 。可自定义,如: `yyyy年MM月dd日`
|
- 参数 `format` : 日期字符格式。默认格式:`yyyy-MM-dd HH:mm:ss` 。可自定义,如: `yyyy年MM月dd日`
|
||||||
|
- 参数 `options` <sup>2.8.13+</sup> : 该方法的属性可选项,详见下表:
|
||||||
|
|
||||||
|
| 属性名 | 描述 | 类型 | 默认值 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| customMeridiem | 自定义 meridiem 格式 | Function | - |
|
||||||
|
|
||||||
```
|
```
|
||||||
var result = util.toDateString(1672531200000, 'yyyy-MM-dd'); // 2023-01-01
|
var result = util.toDateString(1672531200000, 'yyyy-MM-dd'); // 2023-01-01
|
||||||
|
|
||||||
|
// 中括号中的字符会原样保留 2.8.13+
|
||||||
|
var result2 = util.toDateString(new Date('2023-01-01 11:35:25'), 'ss[s]'); // 25s
|
||||||
|
|
||||||
|
// 自定义 meridiem
|
||||||
|
var result3 = util.toDateString(
|
||||||
|
'2023-01-01 11:35:25',
|
||||||
|
'hh:mm:ss A',
|
||||||
|
{
|
||||||
|
customMeridiem: function(hours, minutes){
|
||||||
|
return (hours < 12 ? 'AM' : 'PM')
|
||||||
|
//.split('').join('.') // 有句点,A.M.
|
||||||
|
//.toLowerCase() // 小写,a.m.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
); // 11:35:25 AM
|
||||||
```
|
```
|
||||||
|
|
||||||
|
参数 `format` 所有可用的格式列表 :
|
||||||
|
|
||||||
|
| 格式 | 示例 | 描述 |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| yy <sup>2.8.13+</sup> | 23 | 年,两位数 |
|
||||||
|
| yyyy | 2023 | 年,四位数 |
|
||||||
|
| M <sup>2.8.13+</sup> | 1-12 | 月 |
|
||||||
|
| MM | 01-12 | 月,两位数 |
|
||||||
|
| d <sup>2.8.13+</sup> | 1-31 | 日 |
|
||||||
|
| dd | 01-31 | 日,两位数 |
|
||||||
|
| H <sup>2.8.13+</sup> | 0-23 | 小时 |
|
||||||
|
| HH | 00-23 | 小时,两位数 |
|
||||||
|
| h <sup>2.8.13+</sup> | 1-12 | 小时,12 小时制 |
|
||||||
|
| hh <sup>2.8.13+</sup> | 01-12 | 小时,12 小时制,两位数 |
|
||||||
|
| A <sup>2.8.13+</sup> | 凌晨/早上/上午/中午/下午/晚上 | meridiem |
|
||||||
|
| m <sup>2.8.13+</sup> | 0-59 | 分钟 |
|
||||||
|
| mm | 00-59 | 分钟,两位数 |
|
||||||
|
| s <sup>2.8.13+</sup> | 0-59 | 秒 |
|
||||||
|
| ss | 00-59 | 秒,两位数 |
|
||||||
|
| SSS <sup>2.8.13+</sup> | 000-999 | 毫秒,三位数 |
|
||||||
|
|
||||||
<h3 id="digit" class="ws-anchor ws-bold">数字前置补零</h3>
|
<h3 id="digit" class="ws-anchor ws-bold">数字前置补零</h3>
|
||||||
|
|
||||||
`util.digit(num, length);`
|
`util.digit(num, length);`
|
||||||
|
|
|
@ -11,6 +11,31 @@ toc: true
|
||||||
|
|
||||||
> 导读:📑 [Layui 2.8 《升级指南》](/notes/2.8/upgrade-guide.html) · 📑 [Layui 新版文档站上线初衷](/notes/2.8/news.html)
|
> 导读:📑 [Layui 2.8 《升级指南》](/notes/2.8/upgrade-guide.html) · 📑 [Layui 新版文档站上线初衷](/notes/2.8/news.html)
|
||||||
|
|
||||||
|
|
||||||
|
<h2 id="2.8.13" class="ws-anchor">
|
||||||
|
2.8.13
|
||||||
|
<span class="layui-badge-rim">2023-08-08</span>
|
||||||
|
</h2>
|
||||||
|
|
||||||
|
- #### table
|
||||||
|
- 优化 在自定义模板中放置 `checkbox` 时对应的文字显示异常问题 # I7LQNO
|
||||||
|
- 调整 `totalRow` 属性在 `table.reloadData()` 数据重载时的支持 # I7R6VY
|
||||||
|
- #### treeTable
|
||||||
|
- 修复 执行 `treeTable.addNodes()` 增加节点导致当前节点选中状态丢失的问题 # I7Q6IP
|
||||||
|
- 优化 增加和删除节点时,对容器尺寸重新进行自动适配
|
||||||
|
- #### tree
|
||||||
|
- 优化 容器样式,以解决用于其他组件内部可能造成的样式异常问题 # I7QAO3
|
||||||
|
- #### dropdown
|
||||||
|
- **调整** `data.title` 属性对 HTML 的转义处理。若不转义,可通过 `templet` 属性实现 # I7Q6IV
|
||||||
|
- #### util
|
||||||
|
- 重构 `util.toDateString()` 转换日期格式字符组件,以提供更强大的占位符支持 # 1314
|
||||||
|
- 修复 `util.fixbar()` 组件因 `default` 属性在 IE8 出现的保留字报错问题
|
||||||
|
|
||||||
|
### 下载: [layui-v2.8.13.zip](https://gitee.com/layui/layui/attach_files/1490273/download)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
<h2 id="2.8.12" class="ws-anchor">
|
<h2 id="2.8.12" class="ws-anchor">
|
||||||
2.8.12
|
2.8.12
|
||||||
<span class="layui-badge-rim">2023-08-01</span>
|
<span class="layui-badge-rim">2023-08-01</span>
|
||||||
|
|
|
@ -46,18 +46,18 @@ layui.use('dropdown', function(){
|
||||||
//,align: 'right'
|
//,align: 'right'
|
||||||
,data: [{
|
,data: [{
|
||||||
title: 'menu item 1'
|
title: 'menu item 1'
|
||||||
,templet: '<i class="layui-icon layui-icon-light"></i> {{d.title}} <span class="layui-badge-dot"></span>'
|
,templet: '<i class="layui-icon layui-icon-light"></i> {{= d.title }} <span class="layui-badge-dot"></span>'
|
||||||
,id: ''
|
,id: ''
|
||||||
,href: ''
|
,href: ''
|
||||||
,type: '' //菜单类型,支持:normal/group/parent
|
,type: '' //菜单类型,支持:normal/group/parent
|
||||||
},{
|
},{
|
||||||
title: 'menu item 2'
|
title: 'menu item <strong>2</strong>'
|
||||||
,templet: '<img src="//cdn.layui.com/avatar/168.jpg?t=123" style="width: 16px;"> {{d.title}}'
|
,templet: '<img src="https://unpkg.com/outeres@0.1.1/demo/avatar/0.png" style="width: 16px;"> {{- d.title }}'
|
||||||
,id: ''
|
,id: ''
|
||||||
,href: 'https://www.layui.com/'
|
,href: 'https://www.layui.com/'
|
||||||
,target: '_blank'
|
,target: '_blank'
|
||||||
},{type: '-'},{},{
|
},{type: '-'},{},{
|
||||||
title: 'menu item 3'
|
title: 'menu item 3 <hello>'
|
||||||
,id: ''
|
,id: ''
|
||||||
,type: 'group'
|
,type: 'group'
|
||||||
,child: [{
|
,child: [{
|
||||||
|
|
|
@ -29,6 +29,14 @@ body{padding: 50px;}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
请编辑格式:
|
||||||
|
<div class="layui-inline">
|
||||||
|
<input type="text" value="yyyy-MM-dd HH:mm:ss" class="layui-input" id="test2"/>
|
||||||
|
</div>
|
||||||
|
<span class="layui-word-aux" id="test3"></span>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
<div id="target-test" style1="position: relative; height: 300px; overflow: auto;">
|
<div id="target-test" style1="position: relative; height: 300px; overflow: auto;">
|
||||||
1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>
|
1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>1<br>
|
||||||
</div>
|
</div>
|
||||||
|
@ -121,6 +129,16 @@ layui.use(['util', 'layer'], function(){
|
||||||
alert(othis.html())
|
alert(othis.html())
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 转换日期格式
|
||||||
|
var timer = null
|
||||||
|
var toDateString = function (format) {
|
||||||
|
var dateString = util.toDateString(new Date(), format);
|
||||||
|
$('#test3').html(dateString)
|
||||||
|
}
|
||||||
|
timer = setInterval(() => {
|
||||||
|
toDateString($('#test2').val())
|
||||||
|
}, 50)
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "layui",
|
"name": "layui",
|
||||||
"version": "2.8.12",
|
"version": "2.8.13",
|
||||||
"description": "Classic modular Front-End UI library",
|
"description": "Classic modular Front-End UI library",
|
||||||
"main": "dist/layui.js",
|
"main": "dist/layui.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|
|
@ -1071,6 +1071,7 @@ a cite{font-style: normal; *cursor:pointer;}
|
||||||
|
|
||||||
.layui-table-cell{height: 38px; line-height: 28px; padding: 6px 15px; position: relative; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box;}
|
.layui-table-cell{height: 38px; line-height: 28px; padding: 6px 15px; position: relative; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; box-sizing: border-box;}
|
||||||
.layui-table-cell .layui-form-checkbox[lay-skin="primary"]{top: -1px; padding: 0;}
|
.layui-table-cell .layui-form-checkbox[lay-skin="primary"]{top: -1px; padding: 0;}
|
||||||
|
.layui-table-cell .layui-form-checkbox[lay-skin="primary"] > div{padding-left: 24px;}
|
||||||
.layui-table-cell .layui-table-link{color: #01AAED;}
|
.layui-table-cell .layui-table-link{color: #01AAED;}
|
||||||
.layui-table-cell .layui-btn{vertical-align: inherit;}
|
.layui-table-cell .layui-btn{vertical-align: inherit;}
|
||||||
.layui-table-cell[align="center"]{-webkit-box-pack: center;}
|
.layui-table-cell[align="center"]{-webkit-box-pack: center;}
|
||||||
|
@ -1550,7 +1551,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
|
||||||
.layui-tree-pack{display: none; padding-left: 20px; position: relative;}
|
.layui-tree-pack{display: none; padding-left: 20px; position: relative;}
|
||||||
.layui-tree-line .layui-tree-pack{padding-left: 27px;}
|
.layui-tree-line .layui-tree-pack{padding-left: 27px;}
|
||||||
.layui-tree-line .layui-tree-set .layui-tree-set:after{content: ""; position: absolute; top: 14px; left: -9px; width: 17px; height: 0; border-top: 1px dotted #c0c4cc;}
|
.layui-tree-line .layui-tree-set .layui-tree-set:after{content: ""; position: absolute; top: 14px; left: -9px; width: 17px; height: 0; border-top: 1px dotted #c0c4cc;}
|
||||||
.layui-tree-entry{position: relative; padding: 3px 0; height: 20px; white-space: nowrap;}
|
.layui-tree-entry{position: relative; padding: 3px 0; height: 26px; white-space: nowrap;}
|
||||||
.layui-tree-entry:hover{background-color: #eee;}
|
.layui-tree-entry:hover{background-color: #eee;}
|
||||||
.layui-tree-line .layui-tree-entry:hover{background-color: rgba(0,0,0,0);}
|
.layui-tree-line .layui-tree-entry:hover{background-color: rgba(0,0,0,0);}
|
||||||
.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color: #999; text-decoration: underline; transition: 0.3s;}
|
.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color: #999; text-decoration: underline; transition: 0.3s;}
|
||||||
|
@ -1559,7 +1560,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
|
||||||
.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height: 13px;}
|
.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height: 13px;}
|
||||||
.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height: 0;}
|
.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height: 0;}
|
||||||
.layui-tree-iconClick{display: inline-block; vertical-align: middle; position: relative; height: 20px; line-height: 20px; margin: 0 10px; color: #c0c4cc;}
|
.layui-tree-iconClick{display: inline-block; vertical-align: middle; position: relative; height: 20px; line-height: 20px; margin: 0 10px; color: #c0c4cc;}
|
||||||
.layui-tree-icon{height: 12px; line-height: 12px; width: 12px; text-align: center; border: 1px solid #c0c4cc;}
|
.layui-tree-icon{height: 14px; line-height: 12px; width: 14px; text-align: center; border: 1px solid #c0c4cc;}
|
||||||
.layui-tree-iconClick .layui-icon{font-size: 18px;}
|
.layui-tree-iconClick .layui-icon{font-size: 18px;}
|
||||||
.layui-tree-icon .layui-icon{font-size: 12px; color: #5F5F5F;}
|
.layui-tree-icon .layui-icon{font-size: 12px; color: #5F5F5F;}
|
||||||
.layui-tree-iconArrow{padding: 0 5px;}
|
.layui-tree-iconArrow{padding: 0 5px;}
|
||||||
|
@ -1571,7 +1572,7 @@ body .layui-util-face .layui-layer-content{padding:0; background-color:#fff; co
|
||||||
.layui-tree-btnGroup .layui-icon{display: inline-block; vertical-align: middle; padding: 0 2px; cursor: pointer;}
|
.layui-tree-btnGroup .layui-icon{display: inline-block; vertical-align: middle; padding: 0 2px; cursor: pointer;}
|
||||||
.layui-tree-btnGroup .layui-icon:hover{color: #999; transition: 0.3s;}
|
.layui-tree-btnGroup .layui-icon:hover{color: #999; transition: 0.3s;}
|
||||||
.layui-tree-entry:hover .layui-tree-btnGroup{visibility: visible;}
|
.layui-tree-entry:hover .layui-tree-btnGroup{visibility: visible;}
|
||||||
.layui-tree-editInput{position: relative; display: inline-block; vertical-align: middle; height: 20px; line-height: 20px; padding: 0 3px; border: none; background-color: rgba(0,0,0,0.05);}
|
.layui-tree-editInput{position: relative; display: inline-block; vertical-align: middle; height: 20px; line-height: 20px; padding: 0; border: none; background-color: rgba(0,0,0,0.05);}
|
||||||
.layui-tree-emptyText{text-align: center; color: #999;}
|
.layui-tree-emptyText{text-align: center; color: #999;}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
var Layui = function(){
|
var Layui = function(){
|
||||||
this.v = '2.8.12'; // Layui 版本号
|
this.v = '2.8.13'; // Layui 版本号
|
||||||
};
|
};
|
||||||
|
|
||||||
// 识别预先可能定义的指定全局对象
|
// 识别预先可能定义的指定全局对象
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
|
|
||||||
layui.define(function(){
|
layui.define(function(){
|
||||||
var mods = []
|
var mods = []
|
||||||
,builtin = layui.cache.builtin;
|
var builtin = layui.cache.builtin;
|
||||||
|
|
||||||
layui.each(builtin, function(modName){
|
layui.each(builtin, function(modName){
|
||||||
(modName === 'all' || modName === 'layui.all') || mods.push(modName);
|
(modName === 'all' || modName === 'layui.all') || mods.push(modName);
|
||||||
});
|
});
|
||||||
|
@ -15,12 +16,12 @@ layui.define(function(){
|
||||||
}(), function(exports){
|
}(), function(exports){
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var MOD_NAME = 'all'
|
var MOD_NAME = 'all';
|
||||||
|
|
||||||
//外部接口
|
// 外部接口
|
||||||
,all = {
|
var all = {
|
||||||
config: {}
|
config: {},
|
||||||
,time: function(){
|
time: function(){
|
||||||
var time = new Date().getTime() - layui.cache.startTime;
|
var time = new Date().getTime() - layui.cache.startTime;
|
||||||
delete layui.cache.startTime;
|
delete layui.cache.startTime;
|
||||||
return time;
|
return time;
|
||||||
|
|
|
@ -3,11 +3,12 @@
|
||||||
* 下拉菜单组件
|
* 下拉菜单组件
|
||||||
*/
|
*/
|
||||||
|
|
||||||
layui.define(['jquery', 'laytpl', 'lay'], function(exports){
|
layui.define(['jquery', 'laytpl', 'lay', 'util'], function(exports){
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var $ = layui.$;
|
var $ = layui.$;
|
||||||
var laytpl = layui.laytpl;
|
var laytpl = layui.laytpl;
|
||||||
|
var util = layui.util;
|
||||||
var hint = layui.hint();
|
var hint = layui.hint();
|
||||||
var device = layui.device();
|
var device = layui.device();
|
||||||
var clickOrMousedown = (device.mobile ? 'touchstart' : 'mousedown');
|
var clickOrMousedown = (device.mobile ? 'touchstart' : 'mousedown');
|
||||||
|
@ -175,7 +176,7 @@ layui.define(['jquery', 'laytpl', 'lay'], function(exports){
|
||||||
: laytpl(templet).render(item);
|
: laytpl(templet).render(item);
|
||||||
}
|
}
|
||||||
return title;
|
return title;
|
||||||
}(item.title);
|
}(util.escape(item.title));
|
||||||
|
|
||||||
// 初始类型
|
// 初始类型
|
||||||
var type = function(){
|
var type = function(){
|
||||||
|
|
|
@ -2882,7 +2882,7 @@ layui.define(['lay', 'laytpl', 'laypage', 'form', 'util'], function(exports){
|
||||||
var dataParams = new RegExp('^('+ [
|
var dataParams = new RegExp('^('+ [
|
||||||
'elem', 'id', 'cols', 'width', 'height', 'maxHeight',
|
'elem', 'id', 'cols', 'width', 'height', 'maxHeight',
|
||||||
'toolbar', 'defaultToolbar',
|
'toolbar', 'defaultToolbar',
|
||||||
'className', 'css', 'totalRow', 'pagebar'
|
'className', 'css', 'pagebar'
|
||||||
].join('|') + ')$');
|
].join('|') + ')$');
|
||||||
|
|
||||||
// 过滤与数据无关的参数
|
// 过滤与数据无关的参数
|
||||||
|
|
|
@ -125,7 +125,7 @@ layui.define('form', function(exports){
|
||||||
|
|
||||||
that.checkids = [];
|
that.checkids = [];
|
||||||
|
|
||||||
var temp = $('<div class="layui-tree'+ (options.showCheckbox ? " layui-form" : "") + (options.showLine ? " layui-tree-line" : "") +'" lay-filter="LAY-tree-'+ that.index +'"></div>');
|
var temp = $('<div class="layui-tree layui-border-box'+ (options.showCheckbox ? " layui-form" : "") + (options.showLine ? " layui-tree-line" : "") +'" lay-filter="LAY-tree-'+ that.index +'"></div>');
|
||||||
that.tree(temp);
|
that.tree(temp);
|
||||||
|
|
||||||
var othis = options.elem = $(options.elem);
|
var othis = options.elem = $(options.elem);
|
||||||
|
|
|
@ -1243,6 +1243,9 @@ layui.define(['table'], function (exports) {
|
||||||
tableView.find('tr[data-level="0"][lay-data-index="' + item4[LAY_DATA_INDEX] + '"]').attr('data-index', i4);
|
tableView.find('tr[data-level="0"][lay-data-index="' + item4[LAY_DATA_INDEX] + '"]').attr('data-index', i4);
|
||||||
})
|
})
|
||||||
options.hasNumberCol && formatNumber(that);
|
options.hasNumberCol && formatNumber(that);
|
||||||
|
|
||||||
|
// 重新适配尺寸
|
||||||
|
table.resize(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1262,6 +1265,7 @@ layui.define(['table'], function (exports) {
|
||||||
var options = that.getOptions();
|
var options = that.getOptions();
|
||||||
var treeOptions = options.tree;
|
var treeOptions = options.tree;
|
||||||
var tableViewElem = options.elem.next();
|
var tableViewElem = options.elem.next();
|
||||||
|
var checkName = table.config.checkName;
|
||||||
|
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
|
|
||||||
|
@ -1277,6 +1281,13 @@ layui.define(['table'], function (exports) {
|
||||||
// 添加数据
|
// 添加数据
|
||||||
newNodes = $.extend(true, [], (layui.isArray(newNodes) ? newNodes : [newNodes]));
|
newNodes = $.extend(true, [], (layui.isArray(newNodes) ? newNodes : [newNodes]));
|
||||||
|
|
||||||
|
// 若未传入 LAY_CHECKED 属性,则继承父节点的 checked 状态
|
||||||
|
layui.each(newNodes, function(i, item){
|
||||||
|
if(!(checkName in item)){
|
||||||
|
item[checkName] = parentNode[checkName];
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
var tableData = that.getTableData(), dataAfter;
|
var tableData = that.getTableData(), dataAfter;
|
||||||
if (!parentNode) {
|
if (!parentNode) {
|
||||||
// 添加到根节点
|
// 添加到根节点
|
||||||
|
@ -1384,6 +1395,10 @@ layui.define(['table'], function (exports) {
|
||||||
// 滚动到第一个新增的节点
|
// 滚动到第一个新增的节点
|
||||||
tableViewElem.find(ELEM_MAIN).find('tr[lay-data-index="' + newNodes[0][LAY_DATA_INDEX] + '"]').get(0).scrollIntoViewIfNeeded();
|
tableViewElem.find(ELEM_MAIN).find('tr[lay-data-index="' + newNodes[0][LAY_DATA_INDEX] + '"]').get(0).scrollIntoViewIfNeeded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 重新适配尺寸
|
||||||
|
table.resize(id);
|
||||||
|
|
||||||
return newNodes;
|
return newNodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ layui.define('jquery', function(exports){
|
||||||
options = $.extend(true, {
|
options = $.extend(true, {
|
||||||
target: 'body', // fixbar 的插入目标选择器
|
target: 'body', // fixbar 的插入目标选择器
|
||||||
bars: [], // bar 信息
|
bars: [], // bar 信息
|
||||||
default: true, // 是否显示默认 bar
|
"default": true, // 是否显示默认 bar
|
||||||
margin: 160, // 出现 top bar 的滚动条高度临界值
|
margin: 160, // 出现 top bar 的滚动条高度临界值
|
||||||
duration: 320 // top bar 等动画时长(毫秒)
|
duration: 320 // top bar 等动画时长(毫秒)
|
||||||
}, options);
|
}, options);
|
||||||
|
@ -33,7 +33,7 @@ layui.define('jquery', function(exports){
|
||||||
: $(options.target === 'body' ? $doc : $target)
|
: $(options.target === 'body' ? $doc : $target)
|
||||||
|
|
||||||
// 是否提供默认图标
|
// 是否提供默认图标
|
||||||
if(options.default){
|
if(options['default']){
|
||||||
// 兼容旧版本的一些属性
|
// 兼容旧版本的一些属性
|
||||||
if(options.bar1){
|
if(options.bar1){
|
||||||
options.bars.push({
|
options.bars.push({
|
||||||
|
@ -254,35 +254,71 @@ layui.define('jquery', function(exports){
|
||||||
},
|
},
|
||||||
|
|
||||||
// 转化为日期格式字符
|
// 转化为日期格式字符
|
||||||
toDateString: function(time, format){
|
toDateString: function(time, format, options){
|
||||||
//若 null 或空字符,则返回空字符
|
// 若 null 或空字符,则返回空字符
|
||||||
if(time === null || time === '') return '';
|
if(time === null || time === '') return '';
|
||||||
|
|
||||||
var that = this
|
// 引用自 dayjs
|
||||||
,date = new Date(function(){
|
// https://github.com/iamkun/dayjs/blob/v1.11.9/src/constant.js#L30
|
||||||
|
var REGEX_FORMAT = /\[([^\]]+)]|y{1,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|SSS/g;
|
||||||
|
var that = this;
|
||||||
|
var date = new Date(function(){
|
||||||
if(!time) return;
|
if(!time) return;
|
||||||
return isNaN(time) ? time : (typeof time === 'string' ? parseInt(time) : time)
|
return isNaN(time) ? time : (typeof time === 'string' ? parseInt(time) : time)
|
||||||
}() || new Date())
|
}() || new Date())
|
||||||
,ymd = [
|
|
||||||
that.digit(date.getFullYear(), 4)
|
|
||||||
,that.digit(date.getMonth() + 1)
|
|
||||||
,that.digit(date.getDate())
|
|
||||||
]
|
|
||||||
,hms = [
|
|
||||||
that.digit(date.getHours())
|
|
||||||
,that.digit(date.getMinutes())
|
|
||||||
,that.digit(date.getSeconds())
|
|
||||||
];
|
|
||||||
|
|
||||||
if(!date.getDate()) return hint.error('Invalid Msec for "util.toDateString(Msec)"'), '';
|
if(!date.getDate()) return hint.error('Invalid Msec for "util.toDateString(Msec)"'), '';
|
||||||
|
|
||||||
|
var years = date.getFullYear();
|
||||||
|
var month = date.getMonth();
|
||||||
|
var days = date.getDate();
|
||||||
|
var hours = date.getHours();
|
||||||
|
var minutes = date.getMinutes();
|
||||||
|
var seconds = date.getSeconds();
|
||||||
|
var milliseconds = date.getMilliseconds();
|
||||||
|
|
||||||
|
var defaultMeridiem = function(hours, minutes){
|
||||||
|
var hm = hours * 100 + minutes;
|
||||||
|
if (hm < 600) {
|
||||||
|
return '凌晨';
|
||||||
|
} else if (hm < 900) {
|
||||||
|
return '早上';
|
||||||
|
} else if (hm < 1100) {
|
||||||
|
return '上午';
|
||||||
|
} else if (hm < 1300) {
|
||||||
|
return '中午';
|
||||||
|
} else if (hm < 1800) {
|
||||||
|
return '下午';
|
||||||
|
}
|
||||||
|
return '晚上';
|
||||||
|
};
|
||||||
|
|
||||||
|
var meridiem = (options && options.customMeridiem) || defaultMeridiem;
|
||||||
|
|
||||||
|
var matches = {
|
||||||
|
yy: function(){return String(years).slice(-2);},
|
||||||
|
yyyy: function(){return that.digit(years, 4);},
|
||||||
|
M: function(){return String(month + 1);},
|
||||||
|
MM: function(){return that.digit(month + 1);},
|
||||||
|
d: function(){return String(days);},
|
||||||
|
dd: function(){return that.digit(days);},
|
||||||
|
H: function(){return String(hours);},
|
||||||
|
HH: function(){return that.digit(hours);},
|
||||||
|
h: function(){return String(hours % 12 || 12);},
|
||||||
|
hh: function(){return that.digit(hours % 12 || 12);},
|
||||||
|
A: function(){return meridiem(hours, minutes);},
|
||||||
|
m: function(){return String(minutes);},
|
||||||
|
mm: function(){return that.digit(minutes);},
|
||||||
|
s: function(){return String(seconds);},
|
||||||
|
ss: function(){return that.digit(seconds);},
|
||||||
|
SSS: function(){return that.digit(milliseconds, 3);}
|
||||||
|
}
|
||||||
|
|
||||||
format = format || 'yyyy-MM-dd HH:mm:ss';
|
format = format || 'yyyy-MM-dd HH:mm:ss';
|
||||||
return format.replace(/yyyy/g, ymd[0])
|
|
||||||
.replace(/MM/g, ymd[1])
|
return format.replace(REGEX_FORMAT, function(match, $1) {
|
||||||
.replace(/dd/g, ymd[2])
|
return $1 || (matches[match] && matches[match]()) || match;
|
||||||
.replace(/HH/g, hms[0])
|
});
|
||||||
.replace(/mm/g, hms[1])
|
|
||||||
.replace(/ss/g, hms[2]);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// 转义 html
|
// 转义 html
|
||||||
|
@ -322,51 +358,51 @@ layui.define('jquery', function(exports){
|
||||||
// 让指定的元素保持在可视区域
|
// 让指定的元素保持在可视区域
|
||||||
toVisibleArea: function(options){
|
toVisibleArea: function(options){
|
||||||
options = $.extend({
|
options = $.extend({
|
||||||
margin: 160 //触发动作的边界值
|
margin: 160, // 触发动作的边界值
|
||||||
,duration: 200 //动画持续毫秒数
|
duration: 200, // 动画持续毫秒数
|
||||||
,type: 'y' //触发方向,x 水平、y 垂直
|
type: 'y' // 触发方向,x 水平、y 垂直
|
||||||
}, options);
|
}, options);
|
||||||
|
|
||||||
if(!options.scrollElem[0] || !options.thisElem[0]) return;
|
if(!options.scrollElem[0] || !options.thisElem[0]) return;
|
||||||
|
|
||||||
var scrollElem = options.scrollElem //滚动元素
|
var scrollElem = options.scrollElem // 滚动元素
|
||||||
,thisElem = options.thisElem //目标元素
|
var thisElem = options.thisElem // 目标元素
|
||||||
,vertical = options.type === 'y' //是否垂直方向
|
var vertical = options.type === 'y' // 是否垂直方向
|
||||||
,SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' //滚动方法
|
var SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' // 滚动方法
|
||||||
,OFFSET_NAME = vertical ? 'top' : 'left' //坐标方式
|
var OFFSET_NAME = vertical ? 'top' : 'left' // 坐标方式
|
||||||
,scrollValue = scrollElem[SCROLL_NAME]() //当前滚动距离
|
var scrollValue = scrollElem[SCROLL_NAME]() // 当前滚动距离
|
||||||
,size = scrollElem[vertical ? 'height' : 'width']() //滚动元素的尺寸
|
var size = scrollElem[vertical ? 'height' : 'width']() // 滚动元素的尺寸
|
||||||
,scrollOffet = scrollElem.offset()[OFFSET_NAME] //滚动元素所处位置
|
var scrollOffet = scrollElem.offset()[OFFSET_NAME] // 滚动元素所处位置
|
||||||
,thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffet //目标元素当前的所在位置
|
var thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffet // 目标元素当前的所在位置
|
||||||
,obj = {};
|
var obj = {};
|
||||||
|
|
||||||
//边界满足条件
|
// 边界满足条件
|
||||||
if(thisOffset > size - options.margin || thisOffset < options.margin){
|
if(thisOffset > size - options.margin || thisOffset < options.margin){
|
||||||
obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue
|
obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue
|
||||||
scrollElem.animate(obj, options.duration);
|
scrollElem.animate(obj, options.duration);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
//批量事件
|
// 批量事件
|
||||||
event: function(attr, obj, eventType){
|
event: function(attr, obj, eventType){
|
||||||
var _body = $('body');
|
var _body = $('body');
|
||||||
eventType = eventType || 'click';
|
eventType = eventType || 'click';
|
||||||
|
|
||||||
//记录事件回调集合
|
// 记录事件回调集合
|
||||||
obj = util.event[attr] = $.extend(true, util.event[attr], obj) || {};
|
obj = util.event[attr] = $.extend(true, util.event[attr], obj) || {};
|
||||||
|
|
||||||
//清除委托事件
|
// 清除委托事件
|
||||||
util.event.UTIL_EVENT_CALLBACK = util.event.UTIL_EVENT_CALLBACK || {};
|
util.event.UTIL_EVENT_CALLBACK = util.event.UTIL_EVENT_CALLBACK || {};
|
||||||
_body.off(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr])
|
_body.off(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr])
|
||||||
|
|
||||||
//绑定委托事件
|
// 绑定委托事件
|
||||||
util.event.UTIL_EVENT_CALLBACK[attr] = function(){
|
util.event.UTIL_EVENT_CALLBACK[attr] = function(){
|
||||||
var othis = $(this)
|
var othis = $(this);
|
||||||
,key = othis.attr(attr);
|
var key = othis.attr(attr);
|
||||||
(typeof obj[key] === 'function') && obj[key].call(this, othis);
|
(typeof obj[key] === 'function') && obj[key].call(this, othis);
|
||||||
};
|
};
|
||||||
|
|
||||||
//清除旧事件,绑定新事件
|
// 清除旧事件,绑定新事件
|
||||||
_body.on(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr]);
|
_body.on(eventType, '*['+ attr +']', util.event.UTIL_EVENT_CALLBACK[attr]);
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
|
@ -375,11 +411,6 @@ layui.define('jquery', function(exports){
|
||||||
|
|
||||||
util.on = util.event;
|
util.on = util.event;
|
||||||
|
|
||||||
// DOM 尺寸变化,该创意来自:http://benalman.com/projects/jquery-resize-plugin/
|
|
||||||
/*
|
|
||||||
!function(a,b,c){"$:nomunge";function l(){f=b[g](function(){d.each(function(){var b=a(this),c=b.width(),d=b.height(),e=a.data(this,i);(c!==e.w||d!==e.h)&&b.trigger(h,[e.w=c,e.h=d])}),l()},e[j])}var f,d=a([]),e=a.resize=a.extend(a.resize,{}),g="setTimeout",h="resize",i=h+"-special-event",j="delay",k="throttleWindow";e[j]=250,e[k]=!0,a.event.special[h]={setup:function(){if(!e[k]&&this[g])return!1;var b=a(this);d=d.add(b),a.data(this,i,{w:b.width(),h:b.height()}),1===d.length&&l()},teardown:function(){if(!e[k]&&this[g])return!1;var b=a(this);d=d.not(b),b.removeData(i),d.length||clearTimeout(f)},add:function(b){function f(b,e,f){var g=a(this),h=a.data(this,i)||{};h.w=e!==c?e:g.width(),h.h=f!==c?f:g.height(),d.apply(this,arguments)}if(!e[k]&&this[g])return!1;var d;return a.isFunction(b)?(d=b,f):(d=b.handler,b.handler=f,void 0)}}}($,window);
|
|
||||||
*/
|
|
||||||
|
|
||||||
// 输出接口
|
// 输出接口
|
||||||
exports('util', util);
|
exports('util', util);
|
||||||
});
|
});
|
Loading…
Reference in New Issue