Files
YwxAppThink/public/static/backend/modules/navbar.js
T

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', {});
});