diff --git a/backend/constant/common.go b/backend/constant/common.go
index 5637d5811..687c22998 100644
--- a/backend/constant/common.go
+++ b/backend/constant/common.go
@@ -117,11 +117,11 @@ var WebUrlMap = map[string]struct{}{
"/xpack/monitor/rank": {},
"/xpack/monitor/log": {},
"/xpack/tamper": {},
- "/xpack/gpu": {},
"/xpack/alert/dashboard": {},
"/xpack/alert/log": {},
"/xpack/alert/setting": {},
"/xpack/setting": {},
+ "/xpack/app": {},
}
var DynamicRoutes = []string{
diff --git a/backend/constant/errs.go b/backend/constant/errs.go
index 0a2895b19..6cf28d1c8 100644
--- a/backend/constant/errs.go
+++ b/backend/constant/errs.go
@@ -182,3 +182,10 @@ var (
ErrAlertSync = "ErrAlertSync"
ErrAlertRemote = "ErrAlertRemote"
)
+
+// mobile app
+var (
+ ErrVerifyToken = "ErrVerifyToken"
+ ErrInvalidToken = "ErrInvalidToken"
+ ErrExpiredToken = "ErrExpiredToken"
+)
diff --git a/backend/i18n/lang/en.yaml b/backend/i18n/lang/en.yaml
index 68a39cd68..06f8d7fbc 100644
--- a/backend/i18n/lang/en.yaml
+++ b/backend/i18n/lang/en.yaml
@@ -287,3 +287,8 @@ SystemMode: "mode: "
#ai-tool
ErrOpenrestyInstall: 'Please install Openresty first'
+
+#mobile app
+ErrVerifyToken: 'Token verification error, please reset and scan again.'
+ErrInvalidToken: 'Invalid token, please reset and scan again.'
+ErrExpiredToken: 'Token has expired, please reset and scan again.'
diff --git a/backend/i18n/lang/ja.yaml b/backend/i18n/lang/ja.yaml
index 880353080..26e6c3088 100644
--- a/backend/i18n/lang/ja.yaml
+++ b/backend/i18n/lang/ja.yaml
@@ -283,4 +283,9 @@ SystemVersion: "バージョン:"
SystemMode: "モード:"
#ai-tool
-ErrOpenrestyInstall: 'まず Openresty をインストールしてください'
\ No newline at end of file
+ErrOpenrestyInstall: 'まず Openresty をインストールしてください'
+
+#mobile app
+ErrVerifyToken: 'トークンの検証エラーです。リセット後、再度QRコードをスキャンしてください。'
+ErrInvalidToken: '無効なトークンです。リセット後、再度QRコードをスキャンしてください。'
+ErrExpiredToken: 'トークンの有効期限が切れました。リセット後、再度QRコードをスキャンしてください。'
diff --git a/backend/i18n/lang/ko.yaml b/backend/i18n/lang/ko.yaml
index 5338b5c8d..3122f4b17 100644
--- a/backend/i18n/lang/ko.yaml
+++ b/backend/i18n/lang/ko.yaml
@@ -286,4 +286,9 @@ SystemVersion: "버전: "
SystemMode: "모드: "
#ai-tool
-ErrOpenrestyInstall: '먼저 Openresty를 설치하세요'
\ No newline at end of file
+ErrOpenrestyInstall: '먼저 Openresty를 설치하세요'
+
+#mobile app
+ErrVerifyToken: '토큰 검증 오류가 발생했습니다. 재설정 후 다시 스캔해 주세요.'
+ErrInvalidToken: '유효하지 않은 토큰입니다. 재설정 후 다시 스캔해 주세요.'
+ErrExpiredToken: '토큰이 만료되었습니다. 재설정 후 다시 스캔해 주세요.'
diff --git a/backend/i18n/lang/ms.yml b/backend/i18n/lang/ms.yml
index ace41c67f..6da80d626 100644
--- a/backend/i18n/lang/ms.yml
+++ b/backend/i18n/lang/ms.yml
@@ -285,4 +285,9 @@ SystemVersion: "Versi: "
SystemMode: "Mod: "
#ai-tool
-ErrOpenrestyInstall: 'Sila pasang Openresty terlebih dahulu'
\ No newline at end of file
+ErrOpenrestyInstall: 'Sila pasang Openresty terlebih dahulu'
+
+#mobile app
+ErrVerifyToken: 'Ralat pengesahan token, sila tetapkan semula dan imbas semula.'
+ErrInvalidToken: 'Token tidak sah, sila tetapkan semula dan imbas semula.'
+ErrExpiredToken: 'Token telah tamat tempoh, sila tetapkan semula dan imbas semula.'
diff --git a/backend/i18n/lang/pt-BR.yaml b/backend/i18n/lang/pt-BR.yaml
index 78e96743b..8d1694a3b 100644
--- a/backend/i18n/lang/pt-BR.yaml
+++ b/backend/i18n/lang/pt-BR.yaml
@@ -283,4 +283,9 @@ SystemVersion: "versão: "
SystemMode: "modo: "
#ai-tool
-ErrOpenrestyInstall: 'Por favor, instale o Openresty primeiro'
\ No newline at end of file
+ErrOpenrestyInstall: 'Por favor, instale o Openresty primeiro'
+
+#mobile app
+ErrVerifyToken: 'Erro de verificação do token, por favor, reinicie e escaneie novamente.'
+ErrInvalidToken: 'Token inválido, por favor, reinicie e escaneie novamente.'
+ErrExpiredToken: 'O token expirou, por favor, reinicie e escaneie novamente.'
diff --git a/backend/i18n/lang/ru.yaml b/backend/i18n/lang/ru.yaml
index bb32d2356..d7fd3de68 100644
--- a/backend/i18n/lang/ru.yaml
+++ b/backend/i18n/lang/ru.yaml
@@ -285,5 +285,10 @@ DBConnErr: "Ошибка: не удалось инициализировать
SystemVersion: "версия: "
SystemMode: "режим: "
-#ai-tool
+#ai-tool
"ErrOpenrestyInstall": "Пожалуйста, установите Openresty сначала"
+
+#mobile app
+ErrVerifyToken: 'шибка проверки токена, пожалуйста, сбросьте и отсканируйте снова.'
+ErrInvalidToken: 'Неверный токен, пожалуйста, сбросьте и отсканируйте снова.'
+ErrExpiredToken: 'Токен истек, пожалуйста, сбросьте и отсканируйте снова.'
diff --git a/backend/i18n/lang/zh-Hant.yaml b/backend/i18n/lang/zh-Hant.yaml
index 54ff41298..32d45d00c 100644
--- a/backend/i18n/lang/zh-Hant.yaml
+++ b/backend/i18n/lang/zh-Hant.yaml
@@ -285,5 +285,10 @@ DBConnErr: "錯誤:初始化資料庫連線失敗,{{ .err }}"
SystemVersion: "版本:"
SystemMode: "模式:"
-#ai-tool
-"ErrOpenrestyInstall": "請先安裝 Openresty"
\ No newline at end of file
+#ai-tool
+"ErrOpenrestyInstall": "請先安裝 Openresty"
+
+#mobile app
+ErrVerifyToken: '令牌驗證錯誤,請重置後再次掃碼'
+ErrInvalidToken: '無效的令牌,請重置後再次掃碼'
+ErrExpiredToken: '令牌過期,請重置後再次掃碼'
diff --git a/backend/i18n/lang/zh.yaml b/backend/i18n/lang/zh.yaml
index fab315a0b..5a621d7f3 100644
--- a/backend/i18n/lang/zh.yaml
+++ b/backend/i18n/lang/zh.yaml
@@ -286,4 +286,9 @@ SystemVersion: "版本:"
SystemMode: "模式:"
#ai-tool
-ErrOpenrestyInstall: '请先安装 Openresty'
\ No newline at end of file
+ErrOpenrestyInstall: '请先安装 Openresty'
+
+#mobile app
+ErrVerifyToken: '令牌验证错误,请重置后再次扫码'
+ErrInvalidToken: '无效的令牌,请重置后再次扫码'
+ErrExpiredToken: '令牌过期,请重置后再次扫码'
diff --git a/backend/init/migration/migrate.go b/backend/init/migration/migrate.go
index e73515842..76b361107 100644
--- a/backend/init/migration/migrate.go
+++ b/backend/init/migration/migrate.go
@@ -103,6 +103,8 @@ func Init() {
migrations.UpdateAppTag,
migrations.UpdateApp,
migrations.AddOllamaModel,
+ migrations.AddAppMenu,
+ migrations.AddAppPanelName,
})
if err := m.Migrate(); err != nil {
global.LOG.Error(err)
diff --git a/backend/init/migration/migrations/v_1_10.go b/backend/init/migration/migrations/v_1_10.go
index 656fc0932..81690a5a0 100644
--- a/backend/init/migration/migrations/v_1_10.go
+++ b/backend/init/migration/migrations/v_1_10.go
@@ -390,3 +390,61 @@ var AddOllamaModel = &gormigrate.Migration{
return nil
},
}
+
+var AddAppMenu = &gormigrate.Migration{
+ ID: "20250217-update-xpack-hide-menu",
+ Migrate: func(tx *gorm.DB) error {
+ var (
+ setting model.Setting
+ menu dto.XpackHideMenu
+ )
+
+ tx.Model(&model.Setting{}).Where("key = ?", "XpackHideMenu").First(&setting)
+
+ if err := json.Unmarshal([]byte(setting.Value), &menu); err != nil {
+ return err
+ }
+
+ var newChildren []dto.XpackHideMenu
+ for _, item := range menu.Children {
+ if item.ID != "4" {
+ newChildren = append(newChildren, item)
+ }
+ }
+ menu.Children = newChildren
+
+ appIsCheck := false
+ for _, item := range menu.Children {
+ if item.IsCheck {
+ appIsCheck = true
+ break
+ }
+ }
+
+ menu.Children = append(menu.Children, dto.XpackHideMenu{
+ ID: "8",
+ Title: "xpack.app.app",
+ Path: "/xpack/app",
+ Label: "XApp",
+ IsCheck: appIsCheck,
+ })
+
+ data, err := json.Marshal(menu)
+ if err != nil {
+ return err
+ }
+
+ return tx.Model(&model.Setting{}).Where("key = ?", "XpackHideMenu").Updates(map[string]interface{}{"value": string(data)}).Error
+ },
+}
+
+var AddAppPanelName = &gormigrate.Migration{
+ ID: "20250218-add-app-panel-name",
+ Migrate: func(tx *gorm.DB) error {
+
+ if err := tx.Create(&model.Setting{Key: "AppPanelName", Value: ""}).Error; err != nil {
+ return err
+ }
+ return nil
+ },
+}
diff --git a/frontend/src/assets/iconfont/iconfont.css b/frontend/src/assets/iconfont/iconfont.css
index ff285ec15..b13e8ab57 100644
--- a/frontend/src/assets/iconfont/iconfont.css
+++ b/frontend/src/assets/iconfont/iconfont.css
@@ -1,9 +1,9 @@
@font-face {
font-family: "panel"; /* Project id 3575356 */
- src: url('iconfont.woff2?t=1739443302730') format('woff2'),
- url('iconfont.woff?t=1739443302730') format('woff'),
- url('iconfont.ttf?t=1739443302730') format('truetype'),
- url('iconfont.svg?t=1739443302730#panel') format('svg');
+ src: url('iconfont.woff2?t=1739946811686') format('woff2'),
+ url('iconfont.woff?t=1739946811686') format('woff'),
+ url('iconfont.ttf?t=1739946811686') format('truetype'),
+ url('iconfont.svg?t=1739946811686#panel') format('svg');
}
.panel {
@@ -14,6 +14,18 @@
-moz-osx-font-smoothing: grayscale;
}
+.p-app-3:before {
+ content: "\e69e";
+}
+
+.p-app-2:before {
+ content: "\e6ec";
+}
+
+.p-app-1:before {
+ content: "\e639";
+}
+
.p-jiqiren2:before {
content: "\e613";
}
@@ -174,6 +186,10 @@
content: "\e604";
}
+.p-gpu-1:before {
+ content: "\e63d";
+}
+
.p-monitor-4:before {
content: "\ec4e";
}
diff --git a/frontend/src/assets/iconfont/iconfont.js b/frontend/src/assets/iconfont/iconfont.js
index a78d93dc1..a956c3f10 100644
--- a/frontend/src/assets/iconfont/iconfont.js
+++ b/frontend/src/assets/iconfont/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_3575356='',(h=>{var l=(a=(a=document.getElementsByTagName("script"))[a.length-1]).getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,t,p,z,v,i=function(l,a){a.parentNode.insertBefore(l,a)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}c=function(){var l,a=document.createElement("div");a.innerHTML=h._iconfont_svg_string_3575356,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?i(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),c()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=c,z=h.document,v=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}function m(){v||(v=!0,p())}function d(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(d,50)}m()}})(window);
\ No newline at end of file
+window._iconfont_svg_string_3575356='',(h=>{var l=(a=(a=document.getElementsByTagName("script"))[a.length-1]).getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,t,p,z,v,i=function(l,a){a.parentNode.insertBefore(l,a)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}c=function(){var l,a=document.createElement("div");a.innerHTML=h._iconfont_svg_string_3575356,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?i(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),c()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=c,z=h.document,v=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,m())})}function m(){v||(v=!0,p())}function d(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(d,50)}m()}})(window);
\ No newline at end of file
diff --git a/frontend/src/assets/iconfont/iconfont.json b/frontend/src/assets/iconfont/iconfont.json
index 195dd08ca..61cc58e24 100644
--- a/frontend/src/assets/iconfont/iconfont.json
+++ b/frontend/src/assets/iconfont/iconfont.json
@@ -5,6 +5,27 @@
"css_prefix_text": "p-",
"description": "",
"glyphs": [
+ {
+ "icon_id": "10593804",
+ "name": "过程监控_jurassic",
+ "font_class": "app-3",
+ "unicode": "e69e",
+ "unicode_decimal": 59038
+ },
+ {
+ "icon_id": "26508547",
+ "name": "服务信息",
+ "font_class": "app-2",
+ "unicode": "e6ec",
+ "unicode_decimal": 59116
+ },
+ {
+ "icon_id": "28544760",
+ "name": "移动管理-01",
+ "font_class": "app-1",
+ "unicode": "e639",
+ "unicode_decimal": 58937
+ },
{
"icon_id": "10505865",
"name": "机器人",
@@ -285,6 +306,13 @@
"unicode": "e604",
"unicode_decimal": 58884
},
+ {
+ "icon_id": "24848551",
+ "name": "系统监控",
+ "font_class": "gpu-1",
+ "unicode": "e63d",
+ "unicode_decimal": 58941
+ },
{
"icon_id": "40398413",
"name": "监控",
diff --git a/frontend/src/assets/iconfont/iconfont.svg b/frontend/src/assets/iconfont/iconfont.svg
index 789ceedd1..9f61598d7 100644
--- a/frontend/src/assets/iconfont/iconfont.svg
+++ b/frontend/src/assets/iconfont/iconfont.svg
@@ -14,6 +14,12 @@
/>
+
+
+
+
+
+
@@ -94,6 +100,8 @@
+
+
diff --git a/frontend/src/assets/iconfont/iconfont.ttf b/frontend/src/assets/iconfont/iconfont.ttf
index fad72d2d8..f91e594ba 100644
Binary files a/frontend/src/assets/iconfont/iconfont.ttf and b/frontend/src/assets/iconfont/iconfont.ttf differ
diff --git a/frontend/src/assets/iconfont/iconfont.woff b/frontend/src/assets/iconfont/iconfont.woff
index e7d21b365..704377324 100644
Binary files a/frontend/src/assets/iconfont/iconfont.woff and b/frontend/src/assets/iconfont/iconfont.woff differ
diff --git a/frontend/src/assets/iconfont/iconfont.woff2 b/frontend/src/assets/iconfont/iconfont.woff2
index 7a213fc34..70657e4fc 100644
Binary files a/frontend/src/assets/iconfont/iconfont.woff2 and b/frontend/src/assets/iconfont/iconfont.woff2 differ
diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts
index 1ac151419..cf49bc617 100644
--- a/frontend/src/lang/modules/en.ts
+++ b/frontend/src/lang/modules/en.ts
@@ -1490,8 +1490,10 @@ const message = {
proxyDockerHelper:
'Synchronize proxy server configuration to Docker, support offline server image pulling and other operations',
apiInterface: 'Enable API',
- apiInterfaceClose: 'Once closed, API interfaces cannot be accessed. Do you want to continue?',
- apiInterfaceHelper: 'Allow third-party applications to access the API.',
+ apiInterfaceClose:
+ 'API interfaces are unavailable, app functionality will be restricted. Do you want to continue?',
+ apiInterfaceHelper:
+ 'Enable panel support for API interface access (this feature needs to be enabled for panel apps).',
apiInterfaceAlert1: `Don't enable it in production environments because it may increase server security risks.`,
apiInterfaceAlert2: `Don't use third-party applications to call the API to prevent potential security threats.`,
apiInterfaceAlert3: 'API Docs',
@@ -1810,6 +1812,7 @@ const message = {
monitor:
'Upgrade to the professional version to view the real-time status of the website, visitor trends, visitor sources, request logs and other information. ',
alert: 'Upgrade to the professional version to receive alarm information via SMS and view alarm logs, fully control various key events, and ensure worry-free system operation',
+ app: 'Upgrade to the professional version to view service information, abnormal monitoring, etc. through the mobile APP. ',
},
clean: {
scan: 'Start scanning',
diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts
index 518b4dcd7..5ca8ca2d7 100644
--- a/frontend/src/lang/modules/ja.ts
+++ b/frontend/src/lang/modules/ja.ts
@@ -1466,8 +1466,9 @@ const message = {
proxyDockerHelper:
'プロキシサーバーの構成をDockerに同期し、オフラインサーバーイメージの引っ張りやその他の操作をサポートします',
apiInterface: 'APIを有効にします',
- apiInterfaceClose: '閉じたら、APIインターフェイスにアクセスできません。続けたいですか?',
- apiInterfaceHelper: 'サードパーティのアプリケーションにAPIにアクセスできるようにします。',
+ apiInterfaceClose: 'APIインターフェースが利用できません。アプリ機能が制限されます。続行しますか?',
+ apiInterfaceHelper:
+ 'APIインターフェースアクセスのためにパネルサポートを有効にしてください(この機能はパネルアプリで有効化する必要があります)。',
apiInterfaceAlert1: `サーバーのセキュリティリスクが増加する可能性があるため、生産環境で有効にしないでください。`,
apiInterfaceAlert2: `サードパーティのアプリケーションを使用してAPIを呼び出して、潜在的なセキュリティの脅威を防止しないでください。`,
apiInterfaceAlert3: 'APIドキュメント',
@@ -1782,7 +1783,8 @@ const message = {
'プロのバージョンにアップグレードすることで、パネルロゴ、ウェルカムメッセージ、その他の情報のカスタマイズが可能になります。',
monitor:
'プロのバージョンにアップグレードして、Webサイトのリアルタイムステータス、訪問者の傾向、訪問者ソース、リクエストログ、その他の情報を表示します。',
- alert: 'プロのバージョンにアップグレードして、SMSを介してアラーム情報を受信し、アラームログを表示し、さまざまなキーイベントを完全に制御し、心配のないシステム操作を確実にする',
+ alert: 'プロのバージョンにアップグレードして、SMSを介してアラーム情報を受信し、アラームログを表示し、さまざまなキーイベントを完全に制御し、心配のないシステム操作を確実にする。',
+ app: 'モバイルアプリでサービス情報、異常監視などを表示するには、プロフェッショナル版にアップグレードしてください。',
},
clean: {
scan: 'スキャンを開始します',
diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts
index 5ff1d2b53..3db717c5e 100644
--- a/frontend/src/lang/modules/ko.ts
+++ b/frontend/src/lang/modules/ko.ts
@@ -1447,10 +1447,11 @@ const message = {
proxyDockerHelper:
'프록시 서버 구성을 Docker 에 동기화하여 오프라인 서버 이미지 가져오기 등의 작업을 지원합니다.',
apiInterface: 'API 활성화',
- apiInterfaceClose: '비활성화하면 API 인터페이스에 접근할 수 없습니다. 계속하시겠습니까?',
- apiInterfaceHelper: '서드파티 애플리케이션이 API 에 접근할 수 있도록 허용합니다.',
+ apiInterfaceClose: 'API 인터페이스를 사용할 수 없습니다. 앱 기능이 제한됩니다. 계속하시겠습니까?',
+ apiInterfaceHelper:
+ 'API 인터페이스 액세스를 위한 패널 지원을 활성화하세요 (이 기능은 패널 앱에서 활성화해야 합니다).',
apiInterfaceAlert1: '운영 환경에서는 활성화하지 마십시오. 서버 보안 위험이 증가할 수 있습니다.',
- apiInterfaceAlert2: '잠재적인 보안 위협을 방지하기 위해 서드파티 애플리케이션으로 API를 호출하지 마십시오.',
+ apiInterfaceAlert2: '잠재적인 보안 위협을 방지하기 위해 서드파티 애플리케이션으로 API 를 호출하지 마십시오.',
apiInterfaceAlert3: 'API 문서',
apiInterfaceAlert4: '사용 설명서',
apiKey: 'API 키',
@@ -1752,6 +1753,7 @@ const message = {
monitor:
'전문 버전으로 업그레이드하면 웹사이트의 실시간 상태, 방문자 트렌드, 방문자 출처, 요청 로그 등 정보를 확인할 수 있습니다.',
alert: '전문 버전으로 업그레이드하면 SMS 를 통해 알림 정보를 받고 알림 로그를 볼 수 있으며, 다양한 주요 이벤트를 완벽하게 제어하여 시스템 운영을 걱정 없이 유지할 수 있습니다.',
+ app: '프로페셔널 버전으로 업그레이드하면 모바일 APP을 통해 서비스 정보, 이상 모니터링 등을 확인할 수 있습니다.',
},
clean: {
scan: '스캔 시작',
diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts
index 0abf039d8..b64775f2e 100644
--- a/frontend/src/lang/modules/ms.ts
+++ b/frontend/src/lang/modules/ms.ts
@@ -1509,8 +1509,9 @@ const message = {
proxyDockerHelper:
'Selaraskan konfigurasi pelayan proksi ke Docker, menyokong tarikan imej pelayan luar talian dan operasi lain',
apiInterface: 'Aktifkan API',
- apiInterfaceClose: 'Setelah ditutup, antara muka API tidak boleh diakses. Adakah anda mahu meneruskan?',
- apiInterfaceHelper: 'Benarkan aplikasi pihak ketiga mengakses API.',
+ apiInterfaceClose: 'ntaramuka API tidak tersedia, fungsi aplikasi akan terhad. Adakah anda ingin meneruskan?',
+ apiInterfaceHelper:
+ 'Aktifkan sokongan panel untuk akses antaramuka API (ciri ini perlu diaktifkan untuk aplikasi panel).',
apiInterfaceAlert1:
'Jangan aktifkan dalam persekitaran pengeluaran kerana ia mungkin meningkatkan risiko keselamatan pelayan.',
apiInterfaceAlert2:
@@ -1839,6 +1840,7 @@ const message = {
monitor:
'Tingkatkan ke versi profesional untuk melihat status masa nyata laman web, tren pelawat, sumber pelawat, log permintaan dan maklumat lain.',
alert: 'Tingkatkan ke versi profesional untuk menerima maklumat amaran melalui SMS dan melihat log amaran, mengawal sepenuhnya pelbagai acara utama, dan memastikan operasi sistem bebas kerisauan.',
+ app: 'Tingkatkan ke versi profesional untuk melihat maklumat perkhidmatan, pemantauan abnormal, dll melalui aplikasi mudah alih.',
},
clean: {
scan: 'Mulakan imbasan',
diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts
index e38e6b8c8..aca8a5bca 100644
--- a/frontend/src/lang/modules/pt-br.ts
+++ b/frontend/src/lang/modules/pt-br.ts
@@ -1496,8 +1496,10 @@ const message = {
proxyDockerHelper:
'Sincronize a configuração do servidor proxy com o Docker, suportando operações de puxar imagens de servidor offline e outras',
apiInterface: 'Habilitar API',
- apiInterfaceClose: 'Uma vez fechado, as interfaces da API não poderão ser acessadas. Deseja continuar?',
- apiInterfaceHelper: 'Permitir que aplicativos de terceiros acessem a API.',
+ apiInterfaceClose:
+ 'As interfaces de API estão indisponíveis, a funcionalidade do aplicativo será restrita. Deseja continuar?',
+ apiInterfaceHelper:
+ 'Habilite o suporte ao painel para acesso à interface de API (essa funcionalidade precisa ser habilitada para aplicativos de painel).',
apiInterfaceAlert1:
'Não habilite em ambientes de produção, pois pode aumentar os riscos de segurança do servidor.',
apiInterfaceAlert2:
@@ -1826,6 +1828,7 @@ const message = {
monitor:
'Upgrade para a versão profissional para visualizar o status em tempo real do site, tendências de visitantes, fontes de visitantes, logs de solicitações e outras informações.',
alert: 'Upgrade para a versão profissional para receber informações de alarme via SMS e visualizar logs de alarmes, controlar completamente vários eventos chave e garantir a operação sem preocupações do sistema',
+ app: 'Upgrade para a versão profissional para visualizar informações do serviço, monitoramento anômalo, etc., através do aplicativo móvel.',
},
clean: {
scan: 'Iniciar escaneamento',
diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts
index dbb91a23a..5ea5ed78b 100644
--- a/frontend/src/lang/modules/ru.ts
+++ b/frontend/src/lang/modules/ru.ts
@@ -1498,8 +1498,10 @@ const message = {
proxyDockerHelper:
'Синхронизировать конфигурацию прокси-сервера с Docker, поддержка офлайн загрузки образов и других операций',
apiInterface: 'Включить API',
- apiInterfaceClose: 'После закрытия API-интерфейсы будут недоступны. Хотите продолжить?',
- apiInterfaceHelper: 'Разрешить сторонним приложениям доступ к API.',
+ apiInterfaceClose:
+ 'API интерфейсы недоступны, функциональность приложения будет ограничена. Хотите продолжить?',
+ apiInterfaceHelper:
+ 'Включите поддержку панели для доступа к интерфейсу API (эта функция должна быть активирована для панельных приложений).',
apiInterfaceAlert1:
'Не включайте в производственной среде, так как это может повысить риски безопасности сервера.',
apiInterfaceAlert2:
@@ -1825,6 +1827,7 @@ const message = {
monitor:
'Обновление до профессиональной версии позволяет просматривать статус веб-сайта в реальном времени, тенденции посещений, источники посетителей, логи запросов и другую информацию.',
alert: 'Обновление до профессиональной версии позволяет получать информацию о тревогах через SMS и просматривать логи тревог, полностью контролировать различные ключевые события и обеспечивать беспроблемную работу системы',
+ app: 'Обновите до профессиональной версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.',
},
clean: {
scan: 'Начать сканирование',
diff --git a/frontend/src/lang/modules/tw.ts b/frontend/src/lang/modules/tw.ts
index 6474d95c7..4a9844c7d 100644
--- a/frontend/src/lang/modules/tw.ts
+++ b/frontend/src/lang/modules/tw.ts
@@ -1413,10 +1413,10 @@ const message = {
proxyDocker: 'Docker 代理',
proxyDockerHelper: '將代理伺服器配寘同步至 Docker,支援離線伺服器拉取鏡像等操作',
apiInterface: 'API 介面',
- apiInterfaceClose: '關閉後將不能使用 API 介面進行瀏覽,是否繼續?',
- apiInterfaceHelper: '提供面板支援 API 介面瀏覽',
+ apiInterfaceClose: '關閉後將不能使用 API 介面進行瀏覽,APP功能將被限制,是否繼續?',
+ apiInterfaceHelper: '提供面板支持API介面訪問(面板APP需要開啟該功能)',
apiInterfaceAlert1: '請不要在生產環境開啟,這可能新增伺服器安全風險',
- apiInterfaceAlert2: '請不要使用協力廠商應用呼叫面板 API,以防止潛在的安全威脅。',
+ apiInterfaceAlert2: '請不要使用協力廠商應用呼叫面板 API,以防止潛在的安全威脅',
apiInterfaceAlert3: 'API 介面檔案',
apiInterfaceAlert4: '使用檔案',
apiKey: '介面金鑰',
@@ -1692,6 +1692,7 @@ const message = {
setting: '升級專業版可以自訂面板 Logo、歡迎簡介等資訊。',
monitor: '升級專業版可以查看網站的即時狀態、訪客趨勢、訪客來源、請求日誌等資訊。 ',
alert: '升級專業版可透過簡訊接收告警資訊,並查看告警日誌,全面掌控各類關鍵事件,確保系統執行無憂。',
+ app: '升級專業版可通過手機APP,查看服務資訊、异常監控等。',
},
clean: {
scan: '開始掃描',
diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts
index 4bcf01a83..6591d51b0 100644
--- a/frontend/src/lang/modules/zh.ts
+++ b/frontend/src/lang/modules/zh.ts
@@ -1415,10 +1415,10 @@ const message = {
proxyDocker: 'Docker 代理',
proxyDockerHelper: '将代理服务器配置同步至 Docker,支持离线服务器拉取镜像等操作',
apiInterface: 'API 接口',
- apiInterfaceClose: '关闭后将不能使用 API 接口进行访问,是否继续?',
- apiInterfaceHelper: '提供面板支持 API 接口访问',
+ apiInterfaceClose: '关闭后将不能使用 API 接口进行访问,APP 功能将被限制,是否继续?',
+ apiInterfaceHelper: '提供面板支持 API 接口访问( 面板 APP 需要开启该功能)',
apiInterfaceAlert1: '请不要在生产环境开启,这可能增加服务器安全风险',
- apiInterfaceAlert2: '请不要使用第三方应用调用面板 API,以防止潜在的安全威胁。',
+ apiInterfaceAlert2: '请不要使用第三方应用调用面板 API,以防止潜在的安全威胁',
apiInterfaceAlert3: 'API 接口文档',
apiInterfaceAlert4: '使用文档',
apiKey: '接口密钥',
@@ -1693,6 +1693,7 @@ const message = {
setting: '升级专业版可以自定义面板 Logo、欢迎简介等信息。',
monitor: '升级专业版可以查看网站的实时状态、访客趋势、访客来源、请求日志等信息。',
alert: '升级专业版可通过短信接收告警信息,并查看告警日志,全面掌控各类关键事件,确保系统运行无忧。',
+ app: '升级专业版可通过手机 APP,查看服务信息、异常监控等。',
},
clean: {
scan: '开始扫描',