diff --git a/backend/app/dto/setting.go b/backend/app/dto/setting.go index b46dcc76..61f2f49d 100644 --- a/backend/app/dto/setting.go +++ b/backend/app/dto/setting.go @@ -5,6 +5,7 @@ import "time" type SettingInfo struct { UserName string `json:"userName"` Email string `json:"email"` + SystemIP string `json:"systemIP"` SystemVersion string `json:"systemVersion"` SessionTimeout string `json:"sessionTimeout"` diff --git a/backend/init/migration/migrations/init.go b/backend/init/migration/migrations/init.go index 346e9dfc..94a5f851 100644 --- a/backend/init/migration/migrations/init.go +++ b/backend/init/migration/migrations/init.go @@ -407,6 +407,9 @@ var AddMfaInterval = &gormigrate.Migration{ if err := tx.Create(&model.Setting{Key: "MFAInterval", Value: "30"}).Error; err != nil { return err } + if err := tx.Create(&model.Setting{Key: "SystemIP", 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 95aa2aad..2b9537fb 100644 --- a/frontend/src/api/interface/setting.ts +++ b/frontend/src/api/interface/setting.ts @@ -5,6 +5,7 @@ export namespace Setting { userName: string; password: string; email: string; + systemIP: string; systemVersion: string; sessionTimeout: number; diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 691cf41e..2d494cde 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -969,6 +969,8 @@ const message = { sessionTimeoutError: 'The minimum timeout is 300 seconds', sessionTimeoutHelper: 'If you do not operate the panel for more than {0} seconds, the panel automatically logs out', + systemIP: 'System IP', + systemIPWarning: 'Please set the system IP in the panel settings first.', 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/zh.ts b/frontend/src/lang/modules/zh.ts index 4c5a82b5..43e7e9b1 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -949,6 +949,8 @@ const message = { sessionTimeout: '超时时间', sessionTimeoutError: '最小超时时间为 300 秒', sessionTimeoutHelper: '如果用户超过 {0} 秒未操作面板,面板将自动退出登录', + systemIP: '服务器 IP', + systemIPWarning: '请先在面板设置中设置服务器 IP', syncTime: '服务器时间', timeZone: '系统时区', timeZoneChangeHelper: '系统时区修改需要重启服务,是否继续?', diff --git a/frontend/src/views/container/container/index.vue b/frontend/src/views/container/container/index.vue index 2ddc9b7b..4f876fd3 100644 --- a/frontend/src/views/container/container/index.vue +++ b/frontend/src/views/container/container/index.vue @@ -90,7 +90,16 @@
- {{ item }} + + {{ item }} +
@@ -154,8 +163,9 @@ import { Container } from '@/api/interface/container'; import { ElMessageBox } from 'element-plus'; import i18n from '@/lang'; import router from '@/routers'; -import { MsgSuccess } from '@/utils/message'; +import { MsgError, MsgSuccess } from '@/utils/message'; import { computeSize } from '@/utils/util'; +import { getSettingInfo } from '@/api/modules/setting'; const loading = ref(); const data = ref(); @@ -184,6 +194,20 @@ const loadStatus = async () => { loading.value = false; }); }; + +const goDashboard = async (port: any) => { + if (!port || port.indexOf(':') === -1) { + return; + } + let portEx = port.split(':')[0]; + const res = await getSettingInfo(); + if (!res.data.systemIP) { + MsgError(i18n.global.t('setting.systemIPWarning')); + return; + } + window.open(`http://${res.data.systemIP}:${portEx}`, '_blank'); +}; + const goSetting = async () => { router.push({ name: 'ContainerSetting' }); }; diff --git a/frontend/src/views/container/container/operate/index.vue b/frontend/src/views/container/container/operate/index.vue index 1c43b389..d390169e 100644 --- a/frontend/src/views/container/container/operate/index.vue +++ b/frontend/src/views/container/container/operate/index.vue @@ -257,7 +257,6 @@ const acceptParams = (params: DialogProps): void => { item.host = item.hostPort; } dialogData.value.rowData.volumes = dialogData.value.rowData.volumes || []; - console.log(dialogData.value.rowData.cpuShares); } loadLimit(); loadImageOptions(); diff --git a/frontend/src/views/database/mysql/index.vue b/frontend/src/views/database/mysql/index.vue index 957c8769..adfb14ca 100644 --- a/frontend/src/views/database/mysql/index.vue +++ b/frontend/src/views/database/mysql/index.vue @@ -164,6 +164,7 @@ import { GetAppPort } from '@/api/modules/app'; import router from '@/routers'; import { MsgError, MsgSuccess } from '@/utils/message'; import useClipboard from 'vue-clipboard3'; +import { getSettingInfo } from '@/api/modules/setting'; const { toClipboard } = useClipboard(); const loading = ref(false); @@ -261,9 +262,12 @@ const goDashboard = async () => { phpVisiable.value = true; return; } - let href = window.location.href; - let ipLocal = href.split('//')[1].split(':')[0]; - window.open(`http://${ipLocal}:${phpadminPort.value}`, '_blank'); + const res = await getSettingInfo(); + if (!res.data.systemIP) { + MsgError(i18n.global.t('setting.systemIPWarning')); + return; + } + window.open(`http://${res.data.systemIP}:${phpadminPort.value}`, '_blank'); }; const getAppDetail = (key: string) => { router.push({ name: 'AppDetail', params: { appKey: key } }); diff --git a/frontend/src/views/database/redis/index.vue b/frontend/src/views/database/redis/index.vue index 47e31945..a133d2e9 100644 --- a/frontend/src/views/database/redis/index.vue +++ b/frontend/src/views/database/redis/index.vue @@ -65,6 +65,9 @@ import { nextTick, onBeforeUnmount, ref } from 'vue'; import { App } from '@/api/interface/app'; import { GetAppPort } from '@/api/modules/app'; import router from '@/routers'; +import { MsgError } from '@/utils/message'; +import { getSettingInfo } from '@/api/modules/setting'; +import i18n from '@/lang'; const loading = ref(false); const maskShow = ref(true); @@ -94,9 +97,12 @@ const goDashboard = async () => { commandVisiable.value = true; return; } - let href = window.location.href; - let ipLocal = href.split('//')[1].split(':')[0]; - window.open(`http://${ipLocal}:${redisCommandPort.value}`, '_blank'); + const res = await getSettingInfo(); + if (!res.data.systemIP) { + MsgError(i18n.global.t('setting.systemIPWarning')); + return; + } + window.open(`http://${res.data.systemIP}:${redisCommandPort.value}`, '_blank'); }; const getAppDetail = (key: string) => { router.push({ name: 'AppDetail', params: { appKey: key } }); diff --git a/frontend/src/views/host/file-management/upload/index.vue b/frontend/src/views/host/file-management/upload/index.vue index 77db2460..87e842da 100644 --- a/frontend/src/views/host/file-management/upload/index.vue +++ b/frontend/src/views/host/file-management/upload/index.vue @@ -82,7 +82,6 @@ const handleExceed: UploadProps['onExceed'] = (files) => { }; const hadleSuccess: UploadProps['onSuccess'] = (res, file) => { - console.log(file.name); file.status = 'success'; }; diff --git a/frontend/src/views/setting/panel/index.vue b/frontend/src/views/setting/panel/index.vue index 160c5db7..e6c7c80b 100644 --- a/frontend/src/views/setting/panel/index.vue +++ b/frontend/src/views/setting/panel/index.vue @@ -82,6 +82,22 @@ + + + + + + + +