Skip to content

Commit c7c3e80

Browse files
committed
Merge remote-tracking branch 'github-pro/main' into feature/1.7-liujian
2 parents b6f593c + cc52481 commit c7c3e80

66 files changed

Lines changed: 2068 additions & 1226 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
import { Breadcrumb } from 'antd'
22
import { useBreadcrumb } from '@common/contexts/BreadcrumbContext.tsx'
33
import { FC, useEffect } from 'react'
4+
import { LeftOutlined } from '@ant-design/icons'
45

5-
const TopBreadcrumb: FC = () => {
6+
const TopBreadcrumb: FC<{ handleBackCallback?: () => void }> = ({ handleBackCallback }) => {
67
const { breadcrumb } = useBreadcrumb()
78
useEffect(() => {}, [breadcrumb])
8-
return <Breadcrumb items={breadcrumb} />
9+
const handleBack = () => {
10+
handleBackCallback?.()
11+
}
12+
return (
13+
<div className="flex text-[18px] leading-[25px] pb-[12px]">
14+
<div
15+
onClick={handleBack}
16+
className="hover:bg-gray-100 items-center mt-[1px] mr-[12px] flex justify-center rounded-lg border cursor-pointer border-gray-300 w-[30px] h-[30px] border border-solid "
17+
>
18+
<LeftOutlined className="text-xs" />
19+
</div>
20+
<Breadcrumb items={breadcrumb} className="flex-1" />
21+
</div>
22+
)
923
}
1024

1125
export default TopBreadcrumb

frontend/packages/common/src/components/aoplatform/InsidePage.tsx

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { $t } from '@common/locales'
44
import { Button, Tag } from 'antd'
55
import { FC, ReactNode } from 'react'
66
import { useNavigate } from 'react-router-dom'
7+
import TopBreadcrumb from './Breadcrumb'
78

89
class InsidePageProps {
910
showBanner?: boolean = true
@@ -64,14 +65,7 @@ const InsidePage: FC<InsidePageProps> = ({
6465
<></>
6566
) : (
6667
<div className={customPadding ? '' : 'mb-[30px]'}>
67-
{backUrl && (
68-
<div className="text-[18px] leading-[25px] mb-[12px]">
69-
<Button type="text" onClick={goBack}>
70-
<ArrowLeftOutlined className="max-h-[14px]" />
71-
{$t('返回')}
72-
</Button>
73-
</div>
74-
)}
68+
{backUrl && <TopBreadcrumb handleBackCallback={() => goBack()} />}
7569
<div className="flex justify-between mb-[20px] items-center ">
7670
<div className="flex items-center gap-TAG_LEFT">
7771
<div className="text-theme text-[26px] ">{pageTitle}</div>

frontend/packages/common/src/components/aoplatform/UnUsedWordForTranslate.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export const TranslateWord = () => {
5656
{$t('无需审核:允许任何消费者调用该服务')}
5757
{$t('人工审核:仅允许通过人工审核的消费者调用该服务')}
5858
{$t('开启:AI Agent 等产品能够通过 MCP 方式调用服务')}
59+
{$t('总览')}
5960
{$t('永久')}
6061
{$t('否')}
6162
{$t('是')}

frontend/packages/common/src/components/postcat/ApiEdit.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,12 +234,16 @@ export default function ApiEdit({
234234
<>
235235
<Space.Compact className="w-full mb-btnybase">
236236
<Select
237+
showSearch
238+
optionFilterProp="label"
237239
className="w-[15%] min-w-[100px]"
238240
value={apiInfo?.protocol || 'HTTP'}
239241
disabled={true}
240242
options={protocolOptionList}
241243
/>
242244
<Select
245+
showSearch
246+
optionFilterProp="label"
243247
className="w-[15%] min-w-[100px]"
244248
value={apiInfo?.method}
245249
disabled={true}

frontend/packages/common/src/const/permissions.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,21 @@ export const PERMISSION_DEFINITION = [
254254
anyOf: [{ backend: ['system.settings.ai_balance.manager'] }]
255255
}
256256
},
257+
'system.settings.mcp.manager': {
258+
granted: {
259+
anyOf: [{ backend: ['system.settings.mcp.manager'] }]
260+
}
261+
},
262+
'system.settings.mcp.view': {
263+
granted: {
264+
anyOf: [{ backend: ['system.settings.mcp.view'] }]
265+
}
266+
},
267+
'system.settings.apikey.view': {
268+
granted: {
269+
anyOf: [{ backend: ['system.settings.apikey.view'] }]
270+
}
271+
},
257272
'system.devops.policy.view': {
258273
granted: {
259274
anyOf: [{ backend: ['system.settings.strategy.view'] }]

frontend/packages/common/src/const/type.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ export type MatchItem = {
8181
export type EntityItem = {
8282
id: string
8383
name: string
84+
isSubscribed: boolean
8485
}
8586

8687
export type DynamicMenuItem = {

frontend/packages/common/src/contexts/BreadcrumbContext.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,19 @@ export const useBreadcrumb = () => {
1818
export const BreadcrumbProvider = ({ children }: unknown) => {
1919
const [breadcrumb, setBreadcrumb] = useState<BreadcrumbItemType[]>([])
2020

21-
return <BreadcrumbContext.Provider value={{ setBreadcrumb, breadcrumb }}>{children}</BreadcrumbContext.Provider>
21+
return (
22+
<BreadcrumbContext.Provider
23+
value={{
24+
setBreadcrumb: (newItems) => {
25+
newItems.slice(0, newItems.length - 1).forEach((item) => {
26+
item.title = <span className="cursor-pointer hover:text-theme">{item.title}</span>
27+
})
28+
setBreadcrumb(newItems)
29+
},
30+
breadcrumb
31+
}}
32+
>
33+
{children}
34+
</BreadcrumbContext.Provider>
35+
)
2236
}

frontend/packages/common/src/contexts/GlobalStateContext.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,31 @@ const mockData = [
9999
icon: 'ic:baseline-bar-chart',
100100
children: [
101101
{
102-
name: '运行视图',
103-
key: 'analytics',
104-
path: '/analytics',
105-
icon: 'ic:baseline-bar-chart',
102+
name: '总览',
103+
key: 'analyticsTotal',
104+
path: '/analytics/total',
105+
icon: 'material-symbols:bar-chart',
106+
access: 'system.analysis.run_view.view'
107+
},
108+
{
109+
name: '服务',
110+
key: 'analyticsSubscriber',
111+
path: '/analytics/subscriber/list',
112+
icon: 'ic:baseline-blinds-closed',
113+
access: 'system.analysis.run_view.view'
114+
},
115+
{
116+
name: '消费者',
117+
key: 'analyticsProvider',
118+
path: '/analytics/provider/list',
119+
icon: 'ic:baseline-apps',
120+
access: 'system.analysis.run_view.view'
121+
},
122+
{
123+
name: 'API',
124+
key: 'analyticsApi',
125+
path: '/analytics/api/list',
126+
icon: 'gravity-ui:plug-connection',
106127
access: 'system.analysis.run_view.view'
107128
}
108129
],
@@ -201,14 +222,14 @@ const mockData = [
201222
key: 'mcpService',
202223
path: '/mcpService',
203224
icon: 'ph:network-x',
204-
access: ''
225+
access: 'system.settings.mcp.view'
205226
},
206227
{
207228
name: 'API Key',
208229
key: 'mcpKey',
209230
path: '/mcpKey',
210231
icon: 'material-symbols:key',
211-
access: ''
232+
access: 'system.settings.apikey.view'
212233
},
213234
{
214235
name: '数据源',

frontend/packages/common/src/locales/keyHashMap.json

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"添加(0)": "Ka7aaaeb",
1717
"请输入Key": "Kaff78ecf",
1818
"请输入Value": "K65d46535",
19-
"返回": "Kc14b2ea3",
2019
"ID": "K11d3633a",
2120
"名称": "Kbff43de3",
2221
"Driver": "K16ca79ef",
@@ -114,6 +113,7 @@
114113
"打开 OpenAPI YAML 编辑器": "Kdac8ce7e",
115114
"无需审核:允许任何消费者调用该服务": "K1fc2cc28",
116115
"人工审核:仅允许通过人工审核的消费者调用该服务": "K8dabb98e",
116+
"开启:AI Agent 等产品能够通过 MCP 方式调用服务": "Ke959f135",
117117
"永久": "Kbfe02d7f",
118118
"否": "K1e9c479e",
119119
"是": "Kaddfcb6b",
@@ -345,10 +345,11 @@
345345
"重置": "K50d471b2",
346346
"查询": "Kee8ae330",
347347
"请输入 APIURL 搜索": "Kf8187c33",
348+
"服务": "Kb58e0c3f",
349+
"说明文档": "K6cd677b",
348350
"最近一次更新者": "K617f34f1",
349351
"最近一次更新时间": "K6ebca204",
350352
"保存": "Kabfe9512",
351-
"服务": "Kb58e0c3f",
352353
"API 路由": "K51d1eb5d",
353354
"API 文档": "Ka2b6d281",
354355
"使用说明": "Kdefa9caa",
@@ -365,6 +366,9 @@
365366
"手动添加": "K18307d56",
366367
"订阅申请": "K705fe9f5",
367368
"订阅方": "K3a67ea90",
369+
"API": "K3ba29a85",
370+
"编辑 API": "Ke93388fd",
371+
"添加 API": "K84aabfd4",
368372
"AI 路由设置": "Kefa2a4cf",
369373
"路由名称": "K66060758",
370374
"请求路径": "K5582ac8",
@@ -414,17 +418,16 @@
414418
"启用": "K52c8a730",
415419
"Ollama 地址": "K6b99dce8",
416420
"输入例如:https://www.apipark.com": "K8d4f5b44",
417-
"自定义": "K8929cbb1",
421+
"自定义(空模板)": "K24f6a5b4",
418422
"模型名称": "K1fd51aaa",
419423
"访问配置": "Kd6285399",
420-
"模型参数模板": "K7eb03edd",
421424
"模型参数": "K49b434e9",
425+
"载入预置模板": "Kea608112",
422426
"供应商名称": "K16ef56b1",
423427
"注意:": "K484de451",
424428
"仅支持使用 OpenAI 输入输出格式和认证方法(APIKey)的供应商。如果不满足此条件,创建后自定义供应商将不可用。": "Kbd80dde0",
425429
"从 (0) 获取 API KEY": "Kb3e34847",
426430
"该模型为官方模型,不可编辑": "Kcb6a1c57",
427-
"存在使用当前模型的接口,需要先解绑后才能编辑": "Kf9300eb4",
428431
"该模型为官方模型,不可删除": "K8af71816",
429432
"存在使用当前模型的接口,需要先解绑后才能删除": "Kb8ad0af5",
430433
"模型值": "K73cb9ff1",
@@ -450,14 +453,15 @@
450453
"Models": "Ke37a353f",
451454
"Keys": "K14bcebd2",
452455
"添加供应商": "Kd87397b0",
456+
"编辑供应商( (0) )": "Kee7de862",
453457
"编辑供应商": "K5bcf8c48",
454458
"(0) 模型": "Kf7a916be",
455459
"待审核": "K35612f29",
456460
"已审核": "K47eaafde",
457461
"发布申请": "K56b4254f",
458462
"API 调用地址": "Kea2f9279",
459463
"API base URL 一般设置为API 网关的外部网络访问地址,或者是API网关绑定的域名。": "K7fc496a1",
460-
"集成地址": "K508d8bf4",
464+
"OpenAPI & MCP 调用地址": "Ka7ca8fde",
461465
"与外部平台集成时,获取 API 市场中文档信息的域名": "K67f4e9bb",
462466
"常规设置": "K8ab0fc95",
463467
"API 请求设置": "Kb66fec9d",
@@ -469,6 +473,7 @@
469473
"分类名称": "Ke595a20a",
470474
"父分类 ID": "K9679728f",
471475
"子分类名称": "K9b2d08fd",
476+
"暂无权限": "Kce2fcdbf",
472477
"添加 Rest 服务": "K2c93168c",
473478
"导入OpenAPI文档,将现有系统的API发布到APIPark。": "K39a8d392",
474479
"添加在线 AI API": "K68932d54",
@@ -551,6 +556,13 @@
551556
"Version (0)-(1)": "K480045ce",
552557
"日志配置": "Kadee8e49",
553558
"提供详尽的 API 调用日志,帮助企业监控、分析和审计 API 的运行状况。": "K2724314b",
559+
"MCP 配置": "K6e9c928f",
560+
"Open API 文档": "Kb6d0eb39",
561+
"AI 代理集成": "Ke6908f16",
562+
"新增 API Key": "Kb0e0aeda",
563+
"API 密钥可用于调用系统级 Open API 和 MCP。": "K9d81999c",
564+
"MCP 服务": "Kf106bc62",
565+
"MCP Service 充当 AI 模型与 API 之间的桥梁,允许智能助手(如 Claude)动态发现和调用 Gateway 上的 API,无需繁琐的手动配置或自定义集成。": "K7c2bfeff",
554566
"部门名称": "K33c76dbc",
555567
"父部门 ID": "K84829ca9",
556568
"子部门名称": "K4d7fc74b",
@@ -615,6 +627,8 @@
615627
"处理日志": "Ke429194e",
616628
"脱敏前": "K8c34c02f",
617629
"脱敏后": "K8e3d388d",
630+
"编辑服务策略": "Kf06f6737",
631+
"添加服务策略": "K205971e1",
618632
"编辑策略": "Kc82b8374",
619633
"策略类型": "K4b34a5e5",
620634
"匹配条件": "K57f0fee8",
@@ -641,6 +655,7 @@
641655
"支持对系统全局进行统一的策略配置,从而简化管理并确保一致性。全局策略的优先级比服务策略略低。": "Kc975cd5a",
642656
"资源配置": "K8e7a0f80",
643657
"角色": "Kf644225f",
658+
"角色配置": "Kc9f2249c",
644659
"设置角色的权限范围。": "K95c3fd8b",
645660
"系统级别角色": "K138facd3",
646661
"添加角色": "K6eac768d",
@@ -662,9 +677,13 @@
662677
"停止": "K24540de",
663678
"继续等待": "Kd85b3f64",
664679
"只允许上传PNG、JPG或SVG格式的图片": "Ka9c08390",
680+
"关闭 MCP": "K30595880",
681+
"关闭后将无法通过MCP方式调用服务": "Kc081047c",
682+
"了解": "Ka73a5801",
665683
"服务名称": "K413b9869",
666684
"服务类型": "K9919285b",
667685
"REST 服务": "K62840d62",
686+
"MCP": "K373c8ab3",
668687
"默认 AI 供应商": "Kcef64f4d",
669688
"创建 API 时会默认选择该供应商,修改默认供应商不会影响现有 API": "K300c89d4",
670689
"未配置任何 AI 模型供应商,": "Kcab588a9",
@@ -811,6 +830,7 @@
811830
"添加授权": "Kd23d1716",
812831
"到期时间": "Kfa920c0",
813832
"订阅的服务": "Kcce1af60",
833+
"返回": "Kc14b2ea3",
814834
"审核详情": "Kfefa9b58",
815835
"取消订阅": "K3118fdb0",
816836
"请确认是否取消订阅?": "Ked811bb1",
@@ -823,22 +843,21 @@
823843
"创建并管理自己的消费者实体,每个消费者可以订阅多个API服务,确保在调用之前已获得相应权限。你可以为消费者生成 API 密钥等鉴权方式,用于安全地调用 API 服务": "K5c4e2865",
824844
"订阅的服务数量:已通过 (0) 个,申请中 (1) 个": "K3c7b175f",
825845
"输入名称、ID 查找消费者": "K3a6f905d",
826-
"服务市场": "K370a3eb2",
846+
"API 门户": "Kc84dbd1a",
827847
"服务详情": "Kf7ec36d",
828848
"申请服务": "K58ca9485",
829-
"介绍": "K59cdbec3",
830-
"Base URL": "Kc29dabf2",
831-
"申请": "K4aa9ed2c",
832-
"服务信息": "K6c060779",
833-
"接入消费者": "Kba74f26d",
834849
"供应方": "Kb97544cb",
835-
"分类": "Kb32f0afe",
836850
"版本": "K81634069",
837851
"更新时间": "Keefda53d",
838-
"无标签": "K96a2f1c8",
852+
"介绍": "K59cdbec3",
839853
"暂无服务描述": "Ka4b45550",
854+
"申请": "K4aa9ed2c",
855+
"无标签": "K96a2f1c8",
856+
"分类": "Kb32f0afe",
857+
"服务市场": "K370a3eb2",
840858
"API 数量": "K72b0c0b3",
841859
"接入消费者数量": "K70b79760",
860+
"30天内调用次数": "K3d52b756",
842861
"关联标签": "K96059c69",
843862
"更新者": "K8b7c2592",
844863
"添加 Open Api": "K32263abd",

frontend/packages/common/src/locales/scan/en-US.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -913,5 +913,19 @@
913913
"K3ba29a85": "API",
914914
"K3d52b756": "Number of invocations within 30 days",
915915
"Ke959f135": "Enable: AI Agent and other products can invoke services through MCP.",
916-
"Ka73a5801": "I Understand"
916+
"Ka73a5801": "I Understand",
917+
"K6cd677b": "Documentation",
918+
"Kec68fe24": "Edit API Settings",
919+
"Kc9aeee51": "Add API Settings",
920+
"Kf06f6737": "Edit Service Policy",
921+
"K205971e1": "Add Service Policy",
922+
"Kc9f2249c": "Role Configuration",
923+
"Kba68dfc1": "Add API Settings",
924+
"Kc84dbd1a": "API Portal",
925+
"Ke93388fd": "Edit API",
926+
"K84aabfd4": "Add API",
927+
"K71ed51fa": "Please subscribe to the service first",
928+
"K1bec8cbe": "Select API Key",
929+
"K5611e01e": "This consumer is already subscribed",
930+
"Kaf9e8011": "Overview"
917931
}

0 commit comments

Comments
 (0)