layui.define(['ztree', 'jquery','axios'], function (exports) {
"use strict";
// 定义模块名称为 'selectOrg'
let MOD_NAME = 'selectOrg',
// 引入 layui 的 jQuery 模块
$ = layui.jquery,
// 引入 layui 的 axios 模块
axios = layui.axios,
// 引入 layui 的 ztree 模块
ztree = layui.ztree;
// 定义 selectOrg 类
let selectOrg = function () {
// 初始化版本号为 '1.1.0'
this.v = '1.1.0';
};
selectOrg.prototype.render = function (opt) {
// 获取目标元素
let elem = $(opt.elem);
// 获取渲染完成后的回调函数,默认为空函数
let tableDone = opt.done || function(){};
// 设置表格高度,默认为315px
opt.height = opt.height || 315;
// 设置表格最小宽度,默认为300px
opt.width = opt.width || 300;
// 为元素绑定点击事件,防止事件冒泡
elem.off('click').on('click', function(e) {
// 阻止事件冒泡
e.stopPropagation();
// 如果页面上已经存在treeSelect元素,则返回false
if($('div.treeSelect').length >= 1){
return false;
}
// 计算treeSelect的top和left位置
let t = elem.offset().top + elem.outerHeight()+"px";
let l = elem.offset().left +"px";
// 构建treeSelect的HTML结构
let treeBox = '
';
// 如果opt.checked为真,则添加确定按钮
if(opt.checked){
treeBox += '
';
}
// 添加ztree容器
treeBox += '
';
treeBox += '
';
// 将treeBox转换为jQuery对象
treeBox = $(treeBox);
// 将treeBox添加到body元素中
$('body').append(treeBox);
let setting = {
// 定义树结构的基本数据格式
data: {
simpleData: {
enable: true // 启用简单数据模式
}
},
// 定义点击事件的回调函数
callback:{
onClick:function (event, treeId, treeNode) {
// 如果未选中任何节点
if(!opt.checked){
$('.treeSelect').remove(); // 移除树选择元素
opt.done([treeNode]); // 执行完成回调函数并传递当前点击的节点
}
}
},
// 定义树节点的选中状态
check:{
enable: opt.checked // 根据外部传入的 opt.checked 决定是否启用节点选中功能
}
};
// 使用 axios 获取组织树数据,并初始化 ztree
axios.get('org/tree').then(function (response) {
// 初始化 ztree,传入目标元素、配置和数据
ztree.init($("#ztree_xx"), setting, response.data);
// 获取 ztree 对象
let treeObj = ztree.getZTreeObj("ztree_xx");
if(opt.checked){
// 如果 opt.checked 为真,初始化 checked 节点
opt.selected.forEach(v=>{
// 根据 id 获取节点
let checkNodes = treeObj.getNodesByParam("id", v, null);
// 设置节点为选中状态
treeObj.checkNode(checkNodes[0], true);
});
// 确定按钮点击事件,获取选中的节点并处理
$('.tree-sure').click(function () {
// 获取所有选中的节点
let arr = treeObj.getCheckedNodes(true);
// 调用 done 方法处理选中的节点
opt.done(arr);
// 更新 opt.selected 为选中节点的 id 数组
opt.selected = arr.map(item=>item.id);
// 移除树框
treeBox.remove();
});
}
}).catch(function (error) {
// 捕获并打印错误信息
console.log(error);
});
// 监听文档的 mouseup 事件,用于移除树选择框
$(document).mouseup(function(e){
// 获取用户设置的容器元素和树选择框元素
let userSet_con = $(''+opt.elem+',.treeSelect');
// 如果点击的目标不是用户设置的容器或其子元素,则移除树选择框
if(!userSet_con.is(e.target) && userSet_con.has(e.target).length === 0){
treeBox.remove();
}
});
}); // elem end
// 导出模块,创建新的 selectOrg 实例
exports(MOD_NAME, new selectOrg());