From 8343cd5e76d623ac29ee743e90613e7b585a3bdd Mon Sep 17 00:00:00 2001 From: KKRainbow <443152178@qq.com> Date: Sat, 17 Jan 2026 00:58:42 +0800 Subject: [PATCH] fix config loss when run network (#1802) --- .github/workflows/core.yml | 2 +- .github/workflows/gui.yml | 2 +- .../frontend-lib/src/components/Config.vue | 2 +- .../src/components/RemoteManagement.vue | 48 ++++++++++++------- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml index 34fbc167..4e202bb5 100644 --- a/.github/workflows/core.yml +++ b/.github/workflows/core.yml @@ -30,7 +30,7 @@ jobs: concurrent_skipping: 'same_content_newer' skip_after_successful_duplicate: 'true' cancel_others: 'true' - paths: '["Cargo.toml", "Cargo.lock", "easytier/**", ".github/workflows/core.yml", ".github/workflows/install_rust.sh"]' + paths: '["Cargo.toml", "Cargo.lock", "easytier/**", ".github/workflows/core.yml", ".github/workflows/install_rust.sh", "easytier-web/**"]' build_web: runs-on: ubuntu-latest needs: pre_job diff --git a/.github/workflows/gui.yml b/.github/workflows/gui.yml index 7ac89e40..956f1f60 100644 --- a/.github/workflows/gui.yml +++ b/.github/workflows/gui.yml @@ -29,7 +29,7 @@ jobs: concurrent_skipping: 'same_content_newer' skip_after_successful_duplicate: 'true' cancel_others: 'true' - paths: '["Cargo.toml", "Cargo.lock", "easytier/**", "easytier-gui/**", ".github/workflows/gui.yml", ".github/workflows/install_rust.sh", ".github/workflows/install_gui_dep.sh"]' + paths: '["Cargo.toml", "Cargo.lock", "easytier/**", "easytier-gui/**", ".github/workflows/gui.yml", ".github/workflows/install_rust.sh", ".github/workflows/install_gui_dep.sh", "easytier-web/frontend-lib/**"]' build-gui: strategy: fail-fast: false diff --git a/easytier-web/frontend-lib/src/components/Config.vue b/easytier-web/frontend-lib/src/components/Config.vue index 1aa54154..eaa14286 100644 --- a/easytier-web/frontend-lib/src/components/Config.vue +++ b/easytier-web/frontend-lib/src/components/Config.vue @@ -9,7 +9,7 @@ import { NetworkingMethod, removeRow } from '../types/network' -import { defineProps, defineEmits, ref, onMounted, onUnmounted } from 'vue' +import { ref, onMounted, onUnmounted } from 'vue' import { useI18n } from 'vue-i18n' const props = defineProps<{ diff --git a/easytier-web/frontend-lib/src/components/RemoteManagement.vue b/easytier-web/frontend-lib/src/components/RemoteManagement.vue index 1fbfcca4..3d2393fa 100644 --- a/easytier-web/frontend-lib/src/components/RemoteManagement.vue +++ b/easytier-web/frontend-lib/src/components/RemoteManagement.vue @@ -206,27 +206,39 @@ const confirmDeleteNetwork = (event: any) => { }); }; -const saveAndRunNewNetwork = async () => { - if (!currentNetworkConfig.value) { +const saveAndRunNewNetwork = async (config?: NetworkTypes.NetworkConfig) => { + const cfg = config ?? currentNetworkConfig.value; + if (!cfg) { return; } + + const targetInstanceId = instanceId.value ?? cfg.instance_id; + if (targetInstanceId && cfg.instance_id !== targetInstanceId) { + cfg.instance_id = targetInstanceId; + } + try { - await props.api.delete_network(instanceId.value!); - let ret = await props.api.run_network(currentNetworkConfig.value, currentNetworkControl.remoteSave.value); - console.debug("saveAndRunNewNetwork", ret); + if (networkIsDisabled.value) { + await props.api.save_config(cfg); + await props.api.update_network_instance_state(cfg.instance_id, false); + } else { + await props.api.run_network(cfg, currentNetworkControl.remoteSave.value); + } - delete networkMetaCache.value[currentNetworkConfig.value.instance_id]; - await loadNetworkMetas([currentNetworkConfig.value.instance_id]); + delete networkMetaCache.value[cfg.instance_id]; + await loadNetworkMetas([cfg.instance_id]); - selectedInstanceId.value = { uuid: currentNetworkConfig.value.instance_id }; + selectedInstanceId.value = { uuid: cfg.instance_id }; + await loadNetworkInstanceIds(); + await loadCurrentNetworkInfo(); } catch (e: any) { console.error(e); - toast.add({ severity: 'error', summary: 'Error', detail: 'Failed to create network, error: ' + JSON.stringify(e.response.data), life: 2000 }); + toast.add({ severity: 'error', summary: 'Error', detail: 'Failed to run network, error: ' + JSON.stringify(e.response?.data ?? e), life: 2000 }); return; } + emits('update'); - // showCreateNetworkDialog.value = false; - isEditingNetwork.value = false; // Exit creation mode after successful network creation + isEditingNetwork.value = false; } const saveNetworkConfig = async () => { @@ -388,18 +400,18 @@ const updateScreenWidth = () => { const menuRef = ref(); const actionMenu: Ref = ref([ { - label: t('web.device_management.edit_network'), + label: () => t('web.device_management.edit_network'), icon: 'pi pi-pencil', visible: () => !(networkIsDisabled.value ?? true) && currentNetworkControl.editable.value, command: () => editNetwork() }, { - label: t('web.device_management.export_config'), + label: () => t('web.device_management.export_config'), icon: 'pi pi-download', command: () => exportConfig() }, { - label: t('web.device_management.delete_network'), + label: () => t('web.device_management.delete_network'), icon: 'pi pi-trash', class: 'p-error', visible: () => currentNetworkControl.deletable.value, @@ -539,13 +551,15 @@ onUnmounted(() => { :label="t('web.device_management.edit_as_file')" iconPos="left" severity="secondary" />