111 lines
3.8 KiB
JavaScript
111 lines
3.8 KiB
JavaScript
/*
|
|
* @Author: YwxApp <ywx@ywxapp.cn>
|
|
* @Description: 前台主导航菜单管理(后台)
|
|
*/
|
|
layui.define(['http', 'auth', 'table', 'treeTable'], function (exports) {
|
|
var $ = layui.$,
|
|
table = layui.table,
|
|
form = layui.form,
|
|
layer = layui.layer,
|
|
laytpl = layui.laytpl,
|
|
http = layui.http,
|
|
auth = layui.auth;
|
|
|
|
auth.init((layui.data('backend').permission) || []);
|
|
|
|
// 两级树拍平成单表,子项缩进展示
|
|
function flatTree(list, level) {
|
|
var rows = [];
|
|
layui.each(list || [], function (i, item) {
|
|
item._level = level;
|
|
item._title = (level > 0 ? ' ├ ' : '') + item.title;
|
|
rows.push(item);
|
|
if (item.child && item.child.length) {
|
|
rows = rows.concat(flatTree(item.child, level + 1));
|
|
}
|
|
});
|
|
return rows;
|
|
}
|
|
|
|
var dataTable = table.render({
|
|
elem: '#dataTable',
|
|
url: 'index',
|
|
page: false,
|
|
toolbar: '#tableBar',
|
|
cols: [[
|
|
{ field: 'id', title: 'ID', width: 70, align: 'center' },
|
|
{ field: 'title', title: '菜单名称', minWidth: 180, templet: function (d) { return d._title || d.title; } },
|
|
{ field: 'parent_id', title: '层级', width: 90, align: 'center', templet: '#parentTpl' },
|
|
{ field: 'url', title: '链接', minWidth: 200 },
|
|
{ field: 'sort', title: '排序', width: 80, align: 'center' },
|
|
{ field: 'status', title: '状态', width: 110, align: 'center', templet: '#statusTpl' },
|
|
{ title: '操作', width: 200, align: 'center', toolbar: '#dataBar', fixed: 'right' }
|
|
]],
|
|
response: { statusCode: 0 },
|
|
parseData: function (res) {
|
|
return { code: res.code, msg: res.msg, count: res.count || 0, data: flatTree(res.data, 0) };
|
|
},
|
|
done: function () {
|
|
auth.render();
|
|
}
|
|
});
|
|
|
|
// 状态开关
|
|
form.on('switch(statusSwitch)', function (obj) {
|
|
var id = obj.value;
|
|
var status = obj.elem.checked ? 1 : 0;
|
|
http.post('status', { id: id, status: status }).then(function (res) {
|
|
if (res.code !== 0) { layer.msg(res.msg || '操作失败'); dataTable.reload(); }
|
|
});
|
|
});
|
|
|
|
// 工具条(新建)
|
|
table.on('toolbar(dataTable)', function (obj) {
|
|
if (obj.event === 'dataCreate') { openForm({}); }
|
|
});
|
|
|
|
// 行操作
|
|
table.on('tool(dataTable)', function (obj) {
|
|
var d = obj.data;
|
|
if (obj.event === 'update') { openForm(d); }
|
|
else if (obj.event === 'addChild') { openForm({ parent_id: d.id }); }
|
|
else if (obj.event === 'delete') {
|
|
layer.confirm('确定删除该菜单吗?', function (idx) {
|
|
http.delete('delete', { id: d.id }).then(function (res) {
|
|
if (res.code === 0) { layer.close(idx); dataTable.reload(); }
|
|
else { layer.msg(res.msg || '操作失败'); }
|
|
});
|
|
});
|
|
}
|
|
});
|
|
|
|
// 表单弹窗:拉取一级菜单作为父级选项
|
|
function openForm(data) {
|
|
http.get('index').then(function (res) {
|
|
var parents = [];
|
|
layui.each((res.data || []), function (i, p) {
|
|
if (p.parent_id == 0) parents.push(p);
|
|
});
|
|
var html = laytpl($('#dataFormTpl').html()).render($.extend({ parents: parents }, data));
|
|
layer.open({
|
|
type: 1, title: data.id ? '编辑菜单' : '新建菜单',
|
|
area: ['480px', 'auto'], content: html,
|
|
btn: ['保存', '取消'],
|
|
success: function () { form.render(); },
|
|
yes: function (idx, layero) {
|
|
var field = form.val('wxapp-form-submit') || {};
|
|
// 用表单序列化兜底
|
|
var fd = {};
|
|
$(layero).find('form').serializeArray().map(function (x) { fd[x.name] = x.value; });
|
|
http.post(data.id ? 'update' : 'save', fd).then(function (r) {
|
|
if (r.code === 0) { layer.close(idx); dataTable.reload(); }
|
|
else { layer.msg(r.msg || '操作失败'); }
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
exports('navbar', {});
|
|
});
|