sysmodule.js 12.9 KB
layui.config({
    base: "/js/"
}).use(['form', 'vue', 'ztree', 'layer', 'jquery', 'table', 'droptree', 'hhweb', 'utils'], function () {
    var form = layui.form,
        layer = layui.layer,
        $ = layui.jquery,
        areaName = "base",
        tableName = "UserSession",
        table = layui.table,
        hhweb = layui.hhweb;

    var app = {
        data: {
            menusMainElem: $("#menusMain"),
            menuElem: $("#menuElem"),

            tableMainObj: null,
            tableMenus: null,
            mainList: "mainList",
            menuList: "menuList",

            treeElem: $("#tree"),
            treeObj: null,
            treeSetting: {
                view: { selectedMulti: false },
                data: {
                    key: {
                        name: 'Name',
                        title: 'Name'
                    },
                    simpleData: {
                        enable: true,
                        idKey: 'Id',
                        pIdKey: 'ParentId',
                        rootPId: 'null'
                    }
                },
                callback: {
                    onClick: function (event, treeId, treeNode) {
                        app.data.tableMainObj = app.methods.initTableMain({ pId: treeNode.Id, parentId: treeNode.ParentId, cascadeId: treeNode.CascadeId });
                    }
                }
            }
        },
        methods: {
            initMenu: () => {
                app.data.menusMainElem.loadMenus("SysModule", 1);
                app.data.menuElem.loadMenus("SysModule", 2);
            },
            initTree: (falg = true) => {
                $.getJSON(`/${areaName}/${tableName}/GetModules`, function (json) {
                    app.data.treeObj = $.fn.zTree.init(app.data.treeElem, app.data.treeSetting);
                    json.push({ Name: "根节点", Id: null, ParentId: "" });
                    app.data.treeObj.addNodes(null, json);
                    app.data.treeObj.expandAll(true);
                    if (falg) app.data.tableMainObj = app.methods.initTableMain({ pId: "" },);
                });
                app.data.treeElem.height($("div.layui-table-view").height() - 20);
            },
            initTableMain: (config) => {
                let opt = {
                    url: `/${areaName}/${tableName}/GetModulesTable`,
                    where: config,
                    page: { curr: 1 }
                }
                app.data.tableMainObj = app.methods.initTable(app.data.mainList, opt);
            },

            initTableMenu: (config) => {
                let opt = {
                    url: `/${areaName}/SysModule/LoadMenus`,
                    where: config
                }
                return app.methods.initTable(app.data.menuList, opt);
            },
            initFrom: () => {
                layui.droptree("/base/UserSession/GetModules", "#ParentName", "#ParentId", false);
            },

            initTable: (elem, opt) => {
                var configOpt = {
                    method: "post"
                };
                $.extend(configOpt, opt);
                table.reload(elem, configOpt);
            }
        },
        init: () => {
            app.methods.initTree();
            app.methods.initMenu();
            app.methods.initFrom();
        }
    }

    app.init();

    //新增(编辑)模块对话框
    let menuModelApp = null;
    var editDlg = function () {
        menuModelApp = new Vue({
            el: "#formEdit"
        });

        var update = false;  //是否为更新
        var show = function (data) {
            var title = update ? "编辑" : "新增";
            let index = layer.open({
                title: title,
                area: ["580px", "400px"],
                type: 1,
                content: $('#divEdit'),
                success: function () {
                    menuModelApp.$set('$data', data);

                    $(":radio[name='IsShow'][value='" + data.IsShow + "']").prop("checked", "checked");
                    form.render();
                }
            });
            var url = "/base/SysModule/Add";
            if (update) url = "/base/SysModule/Update";
            //提交数据
            form.on('submit(formSubmit)', function (data) {
                $.post(url, data.field, function (data) {
                    layer.msg(data.Message, { time:5000 });
                    if ((!update) && data.Code == 200) {  //新增成功要刷新左边的树
                        app.methods.initTree();
                    }
                    if (data.Code == 200) {
                        app.methods.initTableMain();
                        layer.close(index);
                    }
                }, "json");
                return false;
            });
        }
        return {
            add: function () { //弹出新增
                update = false;
                show({
                    Id: "",
                    SortNo: 1,
                    IconName: '',
                    IsShow: 1
                });
            },
            update: function (data) { //弹出编辑框
                update = true;
                show(data);
            }
        };
    }();

    //新增菜单对话框
    let menuApp = null;
    var meditDlg = function () {
        menuApp = new Vue({
            el: "#mfromEdit"
        });

        var update = false;  //是否为更新
        var show = function (data) {
            var title = update ? "编辑菜单" : "新增菜单";
            let index = layer.open({
                title: title,
                area: ["580px", "550px"],
                type: 1,
                content: $('#divMenuEdit'),
                success: function () {
                    menuApp.$set('$data', data);
                }
            });
            var moduleId = data.ModuleId
            var url = "/base/SysModule/AddMenu";
            if (update) url = "/base/SysModule/UpdateMenu";
            //提交数据
            form.on('submit(mformSubmit)', function (data) {
                $.post(url, data.field, function (data) {
                    if (data.Code == 200) {
                        layer.msg(data.Message, { time: 4000 });
                        layer.close(index);
                        app.methods.initTableMenu({ moduleId: moduleId });
                    }
                    else {
                        layer.alert(data.Message, { icon: 2, shadeClose: true, title: "错误信息" });
                    }

                }, "json");
                return false;
            });
        }
        return {
            add: function (moduleId) { //弹出新增
                update = false;
                show({
                    Id: "",
                    ModuleId: moduleId,
                    Sort: 1,
                    AreaMenus: 1
                });
            },
            update: function (data) { //弹出编辑框
                update = true;
                show(data);
            }
        };
    }();

    //监听模块表格内部按钮
    table.on('tool(list)', function (obj) {
        var data = obj.data;
        if (obj.event === 'detail') {      //查看
            app.methods.initTableMenu({ moduleId: data.Id });
        }
    });

    //监听页面主按钮操作
    var active = {
        //删除模块
        btnDel: function () {
            var checkStatus = table.checkStatus('mainList'),
                data = checkStatus.data;

            hhweb.del("/base/SysModule/Delete", data.map(function (e) { return e.Id; }), function () {
                app.methods.initTree();
            });
        },
        btnDelMenu: function () {
            var checkStatus = table.checkStatus('menuList'),
                data = checkStatus.data;
            hhweb.del("/base/SysModule/DelMenu", data.map(function (e) { return e.Id; }), app.methods.initTableMenu);
        },
        //新增模块
        btnAdd: function () {
            editDlg.add();
        },
        btnAddMenu: function () {
            var checkStatus = table.checkStatus('mainList'),
                data = checkStatus.data;
            if (data.length != 1) {
                layer.msg("请选择一个要新增菜单的模块后新增菜单!");
                return;
            }
            meditDlg.add(data[0].Id);
        },
        //编辑模块
        btnEdit: function () {
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            if (data.length != 1) {
                layer.alert("请选择编辑的行,且同时只能编辑一行", { icon: 2, shadeClose: true, title: "错误信息" });
                return;
            }
            editDlg.update(data[0]);
        },
        btnAddCopyMenuModel: function () {
            var checkStatus = table.checkStatus('mainList'),
                data = checkStatus.data;
            if (data.length != 1) {
                layer.alert("请选择编辑的行,且同时只能复制一行", { icon: 2, shadeClose: true, title: "错误信息" });
                return;
            }
            editDlg.add();
            var dataAll = table.cache["mainList"];
            var maxSortNo = Math.max.apply(Math, dataAll.map(function (o) { return o.SortNo; }));
            data[0].SortNo = maxSortNo + 10;
            setTimeout(() => {
                menuModelApp.$set('$data', data[0]);

                $(":radio[name='IsShow'][value='" + data.IsShow + "']").prop("checked", "checked");
                form.render();
            }, 400);
        },
        btnAddCopyMenu: function () {
            var checkStatus = table.checkStatus('menuList'),
                data = checkStatus.data;
            if (data.length != 1) {
                layer.msg("请选择编辑的菜单");
                return;
            }
            meditDlg.add(data[0].ModuleId);
            var dataAll = table.cache["menuList"];
            var maxSort = Math.max.apply(Math, dataAll.map(function (o) { return o.Sort; }));
            setTimeout(() => {
                data[0].Sort = maxSort + 10;
                data[0].Id = "";
                menuApp.$set('$data', data[0]);
            }, 400);
        },

        btnEditMenu: function () {
            var checkStatus = table.checkStatus('menuList'),
                data = checkStatus.data;
            if (data.length != 1) {
                layer.msg("请选择编辑的菜单");
                return;
            }
            meditDlg.update(data[0]);
        },

        //常用按钮
        btnCommon: function () {
            var checkStatus = table.checkStatus('mainList')
                , data = checkStatus.data;
            if (data.length != 1) {
                layer.alert("请选择编辑的行,且同时只能编辑一行", { icon: 2, shadeClose: true, title: "错误信息" });
                return;
            }
            var menuId = data[0].Id;
            //layer.msg('一段提示信息');
            layer.open({
                type: 2,
                title: '常用按钮配置',
                shadeClose: true,
                area: ['500px', '300px'],
                content: `./CommonBtn?moduleId=${menuId}`,
                cancel: function (index, layero) {
                    app.methods.initTableMenu({ moduleId: data.Id });
                }
            });
        },

        search: function () {   //搜索
            app.methods.initTableMain({ key: $('#key').val() });
        },
        btnRefresh: function () {
            app.methods.initTableMain();
        }
    };

    $('.toolList .layui-btn').on('click', function () {
        var type = $(this).data('type');
        active[type] ? active[type].call(this) : '';
    });

    var IconNameindex;
    var IconInputObj;
    $('.IconName').on('dblclick', function () {
        IconInputObj = this;
        IconNameindex = layer.open({
            maxmin: true,
            title: "图标选择",
            area: ["500px", "400px"],
            type: 1,
            content: $('#divIconNameEdit'),
            success: function (layero, index) {
                layer.full(index);
            }
        });
    });

    $('#mfromIconNameEdit .iconfont-list .icon').on('click', function () {
        var type = $(this).next().next().html();
        $(IconInputObj).val("&" + type.replace("&", ""));
        layer.close(IconNameindex);
    });

    var Classindex;
    var ClassInputObj;
    $('.Class').on('dblclick', function () {
        ClassInputObj = this;
        Classindex = layer.open({
            maxmin: true,
            title: "样式选择",
            area: ["500px", "400px"],
            type: 1,
            content: $('#divClassEdit'),
            success: function (layero, index) {
                layer.full(index);
            }
        });
    });

    $('#mfromClassEdit .iconfont-list .layui-btn').on('click', function () {
        var type = $(this).next().html();
        $(ClassInputObj).val(type);
        layer.close(Classindex);
    });
    //监听页面主按钮操作 end
})