diff --git a/packages/global/support/outLink/type.d.ts b/packages/global/support/outLink/type.d.ts index 80bad267a..57cc42136 100644 --- a/packages/global/support/outLink/type.d.ts +++ b/packages/global/support/outLink/type.d.ts @@ -1,3 +1,4 @@ +import { z } from 'zod'; import { AppSchema } from '../../core/app/type'; import type { PublishChannelEnum } from './constant'; import { RequireOnlyOne } from '../../common/type/utils'; @@ -113,3 +114,10 @@ export type PlaygroundVisibilityConfigType = { showFullText: boolean; showRawSource: boolean; }; + +export const PlaygroundVisibilityConfigSchema = z.object({ + showNodeStatus: z.boolean(), + responseDetail: z.boolean(), + showFullText: z.boolean(), + showRawSource: z.boolean() +}); diff --git a/packages/web/i18n/en/app.json b/packages/web/i18n/en/app.json index eafe62415..56203f83f 100644 --- a/packages/web/i18n/en/app.json +++ b/packages/web/i18n/en/app.json @@ -302,6 +302,7 @@ "pro_modal_title": "Business Edition Exclusive!", "pro_modal_unlock_button": "Unlock Now", "publish.chat_desc": "After logging into the portal, users can talk directly to the application", + "publish.playground_link": "Redirect Link", "publish_channel": "Publish", "publish_success": "Publish Successful", "question_guide_tip": "After the conversation, 3 guiding questions will be generated for you.", diff --git a/packages/web/i18n/zh-CN/app.json b/packages/web/i18n/zh-CN/app.json index aba384bc4..fb584adbe 100644 --- a/packages/web/i18n/zh-CN/app.json +++ b/packages/web/i18n/zh-CN/app.json @@ -314,6 +314,7 @@ "pro_modal_title": "商业版专享!", "pro_modal_unlock_button": "去解锁", "publish.chat_desc": "用户登录门户后可直接与应用对话", + "publish.playground_link": "跳转链接", "publish_channel": "发布渠道", "publish_channel.wecom.empty": "发布到企业微信机器人,请先 绑定自定义域名,并且通过域名校验。", "publish_success": "发布成功", diff --git a/packages/web/i18n/zh-Hant/app.json b/packages/web/i18n/zh-Hant/app.json index 097792cdd..05c0e51b0 100644 --- a/packages/web/i18n/zh-Hant/app.json +++ b/packages/web/i18n/zh-Hant/app.json @@ -300,6 +300,7 @@ "pro_modal_title": "商業版專享!", "pro_modal_unlock_button": "去解鎖", "publish.chat_desc": "用戶登錄門戶後可直接與應用對話", + "publish.playground_link": "跳轉鏈接", "publish_channel": "發布通道", "publish_success": "發布成功", "question_guide_tip": "對話結束後,會為你產生 3 個引導性問題。", diff --git a/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx index 8f84915e3..418cdfcce 100644 --- a/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx +++ b/projects/app/src/pageComponents/app/detail/Publish/Playground/index.tsx @@ -1,5 +1,5 @@ -import React from 'react'; -import { Box, Flex, Grid, Switch } from '@chakra-ui/react'; +import React, { useMemo } from 'react'; +import { Box, Flex, Grid, Switch, Button, Link } from '@chakra-ui/react'; import { useTranslation } from 'next-i18next'; import { useForm } from 'react-hook-form'; import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel'; @@ -10,6 +10,8 @@ import { updatePlaygroundVisibilityConfig } from '@/web/support/outLink/api'; import type { PlaygroundVisibilityConfigType } from '@fastgpt/global/support/outLink/type'; +import MyIcon from '@fastgpt/web/components/common/Icon'; +import { useCopyData } from '@fastgpt/web/hooks/useCopyData'; const defaultPlaygroundVisibilityForm: PlaygroundVisibilityConfigType = { showNodeStatus: true, @@ -20,6 +22,7 @@ const defaultPlaygroundVisibilityForm: PlaygroundVisibilityConfigType = { const PlaygroundVisibilityConfig = ({ appId }: { appId: string }) => { const { t } = useTranslation(); + const { copyData } = useCopyData(); const { register, watch, setValue, reset } = useForm({ defaultValues: defaultPlaygroundVisibilityForm @@ -29,6 +32,13 @@ const PlaygroundVisibilityConfig = ({ appId }: { appId: string }) => { const showFullText = watch('showFullText'); const showRawSource = watch('showRawSource'); + const playgroundLink = useMemo(() => { + if (typeof window !== 'undefined') { + return `${window.location.origin}/chat?appId=${appId}`; + } + return ''; + }, [appId]); + useRequest2(() => getPlaygroundVisibilityConfig({ appId }), { onSuccess: (data) => { reset({ @@ -60,6 +70,36 @@ const PlaygroundVisibilityConfig = ({ appId }: { appId: string }) => { return ( + + {t('app:publish.playground_link')} + + + + + + {t('common:core.app.outLink.Link block title')} + + copyData(playgroundLink)} + /> + + + {playgroundLink} + + + {t('publish:private_config')} diff --git a/projects/app/src/pages/api/support/outLink/playground/config.ts b/projects/app/src/pages/api/support/outLink/playground/config.ts index 77e762681..83f6340e7 100644 --- a/projects/app/src/pages/api/support/outLink/playground/config.ts +++ b/projects/app/src/pages/api/support/outLink/playground/config.ts @@ -7,7 +7,8 @@ import { type PlaygroundVisibilityConfigResponse, PlaygroundVisibilityConfigQuerySchema, PlaygroundVisibilityConfigResponseSchema -} from '@fastgpt/global/support/outLink/api'; +} from '@fastgpt/global/support/outLink/api.d'; + async function handler( req: ApiRequestProps<{}, PlaygroundVisibilityConfigQuery> ): Promise { diff --git a/projects/app/src/pages/api/support/outLink/playground/update.ts b/projects/app/src/pages/api/support/outLink/playground/update.ts index e75ca4d99..fe952b31d 100644 --- a/projects/app/src/pages/api/support/outLink/playground/update.ts +++ b/projects/app/src/pages/api/support/outLink/playground/update.ts @@ -7,7 +7,7 @@ import { NextAPI } from '@/service/middleware/entry'; import { type UpdatePlaygroundVisibilityConfigBody, UpdatePlaygroundVisibilityConfigBodySchema -} from '@fastgpt/global/support/outLink/api'; +} from '@fastgpt/global/support/outLink/api.d'; async function handler(req: ApiRequestProps) { const { appId, showNodeStatus, responseDetail, showFullText, showRawSource } =