James Iter 7 سال پیش
والد
کامیت
e8ce6354b3
3فایلهای تغییر یافته به همراه122 افزوده شده و 2 حذف شده
  1. 1 0
      docs/todo.md
  2. 4 0
      jimvc/__init__.py
  3. 117 2
      jimvc/themes/default/templates/config_show.html

+ 1 - 0
docs/todo.md

@@ -101,4 +101,5 @@
 - [ ] 支持 vlan 功能
 - [ ] 支持 vlan 功能
 - [ ] 加入虚拟机排序功能
 - [ ] 加入虚拟机排序功能
 - [ ] 企业版分叉
 - [ ] 企业版分叉
+- [ ] 加入邮件、短信报警功能
 
 

+ 4 - 0
jimvc/__init__.py

@@ -79,6 +79,8 @@ from jimvc.api.project import blueprint as project_blueprint
 from jimvc.api.project import blueprints as project_blueprints
 from jimvc.api.project import blueprints as project_blueprints
 from jimvc.api.service import blueprint as service_blueprint
 from jimvc.api.service import blueprint as service_blueprint
 from jimvc.api.service import blueprints as service_blueprints
 from jimvc.api.service import blueprints as service_blueprints
+from jimvc.api.vlan import blueprint as vlan_blueprint
+from jimvc.api.vlan import blueprints as vlan_blueprints
 
 
 from jimvc.views.error_pages import *
 from jimvc.views.error_pages import *
 from jimvc.views.config import blueprint as view_config_blueprint
 from jimvc.views.config import blueprint as view_config_blueprint
@@ -297,6 +299,8 @@ try:
     app.register_blueprint(project_blueprints)
     app.register_blueprint(project_blueprints)
     app.register_blueprint(service_blueprint)
     app.register_blueprint(service_blueprint)
     app.register_blueprint(service_blueprints)
     app.register_blueprint(service_blueprints)
+    app.register_blueprint(vlan_blueprint)
+    app.register_blueprint(vlan_blueprints)
 
 
     app.register_blueprint(view_config_blueprint)
     app.register_blueprint(view_config_blueprint)
     app.register_blueprint(view_misc_blueprint)
     app.register_blueprint(view_misc_blueprint)

+ 117 - 2
jimvc/themes/default/templates/config_show.html

@@ -87,7 +87,7 @@
             $(me).parent().parent().children().removeClass('active');
             $(me).parent().parent().children().removeClass('active');
             $(me).parent().addClass('active');
             $(me).parent().addClass('active');
 
 
-            $('#view_by_jimv_system_config, #view_by_quota, #view_by_ip_pool, #view_by_auxiliary, #view_by_token').css('display', 'none');
+            $('#view_by_jimv_system_config, #view_by_quota, #view_by_ip_pool, #view_by_vlan, #view_by_auxiliary, #view_by_token').css('display', 'none');
 
 
             if (me.id === 'view_by_quota_label') {
             if (me.id === 'view_by_quota_label') {
                 $('#view_by_quota').css('display', 'unset');
                 $('#view_by_quota').css('display', 'unset');
@@ -99,6 +99,11 @@
                 history.replaceState(null, null, window.location.pathname);
                 history.replaceState(null, null, window.location.pathname);
                 window.location.hash = "ip_pool";
                 window.location.hash = "ip_pool";
 
 
+            } else if (me.id === 'view_by_vlan_label') {
+                $('#view_by_vlan').css('display', 'unset');
+                history.replaceState(null, null, window.location.pathname);
+                window.location.hash = "vlan";
+
             } else if (me.id === 'view_by_token_label') {
             } else if (me.id === 'view_by_token_label') {
                 $('#view_by_token').css('display', 'unset');
                 $('#view_by_token').css('display', 'unset');
                 history.replaceState(null, null, window.location.pathname);
                 history.replaceState(null, null, window.location.pathname);
@@ -119,11 +124,12 @@
             var view_by_jimv_system_config_label = $('#view_by_jimv_system_config_label');
             var view_by_jimv_system_config_label = $('#view_by_jimv_system_config_label');
             var view_by_quota_label = $('#view_by_quota_label');
             var view_by_quota_label = $('#view_by_quota_label');
             var view_by_ip_pool_label = $('#view_by_ip_pool_label');
             var view_by_ip_pool_label = $('#view_by_ip_pool_label');
+            var view_by_vlan_label = $('#view_by_vlan_label');
             var view_by_token_label = $('#view_by_token_label');
             var view_by_token_label = $('#view_by_token_label');
             var view_by_auxiliary_label = $('#view_by_auxiliary_label');
             var view_by_auxiliary_label = $('#view_by_auxiliary_label');
 
 
             view_by_jimv_system_config_label.parent().parent().children().removeClass('active');
             view_by_jimv_system_config_label.parent().parent().children().removeClass('active');
-            $('#view_by_jimv_system_config, #view_by_quota, #view_by_ip_pool, #view_by_auxiliary, #view_by_token').css('display', 'none');
+            $('#view_by_jimv_system_config, #view_by_quota, #view_by_ip_pool, #view_by_vlan, #view_by_auxiliary, #view_by_token').css('display', 'none');
 
 
             if (sheet_tag.indexOf('#quota') != -1) {
             if (sheet_tag.indexOf('#quota') != -1) {
                 view_by_quota_label.parent().addClass('active');
                 view_by_quota_label.parent().addClass('active');
@@ -133,6 +139,10 @@
                 view_by_ip_pool_label.parent().addClass('active');
                 view_by_ip_pool_label.parent().addClass('active');
                 $('#view_by_ip_pool').css('display', 'unset');
                 $('#view_by_ip_pool').css('display', 'unset');
 
 
+            } else if (sheet_tag.indexOf('#vlan') != -1) {
+                view_by_vlan_label.parent().addClass('active');
+                $('#view_by_vlan').css('display', 'unset');
+
             } else if (sheet_tag.indexOf('#token') != -1) {
             } else if (sheet_tag.indexOf('#token') != -1) {
                 view_by_token_label.parent().addClass('active');
                 view_by_token_label.parent().addClass('active');
                 $('#view_by_token').css('display', 'unset');
                 $('#view_by_token').css('display', 'unset');
@@ -698,12 +708,51 @@
                 }
                 }
             });
             });
         }
         }
+
+        function add_vlan() {
+            $('#add_vlan_modal').modal('hide');
+
+            $.ajax({
+                url : '/api/vlan',
+                type : 'POST',
+                contentType: "application/json; charset=utf-8",
+                async: false,
+                dataType: "json",
+                data : JSON.stringify({
+                    vlan_name: $('#vlan_name').val(),
+                    vlan_id: parseInt($('#vlan_id').val()),
+                    vlan_description: $('#vlan_description').val()
+                }),
+                error : function(data, textStatus, xhr) {
+                    alter_danger(data.responseText);
+                    alter_warning('添加 VLAN 失败!');
+                },
+                success : function(data, textStatus, xhr) {
+                    var html = '<tr role="row" data-id="' + data['data']['id'] + '" class="odd" onmouseover="row_onmouseover(this);" onmouseout="row_onmouseout(this);">\n' +
+                        '    <td class="text-center">\n' +
+                        data['data']['vlan_name'] +
+                        '        <div style="display: inline;">\n' +
+                        '            <a href="javascript:;" class="delete_reserved_ip_trigger" style="display: none; float: right;">\n' +
+                        '                <span onclick="reserved_ip_delete(this);" class="glyph-icon icon-iconic-cancel" style="width: 20px; height: 20px; margin-left: 10px; border-radius: 0; color: indianred;"></span>\n' +
+                        '            </a>\n' +
+                        '        </div>\n' +
+                        '    </td>\n' +
+                        '    <td class="text-center">' + data['data']['vlan_id'] + '</td>\n' +
+                        '    <td class="text-center">' + data['data']['vlan_description'] + '</td>\n' +
+                        '    <td class="text-center">' + data['data']['create_time'] + '</td>\n' +
+                        '</tr>';
+                    $('#vlans_list_table tbody').append(html);
+                    alter_success('添加 VLAN 成功!');
+                }
+            });
+        }
     </script>
     </script>
     <div class="panel">
     <div class="panel">
         <div class="panel-body">
         <div class="panel-body">
             <ul class="nav nav-tabs mrg25B">
             <ul class="nav nav-tabs mrg25B">
                 <li class="active"><a href="javascript:;" onclick="select_this(this);" id="view_by_jimv_system_config_label">JimV 系统配置</a></li>
                 <li class="active"><a href="javascript:;" onclick="select_this(this);" id="view_by_jimv_system_config_label">JimV 系统配置</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_ip_pool_label">IP 池</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_ip_pool_label">IP 池</a></li>
+                <li><a href="javascript:;" onclick="select_this(this);" id="view_by_vlan_label">VLAN</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_quota_label">性能配额</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_quota_label">性能配额</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_token_label">Token</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_token_label">Token</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_auxiliary_label">辅助</a></li>
                 <li><a href="javascript:;" onclick="select_this(this);" id="view_by_auxiliary_label">辅助</a></li>
@@ -839,6 +888,28 @@
             </div>
             </div>
             <div id="view_by_ip_pool" class="example-box-wrapper" style="display: none;">
             <div id="view_by_ip_pool" class="example-box-wrapper" style="display: none;">
             </div>
             </div>
+            <div id="view_by_vlan" class="example-box-wrapper" style="display: none;">
+                <div class="row" style="padding: 10px 10px 10px 0; width: 100%;">
+                    <div class="col-sm-12" style="padding-right: 0;">
+                        <div class="pull-right">
+                            <button class="btn btn-default" onclick="window.location.reload();" style="border-radius: 0;"><span class="glyph-icon icon-elusive-arrows-cw"></span></button>
+                            <a class="btn btn-info" href="javascript:;" data-toggle="modal" data-target="#add_vlan_modal" style="border-radius: 0; padding-left: 40px; padding-right: 40px;">添加 VLAN</a>
+                        </div>
+                    </div>
+                </div>
+                <table id="vlans_list_table" class="table table-bordered table-hover" cellspacing="0" width="100%" role="grid" style="width: 100%;">
+                    <thead>
+                    <tr role="row">
+                        <th class="text-center">名称</th>
+                        <th class="text-center">VLAN ID</th>
+                        <th class="text-center">备注</th>
+                        <th class="text-center">创建时间</th>
+                    </tr>
+                    </thead>
+                    <tbody>
+                    </tbody>
+                </table>
+            </div>
             <div id="view_by_token" class="example-box-wrapper" style="display: none;">
             <div id="view_by_token" class="example-box-wrapper" style="display: none;">
                 <div class="row" style="padding: 10px 10px 10px 0; width: 100%;">
                 <div class="row" style="padding: 10px 10px 10px 0; width: 100%;">
                     <div class="col-sm-12" style="padding-right: 0;">
                     <div class="col-sm-12" style="padding-right: 0;">
@@ -999,4 +1070,48 @@
         </div>
         </div>
     </div>
     </div>
 </div>
 </div>
+
+<div class="modal" id="add_vlan_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title">添加 VLAN:</h4>
+            </div>
+            <div class="panel">
+                <div class="panel-body">
+                    <form class="form-horizontal bordered-row" style="padding-left: 16%;">
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label" style="padding-right: 0;">名称</label>
+                            <div class="col-sm-8">
+                                <input title="VLAN 名称" class="form-control" name="vlan_name" type="text">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label" style="padding-right: 0;">VLAN ID</label>
+                            <div class="col-sm-8">
+                                <input title="VLAN ID" class="form-control" name="vlan_id" type="text">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label" style="padding-right: 0;">备注</label>
+                            <div class="col-sm-8">
+                                <textarea title="备注" class="form-control" name="vlan_description"></textarea>
+                            </div>
+                        </div>
+                        <div class="form-group" style="margin-bottom: 0;">
+                            <div class="col-sm-6">
+                            </div>
+                            <div class="col-sm-6">
+                                <div style="padding: 0; text-align: right;">
+                                    <button type="button" class="btn btn-sm btn-primary" style="right: 20%;" onclick="add_vlan(this);">创建</button>
+                                    <button type="button" class="btn btn-sm btn-default" style="right: 10%;" data-dismiss="modal">取消</button>
+                                </div>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
 {% endblock content %}
 {% endblock content %}