Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
doc_wei
Skyeye
提交
947b1e59
S
Skyeye
项目概览
doc_wei
/
Skyeye
通知
1197
Star
154
Fork
127
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Skyeye
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
947b1e59
编写于
11月 22, 2018
作者:
doc_wei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加树表格
上级
9cef69a0
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
2255 addition
and
1 deletion
+2255
-1
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/dltable.js
.../webapp/assets/lib/layui/lay/modules/treetable/dltable.js
+2159
-0
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/treeGrid.css
...ebapp/assets/lib/layui/lay/modules/treetable/treeGrid.css
+3
-0
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/treeGrid.js
...webapp/assets/lib/layui/lay/modules/treetable/treeGrid.js
+24
-0
skyeye-web/src/main/webapp/assets/lib/layui/layui.js
skyeye-web/src/main/webapp/assets/lib/layui/layui.js
+2
-1
skyeye-web/src/main/webapp/js/tarea/tarea.js
skyeye-web/src/main/webapp/js/tarea/tarea.js
+28
-0
skyeye-web/src/main/webapp/tpl/tarea/tarea.html
skyeye-web/src/main/webapp/tpl/tarea/tarea.html
+39
-0
未找到文件。
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/dltable.js
0 → 100644
浏览文件 @
947b1e59
/**
@Name:dl table 操作
@Author:lrd
*/
layui
.
define
([
'
laytpl
'
,
'
laypage
'
,
'
layer
'
,
'
form
'
],
function
(
exports
){
"
use strict
"
;
var
$
=
layui
.
$
,
laytpl
=
layui
.
laytpl
,
laypage
=
layui
.
laypage
,
layer
=
layui
.
layer
,
form
=
layui
.
form
,
hint
=
layui
.
hint
()
,
device
=
layui
.
device
()
//外部接口
,
table
=
{
claObj
:{}
//全部的class对象map
,
obj
:{}
//额外保存的数据
,
config
:
{
//全局配置项
checkName
:
'
LAY_CHECKED
'
//是否选中状态的字段名
,
indexName
:
'
LAY_TABLE_INDEX
'
//下标索引名
}
/**
* 缓存数据
*
* 结构图示
* cache{} 缓存(对象)
* key['data']{} 全部数据缓存(对象)
* key[list][] 列表数据对象(数组)
* key[map]{} 列表数据Map对象(Map)
* key[treeList][] 树状结构的对象(数组)
* key['cla']{} 全部已初始化过的Calss对象类(注意渲染是异步执行)
* key['claIds'][] 全部已经吊用过初始化方法的表格类
* key[claObjs]{key[tableId]} 全部已经初始化好的cla对象
*
*/
,
cache
:
{
tableId
:{
data
:{
list
:[]
//列表数据
,
map
:{}
//列表数据以idField或唯一值作为key的Map数据
,
treeList
:[]
//树状数据
}
}
,
cla
:{
claIds
:{
tableId
:
true
}
,
claObjs
:{
tableId
:{}
}
}
,
selectcode
:{
//数据字典缓存
demokey
:[
{
key
:{
value
:
''
}
}
]
}
}
,
index
:
layui
.
table
?
(
layui
.
table
.
index
+
10000
)
:
0
/**
* 设置全局项
* @param options
* @return {table}
*/
,
set
:
function
(
options
){
var
that
=
this
;
that
.
config
=
$
.
extend
({},
that
.
config
,
options
);
return
that
;
}
/**
* 事件监听
* @param events
* @param callback
* @return {*}
*/
,
on
:
function
(
events
,
callback
){
return
layui
.
onevent
.
call
(
this
,
MOD_NAME
,
events
,
callback
);
}
,
getClass
:
function
(
tableId
)
{
return
table
.
cache
.
cla
.
claObjs
[
tableId
];;
}
,
pushClass
:
function
(
tableId
,
that
)
{
table
.
cache
.
cla
.
claObjs
[
tableId
]
=
that
;
}
,
isCalss
:
function
(
tableId
)
{
var
ids
=
this
.
cache
.
cla
.
claIds
||
{};
return
ids
.
hasOwnProperty
(
tableId
)
||
false
;
}
,
isClassYes
:
function
(
tableId
)
{
var
ids
=
this
.
cache
.
cla
.
claIds
||
{};
return
ids
[
tableId
]
||
false
;
}
,
pushClassIds
:
function
(
tableId
,
is
)
{
this
.
cache
.
cla
.
claIds
[
tableId
]
=
is
;
}
,
setObj
:
function
(
tableId
,
key
,
o
)
{
if
(
!
this
.
obj
[
tableId
])
this
.
obj
[
tableId
]
=
{};
this
.
obj
[
tableId
][
key
]
=
o
;
}
,
getObj
:
function
(
tableId
,
key
)
{
return
this
.
obj
[
tableId
]?
this
.
obj
[
tableId
][
key
]:
null
;
}
/**
* 获取列表数据
*/
,
getDataList
:
function
(
tableId
)
{
if
(
table
.
cache
[
tableId
]){
return
table
.
cache
[
tableId
].
data
.
list
;
}
return
[];
}
/**
* 设置列表数据
*/
,
setDataList
:
function
(
tableId
,
list
)
{
if
(
!
table
.
cache
[
tableId
])
table
.
cache
[
tableId
]
=
{};
if
(
!
table
.
cache
[
tableId
].
data
)
table
.
cache
[
tableId
].
data
=
{};
if
(
!
table
.
cache
[
tableId
].
data
.
list
)
table
.
cache
[
tableId
].
data
.
list
=
[];
table
.
cache
[
tableId
].
data
.
list
=
list
;
}
/**
* 获取列表数据
*/
,
getDataMap
:
function
(
tableId
)
{
if
(
table
.
cache
[
tableId
]){
return
table
.
cache
[
tableId
].
data
.
map
;
}
return
{};
}
/**
* 设置列表数据
*/
,
setDataMap
:
function
(
tableId
,
map
)
{
if
(
!
table
.
cache
[
tableId
])
table
.
cache
[
tableId
]
=
{};
if
(
!
table
.
cache
[
tableId
].
data
)
table
.
cache
[
tableId
].
data
=
{};
if
(
!
table
.
cache
[
tableId
].
data
.
map
)
table
.
cache
[
tableId
].
data
.
map
=
{};
table
.
cache
[
tableId
].
data
.
map
=
map
;
}
/**
* 获取树状数据
*/
,
getDataTreeList
:
function
(
tableId
)
{
if
(
table
.
cache
[
tableId
]){
return
table
.
cache
[
tableId
].
data
.
treeList
;
}
return
[];
}
/**
* 设置树状数据
*/
,
setDataTreeList
:
function
(
tableId
,
treeList
)
{
if
(
!
table
.
cache
[
tableId
])
table
.
cache
[
tableId
]
=
{};
if
(
!
table
.
cache
[
tableId
].
data
)
table
.
cache
[
tableId
].
data
=
{};
if
(
!
table
.
cache
[
tableId
].
data
.
treeList
)
table
.
cache
[
tableId
].
data
.
treeList
=
{};
table
.
cache
[
tableId
].
data
.
treeList
=
treeList
;
}
/**
* 初始化
* @param filter
* @param settings
* @return {table}
*/
,
init
:
function
(
filter
,
settings
)
{
settings
=
settings
||
{};
var
that
=
this
,
elemTable
=
filter
?
$
(
'
table[lay-filter="
'
+
filter
+
'
"]
'
)
:
$
(
ELEM
+
'
[lay-data]
'
)
,
errorTips
=
'
Table element property lay-data configuration item has a syntax error:
'
;
//遍历数据表格
elemTable
.
each
(
function
(){
var
othis
=
$
(
this
),
tableData
=
othis
.
attr
(
'
lay-data
'
);
try
{
tableData
=
new
Function
(
'
return
'
+
tableData
)();
}
catch
(
e
){
hint
.
error
(
errorTips
+
tableData
)
}
var
cols
=
[],
options
=
$
.
extend
({
elem
:
this
,
cols
:
[]
,
data
:
[]
,
skin
:
othis
.
attr
(
'
lay-skin
'
)
//风格
,
size
:
othis
.
attr
(
'
lay-size
'
)
//尺寸
,
even
:
typeof
othis
.
attr
(
'
lay-even
'
)
===
'
string
'
//偶数行背景
},
table
.
config
,
settings
,
tableData
);
filter
&&
othis
.
hide
();
//获取表头数据
othis
.
find
(
'
thead>tr
'
).
each
(
function
(
i
){
options
.
cols
[
i
]
=
[];
$
(
this
).
children
().
each
(
function
(
ii
){
var
th
=
$
(
this
),
itemData
=
th
.
attr
(
'
lay-data
'
);
try
{
itemData
=
new
Function
(
'
return
'
+
itemData
)();
}
catch
(
e
){
return
hint
.
error
(
errorTips
+
itemData
)
}
var
row
=
$
.
extend
({
title
:
th
.
text
()
,
colspan
:
th
.
attr
(
'
colspan
'
)
||
0
//列单元格
,
rowspan
:
th
.
attr
(
'
rowspan
'
)
||
0
//行单元格
},
itemData
);
if
(
row
.
colspan
<
2
)
cols
.
push
(
row
);
options
.
cols
[
i
].
push
(
row
);
});
});
//获取表体数据
othis
.
find
(
'
tbody>tr
'
).
each
(
function
(
i1
){
var
tr
=
$
(
this
),
row
=
{};
//如果定义了字段名
tr
.
children
(
'
td
'
).
each
(
function
(
i2
,
item2
){
var
td
=
$
(
this
)
,
field
=
td
.
data
(
'
field
'
);
if
(
field
){
return
row
[
field
]
=
td
.
html
();
}
});
//如果未定义字段名
layui
.
each
(
cols
,
function
(
i3
,
item3
){
var
td
=
tr
.
children
(
'
td
'
).
eq
(
i3
);
row
[
item3
.
field
]
=
td
.
html
();
});
options
.
data
[
i1
]
=
row
;
});
table
.
render
(
options
);
});
return
that
;
}
/**
* 渲染入口方法(核心入口)
*/
,
render
:
function
(
options
)
{
table
.
pushClassIds
(
options
.
id
);
var
inst
=
new
Class
(
options
);
return
thisTable
.
call
(
inst
);
}
/**
* 对应的表格加载完成后执行
* @param tableId
* @param fn
*/
,
ready
:
function
(
tableId
,
fn
)
{
var
is
=
false
;
var
myDate
=
new
Date
();
function
isReady
()
{
if
(
tableId
){
var
that
=
table
.
getClass
(
tableId
);
if
(
that
&&
that
.
hasOwnProperty
(
'
layBody
'
)){
fn
(
that
);
is
=
true
;
}
else
{
var
myDate2
=
new
Date
();
var
i
=
myDate2
.
getTime
()
-
myDate
.
getTime
();
if
(
i
<=
(
1000
*
10
)
&&!
is
){
//大于10秒退出
setTimeout
(
isReady
,
50
);
}
}
}
}
if
(
tableId
&&
fn
){
setTimeout
(
isReady
,
50
);
}
}
/**
* 获取表格选中记录
* @param tableId
* @return {{data: Array, isAll: boolean}}
*/
,
checkStatus
:
function
(
tableId
)
{
var
nums
=
0
,
invalidNum
=
0
,
arr
=
[]
,
data
=
table
.
getDataList
(
tableId
)
||
[];
//计算全选个数
layui
.
each
(
data
,
function
(
i
,
item
){
if
(
item
.
constructor
===
Array
){
invalidNum
++
;
//无效数据,或已删除的
return
;
}
if
(
item
[
table
.
config
.
checkName
]){
nums
++
;
arr
.
push
(
table
.
clearCacheKey
(
item
));
}
});
return
{
data
:
arr
//选中的数据
,
isAll
:
data
.
length
?
(
nums
===
(
data
.
length
-
invalidNum
))
:
false
//是否全选
};
}
/**
* 设置表格复选状态
* @param tableId
* @param value 此值存在时为设置操作
* @returns {*}
*/
,
setCheckStatus
:
function
(
tableId
,
fildName
,
ids
){
var
retObj
=
null
;
var
that
=
table
.
getClass
(
tableId
)
,
invalidNum
=
0
,
arr
=
[]
,
data
=
table
.
getDataList
(
tableId
)
||
[]
,
childs
=
that
.
layBody
.
find
(
'
input[name="layTableCheckbox"]
'
)
//复选框
;
if
(
fildName
&&
ids
){
//设置选中
var
idsarr
=
ids
.
split
(
'
,
'
);
idsarr
.
forEach
(
function
(
o
)
{
// console.log(o);
var
temo
=
null
;
data
.
forEach
(
function
(
e
)
{
var
b1
=
e
[
fildName
]
+
""
;
var
b2
=
o
+
""
;
if
(
b1
==
b2
){
temo
=
e
;
return
;
};
});
if
(
temo
){
var
v
=
temo
[
table
.
config
.
indexName
];
that
.
layBody
.
find
(
'
input[name="layTableCheckbox"][value="
'
+
v
+
'
"]
'
).
prop
(
"
checked
"
,
true
);
that
.
setCheckData
(
v
,
true
);
}
});
that
.
syncCheckAll
();
that
.
renderForm
(
'
checkbox
'
);
}
return
retObj
;
}
/**
* 表格单选状态
* @param tableId
* @param value 此值存在时为设置操作
* @returns {*}
*/
,
radioStatus
:
function
(
tableId
)
{
var
retObj
=
null
;
var
nums
=
0
,
invalidNum
=
0
,
arr
=
[]
,
data
=
table
.
getDataList
(
tableId
)
||
[];
var
v
=
$
(
"
input[name='
"
+
TABLE_RADIO_ID
+
tableId
+
"
']:checked
"
).
val
();
v
=
parseInt
(
v
);
data
.
forEach
(
function
(
e
)
{
if
(
e
[
table
.
config
.
indexName
]
==
v
){
retObj
=
e
;
return
;
};
});
return
retObj
;
}
/**
* 设置表格单选状态
* @param tableId
* @param value 此值存在时为设置操作
* @returns {*}
*/
,
setRadioStatus
:
function
(
tableId
,
fildName
,
value
)
{
var
retObj
=
null
;
var
nums
=
0
,
invalidNum
=
0
,
arr
=
[]
,
data
=
table
.
getDataList
(
tableId
)
||
[];
if
(
fildName
&&
value
){
//设置选中
data
.
forEach
(
function
(
e
)
{
var
b1
=
e
[
fildName
]
+
""
;
var
b2
=
value
+
""
;
if
(
b1
==
b2
){
retObj
=
e
;
return
;
};
});
if
(
retObj
){
var
v
=
retObj
[
table
.
config
.
indexName
];
$
(
"
input:radio[name='
"
+
TABLE_RADIO_ID
+
tableId
+
"
'][value='
"
+
v
+
"
']
"
).
prop
(
"
checked
"
,
true
);
form
.
render
(
'
radio
'
);
}
}
return
retObj
;
}
/**
* 清除临时Key
* @param data
* @return {*}
*/
,
clearCacheKey
:
function
(
data
)
{
data
=
$
.
extend
({},
data
);
delete
data
[
table
.
config
.
checkName
];
delete
data
[
table
.
config
.
indexName
];
return
data
;
}
/**
* 刷新数据
* @param id
* @param options
* @return {*}
*/
,
query
:
function
(
tableId
,
options
)
{
var
that
=
table
.
getClass
(
tableId
);
that
.
renderTdCss
();
that
.
pullData
(
that
.
page
,
that
.
loading
());
}
/**
* 此方法为整体重新渲染(重量级刷新方法)
* @param id
* @param options
*/
,
reload
:
function
(
tableId
,
options
)
{
var
config
=
thisTable
.
config
[
tableId
];
options
=
options
||
{};
if
(
!
config
)
return
hint
.
error
(
'
The ID option was not found in the table instance
'
);
if
(
options
.
data
&&
options
.
data
.
constructor
===
Array
)
delete
config
.
data
;
return
table
.
render
(
$
.
extend
(
true
,
{},
config
,
options
));
}
/**
* 添加一行或多行数据
* @param tableId 表格id
* @param index 在第几个位置插入(从0开始)
* @param data 数据
* @returns {*}
*/
,
addRow
:
function
(
tableId
,
index
,
data
)
{
var
that
=
table
.
getClass
(
tableId
)
,
options
=
that
.
config
,
invalidNum
=
0
,
arr
=
[]
,
list
=
table
.
getDataList
(
tableId
)
||
[];
//插入到父节点后面
list
.
splice
(
index
,
0
,
data
);
//更新缓存
table
.
restNumbers
(
list
);
//重置下标
that
.
resetData
(
list
);
//如果是树状则处理数据
if
(
options
.
isTree
)
{
//处理父级
var
uo
=
that
.
treeFindUpData
(
data
);
if
(
uo
)
{
that
.
treeNodeOpen
(
uo
,
true
);
//展开节点
that
.
renderTreeConvertShowName
(
uo
);
}
}
//生成html
var
tds
=
that
.
renderTr
(
data
,
data
[
table
.
config
.
indexName
]);
var
trs
=
'
<tr data-index="
'
+
data
[
table
.
config
.
indexName
]
+
'
"
'
+
that
.
renderTrUpids
(
data
)
+
'
>
'
+
tds
.
join
(
''
)
+
'
</tr>
'
;
if
(
index
==
0
){
//在第一个位置插入
var
tbody
=
that
.
layBody
.
find
(
'
table tbody
'
);
$
(
tbody
).
prepend
(
trs
);
that
.
layBody
.
find
(
"
.layui-none
"
).
remove
();
}
else
{
var
o
=
that
.
layBody
.
find
(
'
[data-index=
'
+
(
index
-
1
)
+
'
]
'
);
//父节点dom树
$
(
o
).
after
(
trs
);
}
that
.
renderPage
(
that
.
config
.
page
.
count
+
1
);
//分页渲染
that
.
restNumbers
();
}
/**
* 删除一行或多行数据
* (如果是树状则删除自己和子节点)
* @param tableId
* @param data(1、数组;2、对象)
*/
,
delRow
:
function
(
tableId
,
data
)
{
//1、页面清除 2、缓存清除
var
that
=
table
.
getClass
(
tableId
)
,
options
=
that
.
config
,
list
=
table
.
getDataList
(
tableId
);
var
sonList
=
[];
//需要删除的数据
var
delIds
=
{};
//需要删除的数据map
var
delDatas
=
[];
if
(
!
that
||!
data
)
return
;
if
(
table
.
kit
.
isArray
(
data
)){
//是数组,删除多个
delDatas
=
data
;
}
else
{
delDatas
[
0
]
=
data
;
}
sonList
=
options
.
isTree
?
table
.
treeFindSonList
(
that
.
config
.
id
,
delDatas
):
delDatas
;
//页面元素处理
sonList
.
forEach
(
function
(
temo
)
{
var
index
=
temo
[
table
.
config
.
indexName
];
delIds
[
index
]
=
index
;
//设置代删除的id集合
var
tr
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
index
+
'
"]
'
);
tr
.
remove
();
});
//数据处理
that
.
restNumbers
();
var
newList
=
[];
//重构一个新的数组
for
(
var
i
=
0
,
len
=
list
.
length
;
i
<
len
;
i
++
)
{
var
isP
=
true
;
var
temo1
=
null
;
sonList
.
forEach
(
function
(
temo
)
{
if
(
temo
[
table
.
config
.
indexName
]
===
list
[
i
][
table
.
config
.
indexName
])
{
isP
=
false
;
}
});
if
(
isP
){
newList
.
push
(
list
[
i
]);
}
}
table
.
restNumbers
(
newList
);
that
.
resetData
(
newList
);
//更新缓存数据
if
(
options
.
page
)
that
.
renderPage
(
that
.
config
.
page
.
count
-
Object
.
keys
(
delIds
).
length
);
//分页渲染
}
,
restNumbers
:
function
(
list
)
{
if
(
!
list
)
return
;
var
i
=
0
;
list
.
forEach
(
function
(
o
)
{
o
[
table
.
config
.
indexName
]
=
i
;
i
++
;
});
}
/**
* 获取全部需要子节点对象集合
* @param data(数组或对象)
*/
,
treeFindSonList
:
function
(
tableId
,
data
)
{
var
that
=
table
.
getClass
(
tableId
);
if
(
!
that
||!
data
)
return
[];
var
delDatas
=
[];
var
sonList
=
[];
//需要删除的数据
var
delIds
=
{};
//需要删除的数据map
if
(
table
.
kit
.
isArray
(
data
)){
//是数组,删除多个
delDatas
=
data
;
}
else
{
delDatas
[
0
]
=
data
;
}
delDatas
.
forEach
(
function
(
temo
)
{
if
(
temo
.
children
.
length
>
0
){
var
temSonList
=
that
.
treeFindSonData
(
temo
);
temSonList
.
forEach
(
function
(
temii
)
{
if
(
!
delIds
[
temii
[
table
.
config
.
indexName
]]){
sonList
.
push
(
temii
);
delIds
[
temii
[
table
.
config
.
indexName
]]
=
temii
[
table
.
config
.
indexName
];
}
});
}
sonList
.
push
(
temo
);
delIds
[
temo
[
table
.
config
.
indexName
]]
=
temo
[
table
.
config
.
indexName
];
});
return
sonList
;
}
/**
* 获取全部需要子节点id集合
* @param data(数组或对象)
*/
,
treeFindSonIds
:
function
(
tableId
,
data
)
{
var
delIds
=
[];
var
sonList
=
table
.
treeFindSonList
(
tableId
,
data
);
sonList
.
forEach
(
function
(
temo
)
{
delIds
.
push
([
table
.
config
.
indexName
]);
});
return
delIds
;
}
/**
* 获取全部的id字段集合
* @param tableId
* @param data
* @returns {Array}
*/
,
treeFindSonIdFields
:
function
(
tableId
,
data
)
{
var
idField
=
[];
var
that
=
table
.
getClass
(
tableId
);
var
sonList
=
table
.
treeFindSonList
(
tableId
,
data
);
sonList
.
forEach
(
function
(
temo
)
{
idField
.
push
(
temo
[
that
.
config
.
idField
]);
});
return
idField
;
}
/**
* 工具方法对象
*/
,
kit
:{
isArray
:
function
(
o
)
{
return
Object
.
prototype
.
toString
.
call
(
o
)
===
'
[object Array]
'
;
}
}
}
//操作当前实例
,
thisTable
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
id
=
options
.
id
;
id
&&
(
thisTable
.
config
[
id
]
=
options
);
return
{
reload
:
function
(
options
){
that
.
reload
.
call
(
that
,
options
);
}
,
config
:
options
}
}
//字符常量
,
MOD_NAME
=
'
dltable
'
,
ELEM
=
'
.layui-table
'
,
THIS
=
'
layui-this
'
,
SHOW
=
'
layui-show
'
,
HIDE
=
'
layui-hide
'
,
DISABLED
=
'
layui-disabled
'
,
NONE
=
'
layui-none
'
,
ELEM_VIEW
=
'
layui-table-view
'
,
ELEM_HEADER
=
'
.layui-table-header
'
,
ELEM_BODY
=
'
.layui-table-body
'
,
ELEM_MAIN
=
'
.layui-table-main
'
,
ELEM_FIXED
=
'
.layui-table-fixed
'
,
ELEM_FIXL
=
'
.layui-table-fixed-l
'
,
ELEM_FIXR
=
'
.layui-table-fixed-r
'
,
ELEM_TOOL
=
'
.layui-table-tool
'
,
ELEM_PAGE
=
'
.layui-table-page
'
,
ELEM_SORT
=
'
.layui-table-sort
'
,
ELEM_EDIT
=
'
layui-table-edit
'
,
ELEM_HOVER
=
'
layui-table-hover
'
,
TABLE_RADIO_ID
=
'
table_radio_
'
,
ELEM_FILTER
=
'
.layui-table-filter
'
,
TREE_ID
=
'
treeId
'
,
TREE_UPID
=
'
treeUpId
'
,
TREE_SHOW_NAME
=
'
treeShowName
'
,
TREE_KEY_MAP
=
'
tree_key_map
'
//thead区域模板
,
TPL_HEADER
=
function
(
options
){
var
rowCols
=
'
{{#if(item2.colspan){}} colspan="{{item2.colspan}}"{{#} if(item2.rowspan){}} rowspan="{{item2.rowspan}}"{{#}}}
'
;
options
=
options
||
{};
return
[
'
<table cellspacing="0" cellpadding="0" border="0" class="layui-table"
'
,
'
{{# if(d.data.skin){ }}lay-skin="{{d.data.skin}}"{{# } }} {{# if(d.data.size){ }}lay-size="{{d.data.size}}"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>
'
,
'
<thead>
'
,
'
{{# layui.each(d.data.cols, function(i1, item1){ }}
'
,
'
<tr>
'
,
'
{{# layui.each(item1, function(i2, item2){ }}
'
,
'
{{# if(item2.fixed && item2.fixed !== "right"){ left = true; } }}
'
,
'
{{# if(item2.fixed === "right"){ right = true; } }}
'
,
function
(){
if
(
options
.
fixed
&&
options
.
fixed
!==
'
right
'
){
return
'
{{# if(item2.fixed && item2.fixed !== "right"){ }}
'
;
}
if
(
options
.
fixed
===
'
right
'
){
return
'
{{# if(item2.fixed === "right"){ }}
'
;
}
return
''
;
}()
,
'
<th data-field="{{ item2.field||i2 }}" {{# if(item2.minWidth){ }}data-minwidth="{{item2.minWidth}}"{{# } }}
'
+
rowCols
+
'
{{# if(item2.unresize){ }}data-unresize="true"{{# } }}>
'
,
'
<div class="layui-table-cell laytable-cell-
'
,
'
{{# if(item2.colspan > 1){ }}
'
,
'
group
'
,
'
{{# } else { }}
'
,
'
{{d.index}}-{{item2.field || i2}}
'
,
'
{{# if(item2.type !== "normal"){ }}
'
,
'
laytable-cell-{{ item2.type }}
'
,
'
{{# } }}
'
,
'
{{# } }}
'
,
'
" {{#if(item2.align){}}align="{{item2.align}}"{{#}}}>
'
,
'
{{# if(item2.type === "checkbox"){ }}
'
//复选框
,
'
<input type="checkbox" name="layTableCheckbox" lay-skin="primary" lay-filter="layTableAllChoose" {{# if(item2[d.data.checkName]){ }}checked{{# }; }}>
'
,
'
{{# } else { }}
'
,
'
<span>{{item2.title||""}}</span>
'
,
'
{{# if(!(item2.colspan > 1) && item2.sort){ }}
'
,
'
<span class="layui-table-sort layui-inline"><i class="layui-edge layui-table-sort-asc"></i><i class="layui-edge layui-table-sort-desc"></i></span>
'
,
'
{{# } }}
'
,
'
{{# } }}
'
,
'
</div>
'
,
'
</th>
'
,(
options
.
fixed
?
'
{{# }; }}
'
:
''
)
,
'
{{# }); }}
'
,
'
</tr>
'
,
'
{{# }); }}
'
,
'
</thead>
'
,
'
</table>
'
].
join
(
''
);
}
/**
* 行内过滤区域
*/
,
TPL_FILTER
=
function
(
options
){
}
//tbody区域模板
,
TPL_BODY
=
[
'
<table cellspacing="0" cellpadding="0" border="0" class="layui-table"
'
,
'
{{# if(d.data.skin){ }}lay-skin="{{d.data.skin}}"{{# } }} {{# if(d.data.size){ }}lay-size="{{d.data.size}}"{{# } }} {{# if(d.data.even){ }}lay-even{{# } }}>
'
,
'
<tbody></tbody>
'
,
'
</table>
'
].
join
(
''
)
//主模板
,
TPL_MAIN
=
[
'
<div class="layui-form layui-border-box {{d.VIEW_CLASS}}" lay-filter="LAY-table-{{d.index}}" style="{{# if(d.data.width){ }}width:{{d.data.width}}px;{{# } }} {{# if(d.data.height){ }}height:{{d.data.height}}px;{{# } }}">
'
,
'
{{# if(d.data.toolbar){ }}
'
,
'
<div class="layui-table-tool"></div>
'
,
'
{{# } }}
'
,
'
<div class="layui-table-box">
'
,
'
{{# var left, right; }}
'
,
'
<div class="layui-table-header">
'
,
TPL_HEADER
()
,
'
</div>
'
,
'
<div class="layui-table-filter">
'
,
TPL_FILTER
()
,
'
</div>
'
,
'
<div class="layui-table-body layui-table-main">
'
,
TPL_BODY
,
'
</div>
'
,
'
{{# if(left){ }}
'
,
'
<div class="layui-table-fixed layui-table-fixed-l">
'
,
'
<div class="layui-table-header">
'
,
TPL_HEADER
({
fixed
:
true
})
,
'
</div>
'
,
'
<div class="layui-table-body">
'
,
TPL_BODY
,
'
</div>
'
,
'
</div>
'
,
'
{{# }; }}
'
,
'
{{# if(right){ }}
'
,
'
<div class="layui-table-fixed layui-table-fixed-r">
'
,
'
<div class="layui-table-header">
'
,
TPL_HEADER
({
fixed
:
'
right
'
})
,
'
<div class="layui-table-mend"></div>
'
,
'
</div>
'
,
'
<div class="layui-table-body">
'
,
TPL_BODY
,
'
</div>
'
,
'
</div>
'
,
'
{{# }; }}
'
,
'
</div>
'
,
'
{{# if(d.data.page){ }}
'
,
'
<div class="layui-table-page">
'
,
'
<div id="layui-table-page{{d.index}}"></div>
'
,
'
</div>
'
,
'
{{# } }}
'
/*,'<style>'
,'{{# layui.each(d.data.cols, function(i1, item1){'
,'layui.each(item1, function(i2, item2){ }}'
,'.laytable-cell-{{d.index}}-{{item2.field||i2}}{ '
,'{{# if(item2.width){ }}'
,'width: {{item2.width}}px;'
,'{{# } }}'
,' }'
,'{{# });'
,'}); }}'
,'</style>'*/
,
'
</div>
'
].
join
(
''
)
,
_WIN
=
$
(
window
)
,
_DOC
=
$
(
document
)
//构造器
,
Class
=
function
(
options
){
var
that
=
this
;
that
.
index
=
++
table
.
index
;
that
.
config
=
$
.
extend
({},
that
.
config
,
table
.
config
,
options
);
that
.
render
();
table
.
pushClass
(
options
.
id
,
that
);
};
//默认配置
Class
.
prototype
.
config
=
{
limit
:
10
//每页显示的数量
,
loading
:
true
//请求数据时,是否显示loading
,
cellMinWidth
:
60
//所有单元格默认最小宽度
,
text
:
{
none
:
'
无数据
'
}
,
isFilter
:
false
//是否开启行内过滤
,
method
:
'
post
'
//默认以post方式请求后台
};
//表格渲染
Class
.
prototype
.
render
=
function
(){
var
that
=
this
,
options
=
that
.
config
;
options
.
elem
=
$
(
options
.
elem
);
options
.
where
=
options
.
where
||
{};
options
.
id
=
options
.
id
||
options
.
elem
.
attr
(
'
id
'
);
//请求参数的自定义格式
options
.
request
=
$
.
extend
({
pageName
:
'
page
'
,
limitName
:
'
limit
'
},
options
.
request
)
//响应数据的自定义格式
options
.
response
=
$
.
extend
({
statusName
:
'
code
'
,
statusCode
:
0
,
msgName
:
'
msg
'
,
dataName
:
'
data
'
,
countName
:
'
count
'
},
options
.
response
);
//如果 page 传入 laypage 对象
if
(
typeof
options
.
page
===
'
object
'
){
options
.
limit
=
options
.
page
.
limit
||
options
.
limit
;
options
.
limits
=
options
.
page
.
limits
||
options
.
limits
;
that
.
page
=
options
.
page
.
curr
=
options
.
page
.
curr
||
1
;
delete
options
.
page
.
elem
;
delete
options
.
page
.
jump
;
}
if
(
!
options
.
elem
[
0
])
return
that
;
that
.
setArea
();
//动态分配列宽高
//开始插入替代元素
var
othis
=
options
.
elem
,
hasRender
=
othis
.
next
(
'
.
'
+
ELEM_VIEW
)
//主容器
,
reElem
=
that
.
elem
=
$
(
laytpl
(
TPL_MAIN
).
render
({
VIEW_CLASS
:
ELEM_VIEW
,
data
:
options
,
index
:
that
.
index
//索引
}));
options
.
index
=
that
.
index
;
//生成替代元素
hasRender
[
0
]
&&
hasRender
.
remove
();
//如果已经渲染,则Rerender
othis
.
after
(
reElem
);
that
.
renderTdCss
();
//各级容器
that
.
layHeader
=
reElem
.
find
(
ELEM_HEADER
);
//表头
that
.
layMain
=
reElem
.
find
(
ELEM_MAIN
);
//内容区域
that
.
layBody
=
reElem
.
find
(
ELEM_BODY
);
//内容区域
that
.
layFixed
=
reElem
.
find
(
ELEM_FIXED
);
//浮动区域
that
.
layFixLeft
=
reElem
.
find
(
ELEM_FIXL
);
//左浮动
that
.
layFixRight
=
reElem
.
find
(
ELEM_FIXR
);
//有浮动
that
.
layTool
=
reElem
.
find
(
ELEM_TOOL
);
//工具栏区域
that
.
layPage
=
reElem
.
find
(
ELEM_PAGE
);
//分页区域
that
.
layFilter
=
reElem
.
find
(
ELEM_FILTER
);
//行内过滤条件区域
that
.
layTool
.
html
(
laytpl
(
$
(
options
.
toolbar
).
html
()
||
''
).
render
(
options
)
);
if
(
options
.
height
)
that
.
fullSize
();
//设置body区域高度
//如果多级表头,则填补表头高度
if
(
options
.
cols
.
length
>
1
){
var
th
=
that
.
layFixed
.
find
(
ELEM_HEADER
).
find
(
'
th
'
);
th
.
height
(
that
.
layHeader
.
height
()
-
1
-
parseFloat
(
th
.
css
(
'
padding-top
'
))
-
parseFloat
(
th
.
css
(
'
padding-bottom
'
)));
}
//渲染过滤区域
if
(
options
.
isFilter
){
that
.
layFilter
.
html
(
that
.
renderFilter
()
);
}
//请求数据
that
.
pullData
(
that
.
page
);
that
.
events
();
};
//根据列类型,定制化参数
Class
.
prototype
.
initOpts
=
function
(
item
){
var
that
=
this
,
options
=
that
.
config
,
initWidth
=
{
checkbox
:
48
,
space
:
15
,
numbers
:
40
};
//让 type 参数兼容旧版本
if
(
item
.
checkbox
)
item
.
type
=
"
checkbox
"
;
if
(
item
.
space
)
item
.
type
=
"
space
"
;
if
(
!
item
.
type
)
item
.
type
=
"
normal
"
;
if
(
item
.
type
!==
"
normal
"
){
item
.
unresize
=
true
;
item
.
width
=
item
.
width
||
initWidth
[
item
.
type
];
}
if
(
options
.
isFilter
){
//开启行内过滤
if
(
item
.
isFilter
!=
false
){
item
.
isFilter
=
true
;
}
}
};
//动态分配列宽高
Class
.
prototype
.
setArea
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
colNums
=
0
//列个数
,
autoColNums
=
0
//自动列宽的列个数
,
autoWidth
=
0
//自动列分配的宽度
,
countWidth
=
0
//所有列总宽度和
,
cntrWidth
=
options
.
width
||
function
(){
//获取容器宽度
//如果父元素宽度为0(一般为隐藏元素),则继续查找上层元素,直到找到真实宽度为止
var
getWidth
=
function
(
parent
){
var
width
,
isNone
;
parent
=
parent
||
options
.
elem
.
parent
()
width
=
parent
.
width
();
try
{
isNone
=
parent
.
css
(
'
display
'
)
===
'
none
'
;
}
catch
(
e
){}
if
(
parent
[
0
]
&&
(
!
width
||
isNone
))
return
getWidth
(
parent
.
parent
());
return
width
;
};
return
getWidth
();
}();
//统计列个数
that
.
eachCols
(
function
(){
colNums
++
;
});
//减去边框差
cntrWidth
=
cntrWidth
-
function
(){
return
(
options
.
skin
===
'
line
'
||
options
.
skin
===
'
nob
'
)
?
2
:
colNums
+
1
;
}();
//遍历所有列
layui
.
each
(
options
.
cols
,
function
(
i1
,
item1
){
layui
.
each
(
item1
,
function
(
i2
,
item2
){
var
width
;
if
(
!
item2
){
item1
.
splice
(
i2
,
1
);
return
;
}
that
.
initOpts
(
item2
);
width
=
item2
.
width
||
0
;
if
(
item2
.
colspan
>
1
)
return
;
if
(
/
\d
+%$/
.
test
(
width
)){
item2
.
width
=
width
=
Math
.
floor
((
parseFloat
(
width
)
/
100
)
*
cntrWidth
);
}
else
if
(
item2
.
_is_width_dev
||!
width
){
//列宽未填写
item2
.
_is_width_dev
=
true
;
//采用默认宽度的列
item2
.
width
=
width
=
0
;
autoColNums
++
;
}
countWidth
=
countWidth
+
width
;
});
});
that
.
autoColNums
=
autoColNums
;
//记录自动列数
//如果未填充满,则将剩余宽度平分。否则,给未设定宽度的列赋值一个默认宽
(
cntrWidth
>
countWidth
&&
autoColNums
)
&&
(
autoWidth
=
(
cntrWidth
-
countWidth
)
/
autoColNums
);
layui
.
each
(
options
.
cols
,
function
(
i1
,
item1
){
layui
.
each
(
item1
,
function
(
i2
,
item2
){
var
minWidth
=
item2
.
minWidth
||
options
.
cellMinWidth
;
if
(
item2
.
colspan
>
1
)
return
;
if
(
item2
.
width
===
0
){
item2
.
width
=
Math
.
floor
(
autoWidth
>=
minWidth
?
autoWidth
:
minWidth
);
//不能低于设定的最小宽度
}
});
});
//高度铺满:full-差距值
var
th
=
that
.
getParentDivHeight
(
options
.
id
);
that
.
fullHeightGap
=
0
;
if
(
options
.
height
){
if
(
/^full-
\d
+$/
.
test
(
options
.
height
)){
that
.
fullHeightGap
=
options
.
height
.
split
(
'
-
'
)[
1
];
}
}
options
.
height
=
th
-
that
.
fullHeightGap
;
layui
.
each
(
options
.
cols
,
function
(
i1
,
item1
){
layui
.
each
(
item1
,
function
(
i2
,
item2
){
})
});
};
/**
* 表格获取父容器高度
* @param tableId
*/
Class
.
prototype
.
getParentDivHeight
=
function
(
tableId
){
var
th
=
$
(
"
#
"
+
tableId
).
parent
().
height
();
return
th
;
};
//表格重载
Class
.
prototype
.
reload
=
function
(
options
){
var
that
=
this
;
if
(
that
.
config
.
data
&&
that
.
config
.
data
.
constructor
===
Array
)
delete
that
.
config
.
data
;
that
.
config
=
$
.
extend
({},
that
.
config
,
options
);
//获取行内过滤的值
that
.
render
();
};
//页码
Class
.
prototype
.
page
=
1
;
/**
* 重置下标(插入删除等操作)
* 1、data-index中的下标
* 2、tr中data的值
* 3、下标字段的值
* @param list
*/
Class
.
prototype
.
restNumbers
=
function
(){
var
that
=
this
,
options
=
that
.
config
;
var
trs
=
that
.
layBody
.
find
(
'
table tbody tr
'
);
var
i
=
0
;
trs
.
each
(
function
(
o
)
{
$
(
this
).
attr
(
"
data-index
"
,
i
);
$
(
this
).
find
(
"
.laytable-cell-numbers p
"
).
text
(
i
+
1
);
$
(
this
).
data
(
'
index
'
,
i
);
i
++
;
});
}
/**
* 重置当前表格的数据(1、普通列表;2树状表格)
* 将列表数据转成树形结构和符合table展示的列表
* @param list 列表数据
* @param field_Id 树形结构主键字段
* @param field_upId 树形结构上级字段
* @returns {Array} [0]表格列表 [1]树形结构
*/
Class
.
prototype
.
resetData
=
function
(
list
)
{
var
that
=
this
,
options
=
that
.
config
;
var
datas
=
[];
var
treeList
=
[];
var
tableList
=
[];
var
map
=
{};
//列表map,fieldId为key
datas
.
push
(
tableList
);
//table结构
datas
.
push
(
treeList
)
//tree树结构
datas
.
push
(
map
)
//data数据 map结构
if
(
list
==
null
||
list
.
length
<=
0
)
return
datas
;
//设置默认参数
for
(
var
i
=
0
;
i
<
list
.
length
;
i
++
)
{
var
n
=
list
[
i
];
if
(
options
.
isTree
){
if
(
!
n
.
hasOwnProperty
(
"
is_open
"
)){
//如果不存在该属性则默认为true
n
.
is_open
=
true
;
}
if
(
!
n
.
hasOwnProperty
(
"
is_show
"
)){
//如果不存在该属性则默认为true
n
.
is_show
=
true
;
}
}
}
if
(
options
.
isTree
){
//树状
var
field_Id
=
options
[
TREE_ID
];
var
field_upId
=
options
[
TREE_UPID
];
//处理树结构
var
fa
=
function
(
upId
)
{
var
_array
=
[];
for
(
var
i
=
0
;
i
<
list
.
length
;
i
++
)
{
var
n
=
list
[
i
];
if
(
n
[
field_upId
]
===
upId
)
{
n
.
children
=
fa
(
n
[
field_Id
]);
_array
.
push
(
n
);
}
}
return
_array
;
}
treeList
=
fa
(
list
[
0
][
field_upId
],
""
);
//递归
//处理表格结构
var
fa2
=
function
(
l
,
level
,
upids
)
{
for
(
var
i
=
0
;
i
<
l
.
length
;
i
++
)
{
var
n
=
l
[
i
];
n
.
level
=
level
;
//设置当前层级
n
.
upIds
=
upids
;
tableList
.
push
(
n
);
if
(
n
.
children
&&
n
.
children
.
length
>
0
)
{
fa2
(
n
.
children
,
1
+
level
,
upids
+
"
_
"
+
n
[
field_Id
]
+
"
_
"
);
}
}
return
;
}
fa2
(
treeList
,
1
,
""
);
}
else
{
tableList
=
list
;
}
//设置map数据集合
tableList
.
forEach
(
function
(
o
)
{
map
[
o
[
field_Id
]]
=
o
;
});
//设置到内存中去
table
.
setDataList
(
that
.
config
.
id
,
tableList
);
table
.
setDataTreeList
(
that
.
config
.
id
,
treeList
);
table
.
setDataMap
(
that
.
config
.
id
,
map
);
return
datas
;
}
/**
* 根据id从表格数据中获取对象
* @param data
* @param field_Id
* @param field_upId
* @returns {Array}
*/
Class
.
prototype
.
treeFindDataById
=
function
(
u_Id
)
{
var
that
=
this
,
options
=
that
.
config
;
var
e
=
null
;
var
list
=
table
.
getDataList
(
that
.
key
);
var
key
=
options
[
TREE_ID
];
list
.
forEach
(
function
(
o
)
{
if
(
o
[
key
]
==
u_Id
){
e
=
o
;
return
;
}
});
return
e
;
}
/**
* 获取父节点
* @param u_Id
*/
Class
.
prototype
.
treeFindUpData
=
function
(
o
){
var
uOjb
=
null
;
var
that
=
this
,
options
=
that
.
config
;
//处理父级
var
key
=
options
[
TREE_UPID
];
//父节点key名称
var
mapData
=
table
.
getDataMap
(
that
.
config
.
id
);
//获取map形式对象集合
uOjb
=
mapData
[
o
[
key
]];
return
uOjb
;
}
/**
* 根据父id获取全部的叶子节点(递归)
* @param o 数据对象
* @return {string}
*/
Class
.
prototype
.
treeFindSonData
=
function
(
data
)
{
var
objs
=
[];
function
f
(
o
)
{
if
(
o
.
children
.
length
>
0
){
o
.
children
.
forEach
(
function
(
i
)
{
objs
.
push
(
i
);
if
(
i
.
children
.
length
>
0
){
f
(
i
);
}
});
}
}
f
(
data
);
return
objs
;
};
/**
* 叶子节点显示转换
* @param o 数据
* @param fieldName 树显示列名
* @returns {string}
*/
Class
.
prototype
.
treeConvertShowName
=
function
(
o
)
{
var
that
=
this
,
options
=
that
.
config
;
var
isTreeNode
=
(
o
.
children
&&
o
.
children
.
length
>
0
);
var
temhtml
=
'
<div style="float: left;height: 28px;line-height: 28px;padding-left:
'
+
function
()
{
if
(
isTreeNode
){
return
'
5px
'
}
else
{
return
'
21px
'
}
}()
+
'
">
'
+
function
()
{
//位移量
var
nbspHtml
=
"
<i>
"
//一次位移
for
(
var
i
=
1
;
i
<
o
.
level
;
i
++
)
{
nbspHtml
=
nbspHtml
+
"
"
;
}
nbspHtml
=
nbspHtml
+
"
</i>
"
;
return
nbspHtml
;
}()
+
function
()
{
//图标或占位符
var
temTreeHtml
=
''
;
if
(
isTreeNode
)
temTreeHtml
=
'
<i class="layui-icon layui-tree-head"></i>
'
;
return
temTreeHtml
;
}()
+
'
</div>
'
;
return
temhtml
;
};
/**
* 节点的展开或折叠
* @param o 节点数据(树状表格)
* @param is_open 展开(true)或折叠(false)
*
* 每个节点有两种状态,
* 1、打开状态(is_open) 打开状态只需在点击瞬间控制,其他时候不需要变动
* 2、显示状态(显示或隐藏) 显示状态根据父级节点控制,父级节点是显示并且打开状态的则显示,否则不显示,但不影响其打开状态
*/
Class
.
prototype
.
treeNodeOpen
=
function
(
o
,
is_open
)
{
var
that
=
this
,
options
=
that
.
config
,
tr
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
o
[
table
.
config
.
indexName
]
+
'
"]
'
);
o
.
is_open
=
is_open
;
//处理树结构
var
fa
=
function
(
e
)
{
if
(
e
.
children
&&
e
.
children
.
length
>
0
){
var
temList
=
e
.
children
;
for
(
var
i
=
0
;
i
<
temList
.
length
;
i
++
)
{
var
n
=
temList
[
i
];
if
(
o
.
is_open
){
//打开状态的,关闭
if
(
e
.
is_open
&&
e
.
is_show
){
//该节点显示
var
temo
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
n
[
table
.
config
.
indexName
]
+
'
"]
'
);
temo
.
show
();
n
.
is_show
=
true
;
}
}
else
{
var
temo
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
n
[
table
.
config
.
indexName
]
+
'
"]
'
);
temo
.
hide
();
n
.
is_show
=
false
;
}
fa
(
n
);
}
}
}
fa
(
o
);
//处理图标
var
dbClickI
=
tr
.
find
(
'
.layui-tree-head
'
);
if
(
o
.
is_open
){
//打开状态
dbClickI
.
html
(
'

'
);
}
else
{
dbClickI
.
html
(
'

'
);
}
};
//获得数据
Class
.
prototype
.
pullData
=
function
(
curr
,
loadIndex
){
var
that
=
this
,
options
=
that
.
config
,
request
=
options
.
request
,
response
=
options
.
response
,
sort
=
function
(){
if
(
typeof
options
.
initSort
===
'
object
'
){
that
.
sort
(
options
.
initSort
.
field
,
options
.
initSort
.
type
);
}
};
that
.
startTime
=
new
Date
().
getTime
();
//渲染开始时间
if
(
options
.
url
){
//Ajax请求
var
params
=
{};
params
[
request
.
pageName
]
=
curr
;
params
[
request
.
limitName
]
=
options
.
limit
;
//行内过滤条件
var
list
=
that
.
layFilter
.
find
(
"
[name^='filter_']
"
);
layui
.
each
(
list
,
function
(
i
,
o
)
{
params
[
o
.
name
]
=
$
(
o
).
val
();
});
$
.
ajax
({
type
:
options
.
method
||
'
get
'
,
url
:
options
.
url
,
data
:
$
.
extend
(
params
,
options
.
where
)
,
dataType
:
'
json
'
,
success
:
function
(
res
){
that
.
resetData
(
res
.
data
);
res
.
data
=
table
.
getDataList
(
options
.
id
);
if
(
res
[
response
.
statusName
]
!=
response
.
statusCode
){
that
.
renderForm
();
that
.
layMain
.
html
(
'
<div class="
'
+
NONE
+
'
">
'
+
(
res
[
response
.
msgName
]
||
'
返回的数据状态异常
'
)
+
'
</div>
'
);
}
else
{
that
.
renderData
(
res
,
curr
,
res
[
response
.
countName
]),
sort
();
options
.
time
=
(
new
Date
().
getTime
()
-
that
.
startTime
)
+
'
ms
'
;
//耗时(接口请求+视图渲染)
}
loadIndex
&&
layer
.
close
(
loadIndex
);
typeof
options
.
done
===
'
function
'
&&
options
.
done
(
res
,
curr
,
res
[
response
.
countName
]);
}
,
error
:
function
(
e
,
m
){
that
.
layMain
.
html
(
'
<div class="
'
+
NONE
+
'
">数据接口请求异常</div>
'
);
that
.
renderForm
();
loadIndex
&&
layer
.
close
(
loadIndex
);
}
});
}
else
if
(
options
.
data
&&
options
.
data
.
constructor
===
Array
){
//已知数据
var
res
=
{},
startLimit
=
curr
*
options
.
limit
-
options
.
limit
res
[
response
.
dataName
]
=
options
.
data
.
concat
().
splice
(
startLimit
,
options
.
limit
);
res
[
response
.
countName
]
=
options
.
data
.
length
;
that
.
renderData
(
res
,
curr
,
options
.
data
.
length
),
sort
();
typeof
options
.
done
===
'
function
'
&&
options
.
done
(
res
,
curr
,
res
[
response
.
countName
]);
}
};
//遍历表头
Class
.
prototype
.
eachCols
=
function
(
callback
){
var
cols
=
$
.
extend
(
true
,
[],
this
.
config
.
cols
)
,
arrs
=
[],
index
=
0
;
//重新整理表头结构
layui
.
each
(
cols
,
function
(
i1
,
item1
){
layui
.
each
(
item1
,
function
(
i2
,
item2
){
//如果是组合列,则捕获对应的子列
if
(
item2
.
colspan
>
1
){
var
childIndex
=
0
;
index
++
item2
.
CHILD_COLS
=
[];
layui
.
each
(
cols
[
i1
+
1
],
function
(
i22
,
item22
){
if
(
item22
.
PARENT_COL
||
childIndex
==
item2
.
colspan
)
return
;
item22
.
PARENT_COL
=
index
;
item2
.
CHILD_COLS
.
push
(
item22
);
childIndex
=
childIndex
+
(
item22
.
colspan
>
1
?
item22
.
colspan
:
1
);
});
}
if
(
item2
.
PARENT_COL
)
return
;
//如果是子列,则不进行追加,因为已经存储在父列中
arrs
.
push
(
item2
)
});
});
//重新遍历列,如果有子列,则进入递归
var
eachArrs
=
function
(
obj
){
layui
.
each
(
obj
||
arrs
,
function
(
i
,
item
){
if
(
item
.
CHILD_COLS
)
return
eachArrs
(
item
.
CHILD_COLS
);
callback
(
i
,
item
);
});
};
eachArrs
();
};
/**
* 渲染节点显示
* @param callback
*/
Class
.
prototype
.
renderTreeConvertShowName
=
function
(
o
){
var
that
=
this
,
options
=
that
.
config
,
m
=
options
.
elem
,
hasRender
=
m
.
next
(
'
.
'
+
ELEM_VIEW
);
var
temhtml
=
that
.
treeConvertShowName
(
o
);
var
temdiv
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
o
[
table
.
config
.
indexName
]
+
'
"]
'
).
find
(
'
td[data-field=
'
+
options
[
TREE_SHOW_NAME
]
+
'
]
'
).
find
(
'
.layui-table-cell
'
);
$
(
temdiv
).
find
(
'
div
'
).
remove
();
$
(
temdiv
).
prepend
(
temhtml
);
}
/**
* 渲染表格单元格样式(宽度样式设置)
* @param callback
*/
Class
.
prototype
.
renderTdCss
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
m
=
options
.
elem
,
hasRender
=
m
.
next
(
'
.
'
+
ELEM_VIEW
);
var
id
=
that
.
index
+
'
_dltable_td_style
'
;
hasRender
.
find
(
"
#
"
+
id
).
remove
();
var
styel
=
'
<style id="
'
+
id
+
'
">
'
+
function
()
{
var
ret
=
""
;
layui
.
each
(
that
.
config
.
cols
,
function
(
i1
,
item1
)
{
layui
.
each
(
item1
,
function
(
i2
,
item2
){
ret
+=
'
.laytable-cell-
'
+
that
.
index
+
'
-
'
+
(
item2
.
field
||
i2
)
+
'
{
'
+
'
width:
'
+
(
item2
.
width
?
item2
.
width
+
"
px
"
:
"
0px
"
)
+
'
}
'
;
});
});
return
ret
;
}()
+
'
</style>
'
;
hasRender
.
append
(
styel
);
}
/**
* 生成单元格
* @param obj 行数据
* @param numbers 下标
* @param cols 列定义数据
* @param i3 第几列
*/
Class
.
prototype
.
renderTrUpids
=
function
(
obj
)
{
var
that
=
this
,
options
=
that
.
config
;
var
tree_upid_key
=
options
[
TREE_UPID
];
var
upids
=
'
upids="
'
+
obj
[
"
upIds
"
]
+
'
"
'
;
var
u_id
=
'
u_id="
'
+
obj
[
tree_upid_key
]
+
'
"
'
var
ret
=
options
.
isTree
?
u_id
:
''
;
return
ret
;
}
/**
* 生成单元格
* @param obj 行数据
* @param numbers 下标
* @param cols 列定义数据
* @param i3 第几列
*/
Class
.
prototype
.
renderTd
=
function
(
param
)
{
var
that
=
this
,
options
=
that
.
config
;
var
cols
=
param
.
cols
;
var
obj
=
param
.
obj
;
var
numbers
=
param
.
numbers
;
var
i3
=
param
.
i3
;
var
field
=
cols
.
field
||
i3
,
content
=
obj
[
field
]
||
''
,
cell
=
that
.
getColElem
(
that
.
layHeader
,
field
);
var
treeImgHtml
=
''
;
if
(
options
.
isTree
){
if
(
options
.
treeShowName
==
cols
.
field
){
treeImgHtml
=
that
.
treeConvertShowName
(
obj
);
}
}
//td内容
var
td
=
[
'
<td data-field="
'
+
field
+
'
"
'
+
function
(){
var
attr
=
[];
if
(
cols
.
edit
)
attr
.
push
(
'
data-edit="
'
+
cols
.
edit
+
'
"
'
);
//是否允许单元格编辑
if
(
cols
.
align
)
attr
.
push
(
'
align="
'
+
cols
.
align
+
'
"
'
);
//对齐方式
if
(
cols
.
templet
)
attr
.
push
(
'
data-content="
'
+
content
+
'
"
'
);
//自定义模板
if
(
cols
.
toolbar
)
attr
.
push
(
'
data-off="true"
'
);
//自定义模板
if
(
cols
.
event
)
attr
.
push
(
'
lay-event="
'
+
cols
.
event
+
'
"
'
);
//自定义事件
if
(
cols
.
style
)
attr
.
push
(
'
style="
'
+
cols
.
style
+
'
"
'
);
//自定义样式
if
(
cols
.
minWidth
)
attr
.
push
(
'
data-minwidth="
'
+
cols
.
minWidth
+
'
"
'
);
//单元格最小宽度
return
attr
.
join
(
'
'
);
}()
+
'
>
'
,
'
<div class="layui-table-cell laytable-cell-
'
+
function
(){
//返回对应的CSS类标识
var
str
=
(
options
.
index
+
'
-
'
+
field
);
return
cols
.
type
===
'
normal
'
?
str
:
(
str
+
'
laytable-cell-
'
+
cols
.
type
);
}()
+
'
">
'
+
treeImgHtml
+
'
<p style="width: auto;height: 100%;">
'
+
function
(){
var
tplData
=
$
.
extend
(
true
,
{
LAY_INDEX
:
numbers
},
obj
);
//渲染复选框列视图
if
(
cols
.
type
===
'
checkbox
'
){
return
'
<input type="checkbox" name="layTableCheckbox" value="
'
+
tplData
[
table
.
config
.
indexName
]
+
'
" lay-skin="primary"
'
+
function
(){
var
checkName
=
table
.
config
.
checkName
;
//如果是全选
if
(
cols
[
checkName
]){
obj
[
checkName
]
=
cols
[
checkName
];
return
cols
[
checkName
]
?
'
checked
'
:
''
;
}
return
tplData
[
checkName
]
?
'
checked
'
:
''
;
}()
+
'
>
'
;
}
else
if
(
cols
.
type
===
'
numbers
'
){
//渲染序号
return
numbers
;
}
else
if
(
cols
.
type
===
'
drop
'
){
//下拉框
var
rowsField
=
dl
.
ui
.
table
.
drop
.
findFieldObj
(
options
.
cols
[
0
],
field
);
if
(
rowsField
&&
rowsField
[
'
drop
'
]){
var
o
=
dl
.
cache
.
code
.
get
(
rowsField
.
drop
);
return
dl
.
ui
.
table
.
drop
.
findDropLable
(
rowsField
.
drop
,
content
);
}
}
else
if
(
cols
.
type
===
'
radio
'
){
//单选
return
'
<input type="radio" name="
'
+
TABLE_RADIO_ID
+
options
.
id
+
'
" value="
'
+
tplData
[
table
.
config
.
indexName
]
+
'
" checked="">
'
;
}
//解析工具列模板
if
(
cols
.
toolbar
){
return
laytpl
(
$
(
cols
.
toolbar
).
html
()
||
''
).
render
(
tplData
);
}
return
cols
.
templet
?
function
(){
return
typeof
cols
.
templet
===
'
function
'
?
cols
.
templet
(
tplData
)
:
laytpl
(
$
(
cols
.
templet
).
html
()
||
String
(
content
)).
render
(
tplData
)
}()
:
content
;
}()
,
'
</p></div></td>
'
].
join
(
''
);
return
td
;
}
/**
* 生成tr中的一行
* @param obj 行数据
* @param numbers 行号
* @returns {*}
*/
Class
.
prototype
.
renderTr
=
function
(
obj
,
numbers
)
{
var
that
=
this
,
options
=
that
.
config
;
var
tds
=
[];
that
.
eachCols
(
function
(
i3
,
cols
){
//cols列定义
var
field
=
cols
.
field
||
i3
,
content
=
obj
[
field
]
,
cell
=
that
.
getColElem
(
that
.
layHeader
,
field
);
if
(
content
===
undefined
||
content
===
null
)
content
=
''
;
if
(
cols
.
colspan
>
1
)
return
;
//td内容
var
td
=
that
.
renderTd
({
'
obj
'
:
obj
,
'
numbers
'
:
numbers
,
'
cols
'
:
cols
,
'
i3
'
:
i3
});
tds
.
push
(
td
);
// if(item3.fixed && item3.fixed !== 'right') tds_fixed.push(td);
// if(item3.fixed === 'right') tds_fixed_r.push(td);
});
return
tds
;
};
/**
* 表格数据部分渲染入口
* @param res
* @param curr
* @param count
* @param sort
*/
Class
.
prototype
.
renderData
=
function
(
res
,
curr
,
count
,
sort
){
var
that
=
this
,
options
=
that
.
config
,
data
=
res
[
options
.
response
.
dataName
]
||
[]
,
trs
=
[]
,
trs_fixed
=
[]
,
trs_fixed_r
=
[]
//渲染视图
,
render
=
function
(){
//后续性能提升的重点
if
(
!
sort
&&
that
.
sortKey
){
return
that
.
sort
(
that
.
sortKey
.
field
,
that
.
sortKey
.
sort
,
true
);
}
layui
.
each
(
data
,
function
(
i1
,
obj
){
var
tds
=
[],
tds_fixed
=
[],
tds_fixed_r
=
[]
,
numbers
=
i1
+
options
.
limit
*
(
curr
-
1
)
+
1
;
//序号
if
(
obj
.
length
===
0
)
return
;
if
(
!
sort
){
obj
[
table
.
config
.
indexName
]
=
i1
;
}
tds
=
that
.
renderTr
(
obj
,
numbers
);
trs
.
push
(
'
<tr data-index="
'
+
i1
+
'
"
'
+
that
.
renderTrUpids
(
obj
)
+
'
>
'
+
tds
.
join
(
''
)
+
'
</tr>
'
);
trs_fixed
.
push
(
'
<tr data-index="
'
+
i1
+
'
">
'
+
tds_fixed
.
join
(
''
)
+
'
</tr>
'
);
trs_fixed_r
.
push
(
'
<tr data-index="
'
+
i1
+
'
">
'
+
tds_fixed_r
.
join
(
''
)
+
'
</tr>
'
);
});
//if(data.length === 0) return;
that
.
layBody
.
scrollTop
(
0
);
that
.
layMain
.
find
(
'
.
'
+
NONE
).
remove
();
that
.
layMain
.
find
(
'
tbody
'
).
html
(
trs
.
join
(
''
));
that
.
layFixLeft
.
find
(
'
tbody
'
).
html
(
trs_fixed
.
join
(
''
));
that
.
layFixRight
.
find
(
'
tbody
'
).
html
(
trs_fixed_r
.
join
(
''
));
that
.
renderForm
();
that
.
syncCheckAll
();
that
.
haveInit
?
that
.
scrollPatch
()
:
setTimeout
(
function
(){
that
.
scrollPatch
();
},
50
);
that
.
haveInit
=
true
;
layer
.
close
(
that
.
tipsIndex
);
};
that
.
key
=
options
.
id
||
options
.
index
;
// table.cache[that.key] = data; //记录数据
table
.
setDataList
(
that
.
key
,
data
);
//显示隐藏分页栏
that
.
layPage
[
data
.
length
===
0
&&
curr
==
1
?
'
addClass
'
:
'
removeClass
'
](
HIDE
);
//排序
if
(
sort
){
return
render
();
}
if
(
data
.
length
===
0
){
that
.
renderForm
();
that
.
layFixed
.
remove
();
that
.
layMain
.
find
(
'
tbody
'
).
html
(
''
);
that
.
layMain
.
find
(
'
.
'
+
NONE
).
remove
();
return
that
.
layMain
.
append
(
'
<div class="
'
+
NONE
+
'
">
'
+
options
.
text
.
none
+
'
</div>
'
);
}
render
();
that
.
renderPage
(
count
);
//分页渲染
//calss加载完成
table
.
pushClassIds
(
options
.
id
,
true
);
layui
.
each
(
options
.
cols
,
function
(
i1
,
item1
){
layui
.
each
(
item1
,
function
(
i2
,
item2
){
})
});
};
/**
* 渲染分页
*/
Class
.
prototype
.
renderPage
=
function
(
count
)
{
var
that
=
this
,
options
=
that
.
config
;
//同步分页状态
if
(
options
.
page
){
options
.
page
=
$
.
extend
({
elem
:
'
layui-table-page
'
+
options
.
index
,
count
:
count
,
limit
:
options
.
limit
,
limits
:
options
.
limits
||
[
10
,
15
,
20
,
30
,
40
,
50
,
60
,
70
,
80
,
90
]
,
groups
:
3
,
layout
:
[
'
prev
'
,
'
page
'
,
'
next
'
,
'
skip
'
,
'
count
'
,
'
limit
'
]
,
prev
:
'
<i class="layui-icon"></i>
'
,
next
:
'
<i class="layui-icon"></i>
'
,
jump
:
function
(
obj
,
first
){
if
(
!
first
){
//分页本身并非需要做以下更新,下面参数的同步,主要是因为其它处理统一用到了它们
//而并非用的是 options.page 中的参数(以确保分页未开启的情况仍能正常使用)
that
.
page
=
obj
.
curr
;
//更新页码
options
.
limit
=
obj
.
limit
;
//更新每页条数
that
.
pullData
(
obj
.
curr
,
that
.
loading
());
}
}
},
options
.
page
);
options
.
page
.
count
=
count
;
//更新总条数
laypage
.
render
(
options
.
page
);
}
};
/**
* 过滤区域的渲染
*/
Class
.
prototype
.
renderFilter
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
VIEW_CLASS
=
ELEM_VIEW
,
index
=
that
.
index
;
//索引
var
v
=
[];
v
.
push
(
'
<form method="post" id="
'
+
options
.
id
+
'
_filter_form">
'
);
v
.
push
(
'
<table cellspacing="0" cellpadding="0" border="0" class="layui-table"><thead><tr>
'
);
layui
.
each
(
options
.
cols
,
function
(
i
,
o
)
{
layui
.
each
(
o
,
function
(
i2
,
item2
){
var
field
=
item2
.
field
||
i2
;
var
minW
=
item2
.
minWidth
?
"
data-minwidth='
"
+
item2
.
minWidth
+
"
'
"
:
""
;
var
rowCols
=
item2
.
colspan
?
'
colspan="
'
+
item2
.
colspan
+
'
"
'
:
''
;
var
rowspan
=
item2
.
rowspan
?
'
rowspan="
'
+
item2
.
rowspan
+
'
"
'
:
''
;
var
unresize
=
item2
.
unresize
?
'
data-unresize="true"
'
:
''
;
v
.
push
(
'
<th data-field="
'
+
field
+
'
"
'
+
minW
+
rowCols
+
rowspan
+
unresize
+
'
>
'
);
v
.
push
(
'
<div class="layui-table-cell laytable-cell-
'
+
function
()
{
var
tem
=
""
;
if
(
item2
.
colspan
>
1
)
{
tem
=
'
group
'
;
}
else
{
tem
=
index
+
"
-
"
+
field
;
if
(
item2
.
type
!==
"
normal
"
){
tem
+=
"
laytable-cell-
"
+
item2
.
type
;
}
}
return
tem
;
}()
+
'
">
'
);
if
(
!
item2
.
isFilter
||!
item2
.
field
){
//不开启行内过滤或没有列名
v
.
push
(
''
);
}
else
{
v
.
push
(
'
<input class="layui-input
'
+
ELEM_EDIT
+
'
" id="filter_
'
+
item2
.
field
+
'
" name="filter_
'
+
item2
.
field
+
'
">
'
);
}
v
.
push
(
'
</div></th>
'
);
});
});
v
.
push
(
'
</tr></thead></table>
'
);
v
.
push
(
'
</form>
'
);
return
v
.
join
(
''
);
};
//找到对应的列元素
Class
.
prototype
.
getColElem
=
function
(
parent
,
field
){
var
that
=
this
,
options
=
that
.
config
;
return
parent
.
eq
(
0
).
find
(
'
.laytable-cell-
'
+
(
options
.
index
+
'
-
'
+
field
)
+
'
:eq(0)
'
);
};
//渲染表单
Class
.
prototype
.
renderForm
=
function
(
type
){
form
.
render
(
type
,
'
LAY-table-
'
+
this
.
index
);
}
//数据排序
Class
.
prototype
.
sort
=
function
(
th
,
type
,
pull
,
formEvent
){
var
that
=
this
,
field
,
res
=
{}
,
options
=
that
.
config
,
filter
=
options
.
elem
.
attr
(
'
lay-filter
'
)
,
data
=
table
.
getDataList
(
that
.
key
),
thisData
;
//字段匹配
if
(
typeof
th
===
'
string
'
){
that
.
layHeader
.
find
(
'
th
'
).
each
(
function
(
i
,
item
){
var
othis
=
$
(
this
)
,
_field
=
othis
.
data
(
'
field
'
);
if
(
_field
===
th
){
th
=
othis
;
field
=
_field
;
return
false
;
}
});
}
try
{
var
field
=
field
||
th
.
data
(
'
field
'
);
//如果欲执行的排序已在状态中,则不执行渲染
if
(
that
.
sortKey
&&
!
pull
){
if
(
field
===
that
.
sortKey
.
field
&&
type
===
that
.
sortKey
.
sort
){
return
;
}
}
var
elemSort
=
that
.
layHeader
.
find
(
'
th .laytable-cell-
'
+
options
.
index
+
'
-
'
+
field
).
find
(
ELEM_SORT
);
that
.
layHeader
.
find
(
'
th
'
).
find
(
ELEM_SORT
).
removeAttr
(
'
lay-sort
'
);
//清除其它标题排序状态
elemSort
.
attr
(
'
lay-sort
'
,
type
||
null
);
that
.
layFixed
.
find
(
'
th
'
)
}
catch
(
e
){
return
hint
.
error
(
'
Table modules: Did not match to field
'
);
}
//记录排序索引和类型
that
.
sortKey
=
{
field
:
field
,
sort
:
type
};
if
(
type
===
'
asc
'
){
//升序
thisData
=
layui
.
sort
(
data
,
field
);
}
else
if
(
type
===
'
desc
'
){
//降序
thisData
=
layui
.
sort
(
data
,
field
,
true
);
}
else
{
//清除排序
thisData
=
layui
.
sort
(
data
,
table
.
config
.
indexName
);
delete
that
.
sortKey
;
}
res
[
options
.
response
.
dataName
]
=
thisData
;
that
.
renderData
(
res
,
that
.
page
,
that
.
count
,
true
);
if
(
formEvent
){
layui
.
event
.
call
(
th
,
MOD_NAME
,
'
sort(
'
+
filter
+
'
)
'
,
{
field
:
field
,
type
:
type
});
}
};
//请求loading
Class
.
prototype
.
loading
=
function
(){
var
that
=
this
,
options
=
that
.
config
;
if
(
options
.
loading
&&
options
.
url
){
return
layer
.
msg
(
'
数据请求中
'
,
{
icon
:
16
,
offset
:
[
that
.
elem
.
offset
().
top
+
that
.
elem
.
height
()
/
2
-
35
-
_WIN
.
scrollTop
()
+
'
px
'
,
that
.
elem
.
offset
().
left
+
that
.
elem
.
width
()
/
2
-
90
-
_WIN
.
scrollLeft
()
+
'
px
'
]
,
time
:
-
1
,
anim
:
-
1
,
fixed
:
false
});
}
};
//同步选中值状态
Class
.
prototype
.
setCheckData
=
function
(
index
,
checked
){
var
that
=
this
,
options
=
that
.
config
,
thisData
=
table
.
getDataList
(
that
.
key
);
if
(
!
thisData
[
index
])
return
;
if
(
thisData
[
index
].
constructor
===
Array
)
return
;
thisData
[
index
][
options
.
checkName
]
=
checked
;
};
//同步全选按钮状态
Class
.
prototype
.
syncCheckAll
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
checkAllElem
=
that
.
layHeader
.
find
(
'
input[name="layTableCheckbox"]
'
)
,
syncColsCheck
=
function
(
checked
){
that
.
eachCols
(
function
(
i
,
item
){
if
(
item
.
type
===
'
checkbox
'
){
item
[
options
.
checkName
]
=
checked
;
}
});
return
checked
;
};
if
(
!
checkAllElem
[
0
])
return
;
if
(
table
.
checkStatus
(
that
.
key
).
isAll
){
if
(
!
checkAllElem
[
0
].
checked
){
checkAllElem
.
prop
(
'
checked
'
,
true
);
that
.
renderForm
(
'
checkbox
'
);
}
syncColsCheck
(
true
);
}
else
{
if
(
checkAllElem
[
0
].
checked
){
checkAllElem
.
prop
(
'
checked
'
,
false
);
that
.
renderForm
(
'
checkbox
'
);
}
syncColsCheck
(
false
);
}
};
//获取cssRule
Class
.
prototype
.
getCssRule
=
function
(
field
,
callback
){
var
that
=
this
,
style
=
that
.
elem
.
find
(
'
style
'
)[
0
]
,
sheet
=
style
.
sheet
||
style
.
styleSheet
||
{}
,
rules
=
sheet
.
cssRules
||
sheet
.
rules
;
layui
.
each
(
rules
,
function
(
i
,
item
){
if
(
item
.
selectorText
===
(
'
.laytable-cell-
'
+
that
.
index
+
'
-
'
+
field
)){
return
callback
(
item
),
true
;
}
});
};
/**
* 窗体变化自适应
*/
Class
.
prototype
.
resize
=
function
(){
var
that
=
this
;
//根据父窗体高度设置table的高度
// 1、table自身顶级容器高度(layui-table-view)
// 2、内容区域高度(layui-table-main)
that
.
setArea
();
that
.
fullSize
();
//高度控制
//宽度控制(最后一行)
that
.
resizeWidth
();
that
.
scrollPatch
();
};
/**
* 重新渲染宽度
*/
Class
.
prototype
.
resizeWidth
=
function
(){
var
that
=
this
;
that
.
renderTdCss
();
};
//铺满表格主体高度
Class
.
prototype
.
fullSize
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
height
=
options
.
height
,
bodyHeight
;
height
=
that
.
getParentDivHeight
(
options
.
id
)
-
that
.
fullHeightGap
;
if
(
height
<
135
)
height
=
135
;
that
.
elem
.
css
(
'
height
'
,
height
);
//tbody区域高度
// bodyHeight = parseFloat(height) - parseFloat(that.layHeader.height()) - 1;//原本代码
var
theader
=
options
.
isFilter
?
76
:
38
;
//没有行内过滤区域
bodyHeight
=
parseFloat
(
height
)
-
theader
-
1
;
//###注意:现在写死表头固定高度为38px,即不支持多表头方式(在tab方式下无法获取正确的高度,待处理)
if
(
options
.
toolbar
){
bodyHeight
=
bodyHeight
-
that
.
layTool
.
outerHeight
();
}
if
(
options
.
page
){
bodyHeight
=
bodyHeight
-
that
.
layPage
.
outerHeight
()
-
1
;
}
that
.
layMain
.
css
(
'
height
'
,
bodyHeight
);
// console.log(bodyHeight,that.layHeader.height());
};
//获取滚动条宽度
Class
.
prototype
.
getScrollWidth
=
function
(
elem
){
var
width
=
0
;
if
(
elem
){
width
=
elem
.
offsetWidth
-
elem
.
clientWidth
;
}
else
{
elem
=
document
.
createElement
(
'
div
'
);
elem
.
style
.
width
=
'
100px
'
;
elem
.
style
.
height
=
'
100px
'
;
elem
.
style
.
overflowY
=
'
scroll
'
;
document
.
body
.
appendChild
(
elem
);
width
=
elem
.
offsetWidth
-
elem
.
clientWidth
;
document
.
body
.
removeChild
(
elem
);
}
return
width
;
};
//滚动条补丁
Class
.
prototype
.
scrollPatch
=
function
(){
var
that
=
this
,
layMainTable
=
that
.
layMain
.
children
(
'
table
'
)
,
scollWidth
=
that
.
layMain
.
width
()
-
that
.
layMain
.
prop
(
'
clientWidth
'
)
//纵向滚动条宽度
,
scollHeight
=
that
.
layMain
.
height
()
-
that
.
layMain
.
prop
(
'
clientHeight
'
)
//横向滚动条高度
,
getScrollWidth
=
that
.
getScrollWidth
(
that
.
layMain
[
0
])
//获取主容器滚动条宽度,如果有的话
,
outWidth
=
layMainTable
.
outerWidth
()
-
that
.
layMain
.
width
();
//表格内容器的超出宽度
//如果存在自动列宽,则要保证绝对填充满,并且不能出现横向滚动条
if
(
that
.
autoColNums
&&
outWidth
<
5
&&
!
that
.
scrollPatchWStatus
){
var
th
=
that
.
layHeader
.
eq
(
0
).
find
(
'
thead th:last-child
'
)
,
field
=
th
.
data
(
'
field
'
);
that
.
getCssRule
(
field
,
function
(
item
){
var
width
=
item
.
style
.
width
||
th
.
outerWidth
();
item
.
style
.
width
=
(
parseFloat
(
width
)
-
getScrollWidth
-
outWidth
)
+
'
px
'
;
//二次校验,如果仍然出现横向滚动条
if
(
that
.
layMain
.
height
()
-
that
.
layMain
.
prop
(
'
clientHeight
'
)
>
0
){
item
.
style
.
width
=
parseFloat
(
item
.
style
.
width
)
-
1
+
'
px
'
;
}
that
.
scrollPatchWStatus
=
true
;
});
}
if
(
scollWidth
&&
scollHeight
){
if
(
that
.
elem
.
find
(
'
.layui-table-patch
'
).
length
<=
0
){
var
patchElem
=
$
(
'
<th class="layui-table-patch"><div class="layui-table-cell"></div></th>
'
);
//补丁元素
patchElem
.
find
(
'
div
'
).
css
({
width
:
scollWidth
});
that
.
layHeader
.
eq
(
0
).
find
(
'
thead tr
'
).
append
(
patchElem
);
//that.layFilter.find('table thead tr').append(patchElem);
}
}
else
{
that
.
layFilter
.
eq
(
0
).
find
(
'
.layui-table-patch
'
).
remove
();
that
.
layHeader
.
eq
(
0
).
find
(
'
.layui-table-patch
'
).
remove
();
}
//固定列区域高度
var
mainHeight
=
that
.
layMain
.
height
()
,
fixHeight
=
mainHeight
-
scollHeight
;
that
.
layFixed
.
find
(
ELEM_BODY
).
css
(
'
height
'
,
layMainTable
.
height
()
>
fixHeight
?
fixHeight
:
'
auto
'
);
//表格宽度小于容器宽度时,隐藏固定列
that
.
layFixRight
[
outWidth
>
0
?
'
removeClass
'
:
'
addClass
'
](
HIDE
);
//操作栏
that
.
layFixRight
.
css
(
'
right
'
,
scollWidth
-
1
);
};
//事件处理
Class
.
prototype
.
events
=
function
(){
var
that
=
this
,
options
=
that
.
config
,
_BODY
=
$
(
'
body
'
)
,
dict
=
{}
,
th
=
that
.
layHeader
.
find
(
'
th
'
)
,
resizing
,
ELEM_CELL
=
'
.layui-table-cell
'
,
filter
=
options
.
elem
.
attr
(
'
lay-filter
'
)
,
layFilter
=
that
.
layFilter
.
find
(
"
[name^='filter_']
"
)
//行内过滤元素
;
//行内过滤
layFilter
.
on
(
'
keyup
'
,
function
()
{
that
.
page
=
1
;
that
.
pullData
(
that
.
page
,
that
.
loading
());
});
//拖拽调整宽度
th
.
on
(
'
mousemove
'
,
function
(
e
){
var
othis
=
$
(
this
)
,
oLeft
=
othis
.
offset
().
left
,
pLeft
=
e
.
clientX
-
oLeft
;
if
(
othis
.
attr
(
'
colspan
'
)
>
1
||
othis
.
data
(
'
unresize
'
)
||
dict
.
resizeStart
){
return
;
}
dict
.
allowResize
=
othis
.
width
()
-
pLeft
<=
10
;
//是否处于拖拽允许区域
_BODY
.
css
(
'
cursor
'
,
(
dict
.
allowResize
?
'
col-resize
'
:
''
));
}).
on
(
'
mouseleave
'
,
function
(){
var
othis
=
$
(
this
);
if
(
dict
.
resizeStart
)
return
;
_BODY
.
css
(
'
cursor
'
,
''
);
}).
on
(
'
mousedown
'
,
function
(
e
){
var
othis
=
$
(
this
);
if
(
dict
.
allowResize
){
var
field
=
othis
.
data
(
'
field
'
);
e
.
preventDefault
();
dict
.
resizeStart
=
true
;
//开始拖拽
dict
.
offset
=
[
e
.
clientX
,
e
.
clientY
];
//记录初始坐标
that
.
getCssRule
(
field
,
function
(
item
){
var
width
=
item
.
style
.
width
||
othis
.
outerWidth
();
dict
.
rule
=
item
;
dict
.
ruleWidth
=
parseFloat
(
width
);
dict
.
minWidth
=
othis
.
data
(
'
minwidth
'
)
||
options
.
cellMinWidth
;
});
}
});
//拖拽中
_DOC
.
on
(
'
mousemove
'
,
function
(
e
){
if
(
dict
.
resizeStart
){
e
.
preventDefault
();
if
(
dict
.
rule
){
var
setWidth
=
dict
.
ruleWidth
+
e
.
clientX
-
dict
.
offset
[
0
];
if
(
setWidth
<
dict
.
minWidth
)
setWidth
=
dict
.
minWidth
;
dict
.
rule
.
style
.
width
=
setWidth
+
'
px
'
;
layer
.
close
(
that
.
tipsIndex
);
}
resizing
=
1
}
}).
on
(
'
mouseup
'
,
function
(
e
){
if
(
dict
.
resizeStart
){
dict
=
{};
_BODY
.
css
(
'
cursor
'
,
''
);
that
.
scrollPatch
();
}
if
(
resizing
===
2
){
resizing
=
null
;
}
});
//排序
th
.
on
(
'
click
'
,
function
(){
var
othis
=
$
(
this
)
,
elemSort
=
othis
.
find
(
ELEM_SORT
)
,
nowType
=
elemSort
.
attr
(
'
lay-sort
'
)
,
type
;
if
(
!
elemSort
[
0
]
||
resizing
===
1
)
return
resizing
=
2
;
if
(
nowType
===
'
asc
'
){
type
=
'
desc
'
;
}
else
if
(
nowType
===
'
desc
'
){
type
=
null
;
}
else
{
type
=
'
asc
'
;
}
that
.
sort
(
othis
,
type
,
null
,
true
);
}).
find
(
ELEM_SORT
+
'
.layui-edge
'
).
on
(
'
click
'
,
function
(
e
){
var
othis
=
$
(
this
)
,
index
=
othis
.
index
()
,
field
=
othis
.
parents
(
'
th
'
).
eq
(
0
).
data
(
'
field
'
)
layui
.
stope
(
e
);
if
(
index
===
0
){
that
.
sort
(
field
,
'
asc
'
,
null
,
true
);
}
else
{
that
.
sort
(
field
,
'
desc
'
,
null
,
true
);
}
});
/**
* 树形节点点击事件(隐藏展开下级节点)
*/
that
.
elem
.
on
(
'
click
'
,
'
i.layui-tree-head
'
,
function
(){
var
othis
=
$
(
this
)
,
index
=
othis
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
tr
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
index
+
'
"]
'
)
,
options
=
that
.
config
,
tree_id
=
options
[
TREE_ID
]
,
datas
=
table
.
getDataList
(
that
.
key
);
//数据
var
o
=
datas
[
index
];
that
.
treeNodeOpen
(
o
,
!
o
.
is_open
);
});
//复选框选择
that
.
elem
.
on
(
'
click
'
,
'
input[name="layTableCheckbox"]+
'
,
function
(){
var
checkbox
=
$
(
this
).
prev
()
,
childs
=
that
.
layBody
.
find
(
'
input[name="layTableCheckbox"]
'
)
,
index
=
checkbox
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
checked
=
checkbox
[
0
].
checked
,
isAll
=
checkbox
.
attr
(
'
lay-filter
'
)
===
'
layTableAllChoose
'
;
//全选
if
(
isAll
){
childs
.
each
(
function
(
i
,
item
){
item
.
checked
=
checked
;
that
.
setCheckData
(
i
,
checked
);
});
that
.
syncCheckAll
();
that
.
renderForm
(
'
checkbox
'
);
}
else
{
that
.
setCheckData
(
index
,
checked
);
that
.
syncCheckAll
();
}
layui
.
event
.
call
(
this
,
MOD_NAME
,
'
checkbox(
'
+
filter
+
'
)
'
,
{
checked
:
checked
,
data
:
table
.
getDataList
(
that
.
key
)
?
(
table
.
getDataList
(
that
.
key
)[
index
]
||
{})
:
{}
,
type
:
isAll
?
'
all
'
:
'
one
'
});
});
//行事件
that
.
layBody
.
on
(
'
mouseenter
'
,
'
tr
'
,
function
(){
var
othis
=
$
(
this
)
,
index
=
othis
.
index
();
that
.
layBody
.
find
(
'
tr:eq(
'
+
index
+
'
)
'
).
addClass
(
ELEM_HOVER
)
})
that
.
layBody
.
on
(
'
mouseleave
'
,
'
tr
'
,
function
(){
var
othis
=
$
(
this
)
,
index
=
othis
.
index
();
that
.
layBody
.
find
(
'
tr:eq(
'
+
index
+
'
)
'
).
removeClass
(
ELEM_HOVER
)
});
//单元格编辑
that
.
layBody
.
on
(
'
change
'
,
'
.
'
+
ELEM_EDIT
,
function
(){
var
othis
=
$
(
this
)
,
value
=
this
.
value
,
field
=
othis
.
parent
().
data
(
'
field
'
)
,
index
=
othis
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
data
=
table
.
getDataList
(
that
.
key
)[
index
];
data
[
field
]
=
value
;
//更新缓存中的值
layui
.
event
.
call
(
this
,
MOD_NAME
,
'
edit(
'
+
filter
+
'
)
'
,
{
value
:
value
,
data
:
data
,
field
:
field
});
});
that
.
layBody
.
on
(
'
blur
'
,
'
.
'
+
ELEM_EDIT
,
function
(){
//单元格失去焦点
var
templet
,
othis
=
$
(
this
)
,
field
=
othis
.
parent
().
data
(
'
field
'
)
,
index
=
othis
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
editType
=
othis
.
parent
().
data
(
'
edit
'
)
,
data
=
table
.
getDataList
(
that
.
key
)[
index
];
var
options
=
that
.
config
;
that
.
eachCols
(
function
(
i
,
item
){
if
(
item
.
field
==
field
&&
item
.
templet
){
templet
=
item
.
templet
;
}
});
var
value
=
""
;
if
(
editType
===
'
select
'
)
{
//选择框
var
rowsField
=
dl
.
ui
.
table
.
drop
.
findFieldObj
(
options
.
cols
[
0
],
field
);
if
(
rowsField
&&
rowsField
[
'
drop
'
]){
var
o
=
dl
.
cache
.
code
.
get
(
rowsField
.
drop
);
value
=
dl
.
ui
.
table
.
drop
.
findDropLable
(
rowsField
.
drop
,
this
.
value
);
}
othis
.
parent
().
find
(
ELEM_CELL
+
'
p
'
).
html
(
templet
?
laytpl
(
$
(
templet
).
html
()
||
value
).
render
(
data
)
:
value
);
}
else
{
//输入框
othis
.
parent
().
find
(
ELEM_CELL
+
'
p
'
).
html
(
templet
?
laytpl
(
$
(
templet
).
html
()
||
this
.
value
).
render
(
data
)
:
this
.
value
);
}
othis
.
parent
().
data
(
'
content
'
,
this
.
value
);
othis
.
remove
();
});
//单元格事件
that
.
layBody
.
on
(
'
click
'
,
'
td div.layui-table-cell p
'
,
function
(){
var
othis
=
$
(
this
).
parent
().
parent
()
,
field
=
othis
.
data
(
'
field
'
)
,
editType
=
othis
.
data
(
'
edit
'
)
,
index
=
othis
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
data
=
table
.
getDataList
(
that
.
key
)[
index
]
,
elemCell
=
othis
.
children
(
ELEM_CELL
);
var
options
=
that
.
config
;
layer
.
close
(
that
.
tipsIndex
);
if
(
othis
.
data
(
'
off
'
))
return
;
//显示编辑表单
if
(
editType
){
if
(
editType
===
'
select
'
)
{
//选择框
var
dropName
=
othis
.
data
(
'
drop
'
);
var
rowsField
=
dl
.
ui
.
table
.
drop
.
findFieldObj
(
options
.
cols
[
0
],
field
);
var
o
=
dl
.
cache
.
code
.
get
(
rowsField
.
drop
);
var
html
=
''
;
var
scv
=
o
.
syscodevaluecache
;
for
(
var
i
in
scv
){
var
isSelected
=
""
;
if
(
scv
[
i
].
scv_value
==
data
[
field
]){
isSelected
=
"
selected='selected'
"
;
}
//选中
html
+=
'
<option
'
+
isSelected
+
'
value="
'
+
scv
[
i
].
scv_value
+
'
">
'
+
scv
[
i
].
scv_show_name
+
'
</option>
'
}
var
select
=
$
(
'
<select class="
'
+
ELEM_EDIT
+
'
" lay-ignore>
'
+
html
+
'
</select>
'
);
othis
.
find
(
'
.
'
+
ELEM_EDIT
)[
0
]
||
othis
.
append
(
select
);
}
else
{
//输入框
var
input
=
$
(
'
<input class="layui-input
'
+
ELEM_EDIT
+
'
">
'
);
input
[
0
].
value
=
$
.
trim
(
$
(
this
).
text
());
// othis.data('content') || elemCell.text();
othis
.
find
(
'
.
'
+
ELEM_EDIT
)[
0
]
||
othis
.
append
(
input
);
input
.
focus
();
}
return
;
}
//如果出现省略,则可查看更多
if
(
elemCell
.
find
(
'
.layui-form-switch,.layui-form-checkbox
'
)[
0
])
return
;
//限制不出现更多(暂时)
if
(
Math
.
round
(
elemCell
.
prop
(
'
scrollWidth
'
))
>
Math
.
round
(
elemCell
.
outerWidth
())){
that
.
tipsIndex
=
layer
.
tips
([
'
<div class="layui-table-tips-main" style="margin-top: -
'
+
(
elemCell
.
height
()
+
16
)
+
'
px;
'
+
function
(){
if
(
options
.
size
===
'
sm
'
){
return
'
padding: 4px 15px; font-size: 12px;
'
;
}
if
(
options
.
size
===
'
lg
'
){
return
'
padding: 14px 15px;
'
;
}
return
''
;
}()
+
'
">
'
,
elemCell
.
html
()
,
'
</div>
'
,
'
<i class="layui-icon layui-table-tips-c">ဆ</i>
'
].
join
(
''
),
elemCell
[
0
],
{
tips
:
[
3
,
''
]
,
time
:
-
1
,
anim
:
-
1
,
maxWidth
:
(
device
.
ios
||
device
.
android
)
?
300
:
600
,
isOutAnim
:
false
,
skin
:
'
layui-table-tips
'
,
success
:
function
(
layero
,
index
){
layero
.
find
(
'
.layui-table-tips-c
'
).
on
(
'
click
'
,
function
(){
layer
.
close
(
index
);
});
}
});
}
});
//工具条操作事件
that
.
layBody
.
on
(
'
click
'
,
'
*[lay-event]
'
,
function
(){
var
othis
=
$
(
this
)
,
index
=
othis
.
parents
(
'
tr
'
).
eq
(
0
).
data
(
'
index
'
)
,
tr
=
that
.
layBody
.
find
(
'
tr[data-index="
'
+
index
+
'
"]
'
)
,
ELEM_CLICK
=
'
layui-table-click
'
,
list
=
table
.
getDataList
(
that
.
key
)
,
data
=
table
.
getDataList
(
that
.
key
)[
index
];
layui
.
event
.
call
(
this
,
MOD_NAME
,
'
tool(
'
+
filter
+
'
)
'
,
{
data
:
data
//table.clearCacheKey(data)
,
event
:
othis
.
attr
(
'
lay-event
'
)
,
tr
:
tr
,
del
:
function
(){
table
.
delRow
(
options
.
id
,
data
);
}
,
update
:
function
(
fields
){
fields
=
fields
||
{};
layui
.
each
(
fields
,
function
(
key
,
value
){
if
(
key
in
data
){
var
templet
,
td
=
tr
.
children
(
'
td[data-field="
'
+
key
+
'
"]
'
);
data
[
key
]
=
value
;
that
.
eachCols
(
function
(
i
,
item2
){
if
(
item2
.
field
==
key
&&
item2
.
templet
){
templet
=
item2
.
templet
;
}
});
td
.
children
(
ELEM_CELL
).
html
(
templet
?
laytpl
(
$
(
templet
).
html
()
||
value
).
render
(
data
)
:
value
);
td
.
data
(
'
content
'
,
value
);
}
});
}
});
tr
.
addClass
(
ELEM_CLICK
).
siblings
(
'
tr
'
).
removeClass
(
ELEM_CLICK
);
});
//同步滚动条
that
.
layMain
.
on
(
'
scroll
'
,
function
(){
var
othis
=
$
(
this
)
,
scrollLeft
=
othis
.
scrollLeft
()
,
scrollTop
=
othis
.
scrollTop
();
that
.
layHeader
.
scrollLeft
(
scrollLeft
);
that
.
layFixed
.
find
(
ELEM_BODY
).
scrollTop
(
scrollTop
);
layer
.
close
(
that
.
tipsIndex
);
});
_WIN
.
on
(
'
resize
'
,
function
(){
//自适应
that
.
resize
();
});
};
//表格重载
thisTable
.
config
=
{};
//自动完成渲染
table
.
init
();
layui
.
link
(
basePath
+
'
../layui/lay/modules/treetable/treeGrid.css
'
);
//引入css
exports
(
MOD_NAME
,
table
);
});
\ No newline at end of file
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/treeGrid.css
0 → 100644
浏览文件 @
947b1e59
.layui-tree-head
{
cursor
:
pointer
;
}
\ No newline at end of file
skyeye-web/src/main/webapp/assets/lib/layui/lay/modules/treetable/treeGrid.js
0 → 100644
浏览文件 @
947b1e59
/**
@Name:treeGrid树状表格
@Author:lrd
*/
layui
.
config
({
base
:
basePath
}).
extend
({
dltable
:
'
../layui/lay/modules/treetable/dltable
'
}).
define
([
'
laytpl
'
,
'
laypage
'
,
'
dltable
'
,
'
layer
'
,
'
form
'
],
function
(
exports
){
"
use strict
"
;
var
$
=
layui
.
jquery
;
var
layer
=
layui
.
layer
;
var
dltable
=
layui
.
dltable
;
var
treeGrid
=
$
.
extend
({},
dltable
);
treeGrid
.
_render
=
treeGrid
.
render
;
treeGrid
.
render
=
function
(
param
){
//重写渲染方法
param
.
isTree
=
true
;
//是树表格
treeGrid
.
_render
(
param
);
};
exports
(
'
treeGrid
'
,
treeGrid
);
});
\ No newline at end of file
skyeye-web/src/main/webapp/assets/lib/layui/layui.js
浏览文件 @
947b1e59
...
...
@@ -122,7 +122,8 @@ function isNull(str){
vue
:
'
modules/codemirror/vue
'
,
//代码格式编辑器vue支持vue
zclip
:
'
modules/jquery.zclip
'
,
//复制插件
swiper
:
'
modules/swiper/swiper.min
'
,
//滚动插件
tableSelect
:
'
modules/tableSelect.js
'
,
//tableSelect 下拉表格选择器
tableSelect
:
'
modules/tableSelect
'
,
//tableSelect 下拉表格选择器
treeGrid
:
'
modules/treetable/treeGrid
'
,
//树表格
};
// 记录基础数据
...
...
skyeye-web/src/main/webapp/js/tarea/tarea.js
0 → 100644
浏览文件 @
947b1e59
layui
.
config
({
base
:
basePath
,
version
:
skyeyeVersion
}).
define
([
'
treeGrid
'
,
'
jquery
'
,
'
winui
'
,
'
form
'
],
function
(
exports
)
{
winui
.
renderColor
();
var
$
=
layui
.
$
,
form
=
layui
.
form
,
treeGrid
=
layui
.
treeGrid
;
//搜索表单
form
.
render
();
form
.
on
(
'
submit(formSearch)
'
,
function
(
data
)
{
//表单验证
if
(
winui
.
verifyForm
(
data
.
elem
))
{
loadTable
();
}
return
false
;
});
function
loadTable
(){
}
exports
(
'
tarea
'
,
{});
});
skyeye-web/src/main/webapp/tpl/tarea/tarea.html
0 → 100644
浏览文件 @
947b1e59
<!DOCTYPE html>
<html>
<head>
<meta
charset=
"utf-8"
/>
<title></title>
<link
href=
"../../assets/lib/layui/css/layui.css"
rel=
"stylesheet"
/>
<link
href=
"../../assets/lib/font-awesome-4.7.0/css/font-awesome.css"
rel=
"stylesheet"
/>
<link
href=
"../../assets/lib/winui/css/winui.css"
rel=
"stylesheet"
/>
</head>
<body>
<div
class=
"txtcenter"
style=
"width:700px;margin:0 auto;padding-top:20px;"
>
<form
class=
"layui-form layui-form-pane"
action=
""
autocomplete=
"off"
>
<div
class=
"layui-form-item"
>
<div
class=
"layui-inline"
>
<label
class=
"layui-form-label"
>
角色名称
</label>
<div
class=
"layui-input-inline"
>
<input
type=
"text"
id=
"roleName"
name=
"roleName"
placeholder=
"请输入角色名称"
class=
"layui-input"
/>
</div>
</div>
</div>
<div
class=
"layui-form-item"
>
<div
class=
"layui-input-block"
style=
"margin:0;"
>
<button
class=
"layui-btn"
lay-submit
lay-filter=
"formSearch"
>
搜索
</button>
</div>
</div>
</form>
</div>
<div
class=
"winui-toolbar"
>
<div
class=
"winui-tool"
>
<button
id=
"reloadTable"
class=
"winui-toolbtn"
><i
class=
"fa fa-refresh"
aria-hidden=
"true"
></i>
刷新数据
</button>
</div>
</div>
<script
src=
"../../assets/lib/layui/layui.js"
></script>
<script
src=
"../../assets/lib/layui/custom.js"
></script>
<script
type=
"text/javascript"
>
layui
.
config
({
base
:
'
../../js/tarea/
'
}).
use
(
'
tarea
'
);
</script>
</body>
</html>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录