修复前端防火墙列表页分页无效的问题

This commit is contained in:
jingrow 2025-08-09 21:27:10 +08:00
parent 45036ff400
commit 538699d0f6
2 changed files with 79 additions and 14 deletions

View File

@ -339,6 +339,14 @@ export default {
changePage(page) {
if (page >= 1 && page <= this.pagination.pagecount) {
this.pagination.pageno = page;
//
this.$resources.firewallRules.update({
params: {
instance_id: this.$jsiteServer.pg?.instance_id,
limit: this.pagination.limit,
pageno: this.pagination.pageno
}
});
this.$resources.firewallRules.reload();
}
},

View File

@ -453,17 +453,68 @@ class AliyunLightServerManager:
jingrow.log_error("创建防火墙规则失败", f"为实例 {instance_id} 创建防火墙规则时发生错误: {str(e)}")
return {'success': False, 'error': str(e), 'message': '创建防火墙规则失败'}
def list_firewall_rules(self, instance_id, region_id='cn-shanghai'):
"""获取实例的防火墙规则列表"""
def list_firewall_rules(self, instance_id, region_id='cn-shanghai', page_size=10, page_number=1):
"""获取实例的防火墙规则列表
Args:
instance_id: 实例ID
region_id: 地域ID
page_size: 每页记录数默认10如果设置为-1则获取全部数据
page_number: 页码默认1
"""
client = self._get_client(region_id)
try:
if page_size == -1:
# 获取全部数据
all_rules = []
current_page = 1
request_page_size = 50 # 每次请求50条记录减少API调用次数
while True:
request = swas__open20200601_models.ListFirewallRulesRequest(
region_id=region_id,
instance_id=instance_id
instance_id=instance_id,
page_size=request_page_size,
page_number=current_page
)
runtime = util_models.RuntimeOptions()
response = client.list_firewall_rules_with_options(request, runtime)
return {'success': True, 'data': self._convert_response_to_dict(response.body), 'message': '获取防火墙规则列表成功'}
response_data = self._convert_response_to_dict(response.body)
current_rules = response_data.get('firewall_rules', [])
if not current_rules:
break
all_rules.extend(current_rules)
# 如果当前页记录数少于request_page_size说明已经是最后一页
if len(current_rules) < request_page_size:
break
current_page += 1
# 构造返回结果
result_data = response_data.copy()
result_data['firewall_rules'] = all_rules
result_data['total_count'] = len(all_rules)
return {'success': True, 'data': result_data, 'message': f'获取防火墙规则列表成功,共{len(all_rules)}条记录'}
else:
# 分页获取数据
request = swas__open20200601_models.ListFirewallRulesRequest(
region_id=region_id,
instance_id=instance_id,
page_size=page_size,
page_number=page_number
)
runtime = util_models.RuntimeOptions()
response = client.list_firewall_rules_with_options(request, runtime)
response_data = self._convert_response_to_dict(response.body)
rules_count = len(response_data.get('firewall_rules', []))
return {'success': True, 'data': response_data, 'message': f'获取防火墙规则列表成功,第{page_number}页,共{rules_count}条记录'}
except Exception as e:
jingrow.log_error("获取防火墙规则列表失败", f"获取实例 {instance_id} 防火墙规则列表时发生错误: {str(e)}")
return {'success': False, 'error': str(e), 'message': '获取防火墙规则列表失败'}
@ -1698,12 +1749,18 @@ def create_aliyun_firewall_rule(instance_id, rule_protocol, port, remark=None, r
return {"success": False, "error": str(e), "message": "创建防火墙规则失败"}
@jingrow.whitelist()
def get_aliyun_firewall_rules(instance_id, region_id='cn-shanghai'):
"""获取阿里云轻量应用服务器防火墙规则列表"""
def get_aliyun_firewall_rules(instance_id, region_id='cn-shanghai', page_size=10, page_number=1):
"""获取阿里云轻量应用服务器防火墙规则列表
Args:
instance_id: 实例ID
region_id: 地域ID默认cn-shanghai
page_size: 每页记录数默认10如果设置为-1则获取全部数据
page_number: 页码默认1
"""
try:
# 调用管理器获取防火墙规则列表
manager = _get_manager()
result = manager.list_firewall_rules(instance_id, region_id)
result = manager.list_firewall_rules(instance_id, region_id, page_size, page_number)
return result
@ -1742,8 +1799,8 @@ def sync_firewall_rules(instance_id):
if not region_id:
return {"success": False, "message": "服务器记录缺少region信息"}
# 获取阿里云防火墙规则
firewall_result = get_aliyun_firewall_rules(instance_id, region_id)
# 获取阿里云防火墙规则(获取全部数据)
firewall_result = get_aliyun_firewall_rules(instance_id, region_id, page_size=-1)
if not firewall_result or not firewall_result.get('success'):
error_msg = f"获取阿里云防火墙规则失败: {firewall_result.get('message', '未知错误')}"
jingrow.log_error("同步防火墙规则失败", error_msg)