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 } =