assignModule.js 8.81 KB
layui.config({
    base: "/js/"
}).use(['form', 'I18nPage', 'hhweb', 'vue', 'ztree', 'layer', 'jquery', 'utils', 'table'], function () {
    var layer = (top == undefined || top.layer === undefined) ? layui.layer : top.layer,
        $ = layui.jquery,
        I18nPage = layui.I18nPage,
        table = layui.table,
        hhweb = layui.hhweb;

    var id = $.getUrlParam("id");      //待分配的id
    var type = $.getUrlParam("type");  //待分配的类型
    var menuType = $.getUrlParam("menuType");  //待分配菜单的类型
    var menudata = new Array();

    var cols_arr = I18nPage.GetI18nTable(
        {
            TableNo: "base-SysModuleAssign",
        }
    );

    var config = {};

    var mainList = {
        Render: function (options) {
            if (options != undefined) {
                $.extend(config, options);
            }
            mainList.Table = table.render({
                elem: '#mainList'
                , url: '/base/SysModule/LoadMenus'
                , method: "post"
                , page: true //开启分页
                , cols: hhweb.ColumnSetting('mainList', cols_arr)
                , id: 'mainList'
                , limit: 20
                , limits: [20, 50, 100, 200, 500, 1000]
                , toolbar: false
                , height: 'full-15'
                , cellMinWidth: 80
                , size: 'sm'
                , where: config
                , page: {
                    curr: 1 //重新从第 1 页开始
                }
                , done: function (res) {
                    var url = "/base/SysModule/LoadMenusForUser";
                    if (type.indexOf("Role") != -1) {
                        url = "/base/SysModule/LoadMenusForRole";
                    }

                    $.ajax(url, {
                        async: true
                        , type: "post"
                        , data: {
                            firstId: id
                            , moduleId: config.moduleId
                        }
                        , dataType: "json"
                        , success: function (result) {
                            menudata = new Array();
                            //循环所有数据,找出对应关系,设置checkbox选中状态
                            for (var i = 0; i < res.data.length; i++) {
                                //获取当前所有菜单的ID数组
                                menudata[i] = res.data[i].Id;

                                for (var j = 0; j < result.length; j++) {
                                    if (res.data[i].Id != result[j].Id) continue;

                                    //这里才是真正的有效勾选
                                    res.data[i]["LAY_CHECKED"] = true;
                                    //找到对应数据改变勾选样式,呈现出选中效果
                                    var index = res.data[i]['LAY_TABLE_INDEX'];
                                    $('.layui-table-fixed-l tr[data-index=' + index + '] input[type="checkbox"]').prop('checked', true);
                                    $('.layui-table-fixed-l tr[data-index=' + index + '] input[type="checkbox"]').next().addClass('layui-form-checked');
                                }
                            }

                            //如果构成全选
                            var checkStatus = table.checkStatus('mainList');
                            if (checkStatus.isAll) {
                                $('.layui-table-header th[data-field="0"] input[type="checkbox"]').prop('checked', true);
                                $('.layui-table-header th[data-field="0"] input[type="checkbox"]').next().addClass('layui-form-checked');
                            }
                        }
                    });

                    //分配及取消分配
                    table.on('checkbox(mainList)', function (obj) {
                        if (obj.checked == true) {
                            obj.tr.addClass('layui-table-click');
                        } else {
                            obj.tr.removeClass('layui-table-click');
                        }

                        var editdata = GetObjData(obj);
                        var url = "/base/SysRelevance/Assign";
                        if (!obj.checked) {
                            url = "/base/SysRelevance/UnAssign";
                        }
                        $.post(url, { type: menuType, firstId: id, secIds: editdata }
                            , function (data) {
                                layer.msg(data.Message);
                            }
                            , "json");
                    });
                }
            });

            return mainList.Table;
        },
        Load: function (options) {
            if (options != undefined) {
                $.extend(config, options);
            }
            if (mainList.Table == undefined) {
                mainList.Table = this.Render(options);
                return;
            }
            table.reload('mainList', {
                page: {
                    curr: 1 //重新从第 1 页开始
                }
                , where: config
            });
        }
    };

    var setting = {
        view: { selectedMulti: true },
        check: {
            enable: true,
            chkStyle: "checkbox",
            chkboxType: { Y: "", N: "" } //去掉勾选时级联
            //TODO 完善勾选级联
            //chkboxType: { Y: "ps", N: "s" }
        },
        data: {
            key: {
                name: 'Name',
                title: 'Name'
            },
            simpleData: {
                enable: true,
                idKey: 'Id',
                pIdKey: 'ParentId',
                rootPId: 'null'
            }
        },
        callback: {
            onClick: function (event, treeId, treeNode) {
                mainList.Load({ moduleId: treeNode.Id });
            },
            onCheck: function (event, treeId, treeNode) {
                var url = "/base/SysRelevance/Assign";
                if (!treeNode.checked) {
                    url = "/base/SysRelevance/UnAssign";
                }
                $.post(url, { type: type, firstId: id, secIds: [treeNode.Id] }
                    , function (data) {
                        layer.msg(data.Message);
                    }
                    , "json");
                //TODO 完善勾选级联
                //if (treeNode.parentTId != null) {
                //    $.post(url, { type: type, firstId: id, secIds: [treeNode.Id] }
                //        , function (data) {
                //            layer.msg(data.Message);
                //        }
                //        , "json");
                //}
            }
        }
    };
    $.getJSON('/base/UserSession/GetModules', function (json) {
        var zTreeObj = $.fn.zTree.init($("#tree"), setting);
        zTreeObj.addNodes(null, json);
        //如果该用户已经分配模块了,则设置相应的状态
        var url = "/base/SysModule/LoadForUser";
        if (type.indexOf("Role") != -1) {
            url = "/base/SysModule/LoadForRole";
        }
        $.getJSON(url, { firstId: id }
            , function (data) {
                $.each(data,
                    function (i) {
                        var that = this;
                        var node = zTreeObj.getNodeByParam("Id", that.Id, null);
                        zTreeObj.checkNode(node, true, false);
                    });
            });

        zTreeObj.expandAll(true);
    });

    $("#tree").height($(window).height() - 20);

    function GetObjData(obj) {
        var editdata;
        if (obj.type == "one") {
            if (obj.data.Id == undefined) {
                if (obj.checked) {
                    editdata = menudata
                }
                else {
                    var checkStatus = table.checkStatus('mainList');
                    var data = checkStatus.data; //获取选中行的数据
                    if (data.length == 0) {
                        editdata = menudata
                    }
                    else {
                        var tmpary = new Array();
                        var datacopy = new Array();
                        for (var i = 0; i < data.length; i++) {
                            datacopy[i] = data[i].Id;
                        }
                        for (var i = 0; i < menudata.length; i++) {
                            if (datacopy.indexOf(menudata[i]) < 0) {
                                tmpary[tmpary.length] = menudata[i];
                            }
                        }
                        editdata = tmpary;
                    }
                }
            }
            else {
                editdata = obj.data.Id;
            }
        }
        else {
            editdata = menudata
        }

        return editdata;
    }
})