/* * @Author: YwxApp * @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', {}); });