diff --git a/backend/app/dto/setting.go b/backend/app/dto/setting.go index 49dbf992b..c18831cd6 100644 --- a/backend/app/dto/setting.go +++ b/backend/app/dto/setting.go @@ -13,10 +13,11 @@ type SettingInfo struct { TimeZone string `json:"timeZone"` NtpSite string `json:"ntpSite"` - Port string `json:"port"` - PanelName string `json:"panelName"` - Theme string `json:"theme"` - Language string `json:"language"` + Port string `json:"port"` + PanelName string `json:"panelName"` + Theme string `json:"theme"` + Language string `json:"language"` + DefaultNetwork string `json:"defaultNetwork"` ServerPort string `json:"serverPort"` SSL string `json:"ssl"` diff --git a/backend/init/migration/migrate.go b/backend/init/migration/migrate.go index 582c433f2..461b61cbf 100644 --- a/backend/init/migration/migrate.go +++ b/backend/init/migration/migrate.go @@ -43,6 +43,8 @@ func Init() { migrations.UpdateDatabase, migrations.UpdateAppInstallResource, migrations.DropDatabaseLocal, + + migrations.AddDefaultNetwork, }) if err := m.Migrate(); err != nil { global.LOG.Error(err) diff --git a/backend/init/migration/migrations/v_1_7.go b/backend/init/migration/migrations/v_1_7.go new file mode 100644 index 000000000..b1c7f3617 --- /dev/null +++ b/backend/init/migration/migrations/v_1_7.go @@ -0,0 +1,17 @@ +package migrations + +import ( + "github.com/1Panel-dev/1Panel/backend/app/model" + "github.com/go-gormigrate/gormigrate/v2" + "gorm.io/gorm" +) + +var AddDefaultNetwork = &gormigrate.Migration{ + ID: "20230918-add-default-network", + Migrate: func(tx *gorm.DB) error { + if err := tx.Create(&model.Setting{Key: "DefaultNetwork", Value: ""}).Error; err != nil { + return err + } + return nil + }, +} diff --git a/frontend/src/api/interface/setting.ts b/frontend/src/api/interface/setting.ts index 73d2c8c5c..873a73935 100644 --- a/frontend/src/api/interface/setting.ts +++ b/frontend/src/api/interface/setting.ts @@ -16,6 +16,7 @@ export namespace Setting { panelName: string; theme: string; language: string; + defaultNetwork: string; serverPort: number; ssl: string; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 6e86953bd..30a0ce2f4 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -766,7 +766,7 @@ const message = { avgLoad: 'Average load', loadDetail: 'Load detail', resourceUsage: 'Resource utilization rate', - networkCard: 'Net card', + networkCard: 'NetworkCard', read: 'Read', write: 'Write', readWriteCount: 'Read or write Times', @@ -989,6 +989,7 @@ const message = { 'If you do not operate the panel for more than {0} seconds, the panel automatically logs out', systemIP: 'System Address', systemIPWarning: 'The server address is not currently set. Please set it in the control panel first!', + defaultNetwork: 'Network Card', syncTime: 'Server Time', timeZone: 'Time Zone', timeZoneChangeHelper: 'Changing the time zone requires restarting the service. Do you want to continue?', diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts index d2a5c00ee..82e12aea3 100644 --- a/frontend/src/lang/modules/tw.ts +++ b/frontend/src/lang/modules/tw.ts @@ -950,6 +950,7 @@ const message = { sessionTimeoutHelper: '如果用戶超過 {0} 秒未操作面板,面板將自動退出登錄', systemIP: '服務器地址', systemIPWarning: '當前未設置服務器地址,請先在面板設置中設置!', + defaultNetwork: '默認網卡', syncTime: '服務器時間', timeZone: '系統時區', timeZoneChangeHelper: '系統時區修改需要重啟服務,是否繼續?', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 84ecca85a..2fb3c15be 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -950,6 +950,7 @@ const message = { sessionTimeoutHelper: '如果用户超过 {0} 秒未操作面板,面板将自动退出登录', systemIP: '服务器地址', systemIPWarning: '当前未设置服务器地址,请先在面板设置中设置!', + defaultNetwork: '默认网卡', syncTime: '服务器时间', timeZone: '系统时区', timeZoneChangeHelper: '系统时区修改需要重启服务,是否继续?', diff --git a/frontend/src/store/index.ts b/frontend/src/store/index.ts index ef2f89bc8..24c8a2a4b 100644 --- a/frontend/src/store/index.ts +++ b/frontend/src/store/index.ts @@ -29,6 +29,7 @@ export const GlobalStore = defineStore({ lastFilePath: '', currentDB: '', showEntranceWarn: true, + defaultNetwork: 'all', }), getters: {}, actions: { @@ -72,6 +73,9 @@ export const GlobalStore = defineStore({ setShowEntranceWarn(show: boolean) { this.showEntranceWarn = show; }, + setDefaultNetwork(net: string) { + this.defaultNetwork = net; + }, }, persist: piniaPersistConfig('GlobalState'), }); diff --git a/frontend/src/store/interface/index.ts b/frontend/src/store/interface/index.ts index 6975421ce..b673c643b 100644 --- a/frontend/src/store/interface/index.ts +++ b/frontend/src/store/interface/index.ts @@ -24,6 +24,7 @@ export interface GlobalState { lastFilePath: string; currentDB: string; showEntranceWarn: boolean; + defaultNetwork: string; } export interface MenuState { diff --git a/frontend/src/views/home/index.vue b/frontend/src/views/home/index.vue index 7b4d441b5..81bb0297d 100644 --- a/frontend/src/views/home/index.vue +++ b/frontend/src/views/home/index.vue @@ -340,7 +340,7 @@ const goRouter = async (path: string) => { const onLoadNetworkOptions = async () => { const res = await getNetworkOptions(); netOptions.value = res.data; - searchInfo.netOption = netOptions.value && netOptions.value[0]; + searchInfo.netOption = globalStore.defaultNetwork || (netOptions.value && netOptions.value[0]); }; const onLoadIOOptions = async () => { diff --git a/frontend/src/views/host/monitor/monitor/index.vue b/frontend/src/views/host/monitor/monitor/index.vue index 309ddf3c5..cd4317d03 100644 --- a/frontend/src/views/host/monitor/monitor/index.vue +++ b/frontend/src/views/host/monitor/monitor/index.vue @@ -409,7 +409,7 @@ const search = async (param: string) => { const loadNetworkOptions = async () => { const res = await getNetworkOptions(); netOptions.value = res.data; - searchInfo.info = netOptions.value && netOptions.value[0]; + searchInfo.info = globalStore.defaultNetwork || (netOptions.value && netOptions.value[0]); networkChoose.value = searchInfo.info; search('all'); }; diff --git a/frontend/src/views/setting/panel/default-network/index.vue b/frontend/src/views/setting/panel/default-network/index.vue new file mode 100644 index 000000000..53638e1e9 --- /dev/null +++ b/frontend/src/views/setting/panel/default-network/index.vue @@ -0,0 +1,103 @@ + + diff --git a/frontend/src/views/setting/panel/index.vue b/frontend/src/views/setting/panel/index.vue index 7655648f0..2e5ce32b3 100644 --- a/frontend/src/views/setting/panel/index.vue +++ b/frontend/src/views/setting/panel/index.vue @@ -108,6 +108,15 @@ + + + + + @@ -121,6 +130,7 @@ + @@ -138,6 +148,7 @@ import Timeout from '@/views/setting/panel/timeout/index.vue'; import PanelName from '@/views/setting/panel/name/index.vue'; import SystemIP from '@/views/setting/panel/systemip/index.vue'; import TimeZone from '@/views/setting/panel/timezone/index.vue'; +import Netwrok from '@/views/setting/panel/default-network/index.vue'; import Ntp from '@/views/setting/panel/ntp/index.vue'; const loading = ref(false); @@ -159,6 +170,8 @@ const form = reactive({ theme: '', language: '', complexityVerification: '', + defaultNetwork: '', + defaultNetworkVal: '', }); const show = ref(); @@ -170,6 +183,7 @@ const systemIPRef = ref(); const timeoutRef = ref(); const ntpRef = ref(); const timezoneRef = ref(); +const netwrokRef = ref(); const unset = ref(i18n.t('setting.unSetting')); const search = async () => { @@ -185,6 +199,8 @@ const search = async () => { form.theme = res.data.theme; form.language = res.data.language; form.complexityVerification = res.data.complexityVerification; + form.defaultNetwork = res.data.defaultNetwork; + form.defaultNetworkVal = res.data.defaultNetwork === 'all' ? i18n.t('commons.table.all') : res.data.defaultNetwork; }; const onChangePassword = () => { @@ -208,6 +224,9 @@ const onChangeTimeZone = () => { const onChangeNtp = () => { ntpRef.value.acceptParams({ localTime: form.localTime, ntpSite: form.ntpSite }); }; +const onChangeNetwork = () => { + netwrokRef.value.acceptParams({ defaultNetwork: form.defaultNetwork }); +}; const onSave = async (key: string, val: any) => { loading.value = true;