JSTree + IFrame 布局

用JSTree做的Demo,大概功能包括:

1、树的刷新功能,定位功能

2、右键菜单,根据不同节点显示不同的功能

3、左右联动

效果图

HTML页面

<!DOCTYPE html>
<html>

<head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">


    <title>品牌规则管理页面</title>

    <link href="~/Content/HJS/css/bootstrap.min.css?v=3.3.6" rel="stylesheet">
    <link href="~/Content/HJS/css/font-awesome.css?v=4.4.0" rel="stylesheet">

    <!-- jqgrid-->
    <link href="~/Content/HJS/css/plugins/jqgrid/ui.jqgrid.css" rel="stylesheet">
    <link href="~/Content/HJS/css/plugins/iCheck/custom.css" rel="stylesheet">
    <link href="~/Content/HJS/css/animate.css" rel="stylesheet">
    <link href="~/Content/HJS/css/style.css?v=4.1.2" rel="stylesheet">
    <link href="~/Content/HJS/css/plugins/jsTree/style.min.css" rel="stylesheet" />


    <style>
        .top-heading {
            border-color: #c5c5c5;
            border-width: 1px;
            border-style: solid;
            background: white;
            padding: .22em .2em .28em;
            cursor: default;
            display: block;
            margin-bottom: 2px;
            border-top: none;
        }

        .top-title {
            height: 29px;
            line-height: 30px;
            padding: 0 11px 0 5px;
            font-size: 16px;
            font-weight: bold;
            color: #FE9301;
        }

        ::-webkit-scrollbar-track {
            background-color: #F5F5F5;
        }

        ::-webkit-scrollbar {
            height: 6px;
            background-color: #F5F5F5;
        }

        ::-webkit-scrollbar-thumb {
            background-color: #999;
        }

        .ui-jqgrid tr.jqgrow td {
            white-space: normal !important;
            height: auto;
            word-break: break-all;
        }

        .jstree-contextmenu {
            z-index: 200;
        }

        .green {
            color: #5cb85c;
        }

        .yellow {
            color: #ed9c28;
        }

        .red {
            color: #c9302c;
        }

        .blue {
            color: #31b0d5;
        }
    </style>
</head>

<body class="gray-bg">
    <div class="wrapper wrapper-content  animated fadeInRight" style="padding: 0px;">
        <div class="row">
            <div class="col-sm-3" style="margin: 0px; padding: 0px;">
                <div class="ibox float-e-margins" style="margin-bottom: 0px;">
                    <div class="ibox-title" style="padding: 0px; padding-top: 5px; border-top: none;">
                        <table style="width: 100%; height: 35px;">
                            <tr>
                                <td style="text-align: left; padding-left: 25px; width: 90px;">规则年度:</td>
                                <td style="padding-right: 5px;">
                                    <select id="dopYear" onchange="changeYear();" class="editable inline-edit-cell form-control customelement">
                                    </select>
                                </td>
                            </tr>
                        </table>
                    </div>
                    <div class="ibox-content" style="padding: 0px; overflow: auto;">
                        <div style="background-color: #f9f9f9; padding-left: 25px;">提示:右键以下节点做增删改操作</div>
                        @*左边的规则*@
                        <div id="ruleTree" style="margin-left: 20px; margin-top: 10px;">
                        </div>

                    </div>
                </div>
            </div>
            <div class="col-sm-9" style="margin: 0px; padding-left: 5px;">
                <div class="ibox float-e-margins" style="margin-bottom: 0px;">
                    <div class="ibox-title" style="padding: 0px; padding-top: 5px; border-top: none;">
                        <table style="width: 100%; height: 35px;">
                            <tr>
                                <td style="text-align: left; padding-left: 10px;">规则设置:<span id="topTitle"></span></td>
                                <td style="padding-right: 5px;"></td>
                            </tr>
                        </table>
                    </div>
                    <div class="ibox-content" style="padding: 0px;">

                        <iframe id="main" name="main" style="width: 100%" src="" marginwidth="1" marginheight="1" scrolling="no" frameborder="0"></iframe>

                    </div>
                </div>
            </div>
        </div>


    </div>
    <!-- 全局js -->
    <script src="~/Content/HJS/js/jquery.min.js?v=2.1.4"></script>
    <script src="~/Content/HJS/js/bootstrap.min.js?v=3.3.6"></script>
    <!-- Peity -->
    <script src="~/Content/HJS/js/plugins/peity/jquery.peity.min.js"></script>
    <!-- layer javascript -->
    <script src="~/Content/HJS/js/plugins/layer/layer.min.js?v=1.1"></script>
    <!-- jqGrid -->
    <script src="~/Content/HJS/js/plugins/jqgrid/i18n/grid.locale-cn.js?0820"></script>
    <script src="~/Content/HJS/js/plugins/jqgrid/jquery.jqGrid.min.js?0820"></script>
    <script src="~/Content/HJS/js/plugins/jsTree/jstree.min.js"></script>
    <script src="~/Content/HJS/js/plugins/layer/laydate/laydate.js"></script>
    <!-- 主数据JS -->
    <script src="~/Areas/DSF20/Content/dsf20.main.js"></script>
    <script type="text/javascript">
        //加载中控件
        var loading = null;
        var isFirstLoad = true;
        //刷新前的状态
        var refreshState = "";
        //要打开的ID
        var refreshSId = "";
        //开始结束的插件
        var endDate = null;
        var startDate = null;
        //树的数据
        var treeData = null;

        $(function () {
            var mainHeight = $("body").height() - 50 - 3;
            $(".ibox-content").height(mainHeight);
            $("#main").height(mainHeight);

            //绑定年份
            for (var i = 2021; i <= new Date().getFullYear() + 2; i++) {
                $("#dopYear").append("<option value=\"" + i + "\">" + i + "</option>");
            }
            $("#dopYear").val(new Date().getFullYear());

            $('#ruleTree').jstree({
                "plugins": ["contextmenu"],
                "contextmenu": contentMenu(),
                'core': {
                    'check_callback': true,
                    'data': function (node, callback) {
                        $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/GetTreeData", { year: $("#dopYear").val() }, function (data) {

                            for (var i = 0; i < data.length; i++) {
                                //设置图标
                                var item = data[i];
                                if (item.rule.DBType == dsf20Main.RuleType.Company) {
                                    item.icon = "glyphicon glyphicon-home yellow";//首页
                                }
                                else if (item.rule.DBType == dsf20Main.RuleType.Rule) {
                                    item.text += "-" + item.rule.UsedTypeCN;
                                    //规则名-状态
                                    switch (item.rule.DBState) {
                                        case dsf20Main.DBState.Delete://删除
                                            item.icon = "glyphicon glyphicon-remove";
                                            break;
                                        case dsf20Main.DBState.Effect://启用
                                            item.icon = "glyphicon glyphicon-play green";
                                            break;
                                        case dsf20Main.DBState.Normal://停用
                                            item.icon = "glyphicon glyphicon-stop red";
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                else {
                                    item.icon = "glyphicon glyphicon-file blue";//其他节点
                                }


                            }
                            treeData = data;
                            callback.call(this, data);
                            var selectId = data[0].id;
                            if (data.length > 1) {
                                selectId = data[1].id;
                            }
                            if (isFirstLoad) {
                                setTimeout(function () {
                                    $('#ruleTree').jstree('select_node', selectId);
                                    $('#ruleTree').jstree('open_node', selectId);
                                }, 200);
                                isFirstLoad = false;
                            }
                            if (refreshState == "add") {
                                setTimeout(function () {
                                    $('#ruleTree').jstree('deselect_all');
                                    $('#ruleTree').jstree('close_all');

                                    $('#ruleTree').jstree('select_node', refreshSId);
                                    $('#ruleTree').jstree('open_node', refreshSId);
                                    refreshState = "";
                                    refreshSId = "";
                                }, 200);

                            }

                        });
                        //[
                        //    { "id": "0", "parent": "#", "text": "根目录" },
                        //    { "id": "1", "parent": "0", "text": "2021-Q1-新车" },// "state": { "opened": true, "selected": true }
                        //    { "id": "1.1", "parent": "1", "text": "奥迪" },
                        //    { "id": "1.2.1", "parent": "1.1", "text": "股东方" },
                        //    { "id": "1.2.1.1", "parent": "1.2.1", "text": "A001" },
                        //    { "id": "1.2", "parent": "1", "text": "一汽大众" },
                        //    { "id": "1.3", "parent": "1", "text": "上汽大众" },
                        //    { "id": "1.4", "parent": "1", "text": "进口车" },
                        //    { "id": "1.5", "parent": "1", "text": "保时捷" },
                        //    { "id": "1.6", "parent": "1", "text": "兰博基尼和宾利" },
                        //    { "id": "1.7", "parent": "1", "text": "捷达" },
                        //    { "id": "2", "parent": "0", "text": "2021-Q1-二手车" },
                        //]
                    }
                }
            }).on('changed.jstree', function (e, data) {
                //所有的选中都会进这里
                var node = $('#ruleTree').jstree(true).get_selected(true)[0];
                if (node == null) {
                    return;
                }
                if (node.original.rule.DBType == dsf20Main.RuleType.Rule || node.original.rule.DBType == dsf20Main.RuleType.Param) {
                    //显示名字
                    var name = "";
                    for (var i = node.parents.length-3; i >=0 ; i--) {
                        
                        if (i == node.parents.length - 3) {
                            name += getNameById(node.parents[i]);
                        } else {
                            name += "&nbsp;>&nbsp;" + getNameById(node.parents[i]);
                        }
                    }
                    if (name == "") {
                        name +=  node.text;
                    }
                    else {
                        name += "&nbsp;>&nbsp;" + node.text;
                    }
                    $("#topTitle").html(name);
                    $("#main").attr("src", "@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix" + node.original.rule.PageUrl);
                }


            }).on('show_contextmenu.jstree', function (e, data) {
                //右键菜单显示隐藏
                showMenu(data.node.original.rule.DBType);
            });

        });
            //获取树的父名字
            function getNameById(id) {
                var name = "";
                for (var i = 0; i < treeData.length; i++) {
                    if (treeData[i].id == id) {
                        name = treeData[i].text;
                        break;
                    }
                }
                return name;
            }
            //显示隐藏右键菜单,类型:Company>Rule>Brand>Param>Product
            function showMenu(type) {
                //先隐藏所有
                $(".jstree-contextmenu li").hide();
                switch (type) {
                    case dsf20Main.RuleType.Company:
                        //显示和编辑
                        $(".menu_add").parent().parent().show();
                        $(".menu_rename").parent().parent().show();
                        break;
                    case dsf20Main.RuleType.Rule:
                        $(".jstree-contextmenu li").show();
                        //隐藏新增和改名
                        $(".menu_add").parent().parent().hide();
                        $(".menu_rename").parent().parent().hide();
                        var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                        //启动状态
                        if (data.rule.DBState == dsf20Main.DBState.Effect) {
                            //隐藏启动
                            $(".menu_play").parent().parent().hide();
                        }
                        //禁用状态
                        if (data.rule.DBState == dsf20Main.DBState.Normal) {
                            //隐藏禁用
                            $(".menu_stop").parent().parent().hide();
                        }
                        break;
                    default:
                        $(".jstree-contextmenu").hide();
                        break;
                }
            }
            //年度切换
            function changeYear() {
                isFirstLoad = true;
                $('#ruleTree').jstree('refresh');
                $("#topTitle").text("");
            }
            //右键菜单
            function contentMenu() {
                var item = {
                    //"select_node":false,
                    "items": {
                        "新增": {
                            "label": "新增",
                            "icon": "glyphicon glyphicon-plus menu_add",
                            "action": function (data) {
                                var addForm = layer.open({
                                    type: 1,
                                    title: '新增规则',
                                    skin: 'layui-layer-rim', //加上边框
                                    area: ['540px', '225px'], //宽高
                                    btn: ["新建", "取消"],
                                    content: $("#addform").html(),
                                    success: function (layero, index) {
                                        formLoaded();
                                    },
                                    yes: function () {
                                        var name = $.trim($("#txtRuleName").val())
                                        var start = $.trim($("#txtStart").val());
                                        var end = $.trim($("#txtEnd").val());
                                        if (name == "") {
                                            layer.msg("请填写规则名称", { icon: 0 });
                                            return;
                                        }
                                        if (start == "") {
                                            layer.msg("请选择生效开始日期", { icon: 0 });
                                            return;
                                        }
                                        if (end == "") {
                                            layer.msg("请选择生效结束日期", { icon: 0 });
                                            return;
                                        }
                                        loading = layer.load(0, {
                                            shade: [0.1, '#fff']
                                        });
                                        var param = {};
                                        param.year = $("#dopYear").val();
                                        param.start = encodeURIComponent(start);
                                        param.end = encodeURIComponent(end);
                                        param.name = encodeURIComponent(name);
                                        param.typeId = $("#txtUsedType").val();
                                        param.typeName = encodeURIComponent($("#txtUsedType").find("option:selected").text());
                                        param.pid = $('#ruleTree').jstree(true).get_selected(true)[0].id;
                                        param.brands = encodeURIComponent(JSON.stringify(dsf20Main.GetBrandList()));
                                        $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/AddRule", param, function (data) {
                                            layer.close(loading);
                                            var icon = 0;
                                            if (data.result == true) {
                                                icon = 1;
                                                layer.close(addForm);


                                                refreshState = "add";
                                                refreshSId = data.sid;

                                                $('#ruleTree').jstree('refresh');
                                            }
                                            layer.msg(data.msg, { icon: icon });
                                        });
                                    }
                                });

                            }
                        },
                        "编辑": {
                            "label": "编辑",
                            "icon": "glyphicon glyphicon-pencil menu_edit",
                            "action": function (data) {
                                var addForm = layer.open({
                                    type: 1,
                                    title: '编辑规则',
                                    skin: 'layui-layer-rim', //加上边框
                                    area: ['540px', '225px'], //宽高
                                    btn: ["修改", "取消"],
                                    content: $("#addform").html(),
                                    success: function (layero, index) {
                                        formLoaded(function () {
                                            //选中的值
                                            var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                            $("#hid_id").val(data.rule.ID);
                                            $("#txtRuleName").val(data.rule.Name);
                                            $("#txtUsedType").val(data.rule.UsedTypeID);
                                            $("#txtStart").val(changeDateFormat(data.rule.StartDate));
                                            $("#txtEnd").val(changeDateFormat(data.rule.EndDate));

                                            $("#txtUsedType").attr("disabled", "disabled").css("background-color", "white");

                                            startDate.max = $("#txtEnd").val();
                                            endDate.min = $("#txtStart").val();
                                        });
                                    },
                                    yes: function () {
                                        var name = $.trim($("#txtRuleName").val())
                                        var start = $.trim($("#txtStart").val());
                                        var end = $.trim($("#txtEnd").val());
                                        if (name == "") {
                                            layer.msg("请填写规则名称", { icon: 0 });
                                            return;
                                        }
                                        if (start == "") {
                                            layer.msg("请选择生效开始日期", { icon: 0 });
                                            return;
                                        }
                                        if (end == "") {
                                            layer.msg("请选择生效结束日期", { icon: 0 });
                                            return;
                                        }
                                        loading = layer.load(0, {
                                            shade: [0.1, '#fff']
                                        });
                                        var param = {};
                                        param.id = $("#hid_id").val();
                                        param.start = encodeURIComponent(start);
                                        param.end = encodeURIComponent(end);
                                        param.name = encodeURIComponent(name);
                                        param.typeId = $("#txtUsedType").val();
                                        param.typeName = encodeURIComponent($("#txtUsedType").find("option:selected").text());

                                        $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/EditRule", param, function (data) {
                                            layer.close(loading);
                                            var icon = 0;
                                            if (data.result == true) {
                                                icon = 1;
                                                layer.close(addForm);


                                                refreshState = "";
                                                refreshSId = "";

                                                $('#ruleTree').jstree('refresh');
                                            }
                                            layer.msg(data.msg, { icon: icon });
                                        });
                                    }
                                });
                            }
                        },
                        "改名": {
                            "label": "改名",
                            "icon": "glyphicon glyphicon-pencil menu_rename",
                            "action": function (data) {
                                var form = layer.open({
                                    type: 1,
                                    title: '改名',
                                    skin: 'layui-layer-rim', //加上边框
                                    area: ['340px', '170px'], //宽高
                                    btn: ["修改", "取消"],
                                    content: $("#renameform").html(),
                                    success: function (layero, index) {
                                        var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                        $("#txtReName").val(data.rule.Name);
                                    },
                                    yes: function () {
                                        var name = $.trim($("#txtReName").val())

                                        if (name == "") {
                                            layer.msg("请输入新名称", { icon: 0 });
                                            return;
                                        }
                                        //选中的值
                                        var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                        loading = layer.load(0, {
                                            shade: [0.1, '#fff']
                                        });
                                        var param = {};
                                        param.id = data.rule.ID;
                                        param.name = encodeURIComponent(name);
                                        $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/ReName", param, function (data) {
                                            layer.close(loading);
                                            var icon = 0;
                                            if (data.result == true) {
                                                icon = 1;
                                                layer.close(form);
                                                refreshState = "";
                                                refreshSId = "";

                                                $('#ruleTree').jstree('refresh');
                                            }
                                            layer.msg(data.msg, { icon: icon });
                                        });
                                    }
                                });
                            }
                        },
                        "启用": {
                            "label": "启用",
                            "icon": "glyphicon glyphicon-play menu_play",
                            "action": function (data) {

                                layer.confirm('确定启用?', function (index) {
                                    //选中的值
                                    var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                    loading = layer.load(0, {
                                        shade: [0.1, '#fff']
                                    });
                                    var param = {};
                                    param.id = data.rule.ID;
                                    param.state = dsf20Main.DBState.Effect;
                                    $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/EditDBState", param, function (data) {
                                        layer.close(loading);
                                        var icon = 0;
                                        if (data.result == true) {
                                            icon = 1;

                                            refreshState = "";
                                            refreshSId = "";

                                            $('#ruleTree').jstree('refresh');
                                        }
                                        layer.msg(data.msg, { icon: icon });
                                    });

                                });
                            }
                        },
                        "停用": {
                            "label": "停用",
                            "icon": "glyphicon glyphicon-stop menu_stop",
                            "action": function (data) {
                                layer.confirm('确定停用?', function (index) {
                                    //选中的值
                                    var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                    loading = layer.load(0, {
                                        shade: [0.1, '#fff']
                                    });
                                    var param = {};
                                    param.id = data.rule.ID;
                                    param.state = dsf20Main.DBState.Normal;
                                    $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/EditDBState", param, function (data) {
                                        layer.close(loading);
                                        var icon = 0;
                                        if (data.result == true) {
                                            icon = 1;

                                            refreshState = "";
                                            refreshSId = "";

                                            $('#ruleTree').jstree('refresh');
                                        }
                                        layer.msg(data.msg, { icon: icon });
                                    });

                                });
                            }
                        },
                        "删除": {
                            "label": "删除",
                            "icon": "glyphicon glyphicon-remove menu_remove",
                            "action": function (data) {
                                layer.confirm('确定删除?', function (index) {
                                    //选中的值
                                    var data = $('#ruleTree').jstree(true).get_selected(true)[0].original;
                                    loading = layer.load(0, {
                                        shade: [0.1, '#fff']
                                    });
                                    var param = {};
                                    param.id = data.rule.ID;
                                    param.state = dsf20Main.DBState.Delete;
                                    $.post("@aZaaS.KStar.Web.App_Start.WebCommon.WebPrefix/DSF20/RuleManager/EditDBState", param, function (data) {
                                        layer.close(loading);
                                        var icon = 0;
                                        if (data.result == true) {
                                            icon = 1;

                                            refreshState = "";
                                            refreshSId = "";

                                            $('#ruleTree').jstree('refresh');
                                        }
                                        layer.msg(data.msg, { icon: icon });
                                    });

                                });
                            }
                        }
                    }
                };
                return item;
            }
            function formLoaded(back) {
                setTimeout(function () {
                    dsf20Main.BindUsedTypeBySelect("txtUsedType");
                    //日期范围限制
                    startDate = {
                        elem: '#txtStart',
                        format: 'YYYY-MM-DD',
                        min: '2021-01-01', //设定最小日期为当前日期
                        max: '2088-12-31', //最大日期
                        //istime: true,
                        istoday: false,
                        choose: function (datas) {
                            endDate.min = datas; //开始日选好后,重置结束日的最小日期
                            endDate.startDate = datas //将结束日的初始值设定为开始日
                        }
                    };
                    endDate = {
                        elem: '#txtEnd',
                        format: 'YYYY-MM-DD',
                        min: '2021-01-01', //设定最小日期为当前日期
                        max: '2088-12-31', //最大日期
                        //istime: true,
                        istoday: false,
                        choose: function (datas) {
                            startDate.max = datas; //结束日选好后,重置开始日的最大日期

                        }
                    };
                    laydate(startDate);
                    laydate(endDate);
                    //成功后返回
                    if (back) {
                        back();
                    }
                }, 100);
            }
    </script>
    <script type="text/html" id="addform">
        <div style="margin: 20px 20px 10px 20px;">
            <input id="hid_id" value="" type="hidden" />
            <table style="width: 100%;">
                <tr>
                    <td>名称:</td>
                    <td>
                        <input id="txtRuleName" maxlength="14" placeholder="规则名称" style="width: 174px;" type="text" class="form-control" /></td>
                    <td style="padding-left: 10px;">类型:</td>
                    <td>
                        <select id="txtUsedType" style="width: 174px;" class="form-control">
                        </select>
                    </td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr>
                    <td>开始日期:</td>
                    <td>
                        <input id="txtStart" placeholder="生效开始日期" readonly="readonly" style="width: 174px; background-color: white;" type="text" class="laydate-icon form-control layer-date" /></td>
                    <td style="padding-left: 10px;">结束日期:</td>
                    <td>
                        <input id="txtEnd" placeholder="生效结束日期" readonly="readonly" style="width: 174px; background-color: white;" type="text" class="laydate-icon form-control layer-date" /></td>
                </tr>
            </table>
        </div>
    </script>
    <script type="text/html" id="renameform">
        <div style="margin: 20px 20px 10px 20px;">
            <table style="width: 100%;">
                <tr>
                    <td style="width: 50px;">名称:</td>
                    <td>
                        <input id="txtReName" maxlength="14" placeholder="请输入新名称" type="text" class="form-control" /></td>

                </tr>
            </table>
        </div>
    </script>
</body>

</html>

JS

//所有基础数据的
var dsf20Main = {};
//品牌主数据
dsf20Main.BrandList = [
    {
        "BrandID": 1, "BrandCN": "奥迪", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "股东方有合同量编辑", "Url": "/xxxx/xxx.1" },
            { "Des": "股东方无合同量编辑", "Url": "/xxxx/xxx.2" },
            { "Des": "非股东方编辑", "Url": "/xxxx/xxx.3" }
        ]
    },
    {
        "BrandID": 2, "BrandCN": "一汽大众", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "一汽股东方", "Url": "http://xxxxx" }
        ]
    },
    {
        "BrandID": 3, "BrandCN": "进口车", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "股东方", "Url": "http://xxxxx" }
        ]
    },
    {
        "BrandID": 4, "BrandCN": "保时捷", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "股东方", "Url": "http://xxxxx" }
        ]
    },
    {
        "BrandID": 5, "BrandCN": "兰博基尼和宾利", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "股东方", "Url": "http://xxxxx" }
        ]
    },
    {
        "BrandID": 6, "BrandCN": "捷达", "BrandEN": "", "Children": [], "UrlList": [
            { "Des": "请选择", "Url": "" },
            { "Des": "股东方", "Url": "http://xxxxx" }
        ]
    },
];

//新车二手
dsf20Main.UsedTypeList = [
    { "UsedTypeID": 1, "UsedTypeCN": "新车", "UsedTypeEN": "" },
    { "UsedTypeID": 2, "UsedTypeCN": "二手车", "UsedTypeEN": "" }
];

//规则类型
dsf20Main.RuleType = {
    "Company": "Company",
    "Rule": "Rule",
    "Brand": "Brand",
    "Param": "Param",
    "Product": "Product"
};
//规则类型
dsf20Main.DBState = {
    "Delete": "Delete",// "删除";
    "Effect": "Effect",//"生效";
    "Normal": "Normal"// "正常";
};
//获取品牌
dsf20Main.GetBrandList = function () {
    var brandList = [];
    for (var i = 0; i < dsf20Main.BrandList.length; i++) {
        var item = dsf20Main.BrandList[i];
        brandList.push({ "ID": item.BrandID, "Name": item.BrandCN });
    }
    return brandList;
}
//获取主品牌的数据
dsf20Main.GetBrandByID = function (id) {
    var model = null;
    for (var i = 0; i < dsf20Main.BrandList.length; i++) {
        var item = dsf20Main.BrandList[i];
        if (item.BrandID.toString() == id) {
            model = item;
            break;
        }
    }
    return model;
}

//绑定品牌到下拉框
dsf20Main.BindBrandBySelect = function (eleId) {
    var html = "";
    for (var i = 0; i < dsf20Main.BrandList.length; i++) {
        var item = dsf20Main.BrandList[i];
        html += "<option value=\"" + item.BrandID + "\">" + item.BrandCN + "</option>";
    }
    $("#" + eleId).html(html);
}
//绑定新车二手到下拉框
dsf20Main.BindUsedTypeBySelect = function (eleId) {
    var html = "";
    for (var i = 0; i < dsf20Main.UsedTypeList.length; i++) {
        var item = dsf20Main.UsedTypeList[i];
        html += "<option value=\"" + item.UsedTypeID + "\">" + item.UsedTypeCN + "</option>";
    }
    $("#" + eleId).html(html);
}


//JQ相关插件

var jqgSelect = function (options) {
    var jqgSelect_element = function (value, options) {
        var ds = $.extend(true, {}, options.dataSource), colId = options.id,
            rowId = colId.substring(0, colId.indexOf(options.name) - 1),
            gridId = options.gridId || $("#" + rowId).parents("table").attr("id");
        var row = $("#" + gridId).jqGrid("getRowData", rowId);
        if (typeof ds == "object" && typeof ds.rows == "function") {
            ds.rows = ds.rows(row, gridId, rowId);
        }
        var selectOptions = "";
        for (var i = 0, l = ds.rows.length; i < l; i++) {
            selectOptions += "<option value=\"" + ds.rows[i][ds.valueField] + "\">" + ds.rows[i][ds.textField] + "</option>";
        }
        var $select = $('<select class="editable inline-edit-cell form-control" data-gridid =' + gridId + ' data-rowid =' + rowId + ' data-colname=' + options.name
            + ' data-hiddencol=' + (options.hiddenCol || "") + '>'
            + selectOptions + '</select>');
        $select.val(row[options.hiddenCol]);
        return $select;
    }
    var jqgSelect_value = function (elem, operation, value) {
        var rowId = $(elem).data('rowid');
        var hiddenCol = $(elem).data('hiddencol');
        $("#" + $(elem).data('gridid')).jqGrid("setCell", rowId, hiddenCol, elem ? $(elem).val() : '', "", "", true);
        var value = $(elem).find('option:selected').text();
        if (value == "请选择") {
            return "";
        }
        return value;
    }
    options = options || {};
    options.custom_element = jqgSelect_element;
    options.custom_value = jqgSelect_value;
    return options;
}

//验证区域值的
var validateRange = function (value, name) {
    if ($.trim(value) == "") {
        return [true, ""];
    }
    var reg = /^[\(\[](\*|((\-|\+)?\d+(\.\d+)?))\,(\*|((\-|\+)?\d+(\.\d+)?))[\]\)]$/;
    if (reg.test(value)) {
        if (value.lastIndexOf("*") > 0) {
            return [true, ""];
        }
        var arrays = value.replace("(", "").replace(")", "").replace("[", "").replace("]", "").split(",");
        if (parseFloat(arrays[0]) > parseFloat(arrays[1])) {
            return [false, name + ":第一个值不能大于第二个值"];
        }
        return [true, ""];
    }
    else {
        return [false, name + ":格式有误,参考格式:[1,*)"];
    }
}

//Excel导出
var openDownloadDialog = function (url, saveName) {
    if (typeof url == 'object' && url instanceof Blob) {
        url = URL.createObjectURL(url); // 创建blob地址
    }
    var aLink = document.createElement('a');
    aLink.href = url;
    aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
    var event;
    if (window.MouseEvent) event = new MouseEvent('click');
    else {
        event = document.createEvent('MouseEvents');
        event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
    }
    aLink.dispatchEvent(event);
}
// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
var sheet2blob = function (sheet, sheetName) {
    sheetName = sheetName || 'sheet1';
    var workbook = {
        SheetNames: [sheetName],
        Sheets: {}
    };
    workbook.Sheets[sheetName] = sheet; // 生成excel的配置项

    var wopts = {
        bookType: 'xlsx', // 要生成的文件类型
        bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
        type: 'binary'
    };
    var wbout = XLSX.write(workbook, wopts);
    var blob = new Blob([s2ab(wbout)], {
        type: "application/octet-stream"
    }); // 字符串转ArrayBuffer
    function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
        return buf;
    }
    return blob;
}

//excel导入
var importf = function (obj, backData) {//导入
    if (!obj.files) {
        return;
    }
    var wb;//读取完成的数据
    var rABS = false;//是否将文件读取为二进制字符串
    var f = obj.files[0];
    var reader = new FileReader();
    reader.onload = function (e) {
        var data = e.target.result;
        if (rABS) {
            wb = XLSX.read(btoa(fixdata(data)), {//手动转化
                type: 'base64'
            });
        } else {
            wb = XLSX.read(data, {
                type: 'binary'
            });
        }
        //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
        //wb.Sheets[Sheet名]获取第一个Sheet的数据
        var datas = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
        backData(datas);
    };
    if (rABS) {
        reader.readAsArrayBuffer(f);
    } else {
        reader.readAsBinaryString(f);
    }
}

var fixdata = function (data) { //文件流转BinaryString
    var o = "",
        l = 0,
        w = 10240;
    for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
    o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
    return o;
}

//时间戳转为正常的如期格式  参数时间戳
var changeDateFormat = function (timestamp) {
    var date = new Date(parseInt(timestamp.replace("/Date(", "").replace(")/", ""), 10));
    Y = date.getFullYear() + '-';
    M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
    D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());// + ' ';
    h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
    m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
    s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
    //return Y + M + D + h + m + s;
    return Y + M + D;
}

树的Model,例子采用的是ID-PID格式,ID-Children做起来太麻烦了就没用

using aZaaS.Business.DAL.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace aZaaS.Business.DAL.ViewModel
{
    public class VURule
    {
        public string id { get; set; }
        public string parent { get; set; }
        public string text { get; set; }
        public R_Rule rule { get; set; }

        /// <summary>
        /// 数据模型转实体模型
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static List<VURule> ConvertToUIModel(List<R_Rule> list)
        {
            List<VURule> uiList = new List<VURule>();
            foreach (var rule in list)
            {
                VURule vu = new VURule();
                vu.id = rule.SID.ToString();
                vu.parent = rule.PID == Guid.Empty ? "#" : rule.PID.ToString();
                vu.text = rule.Name;
                vu.rule = rule;
                uiList.Add(vu);
            }
            return uiList;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值