diff --git a/docSite/content/docs/development/intro.md b/docSite/content/docs/development/intro.md index 8859d23c3..b0ff877b1 100644 --- a/docSite/content/docs/development/intro.md +++ b/docSite/content/docs/development/intro.md @@ -133,3 +133,57 @@ FastGPT 在`pnpm i`后会执行`postinstall`脚本,用于自动生成`ChakraUI 遇到困难了吗?有任何问题吗? 加入微信群与开发者和用户保持沟通。 + +## 代码结构说明 + +### nextjs + +FastGPT 使用了 nextjs 的 page route 作为框架。为了区分好前后端代码,在目录分配上会分成 global, service, web 3个自目录,分别对应着 `前后端共用`、`后端专用`、`前端专用`的代码。 + +### monorepo +FastGPT 才用 pnpm workspace 方式构建 monorepo 项目,主要分为两个部分: + +- projects/app - FastGPT 主项目 +- packages/ - 子模块 + - global - 共用代码,通常是放一些前后端都能执行的函数、类型声明、常量。 + - service - 服务端代码 + - web - 前端代码 + - plugin - 工作流自定义插件的代码 + +### 领域驱动模式(DDD) + +FastGPT 在代码模块划分时,按DDD的思想进行划分,主要分为以下几个领域: + +core - 核心功能(知识库,工作流,应用,对话) +support - 支撑功能(用户体系,计费,鉴权等) +common - 基础功能(日志管理,文件读写等) + +{{% details title="代码结构说明" closed="true" %}} +``` +. +├── .github // github 相关配置 +├── .husky // 格式化配置 +├── docSite // 文档 +├── files // 一些外部文件,例如 docker-compose, helm +├── packages // 子包 +│ ├── global // 前后端通用子包 +│ ├── plugins // 工作流插件(需要自定义包时候使用到) +│ ├── service // 后端子包 +│ └── web // 前端子包 +├── projects +│ └── app // FastGPT 主项目 +├── python // 存放一些模型代码,和 FastGPT 本身无关 +└── scripts // 一些自动化脚本 + ├── icon // icon预览脚本,可以在顶层 pnpm initIcon(把svg写入到代码中), pnpm previewIcon(预览icon) + └── postinstall.sh // chakraUI自定义theme初始化 ts 类型 +├── package.json // 顶层monorepo +├── pnpm-lock.yaml +├── pnpm-workspace.yaml // monorepo 声明 +├── Dockerfile +├── LICENSE +├── README.md +├── README_en.md +├── README_ja.md +├── dev.md +``` +{{% /details %}} diff --git a/packages/global/common/string/time.ts b/packages/global/common/string/time.ts index 4b3211102..e61aac7e3 100644 --- a/packages/global/common/string/time.ts +++ b/packages/global/common/string/time.ts @@ -6,6 +6,42 @@ export const formatTime2YMDHM = (time?: Date) => export const formatTime2YMD = (time?: Date) => (time ? dayjs(time).format('YYYY-MM-DD') : ''); export const formatTime2HM = (time: Date = new Date()) => dayjs(time).format('HH:mm'); +/** + * 格式化时间成聊天格式 + */ +export const formatTimeToChatTime = (time: Date) => { + const now = dayjs(); + const target = dayjs(time); + + // 如果传入时间小于60秒,返回刚刚 + if (now.diff(target, 'second') < 60) { + return '刚刚'; + } + + // 如果时间是今天,展示几时:几分 + if (now.isSame(target, 'day')) { + return target.format('HH:mm'); + } + + // 如果是昨天,展示昨天 + if (now.subtract(1, 'day').isSame(target, 'day')) { + return '昨天'; + } + + // 如果是前天,展示前天 + if (now.subtract(2, 'day').isSame(target, 'day')) { + return '前天'; + } + + // 如果是今年,展示某月某日 + if (now.isSame(target, 'year')) { + return target.format('MM/DD'); + } + + // 如果是更久之前,展示某年某月某日 + return target.format('YYYY/M/D'); +}; + /* cron time parse */ export const cronParser2Fields = (cronString: string) => { try { diff --git a/project.inlang/project_id b/project.inlang/project_id deleted file mode 100644 index e7a4d2b38..000000000 --- a/project.inlang/project_id +++ /dev/null @@ -1 +0,0 @@ -82dc3f099ca89165c3415d2ba96d195d3a1805b98373e8eb3d814b6994e62489 \ No newline at end of file diff --git a/project.inlang/settings.json b/project.inlang/settings.json deleted file mode 100644 index aff02ae44..000000000 --- a/project.inlang/settings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://inlang.com/schema/project-settings", - "sourceLanguageTag": "en", - "languageTags": [ - "en", - "zh" - ], - "modules": [ - "https://cdn.jsdelivr.net/npm/@inlang/plugin-i18next@4/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@1/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-identical-pattern@1/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@1/dist/index.js", - "https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@1/dist/index.js" - ], - "plugin.inlang.i18next": { - "pathPattern": { - "common": "./projects/app/i18n/{languageTag}/common.json" - }, - "variableReferencePattern": [ - "{{", "}}" - ] - } -} \ No newline at end of file diff --git a/projects/app/src/components/ChatBox/hooks/useChatBox.tsx b/projects/app/src/components/ChatBox/hooks/useChatBox.tsx index 31adb6a60..10da05105 100644 --- a/projects/app/src/components/ChatBox/hooks/useChatBox.tsx +++ b/projects/app/src/components/ChatBox/hooks/useChatBox.tsx @@ -1,7 +1,7 @@ import { ExportChatType } from '@/types/chat'; import { ChatItemType } from '@fastgpt/global/core/chat/type'; import { useCallback } from 'react'; -import { htmlTemplate } from '@/constants/common'; +import { htmlTemplate } from '@/web/core/chat/constants'; import { fileDownload } from '@/web/common/file/utils'; export const useChatBox = () => { diff --git a/projects/app/src/components/core/app/TTSSelect.tsx b/projects/app/src/components/core/app/TTSSelect.tsx index 80525388c..d5bea9714 100644 --- a/projects/app/src/components/core/app/TTSSelect.tsx +++ b/projects/app/src/components/core/app/TTSSelect.tsx @@ -4,7 +4,7 @@ import { QuestionOutlineIcon } from '@chakra-ui/icons'; import { Box, Button, Flex, ModalBody, useDisclosure, Image } from '@chakra-ui/react'; import React, { useCallback, useMemo } from 'react'; import { useTranslation } from 'next-i18next'; -import { TTSTypeEnum } from '@/constants/app'; +import { TTSTypeEnum } from '@/web/core/app/constants'; import type { AppTTSConfigType } from '@fastgpt/global/core/app/type.d'; import { useAudioPlay } from '@/web/common/utils/voice'; import { useSystemStore } from '@/web/common/system/useSystemStore'; diff --git a/projects/app/src/components/core/workflow/Flow/nodes/NodeSystemConfig.tsx b/projects/app/src/components/core/workflow/Flow/nodes/NodeSystemConfig.tsx index bc31cde4b..a5b5aecc9 100644 --- a/projects/app/src/components/core/workflow/Flow/nodes/NodeSystemConfig.tsx +++ b/projects/app/src/components/core/workflow/Flow/nodes/NodeSystemConfig.tsx @@ -11,7 +11,7 @@ import TTSSelect from '@/components/core/app/TTSSelect'; import WhisperConfig from '@/components/core/app/WhisperConfig'; import { splitGuideModule } from '@fastgpt/global/core/workflow/utils'; import { useTranslation } from 'next-i18next'; -import { TTSTypeEnum } from '@/constants/app'; +import { TTSTypeEnum } from '@/web/core/app/constants'; import MyIcon from '@fastgpt/web/components/common/Icon'; import MyTooltip from '@/components/MyTooltip'; import NodeCard from './render/NodeCard'; diff --git a/projects/app/src/constants/dataset.ts b/projects/app/src/constants/dataset.ts deleted file mode 100644 index 46ba6bf98..000000000 --- a/projects/app/src/constants/dataset.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { defaultQAModels, defaultVectorModels } from '@fastgpt/global/core/ai/model'; -import type { - DatasetCollectionItemType, - DatasetItemType -} from '@fastgpt/global/core/dataset/type.d'; - -export const defaultDatasetDetail: DatasetItemType = { - _id: '', - parentId: '', - userId: '', - teamId: '', - tmbId: '', - updateTime: new Date(), - type: 'dataset', - avatar: '/icon/logo.svg', - name: '', - intro: '', - status: 'active', - permission: 'private', - isOwner: false, - canWrite: false, - vectorModel: defaultVectorModels[0], - agentModel: defaultQAModels[0] -}; - -export const defaultCollectionDetail: DatasetCollectionItemType = { - _id: '', - teamId: '', - tmbId: '', - datasetId: { - _id: '', - parentId: '', - userId: '', - teamId: '', - tmbId: '', - updateTime: new Date(), - type: 'dataset', - avatar: '/icon/logo.svg', - name: '', - intro: '', - status: 'active', - permission: 'private', - vectorModel: defaultVectorModels[0].model, - agentModel: defaultQAModels[0].model - }, - parentId: '', - name: '', - type: 'file', - updateTime: new Date(), - canWrite: false, - sourceName: '', - sourceId: '', - createTime: new Date(), - trainingType: 'chunk', - chunkSize: 0 -}; diff --git a/projects/app/src/pages/_error.tsx b/projects/app/src/pages/_error.tsx index 1a1ed8fcd..bbaae955a 100644 --- a/projects/app/src/pages/_error.tsx +++ b/projects/app/src/pages/_error.tsx @@ -3,6 +3,7 @@ import { useRouter } from 'next/router'; import { serviceSideProps } from '@/web/common/utils/i18n'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { Box } from '@chakra-ui/react'; +import { TrackEventName } from '@/web/common/system/constants'; function Error() { const router = useRouter(); @@ -10,7 +11,7 @@ function Error() { useEffect(() => { setTimeout(() => { - window.umami?.track('pageError', { + window.umami?.track(TrackEventName.pageError, { userAgent: navigator.userAgent, platform: navigator.platform, appName: navigator.appName, diff --git a/projects/app/src/pages/account/components/InformTable.tsx b/projects/app/src/pages/account/components/InformTable.tsx index 6810c32b2..50d5ef66e 100644 --- a/projects/app/src/pages/account/components/InformTable.tsx +++ b/projects/app/src/pages/account/components/InformTable.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Box, Button, Flex, useTheme } from '@chakra-ui/react'; import { getInforms, readInform } from '@/web/support/user/inform/api'; import type { UserInformSchema } from '@fastgpt/global/support/user/inform/type'; -import { formatTimeToChatTime } from '@/utils/tools'; +import { formatTimeToChatTime } from '@fastgpt/global/common/string/time'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { usePagination } from '@fastgpt/web/hooks/usePagination'; diff --git a/projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx b/projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx index 9d6621ef3..41e8eb4d8 100644 --- a/projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx +++ b/projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx @@ -15,9 +15,9 @@ import MyIcon from '@fastgpt/web/components/common/Icon'; import { useLoading } from '@fastgpt/web/hooks/useLoading'; import { useQuery } from '@tanstack/react-query'; import { getShareChatList, delShareChatById } from '@/web/support/outLink/api'; -import { formatTimeToChatTime } from '@/utils/tools'; +import { formatTimeToChatTime } from '@fastgpt/global/common/string/time'; import { useCopyData } from '@/web/common/hooks/useCopyData'; -import { defaultFeishuOutLinkForm } from '@/constants/app'; +import { defaultFeishuOutLinkForm } from '@/web/core/app/constants'; import type { FeishuType, OutLinkEditType } from '@fastgpt/global/support/outLink/type.d'; import { PublishChannelEnum } from '@fastgpt/global/support/outLink/constant'; import { useTranslation } from 'next-i18next'; diff --git a/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx b/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx index 92f3882ee..7beb5491d 100644 --- a/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx +++ b/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx @@ -27,10 +27,10 @@ import { createShareChat, putShareChat } from '@/web/support/outLink/api'; -import { formatTimeToChatTime } from '@/utils/tools'; +import { formatTimeToChatTime } from '@fastgpt/global/common/string/time'; import { useCopyData } from '@/web/common/hooks/useCopyData'; import { useForm } from 'react-hook-form'; -import { defaultOutLinkForm } from '@/constants/app'; +import { defaultOutLinkForm } from '@/web/core/app/constants'; import type { OutLinkEditType, OutLinkSchema } from '@fastgpt/global/support/outLink/type.d'; import { useRequest } from '@/web/common/hooks/useRequest'; import { PublishChannelEnum } from '@fastgpt/global/support/outLink/constant'; diff --git a/projects/app/src/pages/app/detail/components/SimpleEdit/EditForm.tsx b/projects/app/src/pages/app/detail/components/SimpleEdit/EditForm.tsx index d2f86b039..d81681ba5 100644 --- a/projects/app/src/pages/app/detail/components/SimpleEdit/EditForm.tsx +++ b/projects/app/src/pages/app/detail/components/SimpleEdit/EditForm.tsx @@ -26,7 +26,7 @@ import SearchParamsTip from '@/components/core/dataset/SearchParamsTip'; import SettingLLMModel from '@/components/core/ai/SettingLLMModel'; import type { SettingAIDataType } from '@fastgpt/global/core/app/type.d'; import DeleteIcon, { hoverDeleteStyles } from '@fastgpt/web/components/common/Icon/delete'; -import { TTSTypeEnum } from '@/constants/app'; +import { TTSTypeEnum } from '@/web/core/app/constants'; import { getSystemVariables } from '@/web/core/app/utils'; import { useUpdate } from 'ahooks'; import { useI18n } from '@/web/context/I18n'; diff --git a/projects/app/src/pages/dataset/detail/components/InputDataModal.tsx b/projects/app/src/pages/dataset/detail/components/InputDataModal.tsx index 4114ecbd7..cb3f05388 100644 --- a/projects/app/src/pages/dataset/detail/components/InputDataModal.tsx +++ b/projects/app/src/pages/dataset/detail/components/InputDataModal.tsx @@ -20,7 +20,7 @@ import { getDefaultIndex } from '@fastgpt/global/core/dataset/utils'; import { DatasetDataIndexItemType } from '@fastgpt/global/core/dataset/type'; import SideTabs from '@/components/SideTabs'; import DeleteIcon from '@fastgpt/web/components/common/Icon/delete'; -import { defaultCollectionDetail } from '@/constants/dataset'; +import { defaultCollectionDetail } from '@/web/core/dataset/constants'; import { getDocPath } from '@/web/common/system/doc'; import RawSourceBox from '@/components/core/dataset/RawSourceBox'; import MyBox from '@fastgpt/web/components/common/MyBox'; diff --git a/projects/app/src/pages/dataset/detail/components/Test.tsx b/projects/app/src/pages/dataset/detail/components/Test.tsx index 105b29185..c0245417a 100644 --- a/projects/app/src/pages/dataset/detail/components/Test.tsx +++ b/projects/app/src/pages/dataset/detail/components/Test.tsx @@ -5,7 +5,7 @@ import { useSearchTestStore, SearchTestStoreItemType } from '@/web/core/dataset/ import { postSearchText } from '@/web/core/dataset/api'; import MyIcon from '@fastgpt/web/components/common/Icon'; import { useRequest } from '@fastgpt/web/hooks/useRequest'; -import { formatTimeToChatTime } from '@/utils/tools'; +import { formatTimeToChatTime } from '@fastgpt/global/common/string/time'; import { getErrText } from '@fastgpt/global/common/error/utils'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { customAlphabet } from 'nanoid'; diff --git a/projects/app/src/pages/login/components/ForgetPasswordForm.tsx b/projects/app/src/pages/login/components/ForgetPasswordForm.tsx index b0f9c3774..3f73c9cf0 100644 --- a/projects/app/src/pages/login/components/ForgetPasswordForm.tsx +++ b/projects/app/src/pages/login/components/ForgetPasswordForm.tsx @@ -1,7 +1,7 @@ import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Box, Input, Button } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { postFindPassword } from '@/web/support/user/api'; import { useSendCode } from '@/web/support/user/hooks/useSendCode'; import type { ResLogin } from '@/global/support/api/userRes.d'; diff --git a/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx b/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx index d7a0d4900..5e8f49f6b 100644 --- a/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx +++ b/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx @@ -1,7 +1,7 @@ import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Flex, Input, Button, Box, Link } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { postLogin } from '@/web/support/user/api'; import type { ResLogin } from '@/global/support/api/userRes'; import { useToast } from '@fastgpt/web/hooks/useToast'; diff --git a/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx b/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx index f1f90d476..de534ea14 100644 --- a/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx +++ b/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx @@ -1,5 +1,5 @@ import React, { Dispatch } from 'react'; -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import type { ResLogin } from '@/global/support/api/userRes'; import { Box, Center, Image } from '@chakra-ui/react'; import { useQuery } from '@tanstack/react-query'; diff --git a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx index a6acb621f..3fc8445bf 100644 --- a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx +++ b/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx @@ -1,4 +1,4 @@ -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import { AbsoluteCenter, Box, Button, Flex, Image } from '@chakra-ui/react'; import { LOGO_ICON } from '@fastgpt/global/common/system/constants'; diff --git a/projects/app/src/pages/login/components/RegisterForm.tsx b/projects/app/src/pages/login/components/RegisterForm.tsx index e7ba46a5f..b98caa0e0 100644 --- a/projects/app/src/pages/login/components/RegisterForm.tsx +++ b/projects/app/src/pages/login/components/RegisterForm.tsx @@ -1,7 +1,7 @@ import React, { useState, Dispatch, useCallback } from 'react'; import { FormControl, Box, Input, Button } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { postRegister } from '@/web/support/user/api'; import { useSendCode } from '@/web/support/user/hooks/useSendCode'; import type { ResLogin } from '@/global/support/api/userRes'; diff --git a/projects/app/src/pages/login/index.tsx b/projects/app/src/pages/login/index.tsx index bc76c1f0a..a0464b5b0 100644 --- a/projects/app/src/pages/login/index.tsx +++ b/projects/app/src/pages/login/index.tsx @@ -1,6 +1,6 @@ import React, { useState, useCallback, useEffect } from 'react'; import { Box, Center, Flex, useDisclosure } from '@chakra-ui/react'; -import { LoginPageTypeEnum } from '@/constants/user'; +import { LoginPageTypeEnum } from '@/web/support/user/login/constants'; import { useSystemStore } from '@/web/common/system/useSystemStore'; import type { ResLogin } from '@/global/support/api/userRes.d'; import { useRouter } from 'next/router'; diff --git a/projects/app/src/types/index.d.ts b/projects/app/src/types/index.d.ts index b8a1f85e4..5b0e10384 100644 --- a/projects/app/src/types/index.d.ts +++ b/projects/app/src/types/index.d.ts @@ -7,7 +7,7 @@ import { VectorModelItemType, WhisperModelType } from '@fastgpt/global/core/ai/model.d'; -import { TrackEventName } from '@/constants/common'; +import { TrackEventName } from '@/web/common/system/constants'; import { SubPlanType } from '@fastgpt/global/support/wallet/sub/type'; export type PagingData = { @@ -31,7 +31,7 @@ declare global { grecaptcha: any; QRCode: any; umami?: { - track: (event: `${TrackEventName}`, data: any) => void; + track: (event: TrackEventName, data: any) => void; }; } } diff --git a/projects/app/src/utils/tools.ts b/projects/app/src/utils/tools.ts deleted file mode 100644 index 76e7fcfe8..000000000 --- a/projects/app/src/utils/tools.ts +++ /dev/null @@ -1,81 +0,0 @@ -import dayjs from 'dayjs'; - -/** - * 对象转成 query 字符串 - */ -export const Obj2Query = (obj: Record) => { - const queryParams = new URLSearchParams(); - for (const key in obj) { - queryParams.append(key, `${obj[key]}`); - } - return queryParams.toString(); -}; - -/** - * parse string to query object - */ -export const parseQueryString = (str: string) => { - const queryObject: Record = {}; - - const splitStr = str.split('?'); - - str = splitStr[1] || splitStr[0]; - - // 将字符串按照 '&' 分割成键值对数组 - const keyValuePairs = str.split('&'); - - // 遍历键值对数组,将每个键值对解析为对象的属性和值 - keyValuePairs.forEach(function (keyValuePair) { - const pair = keyValuePair.split('='); - const key = decodeURIComponent(pair[0]); - const value = decodeURIComponent(pair[1] || ''); - - // 如果对象中已经存在该属性,则将值转换为数组 - if (queryObject.hasOwnProperty(key)) { - if (!Array.isArray(queryObject[key])) { - queryObject[key] = [queryObject[key]]; - } - queryObject[key].push(value); - } else { - queryObject[key] = value; - } - }); - - return queryObject; -}; - -/** - * 格式化时间成聊天格式 - */ -export const formatTimeToChatTime = (time: Date) => { - const now = dayjs(); - const target = dayjs(time); - - // 如果传入时间小于60秒,返回刚刚 - if (now.diff(target, 'second') < 60) { - return '刚刚'; - } - - // 如果时间是今天,展示几时:几分 - if (now.isSame(target, 'day')) { - return target.format('HH:mm'); - } - - // 如果是昨天,展示昨天 - if (now.subtract(1, 'day').isSame(target, 'day')) { - return '昨天'; - } - - // 如果是前天,展示前天 - if (now.subtract(2, 'day').isSame(target, 'day')) { - return '前天'; - } - - // 如果是今年,展示某月某日 - if (now.isSame(target, 'year')) { - return target.format('MM/DD'); - } - - // 如果是更久之前,展示某年某月某日 - return target.format('YYYY/M/D'); -}; diff --git a/projects/app/src/web/common/system/constants.ts b/projects/app/src/web/common/system/constants.ts new file mode 100644 index 000000000..c381db9d9 --- /dev/null +++ b/projects/app/src/web/common/system/constants.ts @@ -0,0 +1,5 @@ +export enum TrackEventName { + windowError = 'windowError', + pageError = 'pageError', + wordReadError = 'wordReadError' +} diff --git a/projects/app/src/web/common/utils/voice.ts b/projects/app/src/web/common/utils/voice.ts index 6c1589b64..7df6a0244 100644 --- a/projects/app/src/web/common/utils/voice.ts +++ b/projects/app/src/web/common/utils/voice.ts @@ -2,7 +2,7 @@ import { useState, useCallback, useEffect, useMemo, useRef } from 'react'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { getErrText } from '@fastgpt/global/common/error/utils'; import type { AppTTSConfigType } from '@fastgpt/global/core/app/type.d'; -import { TTSTypeEnum } from '@/constants/app'; +import { TTSTypeEnum } from '@/web/core/app/constants'; import { useTranslation } from 'next-i18next'; import type { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat.d'; import { getToken } from '@/web/support/user/auth'; diff --git a/projects/app/src/web/context/useInitApp.ts b/projects/app/src/web/context/useInitApp.ts index bfab4fee0..309ec24ff 100644 --- a/projects/app/src/web/context/useInitApp.ts +++ b/projects/app/src/web/context/useInitApp.ts @@ -6,6 +6,7 @@ import { useSystemStore } from '@/web/common/system/useSystemStore'; import type { FastGPTFeConfigsType } from '@fastgpt/global/common/system/types/index.d'; import { change2DefaultLng, setLngStore } from '@/web/common/utils/i18n'; import { useMemoizedFn, useMount } from 'ahooks'; +import { TrackEventName } from '../common/system/constants'; export const useInitApp = () => { const router = useRouter(); @@ -52,7 +53,7 @@ export const useInitApp = () => { initUserLanguage(); const errorTrack = (event: ErrorEvent) => { - window.umami?.track('windowError', { + window.umami?.track(TrackEventName.windowError, { device: { userAgent: navigator.userAgent, platform: navigator.platform, diff --git a/projects/app/src/constants/app.ts b/projects/app/src/web/core/app/constants.ts similarity index 100% rename from projects/app/src/constants/app.ts rename to projects/app/src/web/core/app/constants.ts diff --git a/projects/app/src/web/core/app/store/useAppStore.ts b/projects/app/src/web/core/app/store/useAppStore.ts index 6e5a8acda..84e943a22 100644 --- a/projects/app/src/web/core/app/store/useAppStore.ts +++ b/projects/app/src/web/core/app/store/useAppStore.ts @@ -2,7 +2,7 @@ import { create } from 'zustand'; import { devtools, persist } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; import { getMyApps, getModelById, putAppById } from '@/web/core/app/api'; -import { defaultApp } from '@/constants/app'; +import { defaultApp } from '../constants'; import type { AppUpdateParams } from '@/global/core/app/api.d'; import { AppDetailType, AppListItemType } from '@fastgpt/global/core/app/type.d'; import { PostPublishAppProps } from '@/global/core/app/api'; diff --git a/projects/app/src/constants/common.ts b/projects/app/src/web/core/chat/constants.ts similarity index 99% rename from projects/app/src/constants/common.ts rename to projects/app/src/web/core/chat/constants.ts index 8ab1dba66..be9326aaa 100644 --- a/projects/app/src/constants/common.ts +++ b/projects/app/src/web/core/chat/constants.ts @@ -1,9 +1,3 @@ -export enum TrackEventName { - windowError = 'windowError', - pageError = 'pageError', - wordReadError = 'wordReadError' -} - export const htmlTemplate = ` diff --git a/projects/app/src/web/core/dataset/constants.ts b/projects/app/src/web/core/dataset/constants.ts index 666d3b8b1..2658f24ed 100644 --- a/projects/app/src/web/core/dataset/constants.ts +++ b/projects/app/src/web/core/dataset/constants.ts @@ -1,3 +1,60 @@ +import { defaultQAModels, defaultVectorModels } from '@fastgpt/global/core/ai/model'; +import type { + DatasetCollectionItemType, + DatasetItemType +} from '@fastgpt/global/core/dataset/type.d'; + +export const defaultDatasetDetail: DatasetItemType = { + _id: '', + parentId: '', + userId: '', + teamId: '', + tmbId: '', + updateTime: new Date(), + type: 'dataset', + avatar: '/icon/logo.svg', + name: '', + intro: '', + status: 'active', + permission: 'private', + isOwner: false, + canWrite: false, + vectorModel: defaultVectorModels[0], + agentModel: defaultQAModels[0] +}; + +export const defaultCollectionDetail: DatasetCollectionItemType = { + _id: '', + teamId: '', + tmbId: '', + datasetId: { + _id: '', + parentId: '', + userId: '', + teamId: '', + tmbId: '', + updateTime: new Date(), + type: 'dataset', + avatar: '/icon/logo.svg', + name: '', + intro: '', + status: 'active', + permission: 'private', + vectorModel: defaultVectorModels[0].model, + agentModel: defaultQAModels[0].model + }, + parentId: '', + name: '', + type: 'file', + updateTime: new Date(), + canWrite: false, + sourceName: '', + sourceId: '', + createTime: new Date(), + trainingType: 'chunk', + chunkSize: 0 +}; + export enum ImportProcessWayEnum { auto = 'auto', custom = 'custom' diff --git a/projects/app/src/web/core/dataset/store/dataset.ts b/projects/app/src/web/core/dataset/store/dataset.ts index 4f458fe9a..d849ad230 100644 --- a/projects/app/src/web/core/dataset/store/dataset.ts +++ b/projects/app/src/web/core/dataset/store/dataset.ts @@ -9,7 +9,7 @@ import { putDatasetById, postWebsiteSync } from '@/web/core/dataset/api'; -import { defaultDatasetDetail } from '@/constants/dataset'; +import { defaultDatasetDetail } from '../constants'; import type { DatasetUpdateBody } from '@fastgpt/global/core/dataset/api.d'; import { DatasetStatusEnum } from '@fastgpt/global/core/dataset/constants'; import { postCreateTrainingUsage } from '@/web/support/wallet/usage/api'; diff --git a/projects/app/src/constants/user.ts b/projects/app/src/web/support/user/login/constants.ts similarity index 68% rename from projects/app/src/constants/user.ts rename to projects/app/src/web/support/user/login/constants.ts index a10c1d1ad..ca24fc4df 100644 --- a/projects/app/src/constants/user.ts +++ b/projects/app/src/web/support/user/login/constants.ts @@ -4,8 +4,3 @@ export enum LoginPageTypeEnum { forgetPassword = 'forgetPassword', wechat = 'wechat' } - -export enum PromotionEnum { - register = 'register', - pay = 'pay' -}