diff --git a/frontend/packages/common/src/contexts/BreadcrumbContext.tsx b/frontend/packages/common/src/contexts/BreadcrumbContext.tsx index 2075b855..e88c2eb6 100644 --- a/frontend/packages/common/src/contexts/BreadcrumbContext.tsx +++ b/frontend/packages/common/src/contexts/BreadcrumbContext.tsx @@ -22,8 +22,10 @@ export const BreadcrumbProvider = ({ children }: unknown) => { { - newItems.slice(0, newItems.length - 1).forEach((item) => { - item.title = {item.title} + newItems.forEach((item) => { + item.title = ( + {item.title} + ) }) setBreadcrumb(newItems) }, diff --git a/frontend/packages/common/src/locales/keyHashMap.json b/frontend/packages/common/src/locales/keyHashMap.json index 1d283fed..f796c540 100644 --- a/frontend/packages/common/src/locales/keyHashMap.json +++ b/frontend/packages/common/src/locales/keyHashMap.json @@ -350,13 +350,13 @@ "重置": "K50d471b2", "查询": "Kee8ae330", "请输入 APIURL 搜索": "Kf8187c33", - "服务": "Kb58e0c3f", - "使用说明": "Kdefa9caa", "最近一次更新者": "K617f34f1", "最近一次更新时间": "K6ebca204", "保存": "Kabfe9512", + "服务": "Kb58e0c3f", "API 路由": "K51d1eb5d", - "API 文档": "Ka2b6d281", + "API 路由文档": "K1639a17a", + "使用说明": "Kdefa9caa", "服务策略": "K52f72551", "发布": "K36856e71", "订阅管理": "K6382bbfd", @@ -369,9 +369,6 @@ "手动添加": "K18307d56", "订阅申请": "K705fe9f5", "订阅方": "K3a67ea90", - "API": "K3ba29a85", - "编辑 API": "Ke93388fd", - "添加 API": "K84aabfd4", "AI 路由设置": "Kefa2a4cf", "路由名称": "K66060758", "请求路径": "K5582ac8", @@ -382,7 +379,6 @@ "拦截接口": "Kee4139c2", "开启拦截后,网关会拦截所有该路径的请求。": "K3e38ea", "模型配置": "K8a35059b", - "路由": "Kf9dcef3a", "添加路由": "K6134bbe8", "输入 URL 查找路由": "Kf85b83a0", "线上模型": "K84b2cf2d", @@ -633,8 +629,6 @@ "处理日志": "Ke429194e", "脱敏前": "K8c34c02f", "脱敏后": "K8e3d388d", - "编辑服务策略": "Kf06f6737", - "添加服务策略": "K205971e1", "编辑策略": "Kc82b8374", "策略类型": "K4b34a5e5", "匹配条件": "K57f0fee8", @@ -678,13 +672,13 @@ "API 使用排名": "Kbee2340", "消费者使用排名": "Kf6af1f40", "请求数": "K318a7519", - "Token": "K9ef68e3f", - "平均 Token/s 统计": "K6c016898", - "平均请求数": "K652843b0", - "平均 Token/订阅者统计": "Kf5eeb9c5", "流量": "K53eb7414", "平均响应时间": "K7c8d5c23", + "平均请求数": "K652843b0", "平均流量": "K8158a6e4", + "Token": "K9ef68e3f", + "平均 Token/s 统计": "K6c016898", + "平均 Token/订阅者统计": "Kf5eeb9c5", "单位:ms,最小值:1": "K2a16c93b", "API 路由设置": "Ka945cfb1", "API 基础信息": "K2e050340", @@ -861,6 +855,7 @@ "请确认是否取消订阅申请?": "K1856c229", "搜索服务": "K66ea2f0", "审核中": "K8adf7f8b", + "API 文档": "Ka2b6d281", "添加消费者": "K84c4dc71", "暂无消费者描述": "Kc3b7bfa8", "创建并管理自己的消费者实体,每个消费者可以订阅多个API服务,确保在调用之前已获得相应权限。你可以为消费者生成 API 密钥等鉴权方式,用于安全地调用 API 服务": "K5c4e2865", @@ -873,6 +868,7 @@ "版本": "K81634069", "更新时间": "Keefda53d", "介绍": "K59cdbec3", + "API": "K3ba29a85", "无标签": "K96a2f1c8", "分类": "Kb32f0afe", "服务市场": "K370a3eb2", diff --git a/frontend/packages/common/src/locales/scan/en-US.json b/frontend/packages/common/src/locales/scan/en-US.json index 936e9eb5..92be8d7f 100644 --- a/frontend/packages/common/src/locales/scan/en-US.json +++ b/frontend/packages/common/src/locales/scan/en-US.json @@ -186,7 +186,7 @@ "K617f34f1": "Updated By", "K6ebca204": "Update Time", "Kabfe9512": "Save", - "K51d1eb5d": "API", + "K51d1eb5d": "API Routes", "Ka2b6d281": "API Docs", "Kdefa9caa": "Usage Instructions", "K36856e71": "Publish", @@ -210,7 +210,7 @@ "K469e475a": "Max Retry Times", "K8a35059b": "Model Settings", "Kf9dcef3a": "API", - "K6134bbe8": "Add API", + "K6134bbe8": "Add API Route", "Kf85b83a0": "Enter URL to Search", "Kcf9f90b8": "Model Provider", "Kfede1c7c": "Model", @@ -956,5 +956,6 @@ "K8158a6e4": "Avg Traffic per Subscriber", "K6b882d4a": "Avg Token per Subscriber", "K6c2d93b6": "Failed to load data, please try again", - "Kf5eeb9c5": "Avg Token per Subscriber" + "Kf5eeb9c5": "Avg Token per Subscriber", + "K1639a17a": "API Route Docs" } diff --git a/frontend/packages/common/src/locales/scan/ja-JP.json b/frontend/packages/common/src/locales/scan/ja-JP.json index dff7d694..fff795c6 100644 --- a/frontend/packages/common/src/locales/scan/ja-JP.json +++ b/frontend/packages/common/src/locales/scan/ja-JP.json @@ -189,7 +189,7 @@ "K617f34f1": "更新者", "K6ebca204": "更新日時", "Kabfe9512": "保存", - "K51d1eb5d": "API", + "K51d1eb5d": "APIルート", "Ka2b6d281": "API ドキュメント", "Kdefa9caa": "説明ドキュメント", "K36856e71": "公開", @@ -213,7 +213,7 @@ "K469e475a": "リトライ回数", "K8a35059b": "モデル設定", "Kf9dcef3a": "API", - "K6134bbe8": "API を追加", + "K6134bbe8": "APIルートを追加する", "Kf85b83a0": "URL を入力して検索", "Kcf9f90b8": "モデルプロバイダー", "Kfede1c7c": "モデル", @@ -978,5 +978,6 @@ "K8158a6e4": "平均トラフィック", "K6b882d4a": "平均トークン/加入者", "K6c2d93b6": "データの読み込みに失敗しました。もう一度お試しください", - "Kf5eeb9c5": "平均トークン/加入者 統計" + "Kf5eeb9c5": "平均トークン/加入者 統計", + "K1639a17a": "APIルートのドキュメント" } diff --git a/frontend/packages/common/src/locales/scan/zh-CN.json b/frontend/packages/common/src/locales/scan/zh-CN.json index 99343db3..f86c8f44 100644 --- a/frontend/packages/common/src/locales/scan/zh-CN.json +++ b/frontend/packages/common/src/locales/scan/zh-CN.json @@ -189,7 +189,7 @@ "K617f34f1": "更新者", "K6ebca204": "更新时间", "Kabfe9512": "保存", - "K51d1eb5d": "API", + "K51d1eb5d": "API 路由", "Ka2b6d281": "API 文档", "Kdefa9caa": "说明文档", "K36856e71": "发布", @@ -213,7 +213,7 @@ "K469e475a": "最大重试次数", "K8a35059b": "模型设置", "Kf9dcef3a": "API", - "K6134bbe8": "添加 API", + "K6134bbe8": "添加 API 路由", "Kf85b83a0": "输入 URL 查找", "Kcf9f90b8": "模型供应商", "Kfede1c7c": "模型", @@ -907,5 +907,6 @@ "K652843b0": "平均请求数", "K8158a6e4": "平均流量", "K6c2d93b6": "加载数据失败,请重试", - "Kf5eeb9c5": "平均 Token/订阅者统计" + "Kf5eeb9c5": "平均 Token/订阅者统计", + "K1639a17a": "API 路由文档" } diff --git a/frontend/packages/common/src/locales/scan/zh-TW.json b/frontend/packages/common/src/locales/scan/zh-TW.json index 9afebe7d..9a30af38 100644 --- a/frontend/packages/common/src/locales/scan/zh-TW.json +++ b/frontend/packages/common/src/locales/scan/zh-TW.json @@ -189,7 +189,7 @@ "K617f34f1": "更新者", "K6ebca204": "更新時間", "Kabfe9512": "保存", - "K51d1eb5d": "API", + "K51d1eb5d": "API 路由", "Ka2b6d281": "API 文檔", "Kdefa9caa": "說明文檔", "K36856e71": "發布", @@ -213,7 +213,7 @@ "K469e475a": "最大重試次數", "K8a35059b": "模型設置", "Kf9dcef3a": "API", - "K6134bbe8": "添加 API", + "K6134bbe8": "添加 API 路由", "Kf85b83a0": "輸入 URL 查找", "Kcf9f90b8": "模型供應商", "Kfede1c7c": "模型", @@ -978,5 +978,6 @@ "K8158a6e4": "平均流量", "K6b882d4a": "每位訂閱者平均 Token", "K6c2d93b6": "載入資料失敗,請重試", - "Kf5eeb9c5": "每位訂閱者平均 Token 統計" + "Kf5eeb9c5": "每位訂閱者平均 Token 統計", + "K1639a17a": "API 路由文件" } diff --git a/frontend/packages/core/src/const/ai-service/const.tsx b/frontend/packages/core/src/const/ai-service/const.tsx index a058f636..fad67f2b 100644 --- a/frontend/packages/core/src/const/ai-service/const.tsx +++ b/frontend/packages/core/src/const/ai-service/const.tsx @@ -6,17 +6,18 @@ import { AiServiceRouterTableListItem, VariableItems } from './type' import { PageProColumns } from '@common/components/aoplatform/PageList' export const AI_SERVICE_ROUTER_TABLE_COLUMNS: PageProColumns[] = [ + { + title: '名称', + dataIndex: 'name', + width: 200, + ellipsis: true + }, { title: 'URL', dataIndex: 'requestPath', ellipsis: true, width: 200 }, - { - title: '名称', - dataIndex: 'name', - ellipsis: true - }, { title: '模型', dataIndex: ['model', 'name'], diff --git a/frontend/packages/core/src/const/system/const.tsx b/frontend/packages/core/src/const/system/const.tsx index 214a35b6..cabbf89a 100644 --- a/frontend/packages/core/src/const/system/const.tsx +++ b/frontend/packages/core/src/const/system/const.tsx @@ -242,6 +242,12 @@ export const MATCH_CONFIG: ConfigField[] = [ ] export const SYSTEM_API_TABLE_COLUMNS: PageProColumns[] = [ + { + title: '名称', + dataIndex: 'name', + width: 200, + ellipsis: true + }, { title: 'URL', dataIndex: 'requestPath', diff --git a/frontend/packages/core/src/const/system/type.ts b/frontend/packages/core/src/const/system/type.ts index 9d4a82fe..0f1d70a2 100644 --- a/frontend/packages/core/src/const/system/type.ts +++ b/frontend/packages/core/src/const/system/type.ts @@ -97,6 +97,7 @@ export type SystemApiProxyType = { export type SystemApiProxyFieldType = { protocols: string[]; id:string; + name:string description?:string; disable:boolean; path:string; diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsideDocument.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsideDocument.tsx index e9059968..b39f14ee 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsideDocument.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsideDocument.tsx @@ -8,9 +8,8 @@ import { App, Button } from 'antd' import { EntityItem } from '@common/const/type.ts' import WithPermission from '@common/components/aoplatform/WithPermission.tsx' import { RouterParams } from '@core/components/aoplatform/RenderRoutes' -import { useNavigate, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { $t } from '@common/locales' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext' const ServiceInsideDocument = () => { const { message } = App.useApp() const [updater, setUpdater] = useState() @@ -19,8 +18,6 @@ const ServiceInsideDocument = () => { const [doc, setDoc] = useState() const { fetchData } = useFetch() const { serviceId, teamId } = useParams() - const { setBreadcrumb } = useBreadcrumb() - const navigator = useNavigate() const save = () => { fetchData< @@ -80,15 +77,6 @@ const ServiceInsideDocument = () => { } useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('使用说明') - } - ]) getServiceDoc() }, []) diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx index 0dc81acd..f6ea1d36 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx @@ -14,6 +14,7 @@ import { cloneDeep } from 'lodash-es' import { FC, useEffect, useMemo, useState } from 'react' import { Link, Outlet, useLocation, useNavigate, useParams } from 'react-router-dom' import { useAiServiceContext } from '../../contexts/AiServiceContext.tsx' +import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' const APP_MODE = import.meta.env.VITE_APP_MODE const AiServiceInsidePage: FC = () => { @@ -27,6 +28,7 @@ const AiServiceInsidePage: FC = () => { const [activeMenu, setActiveMenu] = useState() const navigateTo = useNavigate() const [showMenu, setShowMenu] = useState(false) + const { setBreadcrumb } = useBreadcrumb() const getAiServiceInfo = () => { fetchData>('service/info', { @@ -77,7 +79,7 @@ const AiServiceInsidePage: FC = () => { 'team.service.router.view' ), getItem( - {$t('API 文档')}, + {$t('API 路由文档')}, 'api', undefined, undefined, @@ -215,10 +217,19 @@ const AiServiceInsidePage: FC = () => { }, [accessData]) useEffect(() => { + setBreadcrumb([ + { + title: $t('服务'), + onClick: () => navigateTo('/service/list') + }, + { + title: aiServiceInfo?.name || '' + } + ]) if (activeMenu && serviceId === currentUrl.split('/')[currentUrl.split('/').length - 1]) { navigateTo(`/service/${teamId}/aiInside/${serviceId}/${activeMenu}`) } - }, [activeMenu]) + }, [activeMenu, state.language, aiServiceInfo]) useEffect(() => { serviceId && getAiServiceInfo() diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsideSubscriber.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsideSubscriber.tsx index bb53dcae..a1789f41 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsideSubscriber.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsideSubscriber.tsx @@ -1,8 +1,7 @@ import {ActionType} from "@ant-design/pro-components"; import {FC, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState} from "react"; -import {Link, useNavigate, useParams} from "react-router-dom"; +import {useParams} from "react-router-dom"; import {App, Form,TreeSelect} from "antd"; -import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx"; import {useFetch} from "@common/hooks/http.ts"; import { RouterParams } from "@core/components/aoplatform/RenderRoutes.tsx"; import {BasicResponse, COLUMNS_TITLE, DELETE_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, VALIDATE_MESSAGE} from "@common/const/const.tsx"; @@ -18,7 +17,6 @@ import { checkAccess } from "@common/utils/permission.ts"; import { $t } from "@common/locales/index.ts"; const AiServiceInsideSubscriber:FC = ()=>{ - const { setBreadcrumb } = useBreadcrumb() const { modal,message } = App.useApp() const {fetchData} = useFetch() const {serviceId, teamId} = useParams() @@ -26,7 +24,6 @@ const AiServiceInsideSubscriber:FC = ()=>{ const pageListRef = useRef(null); const [memberValueEnum, setMemberValueEnum] = useState([]) const {accessData,state} = useGlobalContext() - const navigator = useNavigate() const getAiServiceSubscriber = ()=>{ return fetchData>('service/subscribers',{method:'GET',eoParams:{service:serviceId,team:teamId},eoTransformKeys:['apply_time']}).then(response=>{ const {code,data,msg} = response @@ -120,15 +117,6 @@ const AiServiceInsideSubscriber:FC = ()=>{ ] useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title:$t('订阅方管理') - } - ]) getMemberList() manualReloadTable() }, [serviceId]); diff --git a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideApiDocument.tsx b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideApiDocument.tsx index 44a419b8..909696e2 100644 --- a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideApiDocument.tsx +++ b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideApiDocument.tsx @@ -6,33 +6,21 @@ import { LoadingOutlined } from '@ant-design/icons' import EmptySVG from '@common/assets/empty.svg' import { $t } from '@common/locales/index.ts' import ApiDocument from '@common/components/aoplatform/ApiDocument.tsx' -import { useNavigate, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { RouterParams } from '@core/components/aoplatform/RenderRoutes.tsx' import { AiServiceInsideApiDocumentHandle, AiServiceInsideApiDocumentProps, AiServiceApiDetail } from '@core/const/ai-service/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext' const AiServiceInsideApiDocument = forwardRef(() => { const { serviceId, teamId } = useParams() const { fetchData } = useFetch() const [apiDetail, setApiDetail] = useState() const [loading, setLoading] = useState(false) - const { setBreadcrumb } = useBreadcrumb() - const navigator = useNavigate() useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('API 文档') - } - ]) getApiDetail() }, []) diff --git a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx index fa0ef96f..32bc732f 100644 --- a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx +++ b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterCreate.tsx @@ -291,19 +291,6 @@ const AiServiceInsideRouterCreate = () => { } useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title:$t('API'), - onClick: () => navigator(backUrl) - }, - { - title: routeId ? $t('编辑 API') : $t('添加 API') - } - ]) !routeId && aiServiceInfo?.provider && getDefaultModelConfig() }, [aiServiceInfo]) diff --git a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterList.tsx b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterList.tsx index 55d2e3b0..7fe058df 100644 --- a/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterList.tsx +++ b/frontend/packages/core/src/pages/aiService/api/AiServiceInsideRouterList.tsx @@ -3,7 +3,6 @@ import PageList, { PageProColumns } from '@common/components/aoplatform/PageList import TableBtnWithPermission from '@common/components/aoplatform/TableBtnWithPermission.tsx' import { BasicResponse, COLUMNS_TITLE, DELETE_TIPS, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const.tsx' import { SimpleMemberItem } from '@common/const/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' import { useGlobalContext } from '@common/contexts/GlobalStateContext.tsx' import { useFetch } from '@common/hooks/http.ts' import { $t } from '@common/locales/index.ts' @@ -17,7 +16,6 @@ import { Link, useNavigate, useParams } from 'react-router-dom' const AiServiceInsideRouterList: FC = () => { const [searchWord, setSearchWord] = useState('') - const { setBreadcrumb } = useBreadcrumb() const { modal, message } = App.useApp() const [tableListDataSource, setTableListDataSource] = useState([]) const [tableHttpReload, setTableHttpReload] = useState(true) @@ -162,17 +160,6 @@ const AiServiceInsideRouterList: FC = () => { getMemberList() manualReloadTable() }, [serviceId]) - useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('路由') - } - ]) - }, [state.language]) const columns = useMemo(() => { return [...AI_SERVICE_ROUTER_TABLE_COLUMNS].map((x) => { diff --git a/frontend/packages/core/src/pages/aiService/approval/AiServiceInsideApprovalList.tsx b/frontend/packages/core/src/pages/aiService/approval/AiServiceInsideApprovalList.tsx index 6621ffec..13cc843a 100644 --- a/frontend/packages/core/src/pages/aiService/approval/AiServiceInsideApprovalList.tsx +++ b/frontend/packages/core/src/pages/aiService/approval/AiServiceInsideApprovalList.tsx @@ -3,7 +3,6 @@ import {ActionType} from "@ant-design/pro-components"; import {FC, useEffect, useMemo, useRef, useState} from "react"; import {Link, useLocation, useNavigate, useParams} from "react-router-dom"; import PageList, { PageProColumns } from "@common/components/aoplatform/PageList.tsx"; -import {useBreadcrumb} from "@common/contexts/BreadcrumbContext.tsx"; import {App, Button} from "antd"; import { SUBSCRIBE_APPROVAL_INNER_DONE_TABLE_COLUMN, @@ -26,7 +25,6 @@ import { SubscribeApprovalInfoType } from "@common/const/approval/type.tsx"; import { $t } from "@common/locales"; const AiServiceInsideApprovalList:FC = ()=>{ - const { setBreadcrumb } = useBreadcrumb() const { modal,message } = App.useApp() const {serviceId, teamId} = useParams(); const [init, setInit] = useState(true) @@ -40,7 +38,6 @@ const AiServiceInsideApprovalList:FC = ()=>{ const [approvalBtnLoading,setApprovalBtnLoading] = useState(false) const [memberValueEnum, setMemberValueEnum] = useState([]) const {accessData,state} = useGlobalContext() - const navigator = useNavigate() const openModal = async (type:'approval'|'view',entity:SubscribeApprovalTableListItem)=>{ message.loading($t(RESPONSE_TIPS.loading)) @@ -142,15 +139,6 @@ const AiServiceInsideApprovalList:FC = ()=>{ }, [query]); useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title:$t('订阅审核') - } - ]) getMemberList() manualReloadTable() }, [serviceId]); diff --git a/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublish.tsx b/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublish.tsx index b80b82b1..a492b3e4 100644 --- a/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublish.tsx +++ b/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublish.tsx @@ -2,13 +2,11 @@ import { Tabs } from "antd" import { useState, useEffect, FC, useMemo } from "react" import { Link, Outlet, useLocation, useNavigate } from "react-router-dom" -import { useBreadcrumb } from "@common/contexts/BreadcrumbContext" import { SYSTEM_PUBLISH_TAB_ITEMS } from "../../../const/system/const" import { $t } from "@common/locales" import { useGlobalContext } from "@common/contexts/GlobalStateContext" const AiServiceInsidePublic:FC = ()=>{ - const { setBreadcrumb } = useBreadcrumb() const query =new URLSearchParams(useLocation().search) const location = useLocation() const currentUrl = location.pathname @@ -25,18 +23,6 @@ const AiServiceInsidePublic:FC = ()=>{ setPageStatus(Number(query.get('status') ||0) as 0|1) }, [currentUrl]); - useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigateTo('/service/list') - }, - { - title:$t('发布') - } - ]) - }, []); - const tabItems = useMemo(()=>SYSTEM_PUBLISH_TAB_ITEMS?.map((x)=>({...x, label:$t(x.label as string) })),[state.language]) return ( <> diff --git a/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublishList.tsx b/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublishList.tsx index c3ec8573..09a17009 100644 --- a/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublishList.tsx +++ b/frontend/packages/core/src/pages/aiService/publish/AiServiceInsidePublishList.tsx @@ -9,7 +9,6 @@ import { PUBLISH_APPROVAL_RECORD_INNER_TABLE_COLUMN, PUBLISH_APPROVAL_VERSION_IN import { BasicResponse, COLUMNS_TITLE, DELETE_TIPS, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const"; import { SimpleMemberItem } from "@common/const/type.ts"; import { MemberTableListItem } from "../../../const/member/type"; -import { useBreadcrumb } from "@common/contexts/BreadcrumbContext"; import { useFetch } from "@common/hooks/http"; import WithPermission from "@common/components/aoplatform/WithPermission"; import { AiServicePublishReleaseItem } from "../../../const/system/type"; @@ -23,7 +22,6 @@ import { DrawerWithFooter } from "@common/components/aoplatform/DrawerWithFooter import { $t } from "@common/locales"; const AiServiceInsidePublicList:FC = ()=>{ - const { setBreadcrumb } = useBreadcrumb() const { modal,message } = App.useApp() const pageListRef = useRef(null); const [tableHttpReload, setTableHttpReload] = useState(true); @@ -45,7 +43,6 @@ const AiServiceInsidePublicList:FC = ()=>{ const [drawerData, setDrawerData] = useState({} as PublishTableListItem) const [drawerOkTitle, setDrawerOkTitle] = useState('确认') const [isOkToPublish, setIsOkToPublish] = useState(false) - const navigator = useNavigate() const getAiServicePublishList = (params?: ParamsType & { pageSize?: number | undefined; current?: number | undefined; @@ -351,15 +348,6 @@ const AiServiceInsidePublicList:FC = ()=>{ ] useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('发布') - } - ]) getMemberList() manualReloadTable() }, [serviceId]); diff --git a/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx b/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx index 3ac38da1..ed15ddb1 100644 --- a/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx +++ b/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx @@ -1,25 +1,13 @@ -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext' import { useEffect } from 'react' import { Outlet, useLocation, useNavigate } from 'react-router-dom' -import { $t } from '@common/locales' export default function ServicePolicyLayout() { const location = useLocation() const pathName = location.pathname const navigator = useNavigate() - const { setBreadcrumb } = useBreadcrumb() useEffect(() => { const tmpPath = pathName.split('/') if (tmpPath[tmpPath.length - 1] === 'servicepolicy') { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('服务策略') - } - ]) navigator('datamasking/list') } }, [pathName]) diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx index ec4aa016..efc778d3 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx @@ -80,19 +80,6 @@ const DataMaskingConfig = forwardRef((_,ref) => { }; useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title:$t('服务策略'), - onClick: () => navigator(serviceId ? `/service/${teamId}/aiInside/${serviceId}/servicepolicy` : '') - }, - { - title: policyId !== undefined ? $t('编辑服务策略') : $t('添加服务策略') - } - ]) if (policyId !== undefined) { setOnEdit(true); getPolicyInfo(); diff --git a/frontend/packages/core/src/pages/system/SystemConfig.tsx b/frontend/packages/core/src/pages/system/SystemConfig.tsx index 14426200..d12671d2 100644 --- a/frontend/packages/core/src/pages/system/SystemConfig.tsx +++ b/frontend/packages/core/src/pages/system/SystemConfig.tsx @@ -2,7 +2,6 @@ import { LoadingOutlined } from '@ant-design/icons' import WithPermission from '@common/components/aoplatform/WithPermission.tsx' import { BasicResponse, DELETE_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const.tsx' import { EntityItem, MemberItem, SimpleTeamItem } from '@common/const/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' import { useGlobalContext } from '@common/contexts/GlobalStateContext.tsx' import { useFetch } from '@common/hooks/http.ts' import { $t } from '@common/locales/index.ts' @@ -49,7 +48,6 @@ const SystemConfig = forwardRef((_, ref) => { const { fetchData } = useFetch() const [teamOptionList, setTeamOptionList] = useState() const navigate = useNavigate() - const { setBreadcrumb } = useBreadcrumb() const { setSystemInfo } = useSystemContext() const [showClassify, setShowClassify] = useState(true) const [showAI, setShowAI] = useState(false) @@ -355,15 +353,6 @@ const SystemConfig = forwardRef((_, ref) => { if (serviceId !== undefined) { setOnEdit(true) getSystemInfo() - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigate('/service/list') - }, - { - title: $t('设置') - } - ]) } else { getProviderOptionList() setOnEdit(false) diff --git a/frontend/packages/core/src/pages/system/SystemInsideDocument.tsx b/frontend/packages/core/src/pages/system/SystemInsideDocument.tsx index 719bd653..cfa226f1 100644 --- a/frontend/packages/core/src/pages/system/SystemInsideDocument.tsx +++ b/frontend/packages/core/src/pages/system/SystemInsideDocument.tsx @@ -1,7 +1,6 @@ import WithPermission from '@common/components/aoplatform/WithPermission.tsx' import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const.tsx' import { EntityItem } from '@common/const/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext' import { useFetch } from '@common/hooks/http.ts' import { $t } from '@common/locales' import { RouterParams } from '@core/components/aoplatform/RenderRoutes' @@ -10,7 +9,7 @@ import { App, Button } from 'antd' import hljs from 'highlight.js' import 'highlight.js/styles/default.css' import { useEffect, useState } from 'react' -import { useNavigate, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' const ServiceInsideDocument = () => { const { message } = App.useApp() const [updater, setUpdater] = useState() @@ -19,8 +18,6 @@ const ServiceInsideDocument = () => { const [doc, setDoc] = useState() const { fetchData } = useFetch() const { serviceId, teamId } = useParams() - const { setBreadcrumb } = useBreadcrumb() - const navigator = useNavigate() const save = () => { fetchData< BasicResponse<{ @@ -88,15 +85,6 @@ const ServiceInsideDocument = () => { } useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('使用说明') - } - ]) getServiceDoc() }, []) diff --git a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx index 041819b9..2f7c40a7 100644 --- a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx +++ b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx @@ -15,6 +15,7 @@ import { Link, Outlet, useLocation, useNavigate, useParams } from 'react-router- import { SystemConfigFieldType } from '../../const/system/type.ts' import { useSystemContext } from '../../contexts/SystemContext.tsx' import ServiceInfoCard from '@common/components/aoplatform/serviceInfoCard.tsx' +import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' const SystemInsidePage: FC = () => { const { message } = App.useApp() @@ -27,6 +28,7 @@ const SystemInsidePage: FC = () => { const [activeMenu, setActiveMenu] = useState() const navigateTo = useNavigate() const [showMenu, setShowMenu] = useState(false) + const { setBreadcrumb } = useBreadcrumb() const getSystemInfo = () => { fetchData>('service/info', { @@ -76,7 +78,7 @@ const SystemInsidePage: FC = () => { 'team.service.router.view' ), getItem( - {$t('API 文档')}, + {$t('API 路由文档')}, 'api', undefined, undefined, @@ -217,10 +219,19 @@ const SystemInsidePage: FC = () => { }, [accessData]) useEffect(() => { + setBreadcrumb([ + { + title: $t('服务'), + onClick: () => navigateTo('/service/list') + }, + { + title: systemInfo?.name || '' + } + ]) if (activeMenu && serviceId === currentUrl.split('/')[currentUrl.split('/').length - 1]) { navigateTo(`/service/${teamId}/inside/${serviceId}/${activeMenu}`) } - }, [activeMenu]) + }, [activeMenu, systemInfo, state.language]) useEffect(() => { serviceId && getSystemInfo() diff --git a/frontend/packages/core/src/pages/system/SystemInsideSubscriber.tsx b/frontend/packages/core/src/pages/system/SystemInsideSubscriber.tsx index 586e21f8..10aed7a0 100644 --- a/frontend/packages/core/src/pages/system/SystemInsideSubscriber.tsx +++ b/frontend/packages/core/src/pages/system/SystemInsideSubscriber.tsx @@ -11,7 +11,6 @@ import { STATUS_CODE } from '@common/const/const.tsx' import { SimpleMemberItem } from '@common/const/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' import { useGlobalContext } from '@common/contexts/GlobalStateContext.tsx' import { useFetch } from '@common/hooks/http.ts' import { $t } from '@common/locales/index.ts' @@ -20,7 +19,7 @@ import { RouterParams } from '@core/components/aoplatform/RenderRoutes.tsx' import { App, Form, TreeSelect } from 'antd' import { DefaultOptionType } from 'antd/es/cascader' import { FC, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react' -import { Link, useNavigate, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { SYSTEM_SUBSCRIBER_TABLE_COLUMNS } from '../../const/system/const.tsx' import { SimpleSystemItem, @@ -31,7 +30,6 @@ import { } from '../../const/system/type.ts' const SystemInsideSubscriber: FC = () => { - const { setBreadcrumb } = useBreadcrumb() const { modal, message } = App.useApp() const { fetchData } = useFetch() const { serviceId, teamId } = useParams() @@ -39,7 +37,6 @@ const SystemInsideSubscriber: FC = () => { const pageListRef = useRef(null) const [memberValueEnum, setMemberValueEnum] = useState([]) const { accessData, state } = useGlobalContext() - const navigator = useNavigate() const getSystemSubscriber = () => { return fetchData>( 'service/subscribers', @@ -162,15 +159,6 @@ const SystemInsideSubscriber: FC = () => { ] useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('订阅方管理') - } - ]) getMemberList() manualReloadTable() }, [serviceId]) diff --git a/frontend/packages/core/src/pages/system/SystemTopology.tsx b/frontend/packages/core/src/pages/system/SystemTopology.tsx index 8bfd47c9..d5cb7601 100644 --- a/frontend/packages/core/src/pages/system/SystemTopology.tsx +++ b/frontend/packages/core/src/pages/system/SystemTopology.tsx @@ -2,7 +2,6 @@ import { ZoomInOutlined, ZoomOutOutlined } from '@ant-design/icons' import G6, { EdgeConfig, Graph, NodeConfig } from '@antv/g6' import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from '@common/const/const' import { EntityItem } from '@common/const/type' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext' import { useFetch } from '@common/hooks/http' import { $t } from '@common/locales' import { getNodeSpacing } from '@common/utils/systemRunning' @@ -10,7 +9,7 @@ import { RouterParams } from '@core/components/aoplatform/RenderRoutes' import { App, Button } from 'antd' import { debounce } from 'lodash-es' import { useCallback, useEffect, useRef, useState } from 'react' -import { Link, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { RELATIVE_PICTURE_NODE_FONTSIZE } from '../../const/system-running/const' import { GraphData } from '../../const/system-running/type' import { SYSTEM_TOPOLOGY_NODE_TYPE_COLOR_MAP } from '../../const/system/const' @@ -26,9 +25,7 @@ export default function SystemTopology() { const [graph, setGraph] = useState(null) const { fetchData } = useFetch() const { systemInfo } = useSystemContext() - const { setBreadcrumb } = useBreadcrumb() const [zoomNum, setZoomNum] = useState(1) - const navigate = useNavigate() const getNodeData = () => { @@ -105,15 +102,6 @@ export default function SystemTopology() { useEffect(() => { getNodeData() - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigate('/service/list') - }, - { - title: $t('调用拓扑图') - } - ]) }, [serviceId]) useEffect(() => { diff --git a/frontend/packages/core/src/pages/system/api/SystemInsideApiDocument.tsx b/frontend/packages/core/src/pages/system/api/SystemInsideApiDocument.tsx index 77f82539..814a496e 100644 --- a/frontend/packages/core/src/pages/system/api/SystemInsideApiDocument.tsx +++ b/frontend/packages/core/src/pages/system/api/SystemInsideApiDocument.tsx @@ -9,13 +9,12 @@ import { $t } from '@common/locales/index.ts' import { RouterParams } from '@core/components/aoplatform/RenderRoutes.tsx' import { Button, Empty, Spin, Upload, message } from 'antd' import { forwardRef, useEffect, useState } from 'react' -import { useNavigate, useParams } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { SystemApiDetail, SystemInsideApiDocumentHandle, SystemInsideApiDocumentProps } from '../../../const/system/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' const SystemInsideApiDocument = forwardRef< SystemInsideApiDocumentHandle, @@ -26,18 +25,7 @@ const SystemInsideApiDocument = forwardRef< const [apiDetail, setApiDetail] = useState() const [loading, setLoading] = useState(false) const [showEditor, setShowEditor] = useState(false) - const { setBreadcrumb } = useBreadcrumb() - const navigator = useNavigate() useEffect(() => { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title: $t('API 文档') - } - ]) getApiDetail() }, []) diff --git a/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx b/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx index 5ce1ecb4..ecf601d2 100644 --- a/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx +++ b/frontend/packages/core/src/pages/system/api/SystemInsideRouterCreate.tsx @@ -26,7 +26,6 @@ import { SystemInsideRouterCreateHandle, SystemInsideRouterCreateProps } from '../../../const/system/type.ts' -import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx' const SystemInsideRouterCreate = forwardRef( (props, ref) => { @@ -39,14 +38,12 @@ const SystemInsideRouterCreate = forwardRef { return Promise.all([proxyRef.current?.validate?.(), form.validateFields()]).then(([, formValue]) => { const body = { ...formValue, - path: `${prefixForce ? apiPrefix + '/' : ''}${formValue.path.trim()}${formValue.pathMatch === 'prefix' ? '/*' : ''}`, + path: `${prefixForce ? apiPrefix + (!formValue.path?.trim() ? '': '/') : ''}${(formValue.path?.trim() || '')}${formValue.pathMatch === 'prefix' ? '/*' : ''}`, proxy: { ...formValue.proxy, path: formValue.proxy.path @@ -147,19 +144,6 @@ const SystemInsideRouterCreate = forwardRef { - setBreadcrumb([ - { - title: $t('服务'), - onClick: () => navigator('/service/list') - }, - { - title:$t('API'), - onClick: () => navigator(`/service/${teamId}/inside/${serviceId}/route`) - }, - { - title: routeId ? $t('编辑 API') : $t('添加 API') - } - ]) if (routeId) { getRouterConfig() } else { @@ -253,6 +237,14 @@ const SystemInsideRouterCreate = forwardRef + + className="flex-1" + label={$t('路由名称')} + name="name" + rules={[{ required: true, whitespace: true }]} + > + + label={$t('请求协议')} name="protocols" rules={[{ required: true }]}>