Parcourir la source

实现删除 IP 池逻辑

James Iter il y a 7 ans
Parent
commit
82e7a047c7
3 fichiers modifiés avec 67 ajouts et 16 suppressions
  1. 19 1
      jimvc/api/ip_pool.py
  2. 3 13
      jimvc/models/orm.py
  3. 45 2
      jimvc/themes/default/templates/config_show.html

+ 19 - 1
jimvc/api/ip_pool.py

@@ -235,5 +235,23 @@ def r_content_search():
 
 @Utils.dumps2response
 def r_delete(ids):
-    return ip_pool_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
+    ret = ip_pool_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
+
+    rows, count = IPPool.get_all()
+
+    had_activity = False
+
+    for row in rows:
+        if row['activity'] == 1:
+            had_activity = True
+
+    if not had_activity and count > 0:
+        ip_pool = IPPool()
+        ip_pool.id = rows[0]['id']
+        ip_pool.get()
+        ip_pool.activity = 1
+        ip_pool.update()
+        ip_pool.get()
+
+    return ret
 

+ 3 - 13
jimvc/models/orm.py

@@ -206,22 +206,18 @@ class ORM(object):
 
         sql_stmt = ("SELECT * FROM " + cls._table_name + " ORDER BY " + order_by + " " + order +
                     " LIMIT %(offset)s, %(limit)s")
-        sql_stmt_count = ("SELECT count(" + cls._primary_key + ") FROM " + cls._table_name)
 
         where_str = Filter.filter_str_to_sql(allow_keywords=cls.get_filter_keywords(), filter_str=filter_str)
         if where_str != '':
             sql_stmt = ("SELECT * FROM " + cls._table_name + " WHERE " + where_str + " ORDER BY " + order_by + " " +
                         order + " LIMIT %(offset)s, %(limit)s")
-            sql_stmt_count = ("SELECT count(" + cls._primary_key + ") FROM " + cls._table_name + " WHERE " + where_str)
 
         cnx = db.cnxpool.get_connection()
         cursor = cnx.cursor(dictionary=True, buffered=True)
         try:
             cursor.execute(sql_stmt, {'offset': offset, 'limit': limit})
             rows = cursor.fetchall()
-            cursor.execute(sql_stmt_count)
-            count = cursor.fetchone()
-            return rows, count["count(" + cls._primary_key + ")"]
+            return rows, rows.__len__()
         finally:
             cursor.close()
             cnx.close()
@@ -294,7 +290,6 @@ class ORM(object):
         where_str = ' OR '.join([k + ' LIKE %(' + k + ')s' for k in _kv.keys()])
         sql_stmt = ("SELECT * FROM " + cls._table_name + " WHERE " + where_str + " ORDER BY " + order_by + " " + order +
                     " LIMIT %(offset)s, %(limit)s")
-        sql_stmt_count = ("SELECT count(" + cls._primary_key + ") FROM " + cls._table_name + " WHERE " + where_str)
 
         _kv.update({'offset': offset, 'limit': limit})
         cnx = db.cnxpool.get_connection()
@@ -302,9 +297,7 @@ class ORM(object):
         try:
             cursor.execute(sql_stmt, _kv)
             rows = cursor.fetchall()
-            cursor.execute(sql_stmt_count, _kv)
-            count = cursor.fetchone()
-            return rows, count["count(" + cls._primary_key + ")"]
+            return rows, rows.__len__()
         finally:
             cursor.close()
             cnx.close()
@@ -315,16 +308,13 @@ class ORM(object):
             order_by = cls._primary_key
 
         sql_stmt = ("SELECT * FROM " + cls._table_name + " ORDER BY " + order_by + " " + order)
-        sql_stmt_count = ("SELECT count(" + cls._primary_key + ") FROM " + cls._table_name)
 
         cnx = db.cnxpool.get_connection()
         cursor = cnx.cursor(dictionary=True, buffered=True)
         try:
             cursor.execute(sql_stmt)
             rows = cursor.fetchall()
-            cursor.execute(sql_stmt_count)
-            count = cursor.fetchone()
-            return rows, count["count(" + cls._primary_key + ")"]
+            return rows, rows.__len__()
         finally:
             cursor.close()
             cnx.close()

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

@@ -327,7 +327,8 @@
                 '                <div class="col-sm-6">\n' +
                 '                    <div style="padding: 0; text-align: right;">\n' +
                 '                        <button type="button" class="btn btn-sm btn-primary" style="right: 10%;" data-id="' + ip_pool.id + '" onclick="update_ip_pool(this);">更新</button>\n' +
-                '                        <button type="button" class="btn btn-sm btn-danger" style="right: 4%;" onclick="delete_ip_pool(this);">删除</button>\n' +
+                '                        <button type="button" class="btn btn-sm btn-danger" style="right: 4%;" data-toggle="modal" data-target="#ip_pool_delete_modal" onclick="$(\'#ip_pool_id\').val(get_ip_pool_field_value(this, \'id\'));\n' +
+                '                                       $(\'#delete_instance_desc\').text(get_ip_pool_field_value(this, \'name\'))">删除</button>\n' +
                 '                    </div>\n' +
                 '                </div>\n' +
                 '            </div>\n' +
@@ -336,7 +337,6 @@
                 '</div>';
         }
 
-
         function get_ip_pools_html() {
             var html = '<div class="row" style="padding: 10px 10px 10px 0; width: 100%;">\n' +
                 '    <div class="col-sm-12" style="padding-right: 0;">\n' +
@@ -482,6 +482,29 @@
                 window.location.reload();
             }, 3000);
         }
+
+        function ip_pool_delete_at(me) {
+            var ip_pool_id = $('#ip_pool_id').val();
+            ip_pool_remove(ip_pool_id);
+            $('#ip_pool_delete_modal').modal('hide');
+        }
+
+        function ip_pool_remove(id) {
+            $.ajax({
+                url : '/api/ip_pools/' + id,
+                type : 'DELETE',
+                contentType: "application/json; charset=utf-8",
+                error : function() {
+                    alter_danger('IP 池删除指令发送失败!');
+                },
+                success : function() {
+                    alter_success('IP 池删除指令发送成功!');
+                    setTimeout(function() {
+                        refresh();
+                    }, 1000);
+                }
+            });
+        }
     </script>
     <div class="panel">
         <div class="panel-body">
@@ -634,6 +657,8 @@
         </div>
     </div>
 
+<input id="ip_pool_id" title="IP Pool ID" class="form-control" name="ip_pool_id" hidden>
+
 <div class="modal" id="add_ip_pool_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
     <div class="modal-dialog modal-lg">
         <div class="modal-content">
@@ -705,4 +730,22 @@
         </div>
     </div>
 </div>
+
+<div class="modal" id="ip_pool_delete_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title">删除 IP 池:</h4>
+            </div>
+            <div class="modal-body">
+                <p>您确定要删除该 IP 池吗?</p>
+                <h3 style="color: orangered;" id="delete_instance_desc"></h3>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-primary" onclick="ip_pool_delete_at();">确定</button>
+                <button type="button" class="btn btn-sm btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
 {% endblock content %}