From e78f1b804fa09e696f1cee69e83e076c370ab7ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A2=A6=E6=B4=81?= Date: Thu, 21 Nov 2024 18:37:39 +0800 Subject: [PATCH 1/3] fix: Change Dashboard Fields --- .../dashboard/src/component/MonitorApiPage.tsx | 12 ++++++------ .../dashboard/src/component/MonitorAppPage.tsx | 8 ++++---- .../dashboard/src/component/MonitorSubPage.tsx | 10 +++++----- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/frontend/packages/dashboard/src/component/MonitorApiPage.tsx b/frontend/packages/dashboard/src/component/MonitorApiPage.tsx index 89b8465d..67d157b8 100644 --- a/frontend/packages/dashboard/src/component/MonitorApiPage.tsx +++ b/frontend/packages/dashboard/src/component/MonitorApiPage.tsx @@ -28,7 +28,7 @@ export type MonitorApiPageProps = { detailEntityName:string } -export type MonitorApiQueryData = SearchBody & { path?:string, apis?:string[], projects?:string[] } +export type MonitorApiQueryData = SearchBody & { path?:string, apis?:string[], services?:string[] } export default function MonitorApiPage(props:MonitorApiPageProps){ const {fetchTableData,detailDrawerContent,fullScreen,setFullScreen,setDetailId,timeButton,setTimeButton,detailEntityName,setDetailEntityName} = props @@ -51,7 +51,7 @@ export default function MonitorApiPage(props:MonitorApiPageProps){ }, []); const getApiList = (projectIds?:string[])=>{ - return fetchData<{apis:EntityItem[]}>('simple/project/apis',{method:'POST',eoBody:({projects:projectIds || queryData?.projects})}).then((resp) => { + return fetchData<{apis:EntityItem[]}>('simple/service/apis',{method:'POST',eoBody:({services:projectIds || queryData?.services})}).then((resp) => { const {code,data,msg} = resp if(code === STATUS_CODE.SUCCESS){ setApiOptionList(data.apis?.map((x:EntityItem)=>({label:x.name, value:x.id}))) @@ -65,10 +65,10 @@ export default function MonitorApiPage(props:MonitorApiPageProps){ } const getProjectList = ()=>{ - return fetchData<{projects:EntityItem[]}>('simple/projects',{method:'GET'}).then((resp) => { + return fetchData<{services:EntityItem[]}>('simple/services',{method:'GET'}).then((resp) => { const {code,data,msg} = resp if(code === STATUS_CODE.SUCCESS){ - setProjectOptionList(data.projects?.map((x:EntityItem)=>({label:x.name, value:x.id}))) + setProjectOptionList(data.services?.map((x:EntityItem)=>({label:x.name, value:x.id}))) }else{ message.error(msg || $t(RESPONSE_TIPS.dataError)) return setProjectOptionList([]) @@ -164,13 +164,13 @@ export default function MonitorApiPage(props:MonitorApiPageProps){ - - {filterType === 'remote' && } + {filterType === 'remote' && } {filterType === 'pattern' && form.getFieldValue('name') !== 'ip' && ( = ({ @@ -25,13 +27,13 @@ const FilterTable: React.FC = ({ const formRef = useRef(null); const [formCanSubmit,setFormCanSubmit] = useState(false) const [selectedOptionNameSet, setSelectedOptionNameSet] = useState>(new Set()); + const {serviceId} = useParams() const openDrawer = (type: string, data?: FilterFormField) => { switch (type) { case 'addFilter': setFilterForm(undefined) break; case 'editFilter': - console.log(data) setFilterForm(data) } setIsModalVisible(true); @@ -51,24 +53,24 @@ const FilterTable: React.FC = ({ formPromise?.then?.((res)=>{ const newFilterForm = { name:res.name, - value:res.value instanceof Array ? res.value : [res.value], + values:res.values instanceof Array ? res.values : [res.values], label:res.label, title:res.title } + console.log(res, newFilterForm, value) onChange?.([newFilterForm, ...(value?.filter(x=>!filterForm?.name|| x.name!==filterForm.name) || [])]) - setSelectedOptionNameSet(prev=>{filterForm?.name &&prev.delete(filterForm?.name); prev.add(res.name); return prev}) closeDrawer() }) }; - const handleDeleteFilter = (item: FilterFormField) => { - setSelectedOptionNameSet(prev=>{prev.delete(item?.name); return prev}) - const newFilterShowList = value.filter((filter) => filter !== item); - onChange?.(newFilterShowList); - }; + const handleDeleteFilter = useCallback((item: FilterFormField) => { + console.log(item, value, isModalVisible); + const newFilterShowList = value?.filter((filter) => filter._eoKey !== item._eoKey) || []; + onChange?.(newFilterShowList); + }, [value, onChange]); const getFilterOptions = ()=>{ - fetchData>('strategy/filter-options',{method:'GET'}).then(response=>{ + fetchData>(`strategy/${serviceId === undefined ? 'global' : 'service'}/filter-options`,{method:'GET'}).then(response=>{ const {code,data,msg} = response if(code === STATUS_CODE.SUCCESS){ setFilterOptions(data.options) @@ -99,12 +101,16 @@ const FilterTable: React.FC = ({ {handleDeleteFilter(record)}} btnTitle={$t("删除")}/>) } - ],[state.language]) + ],[state.language,handleDeleteFilter]) useEffect(()=>{ getFilterOptions() },[state.language]) + useEffect(()=>{ + setSelectedOptionNameSet(new Set(value?.map(x=>x.name) || [])) + console.log('valuechange',value) + },[value]) return (
{ @@ -116,7 +122,7 @@ const FilterTable: React.FC = ({ className={`mt-btnybase border-solid border-[1px] border-BORDER border-b-0 rounded ${disabled ? '' : 'mt-btnbase'}`} pagination={false} size='small' - columns={columns} dataSource={value} rowKey='id' /> } + columns={columns} dataSource={value} rowKey='_eoKey' /> }
= ({ selectedOptionNameSet={selectedOptionNameSet} disabled={disabled} setFormCanSubmit={setFormCanSubmit} + serviceId={serviceId} />
diff --git a/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx b/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx new file mode 100644 index 00000000..8ae89112 --- /dev/null +++ b/frontend/packages/core/src/pages/policy/ServicePolicyLayout.tsx @@ -0,0 +1,15 @@ +import { useEffect } from "react"; +import { Outlet, useLocation, useNavigate } from "react-router-dom"; + +export default function ServicePolicyLayout(){ + const location = useLocation() + const pathName = location.pathname + const navigator = useNavigate() + useEffect(()=>{ + const tmpPath = pathName.split('/') + if(tmpPath[tmpPath.length -1 ] === 'servicepolicy'){ + navigator('datamasking/list') + } + },[pathName]) + return () +} \ No newline at end of file diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx index 23dc41b0..2acd899b 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx @@ -1,10 +1,10 @@ import { ActionType } from "@ant-design/pro-components"; -import { useMemo, useRef, useState } from "react"; -import { Button, message, Switch } from 'antd' +import { useEffect, useMemo, useRef, useState } from "react"; +import { App, Button, message, Switch } from 'antd' import PageList, { PageProColumns } from "@common/components/aoplatform/PageList"; import { $t } from "@common/locales"; import { useGlobalContext } from "@common/contexts/GlobalStateContext"; -import { BasicResponse, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const.tsx"; +import { BasicResponse, DELETE_TIPS, RESPONSE_TIPS, STATUS_CODE } from "@common/const/const.tsx"; import { useFetch } from "@common/hooks/http"; import WithPermission from "@common/components/aoplatform/WithPermission.tsx"; import TableBtnWithPermission from "@common/components/aoplatform/TableBtnWithPermission"; @@ -14,6 +14,7 @@ import { PolicyPublishInfoType, PolicyPublishModalHandle, RouterParams } from "@ import { DrawerWithFooter } from "@common/components/aoplatform/DrawerWithFooter"; import { DataMaskStrategyItem } from "@common/const/policy/type"; import {PolicyPublishModalContent} from '@common/components/aoplatform/PolicyPublishModalContent' +import { checkAccess } from "@common/utils/permission"; const DataMasking = (props: any) => { @@ -24,12 +25,15 @@ const DataMasking = (props: any) => { rowOperation = [] } = props; const { serviceId, teamId } = useParams() - const { state } = useGlobalContext() + const { state,accessData } = useGlobalContext() const navigator = useNavigate() const [drawerVisible, setDrawerVisible] = useState(false) const [drawerData, setDrawerData] = useState() const [isOkToPublish, setIsOkToPublish] = useState(false) const drawerRef = useRef(null) + const { modal } = App.useApp() + + useEffect(()=>{console.log(props, publishBtn)},[publishBtn]) /** * 列表ref */ @@ -52,7 +56,7 @@ const DataMasking = (props: any) => { const res = DATA_MASSKING_TABLE_COLUMNS.map(x => { // 启动列渲染 if (x.dataIndex === 'isStop') { - x.render = (text: any, record: any) => { changeOpenApiStatus(e, record) }} /> + x.render = (text: any, record: any) => { changeOpenApiStatus(e, record) }} /> } // 处理数列渲染 if (x.dataIndex === 'treatmentNumber') { @@ -77,11 +81,11 @@ const DataMasking = (props: any) => { fixed: 'right', valueType: 'option', render: (_: React.ReactNode, entity: any) => [ - ...(rowOperation.length && rowOperation.find((item: string) => item === 'edit') ? [ { openEditModal(entity) }} btnTitle="编辑" />] : []), - // ...(rowOperation.length && rowOperation.find((item: string) => item === 'logs') ? [ { openLogsModal(entity) }} btnTitle="详情" />] : []), + ...(rowOperation.length && rowOperation.find((item: string) => item === 'edit') ? [ { openEditModal(entity) }} btnTitle="编辑" />] : []), + // ...(rowOperation.length && rowOperation.find((item: string) => item === 'logs') ? [ { openLogsModal(entity) }} btnTitle="详情" />] : []), ...(rowOperation.length && rowOperation.find((item: string) => item === 'delete') ? [ - entity.isDeleted ? { restorePolicy(entity) }} btnTitle="恢复" /> : - { deletePolicy(entity) }} btnTitle="删除" /> + entity.isDelete ? { restorePolicy(entity) }} btnTitle="恢复" /> : + { openModal('delete',entity) }} btnTitle="删除" /> ] : []), ], } @@ -100,10 +104,11 @@ const DataMasking = (props: any) => { * @param entity 行数据 */ const changeOpenApiStatus = (enabled: boolean, entity: any) => { + console.log(enabled) fetchData>( - `strategy/${serviceId === undefined? 'global':'service'}/data-masking/${enabled ? 'disable' : 'enable'}`, + `strategy/${serviceId === undefined? 'global':'service'}/data-masking/${enabled ? 'enable' :'disable' }`, { - method: 'PUT', + method: 'PATCH', eoParams: { service:serviceId, team:teamId, @@ -159,14 +164,14 @@ const DataMasking = (props: any) => { keyword: searchWord, service:serviceId, team:teamId,}, - eoTransformKeys: ['is_stop', 'is_deleted', 'update_time','publish_status','processed_total'] + eoTransformKeys: ['is_stop', 'is_delete', 'update_time','publish_status','processed_total'] } ).then(response => { const { code,data, msg } = response if (code === STATUS_CODE.SUCCESS) { // 保存数据 return { - data:data.strategies, + data:data.list, total:data.total, success: true } @@ -186,7 +191,7 @@ const DataMasking = (props: any) => { * @param type */ const addPolicy = () => { - navigator('/globalpolicy/datamasking/create') + navigator('../create') } /** @@ -213,7 +218,7 @@ const DataMasking = (props: any) => { * 编辑 */ const openEditModal = (entity: any) => { - navigator(`/globalpolicy/datamasking/${entity.id}`) + navigator(`../${entity.id}`) } /** @@ -224,12 +229,47 @@ const DataMasking = (props: any) => { console.log('日志', entity); } + + + const openModal =async (type:'delete',entity?:DataMaskStrategyItem)=>{ + if(entity?.publishStatus === 'online'){ + return deletePolicy(entity!).then((res)=>{if(res === true) manualReloadTable()}) + } + let title:string = '' + let content:string|React.ReactNode = '' + switch (type){ + case 'delete': + title=$t('删除') + content=$t(DELETE_TIPS.default) + break; + } + + modal.confirm({ + title, + content, + onOk:()=>{ + switch (type){ + case 'delete': + return deletePolicy(entity!).then((res)=>{if(res === true) manualReloadTable()}) + } + }, + width:600, + okText:$t('确认'), + okButtonProps:{ + disabled : !checkAccess( `${ serviceId === undefined ? 'system.devops':'team.service'}.policy.edit`, accessData) + }, + cancelText:$t('取消'), + closable:true, + icon:<>, + }) +} + /** * 删除 * @param entity */ const deletePolicy = (entity: DataMaskStrategyItem) => { - fetchData>( + return fetchData>( `strategy/${serviceId === undefined? 'global':'service'}/data-masking`, { method: 'DELETE', @@ -242,11 +282,12 @@ const DataMasking = (props: any) => { const { code, msg } = response if (code === STATUS_CODE.SUCCESS) { message.success(msg || $t(RESPONSE_TIPS.success)) - manualReloadTable() + 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)) } /** @@ -295,11 +336,11 @@ const DataMasking = (props: any) => { sort:Record, filter:Record) => getPolicyList(params,sort, filter)} addNewBtnTitle={$t("添加策略")} - addNewBtnAccess="system.organization.member.edit" + addNewBtnAccess={`${ serviceId === undefined ? 'system.devops':'team.service'}.policy.edit`} onAddNewBtnClick={() => { addPolicy() }} searchPlaceholder={$t("输入名称、筛选条件查找")} afterNewBtn={ - publishBtn && [ + publishBtn && [ ] } @@ -316,7 +357,7 @@ const DataMasking = (props: any) => { okBtnTitle={$t('发布')} open={drawerVisible} submitDisabled={!isOkToPublish} - submitAccess={`team.service.release.add`} + submitAccess={`${ serviceId === undefined ? 'system.devops':'team.service'}.policy.publish`} onSubmit={onSubmit} > [] = [ }, { title: ('更新者'), - dataIndex: 'operator', + dataIndex: ['updater','name'], width: 140, ellipsis: true }, diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx index fdeb9416..e4c7bba7 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx @@ -11,8 +11,9 @@ import { forwardRef, useEffect, useImperativeHandle, useMemo, useState } from "r import { useParams, useNavigate } from "react-router-dom" import DataMaskRuleTable from "./DataMaskingRuleTable" import FilterTable from "../FilterTable" -import { DataMaskingConfigHandle ,DataMaskingConfigFieldType} from "@common/const/policy/type" +import { DataMaskingConfigHandle ,DataMaskingConfigFieldType, PolicyMatchType} from "@common/const/policy/type" import {PolicyOptions} from '@common/const/policy/consts' +import {v4 as uuidv4} from 'uuid' const DataMaskingConfig = forwardRef((_,ref) => { const { message,modal } = App.useApp() @@ -37,7 +38,8 @@ const DataMaskingConfig = forwardRef((_,ref) => { setTimeout(()=>{ form.setFieldsValue({ ...data.strategy, - type:'data-masking' + type:'data-masking', + filters:data.strategy.filters.map((x)=>{x._eoKey = uuidv4(); return x}) }) },0) }else{ @@ -48,16 +50,22 @@ const DataMaskingConfig = forwardRef((_,ref) => { const onFinish:()=>Promise = () => { return form.validateFields().then((value)=>{ + if(value.filters){ + value.filters = value.filters.map((x:PolicyMatchType)=>({ + ...x, + values:x.name === 'ip' ? x.values?.[0].split('\n'): (x.values.indexOf('ALL')!== -1 ? ['ALL']:x.values)})) + } return fetchData>( `strategy/${serviceId === undefined? 'global':'service'}/data-masking`, { method:policyId === undefined? 'POST' : 'PUT', - eoParams: {service:serviceId,team:teamId, policyId:policyId}, + eoParams: {service:serviceId,team:teamId, strategy:policyId}, eoBody:({...value}) }).then(response=>{ const {code,data,msg} = response if(code === STATUS_CODE.SUCCESS){ message.success(msg || $t(RESPONSE_TIPS.success)) + navigator(serviceId? '':'/globalpolicy/datamasking/list') return Promise.resolve(true) }else{ message.error(msg || $t(RESPONSE_TIPS.error)) @@ -84,14 +92,13 @@ const DataMaskingConfig = forwardRef((_,ref) => { return ( - } spinning={loading} wrapperClassName=' pb-PAGE_INSIDE_B pr-PAGE_INSIDE_X'> - - +
((_,ref) => { - label={$t("优先级")} name={'priority'} @@ -145,19 +151,19 @@ const DataMaskingConfig = forwardRef((_,ref) => { label={$t("数据脱敏规则")} - name="rules" + name={["config","rules"]} rules={[{required: true}]} > - + - diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingRuleForm.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingRuleForm.tsx index 4ad2707a..baed9c5b 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingRuleForm.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingRuleForm.tsx @@ -95,8 +95,8 @@ const DataMaskRuleForm: React.FC = ({ editData, ruleList, case 'shuffling': break; default: - submitData.mask.begin = formData.mask.begin; - submitData.mask.length = formData.mask.length; + submitData.mask.begin = Number(formData.mask.begin) || 0; + submitData.mask.length = Number(formData.mask.length) || 0; break; } return submitData; diff --git a/frontend/packages/core/src/pages/policy/globalPolicy.tsx b/frontend/packages/core/src/pages/policy/globalPolicy.tsx index 0193dc44..01cd4ce7 100644 --- a/frontend/packages/core/src/pages/policy/globalPolicy.tsx +++ b/frontend/packages/core/src/pages/policy/globalPolicy.tsx @@ -4,10 +4,12 @@ import PolicyTabContainer from "./policyTabContainer.tsx"; import DataMasking from "./dataMasking/DataMasking.tsx"; import { useGlobalContext } from "@common/contexts/GlobalStateContext.tsx"; import { useMemo } from "react"; - +import { useParams } from "react-router-dom"; +import { RouterParams } from "@common/const/type.ts"; const PartitionInsideGlobalPolicy = () => { const {state} = useGlobalContext() + const {serviceId} = useParams() /** * tab列表 */ @@ -20,7 +22,6 @@ const PartitionInsideGlobalPolicy = () => { ],[state.language]) return ( - <> { > - ) } diff --git a/frontend/packages/core/src/pages/policy/servicePolicy.tsx b/frontend/packages/core/src/pages/policy/servicePolicy.tsx index 1fbfacea..acd56dd2 100644 --- a/frontend/packages/core/src/pages/policy/servicePolicy.tsx +++ b/frontend/packages/core/src/pages/policy/servicePolicy.tsx @@ -1,6 +1,6 @@ import { $t } from "@common/locales/index.ts"; import DataMasking from "./dataMasking/DataMasking"; -import PolicyTabContainer from "./globalPolicy.tsx"; +import PolicyTabContainer from "./policyTabContainer.tsx"; const servicePolicy = () => { /** @@ -10,9 +10,11 @@ const servicePolicy = () => { { key: 'dataMasking', label: $t('数据脱敏'), - children:
+ children:
} ] + + console.log('publish',false) return ( <> diff --git a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx index 9dd929d9..89ac2c36 100644 --- a/frontend/packages/core/src/pages/system/SystemInsidePage.tsx +++ b/frontend/packages/core/src/pages/system/SystemInsidePage.tsx @@ -63,7 +63,7 @@ const SystemInsidePage: FC = () => { getItem({$t('API 文档')}, 'api', undefined, undefined, undefined, 'team.service.api_doc.view'), getItem({$t('上游')}, 'upstream', undefined, undefined, undefined, 'team.service.upstream.view'), getItem({$t('使用说明')}, 'document', undefined, undefined, undefined, 'team.service.service_intro.view'), - getItem({$t('服务策略')}, 'servicePolicy', undefined, undefined, undefined, 'team.service.service_intro.view'), + getItem({$t('服务策略')}, 'servicepolicy', undefined, undefined, undefined, 'team.service.policy.view'), getItem({$t('发布')}, 'publish', undefined, undefined, undefined, 'team.service.release.view'), ], 'group'), @@ -111,6 +111,8 @@ const SystemInsidePage: FC = () => { setShowMenu(!routeId && !currentUrl.includes('route/create')) if (apiId !== undefined) { setActiveMenu('api') + } else if(currentUrl.includes('servicepolicy')){ + setActiveMenu('servicepolicy') } else if (serviceId !== currentUrl.split('/')[currentUrl.split('/').length - 1]) { setActiveMenu(currentUrl.split('/')[currentUrl.split('/').length - 1]) } else { diff --git a/frontend/packages/dashboard/src/const/const.tsx b/frontend/packages/dashboard/src/const/const.tsx index ee718d62..c62a6f62 100644 --- a/frontend/packages/dashboard/src/const/const.tsx +++ b/frontend/packages/dashboard/src/const/const.tsx @@ -169,7 +169,7 @@ export const DASHBOARD_BASE_COLUMNS_CONFIG:(PageProColumns&{eoTitle { title:('所属服务'), eoTitle:('所属服务'), - dataIndex: ['project','name'], + dataIndex: ['service','name'], ellipsis:true, width: 80 }, From 2a84bdcf9f1b98fdb190468a08f54b77d53da435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A2=A6=E6=B4=81?= Date: Wed, 27 Nov 2024 19:20:47 +0800 Subject: [PATCH 3/3] fix: data-masking and integration bugs --- .../aoplatform/PolicyPublishModalContent.tsx | 1 - .../PublishApprovalModalContent.tsx | 25 ++++++++++++++++++- .../common/src/const/approval/const.tsx | 20 +++++++++++++++ .../common/src/const/approval/type.tsx | 1 + .../src/contexts/GlobalStateContext.tsx | 2 -- .../common/src/locales/keyHashMap.json | 5 ++-- .../common/src/locales/scan/en-US.json | 5 +++- .../common/src/locales/scan/ja-JP.json | 5 +++- .../src/locales/scan/newJson/en-US.json | 5 +++- .../src/locales/scan/newJson/ja-JP.json | 5 +++- .../src/locales/scan/newJson/zh-CN.json | 2 ++ .../src/locales/scan/newJson/zh-TW.json | 5 +++- .../src/locales/scan/oldJson/en-US.json | 1 + .../src/locales/scan/oldJson/ja-JP.json | 1 + .../src/locales/scan/oldJson/zh-CN.json | 1 + .../src/locales/scan/oldJson/zh-TW.json | 1 + .../common/src/locales/scan/zh-TW.json | 5 +++- frontend/packages/core/src/pages/Login.tsx | 1 - frontend/packages/core/src/pages/Root.tsx | 1 - .../pages/aiService/AiServiceInsidePage.tsx | 5 +++- .../src/pages/common/ApiRequestSetting.tsx | 13 ++++++++-- .../core/src/pages/policy/FilterForm.tsx | 5 ---- .../core/src/pages/policy/FilterTable.tsx | 3 --- .../pages/policy/dataMasking/DataMasking.tsx | 2 -- .../policy/dataMasking/DataMaskingConfig.tsx | 2 +- .../core/src/pages/policy/servicePolicy.tsx | 1 - .../src/component/MonitorDetailPage.tsx | 2 +- .../market/src/pages/serviceHub/integrate.tsx | 4 +-- 28 files changed, 97 insertions(+), 32 deletions(-) diff --git a/frontend/packages/common/src/components/aoplatform/PolicyPublishModalContent.tsx b/frontend/packages/common/src/components/aoplatform/PolicyPublishModalContent.tsx index c8df5598..e058d11f 100644 --- a/frontend/packages/common/src/components/aoplatform/PolicyPublishModalContent.tsx +++ b/frontend/packages/common/src/components/aoplatform/PolicyPublishModalContent.tsx @@ -47,7 +47,6 @@ export const PolicyPublishModalContent = forwardRef diff --git a/frontend/packages/common/src/components/aoplatform/PublishApprovalModalContent.tsx b/frontend/packages/common/src/components/aoplatform/PublishApprovalModalContent.tsx index 97baa331..8e7588d7 100644 --- a/frontend/packages/common/src/components/aoplatform/PublishApprovalModalContent.tsx +++ b/frontend/packages/common/src/components/aoplatform/PublishApprovalModalContent.tsx @@ -6,7 +6,7 @@ import {BasicResponse, FORM_ERROR_TIPS, PLACEHOLDER, RESPONSE_TIPS, STATUS_CODE, import WithPermission from "@common/components/aoplatform/WithPermission.tsx"; import { SYSTEM_PUBLISH_ONLINE_COLUMNS } from "@core/const/system/const.tsx"; import { $t } from "@common/locales"; -import { ApprovalRouteColumns, ApprovalStatusColorClass, ApprovalUpstreamColumns, ChangeTypeEnum } from "@common/const/approval/const"; +import { ApprovalPolicyColumns, ApprovalRouteColumns, ApprovalStatusColorClass, ApprovalUpstreamColumns, ChangeTypeEnum } from "@common/const/approval/const"; import { useGlobalContext } from "@common/contexts/GlobalStateContext"; import { LoadingOutlined } from "@ant-design/icons"; import { SystemInsidePublishOnlineItems } from "@core/pages/system/publish/SystemInsidePublishOnline"; @@ -140,6 +140,19 @@ export const PublishApprovalModalContent = forwardRefApprovalPolicyColumns.map((x)=>{ + return { + ...x, + title: typeof x.title === 'string' ? $t(x.title) : x.title, + ...(x.dataIndex === 'status' ? { + render:(_,entity)=>( + entity.status === 0 ? '正常' : '无效') + }:{}) + } + }),[state.language]) + + return ( <> {!insidePage && <> @@ -219,6 +232,16 @@ export const PublishApprovalModalContent = forwardRef } + {$t('策略列表')}: + + {/* } clusterPublishStatus?:SystemInsidePublishOnlineItems[], error:string diff --git a/frontend/packages/common/src/contexts/GlobalStateContext.tsx b/frontend/packages/common/src/contexts/GlobalStateContext.tsx index f370b316..713c9ffd 100644 --- a/frontend/packages/common/src/contexts/GlobalStateContext.tsx +++ b/frontend/packages/common/src/contexts/GlobalStateContext.tsx @@ -232,13 +232,11 @@ export const GlobalContext = createContext<{ const globalReducer = (state: GlobalState, action: GlobalAction): GlobalState => { switch (action.type) { case 'LOGIN': - console.log('login') return { ...state, isAuthenticated: true, }; case 'LOGOUT': - console.log('login') return { ...state, isAuthenticated: false, diff --git a/frontend/packages/common/src/locales/keyHashMap.json b/frontend/packages/common/src/locales/keyHashMap.json index 6fd4a111..013310fb 100644 --- a/frontend/packages/common/src/locales/keyHashMap.json +++ b/frontend/packages/common/src/locales/keyHashMap.json @@ -333,6 +333,7 @@ "API 路由": "K51d1eb5d", "API 文档": "Ka2b6d281", "使用说明": "Kdefa9caa", + "服务策略": "K52f72551", "发布": "K36856e71", "订阅管理": "K6382bbfd", "订阅审核": "K31af5b99", @@ -384,6 +385,8 @@ "发布申请": "K56b4254f", "API 调用地址": "Kea2f9279", "API base URL 一般设置为API 网关的外部网络访问地址,或者是API网关绑定的域名。": "K7fc496a1", + "集成地址": "K508d8bf4", + "与外部平台集成时,获取 API 市场中文档信息的域名": "K67f4e9bb", "常规设置": "K8ab0fc95", "API 请求设置": "Kb66fec9d", "服务分类": "K4de0af74", @@ -463,7 +466,6 @@ "添加部门": "K26c698bb", "添加子部门": "Kb9cf2a7d", "重命名": "Kc83551f5", - "该数据删除后将无法找回,请确认是否删除?": "K5cfdd950", "成员": "K74aef1ad", "设置成员和对应的角色,成员只能够看到权限范围内的功能和数据。": "K3f1077c9", "搜索部门": "Kdce62a6", @@ -560,7 +562,6 @@ "删除服务": "Kde6bae17", "删除操作不可恢复,请谨慎操作!": "K885ea699", "上游": "Kda8d5ea1", - "服务策略": "K52f72551", "服务提供了高性能 API 网关,并且可以无缝接入多种大型 AI 模型,并将这些 AI 能力打包成 API 进行调用,从而大幅简化了 AI 模型的使用门槛。同时,我们的平台提供了完善的 API 管理功能,支持 API 的创建、监控、访问控制等,保障开发者可以高效、安全地开发和管理 API 服务。": "K12f58863", "添加服务": "K2d6658ed", "输入名称、ID、所属团队、负责人查找服务": "K7b8f623f", diff --git a/frontend/packages/common/src/locales/scan/en-US.json b/frontend/packages/common/src/locales/scan/en-US.json index a693bcda..712a426c 100644 --- a/frontend/packages/common/src/locales/scan/en-US.json +++ b/frontend/packages/common/src/locales/scan/en-US.json @@ -744,5 +744,8 @@ "K8457ea34": "All (0)", "K7ca9a795": "Attribute Name", "Kc4391744": "Attribute Value", - "K678e13fc": "Configure (0)" + "K678e13fc": "Configure (0)", + "K508d8bf4": "Integration Address", + "K67f4e9bb": "The domain name for obtaining API market documentation information when integrating with external platforms" + } diff --git a/frontend/packages/common/src/locales/scan/ja-JP.json b/frontend/packages/common/src/locales/scan/ja-JP.json index 8559a6bb..42b46394 100644 --- a/frontend/packages/common/src/locales/scan/ja-JP.json +++ b/frontend/packages/common/src/locales/scan/ja-JP.json @@ -766,5 +766,8 @@ "K8457ea34": "すべて (0)", "K7ca9a795": "属性名", "Kc4391744": "属性値", - "K678e13fc": "設定 (0)" + "K678e13fc": "設定 (0)", + "K508d8bf4": "統合アドレス", + "K67f4e9bb": "外部プラットフォームと統合する際に、API市場のドキュメント情報を取得するためのドメイン名" + } diff --git a/frontend/packages/common/src/locales/scan/newJson/en-US.json b/frontend/packages/common/src/locales/scan/newJson/en-US.json index 9e26dfee..140d2c42 100644 --- a/frontend/packages/common/src/locales/scan/newJson/en-US.json +++ b/frontend/packages/common/src/locales/scan/newJson/en-US.json @@ -1 +1,4 @@ -{} \ No newline at end of file +{ + "K508d8bf4": "集成地址", + "K67f4e9bb": "与外部平台集成时,获取 API 市场中文档信息的域名" +} \ No newline at end of file diff --git a/frontend/packages/common/src/locales/scan/newJson/ja-JP.json b/frontend/packages/common/src/locales/scan/newJson/ja-JP.json index 9e26dfee..140d2c42 100644 --- a/frontend/packages/common/src/locales/scan/newJson/ja-JP.json +++ b/frontend/packages/common/src/locales/scan/newJson/ja-JP.json @@ -1 +1,4 @@ -{} \ No newline at end of file +{ + "K508d8bf4": "集成地址", + "K67f4e9bb": "与外部平台集成时,获取 API 市场中文档信息的域名" +} \ No newline at end of file diff --git a/frontend/packages/common/src/locales/scan/newJson/zh-CN.json b/frontend/packages/common/src/locales/scan/newJson/zh-CN.json index 878c5a8e..5b99ccce 100644 --- a/frontend/packages/common/src/locales/scan/newJson/zh-CN.json +++ b/frontend/packages/common/src/locales/scan/newJson/zh-CN.json @@ -42,6 +42,8 @@ "K49731763": "请输入IP地址或CIDR范围,每条以换行分割", "K83237c89": "输入的IP或CIDR不符合格式", "K5ae2c87a": "请正确输入路径,如/usr/*或*/usr/*", + "K508d8bf4": "集成地址", + "K67f4e9bb": "与外部平台集成时,获取 API 市场中文档信息的域名", "Kc82b8374": "编辑策略", "K4b34a5e5": "策略类型", "K57f0fee8": "匹配条件", diff --git a/frontend/packages/common/src/locales/scan/newJson/zh-TW.json b/frontend/packages/common/src/locales/scan/newJson/zh-TW.json index 9e26dfee..140d2c42 100644 --- a/frontend/packages/common/src/locales/scan/newJson/zh-TW.json +++ b/frontend/packages/common/src/locales/scan/newJson/zh-TW.json @@ -1 +1,4 @@ -{} \ No newline at end of file +{ + "K508d8bf4": "集成地址", + "K67f4e9bb": "与外部平台集成时,获取 API 市场中文档信息的域名" +} \ No newline at end of file diff --git a/frontend/packages/common/src/locales/scan/oldJson/en-US.json b/frontend/packages/common/src/locales/scan/oldJson/en-US.json index f4755dd7..6599b2f7 100644 --- a/frontend/packages/common/src/locales/scan/oldJson/en-US.json +++ b/frontend/packages/common/src/locales/scan/oldJson/en-US.json @@ -10,6 +10,7 @@ "K1deaa2dd": "User", "K631d646f": "Open API", "K1196b104": "APIPark", + "K5cfdd950": "This data cannot be recovered after deletion. Are you sure you want to delete?", "Kb9052305": "Search Username, Email", "K40a89bd8": "Enter Name, ID to Search Member" } \ No newline at end of file diff --git a/frontend/packages/common/src/locales/scan/oldJson/ja-JP.json b/frontend/packages/common/src/locales/scan/oldJson/ja-JP.json index 56a74a5c..d468aa53 100644 --- a/frontend/packages/common/src/locales/scan/oldJson/ja-JP.json +++ b/frontend/packages/common/src/locales/scan/oldJson/ja-JP.json @@ -16,6 +16,7 @@ "K9bdd8403": "API を安全に呼び出すためには、アプリケーションとトークンを作成する必要があります。", "Kc8239422": "チームにはユーザー、アプリケーション、サービスが含まれ、異なるチームのアプリケーションとサービスのデータは分離されています。企業内の部門/プロジェクトグループ/チームの管理に使用できます。", "Ka0a8840a": "他のアプリケーションのサブスクリプション申請をレビューし、承認後に API リクエストが発行できます。", + "K5cfdd950": "このデータを削除すると、復元できません。削除しますか?", "Kb9052305": "ユーザー名またはメールを検索", "K5ece3bac": "チームとメンバーを設定してから、チーム内でサービスとアプリケーションを作成し、API をサブスクライブできます。メンバーは所属チーム内のサービスとアプリケーションのみを表示できます。", "K1512e983": "アプリケーション呼び出し統計", diff --git a/frontend/packages/common/src/locales/scan/oldJson/zh-CN.json b/frontend/packages/common/src/locales/scan/oldJson/zh-CN.json index 502e8f18..991aad93 100644 --- a/frontend/packages/common/src/locales/scan/oldJson/zh-CN.json +++ b/frontend/packages/common/src/locales/scan/oldJson/zh-CN.json @@ -16,6 +16,7 @@ "K9bdd8403": "为了安全地调用 API,你需要创建一个消费者以及Token。", "Kc8239422": "团队中包含了人员、消费者和服务,不同团队之间的消费者和服务数据是隔离的,可用于管理企业内部不同的部门/项目组/团队。", "Ka0a8840a": "审核其他消费者的订阅申请,审核通过后的才可发起 API 请求。", + "K5cfdd950": "该数据删除后将无法找回,是否删除?", "Kb9052305": "搜索用户名、邮箱", "K5ece3bac": "设置团队和成员,然后你可以在团队内创建服务和消费者、订阅API,成员只能看到所属团队内的服务和消费者。", "K1512e983": "消费者调用统计", diff --git a/frontend/packages/common/src/locales/scan/oldJson/zh-TW.json b/frontend/packages/common/src/locales/scan/oldJson/zh-TW.json index 46e9364a..357d2bae 100644 --- a/frontend/packages/common/src/locales/scan/oldJson/zh-TW.json +++ b/frontend/packages/common/src/locales/scan/oldJson/zh-TW.json @@ -16,6 +16,7 @@ "K9bdd8403": "為了安全地調用 API,你需要創建一個應用以及Token。", "Kc8239422": "團隊中包含了人員、應用程式和服務,不同團隊之間的應用程式和服務數據是隔離的,可用於管理企業內部不同的部門/項目組/團隊。", "Ka0a8840a": "審核其他應用程式的訂閱申請,審核通過後的才可發起 API 請求。", + "K5cfdd950": "該數據刪除後將無法找回,是否刪除?", "Kb9052305": "搜索用戶名、電郵", "K5ece3bac": "設置團隊和成員,然後你可以在團隊內創建服務和應用程式、訂閱API,成員只能看到所屬團隊內的服務和應用程式。", "K1512e983": "應用程式調用統計", diff --git a/frontend/packages/common/src/locales/scan/zh-TW.json b/frontend/packages/common/src/locales/scan/zh-TW.json index 6c5787a9..5e7bd1d7 100644 --- a/frontend/packages/common/src/locales/scan/zh-TW.json +++ b/frontend/packages/common/src/locales/scan/zh-TW.json @@ -766,5 +766,8 @@ "K8457ea34": "所有(0)", "K7ca9a795": "屬性名稱", "Kc4391744": "屬性值", - "K678e13fc": "配置(0)" + "K678e13fc": "配置(0)", + "K508d8bf4": "集成地址", + "K67f4e9bb": "與外部平台集成時,用於獲取 API 市場文檔信息的域名" + } diff --git a/frontend/packages/core/src/pages/Login.tsx b/frontend/packages/core/src/pages/Login.tsx index 83c834ae..0af56a93 100644 --- a/frontend/packages/core/src/pages/Login.tsx +++ b/frontend/packages/core/src/pages/Login.tsx @@ -67,7 +67,6 @@ const Login:FC = ()=> { if (code === STATUS_CODE.SUCCESS) { dispatch({type:'LOGIN'}) - console.log('1') // message.success($t(RESPONSE_TIPS.loginSuccess)); const callbackUrl = new URLSearchParams(window.location.search).get('callbackUrl'); if (callbackUrl && callbackUrl !== 'null') { diff --git a/frontend/packages/core/src/pages/Root.tsx b/frontend/packages/core/src/pages/Root.tsx index 86bcb30b..5abcccd1 100644 --- a/frontend/packages/core/src/pages/Root.tsx +++ b/frontend/packages/core/src/pages/Root.tsx @@ -4,7 +4,6 @@ import { Navigate, useLocation } from "react-router-dom" export default function Root() { const { state } = useGlobalContext() const location = useLocation() - console.log(state?.isAuthenticated ,location?.pathname) return (<> { state?.isAuthenticated && !location?.pathname diff --git a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx index 303ecadc..a99eef7b 100644 --- a/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx +++ b/frontend/packages/core/src/pages/aiService/AiServiceInsidePage.tsx @@ -63,6 +63,7 @@ const AiServiceInsidePage:FC = ()=> { getItem({$t('API 路由')}, 'route',undefined,undefined,undefined,'team.service.router.view'), getItem({$t('API 文档')}, 'api',undefined,undefined,undefined,'team.service.api_doc.view'), getItem({$t('使用说明')}, 'document',undefined,undefined,undefined,'team.service.service_intro.view'), + getItem({$t('服务策略')}, 'servicepolicy', undefined, undefined, undefined, 'team.service.policy.view'), getItem({$t('发布')}, 'publish',undefined,undefined,undefined,'team.service.release.view'), ], 'group'), @@ -111,7 +112,9 @@ const AiServiceInsidePage:FC = ()=> { setShowMenu(!routeId && !currentUrl.includes('route/create')) if(apiId !== undefined){ setActiveMenu('api') - }else if(serviceId !== currentUrl.split('/')[currentUrl.split('/').length - 1]){ + } else if(currentUrl.includes('servicepolicy')){ + setActiveMenu('servicepolicy') + } else if(serviceId !== currentUrl.split('/')[currentUrl.split('/').length - 1]){ setActiveMenu(currentUrl.split('/')[currentUrl.split('/').length - 1]) }else{ setActiveMenu('route') diff --git a/frontend/packages/core/src/pages/common/ApiRequestSetting.tsx b/frontend/packages/core/src/pages/common/ApiRequestSetting.tsx index 9fd9a810..a5be297a 100644 --- a/frontend/packages/core/src/pages/common/ApiRequestSetting.tsx +++ b/frontend/packages/core/src/pages/common/ApiRequestSetting.tsx @@ -10,6 +10,7 @@ type ApiRequestSettingFieldType = { siteLogo:string invokeAddress:string platformName:string + sitePrefix:string } export default function ApiRequestSetting(){ @@ -20,7 +21,7 @@ export default function ApiRequestSetting(){ const onFinish = () => { form.validateFields().then((value)=>{ - return fetchData>('system/general',{method:'POST',eoBody:(value),eoTransformKeys:['invokeAddress','siteName','siteLogo','platformName']}).then(response=>{ + return fetchData>('system/general',{method:'POST',eoBody:(value),eoTransformKeys:['invokeAddress','siteName','siteLogo','platformName','sitePrefix']}).then(response=>{ const {code,msg} = response if(code === STATUS_CODE.SUCCESS){ message.success(msg || $t(RESPONSE_TIPS.success)) @@ -37,7 +38,7 @@ export default function ApiRequestSetting(){ }; const getSystemSetting = ()=>{ - fetchData>('system/general',{method:'GET',eoTransformKeys:['site_name', 'site_logo','invoke_address','platform_name']}).then(response=>{ + fetchData>('system/general',{method:'GET',eoTransformKeys:['site_name', 'site_logo','invoke_address','platform_name','site_prefix']}).then(response=>{ const {code,data,msg} = response if(code === STATUS_CODE.SUCCESS){ form.setFieldsValue(data.general) @@ -74,6 +75,14 @@ export default function ApiRequestSetting(){ + + label={$t("集成地址")} + name="sitePrefix" + rules={[{ required: true,whitespace:true }]} + extra={$t("与外部平台集成时,获取 API 市场中文档信息的域名")} + > + + diff --git a/frontend/packages/core/src/pages/policy/FilterForm.tsx b/frontend/packages/core/src/pages/policy/FilterForm.tsx index d24da418..4b6f881f 100644 --- a/frontend/packages/core/src/pages/policy/FilterForm.tsx +++ b/frontend/packages/core/src/pages/policy/FilterForm.tsx @@ -81,7 +81,6 @@ const RemoteFormItem: React.FC = (props) =>{ type: 'checkbox', onChange: (selectedRowKeys: React.Key[]) => { onChange?.(selectedRowKeys as string[]); - console.log(originRemoteList) onShowValueChange?.(selectedRowKeys.length === remoteCounts? $t('所有(0)',[title]) : originRemoteList.filter(x=>selectedRowKeys?.indexOf(x[option.key]))?.map(x=>x.title).join(' , ')) }, selectedRowKeys: value, @@ -94,17 +93,14 @@ const RemoteFormItem: React.FC = (props) =>{ onClick:()=>{ if(value === undefined){ onChange?.([record[rowKey]]) - console.log(record[rowKey],record) onShowValueChange?.(remoteCounts === 1 ? $t('所有(0)',[option?.title]) : record.name) }else if(value?.indexOf(record[rowKey])!== -1){ const newSelectedKeys = value?.filter(x=>x!==record[rowKey]) onChange?.(newSelectedKeys!) - console.log(newSelectedKeys,newSelectedKeys.length === remoteCounts? $t('所有(0)',[option?.title]) : originRemoteList.filter(x=>newSelectedKeys.indexOf(x[rowKey]) !== -1)?.map(x=>x.name)?.join(' , ')) onShowValueChange?.(newSelectedKeys.length === remoteCounts? $t('所有(0)',[option?.title]) : originRemoteList.filter(x=>newSelectedKeys.indexOf(x[rowKey]) !== -1)?.map(x=>x.name)?.join(' , ')) }else{ const newSelectedKeys = [...value,record[rowKey]] onChange?.(newSelectedKeys) - console.log(newSelectedKeys,originRemoteList,rowKey,remoteCounts,newSelectedKeys.length === remoteCounts? $t('所有(0)',[option?.title]) : originRemoteList.filter(x=>newSelectedKeys.indexOf(x[rowKey]) !== -1)?.map(x=>x.name)?.join(' , ')) onShowValueChange?.(newSelectedKeys.length === remoteCounts? $t('所有(0)',[option?.title]) : originRemoteList.filter(x=>newSelectedKeys.indexOf(x[rowKey]) !== -1)?.map(x=>x.name)?.join(' , ')) } } @@ -172,7 +168,6 @@ const FilterForm = forwardRef(({ }, save:()=>form.validateFields().then((res)=>{ const selectedOption = filterOptions.filter(x=>x.name === res.name)[0] - console.log('??',res,selectedOption,filterType,label) return Promise.resolve({ ...res, label:filterType === 'pattern' ? res.values : label, diff --git a/frontend/packages/core/src/pages/policy/FilterTable.tsx b/frontend/packages/core/src/pages/policy/FilterTable.tsx index 3f92fab1..80e5c2d7 100644 --- a/frontend/packages/core/src/pages/policy/FilterTable.tsx +++ b/frontend/packages/core/src/pages/policy/FilterTable.tsx @@ -57,14 +57,12 @@ const FilterTable: React.FC = ({ label:res.label, title:res.title } - console.log(res, newFilterForm, value) onChange?.([newFilterForm, ...(value?.filter(x=>!filterForm?.name|| x.name!==filterForm.name) || [])]) closeDrawer() }) }; const handleDeleteFilter = useCallback((item: FilterFormField) => { - console.log(item, value, isModalVisible); const newFilterShowList = value?.filter((filter) => filter._eoKey !== item._eoKey) || []; onChange?.(newFilterShowList); }, [value, onChange]); @@ -109,7 +107,6 @@ const FilterTable: React.FC = ({ useEffect(()=>{ setSelectedOptionNameSet(new Set(value?.map(x=>x.name) || [])) - console.log('valuechange',value) },[value]) return (
diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx index 2acd899b..5973b939 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMasking.tsx @@ -33,7 +33,6 @@ const DataMasking = (props: any) => { const drawerRef = useRef(null) const { modal } = App.useApp() - useEffect(()=>{console.log(props, publishBtn)},[publishBtn]) /** * 列表ref */ @@ -104,7 +103,6 @@ const DataMasking = (props: any) => { * @param entity 行数据 */ const changeOpenApiStatus = (enabled: boolean, entity: any) => { - console.log(enabled) fetchData>( `strategy/${serviceId === undefined? 'global':'service'}/data-masking/${enabled ? 'enable' :'disable' }`, { diff --git a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx index e4c7bba7..edccdf47 100644 --- a/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx +++ b/frontend/packages/core/src/pages/policy/dataMasking/DataMaskingConfig.tsx @@ -65,7 +65,7 @@ const DataMaskingConfig = forwardRef((_,ref) => { const {code,data,msg} = response if(code === STATUS_CODE.SUCCESS){ message.success(msg || $t(RESPONSE_TIPS.success)) - navigator(serviceId? '':'/globalpolicy/datamasking/list') + navigator('../list') return Promise.resolve(true) }else{ message.error(msg || $t(RESPONSE_TIPS.error)) diff --git a/frontend/packages/core/src/pages/policy/servicePolicy.tsx b/frontend/packages/core/src/pages/policy/servicePolicy.tsx index acd56dd2..793c1d0b 100644 --- a/frontend/packages/core/src/pages/policy/servicePolicy.tsx +++ b/frontend/packages/core/src/pages/policy/servicePolicy.tsx @@ -14,7 +14,6 @@ const servicePolicy = () => { } ] - console.log('publish',false) return ( <> diff --git a/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx b/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx index 76e7135a..cf747579 100644 --- a/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx +++ b/frontend/packages/dashboard/src/component/MonitorDetailPage.tsx @@ -98,7 +98,7 @@ export default function MonitorDetailPage(props:MonitorDetailPageProps){ setTimeButton('hour'); setDatePickerValue(null) setQueryData(null); - monitorTableRef.current?.reload() + // monitorTableRef.current?.reload() }; const openModal = (entity:MonitorApiData|MonitorSubscriberData) => { diff --git a/frontend/packages/market/src/pages/serviceHub/integrate.tsx b/frontend/packages/market/src/pages/serviceHub/integrate.tsx index 4eb553bb..ad6b525d 100644 --- a/frontend/packages/market/src/pages/serviceHub/integrate.tsx +++ b/frontend/packages/market/src/pages/serviceHub/integrate.tsx @@ -14,7 +14,7 @@ const Integrate = ({ service }: { service: ServiceDetailType }) => { const {fetchData} = useFetch() useEffect(()=>{ - setUrl(`${service?.basic?.sitePrefix || window.location?.origin}/${serviceId}/swagger` ) + setUrl(`${service?.basic?.sitePrefix || window.location?.origin}/api/v1/service/swagger/${serviceId}` ) },[service]) /** * Agent 平台地址 @@ -60,7 +60,7 @@ const Integrate = ({ service }: { service: ServiceDetailType }) => { OR - +

{$t('步骤三:配置 API 密钥')}

{$t('在')} {$t('消费者')} {$t('菜单中,选择已通过本 API 服务申请的消费者,')}