1.分类.html
<%--<!DOCTYPE html>--%>
<%--<html lang="zh-cmn-Hans">--%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>树形结构</title>
<link rel="stylesheet" href="${root}/layuinew/css/layui.css">
</head>
<body style="padding: 20px;background-color: #F2F2F2;">
<div class="layui-row">
<div class=" layui-col-md6">
<div class="layui-card ">
<div class="layui-card-header" style="padding: 10px;">
<div class="search-item">
<a class="layui-btn search_btn">刷新</a>
<a class="layui-btn layui-btn-normal add_btn">添加</a>
</div>
</div>
<div class="layui-card-body">
<div id="test1"></div>
</div>
</div>
</div>
</div>
<script src="${root}/layuinew/layui.js"></script>
<script>
layui.use(['layer', 'tree'], function () {
var tree = layui.tree;
var layer = layui.layer;
layui.$.ajax({
url: "getCateList",
type: "post",
dataType: "json",
// data: {page: 1, size: 9999999},
success: function (data) {
if (data.code === 200) {
var d = getData(data.result.item);
//渲染模板
var inst = tree.render({
id: 'inst',
elem: '#test1', //绑定元素
showCheckbox: false, //是否显示复选框
edit: ['add', 'update', 'del'], // 是否开启节点的操作图标。默认 false。
text: { // 新增默认文本,目前支持以下设定:
defaultNodeName: '未命名', //节点默认名称
none: '无数据' //数据为空时的提示文本
},
// 数据源
data: d,
// 复选框被点击的回调
// 点击复选框时触发,返回的参数如下:
oncheck: function (obj) {
console.log(obj.data); //得到当前点击的节点数据
console.log(obj.checked); //得到当前节点的展开状态:open、close、normal
console.log(obj.elem); //得到当前节点元素
},
// 操作节点的回调
// 通过 operate 实现函数,对节点进行增删改等操作时,返回操作类型及操作节点
operate: function (obj) {
var type = obj.type; //得到操作类型:add、edit、del
var data = obj.data; //得到当前节点的数据
var elem = obj.elem; //得到当前节点元素
// console.log(type, data, elem);
console.log(data);
//Ajax 操作
var id = data.id; //得到节点索引id
var pid = data.parentId; //得到节点的parent_id
if (type === 'add') {
var params = {};
//新增子节点操作
if (pid === 0) {
params.categoryText = '未命名';
params.parentId = id;
params.subnode = 1;
//增加节点
layui.$.ajax({
url: "add",
type: "post",
dataType: "json",
data: params,
success: function (data) {
if (data.code === 200) {
// var pid = getData(data.result.result);
console.log(data);
} else {
console.log("error");
}
}
});
return "ok";
}
} else if (type === 'update') {
//修改节点
// console.log(elem.find('.layui-tree-txt').html()); //得到修改后的内容
var categoryText = elem.find('.layui-tree-txt').html();
// console.log("categoryText--->>> " + categoryText);
var params = {};
params.id = id;
params.categoryText = categoryText;
console.log(JSON.stringify(params))
layui.$.ajax({
url: "update",
type: "post",
dataType: "json",
data: params,
success: function (data) {
if (data.code === 200) {
console.log("更新成功");
} else {
console.log("更新失败");
}
}
})
} else if (type === 'del') {
//删除节点
layui.$.ajax({
url: "del",
type: "post",
dataType: "json",
data: {'id': id},
success: function (data) {
if (data.code === 200) {
console.log("删除成功");
} else {
console.log("删除失败");
}
}
})
}
}
});
}
}
});
// 刷新
function reload(){
layui.$.ajax({
url: "getCateList",
type: "post",
dataType: "json",
success: function (data) {
if (data.code === 200) {
var d = getData(data.result.item);
// 刷新
tree.reload('inst', {data: d});
}
}
});
}
// 刷新
layui.$(".search_btn").on("click", function () {
reload();
});
// 添加
layui.$(".add_btn").on("click", function () {
layer.prompt({
title: '请输入节点名称',
}, function (value, index) {
// alert(value); //得到value
//增加节点
layui.$.ajax({
url: "add",
type: "post",
dataType: "json",
data: {
categoryText: value,
parentId: 0,
subnode: 1,
},
success: function (data) {
if (data.code === 200) {
reload();
console.log(data);
} else {
console.log("error");
}
}
});
layer.close(index);
});
});
// 转换为2级数组,简洁版,只能转换为二级
function getData(item) {
var d = [], obj = {
length: 0
};
item.forEach(function (item) {
if (item.parentId in obj) {
obj[item.parentId].push(item);
} else {
obj.length++;
obj[item.parentId] = [item];
}
});
for (var prop in obj) {
for (var j = 0; j < obj[prop].length; j++) {
obj[prop][j].title = obj[prop][j].categoryText;
if (prop == 0) {
obj[prop][j].spread = true;
obj[prop][j].children = [];
d.push(obj[prop][j]);
} else {
var parent;
for (var k = 0; k < d.length; k++) {
if (d[k].id == prop) {
parent = d[k];
}
}
parent.children.push(obj[prop][j]);
}
}
}
return d;
}
});
</script>
</body>
</html>
category.js
layui.config({
base: ""
}).use(['form', 'layer', 'jquery', 'laypage', 'element'], function () {
var element = layui.element();
//一些事件监听
element.on('tab(demo)', function (data) {
console.log(data);
});
var form = layui.form(),
layer = layui.layer,
laypage = layui.laypage,
$ = layui.jquery;
// 后台获取的列表数据
var usersData = '';
// 后台获取的总数
var total = 0;
var sn = 0;
/**
* 获取查询的页面参数
*/
function getQueryObj(pageNum, pageSize) {
var data = {};
data.page = pageNum;
data.size = pageSize;
var categoryText = $("#categoryText").val();
if ($.trim(categoryText) != '') {
data.categoryText = categoryText;
}
return data;
}
/**
* 获取数据
*/
function queryData(queryObj) {
$.ajax({
url: "getCateList",
type: "post",
dataType: "json",
data: queryObj,
success: function (data) {
usersData = data.result.item;
total = data.result.count.count;
//渲染
sn = (queryObj.page - 1) * queryObj.size;
showDatas(queryObj);
}
})
}
initTable();
/**
* 初始化表格
*/
function initTable() {
// 获取页面查询数据的条件
var queryObj = getQueryObj(globalPageNum, globalPageSize);
// 查询数据
// queryData(queryObj);
load_category(0);
}
// 查询
$(".search_btn").click(function () {
var queryObj = getQueryObj(globalPageNum, globalPageSize);
var index = layer.msg('查询中,请稍候', {icon: 16, time: false, shade: 0.8});
// queryData(queryObj);
load_category(0);
layer.close(index);
})
// 添加产品
$(".pro_lib_btn").click(function () {
var index = layui.layer.open({
title: "添加",
type: 2,
content: "toadd",
btn: '返回' //只是为了演示
, yes: function () {
layui.layer.closeAll();
},
success: function (layero, index) {
}
})
//改变窗口大小时,重置弹窗的高度,防止超出可视区域(如F12调出debug的操作)
$(window).resize(function () {
layui.layer.full(index);
})
layui.layer.full(index);
})
// 操作
$("body").on("click", ".product_category_edit", function () { //编辑
var _this = $(this);
var id = _this.attr("data-id");
var index = layui.layer.open({
title: "修改",
type: 2,
content: "toedit?id=" + id,
btn: '返回',
yes: function () {
layui.layer.closeAll();
},
success: function (layero, index) {
// layui.layer.tips('点击此处返回用户列表', '.layui-layer-setwin .layui-layer-close', {
// tips: 3
// });
}
})
// 改变窗口大小时,重置弹窗的高度,防止超出可视区域(如F12调出debug的操作)
$(window).resize(function () {
layui.layer.full(index);
})
layui.layer.full(index);
})
$("body").on("click", ".product_detail", function () { //编辑
var _this = $(this);
var id = _this.attr("data-id");
var index = layui.layer.open({
title: "详情",
type: 2,
content: "detail?id=" + id,
btn: '返回',
yes: function () {
layui.layer.closeAll();
},
success: function (layero, index) {
// layui.layer.tips('点击此处返回用户列表', '.layui-layer-setwin .layui-layer-close', {
// tips: 3
// });
}
})
//改变窗口大小时,重置弹窗的高度,防止超出可视区域(如F12调出debug的操作)
$(window).resize(function () {
layui.layer.full(index);
})
layui.layer.full(index);
})
$("body").on("click", ".product_diable", function () { //删除
var _this = $(this);
var msg = "产品停用后设备中关联该产品的货道将不能再进行销售,是否确认停用!";
if (_this.attr("data-status") == "1") {
msg = "产品启用后设备中关联该产品的货道将进行销售,是否确认启用!";
}
var index = layer.confirm(msg, {icon: 3, title: '提示信息'}, function (index) {
layer.close(index);
index = layer.msg('操作中,请稍候', {icon: 16, time: false, shade: 0.8});
$.ajax({
url: "edit?id=" + _this.attr("data-id") + "&status=" + _this.attr("data-status"),
type: "post",
dataType: "json",
success: function (data) {
layer.close(index);
if (data.respCode == 200) {
layer.msg("操作成功!", {icon: 1});
//刷新父页面
location.reload();
} else {
layer.msg(data.respMsg, {icon: 2});
}
}, error: function (xmlLHttpRequest) {
layer.close(index);
layer.msg("操作失败!", {icon: 2});
}
});
});
});
/**
* 渲染数据
*/
function showDatas(queryObj) {
//渲染数据
function renderData(data) {
var dataHtml = '';
var currData = data;
if (currData.length != 0) {
for (var i = 0; i < currData.length; i++) {
dataHtml += '<tr>'
+ '<td>' + currData[i].id + '</td>'
+ '<td>' + currData[i].categoryText + '</td>'
+ '<td>' + currData[i].sort + '</td>'
+ '<td>';
dataHtml += '<a class="layui-btn layui-btn-mini product_category_edit" lay-event="edit" data-id="' + data[i].id + '">修改</a>';
dataHtml += '<a class="layui-btn layui-btn-primary layui-btn-mini product_detail" lay-event="detail" data-id="' + data[i].id + '">查看</a>';
dataHtml += '</td>';
dataHtml += '</tr>';
}
} else {
dataHtml = '<tr><td colspan="8">暂无数据</td></tr>';
}
return dataHtml;
}
//分页
var nums = globalPageSize; //每页出现的数据量
//重绘数据
$(".content_body").html(renderData(usersData));
$('.preview-img').each(function (i, e) {
var previewUrl = $(this).find('img').attr('src');
$(this).on('click', function () {
layer.open({
type: 1 //Page层类型
, offset: ['100px']
, area: ['460px', '540px']
, shade: 0.3 //遮罩透明度
, title: '图片预览'
, anim: 3 //0-6的动画形式,-1不开启
, maxmin: false //禁止全屏最小化
// , move: false //禁止拖拽
, resize: false //禁止改变大小
, content: '<div class="preview-size"><img class="keepShape" src="' + previewUrl + '"></div>'
});
});
})
// form.render();
laypage({
cont: "page",
pages: Math.ceil(total / nums),
skip: true,
curr: queryObj.page,
jump: function (obj, first) {
if (!first) {
var queryObj = getQueryObj(obj.curr, nums);
queryData(queryObj);
}
}
})
initTableBodyHeight();
}
initTableBodyHeight();
$(window).resize(function () {
initTableBodyHeight();
})
});
// 加载
function load_category(parentId) {
let params = {};
params.parentId = isNull(parentId) ? 0 : parseInt(parentId);
console.log(params);
$.ajax({
type: "post",
url: "getCateList",
data: params,
dataType: "json",
success: function (data) {
if (data.code == 200) {
// alert("data===>>> " + data.toString())
// layer.msg("操作成功!", {icon: 1});
console.log('A:' + JSON.stringify(data.result));
let item = data.result.item;
let html = template('category_content', {items: item});
$('.category_content').html(html);
//刷新父页面
// location.reload();
// showDatas(queryObj);
} else {
console.log('ERR:' + JSON.stringify(data.respMsg));
//ayer.msg(data.respMsg, {icon: 2});
}
}, error: function (xmlLHttpRequest) {
layer.close(index);
layer.msg("操作失败!", {icon: 2});
}
});
}