From 64f80a95ab0125b06aa5cfa3d71b6f5b55d467bc Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Thu, 29 Jun 2023 11:18:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E7=B3=BB=E7=BB=9F=20?= =?UTF-8?q?IP=20=E8=AE=BE=E7=BD=AE=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E7=AB=AF=E5=8F=A3=E8=B7=B3=E8=BD=AC=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20(#1479)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/dto/setting.go | 1 + backend/init/migration/migrations/init.go | 3 + frontend/src/api/interface/setting.ts | 1 + frontend/src/lang/modules/en.ts | 2 + frontend/src/lang/modules/zh.ts | 2 + .../src/views/container/container/index.vue | 28 ++++++- .../container/container/operate/index.vue | 1 - frontend/src/views/database/mysql/index.vue | 10 ++- frontend/src/views/database/redis/index.vue | 12 ++- .../host/file-management/upload/index.vue | 1 - frontend/src/views/setting/panel/index.vue | 25 ++++++ .../views/setting/panel/systemip/index.vue | 80 +++++++++++++++++++ 12 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 frontend/src/views/setting/panel/systemip/index.vue diff --git a/backend/app/dto/setting.go b/backend/app/dto/setting.go index b46dcc761..61f2f49dd 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 346e9dfc1..94a5f8513 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 95aa2aad2..2b9537fb2 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 691cf41ee..2d494cde9 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 4c5a82b5d..43e7e9b16 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 2ddc9b7bf..4f876fd3e 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 1c43b3892..d390169e4 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 957c8769e..adfb14caa 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 47e31945a..a133d2e9a 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 77db2460f..87e842da5 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 160c5db78..e6c7c80be 100644 --- a/frontend/src/views/setting/panel/index.vue +++ b/frontend/src/views/setting/panel/index.vue @@ -82,6 +82,22 @@ + + + + + + + +