js 导航菜单切换

    1. {% extends "layout.html" %}
    2. {% load has_group %}
    3. {% load permission_tags %}
    4. {% block title %} 配置文件管理 {% endblock %}
    5. {% block static %}
    6. <link rel="stylesheet" href="/static/css/codemirror.css"></link>
    7. <a href="/pusher/config/" class="config-btn">返回上页</a>
    8. <span class="bwapp-tit">{{ system }}</span>
    9. <span id="version" class="version-text"></span>
    10. <div style="float: right;">
    11. {% if user|has_role:'security'%}
    12. <button type="button" id="push_to_redis_header" class="skyToBlue common-btn">配置下发</button>
    13. <button type="button" id="uri_rewrite_push_to_redis_header" class="skyToBlue uri-rewrite-common-btn">uri rewrite 配置下发</button>
    14. {% endif %}
    15. </div>
    16. <div class="config_detail_cont">
    17. <ul class="config_detail_nav">
    18. {% if user|has_role:'operations,admin,application_test'%}
    19. <li data-content="percent">流量百分比</li>
    20. {% endif %}
    21. {% if user|has_role:'security,admin'%}
    22. <li data-content="uri_rewrite">Uri Rewrite</li>
    23. {% endif %}
    24. {% if user|has_role:'security,admin'%}
    25. <li data-content="static_manage">静态资源配置 </li>
    26. {% endif %}
    27. {% if user|has_role:'operations,admin,application_test,security'%}
    28. <li data-content="source_file" class="v-pills-tab">配置源文件</li>
    29. {% endif %}
    30. </ul>
    31. <!-- 多个 class 以 空格 分隔 -->
    32. <div class="flow-table-wrap uri_rewrite" id="v-pills-hp" role="tabpanel" aria-labelledby="v-pills-fl-tab">
    33. {% include "pusher/uri_rewrite.html" %}
    34. </div>
    35. <div class="flow-table-wrap static_manage" id="v-pills-hp" role="tabpanel" aria-labelledby="v-pills-fl-tab">
    36. {% include "pusher/static_manage.html" %}
    37. </div>
    38. <div class="flow-table-wrap source_file" id="v-pills-source" role="tabpanel" aria-labelledby="v-pills-source-tab">
    39. <div id="editor">
    40. </div>
    41. </div>
    42. </div>
    43. <script src="/static/js/uri_rewrite.js"></script>
    44. <script src="/static/js/static_manage.js"></script>
    45. <script src="/static/js/uri_rewrite.js"></script>
    
    // class 为 config_detail_nav ,里面 class 为 li 的; 
    $(".config_detail_nav li").click(function (e) {
        // data-* 为 自定义属性, 这里是 data-content 的值
        var checkClass = $(this).data('content');
    
        // https://www.runoob.com/jsref/prop-element-classlist.html html5 classList 属性
        if (e.target.classList.contains('v-pills-tab')) {
            $.ajax({
                url: "/pusher/config/local/value/",
                type: "GET",
                data: {
                    app: "{{ system }}"
                },
                success: function (data) {
                    console.log(data)
                    $("#editor").html("<pre><code>" + escapeHtml(data.data) + "</code></pre>");
                    $('pre code').each(function (i, block) {
                        hljs.highlightBlock(block);
                    });
                    // app_config = data.data;
                },
                fail: function (e) {
                    console.log(e);
                },
            });
        }
            $(this).addClass("skyToBlue").siblings("li").removeClass("skyToBlue");
            // 添加 skyToBlue class, 同胞中 li 的 移除 skyToBlue class。 
            if(checkClass == 'uri_rewrite'){
                $('.common-btn').hide()
                // 隐藏 和 显示
                $('.uri-rewrite-common-btn').show()
            }else{
                $('.common-btn').show()
                $('.uri-rewrite-common-btn').hide()
            }
        $(`.flow-table-wrap.${checkClass}`).show().siblings(".flow-table-wrap").hide();
        window.localStorage.setItem('active_content', $('.config_detail_nav .skyToBlue').data('content'));
    });
    //  setItem, getItem, removeItem  存,取,移除。
    
    
        jQuery(document).ready(function ($) {
            let active_content = window.localStorage.getItem('active_content');
            if (active_content) {
                // data-content 的属性值为 ${active_content} 的, class 为 config_detail_nav 内 li 的 元素
                // trigger() 方法触发被选元素的指定事件类型
                $(`.config_detail_nav li[data-content="${active_content}"]`).trigger('click')
            } else {
                $('.config_detail_nav li')[0].classList.add('skyToBlue')
                let first_content = $('.config_detail_nav li')[0].dataset.content;
                $(`.flow-table-wrap.${first_content}`).css('dispaly', 'block')
            }
        }
    
    
    
    // uri rewrite push config to redis
            $("#uri_rewrite_push_to_redis_header").click(function () {
                pop_confirm("确定下发配置到Redis?", function () {
                    $.ajax({
                        url: "/pusher/config/validate/urirewrite/",
                        type: "POST",
                        data: {
                            app_name: '{{ system }}',
                            status: '{{ status }}',
                            csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
                            // config: app_config
                        }
                    }).done(function (data) {
                        if (data.status === "OK") {
                            var form = document.createElement("form")
                            form.method = "POST"
                            form.action = "/pusher/config/urirewrite/"
                            form.style.cssText = "display:none"
                            var editor = document.createElement("input")
                            editor.name = "editor"
                            // editor.value = app_config
                            form.appendChild(editor)
                            var app_name = document.createElement("input")
                            app_name.name = "app_name"
                            app_name.value = '{{ system }}'
                            form.appendChild(app_name)
                            var status = document.createElement("input")
                            status.name = "status"
                            status.value = '{{ status }}'
                            form.appendChild(status)
                            var csrftoken = document.createElement("input")
                            csrftoken.name = "csrfmiddlewaretoken"
                            csrftoken.value = document.getElementsByName('csrfmiddlewaretoken')[0].value
                            form.appendChild(csrftoken)
                            document.body.appendChild(form)
                            form.submit();
                            pop_success("下发配置");
                        } else {
                            pop_success(data.message)
                        }
                    }).fail(function (error) {
                        pop_success(error.message)
                    })
                });
            })
    
    <td class="versions" id="{{ genre_list.0 }}">
                        <a href="javascript:;" onclick="getVersionState(event, '{{ genre_list.0 }}')" class="config-version-status">点击查看</a>
    
    </td>
    <td>
      <a href="/app/config/file/{{app.name }}" class="config-btn" > 配置</a>
      {% if user|has_role:'admin'%}
        <a href="javascript:;" onclick="clearConf(event, '{{ sys }}')" class="config-move">清空</a>
        {% endif %}
    </td>
    
    
    
    <script type="text/javascript">
    
    
      function getVersionState(e, sysname) {
            $.ajax({
                url: "/pusher/config/versionstatus/",
                type: "POST",
                data: {
                    sysname: sysname,
                    csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value
                }
            }).done(function (data) {
                var element = document.getElementById(sysname)
                let span = element.lastChild
              // 判断 是否已经有 span,  没有才添加。
                if(span.tagName =='span' || span.tagName=='SPAN'){
                    return
                }else{
                    var para = document.createElement("span");
                    var node = document.createTextNode(data.data);
                    para.appendChild(node);
                    element.appendChild(para)
                }
    
            }).fail(function (error) {
                pop_warning(error)
            })
        }
    </script>