fix config loss when run network (#1802)

This commit is contained in:
KKRainbow
2026-01-17 00:58:42 +08:00
committed by GitHub
parent 005b321f62
commit 8343cd5e76
4 changed files with 34 additions and 20 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ jobs:
concurrent_skipping: 'same_content_newer' concurrent_skipping: 'same_content_newer'
skip_after_successful_duplicate: 'true' skip_after_successful_duplicate: 'true'
cancel_others: '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: build_web:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: pre_job needs: pre_job
+1 -1
View File
@@ -29,7 +29,7 @@ jobs:
concurrent_skipping: 'same_content_newer' concurrent_skipping: 'same_content_newer'
skip_after_successful_duplicate: 'true' skip_after_successful_duplicate: 'true'
cancel_others: '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: build-gui:
strategy: strategy:
fail-fast: false fail-fast: false
@@ -9,7 +9,7 @@ import {
NetworkingMethod, NetworkingMethod,
removeRow removeRow
} from '../types/network' } from '../types/network'
import { defineProps, defineEmits, ref, onMounted, onUnmounted } from 'vue' import { ref, onMounted, onUnmounted } from 'vue'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
const props = defineProps<{ const props = defineProps<{
@@ -206,27 +206,39 @@ const confirmDeleteNetwork = (event: any) => {
}); });
}; };
const saveAndRunNewNetwork = async () => { const saveAndRunNewNetwork = async (config?: NetworkTypes.NetworkConfig) => {
if (!currentNetworkConfig.value) { const cfg = config ?? currentNetworkConfig.value;
if (!cfg) {
return; return;
} }
const targetInstanceId = instanceId.value ?? cfg.instance_id;
if (targetInstanceId && cfg.instance_id !== targetInstanceId) {
cfg.instance_id = targetInstanceId;
}
try { try {
await props.api.delete_network(instanceId.value!); if (networkIsDisabled.value) {
let ret = await props.api.run_network(currentNetworkConfig.value, currentNetworkControl.remoteSave.value); await props.api.save_config(cfg);
console.debug("saveAndRunNewNetwork", ret); 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]; delete networkMetaCache.value[cfg.instance_id];
await loadNetworkMetas([currentNetworkConfig.value.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) { } catch (e: any) {
console.error(e); 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; return;
} }
emits('update'); emits('update');
// showCreateNetworkDialog.value = false; isEditingNetwork.value = false;
isEditingNetwork.value = false; // Exit creation mode after successful network creation
} }
const saveNetworkConfig = async () => { const saveNetworkConfig = async () => {
@@ -388,18 +400,18 @@ const updateScreenWidth = () => {
const menuRef = ref(); const menuRef = ref();
const actionMenu: Ref<MenuItem[]> = ref([ const actionMenu: Ref<MenuItem[]> = ref([
{ {
label: t('web.device_management.edit_network'), label: () => t('web.device_management.edit_network'),
icon: 'pi pi-pencil', icon: 'pi pi-pencil',
visible: () => !(networkIsDisabled.value ?? true) && currentNetworkControl.editable.value, visible: () => !(networkIsDisabled.value ?? true) && currentNetworkControl.editable.value,
command: () => editNetwork() command: () => editNetwork()
}, },
{ {
label: t('web.device_management.export_config'), label: () => t('web.device_management.export_config'),
icon: 'pi pi-download', icon: 'pi pi-download',
command: () => exportConfig() command: () => exportConfig()
}, },
{ {
label: t('web.device_management.delete_network'), label: () => t('web.device_management.delete_network'),
icon: 'pi pi-trash', icon: 'pi pi-trash',
class: 'p-error', class: 'p-error',
visible: () => currentNetworkControl.deletable.value, visible: () => currentNetworkControl.deletable.value,
@@ -539,13 +551,15 @@ onUnmounted(() => {
:label="t('web.device_management.edit_as_file')" iconPos="left" severity="secondary" /> :label="t('web.device_management.edit_as_file')" iconPos="left" severity="secondary" />
<Button @click="importConfig" icon="pi pi-upload" :label="t('web.device_management.import_config')" <Button @click="importConfig" icon="pi pi-upload" :label="t('web.device_management.import_config')"
iconPos="left" severity="help" /> iconPos="left" severity="help" />
<Button v-if="networkIsDisabled" @click="saveNetworkConfig" icon="pi pi-save" <Button v-if="networkIsDisabled" @click="saveNetworkConfig" :disabled="!currentNetworkConfig"
:label="t('web.device_management.save_config')" iconPos="left" severity="success" /> icon="pi pi-save" :label="t('web.device_management.save_config')" iconPos="left"
severity="success" />
</div> </div>
<Divider /> <Divider />
<Config :cur-network="currentNetworkConfig" @run-network="saveAndRunNewNetwork"></Config> <Config :cur-network="currentNetworkConfig" :config-invalid="!currentNetworkConfig"
@run-network="saveAndRunNewNetwork"></Config>
</div> </div>
<!-- Network Status (for running networks) --> <!-- Network Status (for running networks) -->