-
-
- {$t('登录')}
-
-
-
{
rules={[{ required: true, message: $t('请输入账号') ,whitespace:true }]}
>
{
@@ -209,8 +205,9 @@ const Login:FC = ()=> {
- {$t('Version (0)-(1)',[state.version,state.updateDate])}
- {$t(state.powered)}
+
+ {$t('Version (0)-(1)',[state.version,state.updateDate])}, {$t(state.powered)}
+
diff --git a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx
index 69f14b86..0377e05e 100644
--- a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx
+++ b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx
@@ -1,5 +1,5 @@
-import {App, Button, Form, Input, InputNumber, Row, Spin, Tag} from "antd";
-import { MutableRefObject, useEffect, useRef, useState} from "react";
+import {App, Button, Form, Input, InputNumber, Row, Select, Space, Spin, Tag} from "antd";
+import { MutableRefObject, useEffect, useMemo, useRef, useState} from "react";
import {BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import { $t } from "@common/locales/index.ts";
@@ -17,6 +17,9 @@ import { DrawerWithFooter } from "@common/components/aoplatform/DrawerWithFooter
import AiServiceRouterModelConfig, { AiServiceRouterModelConfigHandle } from "./AiServiceInsideRouterModelConfig";
import { AiProviderDefaultConfig, AiProviderLlmsItems } from "@core/pages/aiSetting/AiSettingList";
import { EditableFormInstance } from "@ant-design/pro-components";
+import { validateUrlSlash } from "@common/utils/validate";
+import { API_PATH_MATCH_RULES } from "@core/const/system/const";
+import { useGlobalContext } from "@common/contexts/GlobalStateContext";
type AiServiceRouterField = {
name:string
@@ -59,11 +62,16 @@ const AiServiceInsideRouterCreate = () => {
const [defaultLlm, setDefaultLlm] = useState
()
const [llmList, setLlmList] = useState([])
const [variablesTableRef, setVariablesTableRef] = useState | undefined>>()
+ const {state} = useGlobalContext()
+
const onFinish = ()=>{
return variablesTableRef?.current?.validateFields().then(()=>{
return form.validateFields().then((formValue)=>{
- const {name, path, description, variables, prompt, timeout, retry} = formValue
- const body = {name, path: prefixForce ? `${apiPrefix}/${path}`:path , description,timeout, retry,aiPrompt:{variables:variables, prompt:prompt},aiModel:{id:defaultLlm?.id, provider:defaultLlm?.provider, config:defaultLlm?.config}}
+ const {name, path, description, variables, prompt, timeout, retry,pathMatch} = formValue
+ const body = {
+ name,
+ path: `${prefixForce ? apiPrefix + '/' : ''}${path.trim()}${pathMatch === 'prefix' ? '/*' : ''}`,
+ description,timeout, retry,aiPrompt:{variables:variables, prompt:prompt},aiModel:{id:defaultLlm?.id, provider:defaultLlm?.provider, config:defaultLlm?.config}}
return fetchData>('service/ai-router',{method: routeId ? 'PUT' : 'POST',eoBody:(body), eoParams: {service:serviceId,team:teamId, ...(routeId ? {router:routeId}: {})},eoTransformKeys:['aiPrompt','aiModel']}).then(response=>{
const {code,msg} = response
if(code === STATUS_CODE.SUCCESS){
@@ -92,7 +100,20 @@ const AiServiceInsideRouterCreate = () => {
const {code,data,msg} = response
if(code === STATUS_CODE.SUCCESS){
const {path, aiPrompt,aiModel} = data.api
- form.setFieldsValue({...data.api,...aiPrompt, path:prefixForce && path?.startsWith(apiPrefix + '/')? path.slice((apiPrefix?.length || 0) + 1) : path })
+ let newPath = path
+ let pathMatch = 'full'
+ if(prefixForce && path?.startsWith(apiPrefix + '/')){
+ newPath = path.slice((apiPrefix?.length || 0) + 1)
+ }
+ if(newPath.endsWith('/*')){
+ newPath = newPath.slice(0,-2)
+ pathMatch = 'prefix'
+ }
+ form.setFieldsValue({
+ ...data.api,
+ ...aiPrompt,
+ path:newPath,
+ pathMatch})
setVariablesTable(aiPrompt.variables as VariableItems[])
setDefaultLlm(prev => ({...prev, provider: aiModel?.provider, id:aiModel?.id, config:aiModel.config}) as (AiProviderDefaultConfig & { config: string; }))
getDefaultModelConfig(aiModel?.provider)
@@ -141,7 +162,8 @@ const AiServiceInsideRouterCreate = () => {
variables:[{key:'Query',value:'',require:true}],
prompt:'{{Query}}',
retry:0,
- timeout:300000
+ timeout:300000,
+ pathMatch:'prefix'
})
}
return (form.setFieldsValue({}))
@@ -185,6 +207,9 @@ const AiServiceInsideRouterCreate = () => {
setDrawerType(undefined);
};
+ const apiPathMatchRulesOptions = useMemo(()=>API_PATH_MATCH_RULES.map(
+ x=>({label:$t(x.label), value:x.value})),[state.language])
+
return (
{
-
- className="flex-1"
- label={$t("请求路径")}
- name="path"
- rules={[{ required: true,whitespace:true }]}
- >
-
-
+
+
+
+
+
+
+
+ name="path"
+ rules={[{ required: true,whitespace:true },
+ {
+ validator: validateUrlSlash,
+ }]}
+ noStyle
+ >
+ {
+ if((e.target.value as string).endsWith('/*')){
+ form.setFieldValue('path',e.target.value.slice(0,-2))
+ form.setFieldValue('pathMatch','prefix')
+ }
+ }}/>
+
+
+
+
diff --git a/frontend/packages/core/src/pages/aiSetting/AiSettingList.tsx b/frontend/packages/core/src/pages/aiSetting/AiSettingList.tsx
index 5bcf9bef..b09ce4c5 100644
--- a/frontend/packages/core/src/pages/aiSetting/AiSettingList.tsx
+++ b/frontend/packages/core/src/pages/aiSetting/AiSettingList.tsx
@@ -4,12 +4,11 @@ import { BasicResponse, STATUS_CODE, RESPONSE_TIPS } from "@common/const/const";
import { useFetch } from "@common/hooks/http";
import { $t } from "@common/locales";
import { Icon } from "@iconify/react/dist/iconify.js";
-import { App, Spin, Card, Tag, Select, Button, Empty, Divider } from "antd";
+import { App, Spin, Card, Tag, Button, Empty, Divider } from "antd";
import { memo, useEffect, useRef, useState } from "react";
import AiSettingModalContent, { AiSettingModalContentHandle } from "./AiSettingModal";
import WithPermission from "@common/components/aoplatform/WithPermission";
import { useGlobalContext } from "@common/contexts/GlobalStateContext";
-import { DefaultOptionType } from "antd/es/select";
import { checkAccess } from "@common/utils/permission";
export type AiSettingListItem = {
@@ -90,7 +89,7 @@ const AiSettingList = ()=>{
}
modal.confirm({
title:$t('模型配置'),
- content:,
+ content:,
onOk:()=>{
return modalRef.current?.save().then((res)=>{if(res === true)
setAiConfigFlushed(true)
@@ -125,46 +124,13 @@ const AiSettingList = ()=>{
}, []);
const CardBox = memo(({provider}:{provider:AiSettingListItem})=>{
- const [options, setOptions] = useState([])
- const [loading, setLoading] = useState(false)
- const [defaultLlm, setDefaultLlm] = useState(provider.defaultLlm)
-
- const getLlmList = ()=>{
- if(options.length > 0) return
- setLoading(true)
- fetchData>(`ai/provider/llms`,{method:'GET',eoParams:{provider:provider.id}}).then(response=>{
- const {code,data,msg} = response
- if(code === STATUS_CODE.SUCCESS){
- setOptions(data.llms?.map((x:AiProviderLlmsItems)=>({
- label:{x.id},
- value:x.id})))
- }else{
- message.error(msg || $t(RESPONSE_TIPS.error))
- }
- }).finally(()=>{
- setLoading(false)
- })
- }
-
-
- const changeDefaultModel = (value: string, entity:AiSettingListItem) => {
- setLoading(true)
- return fetchData>(`ai/provider/default-llm`,{method:'PUT', eoBody:{llm:value}, eoParams:{provider:entity.id}}).then(response=>{
- const {code,msg} = response
- if(code === STATUS_CODE.SUCCESS){
- setDefaultLlm(value)
- message.success(msg || $t(RESPONSE_TIPS.success))
- }else{
- message.error(msg || $t(RESPONSE_TIPS.error))
- }
- }).finally(()=>setLoading(false))
- };
-
-
return (
-
+
+
+
+ {provider.name}
+
{provider.configured ? $t('已配置') : $t('未配置')}
@@ -175,18 +141,7 @@ const AiSettingList = ()=>{
{
provider.configured && <>
-
-
+
{provider.defaultLlm}
>
}
@@ -245,8 +200,8 @@ const AiSettingList = ()=>{
aiSettingList.filter((item)=>!item.configured).length > 0 && <>
{$t('未配置')}
-
!item.configured) || [] }/>
- >
+ !item.configured) || [] }/>
+ >
}
:
}
diff --git a/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx b/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx
index bb0d923b..159360fe 100644
--- a/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx
+++ b/frontend/packages/core/src/pages/aiSetting/AiSettingModal.tsx
@@ -1,15 +1,14 @@
-import WithPermission from "@common/components/aoplatform/WithPermission";
-import { BasicResponse, STATUS_CODE, RESPONSE_TIPS } from "@common/const/const";
+import { BasicResponse, STATUS_CODE, RESPONSE_TIPS, PLACEHOLDER } from "@common/const/const";
import { useFetch } from "@common/hooks/http";
import { $t } from "@common/locales";
-import { App } from "antd";
+import { App, Form, Select, Tag } from "antd";
import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
-import { AiProviderConfig } from "./AiSettingList";
+import { AiProviderConfig, AiProviderLlmsItems } from "./AiSettingList";
import { Codebox } from "@common/components/postcat/api/Codebox";
export type AiSettingModalContentProps = {
- entity:AiProviderConfig
+ entity:AiProviderConfig & {defaultLlm:string}
readOnly:boolean
}
@@ -17,31 +16,65 @@ export type AiSettingModalContentHandle = {
save:()=>Promise
}
+type AiSettingModalContentField = {
+ config:string
+ defaultLlm:string
+}
+
const AiSettingModalContent = forwardRef((props,ref)=>{
+ const [form] = Form.useForm();
const { message } = App.useApp()
const {entity,readOnly} = props
const {fetchData} = useFetch()
- const [code, setCode] = useState()
+ const [llmList, setLlmList] = useState()
+ const [loading, setLoading] = useState(false)
+
+
+ const getLlmList = ()=>{
+ setLoading(true)
+ fetchData>(`ai/provider/llms`,{method:'GET',eoParams:{provider:entity.id}}).then(response=>{
+ const {code,data,msg} = response
+ if(code === STATUS_CODE.SUCCESS){
+ setLlmList(data.llms)
+ }else{
+ message.error(msg || $t(RESPONSE_TIPS.error))
+ }
+ }).finally(()=>{
+ setLoading(false)
+ })
+ }
+
useEffect(() => {
+ getLlmList()
try{
- entity!.config && setCode(JSON.stringify(JSON.parse(entity!.config),null,2))
+ form.setFieldsValue({
+ defaultLlm:entity.defaultLlm,
+ config:entity!.config ? JSON.stringify(JSON.parse(entity!.config),null,2) : ''
+ })
}catch(e){
- setCode('')
+ form.setFieldsValue({
+ defaultLlm:entity.defaultLlm,
+ config: ''
+ })
}
}, []);
const save: ()=>Promise = ()=>{
- return fetchData>('ai/provider/config',{method:'PUT',eoParams:{provider:entity?.id}, eoBody:({config:code})}).then(response=>{
- const {code,msg} = response
- if(code === STATUS_CODE.SUCCESS){
- message.success(msg || $t(RESPONSE_TIPS.success))
- return Promise.resolve(true)
- }else{
- message.error(msg || $t(RESPONSE_TIPS.error))
- return Promise.reject(msg || $t(RESPONSE_TIPS.error))
- }
- }).catch((errorInfo)=> Promise.reject(errorInfo))
+ return new Promise((resolve, reject)=>{
+ form.validateFields().then((value)=>{
+ fetchData>('ai/provider/config',{method:'PUT',eoParams:{provider:entity?.id}, eoBody:value, eoTransformKeys:['defaultLlm']}).then(response=>{
+ const {code,msg} = response
+ if(code === STATUS_CODE.SUCCESS){
+ message.success(msg || $t(RESPONSE_TIPS.success))
+ resolve(true)
+ }else{
+ message.error(msg || $t(RESPONSE_TIPS.error))
+ reject(msg || $t(RESPONSE_TIPS.error))
+ }
+ }).catch((errorInfo)=> reject(errorInfo))
+ }).catch((errorInfo)=> reject(errorInfo))
+ })
}
useImperativeHandle(ref, ()=>({
@@ -50,8 +83,44 @@ const AiSettingModalContent = forwardRef
+
+ label={$t("模型")}
+ name="defaultLlm"
+ rules={[{ required: true }]}
+ >
+
+
+
+
+ label={$t("参数")}
+ name="config"
+ >
+
+
+
)
})
diff --git a/frontend/packages/core/src/pages/guide/Guide.tsx b/frontend/packages/core/src/pages/guide/Guide.tsx
index 8e478c84..ef3045ed 100644
--- a/frontend/packages/core/src/pages/guide/Guide.tsx
+++ b/frontend/packages/core/src/pages/guide/Guide.tsx
@@ -30,7 +30,7 @@ export default function Guide(){
},
{
title: $t("创建调用 Token"),
- description: $t('为了安全地调用 API,你需要创建一个应用以及Token。'),
+ description: $t('为了安全地调用 API,你需要创建一个消费者以及Token。'),
link: 'https://docs.apipark.com/docs/quick/suberscriber/application'
},
{
@@ -50,7 +50,7 @@ export default function Guide(){
},
{
title: $t("创建调用 Token"),
- description: $t('为了安全地调用 API,你需要创建一个应用以及Token。'),
+ description: $t('为了安全地调用 API,你需要创建一个消费者以及Token。'),
link: 'https://docs.apipark.com/docs/quick/suberscriber/subscribe'
},
{
@@ -82,7 +82,7 @@ export default function Guide(){
},
{
title: $t("团队"),
- description: $t('团队中包含了人员、应用和服务,不同团队之间的应用和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。'),
+ description: $t('团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。'),
link: 'https://docs.apipark.com/docs/quick/provider/service'
},
{
@@ -102,7 +102,7 @@ export default function Guide(){
},
{
title: $t("审核订阅申请"),
- description: $t('提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的应用才可发起 API 请求。'),
+ description: $t('提供服务的团队可以审核来自其他团队的订阅申请,审核通过后的消费者才可发起 API 请求。'),
link: 'https://docs.apipark.com/docs/quick/suberscriber/subscribe'
}
]
diff --git a/frontend/packages/core/src/pages/system/SystemConfig.tsx b/frontend/packages/core/src/pages/system/SystemConfig.tsx
index b85e9eac..60b2e67d 100644
--- a/frontend/packages/core/src/pages/system/SystemConfig.tsx
+++ b/frontend/packages/core/src/pages/system/SystemConfig.tsx
@@ -3,7 +3,7 @@ import {forwardRef, useEffect, useImperativeHandle, useMemo, useState} from "re
import {App, Button, Form, Input, Radio, Row, Select, TreeSelect, Upload} from "antd";
import { Link, useLocation, useNavigate, useParams} from "react-router-dom";
import {RouterParams} from "@core/components/aoplatform/RenderRoutes.tsx";
-import {BasicResponse, DELETE_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE} from "@common/const/const.tsx";
+import {BasicResponse, DELETE_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
import {DefaultOptionType} from "antd/es/cascader";
import { EntityItem, MemberItem, SimpleTeamItem} from "@common/const/type.ts";
@@ -13,7 +13,7 @@ import { validateUrlSlash } from "@common/utils/validate.ts";
import { normFile } from "@common/utils/uploadPic.ts";
import { useBreadcrumb } from "@common/contexts/BreadcrumbContext.tsx";
import { useSystemContext } from "../../contexts/SystemContext.tsx";
-import { SERVICE_APPROVAL_OPTIONS, SERVICE_KIND_OPTIONS, SERVICE_VISUALIZATION_OPTIONS } from "@core/const/system/const.tsx";
+import { SERVICE_APPROVAL_OPTIONS, SERVICE_KIND_OPTIONS } from "@core/const/system/const.tsx";
import { RcFile, UploadChangeParam, UploadFile, UploadProps } from "antd/es/upload/interface";
import { LoadingOutlined } from "@ant-design/icons";
import { getImgBase64 } from "@common/utils/dataTransfer.ts";
@@ -257,7 +257,8 @@ const SystemConfig = forwardRef((_,ref) => {
setOnEdit(false);
const id = uuidv4()
form.setFieldValue('id',id);
- form.setFieldValue('serviceKind',serviceTypeOptions[0].value)
+ form.setFieldValue('serviceKind','ai')
+ setShowAI(true)
form.setFieldValue('prefix',`${id.split('-')[0]}/`)
form.setFieldValue('team',teamId);
form.setFieldValue('serviceType','public');
@@ -285,7 +286,7 @@ const SystemConfig = forwardRef((_,ref) => {
})
}
- const serviceTypeOptions = useMemo(()=>SERVICE_KIND_OPTIONS.map((x)=>({...x, label:$t(x.label)})),[state.language]);
+ // const serviceTypeOptions = useMemo(()=>SERVICE_KIND_OPTIONS.map((x)=>({...x, label:$t(x.label)})),[state.language]);
// const visualizationOptions = useMemo(()=>SERVICE_VISUALIZATION_OPTIONS.map((x)=>({...x, label:$t(x.label)})),[state.language])
const approvalOptions = useMemo(()=>SERVICE_APPROVAL_OPTIONS.map((x)=>({...x, label:$t(x.label)})),[state.language])
@@ -324,8 +325,18 @@ const SystemConfig = forwardRef((_,ref) => {
name="serviceKind"
rules={[{required: true}]}
>
-
+ {setShowAI(e.target.value === 'ai')}} >
+
+
+
+ {$t('AI 服务')}
+
+
+
+
+ {$t('REST 服务')}
+
+
}
{showAI &&
diff --git a/frontend/packages/core/src/pages/system/SystemList.tsx b/frontend/packages/core/src/pages/system/SystemList.tsx
index 5a4776ef..8f53ae96 100644
--- a/frontend/packages/core/src/pages/system/SystemList.tsx
+++ b/frontend/packages/core/src/pages/system/SystemList.tsx
@@ -14,7 +14,6 @@ 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";
import InsidePage from "@common/components/aoplatform/InsidePage.tsx";
const SystemList:FC = ()=>{
@@ -37,7 +36,7 @@ const SystemList:FC = ()=>{
getGlobalAccessData()?.then?.(()=>{
getSystemList()
})
- return
+ return Promise.resolve({data:[], success:false})
}
if(!tableHttpReload){
setTableHttpReload(true)
diff --git a/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx b/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx
index 62fd6c99..7721d564 100644
--- a/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx
+++ b/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx
@@ -1,10 +1,10 @@
-import {App, Button, Col, Form, Input, Row, Select, Spin, Switch} from "antd";
+import {App, Button, Col, Form, Input, Row, Select, Space, Spin, Switch} from "antd";
import {forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState} from "react";
import EditableTableWithModal from "@common/components/aoplatform/EditableTableWithModal.tsx";
import styles from "./SystemInsideApi.module.css"
import {BasicResponse, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE} from "@common/const/const.tsx";
import {useFetch} from "@common/hooks/http.ts";
-import { API_PROTOCOL, HTTP_METHOD, MATCH_CONFIG, MatchPositionEnum, MatchTypeEnum } from "../../../const/system/const.tsx";
+import { API_PATH_MATCH_RULES, API_PROTOCOL, HTTP_METHOD, MATCH_CONFIG, MatchPositionEnum, MatchTypeEnum } from "../../../const/system/const.tsx";
import { SystemInsideRouterCreateHandle, SystemInsideRouterCreateProps, SystemApiProxyFieldType, SystemInsideApiProxyHandle } from "../../../const/system/type.ts";
import { MatchItem } from "@common/const/type.ts";
import { validateUrlSlash } from "@common/utils/validate.ts";
@@ -31,7 +31,7 @@ const SystemInsideRouterCreate = forwardRef{
return Promise.all([proxyRef.current?.validate?.(), form.validateFields()]).then(([,formValue])=>{
const body = {...formValue,
- path: prefixForce? `${apiPrefix}/${formValue.path.trim()}` : formValue.path.trim(),
+ path: `${prefixForce ? apiPrefix + '/' : ''}${formValue.path.trim()}${formValue.pathMatch === 'prefix' ? '/*' : ''}`,
proxy:{...formValue.proxy,path:formValue.proxy.path ? (formValue.proxy.path.startsWith('/')? formValue.proxy.path: '/'+ formValue.proxy.path) : undefined}}
return fetchData>('service/router',{
method: routeId ? 'PUT' :'POST' ,eoBody:(body), eoParams: {service:serviceId,team:teamId, router:routeId },eoTransformKeys:['matchType','disable']}).then(response=>{
@@ -77,7 +77,24 @@ const SystemInsideRouterCreate = forwardRefAPI_PATH_MATCH_RULES.map(
+ x=>({label:$t(x.label), value:x.value})),[state.language])
return (
-
-
- label={$t("请求路径")}
- name="path"
- rules={[{ required: true,whitespace:true },
- {
- validator: validateUrlSlash,
- }]}
- className={styles['form-input-group']}
- >
-
+
+
+
+
+
+
+ name="path"
+ rules={[{ required: true,whitespace:true },
+ {
+ validator: validateUrlSlash,
+ }]}
+ noStyle
+ >
+ {
+ if((e.target.value as string).endsWith('/*')){
+ form.setFieldValue('path',e.target.value.slice(0,-2))
+ form.setFieldValue('pathMatch','prefix')
+ }
+ }}/>
+
+
diff --git a/frontend/packages/core/src/pages/team/TeamList.tsx b/frontend/packages/core/src/pages/team/TeamList.tsx
index 1fba9241..b7d87645 100644
--- a/frontend/packages/core/src/pages/team/TeamList.tsx
+++ b/frontend/packages/core/src/pages/team/TeamList.tsx
@@ -165,7 +165,7 @@ const TeamList:FC = ()=>{
return (
diff --git a/frontend/packages/dashboard/src/component/MonitorAppPage.tsx b/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
index b76bcfbc..1d3e45aa 100644
--- a/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
+++ b/frontend/packages/dashboard/src/component/MonitorAppPage.tsx
@@ -99,7 +99,7 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
fetchTableData(data).then((resp) => {
const {code,data,msg} = resp
if(code === STATUS_CODE.SUCCESS){
- exportExcel($t('应用调用统计'), [query!.start!, query!.end!], $t('应用调用统计'), '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 || $t(RESPONSE_TIPS.dataError))
}
@@ -144,13 +144,13 @@ export default function MonitorAppPage(props:MonitorAppPageProps){
onTimeRangeChange={handleTimeRangeChange}/>
-
+
)
@@ -186,7 +186,7 @@ const CardTitle = (service:ServiceHubTableListItem)=>{
{service.apiNum ?? '-'}
-
+
{service.subscriberNum ?? '-'}
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
index f908907d..657db628 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementAppSetting.tsx
@@ -8,7 +8,7 @@ export default function ManagementAppSetting(){
return (
-
{$t('应用管理')}
+
{$t('消费者管理')}
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
index 45a478c7..f57194fa 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementConfig.tsx
@@ -96,7 +96,7 @@ const ManagementConfig = forwardRef
- label={$t("应用名称")}
+ label={$t("消费者名称")}
name="name"
rules={[{ required: true,whitespace:true }]}
>
@@ -139,7 +139,7 @@ const ManagementConfig = forwardRef
- label={$t("应用 ID")}
+ label={$t("消费者 ID")}
name="id"
rules={[{ required: true ,whitespace:true }]}
>
@@ -167,10 +167,10 @@ const ManagementConfig = forwardRef
-
{$t('删除应用')}:{$t('删除操作不可恢复,请谨慎操作!')}
+
{$t('删除消费者')}:{$t('删除操作不可恢复,请谨慎操作!')}
-
+
diff --git a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
index 58f42fc9..994ba88e 100644
--- a/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
+++ b/frontend/packages/market/src/pages/serviceHub/management/ManagementInsidePage.tsx
@@ -32,7 +32,7 @@ export default function ManagementInsidePage(){
const TENANT_MANAGEMENT_APP_MENU: MenuProps['items'] = useMemo(()=>[
getItem($t('订阅的服务'), 'service'),
getItem($t('访问授权'), 'authorization'),
- getItem($t('应用管理'), 'setting'),
+ getItem($t('消费者管理'), 'setting'),
],[state.language])
const menuData = useMemo(()=>{
@@ -45,7 +45,7 @@ export default function ManagementInsidePage(){
const onMenuClick: MenuProps['onClick'] = (node) => {
setActiveMenu(node.key)
- navigateTo(`/tenantManagement/${teamId}/inside/${appId}/${node.key}`)
+ navigateTo(`/consumer/${teamId}/inside/${appId}/${node.key}`)
};
useEffect(()=>{
@@ -60,7 +60,7 @@ export default function ManagementInsidePage(){
}
setBreadcrumb(
[
- {title:{$t('应用')}},
+ {title:{$t('消费者')}},
...(_appName ? [{title:_appName}] : [])
]
)
@@ -84,7 +84,7 @@ useEffect(()=>{
-
+
)
-}
\ No newline at end of file
+}
+
+
+type TableAreaProps = {
+ language:string
+ getServiceList:()=>Promise<{data:ServiceHubAppListItem[], success:boolean}>
+ addNewApp:()=>Promise
+ setTableHttpReload:(b:boolean)=>void
+ setTableSearchWord:(s:string)=>void
+ editApp:(item:ServiceHubAppListItem)=>void
+}
+
+const TableArea = memo(({language, getServiceList, addNewApp, setTableHttpReload, setTableSearchWord, editApp}:TableAreaProps)=>{
+ const columns = useMemo(()=>{
+ const res = SERVICE_HUB_TABLE_COLUMNS.map(x=>{
+ return {...x,title:typeof x.title === 'string' ? $t(x.title as string) : x.title}})
+ return res
+ },[language])
+
+ return (
+ getServiceList()}
+ addNewBtnTitle={$t("添加服务")}
+ searchPlaceholder={$t("输入名称、ID 查找服务")}
+ onAddNewBtnClick={addNewApp}
+ onChange={() => {
+ setTableHttpReload(false)
+ }}
+ onSearchWordChange={(e) => {
+ setTableSearchWord(e.target.value)
+ }}
+ onRowClick={(row:ServiceHubAppListItem)=>editApp(row)}
+ />
+ )})
\ No newline at end of file
diff --git a/frontend/packages/openApi/src/consts/const.tsx b/frontend/packages/openApi/src/consts/const.tsx
index 45d21d31..648aaf2c 100644
--- a/frontend/packages/openApi/src/consts/const.tsx
+++ b/frontend/packages/openApi/src/consts/const.tsx
@@ -5,14 +5,14 @@ import { $t } from "@common/locales/index.ts";
export const OPENAPI_LIST_COLUMNS: PageProColumns[] = [
{
- title:$t('应用名称'),
+ title:$t('消费者名称'),
dataIndex: 'name',
ellipsis:true,
width:160,
fixed:'left'
},
{
- title:$t('应用 ID'),
+ title:$t('消费者 ID'),
dataIndex: 'id',
ellipsis:true,
width: 140,
diff --git a/frontend/packages/openApi/src/pages/OpenApiConfig.tsx b/frontend/packages/openApi/src/pages/OpenApiConfig.tsx
index e1c00a4f..ff7029c7 100644
--- a/frontend/packages/openApi/src/pages/OpenApiConfig.tsx
+++ b/frontend/packages/openApi/src/pages/OpenApiConfig.tsx
@@ -69,7 +69,7 @@ export const OpenApiConfig = forwardRef(
autoComplete="off"
>
- label={$t("应用名称")}
+ label={$t("消费者名称")}
name="name"
rules={[{ required: true,whitespace:true }]}
>
@@ -77,7 +77,7 @@ export const OpenApiConfig = forwardRef(
- label={$t("应用 ID")}
+ label={$t("消费者 ID")}
name="id"
rules={[{ required: true ,whitespace:true }]}
>
diff --git a/frontend/packages/openApi/src/pages/OpenApiList.tsx b/frontend/packages/openApi/src/pages/OpenApiList.tsx
index bb16eda2..b4f16c71 100644
--- a/frontend/packages/openApi/src/pages/OpenApiList.tsx
+++ b/frontend/packages/openApi/src/pages/OpenApiList.tsx
@@ -216,7 +216,7 @@ export default function OpenApiList(){
dataSource={tableListDataSource}
showPagination={false}
primaryKey="id"
- addNewBtnTitle={$t("添加应用")}
+ addNewBtnTitle={$t("添加消费者")}
addNewBtnAccess="system.openapi.self.add"
onChange={() => {
setTableHttpReload(false)