Files
layui/examples/tree.html
sunxiaobin89 5ab142153b ci: 添加 lint 和 format 工具,统一代码格式 (#2905)
* style: 统一代码格式,修复ESLint错误

- 为所有模块添加尾随逗号
- 修复缺少分号的语句
- 统一对象字面量格式
- 添加ESLint配置文件和文档
- 更新package.json中的脚本和依赖项

* build: 添加 ESLint 配置文件以支持 IE9+ 兼容性

* refactor(upload): 使用已缓存的hint实例替换直接调用

优化代码性能,避免重复实例化hint对象,直接使用模块顶部已缓存的实例

* chore: 更新.gitignore文件以包含更多忽略规则

添加了更多常见的临时文件、编辑器文件、构建输出目录和运行时数据的忽略规则,使项目更加整洁并避免不必要的文件被提交到版本控制中

* fix(lay.js): 修复passive事件监听器选项的返回值

确保getter函数返回true以正确支持passive事件监听

* refactor(form): 移除表单模块中的冗余代码

删除表单模块中无实际作用的冗余代码行,这些代码只是将属性重新赋值为自身,没有实际功能意义

* fix(form): 修复复选框状态处理逻辑

确保复选框的 indeterminate 和 checked 状态被正确转换为布尔值,并优化事件调用时的空格格式

* feat(eslint): 完善 ESLint 配置并添加 VSCode 支持

添加 VSCode 配置文件以支持 ESLint 自动修复和格式化
更新 ESLint 配置,增强代码风格和兼容性规则
修复 package.json 中的脚本拼写错误并添加 format 脚本
调整 .gitignore 以允许特定 VSCode 配置文件

* style: 统一代码中的引号格式并修复缩进问题

统一将双引号改为单引号,修复部分代码缩进不一致的问题,提升代码风格一致性

* docs: 删除过时的ESLint配置文档文件

* build: 采用 prettier 作为代码格式化工具,剔除 ESLint 格式化部分

* chore: 剔除 .vscode/ 配置,保持编辑器中立

* build: 修改 ESLint 为「扁平化配置」方式,避免大量参数堆砌

* chore: 格式化代码

* ci: 添加 git hooks 和 CI 环节把关代码风格

* ci: update

* ci: update

* test: 测试 ci format

* ci: 改用 husky 作为 git hooks,与 Layui 3 保持一致

经测试,simple-git-hooks 生成的 pre-commit 默认为 sh,在 Windows 不兼容(必须用 git bash 执行 commits)

* build: 新增 CI 和生产环境跳过 husky 安装的判断

* build: 剔除重复配置

* build: 优化 eslint 配置

---------

Co-authored-by: 贤心 <3277200+sentsim@users.noreply.github.com>
2025-11-10 16:03:37 +08:00

453 lines
12 KiB
HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title>树组件 - layui</title>
<link rel="stylesheet" href="../src/css/layui.css" media="all" />
</head>
<body class="layui-padding-5">
<div class="layui-btn-container">
<button type="button" class="layui-btn" lay-on="getChecked">
获取选中数据
</button>
<button type="button" class="layui-btn" lay-on="setChecked">
设置节点勾选
</button>
<button type="button" class="layui-btn" lay-on="reload">重载实例</button>
</div>
<div id="test1"></div>
<br />
<hr />
<br />
<div id="test2"></div>
<br />
<hr />
<br />
<div id="test3"></div>
<script src="../src/layui.js"></script>
<script>
layui.use(['tree', 'layer', 'util'], function () {
var $ = layui.$;
var tree = layui.tree;
var layer = layui.layer;
var util = layui.util;
var index = 100;
// 数据源
var data1 = [
{
title: 'A-1',
id: 1,
children: [
{
title: 'B-1-1',
id: 3,
href: '',
children: [
{
title: 'C-1-1-3',
id: 23,
children: [
{
title: 'D-1-1-3-1',
id: 24,
children: [
{
title: 'E-1-1-3-1-1',
id: 30
},
{
title: 'E-1-1-3-1-2',
id: 31
}
]
}
]
},
{
title: 'C-1-1-1',
id: 7,
checked: true,
children: [
{
title: 'D-1-1-1-1',
id: 15,
href: ''
}
]
},
{
title: 'C-1-1-2',
id: 8,
children: [
{
title: 'D-1-1-2-1',
id: 32
}
]
}
]
},
{
title: 'B-1-2',
id: 4,
spread: true,
children: [
{
title: 'C-1-2-1',
id: 9,
checked: true,
disabled: true
},
{
title: 'C-1-2-2',
id: 10
}
]
},
{
title: 'B-1-3',
id: 20,
children: [
{
title: 'C-1-3-1',
id: 21
},
{
title: 'C-1-3-2',
id: 22
}
]
}
]
},
{
title: 'A-2',
id: 2,
spread: true,
children: [
{
title: 'B-2-1',
id: 5,
spread: true,
children: [
{
title: 'C-2-1-1',
id: 11
},
{
title: 'C-2-1-2',
id: 12
}
]
},
{
title: 'B-2-2',
id: 6,
checked: true,
children: [
{
title: 'C-2-2-1',
id: 13
},
{
title: 'C-2-2-2',
id: 14,
disabled: true
}
]
}
]
},
{
title: 'A-3',
id: 16,
children: [
{
title: 'B-3-1',
id: 17,
fixed: true,
children: [
{
title: 'C-3-1-1',
id: 18
},
{
title: 'C-3-1-2',
id: 19
}
]
},
{
title: 'B-3-2',
id: 27,
children: [
{
title: 'C-3-2-1',
id: 28
},
{
title: 'C-3-2-2',
id: 29
}
]
}
]
}
];
// 数据源 2
var data2 = [
{
title: 'A-1',
id: 1,
field: 'name1',
checked: true,
spread: true,
children: [
{
title: 'B-1-1 可允许跳转',
id: 3,
field: 'name11',
href: '',
children: [
{
title: 'C-1-1-3',
id: 23,
field: '',
children: [
{
title: 'D-1-1-3-1',
id: 24,
field: '',
children: [
{ title: 'E-1-1-3-1-1', id: 30, field: '' },
{ title: 'E-1-1-3-1-2', id: 31, field: '' }
]
}
]
},
{
title: 'C-1-1-1',
id: 7,
field: '',
children: [
{
title: 'D-1-1-1-1 可允许跳转',
id: 15,
field: '',
href: ''
}
]
},
{
title: 'C-1-1-2',
id: 8,
field: '',
children: [{ title: 'D-1-1-2-1', id: 32, field: '' }]
}
]
},
{
title: 'B-1-2',
id: 4,
spread: true,
children: [
{ title: 'C-1-2-1', id: 9, field: '', disabled: true },
{ title: 'C-1-2-2', id: 10, field: '' }
]
},
{
title: 'B-1-3',
id: 20,
field: '',
children: [
{ title: 'C-1-3-1', id: 21, field: '' },
{ title: 'C-1-3-2', id: 22, field: '' }
]
}
]
},
{
title: 'A-2',
id: 2,
field: '',
spread: true,
children: [
{
title: 'B-2-1',
id: 5,
field: '',
spread: true,
children: [
{ title: 'C-2-1-1', id: 11, field: '' },
{ title: 'C-2-1-2', id: 12, field: '' }
]
},
{
title: 'B-2-2',
id: 6,
field: '',
children: [
{ title: 'C-2-2-1', id: 13, field: '' },
{ title: 'C-2-2-2', id: 14, field: '', disabled: true }
]
}
]
},
{
title: 'A-3',
id: 16,
field: '',
children: [
{
title: 'B-3-1',
id: 17,
field: '',
fixed: true,
children: [
{ title: 'C-3-1-1', id: 18, field: '' },
{ title: 'C-3-1-2', id: 19, field: '' }
]
},
{
title: 'B-3-2',
id: 27,
field: '',
children: [
{ title: 'C-3-2-1', id: 28, field: '' },
{ title: 'C-3-2-2', id: 29, field: '' }
]
}
]
}
];
// 数据源 3
var data3 = [
{
title: '节点 1',
id: '1000',
spread: true,
checked: true,
children: [
{
title: '节点 1-1',
id: '1001',
spread: true,
checked: false
},
{
title: '节点 1-2',
id: '1002',
spread: true,
checked: true,
children: [
{
title: '节点 1-2-1',
id: '1003'
}
]
}
]
},
{
title: '节点 2',
id: '2000'
}
];
// 实例 1
var treeInst = tree.render({
elem: '#test1',
data: data1,
click: function (obj) {
layer.msg(JSON.stringify(obj.data));
console.log(obj);
},
oncheck: function (obj) {
// console.log(obj);
},
operate: function (obj) {
var type = obj.type;
if (type == 'add') {
// ajax 操作,返回 key 值
return index++;
} else if (type == 'update') {
console.log(obj.elem.find('.layui-tree-txt').html());
} else if (type == 'del') {
console.log(obj);
}
},
showCheckbox: true, // 是否显示复选框
accordion: false, // 是否开启手风琴模式
onlyIconControl: true, // 是否仅允许节点左侧图标控制展开收缩
isJump: 0, // 点击文案跳转地址
edit: true // 操作节点图标
/*
customName: { // 自定义 data 字段名
children: 'nodes'
}
*/
});
console.log(treeInst);
console.log('flatData:', treeInst.config.flatData);
// 按钮事件
util.on({
getChecked: function (othis) {
var checkedData = tree.getChecked('test1');
layer.alert(JSON.stringify(checkedData), { shade: 0 });
console.log(checkedData);
},
setChecked: function () {
tree.setChecked('test1', [11, 12]);
},
reload: function () {
tree.reload('test1', {});
}
});
// 实例 2 - checked 测试
tree.render({
elem: '#test2',
data: data3,
showCheckbox: true
});
// 实例 3 - 关闭连接线,箭头展开风格
tree.render({
elem: '#test3',
data: data1,
// expandClick: false,
showLine: false, // 关闭连接线
click: function (obj, state) {
console.log(obj);
},
oncheck: function (obj, checked, child) {
if (checked) {
console.log(obj[0]);
}
},
onsearch: function (data, num) {
console.log(num);
},
dragstart: function (obj, parent) {
console.log(obj, parent);
},
dragend: function (state, obj, target) {
console.log(state, obj, target);
}
});
});
</script>
</body>
</html>