From bf6017c60c3bc631c4e37f64414172d08ca11909 Mon Sep 17 00:00:00 2001
From: maggieyyy <61950669+maggieyyy@users.noreply.github.com>
Date: Wed, 21 Aug 2024 18:09:11 +0800
Subject: [PATCH] feat:dashboard && tour && guest_login
---
frontend/README.pro.md | 2 +-
frontend/package.json | 3 +-
.../components/aoplatform/RenderRoutes.tsx | 38 +++--
frontend/packages/businessEntry/tsconfig.json | 2 +-
.../src/components/aoplatform/BasicLayout.tsx | 12 +-
.../src/components/aoplatform/PageList.tsx | 2 +-
.../common/src/components/aoplatform/Tour.tsx | 18 ++
frontend/packages/common/src/const/const.tsx | 2 +-
.../packages/common/src/const/permissions.ts | 15 ++
.../packages/common/src/utils/permission.ts | 2 +
frontend/packages/common/tailwind.config.js | 3 +
frontend/packages/core/src/App.tsx | 2 +
.../components/aoplatform/RenderRoutes.tsx | 21 ++-
frontend/packages/core/src/index.css | 2 +-
frontend/packages/core/src/pages/Login.tsx | 114 ++++++++-----
.../src/pages/logsettings/LogSettings.tsx | 2 +-
.../pages/partitions/DashboardSettingEdit.tsx | 106 ++++++++++++
.../partitions/PartitionInsideCluster.tsx | 6 +-
.../PartitionInsideDashboardSetting.tsx | 93 ++++++++++
.../resourcesettings/ResourceSettings.tsx | 2 +-
.../core/src/pages/system/SystemList.tsx | 18 +-
frontend/packages/core/tsconfig.json | 1 +
frontend/packages/core/vite.config.ts | 1 +
.../src/component/MonitorApiPage.tsx | 33 ++--
.../src/component/MonitorAppPage.tsx | 21 +--
.../src/component/MonitorDetailPage.tsx | 30 ++--
.../src/component/MonitorLineGraph.tsx | 105 ++++++------
.../src/component/MonitorPieGraph.tsx | 5 +-
.../src/component/MonitorSubPage.tsx | 24 +--
.../dashboard/src/component/MonitorTable.tsx | 17 +-
.../src/component/MonitorTotalPage.tsx | 68 +++-----
.../packages/dashboard/src/const/const.tsx | 126 +++++++-------
.../dashboard/src/pages/Dashboard.tsx | 8 +-
.../dashboard/src/pages/DashboardTabPage.tsx | 15 +-
.../packages/dashboard/src/utils/dashboard.ts | 25 +--
frontend/packages/dashboard/tsconfig.json | 2 +-
.../components/aoplatform/RenderRoutes.tsx | 2 +-
.../market/src/const/serviceHub/const.tsx | 23 +--
.../market/src/const/serviceHub/type.ts | 2 +-
frontend/packages/market/src/index.css | 4 +-
frontend/packages/market/src/pages/Login.tsx | 159 ------------------
.../src/pages/serviceHub/ApiTestGroup.tsx | 5 +-
.../pages/serviceHub/ApplyServiceModal.tsx | 21 +--
.../serviceHub/ServiceHubApiDocument.tsx | 25 +--
.../src/pages/serviceHub/ServiceHubDetail.tsx | 41 ++---
.../src/pages/serviceHub/ServiceHubGroup.tsx | 13 +-
.../src/pages/serviceHub/ServiceHubList.tsx | 13 +-
.../management/ApprovalModalContent.tsx | 20 +--
.../management/ManagementAppSetting.tsx | 3 +-
.../management/ManagementAuthorityConfig.tsx | 107 ++++++------
.../management/ManagementConfig.tsx | 50 +++---
.../management/ManagementInsideAuth.tsx | 58 +++----
.../management/ManagementInsidePage.tsx | 5 +-
.../management/ManagementInsideService.tsx | 60 +++----
.../management/ServiceHubManagement.tsx | 28 +--
frontend/packages/market/tsconfig.json | 2 +-
.../packages/openApi/src/consts/const.tsx | 49 ++++++
frontend/packages/openApi/src/consts/type.ts | 11 ++
.../openApi/src/pages/OpenApiConfig.tsx | 27 ++-
.../openApi/src/pages/OpenApiList.tsx | 123 ++++----------
frontend/packages/openApi/tsconfig.json | 2 +-
.../systemRunning/src/pages/SystemRunning.tsx | 30 ++--
.../src/pages/SystemRunningInstruction.tsx | 3 +-
frontend/packages/systemRunning/tsconfig.json | 2 +-
64 files changed, 977 insertions(+), 857 deletions(-)
create mode 100644 frontend/packages/common/src/components/aoplatform/Tour.tsx
create mode 100644 frontend/packages/core/src/pages/partitions/DashboardSettingEdit.tsx
create mode 100644 frontend/packages/core/src/pages/partitions/PartitionInsideDashboardSetting.tsx
delete mode 100644 frontend/packages/market/src/pages/Login.tsx
create mode 100644 frontend/packages/openApi/src/consts/const.tsx
create mode 100644 frontend/packages/openApi/src/consts/type.ts
diff --git a/frontend/README.pro.md b/frontend/README.pro.md
index 93bfd817..b95b1e79 100644
--- a/frontend/README.pro.md
+++ b/frontend/README.pro.md
@@ -2,7 +2,7 @@
## 代码同步
packages目录下,部分子项目为企业版独有,不要同步到开源版:
- packages/businessEntry, packages/dashboard, packages/openApi, packages/systemRunning, README.pro.md
+ packages/businessEntry, packages/openApi, packages/systemRunning, README.pro.md
## 安装依赖
建议使用pnpm
diff --git a/frontend/package.json b/frontend/package.json
index f16fd4b4..0818e906 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -15,7 +15,7 @@
"dev": "lerna run dev --scope=core --stream",
"dev:pro": "lerna run dev --scope=business-entry --stream",
"stop": "kill-port --port 5000",
- "scan":"i18next-scanner --config i18next-scanner.config.js"
+ "scan": "i18next-scanner --config i18next-scanner.config.js"
},
"keywords": [],
"author": "",
@@ -42,6 +42,7 @@
"react-ace": "^10.1.0",
"react-dom": "^18.2.0",
"react-i18next": "^15.0.1",
+ "react-joyride": "^2.8.2",
"react-router-dom": "^6.20.0",
"tailwindcss": "^3.3.5",
"uuid": "^9.0.1",
diff --git a/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx b/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx
index 69f50f4d..da7bd552 100644
--- a/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx
+++ b/frontend/packages/businessEntry/src/components/aoplatform/RenderRoutes.tsx
@@ -11,7 +11,6 @@ import {FC,lazy} from 'react';
import { TeamProvider } from '@core/contexts/TeamContext.tsx';
import SystemOutlet from '@core/pages/system/SystemOutlet.tsx';
import { DashboardProvider } from '@core/contexts/DashboardContext.tsx';
-import { PartitionProvider } from '@core/contexts/PartitionContext.tsx';
import { TenantManagementProvider } from '@market/contexts/TenantManagementContext.tsx';
type RouteConfig = {
@@ -182,6 +181,11 @@ const PUBLIC_ROUTES:RouteConfig[] = [
key: uuidv4(),
lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublish.tsx')),
children:[
+ {
+ path:'',
+ key: uuidv4(),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/system/publish/SystemInsidePublishList.tsx')),
+ },
{
path:'*',
key: uuidv4(),
@@ -202,6 +206,10 @@ const PUBLIC_ROUTES:RouteConfig[] = [
]
}
]
+ },{
+ path:'dashboardsetting',
+ key: uuidv4(),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideDashboardSetting.tsx')),
},
{
path:'cluster',
@@ -338,16 +346,6 @@ const PUBLIC_ROUTES:RouteConfig[] = [
lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@openApi/pages/OpenApiList.tsx')),
key:uuidv4(),
},
- {
- path:'logretrieval',
- lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/logRetrieval/LogRetrieval.tsx')),
- key:uuidv4(),
- },
- {
- path:'auditlog',
- lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/auditLog/AuditLog.tsx')),
- key:uuidv4(),
- },
{
path:'assets',
component:
设计中
,
@@ -394,7 +392,7 @@ const PUBLIC_ROUTES:RouteConfig[] = [
key: uuidv4(),
children:[{
path:'template/:moduleId',
- lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '../../../../common/src/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')),
key:uuidv4()
}]
@@ -405,10 +403,20 @@ const PUBLIC_ROUTES:RouteConfig[] = [
key: uuidv4(),
children:[{
path:'template/:moduleId',
- lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '../../../../common/src/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')),
+ key:uuidv4()
+ }]
+
+ },
+ {
+ path:'userProfile/*',
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/UserProfile.tsx')),
+ key:uuidv4(),
+ children:[{
+ path:'changepsw',
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/userProfile/ChangePsw.tsx')),
key:uuidv4()
}]
-
}
]
},
@@ -433,7 +441,7 @@ const generateRoutes = (routerConfig: RouteConfig[]) => {
const LazyComponent = route.lazy as React.ExoticComponent;
routeElement = (
- }>
+ }>
{route.provider ? (
createElement(route.provider, {}, )
) : (
diff --git a/frontend/packages/businessEntry/tsconfig.json b/frontend/packages/businessEntry/tsconfig.json
index bfb0e8fa..92776632 100644
--- a/frontend/packages/businessEntry/tsconfig.json
+++ b/frontend/packages/businessEntry/tsconfig.json
@@ -28,6 +28,6 @@
"@businessEntry/*": ["./src/*"],
},
},
- "include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TransferTable.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/Navigation.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/GroupTree.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../common/src/components/aoplatform/ScrollableSection.tsx", "../common/src/utils/postcat.tsx", "../common/src/utils/curl.ts", "../common/src/components/aoplatform/ResetPsw.tsx", "../common/src/components/aoplatform/SubscribeApprovalModalContent.tsx", "src/components/aoplatform/RenderRoutes.tsx", "../common/src/components/aoplatform/PublishApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePage.tsx", "../common/src/const/type.ts", "../common/src/components/aoplatform/intelligent-plugin", "../common/src/const/domain"],
+ "include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/Navigation.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../common/src/components/aoplatform/ScrollableSection.tsx", "../common/src/utils/postcat.tsx", "../common/src/utils/curl.ts", "../common/src/components/aoplatform/ResetPsw.tsx", "../common/src/components/aoplatform/SubscribeApprovalModalContent.tsx", "src/components/aoplatform/RenderRoutes.tsx", "../common/src/components/aoplatform/PublishApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePage.tsx", "../common/src/const/type.ts", "../common/src/components/aoplatform/intelligent-plugin", "../common/src/const/domain"],
"references": [{ "path": "./tsconfig.node.json" }]
}
diff --git a/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx b/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx
index 0d20a951..3866f308 100644
--- a/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx
+++ b/frontend/packages/common/src/components/aoplatform/BasicLayout.tsx
@@ -55,10 +55,10 @@ const themeToken = {
getNavItem({$t('API 市场')}, 'serviceHub','/serviceHub',,undefined,undefined,'system.workspace.api_market.view'),
]),
- APP_MODE === 'pro' ? getNavItem($t('仪表盘'), 'mainPage', '/dashboard',,[
- getNavItem({$t('运行视图')}, 'dashboard','/dashboard',,undefined,undefined,''),
- getNavItem({$t('系统拓扑图')}, 'systemrunning','/systemrunning',,undefined,undefined,''),
- ]):null,
+ getNavItem($t('仪表盘'), 'mainPage', APP_MODE === 'pro' ? '/dashboard' : '/dashboard/total',,[
+ getNavItem({$t('运行视图')}, 'dashboard',APP_MODE === 'pro' ? '/dashboard' : '/dashboard/total' ,,undefined,undefined,'system.dashboard.dashboard.view'),
+ APP_MODE === 'pro' ? getNavItem({$t('系统拓扑图')}, 'systemrunning','/systemrunning',,undefined,undefined,'system.dashboard.systemrunning.view') : null,
+ ]),
getNavItem($t('系统设置'), 'operationCenter','/member',, [
getNavItem($t('组织'), 'organization','/member',null,[
@@ -70,6 +70,7 @@ const themeToken = {
],undefined,'system.api_market.service_classification.view'),
getNavItem($t('运维与集成'), 'maintenanceCenter','/cluster', null, [
+ getNavItem({$t('监控报表')}, 'dashboardsetting','/dashboardsetting',,undefined,undefined,'system.devops.dashboardsetting.view'),
getNavItem({$t('集群')}, 'cluster','/cluster',,undefined,undefined,'system.devops.cluster.view'),
getNavItem({$t('证书')}, 'cert','/cert',,undefined,undefined,'system.devops.ssl_certificate.view'),
getNavItem({$t('日志')}, 'logsettings','/logsettings',,undefined,undefined,'system.devops.log_configuration.view'),
@@ -79,7 +80,6 @@ const themeToken = {
]),
],[state.language])
- useEffect(()=>{console.log(state.language, $t('工作空间'))},[state.language])
useEffect(() => {
if(currentUrl === '/'){
@@ -119,6 +119,7 @@ const themeToken = {
// 初始过滤操作
const res = [...TOTAL_MENU_ITEMS]!.filter(x => x).map((x: any) => (x.routes ? { ...x, routes: filterMenu(x.routes) } : x));
+ console.log(res)
// 返回处理后的数据
return { path: '/', routes: res.map(x=> ({...x, routes: x.routes?.filter(x=> (x.access || x.routes?.length > 0))})).filter(x=> (x.access || x.routes?.length > 0)) };
}, [accessData, state.language]);
@@ -196,6 +197,7 @@ const themeToken = {
return document.getElementById('test-pro-layout') || document.body;
}}
>
+
extends ProTableProps, RefAttributes>(props: React.PropsWithChildren>,ref: React.Ref) => {
- const {id,columns,request,dropMenu,searchPlaceholder,showPagination=true,primaryKey='id',addNewBtnTitle,addNewBtnAccess,tableClickAccess,tableClass,onAddNewBtnClick,beforeSearchNode,onSearchWordChange,manualReloadTable,afterNewBtn,dragSortKey,onDragSortEnd,tableTitle,rowSelection,onChange,dataSource,onRowClick,showColSetting=false,minVirtualHeight,noTop,addNewBtnWrapperClass,tableTitleClass,delayLoading = true,besidesTableHeight, noScroll} = props
+ const {id,columns,request,dropMenu,searchPlaceholder,showPagination=true,primaryKey='id',addNewBtnTitle,addNewBtnAccess,tableClickAccess,tableClass,onAddNewBtnClick,beforeSearchNode,onSearchWordChange,manualReloadTable,afterNewBtn,dragSortKey,onDragSortEnd,tableTitle,rowSelection,onChange,dataSource,onRowClick,showColSetting=false,minVirtualHeight,noTop,addNewBtnWrapperClass = '',tableTitleClass,delayLoading = true,besidesTableHeight, noScroll} = props
const parentRef = useRef(null);
const [tableHeight, setTableHeight] = useState(minVirtualHeight || window.innerHeight);
const [tableWidth, setTableWidth] = useState(undefined);
diff --git a/frontend/packages/common/src/components/aoplatform/Tour.tsx b/frontend/packages/common/src/components/aoplatform/Tour.tsx
new file mode 100644
index 00000000..fc6cb3f3
--- /dev/null
+++ b/frontend/packages/common/src/components/aoplatform/Tour.tsx
@@ -0,0 +1,18 @@
+import JoyRide, { Props } from 'react-joyride'
+
+const Tour = (props: Partial) => {
+ return (
+ <>
+
+ >
+ )
+}
+
+export default Tour
diff --git a/frontend/packages/common/src/const/const.tsx b/frontend/packages/common/src/const/const.tsx
index 8bec4469..9afb8ab3 100644
--- a/frontend/packages/common/src/const/const.tsx
+++ b/frontend/packages/common/src/const/const.tsx
@@ -27,7 +27,7 @@ export const routerKeyMap = new Map([
['operationCenter',['member','user','role','servicecategories']],
['organization',['member','user','role']],
['serviceHubSetting',['servicecategories']],
- ['maintenanceCenter',['partition','logsettings','resourcesettings','openapi']
+ ['maintenanceCenter',['dashboardsetting','cluster','cert','logsettings','resourcesettings','openapi']
]])
diff --git a/frontend/packages/common/src/const/permissions.ts b/frontend/packages/common/src/const/permissions.ts
index f20b78c7..520dd31a 100644
--- a/frontend/packages/common/src/const/permissions.ts
+++ b/frontend/packages/common/src/const/permissions.ts
@@ -139,6 +139,11 @@ export const PERMISSION_DEFINITION = [
"anyOf": [{ "backend": ["system.api_market.service_classification.manager"] }]
}
},
+ "system.devops.dashboardsetting.view":{
+ "grented":{
+ "anyOf":[{"backend":[]}]
+ }
+ },
"system.devops.cluster.view": {
"granted": {
"anyOf": [{ "backend": ["system.devops.cluster.view"] }]
@@ -224,6 +229,16 @@ export const PERMISSION_DEFINITION = [
"anyOf": [{ "backend": ["system.workspace.api_market.view"] }]
}
},
+ "system.dashboard.dashboard.view": {
+ "granted": {
+ "anyOf": [{ "backend": [] }]
+ }
+ },
+ "system.dashboard.systemrunning.view": {
+ "granted": {
+ "anyOf": [{ "backend": [] }]
+ }
+ },
"team.service.api.view": {
"granted": {
"anyOf": [{ "backend": ["team.service.api.view"] }]
diff --git a/frontend/packages/common/src/utils/permission.ts b/frontend/packages/common/src/utils/permission.ts
index 8c6bc5fe..5f5dbb05 100644
--- a/frontend/packages/common/src/utils/permission.ts
+++ b/frontend/packages/common/src/utils/permission.ts
@@ -17,6 +17,8 @@ export const checkAccess:(access:AccessDataType, accessData:Map
}
const hasIntersection = (arr1:string[], arr2:string[])=> {
+ // 当没有对应后端权限字段时,默认有权限
+ if(arr1.length === 0) return true
const set = new Set(arr1.length > arr2.length ? arr2:arr1)
const arr = arr1.length > arr2.length ? arr1:arr2
for (const item of arr) {
diff --git a/frontend/packages/common/tailwind.config.js b/frontend/packages/common/tailwind.config.js
index 33c2e2c7..b621c7be 100644
--- a/frontend/packages/common/tailwind.config.js
+++ b/frontend/packages/common/tailwind.config.js
@@ -91,6 +91,9 @@ module.exports = {
'.h-calc-100vh-minus-navbar': {
height: 'calc(100vh - var(--layout-header-height))',
},
+ '.w-calc-100vw-minus-padding-r': {
+ width: 'calc(100% - 40px)',
+ },
}, ['responsive', 'hover']);
}
],
diff --git a/frontend/packages/core/src/App.tsx b/frontend/packages/core/src/App.tsx
index 72c38005..5d6a3d4c 100644
--- a/frontend/packages/core/src/App.tsx
+++ b/frontend/packages/core/src/App.tsx
@@ -12,6 +12,7 @@ import 'dayjs/locale/zh-cn';
import dayjs from 'dayjs';
import { useTranslation } from "react-i18next";
import { useGlobalContext } from '@common/contexts/GlobalStateContext';
+import Joyride from 'react-joyride';
type Locale = ConfigProviderProps['locale'];
@@ -139,6 +140,7 @@ const antdComponentThemeToken = {
}
}
+
function App() {
const [locale, setLocal] = useState(enUS);
useInitializeMonaco()
diff --git a/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx b/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx
index ed6360f0..08b57842 100644
--- a/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx
+++ b/frontend/packages/core/src/components/aoplatform/RenderRoutes.tsx
@@ -11,8 +11,6 @@ import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx";
import {FC,lazy} from 'react';
import { TeamProvider } from '@core/contexts/TeamContext.tsx';
import SystemOutlet from '@core/pages/system/SystemOutlet.tsx';
-import { DashboardProvider } from '@core/contexts/DashboardContext.tsx';
-import { PartitionProvider } from '@core/contexts/PartitionContext.tsx';
import { TenantManagementProvider } from '@market/contexts/TenantManagementContext.tsx';
type RouteConfig = {
@@ -210,6 +208,11 @@ const PUBLIC_ROUTES:RouteConfig[] = [
}
]
},
+ {
+ path:'dashboardsetting',
+ key: uuidv4(),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@core/pages/partitions/PartitionInsideDashboardSetting.tsx')),
+ },
{
path:'cluster',
key: uuidv4(),
@@ -343,6 +346,18 @@ const PUBLIC_ROUTES:RouteConfig[] = [
component:设计中
,
key:uuidv4()
},
+ {
+ path:'dashboard',
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/Dashboard.tsx')),
+ key:uuidv4(),
+ children:[
+ {
+ path:'total',
+ key:uuidv4(),
+ lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@dashboard/pages/DashboardTotal.tsx')),
+ },
+ ]
+ },
{
path:'template/:moduleId',
lazy:lazy(() => import(/* webpackChunkName: "[request]" */ '@common/components/aoplatform/intelligent-plugin/IntelligentPluginList.tsx')),
@@ -403,7 +418,7 @@ const generateRoutes = (routerConfig: RouteConfig[]) => {
const LazyComponent = route.lazy as React.ExoticComponent;
routeElement = (
- }>
+ }>
{route.provider ? (
createElement(route.provider, {}, )
) : (
diff --git a/frontend/packages/core/src/index.css b/frontend/packages/core/src/index.css
index 34a334d0..2b601c3d 100644
--- a/frontend/packages/core/src/index.css
+++ b/frontend/packages/core/src/index.css
@@ -662,7 +662,7 @@ p{
.ant-pro-table-list-toolbar-setting-items{
position:absolute;
- top:13px;
+ top:14px;
right:16px;
z-index:9;
.ant-pro-table-list-toolbar-setting-item{
diff --git a/frontend/packages/core/src/pages/Login.tsx b/frontend/packages/core/src/pages/Login.tsx
index e37b3c8c..222195d3 100644
--- a/frontend/packages/core/src/pages/Login.tsx
+++ b/frontend/packages/core/src/pages/Login.tsx
@@ -1,5 +1,5 @@
import {FC, useCallback, useEffect, useRef, useState} from "react";
-import {App, Button, Form, FormInstance, Input} from "antd";
+import {App, Button, Divider, Form, FormInstance, Input, Tooltip} from "antd";
import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
@@ -7,6 +7,7 @@ import {useNavigate} from "react-router-dom";
// import {useCrypto} from "../hooks/crypto.ts";
import Logo from '@common/assets/logo.png'
import { $t } from "@common/locales";
+import { Icon } from "@iconify/react/dist/iconify.js";
const Login:FC = ()=> {
const {state, dispatch} = useGlobalContext()
@@ -16,16 +17,19 @@ const Login:FC = ()=> {
const formRef = useRef(null);
const [loading,setLoading] = useState()
// const { encryptByEnAES } = useCrypto();
+ const [allowGuest, setAllowGuest] = useState(false)
const check = useCallback(()=>{
fetchData, status:string}>>('account/login',{method:'GET'}).then(response=>{
const {code,data} = response
+
if(code === STATUS_CODE.SUCCESS && data.status !== 'anonymous'){
dispatch({type:'LOGIN'})
navigate(state.mainPage)
}else{
dispatch({type:'LOGOUT'})
+ setAllowGuest(data.channel.filter(x=>x.name === 'guest_access').length > 0)
}
})
},[])
@@ -41,47 +45,54 @@ const Login:FC = ()=> {
})
},[])
+
+ const fetchLogin = async (values:any)=>{
+ try {
+ setLoading(true);
+ const { username, password } = values;
+ // const encryptedPassword = encryptByEnAES(username, password);
+
+ const body = {
+ name:username,
+ password: password
+ // client: 1,
+ // type: 1,
+ // app_type: 4,
+ };
+
+ const {code,msg } = await fetchData>('account/login/username',{method:'POST',eoBody:(body)})
+
+ if (code === STATUS_CODE.SUCCESS) {
+ dispatch({type:'LOGIN'})
+ message.success(RESPONSE_TIPS.loginSuccess);
+ const callbackUrl = new URLSearchParams(window.location.search).get('callbackUrl');
+ if (callbackUrl && callbackUrl !== 'null') {
+ navigate(callbackUrl);
+ } else {
+ navigate(state.mainPage);
+ }
+ }else{
+ dispatch({type:'LOGOUT'})
+ message.error(msg)
+ }
+
+ } catch (err) {
+ console.warn(err);
+ } finally {
+ setLoading(false)
+ }
+ }
const login = async () => {
if (formRef.current) {
- try {
- const values = await formRef.current.validateFields();
- setLoading(true);
-
- const { username, password } = values;
- // const encryptedPassword = encryptByEnAES(username, password);
-
- const body = {
- name:username,
- password: password
- // client: 1,
- // type: 1,
- // app_type: 4,
- };
-
- const {code,msg } = await fetchData>('account/login/username',{method:'POST',eoBody:(body)})
-
- if (code === STATUS_CODE.SUCCESS) {
- dispatch({type:'LOGIN'})
- message.success(RESPONSE_TIPS.loginSuccess);
- const callbackUrl = new URLSearchParams(window.location.search).get('callbackUrl');
- if (callbackUrl && callbackUrl !== 'null') {
- navigate(callbackUrl);
- } else {
- navigate(state.mainPage);
- }
- }else{
- dispatch({type:'LOGOUT'})
- message.error(msg)
- }
-
- } catch (err) {
- console.warn(err);
- } finally {
- setLoading(false)
- }
+ const values = await formRef.current.validateFields();
+ fetchLogin(values);
}
};
+ const loginAsGuest = ()=>{
+ fetchLogin({username:'guest',password:'12345678'})
+ }
+
useEffect(() => {
check()
getSystemInfo()
@@ -133,15 +144,26 @@ const Login:FC = ()=> {
/>
-
-
-
-
-
+
+
+
+ {
+ allowGuest && <>
+
+
+
+
+
+ >
+ }
diff --git a/frontend/packages/core/src/pages/logsettings/LogSettings.tsx b/frontend/packages/core/src/pages/logsettings/LogSettings.tsx
index 1f5acc31..c84616b6 100644
--- a/frontend/packages/core/src/pages/logsettings/LogSettings.tsx
+++ b/frontend/packages/core/src/pages/logsettings/LogSettings.tsx
@@ -59,7 +59,7 @@ const LogSettings = ()=>{
return (
<>
-
+
void
+}
+export type DashboardSettingEditProps = {
+ changeStatus:(status:DashboardPageShowStatus)=>void
+ refreshData:()=>void
+ data?:PartitionDashboardConfigFieldType
+}
+
+ const DashboardSettingEdit = (props:DashboardSettingEditProps)=>{
+
+ const {changeStatus,refreshData,data} = props
+ const { message } = App.useApp()
+ const [ form ] = Form.useForm();
+ const { fetchData} = useFetch()
+ const onFinish = () => {
+ form.validateFields().then((value)=>{
+ fetchData>('monitor/config',{method: 'POST',body:JSON.stringify(value),eoParams:{}}).then(response=>{
+ const {code,msg} = response
+ if(code === STATUS_CODE.SUCCESS){
+ message.success(msg || '操作成功,即将刷新页面')
+ refreshData?.()
+ }else{
+ message.error(msg || '操作失败')
+ }
+ })
+ })
+ }
+
+ useEffect(()=>{form.setFieldsValue(data)},[data])
+
+ useEffect(() => {
+ return (form.setFieldsValue({}))
+ }, []);
+
+ return (
+ <>
+
+ >
+ )
+}
+
+export default DashboardSettingEdit
\ No newline at end of file
diff --git a/frontend/packages/core/src/pages/partitions/PartitionInsideCluster.tsx b/frontend/packages/core/src/pages/partitions/PartitionInsideCluster.tsx
index e03f276f..1c9230f6 100644
--- a/frontend/packages/core/src/pages/partitions/PartitionInsideCluster.tsx
+++ b/frontend/packages/core/src/pages/partitions/PartitionInsideCluster.tsx
@@ -1,7 +1,7 @@
import { FC, useEffect, useRef, useState} from "react";
import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx";
import {App, Button, Card, Col, Row, Spin, Tag} from "antd";
-import {BasicResponse, STATUS_CODE} from "@common/const/const.tsx";
+import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import { ClusterPageShowStatus, NodeModalHandle, PartitionClusterNodeTableListItem } from "../../const/partitions/types.ts";
import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
@@ -12,7 +12,7 @@ import { $t } from "@common/locales/index.ts";
const PartitionInsideCluster:FC = ()=> {
const {setBreadcrumb} = useBreadcrumb()
- const {modal, message} = App.useApp()
+ const { message} = App.useApp()
const {fetchData} = useFetch()
const [nodeData, setNodeData] = useState()
const [loading, setLoading] = useState(false)
@@ -65,7 +65,7 @@ const PartitionInsideCluster:FC = ()=> {
APIPark Node
diff --git a/frontend/packages/core/src/pages/partitions/PartitionInsideDashboardSetting.tsx b/frontend/packages/core/src/pages/partitions/PartitionInsideDashboardSetting.tsx
new file mode 100644
index 00000000..5a1da9ad
--- /dev/null
+++ b/frontend/packages/core/src/pages/partitions/PartitionInsideDashboardSetting.tsx
@@ -0,0 +1,93 @@
+import { FC, useEffect, useState} from "react";
+import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx";
+import {App, Button, Card, Col, Row, Spin, Tag} from "antd";
+import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
+import {useFetch} from "@common/hooks/http.ts";
+import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
+import { LoadingOutlined } from "@ant-design/icons";
+import InsidePage from "@common/components/aoplatform/InsidePage.tsx";
+import { $t } from "@common/locales/index.ts";
+import DashboardSettingEdit, { DashboardPageShowStatus } from "./DashboardSettingEdit.tsx";
+import { PartitionDashboardConfigFieldType } from "@core/const/partitions/types.ts";
+
+const PartitionInsideDashboardSetting:FC = ()=> {
+ const {setBreadcrumb} = useBreadcrumb()
+ const {message} = App.useApp()
+ const {fetchData} = useFetch()
+ const [data, setData] = useState()
+ const [loading, setLoading] = useState(false)
+ const [showStatus, setShowStatus] = useState('view')
+
+ const getDashboardSettingInfo = () => {
+ setLoading(true)
+ return fetchData>('monitor/config', {method: 'GET',eoTransformKeys:[]}).then(response => {
+ const {code, data, msg} = response
+ if (code === STATUS_CODE.SUCCESS) {
+ data?.info?.driver && setData(data.info)
+ setShowStatus('view')
+ } else {
+ message.error(msg || RESPONSE_TIPS.error)
+ }
+ }).catch(() => {
+ return {data: [], success: false}
+ }).finally(()=>{
+ setLoading(false)
+ })
+ }
+
+
+ useEffect(() => {
+ setBreadcrumb([
+ {title: $t('监控报表')}
+ ])
+ getDashboardSettingInfo()
+ }, []);
+
+ const setDashboardSettingBtn = ()=>{
+ return (<>
+ {showStatus === 'view' &&
+
+ }>
+ )
+ }
+
+ return (
+ <>
+
+
+
} spinning={loading}>
+
+ {$t('统计图表')}
+ {!loading && !data?.driver && { $t('未配置')}
+ }
}
+
+ extra={setDashboardSettingBtn()}>
+ {showStatus === 'view'&& data && data.driver && DashboardConfigPreview(data) }
+ {showStatus !== 'view' &&
}
+
+
+
+
+
+ >
+ )
+}
+
+export function DashboardConfigPreview (x:PartitionDashboardConfigFieldType){
+ return
+ {$t('数据源')}:{x?.driver}
+ {$t('地址(IP:端口)')}:{x?.config?.addr}
+ {$t('组织(Organization)')}:{x?.config?.org}
+
}
+
+export default PartitionInsideDashboardSetting
\ No newline at end of file
diff --git a/frontend/packages/core/src/pages/resourcesettings/ResourceSettings.tsx b/frontend/packages/core/src/pages/resourcesettings/ResourceSettings.tsx
index e9abf44d..73603f52 100644
--- a/frontend/packages/core/src/pages/resourcesettings/ResourceSettings.tsx
+++ b/frontend/packages/core/src/pages/resourcesettings/ResourceSettings.tsx
@@ -58,7 +58,7 @@ const LogSettings = ()=>{
return (
<>
-
+
diff --git a/frontend/packages/core/src/pages/system/SystemList.tsx b/frontend/packages/core/src/pages/system/SystemList.tsx
index f1fbe627..06ba92a0 100644
--- a/frontend/packages/core/src/pages/system/SystemList.tsx
+++ b/frontend/packages/core/src/pages/system/SystemList.tsx
@@ -1,4 +1,5 @@
import PageList from "@common/components/aoplatform/PageList.tsx"
+import Tour from "@common/components/aoplatform/Tour.tsx"
import {ActionType} from "@ant-design/pro-components";
import {FC, useEffect, useMemo, useRef, useState} from "react";
import {useNavigate} from "react-router-dom";
@@ -13,6 +14,7 @@ import { DrawerWithFooter } from "@common/components/aoplatform/DrawerWithFooter
import SystemConfig from "./SystemConfig.tsx";
import { useGlobalContext } from "@common/contexts/GlobalStateContext.tsx";
import { $t } from "@common/locales/index.ts";
+import Joyride from "react-joyride";
const SystemList:FC = ()=>{
const navigate = useNavigate();
@@ -114,15 +116,28 @@ const SystemList:FC = ()=>{
return res
},[memberValueEnum,teamList])
+ const steps = [
+ {
+ target: '.my-first-step',
+ content: '点击按钮新建服务',
+ },
+ {
+ target: '.ant-table-tbody',
+ content: '点击表格查看详情',
+ placement: 'top'
+ },
+ ];
+
return (
-
+
getSystemList()}
addNewBtnTitle={$t("添加服务")}
+ addNewBtnWrapperClass={'my-first-step'}
searchPlaceholder={$t("输入名称、ID、所属团队、负责人查找服务")}
onAddNewBtnClick={() => {
setOpen(true)
@@ -140,7 +155,6 @@ const SystemList:FC = ()=>{
- //
)
}
diff --git a/frontend/packages/core/tsconfig.json b/frontend/packages/core/tsconfig.json
index 32fcee3b..b2dc4117 100644
--- a/frontend/packages/core/tsconfig.json
+++ b/frontend/packages/core/tsconfig.json
@@ -23,6 +23,7 @@
"@core/*": ["./src/*"],
"@common/*": ["../common/src/*"],
"@market/*": ["../market/src/*"],
+ "@dashboard/*": ["../dashboard/src/*"],
},
},
"include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../common/src/components/aoplatform/ScrollableSection.tsx", "../common/src/utils/postcat.tsx", "../common/src/utils/curl.ts", "../common/src/components/aoplatform/ResetPsw.tsx", "../common/src/components/aoplatform/SubscribeApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePageForHub.tsx", "src/components/aoplatform/RenderRoutes.tsx", "../common/src/components/aoplatform/PublishApprovalModalContent.tsx", "../common/src/components/aoplatform/InsidePage.tsx", "../common/src/const/type.ts", "../common/src/components/aoplatform/intelligent-plugin", "../common/src/const/domain"],
diff --git a/frontend/packages/core/vite.config.ts b/frontend/packages/core/vite.config.ts
index 10964f3f..05a1727e 100644
--- a/frontend/packages/core/vite.config.ts
+++ b/frontend/packages/core/vite.config.ts
@@ -57,6 +57,7 @@ export default defineConfig({
{ find: '@common', replacement: path.resolve(__dirname, '../common/src') },
{ find: '@market', replacement: path.resolve(__dirname, '../market/src') },
{ find: '@core', replacement: path.resolve(__dirname, './src') },
+ { find: '@dashboard', replacement: path.resolve(__dirname, '../dashboard/src') },
]
},
server: {
diff --git a/frontend/packages/dashboard/src/component/MonitorApiPage.tsx b/frontend/packages/dashboard/src/component/MonitorApiPage.tsx
index e9115635..117a4b7f 100644
--- a/frontend/packages/dashboard/src/component/MonitorApiPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorApiPage.tsx
@@ -7,7 +7,7 @@ import { getTime } from "../utils/dashboard";
import ScrollableSection from "@common/components/aoplatform/ScrollableSection";
import TimeRangeSelector, { RangeValue, TimeRange, TimeRangeButton } from "@common/components/aoplatform/TimeRangeSelector";
import MonitorTable, { MonitorTableHandler } from "./MonitorTable";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const";
import { DefaultOptionType } from "antd/es/select";
import { useParams } from "react-router-dom";
import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
@@ -15,6 +15,7 @@ import { useExcelExport } from "@common/hooks/excel";
import { API_TABLE_GLOBAL_COLUMNS_CONFIG } from "@dashboard/const/const";
import { useFetch } from "@common/hooks/http";
import { EntityItem } from "@common/const/type";
+import { $t } from "@common/locales";
export type MonitorApiPageProps = {
fetchTableData:(body:SearchBody)=>Promise>
detailDrawerContent:React.ReactNode
@@ -55,7 +56,7 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
if(code === STATUS_CODE.SUCCESS){
setApiOptionList(data.apis?.map((x:EntityItem)=>({label:x.name, value:x.id})))
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return setApiOptionList([])
}
}).catch(() => {
@@ -69,7 +70,7 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
if(code === STATUS_CODE.SUCCESS){
setProjectOptionList(data.projects?.map((x:EntityItem)=>({label:x.name, value:x.id})))
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return setProjectOptionList([])
}
}).catch(() => {
@@ -110,9 +111,9 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
fetchTableData(data).then((resp) => {
const {code,data,msg} = resp
if(code === STATUS_CODE.SUCCESS){
- exportExcel('API调用统计', [query!.start!, query!.end!], 'API调用统计', 'dashboard_api', API_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
+ exportExcel($t('API调用统计'), [query!.start!, query!.end!], $t('API调用统计'), 'dashboard_api', API_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
})
};
@@ -134,7 +135,7 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
if(code === STATUS_CODE.SUCCESS){
return {data:data.statistics?.map((x:MonitorApiData)=>{x.proxyRate = Number((x.proxyRate*100).toFixed(2));x.requestRate = Number((x.requestRate*100).toFixed(2));return x}), success: true}
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return {data:[], success:false}
}
}).catch(() => {
@@ -160,7 +161,7 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
initialDatePickerValue={datePickerValue}
onTimeRangeChange={handleTimeRangeChange}/>
-
+
@@ -181,22 +182,22 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
mode="multiple"
allowClear
maxCount={3}
- placeholder="选择API"
+ placeholder={$t("选择API")}
onChange={(value)=>{setQueryData(prevData=>({...prevData || {}, apis:value}))}}
/>
-
+
{/* setQueryData({ ...queryData, path: '' })} /> */}
- debounce((e)=>{setQueryData(prevData=>({...prevData || {}, path:e.target.value}))}, 100)(e)} allowClear placeholder='请输入请求路径进行搜索' prefix={}/>
+ debounce((e)=>{setQueryData(prevData=>({...prevData || {}, path:e.target.value}))}, 100)(e)} allowClear placeholder={$t('请输入请求路径进行搜索')} prefix={}/>
@@ -212,9 +213,9 @@ export default function MonitorApiPage(props:MonitorApiPageProps){
mask={!fullScreen}
title={<>
{fullScreen && {setFullScreen?.(false)}}>
- 退出全屏
+ {$t('退出全屏')}
}
- {detailEntityName}调用详情
+ {$t('(0)调用详情',[detailEntityName])}
{!fullScreen && {setFullScreen?.(true)}}/>}
>}
width={fullScreen ? '100%' : '60%'}
diff --git a/frontend/packages/dashboard/src/component/MonitorAppPage.tsx b/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
index b804e7c9..eeba460f 100644
--- a/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
@@ -5,13 +5,14 @@ import { EntityItem } from "@common/const/type";
import TimeRangeSelector, { RangeValue, TimeRange, TimeRangeButton } from "@common/components/aoplatform/TimeRangeSelector";
import MonitorTable, { MonitorTableHandler } from "./MonitorTable";
import { DefaultOptionType } from "antd/es/select";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const";
import { getTime } from "../utils/dashboard";
import { useExcelExport } from "@common/hooks/excel";
import { APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG } from "@dashboard/const/const";
import { CloseOutlined, ExpandOutlined } from "@ant-design/icons";
import { useFetch } from "@common/hooks/http";
import { MonitorSubQueryData } from "./MonitorSubPage";
+import { $t } from "@common/locales";
export type MonitorAppPageProps = {
fetchTableData:(body:SearchBody)=>Promise>
@@ -60,7 +61,7 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
if(code === STATUS_CODE.SUCCESS){
setListOfApps(data.projects?.map((x:EntityItem)=>({label:x.name, value:x.id})))
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return setListOfApps([])
}
}).catch(() => {
@@ -98,9 +99,9 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
fetchTableData(data).then((resp) => {
const {code,data,msg} = resp
if(code === STATUS_CODE.SUCCESS){
- exportExcel('应用调用统计', [query!.start!, query!.end!], '应用调用统计', 'dashboard_application', APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
+ exportExcel($t('应用调用统计'), [query!.start!, query!.end!], $t('应用调用统计'), 'dashboard_application', APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
})
};
@@ -117,7 +118,7 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
if(code === STATUS_CODE.SUCCESS){
return {data:data.statistics?.map((x:MonitorSubscriberData)=>{x.proxyRate = Number((x.proxyRate*100).toFixed(2));x.requestRate = Number((x.requestRate*100).toFixed(2));return x}), success: true}
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return {data:[], success:false}
}
}).catch(() => {
@@ -143,13 +144,13 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
onTimeRangeChange={handleTimeRangeChange}/>
-
+
diff --git a/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx b/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx
index b88bce3a..e48c59d9 100644
--- a/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx
@@ -3,13 +3,14 @@ import { useState, useEffect, useRef } from "react";
import { InvokeData, MonitorApiData, MonitorSubscriberData, SearchBody } from "@dashboard/const/type";
import TimeRangeSelector, { RangeValue, TimeRange, TimeRangeButton } from "@common/components/aoplatform/TimeRangeSelector";
import MonitorLineGraph from "./MonitorLineGraph";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const";
import { getTime, getTimeUnit } from "../utils/dashboard";
import MonitorTable, { MonitorTableHandler } from "./MonitorTable";
import { DashboardDetailInvokeType } from "@dashboard/pages/DashboardDetail";
import { MonitorApiQueryData } from "./MonitorApiPage";
import { MonitorSubQueryData } from "./MonitorSubPage";
import dayjs from "dayjs";
+import { $t } from "@common/locales";
type MonitorDetailPageProps = {
fetchInvokeData:(body:SearchBody)=>Promise>
@@ -38,7 +39,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
const [timeUnit, setTimeUnit] = useState()
const [invokeStaticError,setInvokeStaticError] = useState(false)
const monitorTableRef = useRef(null)
- const [modalTitle, setModalTitle] = useState('调用趋势')
+ const [modalTitle, setModalTitle] = useState($t('调用趋势'))
const [queryBtnLoading, setQueryBtnLoading] = useState(false)
useEffect(() => {
@@ -71,7 +72,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
// this.invokeLineRef?.changeLineChart()
}else{
setInvokeStaticError(true)
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
}).catch(()=>{setQueryBtnLoading(false)})
};
@@ -83,7 +84,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
if(code === STATUS_CODE.SUCCESS){
return {data:data.statistics?.map((x:(MonitorApiData|MonitorSubscriberData))=>{x.proxyRate = Number((x.proxyRate*100).toFixed(2));x.requestRate = Number((x.requestRate*100).toFixed(2));return x}), success: true}
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return {data:[], success:false}
}
}).catch(() => {
@@ -108,18 +109,13 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
setDetailInvokeStatic(tendency)
setDetailInvokeError(false)
setTimeUnit(getTimeUnit(timeInterval!))
- // this.invokeLineRef?.changeLineChart()
- setModalTitle(`${entity.name}-${detailName}调用趋势`);
+ setModalTitle($t('(0)-(1)调用趋势', [entity.name, detailName]))
setModalVisible(true);
}else{
setInvokeStaticError(true)
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
})
-
- // setModalTitle(`${entity.name}-${detailName}调用趋势`);
- // setModalVisible(true);
-
};
const handleCloseModal = () => {
@@ -144,10 +140,10 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
onTimeRangeChange={handleTimeRangeChange}
hideTitle={!fullScreen}/>
@@ -156,7 +152,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
{/* 这里应该添加图表组件 */}
{invokeStaticError ? : }
@@ -175,11 +171,11 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
maskClosable={false}
>
-
{setCompareTotal(e.target.checked)}}>加入总体数据对比
+
{setCompareTotal(e.target.checked)}}>{$t('加入总体数据对比')}
{(detailInvokeError||!modalVisible) ?
: }
@@ -188,7 +184,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){
(invokeStaticError ||!modalVisible ) ? :
diff --git a/frontend/packages/dashboard/src/component/MonitorLineGraph.tsx b/frontend/packages/dashboard/src/component/MonitorLineGraph.tsx
index ca851655..1a8bd99c 100644
--- a/frontend/packages/dashboard/src/component/MonitorLineGraph.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorLineGraph.tsx
@@ -4,6 +4,7 @@ import ECharts, { EChartsOption } from 'echarts-for-react';
import { InvokeData, LineGraphType, MessageData } from '@dashboard/const/type';
import { MONITOR_LINE_CHART_BASIC_INVOKE_SELECTED, MONITOR_LINE_CHART_BASIC_MESSAGE_SELECTED, MONITOR_LINE_CHART_OPTION_CONFIG, MONITOR_NAME_MAP } from '@dashboard/const/const';
import { yUnitFormatter } from '../utils/dashboard';
+import { $t } from '@common/locales';
type LineGraphProps = {
className?:string
@@ -133,7 +134,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
yAxis: [{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用量',[yAxisTitle]) : '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -148,7 +149,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -165,12 +166,12 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
}],
series: [
- { type: 'line', symbol: 'none', name: '请求总数', data: (lineData as InvokeData)?.requestTotal, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '请求成功率', data: (lineData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
- { type: 'line', symbol: 'none', name: '转发总数', data: (lineData as InvokeData)?.proxyTotal, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码4xx数', data: (lineData as InvokeData)?.status_4xx, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码5xx数', data: (lineData as InvokeData)?.status_5xx, yAxisIndex: 0 }
+ { type: 'line', symbol: 'none', name: $t('请求总数'), data: (lineData as InvokeData)?.requestTotal, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('请求成功率'), data: (lineData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (lineData as InvokeData)?.proxyTotal, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码4xx数'), data: (lineData as InvokeData)?.status_4xx, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码5xx数'), data: (lineData as InvokeData)?.status_5xx, yAxisIndex: 0 }
]
})
@@ -185,11 +186,11 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
// echarts会根据你定义的颜色返回一个生成好的带颜色的标记,直接实用即可
let str = ''
if (i === Math.floor(params.length / 2)) {
- str = '
' + (params[0].seriesIndex === 0 ? dataTitle + '调用总体趋势' :modalTitle) + '   ' + params[0].axisValue + '
' + item.marker
+ str = '
' + (params[0].seriesIndex === 0 ? dataTitle + $t('调用总体趋势') :modalTitle) + '   ' + params[0].axisValue + '
' + item.marker
} else {
str = ' ' + item.marker
}
- if (item.seriesName === '请求成功率' || item.seriesName === '转发成功率') {
+ if (item.seriesName === $t('请求成功率') || item.seriesName === $t('转发成功率')) {
str += (item.seriesName + '    ' + item.value + '%
')
} else {
str += (item.seriesName + '    ' + item.value + ' ')
@@ -258,7 +259,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
yAxis: [
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用量',[yAxisTitle]) : '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -274,7 +275,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -294,7 +295,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
{
gridIndex: 1,
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用量',[yAxisTitle]) : '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -311,7 +312,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
{
gridIndex: 1,
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]): '',
position: 'right',
min: 0,
max: 100,
@@ -329,18 +330,18 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
}],
series: [
- { type: 'line', symbol: 'none', name: '请求总数', data: (lineData as InvokeData)?.requestTotal, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '请求成功率', data: (lineData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 0, yAxisIndex: 1 },
- { type: 'line', symbol: 'none', name: '转发总数', data: (lineData as InvokeData)?.proxyTotal, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 0, yAxisIndex: 1 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码4xx数', data: (lineData as InvokeData)?.status_4xx, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码5xx数', data: (lineData as InvokeData)?.status_5xx, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '请求总数', data: (compareData as InvokeData)?.requestTotal, xAxisIndex: 1, yAxisIndex: 2 },
- { type: 'line', symbol: 'none', name: '请求成功率', data: (compareData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 1, yAxisIndex: 3 },
- { type: 'line', symbol: 'none', name: '转发总数', data: (compareData as InvokeData)?.proxyTotal, xAxisIndex: 1, yAxisIndex: 2 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (compareData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 1, yAxisIndex: 3 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码4xx数', data: (compareData as InvokeData)?.status_4xx, xAxisIndex: 1, yAxisIndex: 2 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码5xx数', data: (compareData as InvokeData)?.status_5xx, xAxisIndex: 1, yAxisIndex: 2 }
+ { type: 'line', symbol: 'none', name: $t('请求总数'), data: (lineData as InvokeData)?.requestTotal, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('请求成功率'), data: (lineData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 0, yAxisIndex: 1 },
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (lineData as InvokeData)?.proxyTotal, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 0, yAxisIndex: 1 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码4xx数'), data: (lineData as InvokeData)?.status_4xx, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码5xx数'), data: (lineData as InvokeData)?.status_5xx, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('请求总数'), data: (compareData as InvokeData)?.requestTotal, xAxisIndex: 1, yAxisIndex: 2 },
+ { type: 'line', symbol: 'none', name: $t('请求成功率'), data: (compareData as InvokeData)?.requestRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 1, yAxisIndex: 3 },
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (compareData as InvokeData)?.proxyTotal, xAxisIndex: 1, yAxisIndex: 2 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (compareData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], xAxisIndex: 1, yAxisIndex: 3 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码4xx数'), data: (compareData as InvokeData)?.status_4xx, xAxisIndex: 1, yAxisIndex: 2 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码5xx数'), data: (compareData as InvokeData)?.status_5xx, xAxisIndex: 1, yAxisIndex: 2 }
]
})
@@ -381,7 +382,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
yAxis: [
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ?$t('(0)调用量',[yAxisTitle]) : '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -398,7 +399,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -415,10 +416,10 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
}],
series: [
- { type: 'line', symbol: 'none', name: '转发总数', data: (lineData as InvokeData)?.proxyTotal, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码4xx数', data: (lineData as InvokeData)?.status_4xx, yAxisIndex: 0 },
- { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: '状态码5xx数', data: (lineData as InvokeData)?.status_5xx, yAxisIndex: 0 }
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (lineData as InvokeData)?.proxyTotal, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (lineData as InvokeData)?.proxyRate?.map((x) => Number((Number(x) * 100).toFixed(2))) || [], yAxisIndex: 1 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码4xx数'), data: (lineData as InvokeData)?.status_4xx, yAxisIndex: 0 },
+ { type: 'line', lineStyle: { type: 'dashed' }, symbol: 'none', name: $t('状态码5xx数'), data: (lineData as InvokeData)?.status_5xx, yAxisIndex: 0 }
]})
const generateInvokeServiceCompareLineChartOption = ()=>({
@@ -452,18 +453,18 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
tooltip: {
trigger: 'axis',
formatter: (params:Array>) => {
- const startHtml = ' ' + (params[0].seriesIndex === 0 ? modalTitle : dataTitle + '调用总体趋势') + '   ' + params[0].axisValue + '
'
+ const startHtml = ' ' + (params[0].seriesIndex === 0 ? modalTitle : dataTitle + $t('调用总体趋势')) + '   ' + params[0].axisValue + '
'
const listArr = []
for (let i = 0; i < params.length; i++) {
const item = params[i]
// echarts会根据你定义的颜色返回一个生成好的带颜色的标记,直接实用即可
let str = ''
if (i === Math.floor(params.length / 2)) {
- str = '
' + (params[0].seriesIndex === 0 ? dataTitle + '调用总体趋势' : modalTitle) + '   ' + params[0].axisValue + '
' + item.marker
+ str = '
' + (params[0].seriesIndex === 0 ? dataTitle + $t('调用总体趋势') : modalTitle) + '   ' + params[0].axisValue + '
' + item.marker
} else {
str = ' ' + item.marker
}
- if (item.seriesName === '请求成功率' || item.seriesName === '转发成功率') {
+ if (item.seriesName === $t('请求成功率') || item.seriesName === $t('转发成功率')) {
str += (item.seriesName + '    ' + item.value + '%
')
} else {
str += (item.seriesName + '    ' + item.value + ' ')
@@ -513,7 +514,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
yAxis: [
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用量',[yAxisTitle]) : '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -529,7 +530,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -549,7 +550,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
{
gridIndex: 1,
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用量` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用量',[yAxisTitle]): '',
nameLocation: 'end',
nameTextStyle: {
align: 'left'
@@ -566,7 +567,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
{
gridIndex: 1,
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -584,14 +585,14 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
}],
series: [
- { type: 'line', symbol: 'none', name: '转发总数', data: (lineData as InvokeData)?.proxyTotal, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (lineData as InvokeData)?.proxyRate, xAxisIndex: 0, yAxisIndex: 1 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码4xx数', data: (lineData as InvokeData)?.status_4xx, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码5xx数', data: (lineData as InvokeData)?.status_5xx, xAxisIndex: 0, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '转发总数', data: (compareData as InvokeData)?.proxyTotal, xAxisIndex: 1, yAxisIndex: 2 },
- { type: 'line', symbol: 'none', name: '转发成功率', data: (compareData as InvokeData)?.proxyRate, xAxisIndex: 1, yAxisIndex: 3 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码4xx数', data: (compareData as InvokeData)?.status_4xx, xAxisIndex: 1, yAxisIndex: 2 },
- { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: '状态码5xx数', data: (compareData as InvokeData)?.status_5xx, xAxisIndex: 1, yAxisIndex: 2 }
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (lineData as InvokeData)?.proxyTotal, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (lineData as InvokeData)?.proxyRate, xAxisIndex: 0, yAxisIndex: 1 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码4xx数'), data: (lineData as InvokeData)?.status_4xx, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码5xx数'), data: (lineData as InvokeData)?.status_5xx, xAxisIndex: 0, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('转发总数'), data: (compareData as InvokeData)?.proxyTotal, xAxisIndex: 1, yAxisIndex: 2 },
+ { type: 'line', symbol: 'none', name: $t('转发成功率'), data: (compareData as InvokeData)?.proxyRate, xAxisIndex: 1, yAxisIndex: 3 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码4xx数'), data: (compareData as InvokeData)?.status_4xx, xAxisIndex: 1, yAxisIndex: 2 },
+ { type: 'line', symbol: 'none', lineStyle: { type: 'dashed' }, name: $t('状态码5xx数'), data: (compareData as InvokeData)?.status_5xx, xAxisIndex: 1, yAxisIndex: 2 }
]})
const generateTrafficLineChartOption = ()=>({
@@ -645,7 +646,7 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
},
{
type: 'value',
- name: (lineData as InvokeData)?.date.length > 0 ? `${yAxisTitle}调用成功率` : '',
+ name: (lineData as InvokeData)?.date.length > 0 ? $t('(0)调用成功率',[yAxisTitle]) : '',
position: 'right',
min: 0,
max: 100,
@@ -663,8 +664,8 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
}],
series: [
- { type: 'line', symbol: 'none', name: '请求报文量', data: (lineData as MessageData).requestMessage, yAxisIndex: 0 },
- { type: 'line', symbol: 'none', name: '响应报文量', data: (lineData as MessageData).responseMessage, yAxisIndex: 0 }
+ { type: 'line', symbol: 'none', name: $t('请求报文量'), data: (lineData as MessageData).requestMessage, yAxisIndex: 0 },
+ { type: 'line', symbol: 'none', name: $t('响应报文量'), data: (lineData as MessageData).responseMessage, yAxisIndex: 0 }
]})
@@ -694,9 +695,9 @@ const MonitorLineGraph: FC = ({ className, lineData, titles, yAx
}
// 当勾选请求成功率或转发成功率其中之一时,显示右侧y轴
if (legendSelected && lineData?.date && lineData?.date.length > 0) {
- if (!legendSelected['转发成功率'] && !legendSelected['请求成功率'] && (option.yAxis as Array)?.length > 1 && option.yAxis[1].show !== false) {
+ if (!legendSelected[$t('转发成功率')] && !legendSelected[$t('请求成功率')] && (option.yAxis as Array)?.length > 1 && option.yAxis[1].show !== false) {
option.yAxis[1].show = false
- } else if ((legendSelected['转发成功率'] || legendSelected['请求成功率']) && (option.yAxis as Array)?.length > 1 && option.yAxis[1].show !== true) {
+ } else if ((legendSelected[$t('转发成功率')] || legendSelected[$t('请求成功率')]) && (option.yAxis as Array)?.length > 1 && option.yAxis[1].show !== true) {
option.yAxis[1].show = true
}
}
diff --git a/frontend/packages/dashboard/src/component/MonitorPieGraph.tsx b/frontend/packages/dashboard/src/component/MonitorPieGraph.tsx
index 34df6b72..9c42343a 100644
--- a/frontend/packages/dashboard/src/component/MonitorPieGraph.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorPieGraph.tsx
@@ -1,6 +1,7 @@
import {FC} from 'react';
import ECharts,{EChartsOption} from 'echarts-for-react';
import { changeNumberUnit } from '../utils/dashboard';
+import { $t } from '@common/locales';
type PieGraphProps = {
className?:string,
@@ -98,13 +99,13 @@ const MonitorPieGraph: FC = ({ className,title, pieData, labelNam
-
- 状态码4XX数
+ {$t('状态码4XX数')}
{changeNumberUnit(status4xxCount)}
-
- 状态码5XX数
+ {$t('状态码5XX数')}
{changeNumberUnit(status5xxCount)}
diff --git a/frontend/packages/dashboard/src/component/MonitorSubPage.tsx b/frontend/packages/dashboard/src/component/MonitorSubPage.tsx
index c98b90c2..7d4424f8 100644
--- a/frontend/packages/dashboard/src/component/MonitorSubPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorSubPage.tsx
@@ -5,7 +5,7 @@ import { EntityItem } from "@common/const/type";
import TimeRangeSelector, { RangeValue, TimeRange, TimeRangeButton } from "@common/components/aoplatform/TimeRangeSelector";
import MonitorTable, { MonitorTableHandler } from "./MonitorTable";
import { DefaultOptionType } from "antd/es/select";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const";
import { getTime } from "../utils/dashboard";
import { useParams } from "react-router-dom";
import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
@@ -13,6 +13,7 @@ import { useExcelExport } from "@common/hooks/excel";
import { SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG } from "@dashboard/const/const";
import { CloseOutlined, ExpandOutlined } from "@ant-design/icons";
import { useFetch } from "@common/hooks/http";
+import { $t } from "@common/locales";
export type MonitorSubQueryData = SearchBody & { projects?:string[] ,type?:'subscriber'|'provider'}
@@ -64,7 +65,7 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
if(code === STATUS_CODE.SUCCESS){
setListOfProjects(data.projects?.map((x:EntityItem)=>({label:x.name, value:x.id})))
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return setListOfProjects([])
}
}).catch(() => {
@@ -102,9 +103,9 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
fetchTableData(data).then((resp) => {
const {code,data,msg} = resp
if(code === STATUS_CODE.SUCCESS){
- exportExcel('服务调用统计', [query!.start!, query!.end!], '服务调用统计', 'dashboard_service', SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
+ exportExcel($t('服务调用统计'), [query!.start!, query!.end!], $t('服务调用统计'), 'dashboard_service', SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG, data.statistics)
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
})
};
@@ -121,7 +122,7 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
if(code === STATUS_CODE.SUCCESS){
return {data:data.statistics?.map((x:MonitorSubscriberData)=>{x.proxyRate = Number((x.proxyRate*100).toFixed(2));x.requestRate = Number((x.requestRate*100).toFixed(2));return x}), success: true}
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return {data:[], success:false}
}
}).catch(() => {
@@ -152,8 +153,7 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
className="w-[346px]"
mode="multiple"
maxTagCount={1}
- // maxTagPlaceholder={(selectedList) => `and ${selectedList.length} more selected`}
- placeholder="请选择"
+ placeholder={$t("请选择服务")}
value={queryData?.projects}
options={listOfProjects}
onChange={(value)=>{setQueryData(prevData=>({...prevData || {}, projects:value}))}}
@@ -161,13 +161,13 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
@@ -182,9 +182,9 @@ export default function MonitorSubPage(props:MonitorSubPageProps){
mask={!fullScreen}
title={<>
{fullScreen && {setFullScreen?.(false)}}>
- 退出全屏
+ {$t('退出全屏')}
}
- {detailEntityName}调用详情
+ {detailEntityName}{$t('调用详情')}
{!fullScreen && {setFullScreen?.(true)}}/>}
>}
width={fullScreen ? '100%' : '60%'}
diff --git a/frontend/packages/dashboard/src/component/MonitorTable.tsx b/frontend/packages/dashboard/src/component/MonitorTable.tsx
index 30ede380..cb7cc860 100644
--- a/frontend/packages/dashboard/src/component/MonitorTable.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorTable.tsx
@@ -1,16 +1,19 @@
-import { ActionType, ProColumns } from "@ant-design/pro-components"
+import { ActionType } from "@ant-design/pro-components"
import { useImperativeHandle, useRef, useState } from "react"
-import PageList from "@common/components/aoplatform/PageList"
+import PageList, { PageProColumns } from "@common/components/aoplatform/PageList"
import TableBtnWithPermission from "@common/components/aoplatform/TableBtnWithPermission"
import { API_TABLE_GLOBAL_COLUMNS_CONFIG,SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG, APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG } from "@dashboard/const/const"
import {forwardRef} from "react"
+import { COLUMNS_TITLE } from "@common/const/const"
const TableType = {
api :API_TABLE_GLOBAL_COLUMNS_CONFIG,
provider :SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG,
subscribers :APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG
}
+const APP_MODE = import.meta.env.VITE_APP_MODE;
+
type MonitorTableProps = {
type:'api'|'subscribers'|'provider'
@@ -60,17 +63,17 @@ const MonitorTable = forwardRef>
})
}
- const operation:ProColumns[] =[
+ const operation:PageProColumns[] =[
{
- title: '操作',
+ title: COLUMNS_TITLE.operate,
key: 'option',
- width: 98,
+ btnNums:2,
fixed:'right',
hideInSetting:true,
valueType: 'option',
render: (_: React.ReactNode, entity: unknown) => [
// onRowClick(entity)} btnTitle="查看"/>,
- onRowClick(entity)} btnTitle="查看"/>,
+ onRowClick(entity)} btnTitle="查看"/>,
],
}
]
@@ -83,7 +86,7 @@ const MonitorTable = forwardRef>
besidesTableHeight={inModal ? 64+56+258: undefined}
ref={tableRef}
showPagination={showPagination}
- columns = {[...(TableType[type] || []),...operation]}
+ columns = {[...(TableType[type] || []),...(APP_MODE === 'pro' ? operation : [])]}
request={getTableDataSource}
dataSource={tableListDataSource}
// tableClickAccess="system.dashboard.self.view"
diff --git a/frontend/packages/dashboard/src/component/MonitorTotalPage.tsx b/frontend/packages/dashboard/src/component/MonitorTotalPage.tsx
index e63a9d3e..b7559429 100644
--- a/frontend/packages/dashboard/src/component/MonitorTotalPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorTotalPage.tsx
@@ -16,8 +16,10 @@ import MonitorPieGraph from "./MonitorPieGraph";
import MonitorTable, { MonitorTableHandler } from "./MonitorTable";
import { CloseOutlined, ExpandOutlined, LoadingOutlined } from "@ant-design/icons";
import DashboardDetail from "@dashboard/pages/DashboardDetail";
+import { $t } from "@common/locales";
dayjs.extend(customParseFormat);
+const APP_MODE = import.meta.env.VITE_APP_MODE;
export type MonitorTotalPageProps = {
fetchPieData:(body:SearchBody)=>Promise>
@@ -127,7 +129,7 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
setTotalEmpty(data.requestSummary.total === 0 && data.proxySummary.total === 0)
}else{
setPieError(true)
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
}).finally(()=>{
dispatch({ type: ACTIONS.REQUEST_COMPLETE, payload: 'getPieData' });
@@ -146,7 +148,7 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
// this.invokeLineRef?.changeLineChart()
}else{
setInvokeStaticError(true)
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
}).finally(()=>{
dispatch({ type: ACTIONS.REQUEST_COMPLETE, payload: 'getInvokeData' });
@@ -163,7 +165,7 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
// this.trafficLineRef?.changeLineChart()
}else{
setTrafficStaticError(true)
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
}
}).finally(()=>{
dispatch({ type: ACTIONS.REQUEST_COMPLETE, payload: 'getMessageData' });
@@ -178,7 +180,7 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
if(code === STATUS_CODE.SUCCESS){
return {data:data.top10.map((x:MonitorApiData | MonitorSubscriberData)=>{x.proxyRate = Number((x.proxyRate*100).toFixed(2));x.requestRate = Number((x.requestRate*100).toFixed(2));return x}), success: true}
}else{
- message.error(msg || '获取数据失败,请重试')
+ message.error(msg || RESPONSE_TIPS.dataError)
return {data:[], success:false}
}
}).catch(() => {
@@ -205,19 +207,19 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
const monitorTopDataTabItems:TabsProps['items'] = [
{
- label:'API 请求量 Top10',
+ label:$t('API 请求量 Top10'),
key:'api',
- children:{getDetailData(record as MonitorApiData,'api')}} request={()=>getTablesData(queryData||{},'api')}/>
+ children:{APP_MODE !== 'pro' ? null : getDetailData(record as MonitorApiData,'api')}} request={()=>getTablesData(queryData||{},'api')}/>
},
{
- label:'应用调用量 Top10',
+ label:$t('应用调用量 Top10'),
key:'subscribers',
- children:{getDetailData(record as MonitorSubscriberData,'subscriber')}} request={()=>getTablesData(queryData||{},'subscriber')} />
+ children:{APP_MODE !== 'pro' ? null : getDetailData(record as MonitorSubscriberData,'subscriber')}} request={()=>getTablesData(queryData||{},'subscriber')} />
},
{
- label:'服务被调用量 Top10',
+ label:$t('服务被调用量 Top10'),
key:'providers',
- children:{getDetailData(record as MonitorSubscriberData,'provider')}} request={()=>getTablesData(queryData||{},'provider')} />
+ children:{APP_MODE !== 'pro' ? null : getDetailData(record as MonitorSubscriberData,'provider')}} request={()=>getTablesData(queryData||{},'provider')} />
}
]
@@ -230,31 +232,17 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
return (
- {/* 筛选区域 */}
- {/* 筛选集群 */}
- {/*
-
-
*/}
- {/* 重置和查询按钮 */}
-
-
+
+
} spinning={queryBtnLoading}>
@@ -263,25 +251,25 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
{/* 图表区域 */}
{/* 请求统计饼图 */}
- {pieError ? : : }
{/* 转发统计饼图 */}
- {pieError ? : : {
{/* 折线图区域 */}
{/* 调用量统计折线图 */}
- {invokeStaticError ? : : }
{/* 报文量统计折线图 */}
- {trafficStaticError ? ::}
@@ -314,9 +302,9 @@ const MonitorTotalPage = (props:MonitorTotalPageProps) => {
mask={!fullScreen}
title={<>
{fullScreen && {setFullScreen(false)}}>
- 退出全屏
+ {$t('退出全屏')}
}
- {detailEntityName}调用详情
+ {detailEntityName}{$t('调用详情')}
{!fullScreen && {setFullScreen(true)}}/>}
>}
width={fullScreen ? '100%' : '60%'}
diff --git a/frontend/packages/dashboard/src/const/const.tsx b/frontend/packages/dashboard/src/const/const.tsx
index 21ab14b5..97601bae 100644
--- a/frontend/packages/dashboard/src/const/const.tsx
+++ b/frontend/packages/dashboard/src/const/const.tsx
@@ -1,13 +1,14 @@
-import { ProColumns } from "@ant-design/pro-components"
import { MonitorApiData, MonitorData } from "./type"
import { EChartsOption } from "echarts-for-react"
import { Tooltip } from "antd"
+import { $t } from "@common/locales"
+import { PageProColumns } from "@common/components/aoplatform/PageList"
// 监控表格参数
-export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:string})[] = [
+export const DASHBOARD_BASE_COLUMNS_CONFIG:(PageProColumns&{eoTitle:string})[] = [
{
- title: '请求总数',
- eoTitle:'请求总数',
+ title:$t('请求总数'),
+ eoTitle:$t('请求总数'),
dataIndex: 'requestTotal',
sorter: (a,b)=> {
return a.requestTotal - b.requestTotal
@@ -16,9 +17,8 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
width: 96
},
{
- // title: '请求成功数',
- title: 请求成功数,
- eoTitle:'请求成功数',
+ title: {$t('请求成功数')},
+ eoTitle:$t('请求成功数'),
dataIndex: 'requestSuccess',
width: 106,
ellipsis:true,
@@ -27,9 +27,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '请求成功率',
- title: 请求成功率,
- eoTitle:'请求成功率',
+ // title:$t('请求成功率',
+ title: {$t('请求成功率')},
+ eoTitle:$t('请求成功率'),
dataIndex: 'requestRate',
valueType:'percent',
ellipsis:true,
@@ -39,9 +39,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
width: 106
},
{
- title: '转发总数',
- eoTitle:'转发总数',
- width: 96,
+ title:$t('转发总数'),
+ eoTitle:$t('转发总数'),
+ width: 96,
dataIndex: 'proxyTotal',
ellipsis:true,
sorter: (a,b)=> {
@@ -49,10 +49,10 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '转发成功数',
- title: 转发成功数,
- eoTitle:'转发成功数',
- width: 106,
+ // title:$t('转发成功数',
+ title: {$t('转发成功数')},
+ eoTitle:$t('转发成功数'),
+ width: 106,
dataIndex: 'proxySuccess',
ellipsis:true,
sorter: (a,b)=> {
@@ -60,10 +60,10 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '转发成功率',
- title: 转发成功率,
- eoTitle:'转发成功率',
- width: 106,
+ // title:$t('转发成功率',
+ title: {$t('转发成功率')},
+ eoTitle:$t('转发成功率'),
+ width: 106,
dataIndex: 'proxyRate',
valueType:'percent',
ellipsis:true,
@@ -72,10 +72,10 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '失败状态码数',
- title: 失败状态码数,
- eoTitle:'失败状态码数',
- width: 120,
+ // title:$t('失败状态码数',
+ title: {$t('失败状态码数')},
+ eoTitle:$t('失败状态码数'),
+ width: 120,
dataIndex: 'statusFail',
ellipsis:true,
sorter: (a,b)=> {
@@ -83,9 +83,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '平均响应时间(ms)',
- title: 平均响应时间(ms),
- eoTitle:'平均响应时间(ms)',
+ // title:$t('平均响应时间(ms)',
+ title: {$t('平均响应时间(ms)')},
+ eoTitle:$t('平均响应时间(ms)'),
width: 148,
dataIndex: 'avgResp',
valueType:'digit',
@@ -95,9 +95,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '最大响应时间(ms)',
- title: 最大响应时间(ms),
- eoTitle:'最大响应时间(ms)',
+ // title:$t('最大响应时间(ms)',
+ title: {$t('最大响应时间(ms)')},
+ eoTitle:$t('最大响应时间(ms)'),
width: 148,
dataIndex: 'maxResp',
valueType:'digit',
@@ -107,9 +107,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '最小响应时间(ms)',
- title: 最小响应时间(ms),
- eoTitle:'最小响应时间(ms)',
+ // title:$t('最小响应时间(ms)',
+ title: {$t('最小响应时间(ms)')},
+ eoTitle:$t('最小响应时间(ms)'),
width: 148,
dataIndex: 'minResp',
valueType:'digit',
@@ -119,9 +119,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '平均请求流量(KB)',
- title: 平均请求流量(KB),
- eoTitle:'平均请求流量(KB)',
+ // title:$t('平均请求流量(KB)',
+ title: {$t('平均请求流量(KB)')},
+ eoTitle:$t('平均请求流量(KB)'),
width: 148,
dataIndex: 'avgTraffic',
valueType:'digit',
@@ -131,9 +131,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '最大请求流量(KB)',
- title: 最大请求流量(KB),
- eoTitle:'最大请求流量(KB)',
+ // title:$t('最大请求流量(KB)',
+ title: {$t('最大请求流量(KB)')},
+ eoTitle:$t('最大请求流量(KB)'),
width: 148,
dataIndex: 'maxTraffic',
valueType:'digit',
@@ -143,9 +143,9 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
},
},
{
- // title: '最小请求流量(KB)',
- title: 最小请求流量(KB),
- eoTitle:'最小请求流量(KB)',
+ // title:$t('最小请求流量(KB)',
+ title: {$t('最小请求流量(KB)')},
+ eoTitle:$t('最小请求流量(KB)'),
width: 148,
dataIndex: 'minTraffic',
valueType:'digit',
@@ -156,11 +156,11 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
}]
- export const API_TABLE_GLOBAL_COLUMNS_CONFIG:(ProColumns&{eoTitle:string})[] = [
+ export const API_TABLE_GLOBAL_COLUMNS_CONFIG:(PageProColumns&{eoTitle:string})[] = [
{
- title: 'API 名称',
- eoTitle:'API 名称',
+ title:$t('API 名称'),
+ eoTitle:$t('API 名称'),
dataIndex: 'name',
width:120,
ellipsis:true,
@@ -168,29 +168,29 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
disable:true
},
{
- title: '请求路径',
- eoTitle:'请求路径',
+ title:$t('请求路径'),
+ eoTitle:$t('请求路径'),
dataIndex: 'path',
ellipsis:true,
width: 80
},
{
- title: '所属服务',
- eoTitle:'所属服务',
+ title:$t('所属服务'),
+ eoTitle:$t('所属服务'),
dataIndex: ['project','name'],
ellipsis:true,
width: 80
},
- ...DASHBOARD_BASE_COLUMNS_CONFIG as (ProColumns&{eoTitle:string})[]
+ ...DASHBOARD_BASE_COLUMNS_CONFIG as (PageProColumns&{eoTitle:string})[]
]
- export const APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG:(ProColumns&{eoTitle:string})[] = [
+ export const APPLICATION_TABLE_GLOBAL_COLUMNS_CONFIG:(PageProColumns&{eoTitle:string})[] = [
{
- title: '应用名称',
- eoTitle:'应用名称',
+ title:$t('应用名称'),
+ eoTitle:$t('应用名称'),
dataIndex: 'name',
width:160,
ellipsis:true,
@@ -198,21 +198,21 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
disable:true
},
{
- title: '应用 ID',
- eoTitle:'应用 ID',
+ title:$t('应用 ID'),
+ eoTitle:$t('应用 ID'),
dataIndex: 'id',
width: 140,
ellipsis:true,
fixed: 'left'
},
- ...DASHBOARD_BASE_COLUMNS_CONFIG as (ProColumns&{eoTitle:string})[]
+ ...DASHBOARD_BASE_COLUMNS_CONFIG as (PageProColumns&{eoTitle:string})[]
]
- export const SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG:(ProColumns&{eoTitle:string})[] = [
+ export const SERVICE_TABLE_GLOBAL_COLUMNS_CONFIG:(PageProColumns&{eoTitle:string})[] = [
{
- title: '服务名称',
- eoTitle:'服务名称',
+ title:$t('服务名称'),
+ eoTitle:$t('服务名称'),
dataIndex: 'name',
width:160,
ellipsis:true,
@@ -220,14 +220,14 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(ProColumns&{eoTitle:str
disable:true
},
{
- title: '服务 ID',
- eoTitle:'服务 ID',
+ title:$t('服务 ID'),
+ eoTitle:$t('服务 ID'),
dataIndex: 'id',
width: 140,
ellipsis:true,
fixed: 'left'
},
- ...DASHBOARD_BASE_COLUMNS_CONFIG as (ProColumns&{eoTitle:string})[]
+ ...DASHBOARD_BASE_COLUMNS_CONFIG as (PageProColumns&{eoTitle:string})[]
]
export const MONITOR_LINE_CHART_BASIC_INVOKE_SELECTED = {
diff --git a/frontend/packages/dashboard/src/pages/Dashboard.tsx b/frontend/packages/dashboard/src/pages/Dashboard.tsx
index c4967d82..84a6b78a 100644
--- a/frontend/packages/dashboard/src/pages/Dashboard.tsx
+++ b/frontend/packages/dashboard/src/pages/Dashboard.tsx
@@ -2,6 +2,7 @@
import { useEffect } from "react";
import { useBreadcrumb } from "@common/contexts/BreadcrumbContext";
import DashboardPage from "./DashboardTabPage";
+import { $t } from "@common/locales";
export default function Dashboard(){
const { setBreadcrumb } = useBreadcrumb()
@@ -9,7 +10,7 @@ export default function Dashboard(){
useEffect(() => {
setBreadcrumb([
{
- title:'运行视图'
+ title:$t('运行视图')
},
])
@@ -17,8 +18,9 @@ export default function Dashboard(){
return (
<>
-
-
+
+
+
>
)
}
\ No newline at end of file
diff --git a/frontend/packages/dashboard/src/pages/DashboardTabPage.tsx b/frontend/packages/dashboard/src/pages/DashboardTabPage.tsx
index 180b6030..d6d5ccf3 100644
--- a/frontend/packages/dashboard/src/pages/DashboardTabPage.tsx
+++ b/frontend/packages/dashboard/src/pages/DashboardTabPage.tsx
@@ -4,6 +4,9 @@ import DashboardTotal from "./DashboardTotal";
import { Outlet, useNavigate, useParams } from "react-router-dom";
import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
import { useEffect, useState } from "react";
+import { $t } from "@common/locales";
+
+const APP_MODE = import.meta.env.VITE_APP_MODE;
export default function DashboardTabPage(){
const { dashboardType} = useParams()
@@ -16,32 +19,32 @@ export default function DashboardTabPage(){
const monitorTabItems:TabsProps['items'] = [
{
- label:'监控总览',
+ label:$t('监控总览'),
key:'total',
children:
},
{
- label:'服务被调用统计',
+ label:$t('服务被调用统计'),
key:'subscriber',
children:
},
{
- label:'应用调用统计',
+ label:$t('应用调用统计'),
key:'provider',
children:
},
{
- label:'API 调用统计',
+ label:$t('API 调用统计'),
key:'api',
children:
}
]
return (<>
- {
+ {APP_MODE === 'pro' ? {
setActiveKey(val);
navigateTo(`/dashboard/${val === 'total' ? val :`${val}/list`}`)
}}
items={monitorTabItems} className="h-auto mt-[6px]" size="small" tabBarStyle={{paddingLeft:'10px',marginTop:'0px',marginBottom:'0px'}} />
- >)
+ : } >)
}
\ No newline at end of file
diff --git a/frontend/packages/dashboard/src/utils/dashboard.ts b/frontend/packages/dashboard/src/utils/dashboard.ts
index b74ed142..5748f3db 100644
--- a/frontend/packages/dashboard/src/utils/dashboard.ts
+++ b/frontend/packages/dashboard/src/utils/dashboard.ts
@@ -1,5 +1,6 @@
import { RangeValue } from "@common/components/aoplatform/TimeRangeSelector";
+import { $t } from "@common/locales";
export function getTime (
timeButton: string,
@@ -45,23 +46,23 @@ export function getTime (
// 相差秒数
switch (timeInterval) {
case '1m': {
- timeUnit = '每分钟'
+ timeUnit = $t('每分钟')
break
}
case '5m': {
- timeUnit = '每5分钟'
+ timeUnit = $t('每5分钟')
break
}
case '1h': {
- timeUnit = '每小时'
+ timeUnit = $t('每小时')
break
}
case '1d': {
- timeUnit = '每天'
+ timeUnit = $t('每天')
break
}
case '1w': {
- timeUnit = '每周'
+ timeUnit = $t('每周')
break
}
}
@@ -71,23 +72,23 @@ export function getTime (
// 当数据超过10万时,保留两个小数点,单位为万,如123212,显示12.32万;
export function changeNumberUnit (value?:number):string {
if (value && value > 1000000000) {
- return (value && value / 100000000).toFixed(2) + '亿'
+ return (value && value / 100000000).toFixed(2) + $t('亿')
} else if (value && value > 1000000) {
- return (value && value / 10000).toFixed(0) + '万'
+ return (value && value / 10000).toFixed(0) + $t('万')
} else if (value && value > 10000) {
- return (value && value / 10000).toFixed(2) + '万'
+ return (value && value / 10000).toFixed(2) + $t('万')
}
- return (value ?? '-') + ' 次'
+ return (value ?? '-') + $t(' 次')
}
export function yUnitFormatter (value:number):string {
let res:string = ''
if (value > 100000000) {
- res = (value / 100000000).toFixed(2) + '亿'
+ res = (value / 100000000).toFixed(2) + $t('亿')
} else if (value > 1000000) {
- res = (value / 10000).toFixed(0) + '万'
+ res = (value / 10000).toFixed(0) + $t('万')
} else if (value > 100000) {
- res = (value / 10000).toFixed(2) + '万'
+ res = (value / 10000).toFixed(2) + $t('万')
} else {
res = value.toFixed(0)
}
diff --git a/frontend/packages/dashboard/tsconfig.json b/frontend/packages/dashboard/tsconfig.json
index 3dbba79f..1733c32f 100644
--- a/frontend/packages/dashboard/tsconfig.json
+++ b/frontend/packages/dashboard/tsconfig.json
@@ -24,6 +24,6 @@
"@dashboard/*": ["./src/*"]
},
},
- "include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TransferTable.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/Navigation.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/GroupTree.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
+ "include": ["src", "public/iconpark_eolink.js", "public/iconpark_apinto.js", "../common/src/component/aoplatform/EditableTableWithModal.tsx", "../common/src/components/aoplatform/TreeWithMore.tsx", "../common/src/components/aoplatform/DatePicker.tsx", "../common/src/components/aoplatform/TimeRangeSelector.tsx", "../common/src/components/aoplatform/TimePicker.tsx", "../common/src/components/aoplatform/MemberTransfer.tsx", "../common/src/components/aoplatform/PageList.tsx", "../common/src/components/aoplatform/ErrorBoundary.tsx", "../core/src/pages/serviceCategory/ServiceHubCategoryConfig.tsx"],
"references": [{ "path": "./tsconfig.node.json" }]
}
diff --git a/frontend/packages/market/src/components/aoplatform/RenderRoutes.tsx b/frontend/packages/market/src/components/aoplatform/RenderRoutes.tsx
index 64d018b8..b57f6174 100644
--- a/frontend/packages/market/src/components/aoplatform/RenderRoutes.tsx
+++ b/frontend/packages/market/src/components/aoplatform/RenderRoutes.tsx
@@ -147,7 +147,7 @@ const generateRoutes = (routerConfig: RouteConfig[]) => {
const LazyComponent = route.lazy as React.ExoticComponent;
routeElement = (
- }>
+ }>
{route.provider ? (
createElement(route.provider, {}, )
) : (
diff --git a/frontend/packages/market/src/const/serviceHub/const.tsx b/frontend/packages/market/src/const/serviceHub/const.tsx
index ee3aa866..761bc422 100644
--- a/frontend/packages/market/src/const/serviceHub/const.tsx
+++ b/frontend/packages/market/src/const/serviceHub/const.tsx
@@ -1,12 +1,13 @@
-import { ProColumns } from "@ant-design/pro-components";
import { MenuProps } from "antd";
import { getItem } from "@common/utils/navigation";
import { ServiceHubTableListItem } from "./type";
+import { $t } from "@common/locales";
+import { PageProColumns } from "@common/components/aoplatform/PageList";
-export const SERVICE_HUB_TABLE_COLUMNS: ProColumns[] = [
+export const SERVICE_HUB_TABLE_COLUMNS: PageProColumns[] = [
{
- title: '服务名称',
+ title:$t('服务名称'),
dataIndex: 'name',
ellipsis:true,
width:160,
@@ -16,29 +17,29 @@ export const SERVICE_HUB_TABLE_COLUMNS: ProColumns[] =
},
},
{
- title: '服务ID',
+ title:$t('服务ID'),
dataIndex: 'id',
width: 140,
ellipsis:true
},
{
- title: '服务标签',
+ title:$t('服务标签'),
dataIndex: 'tags',
ellipsis:true,
renderText:(_,entity:ServiceHubTableListItem)=>entity.tags?.map(x=>x.name).join(',') || '-'
},
{
- title: '所属系统',
+ title:$t('所属系统'),
dataIndex: ['app','name'],
ellipsis:true
},
{
- title: '所属团队',
+ title:$t('所属团队'),
dataIndex: ['team','name'],
ellipsis:true
},
{
- title: '服务分类',
+ title:$t('服务分类'),
dataIndex: ['catalogue','name'],
ellipsis:true
}
@@ -47,7 +48,7 @@ export const SERVICE_HUB_TABLE_COLUMNS: ProColumns[] =
export const TENANT_MANAGEMENT_APP_MENU: MenuProps['items'] = [
- getItem('订阅的服务', 'service'),
- getItem('访问授权', 'authorization'),
- getItem('应用管理', 'setting'),
+ getItem($t('订阅的服务'), 'service'),
+ getItem($t('访问授权'), 'authorization'),
+ getItem($t('应用管理'), 'setting'),
];
diff --git a/frontend/packages/market/src/const/serviceHub/type.ts b/frontend/packages/market/src/const/serviceHub/type.ts
index 758eaaea..e3041f3b 100644
--- a/frontend/packages/market/src/const/serviceHub/type.ts
+++ b/frontend/packages/market/src/const/serviceHub/type.ts
@@ -93,7 +93,7 @@ export type ServiceHubAppListItem = {
export type TenantManagementServiceListItem = {
id:string
service:EntityItem
- applyStatus:SubscribeEnum
+ applyStatus:typeof SubscribeEnum
app:EntityItem
team:EntityItem
from:SubscribeFromEnum
diff --git a/frontend/packages/market/src/index.css b/frontend/packages/market/src/index.css
index 0a28ace8..9154cbf7 100644
--- a/frontend/packages/market/src/index.css
+++ b/frontend/packages/market/src/index.css
@@ -353,13 +353,13 @@ p{
color:var(--primary-color) !important;
}
- button.ant-btn:not(:disabled):not(.text-table_text){
+ /* button.ant-btn:not(:disabled):not(.text-table_text){
color:var(--primary-color);
}
button.ant-btn:not(:disabled):not(.text-table_text):hover{
color:var(--button-primary-hover-background-color) !important;
- }
+ } */
}
.ant-popover .ant-popover-inner{
diff --git a/frontend/packages/market/src/pages/Login.tsx b/frontend/packages/market/src/pages/Login.tsx
deleted file mode 100644
index 9fffcba6..00000000
--- a/frontend/packages/market/src/pages/Login.tsx
+++ /dev/null
@@ -1,159 +0,0 @@
-import {FC, useCallback, useEffect, useRef, useState} from "react";
-import {App, Button, Form, FormInstance, Input} from "antd";
-import {useGlobalContext} from "@common/contexts/GlobalStateContext.tsx";
-import {useFetch} from "@common/hooks/http.ts";
-import {BasicResponse, STATUS_CODE} from "@common/const/const.ts";
-import {useNavigate} from "react-router-dom";
-// import {useCrypto} from "../hooks/crypto.ts";
-import Logo from '@common/assets/logo.png'
-
-const Login:FC = ()=> {
- const {state, dispatch} = useGlobalContext()
- const {fetchData} = useFetch()
- const { message } = App.useApp()
- const navigate = useNavigate();
- const formRef = useRef(null);
- const [loading,setLoading] = useState()
- // const { encryptByEnAES } = useCrypto();
-
-
- const check = useCallback(()=>{
- fetchData, status:string}>>('account/login',{method:'GET'}).then(response=>{
- const {code,data} = response
- if(code === STATUS_CODE.SUCCESS && data.status !== 'anonymous'){
- dispatch({type:'LOGIN'})
- //console.log('校验成功')
- navigate('/serviceHub/list')
- }else{
- dispatch({type:'LOGOUT'})
- }
- })
- },[])
-
-
- const getSystemInfo = useCallback(()=>{
- fetchData>('common/version',{method:'GET', eoTransformKeys:['build_time']}).then(response=>{
- const {code,data} = response
- if(code === STATUS_CODE.SUCCESS){
- dispatch({type:'UPDATE_VERSION',version:data.version})
- dispatch({type:'UPDATE_DATE',updateDate:data.buildTime})
- }
- })
- },[])
-
- const login = async () => {
- if (formRef.current) {
- try {
- const values = await formRef.current.validateFields();
- setLoading(true);
-
- const { username, password } = values;
- // const encryptedPassword = encryptByEnAES(username, password);
-
- const body = {
- name:username,
- password: password
- // client: 1,
- // type: 1,
- // app_type: 4,
- };
-
- const {code,msg } = await fetchData>('account/login/username',{method:'POST',eoBody:(body)})
-
- if (code === STATUS_CODE.SUCCESS) {
- dispatch({type:'LOGIN'})
- message.success('登录成功');
- const callbackUrl = new URLSearchParams(window.location.search).get('callbackUrl');
- if (callbackUrl && callbackUrl !== 'null') {
- navigate(callbackUrl);
- } else {
- navigate('/serviceHub/list')
- }
- }else{
- dispatch({type:'LOGOUT'})
- //console.log(msg)
- message.error(msg)
- }
-
- } catch (err) {
- console.warn(err);
- } finally {
- setLoading(false)
- }
- }
- };
-
- useEffect(() => {
- check()
- getSystemInfo()
- }, []);
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
- 登录
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Version {state.version}-{state.updateDate}
- {state.powered}
-
-
-
- );
-}
-export default Login;
\ No newline at end of file
diff --git a/frontend/packages/market/src/pages/serviceHub/ApiTestGroup.tsx b/frontend/packages/market/src/pages/serviceHub/ApiTestGroup.tsx
index e52acc9c..177d6369 100644
--- a/frontend/packages/market/src/pages/serviceHub/ApiTestGroup.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/ApiTestGroup.tsx
@@ -7,6 +7,7 @@ import {DataNode} from "antd/es/tree";
import {ApiDetail} from "@common/const/api-detail";
import ApiTest from "@common/components/postcat/ApiTest.tsx";
import DirectoryTree from "antd/es/tree/DirectoryTree";
+import { $t } from "@common/locales";
type ApiTestGroupType = {
apiInfoList:ApiDetail[]
@@ -62,7 +63,7 @@ export default function ApiTestGroup({apiInfoList,selectedApiId }:ApiTestGroupTy
debounce(onSearchWordChange, 100)(e)}
- allowClear placeholder="搜索分类或标签"
+ allowClear placeholder={$t("搜索分类或标签")}
prefix={ {
onSearchWordChange(e)
}}/>}/>
@@ -78,7 +79,7 @@ export default function ApiTestGroup({apiInfoList,selectedApiId }:ApiTestGroupTy
{selectedApiInfo ?
:
-
+
}
)
diff --git a/frontend/packages/market/src/pages/serviceHub/ApplyServiceModal.tsx b/frontend/packages/market/src/pages/serviceHub/ApplyServiceModal.tsx
index b742e74d..eb9dbc2e 100644
--- a/frontend/packages/market/src/pages/serviceHub/ApplyServiceModal.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/ApplyServiceModal.tsx
@@ -2,9 +2,10 @@
import { App, Form, Row, Col, Select, Input } from "antd";
import { forwardRef, useEffect, useImperativeHandle, useMemo } from "react";
import WithPermission from "@common/components/aoplatform/WithPermission";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE } from "@common/const/const";
import { ApplyServiceHandle, ApplyServiceProps } from "../../const/serviceHub/type";
import { useFetch } from "@common/hooks/http";
+import { $t } from "@common/locales";
export const ApplyServiceModal = forwardRef((props,ref)=>{
const { message } = App.useApp()
@@ -22,11 +23,11 @@ export const ApplyServiceModal = forwardRef>('catalogue/service/subscribe',{method:'POST',eoParams:{team:entity?.team?.id}, eoBody:({...value,service:entity.id})}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
resolve(true)
}else{
- message.error(msg || '操作失败')
- reject(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
+ reject(msg || RESPONSE_TIPS.error)
}
}).catch((errorInfo)=> reject(errorInfo))
}).catch((errorInfo)=> reject(errorInfo))
@@ -48,23 +49,23 @@ export const ApplyServiceModal = forwardRef
- 服务名称:
+ {$t('服务名称')}:
{entity.name}
- 服务 ID:
+ {$t('服务 ID')}:
{entity.id}
-
diff --git a/frontend/packages/market/src/pages/serviceHub/ServiceHubApiDocument.tsx b/frontend/packages/market/src/pages/serviceHub/ServiceHubApiDocument.tsx
index 50441c1b..f677e2fb 100644
--- a/frontend/packages/market/src/pages/serviceHub/ServiceHubApiDocument.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/ServiceHubApiDocument.tsx
@@ -8,6 +8,7 @@ import {ApiDetail} from "@common/const/api-detail";
import {ServiceDetailType } from "../../const/serviceHub/type.ts";
import ApiMatch from "@common/components/postcat/api/ApiPreview/components/ApiMatch/index.tsx";
import ApiProxy from "@common/components/postcat/api/ApiPreview/components/ApiProxy/index.tsx";
+import { $t } from "@common/locales/index.ts";
const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
const {serviceId} = useParams();
@@ -28,7 +29,7 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
{
key: 'apiDocument-list',
href: '#apiDocument-list',
- title: 'API 列表',
+ title:$t('API 列表'),
children:apiDocs?.map((x)=>({
key:x.id,
href:`#apiDocument-${x.id}`,
@@ -38,7 +39,7 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
// {
// key: 'apiDocument-statusCode',
// href: '#apiDocument-statusCode',
- // title: '状态码',
+ // title:$t('状态码',
// },
], [apiDocs]);
@@ -63,9 +64,6 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
return (
<>
- {/*
-
-
*/}
API 列表
@@ -83,23 +81,20 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
readOnly
addonBefore={apiDetail?.method}
value={apiDetail?.path}
- // enterButton={
}
- // onSearch={handleTest}
/>
{
apiDetail?.match && apiDetail.match?.length > 0 &&
-
+
}
{
apiDetail?.proxy && Object.keys(apiDetail?.proxy).length > 0 &&
-
+
}
{apiDetail && }
- //
testClick(apiDocs.id)} entity={doc} />
}]}
activeKey={activeKey}
onChange={(val)=>{setActiveKey(val as string[])}}
@@ -108,18 +103,10 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
))}
- {/*
-
*/}
document.getElementById('layout-ref')!}
items={category}
@@ -133,7 +120,7 @@ const ServiceHubApiDocument = ({service}:{service:ServiceDetailType})=>{
maskClosable={false}
width="100%" placement="right" onClose={onClose} open={apiTestDrawOpen}
extra={
-
+
}
closeIcon={false}
>
diff --git a/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx b/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx
index 5f3b16dd..c1c96336 100644
--- a/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/ServiceHubDetail.tsx
@@ -3,17 +3,18 @@ import {RouterParams} from "@core/components/aoplatform/RenderRoutes.tsx";
import { App, Avatar, Button, Descriptions, Divider, Tabs} from "antd";
import { useEffect, useRef, useState} from "react";
import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx";
-import {BasicResponse, STATUS_CODE} from "@common/const/const.ts";
+import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {DefaultOptionType} from "antd/es/cascader";
import { ApplyServiceHandle, ServiceBasicInfoType, ServiceDetailType } from "../../const/serviceHub/type.ts";
import { EntityItem } from "@common/const/type.ts";
import { ApplyServiceModal } from "./ApplyServiceModal.tsx";
import ServiceHubApiDocument from "./ServiceHubApiDocument.tsx";
-import { ApiFilled, ArrowLeftOutlined, LeftOutlined } from "@ant-design/icons";
+import { ApiFilled, ArrowLeftOutlined } from "@ant-design/icons";
import { SimpleSystemItem } from "@core/const/system/type.ts";
import { Icon } from "@iconify/react/dist/iconify.js";
import DOMPurify from 'dompurify';
+import { $t } from "@common/locales/index.ts";
const ServiceHubDetail = ()=>{
@@ -44,7 +45,7 @@ const ServiceHubDetail = ()=>{
setServiceDoc(DOMPurify.sanitize(data.service.document))
setActiveKey(data.service.apis.map((x)=>x.id))
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
})
}
@@ -61,8 +62,8 @@ const ServiceHubDetail = ()=>{
getMySelectList()
setBreadcrumb(
[
- {title:服务市场},
- {title:'服务详情'}
+ {title:{$t('服务市场')}},
+ {title:$t('服务详情')}
]
)
@@ -78,7 +79,7 @@ const ServiceHubDetail = ()=>{
label:x.name, value:x.id
}}))
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
})
}
@@ -86,15 +87,15 @@ const ServiceHubDetail = ()=>{
const openModal = (type:'apply')=>{
modal.confirm({
- title:'申请服务',
+ title:$t('申请服务'),
content:,
onOk:()=>{
return applyRef.current?.apply().then((res)=>{
if(res === true) setApplied(true)
})
},
- okText:'确认',
- cancelText:'取消',
+ okText:$t('确认'),
+ cancelText:$t('取消'),
closable:true,
icon:<>>,
width:600
@@ -104,13 +105,13 @@ const ServiceHubDetail = ()=>{
const items = [
{
key: 'introduction',
- label: '介绍',
+ label: $t('介绍'),
children: <>>,
icon: ,
},
{
key: 'api-document',
- label: 'API 文档',
+ label: $t('API 文档'),
children:
,
icon:
}
@@ -122,7 +123,7 @@ const ServiceHubDetail = ()=>{
-
+
{/*
{service?.name?.substring(0,1)} */}
@@ -137,7 +138,7 @@ const ServiceHubDetail = ()=>{
{serviceDesc || '-'}
-
+
@@ -151,16 +152,16 @@ const ServiceHubDetail = ()=>{
-
- {serviceBasicInfo?.appNum ?? '-'}
- {serviceBasicInfo?.team?.name || '-'}
- {serviceBasicInfo?.catalogue?.name || '-'}
- {serviceBasicInfo?.tags?.map(x=>x.name)?.join(',') || '-'}
+
+ {serviceBasicInfo?.appNum ?? '-'}
+ {serviceBasicInfo?.team?.name || '-'}
+ {serviceBasicInfo?.catalogue?.name || '-'}
+ {serviceBasicInfo?.tags?.map(x=>x.name)?.join(',') || '-'}
- { serviceBasicInfo?.version || '-'}
- {serviceBasicInfo?.updateTime || '-'}
+ { serviceBasicInfo?.version || '-'}
+ {serviceBasicInfo?.updateTime || '-'}
diff --git a/frontend/packages/market/src/pages/serviceHub/ServiceHubGroup.tsx b/frontend/packages/market/src/pages/serviceHub/ServiceHubGroup.tsx
index b16e33a2..151a75d9 100644
--- a/frontend/packages/market/src/pages/serviceHub/ServiceHubGroup.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/ServiceHubGroup.tsx
@@ -3,11 +3,12 @@ import {SearchOutlined} from "@ant-design/icons";
import {App, Divider, Input, TreeDataNode} from "antd";
import {useCallback, useEffect, useState} from "react";
import Tree, {DataNode} from "antd/es/tree";
-import {BasicResponse, STATUS_CODE} from "@common/const/const.ts";
+import {BasicResponse, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import { CategorizesType } from "../../const/serviceHub/type.ts";
import { filterServiceList, initialServiceHubListState, SERVICE_HUB_LIST_ACTIONS, ServiceHubListActionType } from "./ServiceHubList.tsx";
import { EntityItem } from "@common/const/type.ts";
+import { $t } from "@common/locales/index.ts";
type ServiceHubGroup = {
children:JSX.Element
@@ -35,11 +36,11 @@ export const ServiceHubGroup = ({children,filterOption,dispatch}:ServiceHubGroup
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
dispatch({type:SERVICE_HUB_LIST_ACTIONS.GET_CATEGORIES,payload:data.catalogues})
- dispatch({type:SERVICE_HUB_LIST_ACTIONS.GET_TAGS,payload:[...data.tags,{id:'empty',name:'无标签'}]})
+ dispatch({type:SERVICE_HUB_LIST_ACTIONS.GET_TAGS,payload:[...data.tags,{id:'empty',name:$t('无标签')}]})
dispatch({type:SERVICE_HUB_LIST_ACTIONS.SET_SELECTED_CATE,payload:[...data.catalogues.map((x:CategorizesType)=>x.id)]})
dispatch({type:SERVICE_HUB_LIST_ACTIONS.SET_SELECTED_TAG,payload:[...data.tags.map((x:EntityItem)=>x.id),'empty']})
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
})
}
@@ -75,11 +76,11 @@ export const ServiceHubGroup = ({children,filterOption,dispatch}:ServiceHubGroup
debounce(onSearchWordChange, 500)(e.target.value)}
- allowClear placeholder="搜索服务"
+ allowClear placeholder={$t("搜索服务")}
prefix={
}/>
-
分类
+
{$t('分类')}
x.children && x.children.length > 0).length > 0 ? '' : 'no-first-switch-tree'}`}
checkable
@@ -93,7 +94,7 @@ export const ServiceHubGroup = ({children,filterOption,dispatch}:ServiceHubGroup
-
标签
+
{$t('标签')}
{
dispatch({type:SERVICE_HUB_LIST_ACTIONS.SET_SERVICES,payload: filterServiceList({...filterOption, servicesList:data.services})})
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
}).finally(()=>{ dispatch({type:SERVICE_HUB_LIST_ACTIONS.LIST_LOADING,payload:false})})
}
@@ -117,7 +118,7 @@ const ServiceHubList:FC = ()=>{
useEffect(() => {
setBreadcrumb(
[
- {title:'服务市场'}
+ {title:$t('服务市场')}
]
)
getServiceList()
@@ -137,7 +138,7 @@ const ServiceHubList:FC = ()=>{
showDocumentDetail(item)}>
{item.description || '暂无服务描述'}
+ style={{'word-break':'auto-phrase'}}>{item.description || $t('暂无服务描述')}
);
@@ -182,10 +183,10 @@ const CardTitle = (service:ServiceHubTableListItem)=>{
{service.catalogue?.name || '-'}
-
+
{service.apiNum ?? '-'}
-
+
{service.subscriberNum ?? '-'}
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ApprovalModalContent.tsx b/frontend/packages/market/src/pages/serviceHub/management/ApprovalModalContent.tsx
index e54d7c09..7af5d508 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ApprovalModalContent.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ApprovalModalContent.tsx
@@ -2,10 +2,11 @@
import { App, Form, Row, Col, Input } from "antd"
import { forwardRef, useImperativeHandle, useEffect } from "react"
import WithPermission from "@common/components/aoplatform/WithPermission"
-import { BasicResponse, STATUS_CODE } from "@common/const/const"
+import { BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const"
import { useFetch } from "@common/hooks/http"
import { SYSTEM_SUBSCRIBE_APPROVAL_DETAIL_LIST } from "@core/const/system/const"
import { SubSubscribeApprovalModalHandle, SubSubscribeApprovalModalProps } from "@core/const/system/type"
+import { $t } from "@common/locales"
type FieldType = {
reason: string
@@ -28,11 +29,11 @@ export const ApprovalModalContent = forwardRef>('catalogue/service/subscribe',{method: 'POST',eoParams:{team:teamId}, eoBody:({service:data!.service.id, applications:[serviceId], reason:value.reason})}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
resolve(true)
}else{
- message.error(msg || '操作失败')
- reject(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
+ reject(msg || RESPONSE_TIPS.error)
}
}).catch((errorInfo)=> reject(errorInfo))
}).catch((errorInfo)=> reject(errorInfo))
@@ -59,8 +60,6 @@ export const ApprovalModalContent = forwardRef
@@ -69,22 +68,21 @@ export const ApprovalModalContent = forwardRef
{x.title}:
- {/* {showData(x)} */}
{x.nested ? data?.[x.key]?.[x.nested] : ( (data as {[k:string]:unknown})?.[x.key] || '-')}
)
})}
- label="申请原因"
+ label={$t("申请原因")}
name="reason"
>
-
+
- label="审核意见"
+ label={$t("审核意见")}
name="opinion"
>
-
+
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
index e995f4e8..f908907d 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
@@ -1,13 +1,14 @@
import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
import { useParams } from "react-router-dom";
import ManagementConfig from "./ManagementConfig";
+import { $t } from "@common/locales";
export default function ManagementAppSetting(){
const {teamId,appId} = useParams()
return (
-
应用管理
+
{$t('应用管理')}
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx
index 142dabd6..d389ff63 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementAuthorityConfig.tsx
@@ -1,13 +1,13 @@
import {forwardRef, useEffect, useImperativeHandle, useState} from "react";
-import {App, Checkbox, Form, Input, Select,Switch} from "antd";
-import moment from "moment";
-import {BasicResponse, STATUS_CODE} from "@common/const/const.ts";
+import {App, Checkbox, DatePicker, Form, Input, Select,Switch} from "antd";
+import {BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
-import DatePicker from "@common/components/aoplatform/DatePicker.tsx";
-import WithPermission from "@common/components/aoplatform/WithPermission.tsx";
import { v4 as uuidv4} from 'uuid';
import { ALGORITHM_ITEM } from "@core/const/system/const.tsx";
import { EditAuthFieldType } from "@core/const/system/type";
+import { RangePickerProps } from "antd/es/date-picker";
+import dayjs from 'dayjs';
+import { $t } from "@common/locales";
export type ManagementAuthorityConfigProps = {
type:'add'|'edit'
@@ -35,11 +35,11 @@ export const ManagementAuthorityConfig = forwardRef
>('app/authorization',{method:type === 'add'? 'POST' : 'PUT',eoBody:({...value,expireTime:value.expireTime ? value.expireTime.unix() : 0}), eoParams:type === 'add' ? {app:appId,team:teamId}:{authorization:data!.id,app:appId,team:teamId},eoTransformKeys:['hideCredential','expireTime','tokenName','userName']}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
resolve(true)
}else{
- message.error(msg || '操作失败')
- reject(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
+ reject(msg || RESPONSE_TIPS.error)
}
}).catch((errorInfo)=> reject(errorInfo))
}).catch((errorInfo)=> reject(errorInfo))
@@ -70,18 +70,17 @@ export const ManagementAuthorityConfig = forwardRef {
- // 禁用今天以前的日期,包括今天
- // 使用current?.startOf('day')是为了获取日期的开始时间点,以确保整个今天都被禁用
- // 如果只需要禁用今天之前的日期(今天可选),则可以将`isBefore`的第二个参数设置为 'day'
- return current ? current.startOf('day') < moment().startOf('day') : false;
+
+ const disabledDate: RangePickerProps['disabledDate'] = (current) => {
+ // Can not select days before today and today
+ return current && current.isBefore(dayjs().endOf('day'), 'day');
};
useEffect(() => {
//console.log(data)
if(type === 'edit' && data){
- form.setFieldsValue({...data,expireTime:data.expireTime === 0 ? '' : moment(data.expireTime *1000)})
+ form.setFieldsValue({...data,expireTime:data.expireTime === 0 ? '' : dayjs(data.expireTime * 1000)})
forceUpdate({})
}else{
form.setFieldsValue({driver, position:'Header',tokenName:'Authorization'})
@@ -106,29 +105,29 @@ export const ManagementAuthorityConfig = forwardRef
- label="名称"
+ label={$t("名称")}
name="name"
- rules={[{required: true, message: '必填项',whitespace:true }]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required,whitespace:true }]}
>
-
+
- label="鉴权类型"
+ label={$t("鉴权类型")}
name="driver"
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
onDriverChange(e)} placeholder="请输入鉴权类型"/>
+ {label:'Apikey',value:'apikey'}]} onChange={(e)=>onDriverChange(e)} placeholder={PLACEHOLDER.input}/>
@@ -138,70 +137,70 @@ export const ManagementAuthorityConfig = forwardRef
- label="用户名"
+ label={$t("用户名")}
name={['config','userName']}
- rules={[{required: true, message: '必填项',whitespace:true }]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required,whitespace:true }]}
>
-
+
- label="密码"
+ label={$t("密码")}
name={['config','password']}
- rules={[{required: true, message: '必填项',whitespace:true }]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required,whitespace:true }]}
>
-
+
>
case 'jwt':
return <>
- label="Iss"
+ label={$t("Iss")}
name={['config','iss']}
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
-
+
- label="签名算法"
+ label={$t("签名算法")}
name={['config','algorithm']}
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
{onAlgorithmChange(value)}}/>
- label={ algorithm.includes('HS') ? 'Secret':'RSA 公钥'}
+ label={ algorithm.includes('HS') ? $t('Secret'):$t('RSA 公钥')}
name={algorithm.includes('HS') ? ['config','secret']:['config','publicKey']}
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
-
+
- label="用户名"
+ label={$t("用户名")}
name={['config','user']}
>
-
+
- label="用户名 JsonPath"
+ label={$t("用户名 JsonPath")}
name={['config','userPath']}
>
-
+
- label="校验字段"
+ label={$t("校验字段")}
name={['config','claimsToVerify']}
>
-
+
{algorithm.includes('HS') &&
- label="是否 Base64 加密"
+ label={$t("是否 Base64 加密")}
name={['config', 'signatureIsBase64']}
>
@@ -210,29 +209,29 @@ export const ManagementAuthorityConfig = forwardRef
- label="AK"
+ label={$t("AK")}
name={['config','ak']}
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
-
+
- label="SK"
+ label={$t("SK")}
name={['config','sk']}
- rules={[{required: true, message: '必填项'}]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required}]}
>
-
+
>
case 'apikey':
return <>
- label="Apikey"
+ label={$t("Apikey")}
name={['config','apikey']}
- rules={[{required: true, message: '必填项',whitespace:true }]}
+ rules={[{required: true, message: VALIDATE_MESSAGE.required,whitespace:true }]}
>
-
+
>
}
@@ -240,7 +239,7 @@ export const ManagementAuthorityConfig = forwardRef
- label="过期时间"
+ label={$t("过期时间")}
name="expireTime"
>
- label="隐藏鉴权信息"
+ label={$t("隐藏鉴权信息")}
name="hideCredential" valuePropName="checked"
>
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
index 2e6c652d..820b57b1 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
@@ -1,12 +1,13 @@
-import {App, Button, Divider, Form, Input, Row} from "antd";
+import {App, Button, Form, Input, Row} from "antd";
import {forwardRef, useEffect, useImperativeHandle, useState} from "react";
import {v4 as uuidv4} from 'uuid'
import WithPermission from "@common/components/aoplatform/WithPermission";
-import { BasicResponse, STATUS_CODE } from "@common/const/const";
+import { BasicResponse, DELETE_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE } from "@common/const/const";
import { useFetch } from "@common/hooks/http";
import { useNavigate } from "react-router-dom";
import { useTenantManagementContext } from "@market/contexts/TenantManagementContext";
+import { $t } from "@common/locales";
export type ManagementConfigFieldType = {
name:string
@@ -41,13 +42,13 @@ const ManagementConfig = forwardRef>(type === 'add'? 'team/app' : 'app/info',{method:type === 'add'? 'POST' : 'PUT',eoBody:(value), eoParams:type === 'add' ? {team:teamId}:{app:appId,team:teamId}}).then(response=>{
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
form.setFieldsValue(data.apps)
type === 'edit' && setAppName(data.apps.name)
resolve(true)
}else{
- message.error(msg || '操作失败')
- reject(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
+ reject(msg || RESPONSE_TIPS.error)
}
}).catch((errorInfo)=> reject(errorInfo))
}).catch((errorInfo)=> reject(errorInfo))
@@ -62,7 +63,7 @@ const ManagementConfig = forwardRef{form.setFieldsValue({...data.app})},0)
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
})
};
@@ -70,20 +71,20 @@ const ManagementConfig = forwardRef{
setDelBtnLoading(true)
modal.confirm({
- title:'删除',
- content:'该数据删除后将无法找回,请确认是否删除?',
+ title:$t('删除'),
+ content:DELETE_TIPS.default,
onOk:()=> {
return deleteApplication()
},
width:600,
- okText:'确认',
+ okText:$t('确认'),
okButtonProps:{
danger:true
},
onCancel:()=>{
setDelBtnLoading(false)
},
- cancelText:'取消',
+ cancelText:$t('取消'),
closable:true,
icon:<>>
})
@@ -94,10 +95,10 @@ const ManagementConfig = forwardRef>('app',{method:'DELETE',eoParams:{app:appId,team:teamId}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
navigate(`/tenantManagement/list`)
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
})
}
@@ -125,41 +126,38 @@ const ManagementConfig = forwardRef
- label="应用名称"
+ label={$t("应用名称")}
name="name"
- rules={[{ required: true, message: '必填项',whitespace:true }]}
+ rules={[{ required: true, message: VALIDATE_MESSAGE.required,whitespace:true }]}
>
-
+
- label="应用 ID"
+ label={$t("应用 ID")}
name="id"
- rules={[{ required: true, message: '必填项' ,whitespace:true }]}
+ rules={[{ required: true, message: VALIDATE_MESSAGE.required ,whitespace:true }]}
>
-
+
-
+
{type === 'edit' && <>
>
@@ -169,10 +167,10 @@ const ManagementConfig = forwardRef
-
删除应用:删除操作不可恢复,请谨慎操作!
+
{$t('删除应用')}:{$t('删除操作不可恢复,请谨慎操作!')}
-
+
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsideAuth.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsideAuth.tsx
index db873778..e828d6a9 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsideAuth.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsideAuth.tsx
@@ -2,18 +2,18 @@ import { MoreOutlined } from "@ant-design/icons"
import { message, Card, Button, Tag, Dropdown, App, Empty } from "antd"
import { useState, useEffect, forwardRef, useRef } from "react"
import { VirtuosoGrid } from "react-virtuoso"
-import { BasicResponse, STATUS_CODE } from "@common/const/const"
-import { useBreadcrumb } from "@common/contexts/BreadcrumbContext"
+import { BasicResponse, DELETE_TIPS, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const"
import { useFetch } from "@common/hooks/http"
import { EditAuthFieldType, SystemAuthorityTableListItem } from "@core/const/system/type"
-import { Link, useParams } from "react-router-dom"
+import { useParams } from "react-router-dom"
import { RouterParams } from "@core/components/aoplatform/RenderRoutes"
-import moment from "moment"
import { useTenantManagementContext } from "../../../contexts/TenantManagementContext"
import { ManagementAuthorityConfig, ManagementAuthorityConfigHandle } from "./ManagementAuthorityConfig"
import { ManagementAuthorityView } from "./ManagementAuthorityView"
import { checkAccess } from "@common/utils/permission"
import { useGlobalContext } from "@common/contexts/GlobalStateContext"
+import dayjs from 'dayjs';
+import { $t } from "@common/locales"
export default function ManagementInsideAuth(){
const {modal} = App.useApp()
@@ -22,7 +22,6 @@ export default function ManagementInsideAuth(){
const {appId,teamId} = useParams()
const addRef = useRef(null)
const editRef = useRef(null)
- const {appName} = useTenantManagementContext()
const {accessData} = useGlobalContext()
@@ -32,7 +31,7 @@ export default function ManagementInsideAuth(){
if(code === STATUS_CODE.SUCCESS){
setAuthList(data.authorizations)
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
}
}).catch(() => {
return {data:[], success:false}
@@ -49,11 +48,11 @@ export default function ManagementInsideAuth(){
fetchData>('app/authorization',{method:'DELETE',eoParams:{authorization:entity!.id,app:appId, team:teamId}}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
- message.success(msg || '操作成功!')
+ message.success(msg || RESPONSE_TIPS.success)
resolve(true)
}else{
- message.error(msg || '操作失败')
- reject(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
+ reject(msg || RESPONSE_TIPS.error)
}
}).catch((errorInfo)=> reject(errorInfo))
})
@@ -65,36 +64,36 @@ export default function ManagementInsideAuth(){
let content:string|React.ReactNode = ''
switch (type){
case 'view':{
- title='鉴权详情'
- message.loading('正在加载数据')
+ title=$t('鉴权详情')
+ message.loading(RESPONSE_TIPS.loading)
const {code,data,msg} = await fetchData>('app/authorization/details',{method:'GET',eoParams:{authorization:entity!.id,app:appId, team:teamId}})
message.destroy()
if(code === STATUS_CODE.SUCCESS){
content=
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
return
}}
break;
case 'add':
- title='添加鉴权'
+ title=$t('添加鉴权')
content=
break;
case 'edit':{
- title='编辑鉴权'
- message.loading('正在加载数据')
+ title=$t('编辑鉴权')
+ message.loading(RESPONSE_TIPS.loading)
const {code,data,msg} = await fetchData>('app/authorization',{method:'GET',eoParams:{authorization:entity!.id,app:appId, team:teamId},eoTransformKeys:['hide_credential','token_name','expire_time','user_name','public_key','user_path','claims_to_verify','signature_is_base64']})
message.destroy()
if(code === STATUS_CODE.SUCCESS){
content=
}else{
- message.error(msg || '操作失败')
+ message.error(msg || RESPONSE_TIPS.error)
return
}}
break;
case 'delete':
- title='删除'
- content='该数据删除后将无法找回,请确认是否删除?'
+ title=$t('删除')
+ content=DELETE_TIPS.default
break;
}
@@ -114,11 +113,11 @@ export default function ManagementInsideAuth(){
}
},
width:600,
- okText: '确认',
+ okText: $t('确认'),
okButtonProps:{
disabled : !checkAccess( `team.application.authorization.${type}`, accessData)
},
- cancelText:type === 'view'? '关闭':'取消',
+ cancelText:type === 'view'? $t('关闭'):$t('取消'),
closable:true,
icon:<>>,
footer:(_, { OkBtn, CancelBtn }) =>{
@@ -136,28 +135,24 @@ export default function ManagementInsideAuth(){
{
key: 'edit',
label: (
- //
- //
),
},
{
key: 'delete',
label: (
- //
- //
),
},
]
return (
-
访问授权
-
+
{$t('访问授权')}
+
{authList && authList.length > 0 ?
-
{item.name}
+ {item.name}
{`${item.driver.substring(0,1).toLocaleUpperCase()}${item.driver.substring(1)}`}
- {item.expireTime === 0 ? '永不过期' : `到期时间:${moment(item.expireTime * 1000).format('YYYY-MM-DD hh:mm:ss')}`}
+ {item.expireTime === 0 ?$t('永不过期') : `${$t('到期时间')}:${dayjs(item.expireTime * 1000).format('YYYY-MM-DD hh:mm:ss')}`}
);
@@ -183,9 +178,6 @@ export default function ManagementInsideAuth(){
{...props}
style={{
display: 'grid',
- // gridTemplateColumns: 'repeat(auto-fill, minmax(250px, 1fr))',
- // gap: '20px',
- // padding:'30px',
...style,
}}
>
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
index 05bac89e..773ada32 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
@@ -12,6 +12,7 @@ import { RouterParams } from "@core/components/aoplatform/RenderRoutes";
import { useTenantManagementContext } from "@market/contexts/TenantManagementContext";
import { ManagementConfigFieldType } from "./ManagementConfig";
import { useGlobalContext } from "@common/contexts/GlobalStateContext";
+import { $t } from "@common/locales";
export default function ManagementInsidePage(){
const { message } = App.useApp()
@@ -51,7 +52,7 @@ export default function ManagementInsidePage(){
}
setBreadcrumb(
[
- {title:
应用},
+ {title:
{$t('应用')}},
...(_appName ? [{title:_appName}] : [])
]
)
@@ -75,7 +76,7 @@ useEffect(()=>{
-
+