Test shorurl (#4686)

* Short-chain burying (#4678)

* TrackRegisterParams

* 新增工作流导入功能,支持从URL获取工作流JSON数据并创建应用。实现了URL验证、CORS处理、剪贴板读取等功能,确保用户能够顺利导入工作流数据。

* 更新工作流导入功能,将导入逻辑从utils模块迁移至workflow模块,并修正相关导入路径。此更改有助于代码结构的清晰和模块化。

* 优化工作流导入组件,重构导入逻辑,增加从URL获取工作流数据的功能,并实现JSON配置导入窗口。修复了状态管理和错误处理,提升用户体验。

* 更新工作流导入功能,增加对UTM参数的支持,优化从URL获取工作流数据的逻辑,并重构相关API接口。修复了状态管理和错误处理,提升了用户体验。

* 更新创建应用的API接口,将UTM参数的字段名称从`shorUrlId`和`projectCode`修改为`shorUrlPlatform`和`shorUrlProjectCode`,以提高代码的可读性和一致性。

* impoter json

* Optimize the logic

* delete some console

* fix

* perf: sem code

---------

Co-authored-by: dreamer6680 <1468683855@qq.com>
This commit is contained in:
Archer
2025-04-27 22:56:42 +08:00
committed by GitHub
parent 5357aa402b
commit 659b8b1106
17 changed files with 285 additions and 61 deletions

View File

@@ -16,6 +16,14 @@ import { postCreateApp } from '@/web/core/app/api';
import { useRouter } from 'next/router';
import { form2AppWorkflow } from '@/web/core/app/utils';
import ImportAppConfigEditor from '@/pageComponents/app/ImportAppConfigEditor';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { getFetchWorkflow } from '@/web/core/app/api/app';
import {
getUtmParams,
getUtmWorkflow,
removeUtmParams,
removeUtmWorkflow
} from '@/web/support/marketing/utils';
type FormType = {
avatar: string;
@@ -37,6 +45,24 @@ const JsonImportModal = ({ onClose }: { onClose: () => void }) => {
});
const workflowStr = watch('workflowStr');
const { loading: isFetching } = useRequest2(
async () => {
const url = getUtmWorkflow();
if (!url) return;
const workflowData = await getFetchWorkflow({ url });
setValue('workflowStr', JSON.stringify(workflowData, null, 2));
const utmParams = getUtmParams();
if (utmParams.shortUrlContent) setValue('name', utmParams.shortUrlContent);
removeUtmWorkflow();
removeUtmParams();
},
{ manual: false }
);
const avatar = watch('avatar');
const {
File,
@@ -97,7 +123,8 @@ const JsonImportModal = ({ onClose }: { onClose: () => void }) => {
type: appType,
modules: workflow.nodes,
edges: workflow.edges,
chatConfig: workflow.chatConfig
chatConfig: workflow.chatConfig,
utmParams: getUtmParams()
});
},
{
@@ -116,7 +143,7 @@ const JsonImportModal = ({ onClose }: { onClose: () => void }) => {
<MyModal
isOpen
onClose={onClose}
isLoading={isCreating}
isLoading={isCreating || isFetching}
title={t('app:type.Import from json')}
iconSrc="common/importLight"
iconColor={'primary.600'}

View File

@@ -13,7 +13,8 @@ import { checkIsWecomTerminal } from '@fastgpt/global/support/user/login/constan
import { getNanoid } from '@fastgpt/global/common/string/tools';
import Avatar from '@fastgpt/web/components/common/Avatar';
import dynamic from 'next/dynamic';
import { GET, POST } from '@/web/common/api/request';
import { POST } from '@/web/common/api/request';
import { getBdVId } from '@/web/support/marketing/utils';
interface Props {
children: React.ReactNode;
@@ -107,7 +108,7 @@ const FormLayout = ({ children, setPageType, pageType }: Props) => {
];
const show_oauth = useMemo(
() => !sessionStorage.getItem('bd_vid') && !!(feConfigs?.sso?.url || oAuthList.length > 0),
() => !getBdVId() && !!(feConfigs?.sso?.url || oAuthList.length > 0),
[feConfigs?.sso?.url, oAuthList.length]
);

View File

@@ -12,6 +12,13 @@ import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useTranslation } from 'next-i18next';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import {
getBdVId,
getFastGPTSem,
getInviterId,
getSourceDomain,
removeFastGPTSem
} from '@/web/support/marketing/utils';
interface Props {
loginSuccess: (e: ResLogin) => void;
@@ -50,20 +57,13 @@ const RegisterForm = ({ setPageType, loginSuccess }: Props) => {
username,
code,
password,
inviterId: localStorage.getItem('inviterId') || undefined,
bd_vid: sessionStorage.getItem('bd_vid') || undefined,
fastgpt_sem: (() => {
try {
return sessionStorage.getItem('fastgpt_sem')
? JSON.parse(sessionStorage.getItem('fastgpt_sem')!)
: undefined;
} catch {
return undefined;
}
})(),
sourceDomain: sessionStorage.getItem('sourceDomain') || undefined
inviterId: getInviterId(),
bd_vid: getBdVId(),
fastgpt_sem: getFastGPTSem(),
sourceDomain: getSourceDomain()
})
);
removeFastGPTSem();
toast({
status: 'success',