zoukankan      html  css  js  c++  java
  • CMDB (后台管理) CURD 插件

    a. 基本实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            $(function(){
                initial();
            });
    
            function initial(){
                $.ajax({
                    url: '/backend/curd_json.html',
                    type: 'GET',
                    dataType:'JSON',
                    success:function(arg){
                        
                        initTableHeader(arg.table_config);
                        initTableBody(arg.server_list,arg.table_config);
                    }
                })
            }
    
            function initTableHeader(tableConfig){
                
                $.each(tableConfig,function(k,v){
                        // table_config = [
                        //    {'q':'id','title':'ID'},
                        //    {'q':'hostname','title':'主机名'}
                        // ]
    
                    var tag = document.createElement('th');
                    tag.innerHTML = v.title;
                    $('#tbHead').find('tr').append(tag);
                })
            }
    
            function initTableBody(serverList,tableConfig){
                    //  serverList = [
                    //    {'hostname': 'c2.com', 'asset__cabinet_num': 'B12', 'id': 1,  },
                    //    {'hostname': 'c2.com', 'asset__cabinet_num': 'B12', 'id': 1,  }
                    //  ]
                $.each(serverList,function(k,row){
                    var tr = document.createElement('tr');
                    $.each(tableConfig,function(kk,rrow){
                        
                        var td = document.createElement('td');
                        td.innerHTML = row[rrow.q];
                        $(tr).append(td);
                    });
                    $('#tbBody').append(tr);
    
                })
            }
        </script>
    </body>
    </html>
    curd.html
    import json
    from django.shortcuts import render,HttpResponse
    from repository import models
    # Create your views here.
    
    def curd(request):
        
        return render(request,'curd.html')
    
    def curd_json(request):
        table_config = [
            {'q':'id','title':'ID'},
            {'q':'hostname','title':'主机名'},
            {'q':'create_at','title':'创建时间'},
            {'q':'asset__cabinet_num','title':'机柜号'},
            {'q':'asset__business_unit__name','title':'业务线名称'},
        ]
    
        values_list = []
        for row in table_config:
            values_list.append(row['q'])
    
        from datetime import datetime
        from datetime import date
        class JsonCustomEncoder(json.JSONEncoder):
    
            def default(self, value):
                if isinstance(value, datetime):
                    return value.strftime('%Y-%m-%d %H:%M:%S')
                elif isinstance(value, date):
                    return value.strftime('%Y-%m-%d')
                else:
                    return json.JSONEncoder.default(self, value)
        server_list = models.Server.objects.values(*values_list)
    
        ret = {
            'server_list':list(server_list),
            'table_config':table_config
        }
    
        return HttpResponse(json.dumps(ret,cls=JsonCustomEncoder))
    views.py

    b. 增加操作(删除编辑的url不能实现)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            $(function(){
                initial();
            });
    
            function initial(){
                $.ajax({
                    url: '/backend/curd_json.html',
                    type: 'GET',
                    dataType:'JSON',
                    success:function(arg){
    
                        initTableHeader(arg.table_config);
                        initTableBody(arg.server_list,arg.table_config);
                    }
                })
            }
    
            function initTableHeader(tableConfig){
    
                $.each(tableConfig,function(k,v){
    
    
                    var tag = document.createElement('th');
                    tag.innerHTML = v.title;
                    $('#tbHead').find('tr').append(tag);
                })
            }
    
            function initTableBody(serverList,tableConfig){
    
                $.each(serverList,function(k,row){
                    var tr = document.createElement('tr');
                    $.each(tableConfig,function(kk,rrow){
    
                        var td = document.createElement('td');
                        if(rrow["q"]){
                            td.innerHTML = row[rrow.q];
                        }else{
                            td.innerHTML = rrow.text;
                        }
    
                        $(tr).append(td);
                    });
                    $('#tbBody').append(tr);
    
                })
            }
        </script>
    </body>
    </html>
    curd.html
    import json
    from django.shortcuts import render, HttpResponse
    from repository import models
    
    
    # Create your views here.
    
    def curd(request):
        return render(request, 'curd.html')
    
    
    def curd_json(request):
        table_config = [
            {
                 'q': 'id',
                 'title': 'ID',
                 "text":{
                    "tpl":"",
                     "kwargs":{}
                 }
             },
            {'q': 'hostname', 'title': '主机名',"text":""},
            {'q': 'create_at', 'title': '创建时间',"text":""},
            {'q': 'asset__cabinet_num', 'title': '机柜号',"text":""},
            {'q': 'asset__business_unit__name', 'title': '业务线名称',"text":""},
            {'q': None,"title":"操作","text":"<a>删除</a>|<a>编辑</a>"}
        ]
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
        from datetime import datetime
        from datetime import date
        class JsonCustomEncoder(json.JSONEncoder):
    
            def default(self, value):
                if isinstance(value, datetime):
                    return value.strftime('%Y-%m-%d %H:%M:%S')
                elif isinstance(value, date):
                    return value.strftime('%Y-%m-%d')
                else:
                    return json.JSONEncoder.default(self, value)
    
        server_list = models.Server.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    views.py

    c. 定制列的内容字符串格式化(实现删除编辑的url)

    import json
    from django.shortcuts import render, HttpResponse
    from repository import models
    
    
    # Create your views here.
    
    def curd(request):
        return render(request, 'curd.html')
    
    
    def curd_json(request):
        table_config = [
            {
                 'q': 'id',
                 'title': 'ID',
                 "text":{
                    "tpl":"{nid}",
                     "kwargs":{"nid":"@id"}
                 }
             },
            {
                'q': 'hostname',
                'title': '主机名',
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@hostname"}
                }
            },
            {
                'q': 'create_at',
                'title': '创建时间',
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@create_at"}
                }
            },
            {
                'q': 'asset__business_unit__name',
                'title': '业务线名称',
                "text": {
                    "tpl": "aaa-{n1}",
                    "kwargs": {"n1": "@asset__business_unit__name"}
                }
            },
            {
                'q': None,
                "title":"操作",
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                }
            }
        ]
    
        #"<a>删除</a>|<a>编辑</a>"
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
        from datetime import datetime
        from datetime import date
        class JsonCustomEncoder(json.JSONEncoder):
    
            def default(self, value):
                if isinstance(value, datetime):
                    return value.strftime('%Y-%m-%d %H:%M:%S')
                elif isinstance(value, date):
                    return value.strftime('%Y-%m-%d')
                else:
                    return json.JSONEncoder.default(self, value)
    
        server_list = models.Server.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    views.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            $(function(){
                initial();
            });
    
            String.prototype.format=function (arg) {
                var temp = this.replace(/{(w+)}/g,function (k,kk) {
                    return arg[kk];
                });
                return temp;
            };
    
    
            function initial(){
                $.ajax({
                    url: '/backend/curd_json.html',
                    type: 'GET',
                    dataType:'JSON',
                    success:function(arg){
    
                        initTableHeader(arg.table_config);
                        initTableBody(arg.server_list,arg.table_config);
                    }
                })
            }
    
            function initTableHeader(tableConfig){
    
                $.each(tableConfig,function(k,v){
    
    
                    var tag = document.createElement('th');
                    tag.innerHTML = v.title;
                    $('#tbHead').find('tr').append(tag);
                })
            }
    
            function initTableBody(serverList,tableConfig){
    
                $.each(serverList,function(k,row){
                    // [
                    // {'id': 1, 'asset__business_unit__name': '咨询部',}
                    // ]
                    var tr = document.createElement('tr');
                    $.each(tableConfig,function(kk,rrow){
    
                        var td = document.createElement('td');
    
    
                        var newKwargs ={};
                        $.each(rrow.text.kwargs,function (kkk,vvv) {
                            var av = vvv;
                            if(vvv[0] == "@"){
                                var av = row[vvv.substring(1,vvv.length)];
                            }
                            newKwargs[kkk] = av
                        });
    
    
                        var newText = rrow.text.tpl.format(newKwargs);
                        td.innerHTML = newText;
                        $(tr).append(td);
                    });
                    $('#tbBody').append(tr);
    
                })
            }
        </script>
    </body>
    </html>
    curd.html

    d. 后段查找,前端 id 不显示

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            $(function(){
                initial();
            });
    
            String.prototype.format=function (arg) {
                var temp = this.replace(/{(w+)}/g,function (k,kk) {
                    return arg[kk];
                });
                return temp;
            };
    
    
            function initial(){
                $.ajax({
                    url: '/backend/curd_json.html',
                    type: 'GET',
                    dataType:'JSON',
                    success:function(arg){
    
                        initTableHeader(arg.table_config);
                        initTableBody(arg.server_list,arg.table_config);
                    }
                })
            }
    
            function initTableHeader(tableConfig){
    
                $.each(tableConfig,function(k,v){
                    if(v.display){
                        var tag = document.createElement('th');
                        tag.innerHTML = v.title;
                        $('#tbHead').find('tr').append(tag);
                    }
                })
            }
    
            function initTableBody(serverList,tableConfig){
    
                $.each(serverList,function(k,row){
                    // [
                    // {'id': 1, 'asset__business_unit__name': '咨询部',}
                    // ]
                    var tr = document.createElement('tr');
                    $.each(tableConfig,function(kk,rrow){
                        if(rrow.display) {
                            var td = document.createElement('td');
                            var newKwargs = {};
                            $.each(rrow.text.kwargs, function (kkk, vvv) {
                                var av = vvv;
                                if (vvv[0] == "@") {
                                    var av = row[vvv.substring(1, vvv.length)];
                                }
                                newKwargs[kkk] = av
                            });
                            var newText = rrow.text.tpl.format(newKwargs);
                            td.innerHTML = newText;
                            $(tr).append(td);
                        }
                    });
                    $('#tbBody').append(tr);
    
                })
            }
        </script>
    </body>
    </html>
    curd.html
    import json
    from django.shortcuts import render, HttpResponse
    from repository import models
    
    
    # Create your views here.
    
    def curd(request):
        return render(request, 'curd.html')
    
    
    def curd_json(request):
        table_config = [
            {
                 'q': 'id',
                 'title': 'ID',
                 'display':False,
                 "text":{
                    "tpl":"{nid}",
                     "kwargs":{"nid":"@id"}
                 }
             },
            {
                'q': 'hostname',
                'title': '主机名',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@hostname"}
                }
            },
            {
                'q': 'asset__business_unit__id',
                'title': '业务线ID',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@asset__business_unit__id"}
                }
            },
            {
                'q': 'asset__business_unit__name',
                'title': '业务线名称',
                'display': True,
                "text": {
                    "tpl": "aaa-{n1}",
                    "kwargs": {"n1": "@asset__business_unit__name"}
                }
            },
            {
                'q': None,
                "title":"操作",
                'display': True,
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                }
            }
        ]
    
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
        from datetime import datetime
        from datetime import date
        class JsonCustomEncoder(json.JSONEncoder):
    
            def default(self, value):
                if isinstance(value, datetime):
                    return value.strftime('%Y-%m-%d %H:%M:%S')
                elif isinstance(value, date):
                    return value.strftime('%Y-%m-%d')
                else:
                    return json.JSONEncoder.default(self, value)
    
        server_list = models.Server.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    views.py

    e. 设置插件(复选框显示名称实现),设置属性 

    (function (jq) {
    
        var GLOBAL_DICT = {}
    
        String.prototype.format=function (arg) {
        var temp = this.replace(/{(w+)}/g,function (k,kk) {
            return arg[kk];
        });
        return temp;
    };
    
        function initial(url){
        $.ajax({
            url: url,
            type: 'GET',
            dataType:'JSON',
            success:function(arg){
                $.each(arg.global_dict,function (k,v) {
                    GLOBAL_DICT[k] = v
                });
    
                initTableHeader(arg.table_config);
                initTableBody(arg.server_list,arg.table_config);
            }
        })
    }
    
        function initTableHeader(tableConfig){
    
        $.each(tableConfig,function(k,v){
            if(v.display){
                var tag = document.createElement('th');
                tag.innerHTML = v.title;
                $('#tbHead').find('tr').append(tag);
            }
        })
    }
    
        function initTableBody(serverList,tableConfig){
    
        $.each(serverList,function(k,row){
            // [
            // {'id': 1, 'asset__business_unit__name': '咨询部',}
            // ]
            var tr = document.createElement('tr');
            $.each(tableConfig,function(kk,rrow){
                if(rrow.display) {
                    var td = document.createElement('td');
    
                    //td 中添加内容
                    var newKwargs = {};
                    $.each(rrow.text.kwargs, function (kkk, vvv) {
                        var av = vvv;
                        if (vvv.substring(0,2) == "@@"){
                            var global_dict_key = vvv.substring(2,vvv.length);
                            var nid = row[rrow.q];
                            console.log(GLOBAL_DICT[global_dict_key]);
                            $.each(GLOBAL_DICT[global_dict_key],function (gk,gv) {
                                if(gv[0] == nid){
                                    av = gv[1];
                                }
                            })
                        }
                        else if (vvv[0] == "@") {
                            var av = row[vvv.substring(1, vvv.length)];
                        }
                        newKwargs[kkk] = av
                    });
                    var newText = rrow.text.tpl.format(newKwargs);
                    td.innerHTML = newText;
    
                    //td 中添加属性
                    $.each(rrow.attrs,function (atkey,atval) {
                        if (atval[0] == "@") {
                            td.setAttribute(atkey,row[atval.substring(1, atval.length)]);
                        }else {
                            td.setAttribute(atkey,atval)
                        }
                    });
    
    
                    $(tr).append(td);
                }
            });
            $('#tbBody').append(tr);
    
        })
    }
    
        jq.extend({
            xx:function (url) {
                initial(url)
            }
        })
    })(jQuery);
    static/nb-list.js
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <h4>服务器列表</h4>
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script src="/static/nb-list.js"></script>
        <script>
    
            $.xx('/backend/curd_json.html')
    
        </script>
    </body>
    </html>
    curd.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <h4>资产列表</h4>
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script src="/static/nb-list.js"></script>
        <script>
    
            $.xx('/backend/asset_json.html')
    
        </script>
    </body>
    </html>
    asset.html
    import json
    from django.shortcuts import render, HttpResponse
    from repository import models
    
    from datetime import datetime
    from datetime import date
    
    
    class JsonCustomEncoder(json.JSONEncoder):
        def default(self, value):
            if isinstance(value, datetime):
                return value.strftime('%Y-%m-%d %H:%M:%S')
            elif isinstance(value, date):
                return value.strftime('%Y-%m-%d')
            else:
                return json.JSONEncoder.default(self, value)
    
    
    
    def curd(request):
        return render(request, 'curd.html')
    
    def curd_json(request):
        table_config = [
            {
                 'q': 'id',
                 'title': 'ID',
                 'display':False,
                 "text":{
                    "tpl":"{nid}",
                     "kwargs":{"nid":"@id"}
                 },
                'attrs': {'k1': 'v1', 'k2': '@id'}
             },
            {
                'q': 'hostname',
                'title': '主机名',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@hostname"}
                },
                'attrs': {'k1':'v1','k2': '@hostname'}
            },
            {
                'q': 'asset__business_unit__id',
                'title': '业务线ID',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@asset__business_unit__id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'asset__business_unit__name',
                'title': '业务线名称',
                'display': True,
                "text": {
                    "tpl": "aaa-{n1}",
                    "kwargs": {"n1": "@asset__business_unit__name"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': None,
                "title":"操作",
                'display': True,
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            }
        ]
    
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
    
        server_list = models.Server.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    
    
    def asset(request):
        return render(request, 'asset.html')
    
    
    def asset_json(request):
        table_config = [
            {
                'q': 'id',
                'title': 'ID',
                'display': False,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'device_type_id',
                'title': '资产类型',
                'display': True,
                'text': {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@@device_type_choices"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'device_status_id',
                'title': '资产状态',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@@device_status_choices"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'cabinet_num',
                'title': '机柜号',
                'display': True,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@cabinet_num"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'idc__name',
                'title': '机房',
                'display': True,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@idc__name"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': None,
                "title": "操作",
                'display': True,
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            }
        ]
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
    
        server_list = models.Asset.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config,
            'global_dict':{
                'device_type_choices':models.Asset.device_type_choices,
                'device_status_choices':models.Asset.device_status_choices
            }
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    view.py

     增删改

    a. 行编辑(只是前端实现且复选框没有实现)

        1. 行进入编辑模式
           - 内容  --> input标签

    import json
    from django.shortcuts import render, HttpResponse
    from repository import models
    
    from datetime import datetime
    from datetime import date
    
    
    class JsonCustomEncoder(json.JSONEncoder):
        def default(self, value):
            if isinstance(value, datetime):
                return value.strftime('%Y-%m-%d %H:%M:%S')
            elif isinstance(value, date):
                return value.strftime('%Y-%m-%d')
            else:
                return json.JSONEncoder.default(self, value)
    
    
    
    def curd(request):
        return render(request, 'curd.html')
    
    def curd_json(request):
        table_config = [
            {
                'q': None,  # 数据库查询字段
                'title': '选择',  # 显示标题
                'display': True,  # 是否显示
                "text": {
                    "tpl": "<input type='checkbox' value={n1} />",
                    "kwargs": {"n1": "@id"}
                },
                'attrs': {'nid': '@id'}
            },
            {
                 'q': 'id',
                 'title': 'ID',
                 'display':False,
                 "text":{
                    "tpl":"{nid}",
                     "kwargs":{"nid":"@id"}
                 },
                'attrs': {'k1': 'v1', 'k2': '@id'}
             },
            {
                'q': 'hostname',
                'title': '主机名',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@hostname"}
                },
                'attrs': {'edit-enable':"true",'k2': '@hostname'}
            },
            {
                'q': 'asset__business_unit__id',
                'title': '业务线ID',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@asset__business_unit__id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'asset__business_unit__name',
                'title': '业务线名称',
                'display': True,
                "text": {
                    "tpl": "aaa-{n1}",
                    "kwargs": {"n1": "@asset__business_unit__name"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': None,
                "title":"操作",
                'display': True,
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            }
        ]
    
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
    
        server_list = models.Server.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    
    
    def asset(request):
        return render(request, 'asset.html')
    
    
    def asset_json(request):
        table_config = [
            {
                'q': None,  # 数据库查询字段
                'title': '选择',  # 显示标题
                'display': True,  # 是否显示
                "text": {
                    "tpl": "<input type='checkbox' value={n1} />",
                    "kwargs": {"n1": "@id"}
                },
                'attrs': {'nid': '@id'}
            },
            {
                'q': 'id',
                'title': 'ID',
                'display': False,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'device_type_id',
                'title': '资产类型',
                'display': True,
                'text': {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@@device_type_choices"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'device_status_id',
                'title': '资产状态',
                'display': True,
                "text": {
                    "tpl": "{n1}",
                    "kwargs": {"n1": "@@device_status_choices"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            },
            {
                'q': 'cabinet_num',
                'title': '机柜号',
                'display': True,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@cabinet_num"}
                },
                'attrs': {'edit-enable':"true", 'k2': '@id'}
            },
            {
                'q': 'idc__name',
                'title': '机房',
                'display': True,
                "text": {
                    "tpl": "{nid}",
                    "kwargs": {"nid": "@idc__name"}
                },
                'attrs': {'edit-enable':"true", 'k2': '@id'}
            },
            {
                'q': None,
                "title": "操作",
                'display': True,
                "text": {
                    "tpl": "<a href='/del?nid={nid}'>删除</a>",
                    "kwargs": {"nid": "@id"}
                },
                'attrs': {'k1': 'v1', 'k2': '@id'}
            }
        ]
    
        values_list = []
        for row in table_config:
            if not row["q"]:
                continue
            values_list.append(row['q'])
    
    
        server_list = models.Asset.objects.values(*values_list)
        print(server_list)
    
        ret = {
            'server_list': list(server_list),
            'table_config': table_config,
            'global_dict':{
                'device_type_choices':models.Asset.device_type_choices,
                'device_status_choices':models.Asset.device_status_choices
            }
        }
    
        return HttpResponse(json.dumps(ret, cls=JsonCustomEncoder))
    view.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <h4>服务器列表</h4>
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script src="/static/nb-list.js"></script>
        <script>
    
            $.xx('/backend/curd_json.html');
    
    
        </script>
    </body>
    </html>
    curd.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css" />
    </head>
    <body>
        <div style=" 700px;margin: 0 auto">
            <h4>资产列表</h4>
            <table class="table table-bordered table-striped">
                <thead id="tbHead">
                    <tr>
    
                    </tr>
                </thead>
                <tbody id="tbBody">
    
                </tbody>
            </table>
        </div>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script src="/static/nb-list.js"></script>
        <script>
    
            $.xx('/backend/asset_json.html')
    
        </script>
    </body>
    </html>
    asset.html
    (function (jq) {
    
        var GLOBAL_DICT = {}
    
        String.prototype.format=function (arg) {
        var temp = this.replace(/{(w+)}/g,function (k,kk) {
            return arg[kk];
        });
        return temp;
    };
    
        function initial(url){
        $.ajax({
            url: url,
            type: 'GET',
            dataType:'JSON',
            success:function(arg){
                $.each(arg.global_dict,function (k,v) {
                    GLOBAL_DICT[k] = v
                });
    
                initTableHeader(arg.table_config);
                initTableBody(arg.server_list,arg.table_config);
            }
        })
    }
    
        function initTableHeader(tableConfig){
    
        $.each(tableConfig,function(k,v){
            if(v.display){
                var tag = document.createElement('th');
                tag.innerHTML = v.title;
                $('#tbHead').find('tr').append(tag);
            }
        })
    }
    
        function initTableBody(serverList,tableConfig){
    
            $.each(serverList,function(k,row){
            // [
            // {'id': 1, 'asset__business_unit__name': '咨询部',}
            // ]
            var tr = document.createElement('tr');
            $.each(tableConfig,function(kk,rrow){
                if(rrow.display) {
                    var td = document.createElement('td');
    
                    //td 中添加内容
                    var newKwargs = {};
                    $.each(rrow.text.kwargs, function (kkk, vvv) {
                        var av = vvv;
                        if (vvv.substring(0,2) == "@@"){
                            var global_dict_key = vvv.substring(2,vvv.length);
                            var nid = row[rrow.q];
                            console.log(GLOBAL_DICT[global_dict_key]);
                            $.each(GLOBAL_DICT[global_dict_key],function (gk,gv) {
                                if(gv[0] == nid){
                                    av = gv[1];
                                }
                            })
                        }
                        else if (vvv[0] == "@") {
                            var av = row[vvv.substring(1, vvv.length)];
                        }
                        newKwargs[kkk] = av
                    });
                    var newText = rrow.text.tpl.format(newKwargs);
                    td.innerHTML = newText;
    
                    //td 中添加属性
                    $.each(rrow.attrs,function (atkey,atval) {
                        if (atval[0] == "@") {
                            td.setAttribute(atkey,row[atval.substring(1, atval.length)]);
                        }else {
                            td.setAttribute(atkey,atval)
                        }
                    });
    
    
                    $(tr).append(td);
                }
            });
            $('#tbBody').append(tr);
    
        })
        }
        
        
        function trIntoEdit($tr) {
    
            $tr.find("td[edit-enable='true']").each(function () {
                //可以编辑的td
                //获取原来td中的文本内容
                var v1 = $(this).text();
                var inp = document.createElement('input');
                $(inp).val(v1);     //属性和内容相同
                $(this).html(inp)
            })
    
        }
    
    
        function trOutEdit($tr) {
    
            $tr.find("td[edit-enable='true']").each(function () {
    
                var inputVal =  $(this).find("input").val();
                $(this).html(inputVal)
    
            })
    
    
        }
    
        jq.extend({
            xx:function (url) {
                initial(url);
    
                $("#tbBody").on('click',':checkbox',function () {
    
                    var $tr = $(this).parent().parent();
                    //检测是否被选中
                    if($(this).prop('checked')){
                    //进入编辑模式
                        trIntoEdit($tr)
                    }else {
                    //退出编辑模式
                        trOutEdit($tr)
                    }
                })
            }
        })
        
    })(jQuery);
    /static/nb-list.js
  • 相关阅读:
    TensorFlow实现线性回归
    在window10平台下安装TensorFlow(only cpu)
    毕设——基于深度学习的恶意代码检测
    play ball小游戏-Alpha版本发布说明
    支持3000万道四则运算题目生成的小学生毁灭姬
    图片集
    个人项目WordCount(C++/QT)
    自我介绍+软工5问
    大数据应用技术课程实践--选题与实践方案
    15 手写数字识别-小数据集
  • 原文地址:https://www.cnblogs.com/golangav/p/7275328.html
Copyright © 2011-2022 走看看