From b61dae638b7795a7afe8ab1a8527baf9dad0284b Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:21:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(forward):=20Fix=20the=20problem=20of=20dupl?= =?UTF-8?q?icate=20creation=20of=20port=20forwardin=E2=80=A6=20(#7975)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refs #7969 --- backend/app/dto/firewall.go | 3 +- backend/app/service/firewall.go | 4 +++ frontend/src/api/modules/host.ts | 2 +- .../src/views/host/firewall/forward/index.vue | 35 +++++++++++++++++-- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/backend/app/dto/firewall.go b/backend/app/dto/firewall.go index c3d3646e1..6457c2a61 100644 --- a/backend/app/dto/firewall.go +++ b/backend/app/dto/firewall.go @@ -30,7 +30,8 @@ type PortRuleOperate struct { } type ForwardRuleOperate struct { - Rules []struct { + ForceDelete bool `json:"forceDelete"` + Rules []struct { Operation string `json:"operation" validate:"required,oneof=add remove"` Num string `json:"num"` Protocol string `json:"protocol" validate:"required,oneof=tcp udp tcp/udp"` diff --git a/backend/app/service/firewall.go b/backend/app/service/firewall.go index 7e041d395..9f0db8d99 100644 --- a/backend/app/service/firewall.go +++ b/backend/app/service/firewall.go @@ -381,6 +381,10 @@ func (u *FirewallService) OperateForwardRule(req dto.ForwardRuleOperate) error { TargetIP: r.TargetIP, TargetPort: r.TargetPort, }, r.Operation); err != nil { + if req.ForceDelete { + global.LOG.Error(err) + continue + } return err } } diff --git a/frontend/src/api/modules/host.ts b/frontend/src/api/modules/host.ts index 172cf55e9..20c8f9920 100644 --- a/frontend/src/api/modules/host.ts +++ b/frontend/src/api/modules/host.ts @@ -98,7 +98,7 @@ export const operateFire = (operation: string) => { export const operatePortRule = (params: Host.RulePort) => { return http.post(`/hosts/firewall/port`, params, TimeoutEnum.T_40S); }; -export const operateForwardRule = (params: { rules: Host.RuleForward[] }) => { +export const operateForwardRule = (params: { rules: Host.RuleForward[]; forceDelete: boolean }) => { return http.post(`/hosts/firewall/forward`, params, TimeoutEnum.T_40S); }; export const operateIPRule = (params: Host.RuleIP) => { diff --git a/frontend/src/views/host/firewall/forward/index.vue b/frontend/src/views/host/firewall/forward/index.vue index 1bf0a0d64..2f040c5b5 100644 --- a/frontend/src/views/host/firewall/forward/index.vue +++ b/frontend/src/views/host/firewall/forward/index.vue @@ -77,7 +77,18 @@ - + + + @@ -91,6 +102,7 @@ import { operateForwardRule, searchFireRule } from '@/api/modules/host'; import { Host } from '@/api/interface/host'; import i18n from '@/lang'; import { GlobalStore } from '@/store'; +import { MsgSuccess } from '@/utils/message'; const globalStore = GlobalStore(); @@ -107,6 +119,8 @@ const fireName = ref(); const fireStatusRef = ref(); const opRef = ref(); +const forceDelete = ref(false); +const operateRules = ref(); const data = ref(); const paginationConfig = reactive({ @@ -180,6 +194,7 @@ const onDelete = async (row: Host.RuleForward | null) => { }); } } + operateRules.value = rules; opRef.value.acceptParams({ title: i18n.global.t('commons.button.delete'), names: names, @@ -187,11 +202,24 @@ const onDelete = async (row: Host.RuleForward | null) => { i18n.global.t('firewall.forwardRule'), i18n.global.t('commons.button.delete'), ]), - api: operateForwardRule, - params: { rules: rules }, + api: null, + params: null, }); }; +const onSubmitDelete = async () => { + loading.value = true; + await operateForwardRule({ rules: operateRules.value, forceDelete: forceDelete.value }) + .then(() => { + loading.value = false; + MsgSuccess(i18n.global.t('commons.msg.deleteSuccess')); + search(); + }) + .catch(() => { + loading.value = false; + }); +}; + const buttons = [ { label: i18n.global.t('commons.button.edit'), @@ -208,6 +236,7 @@ const buttons = [ ]; onMounted(() => { + forceDelete.value = false; if (fireName.value !== '-') { loading.value = true; fireStatusRef.value.acceptParams();