(defaultSelectAll);
+ return { value, setValue, isSelectAll, setIsSelectAll };
+};
diff --git a/packages/web/components/common/String/CopyBox.tsx b/packages/web/components/common/String/CopyBox.tsx
new file mode 100644
index 000000000..7d777684e
--- /dev/null
+++ b/packages/web/components/common/String/CopyBox.tsx
@@ -0,0 +1,24 @@
+import { useCopyData } from '../../../hooks/useCopyData';
+import React from 'react';
+import MyTooltip from '../MyTooltip';
+import { useTranslation } from 'next-i18next';
+import { Box, BoxProps } from '@chakra-ui/react';
+
+const CopyBox = ({
+ value,
+ children,
+ ...props
+}: { value: string; children: React.ReactNode } & BoxProps) => {
+ const { copyData } = useCopyData();
+ const { t } = useTranslation();
+
+ return (
+
+ copyData(value)} {...props}>
+ {children}
+
+
+ );
+};
+
+export default CopyBox;
diff --git a/projects/app/src/web/common/hooks/useCopyData.tsx b/packages/web/hooks/useCopyData.tsx
similarity index 92%
rename from projects/app/src/web/common/hooks/useCopyData.tsx
rename to packages/web/hooks/useCopyData.tsx
index 4cbb2c021..a0099ab4f 100644
--- a/projects/app/src/web/common/hooks/useCopyData.tsx
+++ b/packages/web/hooks/useCopyData.tsx
@@ -1,7 +1,7 @@
import { useTranslation } from 'next-i18next';
-import { useToast } from '@fastgpt/web/hooks/useToast';
+import { useToast } from './useToast';
import { useCallback } from 'react';
-import { hasHttps } from '@fastgpt/web/common/system/utils';
+import { hasHttps } from '../common/system/utils';
import { isProduction } from '@fastgpt/global/common/system/constants';
/**
diff --git a/packages/web/i18n/en/account_usage.json b/packages/web/i18n/en/account_usage.json
index 1dc6c32ca..50d98de8b 100644
--- a/packages/web/i18n/en/account_usage.json
+++ b/packages/web/i18n/en/account_usage.json
@@ -9,7 +9,10 @@
"details": "Details",
"dingtalk": "DingTalk",
"duration_seconds": "Duration (seconds)",
+ "every_day": "Day",
+ "every_month": "Moon",
"export_confirm": "Export confirmation",
+ "export_confirm_tip": "There are currently {{total}} usage records in total. Are you sure to export?",
"feishu": "Feishu",
"generation_time": "Generation time",
"input_token_length": "input tokens",
@@ -26,7 +29,6 @@
"select_member_and_source_first": "Please select members and types first",
"share": "Share Link",
"source": "source",
- "start_export": "Export started",
"text_length": "text length",
"token_length": "token length",
"total_points": "AI points consumption",
diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json
index b4888a069..0bb78391b 100644
--- a/packages/web/i18n/en/common.json
+++ b/packages/web/i18n/en/common.json
@@ -37,9 +37,12 @@
"chose_condition": "Choose Condition",
"chosen": "Chosen",
"classification": "Classification",
+ "click_to_copy": "Click to copy",
"click_to_resume": "Click to Resume",
"code_editor": "Code Editor",
"code_error.account_error": "Incorrect account name or password",
+ "code_error.account_exist": "Account has been registered",
+ "code_error.account_not_found": "User is not registered",
"code_error.app_error.invalid_app_type": "Invalid Application Type",
"code_error.app_error.invalid_owner": "Unauthorized Application Owner",
"code_error.app_error.not_exist": "Application Does Not Exist",
@@ -932,14 +935,14 @@
"model_doubao": "Doubao",
"model_ernie": "Ernie",
"model_hunyuan": "Hunyuan",
+ "model_intern": "Intern",
+ "model_moka": "Moka-AI",
"model_moonshot": "Moonshot",
"model_other": "Other",
"model_qwen": "Qwen",
"model_sparkdesk": "SprkDesk",
"model_stepfun": "StepFun",
"model_yi": "Yi",
- "model_intern": "Intern",
- "model_moka": "Moka-AI",
"move.confirm": "Confirm move",
"navbar.Account": "Account",
"navbar.Chat": "Chat",
diff --git a/packages/web/i18n/zh-CN/account_usage.json b/packages/web/i18n/zh-CN/account_usage.json
index 45cfc2fb5..8c8b5e2e8 100644
--- a/packages/web/i18n/zh-CN/account_usage.json
+++ b/packages/web/i18n/zh-CN/account_usage.json
@@ -9,10 +9,11 @@
"details": "详情",
"dingtalk": "钉钉",
"duration_seconds": "时长(秒)",
- "every_day": "每天",
- "every_month": "每月",
+ "every_day": "天",
+ "every_month": "月",
"every_week": "每周",
"export_confirm": "导出确认",
+ "export_confirm_tip": "当前共 {{total}} 条使用记录,确认导出?",
"export_success": "导出成功",
"feishu": "飞书",
"generation_time": "生成时间",
@@ -30,7 +31,6 @@
"select_member_and_source_first": "请先选中成员和类型",
"share": "分享链接",
"source": "来源",
- "start_export": "已开始导出",
"text_length": "文本长度",
"token_length": "token 长度",
"total_points": "AI 积分消耗",
diff --git a/packages/web/i18n/zh-CN/common.json b/packages/web/i18n/zh-CN/common.json
index e3bd5407f..46955cff1 100644
--- a/packages/web/i18n/zh-CN/common.json
+++ b/packages/web/i18n/zh-CN/common.json
@@ -41,9 +41,12 @@
"chose_condition": "选择条件",
"chosen": "已选",
"classification": "分类",
+ "click_to_copy": "点击复制",
"click_to_resume": "点击恢复",
"code_editor": "代码编辑",
"code_error.account_error": "账号名或密码错误",
+ "code_error.account_exist": "账号已注册",
+ "code_error.account_not_found": "用户未注册",
"code_error.app_error.invalid_app_type": "错误的应用类型",
"code_error.app_error.invalid_owner": "非法的应用所有者",
"code_error.app_error.not_exist": "应用不存在",
@@ -935,14 +938,14 @@
"model_doubao": "豆包",
"model_ernie": "文心一言",
"model_hunyuan": "腾讯混元",
+ "model_intern": "书生",
+ "model_moka": "Moka-AI",
"model_moonshot": "月之暗面",
"model_other": "其他",
"model_qwen": "阿里千问",
"model_sparkdesk": "讯飞星火",
"model_stepfun": "阶跃星辰",
"model_yi": "零一万物",
- "model_intern": "书生",
- "model_moka": "Moka-AI",
"move.confirm": "确认移动",
"navbar.Account": "账号",
"navbar.Chat": "聊天",
diff --git a/packages/web/i18n/zh-Hant/account_usage.json b/packages/web/i18n/zh-Hant/account_usage.json
index 2da7a68e6..040d3cb50 100644
--- a/packages/web/i18n/zh-Hant/account_usage.json
+++ b/packages/web/i18n/zh-Hant/account_usage.json
@@ -9,7 +9,10 @@
"details": "詳情",
"dingtalk": "釘釘",
"duration_seconds": "時長(秒)",
+ "every_day": "天",
+ "every_month": "月",
"export_confirm": "導出確認",
+ "export_confirm_tip": "當前共 {{total}} 筆使用記錄,確認導出?",
"feishu": "飛書",
"generation_time": "生成時間",
"input_token_length": "輸入 tokens",
@@ -26,7 +29,6 @@
"select_member_and_source_first": "請先選取成員和類型",
"share": "分享連結",
"source": "來源",
- "start_export": "已開始匯出",
"text_length": "文字長度",
"token_length": "token 長度",
"total_points": "AI 積分消耗",
diff --git a/packages/web/i18n/zh-Hant/common.json b/packages/web/i18n/zh-Hant/common.json
index 0c83b4031..ebf4f4630 100644
--- a/packages/web/i18n/zh-Hant/common.json
+++ b/packages/web/i18n/zh-Hant/common.json
@@ -37,9 +37,11 @@
"chose_condition": "選擇條件",
"chosen": "已選擇",
"classification": "分類",
+ "click_to_copy": "點選複製",
"click_to_resume": "點選繼續",
"code_editor": "程式碼編輯器",
"code_error.account_error": "帳號名稱或密碼錯誤",
+ "code_error.account_not_found": "用戶未註冊",
"code_error.app_error.invalid_app_type": "無效的應用程式類型",
"code_error.app_error.invalid_owner": "非法的應用程式擁有者",
"code_error.app_error.not_exist": "應用程式不存在",
@@ -932,14 +934,14 @@
"model_doubao": "豆包",
"model_ernie": "文心一言",
"model_hunyuan": "騰訊混元",
+ "model_intern": "書生",
+ "model_moka": "Moka-AI",
"model_moonshot": "月之暗面",
"model_other": "其他",
"model_qwen": "阿里千問",
"model_sparkdesk": "訊飛星火",
"model_stepfun": "階躍星辰",
"model_yi": "零一萬物",
- "model_intern": "書生",
- "model_moka": "Moka-AI",
"move.confirm": "確認移動",
"navbar.Account": "帳戶",
"navbar.Chat": "對話",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 859fc598b..d4b0c6dda 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,7 +22,7 @@ importers:
version: 13.3.0
next-i18next:
specifier: 15.3.0
- version: 15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
+ version: 15.3.0(i18next@23.11.5)(next@14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
prettier:
specifier: 3.2.4
version: 3.2.4
@@ -67,7 +67,7 @@ importers:
version: 4.0.2
next:
specifier: 14.2.5
- version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ version: 14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
openai:
specifier: 4.61.0
version: 4.61.0(encoding@0.1.13)
@@ -210,7 +210,7 @@ importers:
version: 1.4.5-lts.1
next:
specifier: 14.2.5
- version: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ version: 14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
nextjs-cors:
specifier: ^2.2.0
version: 2.2.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))
@@ -295,7 +295,7 @@ importers:
version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/next-js':
specifier: 2.1.5
- version: 2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)
+ version: 2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)
'@chakra-ui/react':
specifier: 2.8.1
version: 2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@@ -358,7 +358,7 @@ importers:
version: 4.17.21
next-i18next:
specifier: 15.3.0
- version: 15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
+ version: 15.3.0(i18next@23.11.5)(next@14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
papaparse:
specifier: ^5.4.1
version: 5.4.1
@@ -3201,8 +3201,8 @@ packages:
'@tanstack/react-query@4.36.1':
resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==}
peerDependencies:
- react: 18.3.1
- react-dom: 18.3.1
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
react-native: '*'
peerDependenciesMeta:
react-dom:
@@ -5288,8 +5288,8 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-equals@5.2.0:
- resolution: {integrity: sha512-3VpaQYf+CDFdRQfgsb+3vY7XaKjM35WCMoQTTE8h4S/eUkHzyJFOOA/gATYgoLejy4FBrEQD/sXe5Auk4cW/AQ==}
+ fast-equals@5.2.2:
+ resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==}
engines: {node: '>=6.0.0'}
fast-fifo@1.3.2:
@@ -10537,14 +10537,6 @@ snapshots:
next: 14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
react: 18.3.1
- '@chakra-ui/next-js@2.1.5(@chakra-ui/react@2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react@18.3.1)':
- dependencies:
- '@chakra-ui/react': 2.8.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- '@emotion/cache': 11.11.0
- '@emotion/react': 11.11.1(@types/react@18.3.1)(react@18.3.1)
- next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
- react: 18.3.1
-
'@chakra-ui/number-input@2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)':
dependencies:
'@chakra-ui/counter': 2.1.0(react@18.3.1)
@@ -13284,7 +13276,7 @@ snapshots:
axios@1.7.7:
dependencies:
- follow-redirects: 1.15.9
+ follow-redirects: 1.15.9(debug@4.3.7)
form-data: 4.0.1
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -14584,7 +14576,7 @@ snapshots:
eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
eslint-plugin-jsx-a11y: 6.9.0(eslint@8.56.0)
eslint-plugin-react: 7.34.4(eslint@8.56.0)
eslint-plugin-react-hooks: 4.6.2(eslint@8.56.0)
@@ -14608,7 +14600,7 @@ snapshots:
enhanced-resolve: 5.17.0
eslint: 8.56.0
eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.5
is-core-module: 2.14.0
@@ -14630,7 +14622,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0):
+ eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0):
dependencies:
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
@@ -14901,7 +14893,7 @@ snapshots:
fast-deep-equal@3.1.3: {}
- fast-equals@5.2.0: {}
+ fast-equals@5.2.2: {}
fast-fifo@1.3.2: {}
@@ -15078,8 +15070,6 @@ snapshots:
follow-redirects@1.15.6: {}
- follow-redirects@1.15.9: {}
-
follow-redirects@1.15.9(debug@4.3.4):
optionalDependencies:
debug: 4.3.4
@@ -17427,18 +17417,6 @@ snapshots:
react: 18.3.1
react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
- next-i18next@15.3.0(i18next@23.11.5)(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8))(react-i18next@14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1):
- dependencies:
- '@babel/runtime': 7.24.8
- '@types/hoist-non-react-statics': 3.3.5
- core-js: 3.37.1
- hoist-non-react-statics: 3.3.2
- i18next: 23.11.5
- i18next-fs-backend: 2.3.1
- next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
- react: 18.3.1
- react-i18next: 14.1.2(i18next@23.11.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
-
next@14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8):
dependencies:
'@next/env': 14.2.5
@@ -17465,36 +17443,10 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
- next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8):
- dependencies:
- '@next/env': 14.2.5
- '@swc/helpers': 0.5.5
- busboy: 1.6.0
- caniuse-lite: 1.0.30001669
- graceful-fs: 4.2.11
- postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(react@18.3.1)
- optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.5
- '@next/swc-darwin-x64': 14.2.5
- '@next/swc-linux-arm64-gnu': 14.2.5
- '@next/swc-linux-arm64-musl': 14.2.5
- '@next/swc-linux-x64-gnu': 14.2.5
- '@next/swc-linux-x64-musl': 14.2.5
- '@next/swc-win32-arm64-msvc': 14.2.5
- '@next/swc-win32-ia32-msvc': 14.2.5
- '@next/swc-win32-x64-msvc': 14.2.5
- sass: 1.77.8
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
-
nextjs-cors@2.2.0(next@14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)):
dependencies:
cors: 2.8.5
- next: 14.2.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
+ next: 14.2.5(@babel/core@7.24.9)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.8)
nextjs-node-loader@1.1.5(webpack@5.92.1):
dependencies:
@@ -18205,7 +18157,7 @@ snapshots:
react-smooth@4.0.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- fast-equals: 5.2.0
+ fast-equals: 5.2.2
prop-types: 15.8.1
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
@@ -18931,11 +18883,6 @@ snapshots:
'@babel/core': 7.24.9
babel-plugin-macros: 3.1.0
- styled-jsx@5.1.1(react@18.3.1):
- dependencies:
- client-only: 0.0.1
- react: 18.3.1
-
stylis@4.2.0: {}
stylis@4.3.2: {}
@@ -19137,25 +19084,6 @@ snapshots:
ts-dedent@2.2.0: {}
- ts-jest@29.2.2(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.3)))(typescript@5.5.3):
- dependencies:
- bs-logger: 0.2.6
- ejs: 3.1.10
- fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.3))
- jest-util: 29.7.0
- json5: 2.2.3
- lodash.memoize: 4.1.2
- make-error: 1.3.6
- semver: 7.6.3
- typescript: 5.5.3
- yargs-parser: 21.1.1
- optionalDependencies:
- '@babel/core': 7.24.9
- '@jest/transform': 29.7.0
- '@jest/types': 29.6.3
- babel-jest: 29.7.0(@babel/core@7.24.9)
-
ts-jest@29.2.2(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0(@types/node@20.14.11)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.3)))(typescript@5.5.3):
dependencies:
bs-logger: 0.2.6
diff --git a/projects/app/src/components/Markdown/CodeLight.tsx b/projects/app/src/components/Markdown/CodeLight.tsx
index 81bcbab0e..5d2db6971 100644
--- a/projects/app/src/components/Markdown/CodeLight.tsx
+++ b/projects/app/src/components/Markdown/CodeLight.tsx
@@ -2,7 +2,7 @@ import React, { useMemo } from 'react';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
import { Box, Flex } from '@chakra-ui/react';
import Icon from '@fastgpt/web/components/common/Icon';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useTranslation } from 'next-i18next';
export const codeLight: { [key: string]: React.CSSProperties } = {
diff --git a/projects/app/src/components/Markdown/codeBlock/iframe-html.tsx b/projects/app/src/components/Markdown/codeBlock/iframe-html.tsx
index 97671cab9..4bf8d29e8 100644
--- a/projects/app/src/components/Markdown/codeBlock/iframe-html.tsx
+++ b/projects/app/src/components/Markdown/codeBlock/iframe-html.tsx
@@ -12,7 +12,7 @@ import {
ModalCloseButton
} from '@chakra-ui/react';
import Icon from '@fastgpt/web/components/common/Icon';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useTranslation } from 'next-i18next';
import { useMarkdownWidth } from '../hooks';
import type { IconNameType } from '@fastgpt/web/components/common/Icon/type.d';
diff --git a/projects/app/src/components/core/ai/ModelTable/index.tsx b/projects/app/src/components/core/ai/ModelTable/index.tsx
index 772905cee..eb1c81cc1 100644
--- a/projects/app/src/components/core/ai/ModelTable/index.tsx
+++ b/projects/app/src/components/core/ai/ModelTable/index.tsx
@@ -26,6 +26,7 @@ import { useSystemStore } from '@/web/common/system/useSystemStore';
import Avatar from '@fastgpt/web/components/common/Avatar';
import MyTag from '@fastgpt/web/components/common/Tag/index';
import dynamic from 'next/dynamic';
+import CopyBox from '@fastgpt/web/components/common/String/CopyBox';
const MyModal = dynamic(() => import('@fastgpt/web/components/common/MyModal'));
@@ -252,7 +253,9 @@ const ModelTable = () => {
|
- {item.name}
+
+ {item.name}
+
|
diff --git a/projects/app/src/components/core/app/TTSSelect.tsx b/projects/app/src/components/core/app/TTSSelect.tsx
index 8037cb6e2..6c2a12428 100644
--- a/projects/app/src/components/core/app/TTSSelect.tsx
+++ b/projects/app/src/components/core/app/TTSSelect.tsx
@@ -15,7 +15,7 @@ import ChatFunctionTip from './Tip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import MyImage from '@fastgpt/web/components/common/Image/MyImage';
import { useContextSelector } from 'use-context-selector';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
const TTSSelect = ({
value = defaultTTSConfig,
diff --git a/projects/app/src/components/core/app/VariableEdit.tsx b/projects/app/src/components/core/app/VariableEdit.tsx
index bc4b873f4..30ae8d83b 100644
--- a/projects/app/src/components/core/app/VariableEdit.tsx
+++ b/projects/app/src/components/core/app/VariableEdit.tsx
@@ -30,7 +30,7 @@ import { formatEditorVariablePickerIcon } from '@fastgpt/global/core/workflow/ut
import ChatFunctionTip from './Tip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
-import InputTypeConfig from '@/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig';
+import InputTypeConfig from '@/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig';
import MyIconButton from '@fastgpt/web/components/common/Icon/button';
export const defaultVariable: VariableItemType = {
diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatController.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatController.tsx
index d08dd9182..e954db576 100644
--- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatController.tsx
+++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatController.tsx
@@ -1,4 +1,4 @@
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { Flex, FlexProps, css, useTheme } from '@chakra-ui/react';
import { ChatSiteItemType } from '@fastgpt/global/core/chat/type';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatItem.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatItem.tsx
index a603216d0..1540e72b9 100644
--- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatItem.tsx
+++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ChatItem.tsx
@@ -15,7 +15,7 @@ import FilesBlock from './FilesBox';
import { ChatBoxContext } from '../Provider';
import { useContextSelector } from 'use-context-selector';
import AIResponseBox from '../../../components/AIResponseBox';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import MyIcon from '@fastgpt/web/components/common/Icon';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
import { useTranslation } from 'next-i18next';
diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/SelectMarkCollection.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/SelectMarkCollection.tsx
index be059f965..f60bfa5aa 100644
--- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/SelectMarkCollection.tsx
+++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/SelectMarkCollection.tsx
@@ -10,7 +10,7 @@ import { AdminFbkType } from '@fastgpt/global/core/chat/type.d';
import SelectCollections from '@/web/core/dataset/components/SelectCollections';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
-const InputDataModal = dynamic(() => import('@/pages/dataset/detail/components/InputDataModal'));
+const InputDataModal = dynamic(() => import('@/pageComponents/dataset/detail/InputDataModal'));
export type AdminMarkType = {
feedbackDataId?: string;
diff --git a/projects/app/src/components/core/dataset/QuoteItem.tsx b/projects/app/src/components/core/dataset/QuoteItem.tsx
index b9ad40ce2..a897138b5 100644
--- a/projects/app/src/components/core/dataset/QuoteItem.tsx
+++ b/projects/app/src/components/core/dataset/QuoteItem.tsx
@@ -12,7 +12,7 @@ import { SearchScoreTypeEnum, SearchScoreTypeMap } from '@fastgpt/global/core/da
import type { readCollectionSourceBody } from '@/pages/api/core/dataset/collection/read';
import Markdown from '@/components/Markdown';
-const InputDataModal = dynamic(() => import('@/pages/dataset/detail/components/InputDataModal'));
+const InputDataModal = dynamic(() => import('@/pageComponents/dataset/detail/InputDataModal'));
type ScoreItemType = SearchDataResponseItemType['score'][0];
const scoreTheme: Record<
diff --git a/projects/app/src/components/support/apikey/Table.tsx b/projects/app/src/components/support/apikey/Table.tsx
index 38e606375..30574b55b 100644
--- a/projects/app/src/components/support/apikey/Table.tsx
+++ b/projects/app/src/components/support/apikey/Table.tsx
@@ -26,7 +26,7 @@ import {
import type { EditApiKeyProps } from '@/global/support/openapi/api.d';
import dayjs from 'dayjs';
import { AddIcon } from '@chakra-ui/icons';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useTranslation } from 'next-i18next';
import MyIcon from '@fastgpt/web/components/common/Icon';
diff --git a/projects/app/src/components/support/user/team/TeamTagModal/index.tsx b/projects/app/src/components/support/user/team/TeamTagModal/index.tsx
index 3d2396fe6..aa4590ed9 100644
--- a/projects/app/src/components/support/user/team/TeamTagModal/index.tsx
+++ b/projects/app/src/components/support/user/team/TeamTagModal/index.tsx
@@ -18,7 +18,7 @@ import type { TeamTagItemType } from '@fastgpt/global/support/user/team/type';
import { useRequest } from '@fastgpt/web/hooks/useRequest';
import { RepeatIcon } from '@chakra-ui/icons';
import MyIcon from '@fastgpt/web/components/common/Icon';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useUserStore } from '@/web/support/user/useUserStore';
import { useQuery } from '@tanstack/react-query';
import { getTeamsTags, loadTeamTagsByDomain } from '@/web/support/user/team/api';
diff --git a/projects/app/src/components/support/wallet/NotSufficientModal/index.tsx b/projects/app/src/components/support/wallet/NotSufficientModal/index.tsx
index fa4590428..551bc43af 100644
--- a/projects/app/src/components/support/wallet/NotSufficientModal/index.tsx
+++ b/projects/app/src/components/support/wallet/NotSufficientModal/index.tsx
@@ -3,8 +3,8 @@ import MyModal from '@fastgpt/web/components/common/MyModal';
import { useTranslation } from 'next-i18next';
import { Box, Button, Flex, ModalBody, ModalFooter, useDisclosure } from '@chakra-ui/react';
import { NotSufficientModalType, useSystemStore } from '@/web/common/system/useSystemStore';
-import ExtraPlan from '@/pages/price/components/ExtraPlan';
-import StandardPlan from '@/pages/price/components/Standard';
+import ExtraPlan from '@/pageComponents/price/ExtraPlan';
+import StandardPlan from '@/pageComponents/price/Standard';
import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import { useUserStore } from '@/web/support/user/useUserStore';
diff --git a/projects/app/src/pages/account/components/AccountContainer.tsx b/projects/app/src/pageComponents/account/AccountContainer.tsx
similarity index 100%
rename from projects/app/src/pages/account/components/AccountContainer.tsx
rename to projects/app/src/pageComponents/account/AccountContainer.tsx
diff --git a/projects/app/src/pages/account/components/TeamSelector.tsx b/projects/app/src/pageComponents/account/TeamSelector.tsx
similarity index 100%
rename from projects/app/src/pages/account/components/TeamSelector.tsx
rename to projects/app/src/pageComponents/account/TeamSelector.tsx
diff --git a/projects/app/src/pages/account/bill/components/ApplyInvoiceModal.tsx b/projects/app/src/pageComponents/account/bill/ApplyInvoiceModal.tsx
similarity index 98%
rename from projects/app/src/pages/account/bill/components/ApplyInvoiceModal.tsx
rename to projects/app/src/pageComponents/account/bill/ApplyInvoiceModal.tsx
index 557dd227a..ce8aad28c 100644
--- a/projects/app/src/pages/account/bill/components/ApplyInvoiceModal.tsx
+++ b/projects/app/src/pageComponents/account/bill/ApplyInvoiceModal.tsx
@@ -27,7 +27,7 @@ import dayjs from 'dayjs';
import { useTranslation } from 'next-i18next';
import { useCallback, useState } from 'react';
import MyIcon from '@fastgpt/web/components/common/Icon';
-import Divider from '@/pages/app/detail/components/WorkflowComponents/Flow/components/Divider';
+import Divider from '@/pageComponents/app/detail/WorkflowComponents/Flow/components/Divider';
import { TeamInvoiceHeaderType } from '@fastgpt/global/support/user/team/type';
import { InvoiceHeaderSingleForm } from './InvoiceHeaderForm';
import MyBox from '@fastgpt/web/components/common/MyBox';
diff --git a/projects/app/src/pages/account/bill/components/BillTable.tsx b/projects/app/src/pageComponents/account/bill/BillTable.tsx
similarity index 100%
rename from projects/app/src/pages/account/bill/components/BillTable.tsx
rename to projects/app/src/pageComponents/account/bill/BillTable.tsx
diff --git a/projects/app/src/pages/account/bill/components/InvoiceHeaderForm.tsx b/projects/app/src/pageComponents/account/bill/InvoiceHeaderForm.tsx
similarity index 98%
rename from projects/app/src/pages/account/bill/components/InvoiceHeaderForm.tsx
rename to projects/app/src/pageComponents/account/bill/InvoiceHeaderForm.tsx
index 69c6658a6..94f2c641c 100644
--- a/projects/app/src/pages/account/bill/components/InvoiceHeaderForm.tsx
+++ b/projects/app/src/pageComponents/account/bill/InvoiceHeaderForm.tsx
@@ -1,4 +1,4 @@
-import Divider from '@/pages/app/detail/components/WorkflowComponents/Flow/components/Divider';
+import Divider from '@/pageComponents/app/detail/WorkflowComponents/Flow/components/Divider';
import { getTeamInvoiceHeader, updateTeamInvoiceHeader } from '@/web/support/user/team/api';
import { Box, Button, Flex, HStack, Input, InputProps, Radio, RadioGroup } from '@chakra-ui/react';
import { TeamInvoiceHeaderType } from '@fastgpt/global/support/user/team/type';
diff --git a/projects/app/src/pages/account/bill/components/InvoiceTable.tsx b/projects/app/src/pageComponents/account/bill/InvoiceTable.tsx
similarity index 100%
rename from projects/app/src/pages/account/bill/components/InvoiceTable.tsx
rename to projects/app/src/pageComponents/account/bill/InvoiceTable.tsx
diff --git a/projects/app/src/pages/account/info/components/ConversionModal.tsx b/projects/app/src/pageComponents/account/info/ConversionModal.tsx
similarity index 100%
rename from projects/app/src/pages/account/info/components/ConversionModal.tsx
rename to projects/app/src/pageComponents/account/info/ConversionModal.tsx
diff --git a/projects/app/src/pages/account/info/components/UpdatePswModal.tsx b/projects/app/src/pageComponents/account/info/UpdatePswModal.tsx
similarity index 100%
rename from projects/app/src/pages/account/info/components/UpdatePswModal.tsx
rename to projects/app/src/pageComponents/account/info/UpdatePswModal.tsx
diff --git a/projects/app/src/pages/account/info/components/standardDetailModal.tsx b/projects/app/src/pageComponents/account/info/standardDetailModal.tsx
similarity index 100%
rename from projects/app/src/pages/account/info/components/standardDetailModal.tsx
rename to projects/app/src/pageComponents/account/info/standardDetailModal.tsx
diff --git a/projects/app/src/pages/account/model/components/ModelConfigTable.tsx b/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx
similarity index 99%
rename from projects/app/src/pages/account/model/components/ModelConfigTable.tsx
rename to projects/app/src/pageComponents/account/model/ModelConfigTable.tsx
index 85bdf350a..2f414c044 100644
--- a/projects/app/src/pages/account/model/components/ModelConfigTable.tsx
+++ b/projects/app/src/pageComponents/account/model/ModelConfigTable.tsx
@@ -51,6 +51,7 @@ import MyMenu from '@fastgpt/web/components/common/MyMenu';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { putUpdateWithJson } from '@/web/core/ai/config';
+import CopyBox from '@fastgpt/web/components/common/String/CopyBox';
const MyModal = dynamic(() => import('@fastgpt/web/components/common/MyModal'));
@@ -396,7 +397,9 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
|
- {item.name}
+
+ {item.name}
+
|
diff --git a/projects/app/src/pages/account/thirdParty/components/OpenAIAccountModal.tsx b/projects/app/src/pageComponents/account/thirdParty/OpenAIAccountModal.tsx
similarity index 100%
rename from projects/app/src/pages/account/thirdParty/components/OpenAIAccountModal.tsx
rename to projects/app/src/pageComponents/account/thirdParty/OpenAIAccountModal.tsx
diff --git a/projects/app/src/pages/account/thirdParty/components/WorkflowVariableModal.tsx b/projects/app/src/pageComponents/account/thirdParty/WorkflowVariableModal.tsx
similarity index 96%
rename from projects/app/src/pages/account/thirdParty/components/WorkflowVariableModal.tsx
rename to projects/app/src/pageComponents/account/thirdParty/WorkflowVariableModal.tsx
index dc9719fec..6bd4ee383 100644
--- a/projects/app/src/pages/account/thirdParty/components/WorkflowVariableModal.tsx
+++ b/projects/app/src/pageComponents/account/thirdParty/WorkflowVariableModal.tsx
@@ -1,7 +1,7 @@
import { Box, Button, Flex, Input, ModalBody, ModalFooter } from '@chakra-ui/react';
import MyModal from '@fastgpt/web/components/common/MyModal';
import React from 'react';
-import { ThirdPartyAccountType } from '../index';
+import { ThirdPartyAccountType } from '../../../pages/account/thirdParty/index';
import { useTranslation } from 'next-i18next';
import { useForm } from 'react-hook-form';
import { useUserStore } from '@/web/support/user/useUserStore';
diff --git a/projects/app/src/pages/account/usage/components/UsageForm.tsx b/projects/app/src/pageComponents/account/usage/Dashboard.tsx
similarity index 59%
rename from projects/app/src/pages/account/usage/components/UsageForm.tsx
rename to projects/app/src/pageComponents/account/usage/Dashboard.tsx
index baa69fa5c..fa4a55a32 100644
--- a/projects/app/src/pages/account/usage/components/UsageForm.tsx
+++ b/projects/app/src/pageComponents/account/usage/Dashboard.tsx
@@ -1,13 +1,11 @@
-import { getTotalPoints } from '@/web/support/wallet/usage/api';
+import { getDashboardData } from '@/web/support/wallet/usage/api';
import { Box, Flex } from '@chakra-ui/react';
import { formatNumber } from '@fastgpt/global/common/math/tools';
-import { UsageSourceEnum } from '@fastgpt/global/support/wallet/usage/constants';
-import { DateRangeType } from '@fastgpt/web/components/common/DateRangePicker';
import MyBox from '@fastgpt/web/components/common/MyBox';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { addDays } from 'date-fns';
import { useTranslation } from 'next-i18next';
-import React, { useEffect, useMemo } from 'react';
+import React, { useMemo } from 'react';
import {
ResponsiveContainer,
LineChart,
@@ -19,7 +17,8 @@ import {
TooltipProps
} from 'recharts';
import { NameType, ValueType } from 'recharts/types/component/DefaultTooltipContent';
-import { UnitType } from '../index';
+import { UnitType, UsageFilterParams } from './type';
+import dayjs from 'dayjs';
export type usageFormType = {
date: string;
@@ -53,60 +52,57 @@ const CustomTooltip = ({ active, payload }: TooltipProps) =
return null;
};
-const UsageForm = ({
- dateRange,
- selectTmbIds,
- usageSources,
- unit,
+const UsageDashboard = ({
+ filterParams,
Tabs,
Selectors
}: {
- dateRange: DateRangeType;
- selectTmbIds: string[];
- usageSources: UsageSourceEnum[];
- unit: UnitType;
+ filterParams: UsageFilterParams;
Tabs: React.ReactNode;
Selectors: React.ReactNode;
}) => {
const { t } = useTranslation();
- const {
- run: getTotalPointsData,
- data: totalPoints,
- loading: totalPointsLoading
- } = useRequest2(
+ const { dateRange, selectTmbIds, usageSources, unit, isSelectAllSource, isSelectAllTmb } =
+ filterParams;
+
+ const { data: totalPoints = [], loading: totalPointsLoading } = useRequest2(
() =>
- getTotalPoints({
- dateStart: dateRange.from || new Date(),
- dateEnd: addDays(dateRange.to || new Date(), 1),
- teamMemberIds: selectTmbIds,
- sources: usageSources,
+ getDashboardData({
+ dateStart: dateRange.from
+ ? new Date(dateRange.from.setHours(0, 0, 0, 0))
+ : new Date(new Date().setHours(0, 0, 0, 0)),
+ dateEnd: dateRange.to
+ ? new Date(addDays(dateRange.to, 1).setHours(0, 0, 0, 0))
+ : new Date(addDays(new Date(), 1).setHours(0, 0, 0, 0)),
+ sources: isSelectAllSource ? undefined : usageSources,
+ teamMemberIds: isSelectAllTmb ? undefined : selectTmbIds,
unit
- }),
+ }).then((res) =>
+ res.map((item) => ({
+ ...item,
+ date: dayjs(item.date).format('YYYY-MM-DD')
+ }))
+ ),
{
- manual: true
+ manual: false,
+ refreshDeps: [filterParams]
}
);
const totalUsage = useMemo(() => {
- return totalPoints?.reduce((acc, curr) => acc + curr.totalPoints, 0);
+ return totalPoints.reduce((acc, curr) => acc + curr.totalPoints, 0);
}, [totalPoints]);
- useEffect(() => {
- if (selectTmbIds.length === 0 || usageSources.length === 0) return;
- getTotalPointsData();
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [usageSources, selectTmbIds.length, dateRange, unit]);
-
return (
<>
{Tabs}
- {Selectors}
-
+ {Selectors}
+
{`${t('account_usage:total_usage')}:`}
- {`${formatNumber(totalUsage || 0)} ${t('account_usage:points')}`}
+ {`${formatNumber(totalUsage)} ${t('account_usage:points')}`}
@@ -127,31 +123,13 @@ const UsageForm = ({
tickMargin={12}
tick={{ fontSize: '12px', color: '#667085', fontWeight: '500' }}
/>
- {
- const { width } = props;
- if (width < 500) {
- return [width * 0.2, width * 0.4, width * 0.6, width * 0.8];
- } else {
- return [
- width * 0.125,
- width * 0.25,
- width * 0.375,
- width * 0.5,
- width * 0.625,
- width * 0.75,
- width * 0.875
- ];
- }
- }}
- />
+
} />
@@ -161,4 +139,4 @@ const UsageForm = ({
);
};
-export default React.memo(UsageForm);
+export default React.memo(UsageDashboard);
diff --git a/projects/app/src/pages/account/usage/components/UsageDetail.tsx b/projects/app/src/pageComponents/account/usage/UsageDetail.tsx
similarity index 100%
rename from projects/app/src/pages/account/usage/components/UsageDetail.tsx
rename to projects/app/src/pageComponents/account/usage/UsageDetail.tsx
diff --git a/projects/app/src/pages/account/usage/components/UsageTable.tsx b/projects/app/src/pageComponents/account/usage/UsageTable.tsx
similarity index 55%
rename from projects/app/src/pages/account/usage/components/UsageTable.tsx
rename to projects/app/src/pageComponents/account/usage/UsageTable.tsx
index 5a0b788f7..00c9a2437 100644
--- a/projects/app/src/pages/account/usage/components/UsageTable.tsx
+++ b/projects/app/src/pageComponents/account/usage/UsageTable.tsx
@@ -11,115 +11,95 @@ import {
Tr
} from '@chakra-ui/react';
import { formatNumber } from '@fastgpt/global/common/math/tools';
-import { UsageSourceEnum, UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants';
+import { UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants';
import { UsageItemType } from '@fastgpt/global/support/wallet/usage/type';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
import MyBox from '@fastgpt/web/components/common/MyBox';
import dayjs from 'dayjs';
import { useTranslation } from 'next-i18next';
-import { useEffect, useState } from 'react';
+import React, { useMemo, useState } from 'react';
import Avatar from '@fastgpt/web/components/common/Avatar';
import { usePagination } from '@fastgpt/web/hooks/usePagination';
import { getUserUsages } from '@/web/support/wallet/usage/api';
-import { useSystem } from '@fastgpt/web/hooks/useSystem';
-import { DateRangeType } from '@fastgpt/web/components/common/DateRangePicker';
import { addDays } from 'date-fns';
-import { ExportModalParams } from './ExportModal';
import dynamic from 'next/dynamic';
-import { TeamMemberItemType } from '@fastgpt/global/support/user/team/type';
-import { useToast } from '@fastgpt/web/hooks/useToast';
+import { UsageFilterParams } from './type';
+import PopoverConfirm from '@fastgpt/web/components/common/MyPopover/PopoverConfirm';
+import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
+import { downloadFetch } from '@/web/common/system/utils';
const UsageDetail = dynamic(() => import('./UsageDetail'));
-const ExportModal = dynamic(() => import('./ExportModal'));
const UsageTableList = ({
- dateRange,
- selectTmbIds,
- usageSources,
- projectName,
- members,
- memberTotal,
- isSelectAllTmb,
+ filterParams,
Tabs,
Selectors
}: {
- dateRange: DateRangeType;
- selectTmbIds: string[];
- usageSources: UsageSourceEnum[];
- projectName: string;
- members: TeamMemberItemType[];
- memberTotal: number;
- isSelectAllTmb: boolean;
Tabs: React.ReactNode;
Selectors: React.ReactNode;
+ filterParams: UsageFilterParams;
}) => {
const { t } = useTranslation();
- const { isPc } = useSystem();
- const { toast } = useToast();
+
+ const { dateRange, selectTmbIds, isSelectAllTmb, usageSources, isSelectAllSource, projectName } =
+ filterParams;
+ const requestParans = useMemo(
+ () => ({
+ dateStart: dateRange.from || new Date(),
+ dateEnd: addDays(dateRange.to || new Date(), 1),
+ sources: isSelectAllSource ? undefined : usageSources,
+ teamMemberIds: isSelectAllTmb ? undefined : selectTmbIds,
+ projectName
+ }),
+ [
+ dateRange.from,
+ dateRange.to,
+ isSelectAllSource,
+ isSelectAllTmb,
+ projectName,
+ selectTmbIds,
+ usageSources
+ ]
+ );
const {
data: usages,
isLoading,
Pagination,
- getData,
total
} = usePagination(getUserUsages, {
- pageSize: isPc ? 20 : 10,
- params: {
- dateStart: dateRange.from || new Date(),
- dateEnd: addDays(dateRange.to || new Date(), 1),
- sources: usageSources,
- teamMemberIds: selectTmbIds,
- isSelectAllTmb,
- projectName
- },
- defaultRequest: false
+ pageSize: 20,
+ params: requestParans,
+ refreshDeps: [requestParans]
});
const [usageDetail, setUsageDetail] = useState();
- const [currentParams, setCurrentParams] = useState(null);
- useEffect(() => {
- if ((!isSelectAllTmb && selectTmbIds.length === 0) || usageSources.length === 0) return;
- getData(1);
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [usageSources, selectTmbIds.length, projectName, dateRange, isSelectAllTmb]);
+ const { runAsync: exportUsage } = useRequest2(
+ async () => {
+ await downloadFetch({
+ url: `/api/proApi/support/wallet/usage/exportUsage`,
+ filename: `usage.csv`,
+ body: requestParans
+ });
+ },
+ {
+ refreshDeps: [requestParans]
+ }
+ );
return (
<>
{Tabs}
-
+
{Selectors}
-
+ {t('common:Export')}}
+ showCancel
+ content={t('account_usage:export_confirm_tip', { total })}
+ onConfirm={exportUsage}
+ />
@@ -172,17 +152,8 @@ const UsageTableList = ({
{!!usageDetail && (
setUsageDetail(undefined)} />
)}
-
- {!!currentParams && (
- setCurrentParams(null)}
- params={currentParams}
- memberTotal={isSelectAllTmb ? memberTotal - selectTmbIds.length : selectTmbIds.length}
- total={total}
- />
- )}
>
);
};
-export default UsageTableList;
+export default React.memo(UsageTableList);
diff --git a/projects/app/src/pageComponents/account/usage/type.d.ts b/projects/app/src/pageComponents/account/usage/type.d.ts
new file mode 100644
index 000000000..21b3a8c0d
--- /dev/null
+++ b/projects/app/src/pageComponents/account/usage/type.d.ts
@@ -0,0 +1,13 @@
+import { DateRangeType } from '@fastgpt/web/components/common/DateRangePicker';
+
+export type UnitType = 'day' | 'month';
+
+export type UsageFilterParams = {
+ dateRange: DateRangeType;
+ selectTmbIds: string[];
+ isSelectAllTmb: boolean;
+ usageSources: UsageSourceEnum[];
+ isSelectAllSource: boolean;
+ projectName: string;
+ unit: UnitType;
+};
diff --git a/projects/app/src/pageComponents/app/detail/ExportConfigPopover.tsx b/projects/app/src/pageComponents/app/detail/ExportConfigPopover.tsx
index 776b97d11..7e141b172 100644
--- a/projects/app/src/pageComponents/app/detail/ExportConfigPopover.tsx
+++ b/projects/app/src/pageComponents/app/detail/ExportConfigPopover.tsx
@@ -3,7 +3,7 @@ import { Box, Flex } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { filterSensitiveNodesData } from '@/web/core/workflow/utils';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import MyPopover from '@fastgpt/web/components/common/MyPopover';
import { fileDownload } from '@/web/common/file/utils';
import { AppChatConfigType, AppSimpleEditFormType } from '@fastgpt/global/core/app/type';
diff --git a/projects/app/src/pages/app/detail/components/InfoModal.tsx b/projects/app/src/pageComponents/app/detail/InfoModal.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/InfoModal.tsx
rename to projects/app/src/pageComponents/app/detail/InfoModal.tsx
index f82b1e931..3d0c1beb4 100644
--- a/projects/app/src/pages/app/detail/components/InfoModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/InfoModal.tsx
@@ -1,6 +1,6 @@
import CollaboratorContextProvider from '@/components/support/permission/MemberManager/context';
import ResumeInherit from '@/components/support/permission/ResumeInheritText';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from './context';
import { useSelectFile } from '@/web/common/file/hooks/useSelectFile';
import { useI18n } from '@/web/context/I18n';
import { resumeInheritPer } from '@/web/core/app/api';
diff --git a/projects/app/src/pages/app/detail/components/Logs/DetailLogsModal.tsx b/projects/app/src/pageComponents/app/detail/Logs/DetailLogsModal.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/Logs/DetailLogsModal.tsx
rename to projects/app/src/pageComponents/app/detail/Logs/DetailLogsModal.tsx
index 0098e8cec..4a20b9d87 100644
--- a/projects/app/src/pages/app/detail/components/Logs/DetailLogsModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/Logs/DetailLogsModal.tsx
@@ -11,7 +11,7 @@ import LightRowTabs from '@fastgpt/web/components/common/Tabs/LightRowTabs';
import { PluginRunBoxTabEnum } from '@/components/core/chat/ChatContainer/PluginRunBox/constants';
import CloseIcon from '@fastgpt/web/components/common/Icon/close';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
-import { PcHeader } from '@/pages/chat/components/ChatHeader';
+import { PcHeader } from '@/pageComponents/chat/ChatHeader';
import { GetChatTypeEnum } from '@/global/core/chat/constants';
import ChatItemContextProvider, { ChatItemContext } from '@/web/core/chat/context/chatItemContext';
import ChatRecordContextProvider, {
diff --git a/projects/app/src/pages/app/detail/components/Logs/index.tsx b/projects/app/src/pageComponents/app/detail/Logs/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Logs/index.tsx
rename to projects/app/src/pageComponents/app/detail/Logs/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Plugin/Header.tsx b/projects/app/src/pageComponents/app/detail/Plugin/Header.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Plugin/Header.tsx
rename to projects/app/src/pageComponents/app/detail/Plugin/Header.tsx
diff --git a/projects/app/src/pages/app/detail/components/Plugin/index.tsx b/projects/app/src/pageComponents/app/detail/Plugin/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Plugin/index.tsx
rename to projects/app/src/pageComponents/app/detail/Plugin/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/API/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/API/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/API/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/API/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/DingTalk/DingTalkEditModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/DingTalk/DingTalkEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/DingTalk/DingTalkEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/DingTalk/DingTalkEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/DingTalk/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/DingTalk/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/DingTalk/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/DingTalk/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/FeiShu/FeiShuEditModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/FeiShu/FeiShuEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/FeiShu/FeiShuEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/FeiShu/FeiShuEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/FeiShu/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/FeiShu/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/FeiShu/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/Link/SelectUsingWayModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/Link/SelectUsingWayModal.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/Publish/Link/SelectUsingWayModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/Link/SelectUsingWayModal.tsx
index 1fad9055f..2844f43c8 100644
--- a/projects/app/src/pages/app/detail/components/Publish/Link/SelectUsingWayModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/Publish/Link/SelectUsingWayModal.tsx
@@ -6,7 +6,7 @@ import { Box, Flex, FlexProps, Grid, ModalBody, Switch, useTheme } from '@chakra
import MyRadio from '@/components/common/MyRadio';
import { useForm } from 'react-hook-form';
import MyIcon from '@fastgpt/web/components/common/Icon';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useSelectFile } from '@/web/common/file/hooks/useSelectFile';
import { fileToBase64 } from '@/web/common/file/utils';
import { useSystemStore } from '@/web/common/system/useSystemStore';
diff --git a/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/Link/index.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/Publish/Link/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/Link/index.tsx
index 27cd28135..eb53eea04 100644
--- a/projects/app/src/pages/app/detail/components/Publish/Link/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/Publish/Link/index.tsx
@@ -28,7 +28,7 @@ import {
putShareChat
} from '@/web/support/outLink/api';
import { formatTimeToChatTime } from '@fastgpt/global/common/string/time';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useForm } from 'react-hook-form';
import { defaultOutLinkForm } from '@/web/core/app/constants';
import type { OutLinkEditType, OutLinkSchema } from '@fastgpt/global/support/outLink/type.d';
diff --git a/projects/app/src/pages/app/detail/components/Publish/OffiAccount/OffiAccountEditModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/OffiAccount/OffiAccountEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/OffiAccount/OffiAccountEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/OffiAccount/OffiAccountEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/OffiAccount/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/OffiAccount/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/OffiAccount/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/OffiAccount/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/Wecom/WecomEditModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/Wecom/WecomEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/Wecom/WecomEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/Wecom/WecomEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/Wecom/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/Wecom/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/Wecom/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/Wecom/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/components/BasicInfo.tsx b/projects/app/src/pageComponents/app/detail/Publish/components/BasicInfo.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/components/BasicInfo.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/components/BasicInfo.tsx
diff --git a/projects/app/src/pages/app/detail/components/Publish/components/showShareLinkModal.tsx b/projects/app/src/pageComponents/app/detail/Publish/components/showShareLinkModal.tsx
similarity index 96%
rename from projects/app/src/pages/app/detail/components/Publish/components/showShareLinkModal.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/components/showShareLinkModal.tsx
index 0b0dfbd36..5826cb12d 100644
--- a/projects/app/src/pages/app/detail/components/Publish/components/showShareLinkModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/Publish/components/showShareLinkModal.tsx
@@ -1,4 +1,4 @@
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { Box, Image, Flex, ModalBody } from '@chakra-ui/react';
import MyModal from '@fastgpt/web/components/common/MyModal';
import MyIcon from '@fastgpt/web/components/common/Icon';
diff --git a/projects/app/src/pages/app/detail/components/Publish/index.tsx b/projects/app/src/pageComponents/app/detail/Publish/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Publish/index.tsx
rename to projects/app/src/pageComponents/app/detail/Publish/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/PublishHistoriesSlider.tsx b/projects/app/src/pageComponents/app/detail/PublishHistoriesSlider.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/PublishHistoriesSlider.tsx
rename to projects/app/src/pageComponents/app/detail/PublishHistoriesSlider.tsx
diff --git a/projects/app/src/pages/app/detail/components/RouteTab.tsx b/projects/app/src/pageComponents/app/detail/RouteTab.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/RouteTab.tsx
rename to projects/app/src/pageComponents/app/detail/RouteTab.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/AppCard.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/AppCard.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/SimpleApp/AppCard.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/AppCard.tsx
index 59c454322..cef63d3dc 100644
--- a/projects/app/src/pages/app/detail/components/SimpleApp/AppCard.tsx
+++ b/projects/app/src/pageComponents/app/detail/SimpleApp/AppCard.tsx
@@ -16,7 +16,7 @@ import Avatar from '@fastgpt/web/components/common/Avatar';
import MyIcon from '@fastgpt/web/components/common/Icon';
import TagsEditModal from '../TagsEditModal';
import { useSystemStore } from '@/web/common/system/useSystemStore';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { useContextSelector } from 'use-context-selector';
import MyMenu from '@fastgpt/web/components/common/MyMenu';
import MyModal from '@fastgpt/web/components/common/MyModal';
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/ChatTest.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/ChatTest.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/ChatTest.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/ChatTest.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/Edit.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/Edit.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/Edit.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/Edit.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/EditForm.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/EditForm.tsx
index eb083263c..44d407692 100644
--- a/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx
+++ b/projects/app/src/pageComponents/app/detail/SimpleApp/EditForm.tsx
@@ -27,7 +27,7 @@ import type { SettingAIDataType } from '@fastgpt/global/core/app/type.d';
import { TTSTypeEnum } from '@/web/core/app/constants';
import { workflowSystemVariables } from '@/web/core/app/utils';
import { useContextSelector } from 'use-context-selector';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import VariableTip from '@/components/common/Textarea/MyTextarea/VariableTip';
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/Header.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/Header.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/Header.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/Header.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/components/ConfigToolModal.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/components/ConfigToolModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/components/ConfigToolModal.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/components/ConfigToolModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/components/ToolSelect.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/components/ToolSelect.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/components/ToolSelect.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/components/ToolSelect.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/components/ToolSelectModal.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/components/ToolSelectModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/components/ToolSelectModal.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/components/ToolSelectModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/index.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/index.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/styles.module.scss b/projects/app/src/pageComponents/app/detail/SimpleApp/styles.module.scss
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/styles.module.scss
rename to projects/app/src/pageComponents/app/detail/SimpleApp/styles.module.scss
diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/useSnapshots.tsx b/projects/app/src/pageComponents/app/detail/SimpleApp/useSnapshots.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/SimpleApp/useSnapshots.tsx
rename to projects/app/src/pageComponents/app/detail/SimpleApp/useSnapshots.tsx
diff --git a/projects/app/src/pages/app/detail/components/TagsEditModal.tsx b/projects/app/src/pageComponents/app/detail/TagsEditModal.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/TagsEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/TagsEditModal.tsx
index 20a322864..db33023de 100644
--- a/projects/app/src/pages/app/detail/components/TagsEditModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/TagsEditModal.tsx
@@ -23,7 +23,7 @@ import { useRequest } from '@fastgpt/web/hooks/useRequest';
import { getTeamsTags } from '@/web/support/user/team/api';
import { useQuery } from '@tanstack/react-query';
import { useContextSelector } from 'use-context-selector';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from './context';
const TagsEditModal = ({ onClose }: { onClose: () => void }) => {
const { t } = useTranslation();
diff --git a/projects/app/src/pages/app/detail/components/Workflow/Header.tsx b/projects/app/src/pageComponents/app/detail/Workflow/Header.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Workflow/Header.tsx
rename to projects/app/src/pageComponents/app/detail/Workflow/Header.tsx
diff --git a/projects/app/src/pages/app/detail/components/Workflow/components/SaveButton.tsx b/projects/app/src/pageComponents/app/detail/Workflow/components/SaveButton.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Workflow/components/SaveButton.tsx
rename to projects/app/src/pageComponents/app/detail/Workflow/components/SaveButton.tsx
diff --git a/projects/app/src/pages/app/detail/components/Workflow/index.tsx b/projects/app/src/pageComponents/app/detail/Workflow/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/Workflow/index.tsx
rename to projects/app/src/pageComponents/app/detail/Workflow/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/AppCard.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/AppCard.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/AppCard.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/AppCard.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/ChatTest.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/ChatTest.tsx
similarity index 97%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/ChatTest.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/ChatTest.tsx
index 4834f0970..94c6057a0 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/ChatTest.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/ChatTest.tsx
@@ -8,8 +8,8 @@ import { useTranslation } from 'next-i18next';
import { StoreEdgeItemType } from '@fastgpt/global/core/workflow/type/edge';
import { useContextSelector } from 'use-context-selector';
-import { AppContext } from '@/pages/app/detail/components/context';
-import { useChatTest } from '@/pages/app/detail/components/useChatTest';
+import { AppContext } from '@/pageComponents/app/detail/context';
+import { useChatTest } from '../../useChatTest';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import LightRowTabs from '@fastgpt/web/components/common/Tabs/LightRowTabs';
import { PluginRunBoxTabEnum } from '@/components/core/chat/ChatContainer/PluginRunBox/constants';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/ImportSettings.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/ImportSettings.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/ImportSettings.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/ImportSettings.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/NodeTemplatesModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/SelectAppModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/SelectAppModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/SelectAppModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/SelectAppModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/ButtonEdge.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/ButtonEdge.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/ButtonEdge.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/ButtonEdge.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/Container.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/Container.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/Container.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/Container.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/ContextMenu.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/ContextMenu.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/ContextMenu.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/ContextMenu.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/Divider.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/Divider.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/Divider.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/Divider.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/FlowController.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/FlowController.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/FlowController.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/FlowController.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/HelperLines.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/HelperLines.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/HelperLines.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/HelperLines.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/IOTitle.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/IOTitle.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/IOTitle.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/IOTitle.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/SaveAndPublish.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/SaveAndPublish.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/SaveAndPublish.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/SaveAndPublish.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/index.module.scss b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/index.module.scss
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/components/index.module.scss
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/components/index.module.scss
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useDebug.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useDebug.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useKeyboard.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useKeyboard.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useKeyboard.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useKeyboard.tsx
index 8400c4274..92df705ff 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useKeyboard.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useKeyboard.tsx
@@ -1,6 +1,6 @@
import { useCallback } from 'react';
import { getNanoid } from '@fastgpt/global/common/string/tools';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import { useTranslation } from 'next-i18next';
import { Node, useKeyPress } from 'reactflow';
import { FlowNodeItemType } from '@fastgpt/global/core/workflow/type/node';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useUtils.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useUtils.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useUtils.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useUtils.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/hooks/useWorkflow.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/hooks/useWorkflow.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoop.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoop.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoop.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoop.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoopEnd.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoopEnd.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoopEnd.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoopEnd.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoopStart.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoopStart.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/Loop/NodeLoopStart.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/Loop/NodeLoopStart.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeAnswer.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeAnswer.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeAnswer.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeAnswer.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeCQNode.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCQNode.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeCQNode.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCQNode.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeCode.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeCode.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeCode.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeComment.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeComment.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeComment.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeEmpty.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeEmpty.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeEmpty.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeEmpty.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeExtract/ExtractFieldModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeExtract/ExtractFieldModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeExtract/ExtractFieldModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeExtract/ExtractFieldModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeExtract/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeExtract/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeExtract/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeExtract/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeFormInput/InputFormEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeFormInput/InputFormEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeFormInput/InputFormEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeFormInput/InputFormEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeFormInput/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeFormInput/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeFormInput/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeFormInput/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeHttp/CurlImportModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/CurlImportModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeHttp/CurlImportModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/CurlImportModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
index e19f2af13..9a0a5bcc0 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeHttp/index.tsx
@@ -44,7 +44,7 @@ import IOTitle from '../../components/IOTitle';
import { useContextSelector } from 'use-context-selector';
import { WorkflowContext } from '../../../context';
import { useCreation, useMemoizedFn } from 'ahooks';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
import { getEditorVariables } from '../../../utils';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx
index e1017d740..0a0de9788 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/ListItem.tsx
@@ -30,7 +30,7 @@ import { SourceHandle } from '../render/Handle';
import { Position, useReactFlow } from 'reactflow';
import { getRefData } from '@/web/core/workflow/utils';
import DragIcon from '@fastgpt/web/components/common/DndDrag/DragIcon';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { useI18n } from '@/web/context/I18n';
const ListItem = ({
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeIfElse/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeLaf.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeLaf.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeLaf.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeLaf.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx
index 0098f7b05..b969230e3 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/InputTypeConfig.tsx
@@ -18,7 +18,9 @@ import {
FlowValueTypeMap
} from '@fastgpt/global/core/workflow/node/constant';
import MySelect from '@fastgpt/web/components/common/MySelect';
-import MultipleSelect from '@fastgpt/web/components/common/MySelect/MultipleSelect';
+import MultipleSelect, {
+ useMultipleSelect
+} from '@fastgpt/web/components/common/MySelect/MultipleSelect';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import JsonEditor from '@fastgpt/web/components/common/Textarea/JsonEditor';
import React, { useMemo } from 'react';
@@ -79,10 +81,13 @@ const InputTypeConfig = ({
const maxLength = watch('maxLength');
const max = watch('max');
const min = watch('min');
- const selectValueTypeList = watch('customInputConfig.selectValueTypeList');
const defaultValue = watch('defaultValue');
const valueType = watch('valueType');
+ const selectValueTypeList = watch('customInputConfig.selectValueTypeList');
+ const { isSelectAll: isSelectAllValueType, setIsSelectAll: setIsSelectAllValueType } =
+ useMultipleSelect(selectValueTypeList, false);
+
const toolDescription = watch('toolDescription');
const isToolInput = !!toolDescription;
@@ -365,6 +370,8 @@ const InputTypeConfig = ({
onSelect={(e) => {
setValue('customInputConfig.selectValueTypeList', e);
}}
+ isSelectAll={isSelectAllValueType}
+ setIsSelectAll={setIsSelectAllValueType}
/>
>
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/NodePluginConfig.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/NodePluginConfig.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/NodePluginConfig.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/NodePluginConfig.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginInput.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginInput.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginInput.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginInput.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutput.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutput.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutput.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutput.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutputEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutputEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutputEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/PluginOutputEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/VariableTable.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/VariableTable.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodePluginIO/VariableTable.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodePluginIO/VariableTable.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeSimple.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSimple.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeSimple.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSimple.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx
index d7c20432e..8f9660224 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeSystemConfig.tsx
@@ -21,7 +21,7 @@ import {
} from '@fastgpt/global/core/app/type';
import { useMemoizedFn } from 'ahooks';
import VariableEdit from '@/components/core/app/VariableEdit';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import WelcomeTextConfig from '@/components/core/app/WelcomeTextConfig';
import FileSelect from '@/components/core/app/FileSelect';
import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeToolParams/ToolParamsEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolParams/ToolParamsEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeToolParams/ToolParamsEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolParams/ToolParamsEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeToolParams/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolParams/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeToolParams/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeToolParams/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeTools.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeTools.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeTools.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeTools.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeUserSelect.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeUserSelect.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeUserSelect.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeUserSelect.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx
index 4be1f4dc4..0e5689678 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeVariableUpdate.tsx
@@ -29,7 +29,7 @@ import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
import { ReferenceItemValueType, ReferenceValueType } from '@fastgpt/global/core/workflow/type/io';
import { ReferSelector, useReference } from './render/RenderInput/templates/Reference';
import { getRefData } from '@/web/core/workflow/utils';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import PromptEditor from '@fastgpt/web/components/common/Textarea/PromptEditor';
import { useCreation, useMemoizedFn } from 'ahooks';
import { getEditorVariables } from '../../utils';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx
similarity index 97%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx
index 41ee01117..d61d90a39 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/NodeWorkflowStart.tsx
@@ -12,7 +12,7 @@ import { useCreation } from 'ahooks';
import { FlowNodeOutputItemType } from '@fastgpt/global/core/workflow/type/io';
import { FlowNodeOutputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { workflowSystemVariables } from '@/web/core/app/utils';
import {
formatEditorVariablePickerIcon,
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/ConnectionHandle.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/ConnectionHandle.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/ConnectionHandle.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/ConnectionHandle.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx
similarity index 97%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx
index 428dea606..e7bc2f7d9 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/ToolHandle.tsx
@@ -5,7 +5,7 @@ import { useTranslation } from 'next-i18next';
import { Connection, Handle, Position } from 'reactflow';
import { useCallback, useMemo } from 'react';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { WorkflowNodeEdgeContext } from '../../../../context/workflowInitContext';
const handleSize = '16px';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/style.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/style.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/Handle/style.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/Handle/style.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/NodeCard.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/NodeCard.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/FieldEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/FieldEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/FieldEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/FieldEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx
similarity index 96%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx
index b372f2655..9a53ce94d 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/Label.tsx
@@ -7,7 +7,7 @@ import NodeInputSelect from '@fastgpt/web/components/core/workflow/NodeInputSele
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
import ValueTypeLabel from '../ValueTypeLabel';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/index.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/index.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx
index 36ab6454d..30799758e 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/DynamicInputs/index.tsx
@@ -7,7 +7,7 @@ import dynamic from 'next/dynamic';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { FlowNodeInputItemType, ReferenceValueType } from '@fastgpt/global/core/workflow/type/io';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { defaultInput } from '../../FieldEditModal';
import { getInputComponentProps } from '@fastgpt/global/core/workflow/node/io/utils';
import { ReferSelector, useReference } from '../Reference';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx
similarity index 92%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx
index 4636e74b6..786d6504c 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/JsonEditor.tsx
@@ -3,11 +3,11 @@ import type { RenderInputProps } from '../type';
import JSONEditor from '@fastgpt/web/components/common/Textarea/JsonEditor';
import { formatEditorVariablePickerIcon } from '@fastgpt/global/core/workflow/utils';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { getWorkflowGlobalVariables } from '@/web/core/workflow/utils';
import { useCreation } from 'ahooks';
import { useTranslation } from 'next-i18next';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
const JsonEditor = ({ inputs = [], item, nodeId }: RenderInputProps) => {
const { t } = useTranslation();
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx
similarity index 90%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx
index 2a7b8416c..35db09e7b 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/NumberInput.tsx
@@ -1,7 +1,7 @@
import React, { useMemo } from 'react';
import type { RenderInputProps } from '../type';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import MyNumberInput from '@fastgpt/web/components/common/Input/NumberInput';
const NumberInputRender = ({ item, nodeId }: RenderInputProps) => {
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx
index 6df07b6f1..9c5775da5 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx
@@ -18,9 +18,9 @@ import type {
} from '@fastgpt/global/core/workflow/type/io';
import dynamic from 'next/dynamic';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { WorkflowNodeEdgeContext } from '../../../../../context/workflowInitContext';
const MultipleRowSelect = dynamic(() =>
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx
similarity index 90%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx
index 7a4aa5093..10be85625 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Select.tsx
@@ -1,7 +1,7 @@
import React, { useMemo } from 'react';
import type { RenderInputProps } from '../type';
import MySelect from '@fastgpt/web/components/common/MySelect';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { useContextSelector } from 'use-context-selector';
const SelectRender = ({ item, nodeId }: RenderInputProps) => {
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx
similarity index 96%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx
index a7a914599..6bcf640d6 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectApp.tsx
@@ -6,7 +6,7 @@ import Avatar from '@fastgpt/web/components/common/Avatar';
import SelectAppModal from '../../../../SelectAppModal';
import { useTranslation } from 'next-i18next';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { getAppDetailById } from '@/web/core/app/api';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx
index b4bdb70e8..89d2aa677 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDataset.tsx
@@ -11,7 +11,7 @@ import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constants';
import dynamic from 'next/dynamic';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
similarity index 97%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
index e3834f6df..cd5ebeba7 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
@@ -10,7 +10,7 @@ import DatasetParamsModal, { DatasetParamsProps } from '@/components/core/app/Da
import { useSystemStore } from '@/web/common/system/useSystemStore';
import SearchParamsTip from '@/components/core/dataset/SearchParamsTip';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { getWebLLMModel } from '@/web/common/system/utils';
import { defaultDatasetMaxTokens } from '@fastgpt/global/core/app/constants';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx
similarity index 94%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx
index b4c3dfca9..870e57e5c 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectLLMModel.tsx
@@ -4,7 +4,7 @@ import { useSystemStore } from '@/web/common/system/useSystemStore';
import { llmModelTypeFilterMap } from '@fastgpt/global/core/ai/constants';
import AIModelSelector from '@/components/Select/AIModelSelector';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
const SelectAiModelRender = ({ item, nodeId }: RenderInputProps) => {
const { llmModelList } = useSystemStore();
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx
similarity index 95%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx
index 13038c26d..5fbb8601e 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingLLMModel.tsx
@@ -4,7 +4,7 @@ import type { SettingAIDataType } from '@fastgpt/global/core/app/type.d';
import SettingLLMModel from '@/components/core/ai/SettingLLMModel';
import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
const SelectAiModelRender = ({ item, inputs = [], nodeId }: RenderInputProps) => {
const onChangeNode = useContextSelector(WorkflowContext, (v) => v.onChangeNode);
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx
index 29a847603..846ed3105 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SettingQuotePrompt.tsx
@@ -19,10 +19,10 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import Reference from './Reference';
import ValueTypeLabel from '../../ValueTypeLabel';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { getWorkflowGlobalVariables } from '@/web/core/workflow/utils';
import { useCreation } from 'ahooks';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import { datasetQuoteValueDesc } from '@fastgpt/global/core/workflow/node/constant';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx
similarity index 92%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx
index bcbbcd620..451c61239 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Slider.tsx
@@ -4,7 +4,7 @@ import { useTranslation } from 'next-i18next';
import { Box } from '@chakra-ui/react';
import MySlider from '@/components/Slider';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
const SliderRender = ({ item, nodeId }: RenderInputProps) => {
const { t } = useTranslation();
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx
similarity index 89%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx
index 5520d91af..e5ddc8002 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Switch.tsx
@@ -2,7 +2,7 @@ import React, { useMemo } from 'react';
import type { RenderInputProps } from '../type';
import { Switch } from '@chakra-ui/react';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
const SwitchRender = ({ item, nodeId }: RenderInputProps) => {
const onChangeNode = useContextSelector(WorkflowContext, (v) => v.onChangeNode);
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx
similarity index 92%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx
index a7c82f363..d2895497f 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/TextInput.tsx
@@ -3,9 +3,9 @@ import type { RenderInputProps } from '../type';
import { useTranslation } from 'next-i18next';
import PromptEditor from '@fastgpt/web/components/common/Textarea/PromptEditor';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { useCreation } from 'ahooks';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { getEditorVariables } from '../../../../../utils';
import { WorkflowNodeEdgeContext } from '../../../../../context/workflowInitContext';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx
similarity index 94%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx
index d190e6fb2..3c18d23f2 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Textarea.tsx
@@ -3,9 +3,9 @@ import type { RenderInputProps } from '../type';
import { useTranslation } from 'next-i18next';
import PromptEditor from '@fastgpt/web/components/common/Textarea/PromptEditor';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { useCreation } from 'ahooks';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import { getEditorVariables } from '../../../../../utils';
import { WorkflowNodeEdgeContext } from '../../../../../context/workflowInitContext';
import { useSystemStore } from '@/web/common/system/useSystemStore';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/type.d.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/type.d.ts
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/type.d.ts
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/type.d.ts
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/FieldEditModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/FieldEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/FieldEditModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/FieldEditModal.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/Label.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/Label.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/Label.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/Label.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx
index 35ef4609c..22f040f85 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/index.tsx
@@ -9,7 +9,7 @@ import { SmallAddIcon } from '@chakra-ui/icons';
import VariableTable from '../../NodePluginIO/VariableTable';
import { FlowValueTypeMap } from '@fastgpt/global/core/workflow/node/constant';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import dynamic from 'next/dynamic';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/type.d.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/type.d.ts
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderOutput/type.d.ts
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderOutput/type.d.ts
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx
similarity index 98%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx
index dfadba769..a1a87f630 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/EditFieldModal.tsx
@@ -18,7 +18,7 @@ import { useRequest } from '@fastgpt/web/hooks/useRequest';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { FlowNodeInputItemType } from '@fastgpt/global/core/workflow/type/io.d';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import { toolValueTypeList } from '@fastgpt/global/core/workflow/constants';
import { WorkflowIOValueTypeEnum } from '@fastgpt/global/core/workflow/constants';
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx
similarity index 97%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx
index cf6513739..fb7e478ca 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/index.tsx
@@ -18,7 +18,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import dynamic from 'next/dynamic';
import { defaultEditFormData } from './EditFieldModal';
import { useContextSelector } from 'use-context-selector';
-import { WorkflowContext } from '@/pages/app/detail/components/WorkflowComponents/context';
+import { WorkflowContext } from '@/pageComponents/app/detail/WorkflowComponents/context';
import IOTitle from '../../../components/IOTitle';
import { SmallAddIcon } from '@chakra-ui/icons';
import { FlowNodeInputTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/type.d.ts b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/type.d.ts
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderToolInput/type.d.ts
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderToolInput/type.d.ts
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/ValueTypeLabel.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/ValueTypeLabel.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/ValueTypeLabel.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/ValueTypeLabel.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/constants.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/constants.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/constants.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/constants.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/context/index.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/index.tsx
similarity index 99%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/context/index.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/context/index.tsx
index f2fe96350..5b8ff1f50 100644
--- a/projects/app/src/pages/app/detail/components/WorkflowComponents/context/index.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/index.tsx
@@ -23,7 +23,7 @@ import { defaultRunningStatus } from '../constants';
import { checkNodeRunStatus } from '@fastgpt/global/core/workflow/runtime/utils';
import { getHandleId } from '@fastgpt/global/core/workflow/utils';
import { AppChatConfigType } from '@fastgpt/global/core/app/type';
-import { AppContext } from '@/pages/app/detail/components/context';
+import { AppContext } from '@/pageComponents/app/detail/context';
import ChatTest from '../Flow/ChatTest';
import { useDisclosure } from '@chakra-ui/react';
import { uiWorkflow2StoreWorkflow } from '../utils';
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowEventContext.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowEventContext.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowEventContext.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowEventContext.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowInitContext.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowInitContext.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowInitContext.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowInitContext.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowStatusContext.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowStatusContext.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/context/workflowStatusContext.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/context/workflowStatusContext.tsx
diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/utils.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/WorkflowComponents/utils.tsx
rename to projects/app/src/pageComponents/app/detail/WorkflowComponents/utils.tsx
diff --git a/projects/app/src/pages/app/detail/components/constants.tsx b/projects/app/src/pageComponents/app/detail/constants.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/constants.tsx
rename to projects/app/src/pageComponents/app/detail/constants.tsx
diff --git a/projects/app/src/pages/app/detail/components/context.tsx b/projects/app/src/pageComponents/app/detail/context.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/context.tsx
rename to projects/app/src/pageComponents/app/detail/context.tsx
diff --git a/projects/app/src/pages/app/detail/components/useChatTest.tsx b/projects/app/src/pageComponents/app/detail/useChatTest.tsx
similarity index 100%
rename from projects/app/src/pages/app/detail/components/useChatTest.tsx
rename to projects/app/src/pageComponents/app/detail/useChatTest.tsx
diff --git a/projects/app/src/pages/app/list/components/CreateModal.tsx b/projects/app/src/pageComponents/app/list/CreateModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/list/components/CreateModal.tsx
rename to projects/app/src/pageComponents/app/list/CreateModal.tsx
diff --git a/projects/app/src/pages/app/list/components/HttpPluginEditModal.tsx b/projects/app/src/pageComponents/app/list/HttpPluginEditModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/list/components/HttpPluginEditModal.tsx
rename to projects/app/src/pageComponents/app/list/HttpPluginEditModal.tsx
diff --git a/projects/app/src/pages/app/list/components/JsonImportModal.tsx b/projects/app/src/pageComponents/app/list/JsonImportModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/list/components/JsonImportModal.tsx
rename to projects/app/src/pageComponents/app/list/JsonImportModal.tsx
diff --git a/projects/app/src/pages/app/list/components/List.tsx b/projects/app/src/pageComponents/app/list/List.tsx
similarity index 99%
rename from projects/app/src/pages/app/list/components/List.tsx
rename to projects/app/src/pageComponents/app/list/List.tsx
index 66af89fbe..234ba48b2 100644
--- a/projects/app/src/pages/app/list/components/List.tsx
+++ b/projects/app/src/pageComponents/app/list/List.tsx
@@ -24,7 +24,7 @@ import {
postUpdateAppCollaborators
} from '@/web/core/app/api/collaborator';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
-import AppTypeTag from '@/pages/app/list/components/TypeTag';
+import AppTypeTag from './TypeTag';
const EditResourceModal = dynamic(() => import('@/components/common/Modal/EditResourceModal'));
const ConfigPerModal = dynamic(() => import('@/components/support/permission/ConfigPerModal'));
diff --git a/projects/app/src/pages/app/list/components/TemplateMarketModal.tsx b/projects/app/src/pageComponents/app/list/TemplateMarketModal.tsx
similarity index 100%
rename from projects/app/src/pages/app/list/components/TemplateMarketModal.tsx
rename to projects/app/src/pageComponents/app/list/TemplateMarketModal.tsx
diff --git a/projects/app/src/pages/app/list/components/TypeTag.tsx b/projects/app/src/pageComponents/app/list/TypeTag.tsx
similarity index 95%
rename from projects/app/src/pages/app/list/components/TypeTag.tsx
rename to projects/app/src/pageComponents/app/list/TypeTag.tsx
index 63111dfff..9fa4d3e6e 100644
--- a/projects/app/src/pages/app/list/components/TypeTag.tsx
+++ b/projects/app/src/pageComponents/app/list/TypeTag.tsx
@@ -1,6 +1,5 @@
import React, { useRef } from 'react';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
-import MyTag from '@fastgpt/web/components/common/Tag/index';
import { useI18n } from '@/web/context/I18n';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { Box, Flex } from '@chakra-ui/react';
diff --git a/projects/app/src/pages/app/list/components/context.tsx b/projects/app/src/pageComponents/app/list/context.tsx
similarity index 100%
rename from projects/app/src/pages/app/list/components/context.tsx
rename to projects/app/src/pageComponents/app/list/context.tsx
diff --git a/projects/app/src/pages/chat/components/ChatHeader.tsx b/projects/app/src/pageComponents/chat/ChatHeader.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/ChatHeader.tsx
rename to projects/app/src/pageComponents/chat/ChatHeader.tsx
diff --git a/projects/app/src/pages/chat/components/ChatHistorySlider.tsx b/projects/app/src/pageComponents/chat/ChatHistorySlider.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/ChatHistorySlider.tsx
rename to projects/app/src/pageComponents/chat/ChatHistorySlider.tsx
diff --git a/projects/app/src/pages/chat/components/CustomPluginRunBox.tsx b/projects/app/src/pageComponents/chat/CustomPluginRunBox.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/CustomPluginRunBox.tsx
rename to projects/app/src/pageComponents/chat/CustomPluginRunBox.tsx
diff --git a/projects/app/src/pages/chat/components/Empty.tsx b/projects/app/src/pageComponents/chat/Empty.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/Empty.tsx
rename to projects/app/src/pageComponents/chat/Empty.tsx
diff --git a/projects/app/src/pages/chat/components/SliderApps.tsx b/projects/app/src/pageComponents/chat/SliderApps.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/SliderApps.tsx
rename to projects/app/src/pageComponents/chat/SliderApps.tsx
diff --git a/projects/app/src/pages/chat/components/ToolMenu.tsx b/projects/app/src/pageComponents/chat/ToolMenu.tsx
similarity index 100%
rename from projects/app/src/pages/chat/components/ToolMenu.tsx
rename to projects/app/src/pageComponents/chat/ToolMenu.tsx
diff --git a/projects/app/src/pages/dataset/component/ApiDatasetForm.tsx b/projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/component/ApiDatasetForm.tsx
rename to projects/app/src/pageComponents/dataset/ApiDatasetForm.tsx
diff --git a/projects/app/src/pages/dataset/component/EditFolderModal.tsx b/projects/app/src/pageComponents/dataset/EditFolderModal.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/component/EditFolderModal.tsx
rename to projects/app/src/pageComponents/dataset/EditFolderModal.tsx
diff --git a/projects/app/src/pages/dataset/component/MemberManager.tsx b/projects/app/src/pageComponents/dataset/MemberManager.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/component/MemberManager.tsx
rename to projects/app/src/pageComponents/dataset/MemberManager.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/Context.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Context.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/Context.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/Context.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/EmptyCollectionTip.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/EmptyCollectionTip.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/EmptyCollectionTip.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/EmptyCollectionTip.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx
index 45ecf4ed6..1462ab563 100644
--- a/projects/app/src/pages/dataset/detail/components/CollectionCard/Header.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/CollectionCard/Header.tsx
@@ -30,8 +30,8 @@ import {
DatasetTypeMap,
DatasetStatusEnum
} from '@fastgpt/global/core/dataset/constants';
-import EditFolderModal, { useEditFolder } from '../../../component/EditFolderModal';
-import { TabEnum } from '../../index';
+import EditFolderModal, { useEditFolder } from '../../EditFolderModal';
+import { TabEnum } from '../../../../pages/dataset/detail/index';
import ParentPath from '@/components/common/ParentPaths';
import dynamic from 'next/dynamic';
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/HeaderTagPopOver.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/HeaderTagPopOver.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/HeaderTagPopOver.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/TagManageModal.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/TagManageModal.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/TagManageModal.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/TagsPopOver.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/TagsPopOver.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/TagsPopOver.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/WebsiteConfig.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/WebsiteConfig.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/WebsiteConfig.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/WebsiteConfig.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx b/projects/app/src/pageComponents/dataset/detail/CollectionCard/index.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx
rename to projects/app/src/pageComponents/dataset/detail/CollectionCard/index.tsx
index 26cb17243..d298da150 100644
--- a/projects/app/src/pages/dataset/detail/components/CollectionCard/index.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/CollectionCard/index.tsx
@@ -32,7 +32,7 @@ import {
DatasetTypeEnum
} from '@fastgpt/global/core/dataset/constants';
import { getCollectionIcon } from '@fastgpt/global/core/dataset/utils';
-import { TabEnum } from '../../index';
+import { TabEnum } from '../../../../pages/dataset/detail/index';
import dynamic from 'next/dynamic';
import SelectCollections from '@/web/core/dataset/components/SelectCollections';
import { useToast } from '@fastgpt/web/hooks/useToast';
diff --git a/projects/app/src/pages/dataset/detail/components/DataCard.tsx b/projects/app/src/pageComponents/dataset/detail/DataCard.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/DataCard.tsx
rename to projects/app/src/pageComponents/dataset/detail/DataCard.tsx
index 4b2f5f4fc..99b3ff701 100644
--- a/projects/app/src/pages/dataset/detail/components/DataCard.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/DataCard.tsx
@@ -13,7 +13,7 @@ import { useTranslation } from 'next-i18next';
import { useRouter } from 'next/router';
import MyIcon from '@fastgpt/web/components/common/Icon';
import MyInput from '@/components/MyInput';
-import InputDataModal from '../components/InputDataModal';
+import InputDataModal from './InputDataModal';
import RawSourceBox from '@/components/core/dataset/RawSourceBox';
import { getCollectionSourceData } from '@fastgpt/global/core/dataset/collection/utils';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
diff --git a/projects/app/src/pages/dataset/detail/components/Import/Context.tsx b/projects/app/src/pageComponents/dataset/detail/Import/Context.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/Context.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/Context.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx b/projects/app/src/pageComponents/dataset/detail/Import/commonProgress/DataProcess.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/commonProgress/DataProcess.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/commonProgress/DataProcess.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/PreviewData.tsx b/projects/app/src/pageComponents/dataset/detail/Import/commonProgress/PreviewData.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/commonProgress/PreviewData.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/commonProgress/PreviewData.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/Upload.tsx b/projects/app/src/pageComponents/dataset/detail/Import/commonProgress/Upload.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/Import/commonProgress/Upload.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/commonProgress/Upload.tsx
index b51c53dad..e811a5254 100644
--- a/projects/app/src/pages/dataset/detail/components/Import/commonProgress/Upload.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Import/commonProgress/Upload.tsx
@@ -20,7 +20,7 @@ import MyIcon from '@fastgpt/web/components/common/Icon';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { useRouter } from 'next/router';
-import { TabEnum } from '../../../index';
+import { TabEnum } from '../../../../../pages/dataset/detail/index';
import {
postCreateDatasetApiDatasetCollection,
postCreateDatasetCsvTableCollection,
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/FileSelector.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/FileSelector.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/components/FileSelector.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/FileSelector.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/FileSourceSelector.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/FileSourceSelector.tsx
similarity index 96%
rename from projects/app/src/pages/dataset/detail/components/Import/components/FileSourceSelector.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/FileSourceSelector.tsx
index 604f2a9de..293bf2437 100644
--- a/projects/app/src/pages/dataset/detail/components/Import/components/FileSourceSelector.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Import/components/FileSourceSelector.tsx
@@ -4,7 +4,7 @@ import { ModalBody, ModalFooter, Button } from '@chakra-ui/react';
import { useTranslation } from 'next-i18next';
import LeftRadio from '@fastgpt/web/components/common/Radio/LeftRadio';
import { useRouter } from 'next/router';
-import { TabEnum } from '../../..';
+import { TabEnum } from '../../../../../pages/dataset/detail';
import { ImportDataSourceEnum } from '@fastgpt/global/core/dataset/constants';
const FileModeSelector = ({ onClose }: { onClose: () => void }) => {
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/Preview.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/Preview.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/components/Preview.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/Preview.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/PreviewChunks.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/PreviewChunks.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/components/PreviewChunks.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/PreviewChunks.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/PreviewRawText.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/PreviewRawText.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/components/PreviewRawText.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/PreviewRawText.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/components/RenderFiles.tsx b/projects/app/src/pageComponents/dataset/detail/Import/components/RenderFiles.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/components/RenderFiles.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/components/RenderFiles.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/APIDataset.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/APIDataset.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/APIDataset.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/ExternalFile.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/ExternalFile.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/ExternalFile.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/ExternalFile.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/FileCustomText.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileCustomText.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/FileCustomText.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileCustomText.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/FileLink.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileLink.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/FileLink.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileLink.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/FileLocal.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileLocal.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/FileLocal.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/FileLocal.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/ReTraining.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/ReTraining.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/ReTraining.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/ReTraining.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/diffSource/TableLocal.tsx b/projects/app/src/pageComponents/dataset/detail/Import/diffSource/TableLocal.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/diffSource/TableLocal.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/diffSource/TableLocal.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/index.tsx b/projects/app/src/pageComponents/dataset/detail/Import/index.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/index.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/index.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Import/type.d.ts b/projects/app/src/pageComponents/dataset/detail/Import/type.d.ts
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/type.d.ts
rename to projects/app/src/pageComponents/dataset/detail/Import/type.d.ts
diff --git a/projects/app/src/pages/dataset/detail/components/Import/utils.tsx b/projects/app/src/pageComponents/dataset/detail/Import/utils.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/Import/utils.tsx
rename to projects/app/src/pageComponents/dataset/detail/Import/utils.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Info/components/EditApiServiceModal.tsx b/projects/app/src/pageComponents/dataset/detail/Info/components/EditApiServiceModal.tsx
similarity index 97%
rename from projects/app/src/pages/dataset/detail/components/Info/components/EditApiServiceModal.tsx
rename to projects/app/src/pageComponents/dataset/detail/Info/components/EditApiServiceModal.tsx
index d46a6ee81..57fee7f59 100644
--- a/projects/app/src/pages/dataset/detail/components/Info/components/EditApiServiceModal.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Info/components/EditApiServiceModal.tsx
@@ -6,7 +6,7 @@ import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useForm } from 'react-hook-form';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { APIFileServer, FeishuServer, YuqueServer } from '@fastgpt/global/core/dataset/apiDataset';
-import ApiDatasetForm from '@/pages/dataset/component/ApiDatasetForm';
+import ApiDatasetForm from '@/pageComponents/dataset/ApiDatasetForm';
import { useContextSelector } from 'use-context-selector';
import { DatasetPageContext } from '@/web/core/dataset/context/datasetPageContext';
import { datasetTypeCourseMap } from '@/web/core/dataset/constants';
diff --git a/projects/app/src/pages/dataset/detail/components/Info/index.tsx b/projects/app/src/pageComponents/dataset/detail/Info/index.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/Info/index.tsx
rename to projects/app/src/pageComponents/dataset/detail/Info/index.tsx
index a91bd38c5..c35a0515b 100644
--- a/projects/app/src/pages/dataset/detail/components/Info/index.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Info/index.tsx
@@ -18,7 +18,7 @@ import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { DatasetPermissionList } from '@fastgpt/global/support/permission/dataset/constant';
-import MemberManager from '../../../component/MemberManager';
+import MemberManager from '../../MemberManager';
import {
getCollaboratorList,
postUpdateDatasetCollaborators,
diff --git a/projects/app/src/pages/dataset/detail/components/InputDataModal.tsx b/projects/app/src/pageComponents/dataset/detail/InputDataModal.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/InputDataModal.tsx
rename to projects/app/src/pageComponents/dataset/detail/InputDataModal.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/MetaDataCard.tsx b/projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/MetaDataCard.tsx
rename to projects/app/src/pageComponents/dataset/detail/MetaDataCard.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/NavBar.tsx b/projects/app/src/pageComponents/dataset/detail/NavBar.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/NavBar.tsx
rename to projects/app/src/pageComponents/dataset/detail/NavBar.tsx
diff --git a/projects/app/src/pages/dataset/detail/components/Test.tsx b/projects/app/src/pageComponents/dataset/detail/Test.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/detail/components/Test.tsx
rename to projects/app/src/pageComponents/dataset/detail/Test.tsx
index 1e65f5d78..14c217d54 100644
--- a/projects/app/src/pages/dataset/detail/components/Test.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Test.tsx
@@ -1,6 +1,5 @@
import React, { useEffect, useMemo, useState } from 'react';
import { Box, Textarea, Button, Flex, useTheme, useDisclosure } from '@chakra-ui/react';
-import { useDatasetStore } from '@/web/core/dataset/store/dataset';
import { useSearchTestStore, SearchTestStoreItemType } from '@/web/core/dataset/store/searchTest';
import { postSearchText } from '@/web/core/dataset/api';
import MyIcon from '@fastgpt/web/components/common/Icon';
diff --git a/projects/app/src/pages/dataset/detail/components/styles.module.scss b/projects/app/src/pageComponents/dataset/detail/styles.module.scss
similarity index 100%
rename from projects/app/src/pages/dataset/detail/components/styles.module.scss
rename to projects/app/src/pageComponents/dataset/detail/styles.module.scss
diff --git a/projects/app/src/pages/dataset/list/component/CreateModal.tsx b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/list/component/CreateModal.tsx
rename to projects/app/src/pageComponents/dataset/list/CreateModal.tsx
index b4b739859..5aff9f861 100644
--- a/projects/app/src/pages/dataset/list/component/CreateModal.tsx
+++ b/projects/app/src/pageComponents/dataset/list/CreateModal.tsx
@@ -20,7 +20,7 @@ import ComplianceTip from '@/components/common/ComplianceTip/index';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { getDocPath } from '@/web/common/system/doc';
import { datasetTypeCourseMap } from '@/web/core/dataset/constants';
-import ApiDatasetForm from '../../component/ApiDatasetForm';
+import ApiDatasetForm from '../ApiDatasetForm';
export type CreateDatasetType =
| DatasetTypeEnum.dataset
diff --git a/projects/app/src/pages/dataset/list/component/List.tsx b/projects/app/src/pageComponents/dataset/list/List.tsx
similarity index 99%
rename from projects/app/src/pages/dataset/list/component/List.tsx
rename to projects/app/src/pageComponents/dataset/list/List.tsx
index db711e176..19c5c77a2 100644
--- a/projects/app/src/pages/dataset/list/component/List.tsx
+++ b/projects/app/src/pageComponents/dataset/list/List.tsx
@@ -16,7 +16,7 @@ import { downloadFetch } from '@/web/common/system/utils';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip';
import dynamic from 'next/dynamic';
import { useContextSelector } from 'use-context-selector';
-import { DatasetsContext } from '../context';
+import { DatasetsContext } from '../../../pages/dataset/list/context';
import { DatasetPermissionList } from '@fastgpt/global/support/permission/dataset/constant';
import ConfigPerModal from '@/components/support/permission/ConfigPerModal';
import {
diff --git a/projects/app/src/pages/dataset/list/component/SideTag.tsx b/projects/app/src/pageComponents/dataset/list/SideTag.tsx
similarity index 100%
rename from projects/app/src/pages/dataset/list/component/SideTag.tsx
rename to projects/app/src/pageComponents/dataset/list/SideTag.tsx
diff --git a/projects/app/src/pages/login/components/ForgetPasswordForm.tsx b/projects/app/src/pageComponents/login/ForgetPasswordForm.tsx
similarity index 100%
rename from projects/app/src/pages/login/components/ForgetPasswordForm.tsx
rename to projects/app/src/pageComponents/login/ForgetPasswordForm.tsx
diff --git a/projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx b/projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx
similarity index 100%
rename from projects/app/src/pages/login/components/LoginForm/components/FormLayout.tsx
rename to projects/app/src/pageComponents/login/LoginForm/FormLayout.tsx
diff --git a/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx b/projects/app/src/pageComponents/login/LoginForm/LoginForm.tsx
similarity index 99%
rename from projects/app/src/pages/login/components/LoginForm/LoginForm.tsx
rename to projects/app/src/pageComponents/login/LoginForm/LoginForm.tsx
index ad365e4b2..4fad6e61c 100644
--- a/projects/app/src/pages/login/components/LoginForm/LoginForm.tsx
+++ b/projects/app/src/pageComponents/login/LoginForm/LoginForm.tsx
@@ -8,7 +8,7 @@ import { useToast } from '@fastgpt/web/hooks/useToast';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import { getDocPath } from '@/web/common/system/doc';
import { useTranslation } from 'next-i18next';
-import FormLayout from './components/FormLayout';
+import FormLayout from './FormLayout';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
interface Props {
diff --git a/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx b/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx
similarity index 97%
rename from projects/app/src/pages/login/components/LoginForm/WechatForm.tsx
rename to projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx
index 4d08509f9..d1d8c2c2c 100644
--- a/projects/app/src/pages/login/components/LoginForm/WechatForm.tsx
+++ b/projects/app/src/pageComponents/login/LoginForm/WechatForm.tsx
@@ -6,7 +6,7 @@ import { useQuery } from '@tanstack/react-query';
import { getWXLoginQR, getWXLoginResult } from '@/web/support/user/api';
import { getErrText } from '@fastgpt/global/common/error/utils';
import { useToast } from '@fastgpt/web/hooks/useToast';
-import FormLayout from './components/FormLayout';
+import FormLayout from './FormLayout';
import { useTranslation } from 'next-i18next';
import Loading from '@fastgpt/web/components/common/MyLoading';
import MyImage from '@fastgpt/web/components/common/Image/MyImage';
diff --git a/projects/app/src/pages/login/components/RegisterForm.tsx b/projects/app/src/pageComponents/login/RegisterForm.tsx
similarity index 100%
rename from projects/app/src/pages/login/components/RegisterForm.tsx
rename to projects/app/src/pageComponents/login/RegisterForm.tsx
diff --git a/projects/app/src/pages/price/components/ExtraPlan.tsx b/projects/app/src/pageComponents/price/ExtraPlan.tsx
similarity index 100%
rename from projects/app/src/pages/price/components/ExtraPlan.tsx
rename to projects/app/src/pageComponents/price/ExtraPlan.tsx
diff --git a/projects/app/src/pages/price/components/FAQ.tsx b/projects/app/src/pageComponents/price/FAQ.tsx
similarity index 100%
rename from projects/app/src/pages/price/components/FAQ.tsx
rename to projects/app/src/pageComponents/price/FAQ.tsx
diff --git a/projects/app/src/pages/price/components/Points.tsx b/projects/app/src/pageComponents/price/Points.tsx
similarity index 100%
rename from projects/app/src/pages/price/components/Points.tsx
rename to projects/app/src/pageComponents/price/Points.tsx
diff --git a/projects/app/src/pages/price/components/Standard.tsx b/projects/app/src/pageComponents/price/Standard.tsx
similarity index 100%
rename from projects/app/src/pages/price/components/Standard.tsx
rename to projects/app/src/pageComponents/price/Standard.tsx
diff --git a/projects/app/src/pages/toolkit/components/PluginCard.tsx b/projects/app/src/pageComponents/toolkit/PluginCard.tsx
similarity index 100%
rename from projects/app/src/pages/toolkit/components/PluginCard.tsx
rename to projects/app/src/pageComponents/toolkit/PluginCard.tsx
diff --git a/projects/app/src/pages/account/apikey.tsx b/projects/app/src/pages/account/apikey.tsx
index eef200b51..0294a0094 100644
--- a/projects/app/src/pages/account/apikey.tsx
+++ b/projects/app/src/pages/account/apikey.tsx
@@ -2,7 +2,7 @@ import React from 'react';
import ApiKeyTable from '@/components/support/apikey/Table';
import { useTranslation } from 'next-i18next';
import { Box } from '@chakra-ui/react';
-import AccountContainer, { TabEnum } from './components/AccountContainer';
+import AccountContainer, { TabEnum } from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
const ApiKey = () => {
diff --git a/projects/app/src/pages/account/bill/index.tsx b/projects/app/src/pages/account/bill/index.tsx
index 477baa082..5bda548de 100644
--- a/projects/app/src/pages/account/bill/index.tsx
+++ b/projects/app/src/pages/account/bill/index.tsx
@@ -3,9 +3,9 @@ import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs';
import dynamic from 'next/dynamic';
import { useState } from 'react';
import { useTranslation } from 'next-i18next';
-import ApplyInvoiceModal from './components/ApplyInvoiceModal';
+import ApplyInvoiceModal from '@/pageComponents/account/bill/ApplyInvoiceModal';
import { useRouter } from 'next/router';
-import AccountContainer, { TabEnum } from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
export enum InvoiceTabEnum {
@@ -14,9 +14,9 @@ export enum InvoiceTabEnum {
invoiceHeader = 'invoiceHeader'
}
-const BillTable = dynamic(() => import('./components/BillTable'));
-const InvoiceHeaderForm = dynamic(() => import('./components/InvoiceHeaderForm'));
-const InvoiceTable = dynamic(() => import('./components/InvoiceTable'));
+const BillTable = dynamic(() => import('@/pageComponents/account/bill/BillTable'));
+const InvoiceHeaderForm = dynamic(() => import('@/pageComponents/account/bill/InvoiceHeaderForm'));
+const InvoiceTable = dynamic(() => import('@/pageComponents/account/bill/InvoiceTable'));
const BillAndInvoice = () => {
const { t } = useTranslation();
const router = useRouter();
diff --git a/projects/app/src/pages/account/info/index.tsx b/projects/app/src/pages/account/info/index.tsx
index 1adbff216..8d516f971 100644
--- a/projects/app/src/pages/account/info/index.tsx
+++ b/projects/app/src/pages/account/info/index.tsx
@@ -38,14 +38,17 @@ import StandardPlanContentList from '@/components/support/wallet/StandardPlanCon
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
import { getWebReqUrl } from '@fastgpt/web/common/system/utils';
-import AccountContainer from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useRouter } from 'next/router';
-import TeamSelector from '../components/TeamSelector';
+import TeamSelector from '@/pageComponents/account/TeamSelector';
-const StandDetailModal = dynamic(() => import('./components/standardDetailModal'), { ssr: false });
-const ConversionModal = dynamic(() => import('./components/ConversionModal'));
-const UpdatePswModal = dynamic(() => import('./components/UpdatePswModal'));
+const StandDetailModal = dynamic(
+ () => import('@/pageComponents/account/info/standardDetailModal'),
+ { ssr: false }
+);
+const ConversionModal = dynamic(() => import('@/pageComponents/account/info/ConversionModal'));
+const UpdatePswModal = dynamic(() => import('@/pageComponents/account/info/UpdatePswModal'));
const UpdateNotification = dynamic(
() => import('@/components/support/user/inform/UpdateNotificationModal')
);
diff --git a/projects/app/src/pages/account/inform.tsx b/projects/app/src/pages/account/inform.tsx
index d0612c338..e2fa08c1b 100644
--- a/projects/app/src/pages/account/inform.tsx
+++ b/projects/app/src/pages/account/inform.tsx
@@ -6,7 +6,7 @@ import { usePagination } from '@fastgpt/web/hooks/usePagination';
import { useLoading } from '@fastgpt/web/hooks/useLoading';
import { useTranslation } from 'next-i18next';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
-import AccountContainer from './components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
const InformTable = () => {
diff --git a/projects/app/src/pages/account/model/components/DefaultModal.tsx b/projects/app/src/pages/account/model/components/DefaultModal.tsx
deleted file mode 100644
index ab1481463..000000000
--- a/projects/app/src/pages/account/model/components/DefaultModal.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import React, { useMemo, useState } from 'react';
-import MyModal from '@fastgpt/web/components/common/MyModal';
-import { useTranslation } from 'next-i18next';
-import { ModalBody } from '@chakra-ui/react';
-import { useSystemStore } from '@/web/common/system/useSystemStore';
-import { getSystemModelList } from '@/web/core/ai/config';
-import MultipleSelect from '@fastgpt/web/components/common/MySelect/MultipleSelect';
-import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
-
-const DefaultModal = ({ onClose }: { onClose: () => void }) => {
- const { t } = useTranslation();
-
- const { data: systemModelList = [] } = useRequest2(getSystemModelList, {
- manual: false
- });
- const selectorList = useMemo(() => {
- return systemModelList.map((item) => ({
- icon: item.avatar,
- label: item.name,
- value: item.model
- }));
- }, [systemModelList]);
-
- const { llmModelList, embeddingModelList, sttModelList, ttsModelList, reRankModelList } =
- useSystemStore();
- const [value, setValue] = useState([]);
-
- const modelList = useMemo(() => {
- return [
- ...llmModelList,
- ...embeddingModelList,
- ...ttsModelList,
- ...reRankModelList,
- ...sttModelList
- ].map((item) => ({
- provider: item.provider,
- name: item.name,
- model: item.model
- }));
- }, [llmModelList, embeddingModelList, sttModelList, ttsModelList, reRankModelList]);
-
- return (
-
-
-
- list={selectorList}
- value={value}
- onSelect={(e) => {
- setValue(e);
- }}
- />
-
-
- );
-};
-
-export default DefaultModal;
diff --git a/projects/app/src/pages/account/model/index.tsx b/projects/app/src/pages/account/model/index.tsx
index b912b9305..4c796bb00 100644
--- a/projects/app/src/pages/account/model/index.tsx
+++ b/projects/app/src/pages/account/model/index.tsx
@@ -1,6 +1,6 @@
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import React, { useMemo, useState } from 'react';
-import AccountContainer from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { Box, Flex } from '@chakra-ui/react';
import ModelTable from '@/components/core/ai/ModelTable';
import { useUserStore } from '@/web/support/user/useUserStore';
@@ -8,7 +8,7 @@ import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs';
import { useTranslation } from 'next-i18next';
import dynamic from 'next/dynamic';
-const ModelConfigTable = dynamic(() => import('./components/ModelConfigTable'));
+const ModelConfigTable = dynamic(() => import('@/pageComponents/account/model/ModelConfigTable'));
type TabType = 'model' | 'config' | 'channel';
diff --git a/projects/app/src/pages/account/promotion.tsx b/projects/app/src/pages/account/promotion.tsx
index 5da3e0b48..5933737d7 100644
--- a/projects/app/src/pages/account/promotion.tsx
+++ b/projects/app/src/pages/account/promotion.tsx
@@ -19,13 +19,13 @@ import { useQuery } from '@tanstack/react-query';
import { getPromotionInitData, getPromotionRecords } from '@/web/support/activity/promotion/api';
import { useUserStore } from '@/web/support/user/useUserStore';
-import { useCopyData } from '@/web/common/hooks/useCopyData';
+import { useCopyData } from '@fastgpt/web/hooks/useCopyData';
import dayjs from 'dayjs';
import { usePagination } from '@fastgpt/web/hooks/usePagination';
import { useLoading } from '@fastgpt/web/hooks/useLoading';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import EmptyTip from '@fastgpt/web/components/common/EmptyTip';
-import AccountContainer from './components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
const Promotion = () => {
diff --git a/projects/app/src/pages/account/setting.tsx b/projects/app/src/pages/account/setting.tsx
index b276ada5a..2660fd5c3 100644
--- a/projects/app/src/pages/account/setting.tsx
+++ b/projects/app/src/pages/account/setting.tsx
@@ -9,7 +9,7 @@ import { useForm } from 'react-hook-form';
import { UserUpdateParams } from '@/types/user';
import TimezoneSelect from '@fastgpt/web/components/common/MySelect/TimezoneSelect';
import I18nLngSelector from '@/components/Select/I18nLngSelector';
-import AccountContainer from './components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
const Individuation = () => {
diff --git a/projects/app/src/pages/account/team/index.tsx b/projects/app/src/pages/account/team/index.tsx
index f8e41ef21..9d70cea81 100644
--- a/projects/app/src/pages/account/team/index.tsx
+++ b/projects/app/src/pages/account/team/index.tsx
@@ -1,9 +1,9 @@
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
-import AccountContainer from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { Box, Flex } from '@chakra-ui/react';
import Icon from '@fastgpt/web/components/common/Icon';
import { useTranslation } from 'next-i18next';
-import TeamSelector from '../components/TeamSelector';
+import TeamSelector from '@/pageComponents/account/TeamSelector';
import { useUserStore } from '@/web/support/user/useUserStore';
import React, { useMemo } from 'react';
import { useContextSelector } from 'use-context-selector';
diff --git a/projects/app/src/pages/account/thirdParty/index.tsx b/projects/app/src/pages/account/thirdParty/index.tsx
index eb73ce2d5..392af56c1 100644
--- a/projects/app/src/pages/account/thirdParty/index.tsx
+++ b/projects/app/src/pages/account/thirdParty/index.tsx
@@ -1,4 +1,4 @@
-import AccountContainer from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { Box, Flex, Grid, Progress, useDisclosure } from '@chakra-ui/react';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { useTranslation } from 'next-i18next';
@@ -7,7 +7,7 @@ import { useUserStore } from '@/web/support/user/useUserStore';
import { TeamMemberRoleEnum } from '@fastgpt/global/support/user/team/constant';
import dynamic from 'next/dynamic';
import { useState, useMemo } from 'react';
-import WorkflowVariableModal from './components/WorkflowVariableModal';
+import WorkflowVariableModal from '@/pageComponents/account/thirdParty/WorkflowVariableModal';
import { useToast } from '@fastgpt/web/hooks/useToast';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
@@ -16,7 +16,9 @@ import type { checkUsageResponse } from '@/pages/api/support/user/team/thirtdPar
import MyBox from '@fastgpt/web/components/common/MyBox';
const LafAccountModal = dynamic(() => import('@/components/support/laf/LafAccountModal'));
-const OpenAIAccountModal = dynamic(() => import('./components/OpenAIAccountModal'));
+const OpenAIAccountModal = dynamic(
+ () => import('@/pageComponents/account/thirdParty/OpenAIAccountModal')
+);
export type ThirdPartyAccountType = {
name: string;
diff --git a/projects/app/src/pages/account/usage/components/ExportModal.tsx b/projects/app/src/pages/account/usage/components/ExportModal.tsx
deleted file mode 100644
index 9aa64d4a6..000000000
--- a/projects/app/src/pages/account/usage/components/ExportModal.tsx
+++ /dev/null
@@ -1,88 +0,0 @@
-import { downloadFetch } from '@/web/common/system/utils';
-import { Button, Flex, ModalBody, ModalFooter } from '@chakra-ui/react';
-import { formatTime2YMD } from '@fastgpt/global/common/string/time';
-import { UsageSourceEnum, UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants';
-import MyModal from '@fastgpt/web/components/common/MyModal';
-import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
-import { useTranslation } from 'next-i18next';
-
-export type ExportModalParams = {
- dateStart: Date;
- dateEnd: Date;
- sources: UsageSourceEnum[];
- teamMemberIds: string[];
- teamMemberNames: string[];
- isSelectAllTmb: boolean;
- projectName: string;
-};
-
-const ExportModal = ({
- onClose,
- params,
- memberTotal,
- total
-}: {
- onClose: () => void;
- params: ExportModalParams;
- memberTotal: number;
- total: number;
-}) => {
- const { t } = useTranslation();
-
- const {
- teamMemberIds,
- teamMemberNames,
- isSelectAllTmb,
- sources,
- dateStart,
- dateEnd,
- projectName
- } = params;
-
- const { runAsync: exportUsage, loading } = useRequest2(
- async () => {
- const searchParams = new URLSearchParams();
- searchParams.set('dateStart', dateStart.toISOString());
- searchParams.set('dateEnd', dateEnd.toISOString());
- sources.forEach((source) => searchParams.append('sources', source.toString()));
- teamMemberIds.forEach((tmbId) => searchParams.append('teamMemberIds', tmbId));
- searchParams.set('isSelectAllTmb', isSelectAllTmb.toString());
- searchParams.set('projectName', projectName);
-
- await downloadFetch({
- url: `/api/proApi/support/wallet/usage/exportUsage?${searchParams}`,
- filename: `usage.csv`
- });
- },
- {
- successToast: t('account_usage:start_export')
- }
- );
-
- return (
-
-
- {t('account_usage:current_filter_conditions')}
-
- {`${t('common:user.Time')}: ${formatTime2YMD(dateStart)} ~ ${formatTime2YMD(dateEnd)}`}
-
- {`${t('common:user.team.Member')}(${memberTotal}): ${teamMemberNames.join(', ')}`}
-
- {`${t('common:user.type')}: ${sources.map((item) => t(UsageSourceMap[item].label as any)).join(', ')}`}
-
- {`${t('common:user.Application Name')}: ${projectName}`}
- {t('account_usage:confirm_export', { total })}
-
-
-
-
-
-
- );
-};
-
-export default ExportModal;
diff --git a/projects/app/src/pages/account/usage/index.tsx b/projects/app/src/pages/account/usage/index.tsx
index 17f4b5c55..c09c32fa3 100644
--- a/projects/app/src/pages/account/usage/index.tsx
+++ b/projects/app/src/pages/account/usage/index.tsx
@@ -1,5 +1,5 @@
import React, { useEffect, useMemo, useState } from 'react';
-import { Flex, Box } from '@chakra-ui/react';
+import { Flex, Box, HStack } from '@chakra-ui/react';
import { UsageSourceEnum, UsageSourceMap } from '@fastgpt/global/support/wallet/usage/constants';
import DateRangePicker, {
type DateRangeType
@@ -8,67 +8,81 @@ import { addDays, startOfMonth, startOfWeek } from 'date-fns';
import { useTranslation } from 'next-i18next';
import { useUserStore } from '@/web/support/user/useUserStore';
import Avatar from '@fastgpt/web/components/common/Avatar';
-import AccountContainer from '../components/AccountContainer';
+import AccountContainer from '@/pageComponents/account/AccountContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination';
import { getTeamMembers } from '@/web/support/user/team/api';
import FillRowTabs from '@fastgpt/web/components/common/Tabs/FillRowTabs';
-import MultipleSelect from '@fastgpt/web/components/common/MySelect/MultipleSelect';
+import MultipleSelect, {
+ useMultipleSelect
+} from '@fastgpt/web/components/common/MySelect/MultipleSelect';
import SearchInput from '@fastgpt/web/components/common/Input/SearchInput';
-import UsageForm from './components/UsageForm';
-import UsageTableList from './components/UsageTable';
import MySelect from '@fastgpt/web/components/common/MySelect';
import { useRouter } from 'next/router';
+import dynamic from 'next/dynamic';
+
+import UsageTableList from '@/pageComponents/account/usage/UsageTable';
+import { UnitType } from '@/pageComponents/account/usage/type';
+import { useSystem } from '@fastgpt/web/hooks/useSystem';
+const UsageDashboard = dynamic(() => import('@/pageComponents/account/usage/Dashboard'));
export enum UsageTabEnum {
detail = 'detail',
dashboard = 'dashboard'
}
-export type UnitType = 'day' | 'week' | 'month';
-
const UsageTable = () => {
const { t } = useTranslation();
const { userInfo } = useUserStore();
+ const { isPc } = useSystem();
const router = useRouter();
const { usageTab = UsageTabEnum.detail } = router.query as { usageTab: `${UsageTabEnum}` };
- const { data: members, ScrollData, total: memberTotal } = useScrollPagination(getTeamMembers, {});
+
+ const [unit, setUnit] = useState('day');
const [dateRange, setDateRange] = useState({
from: addDays(new Date(), -7),
to: new Date()
});
- const [selectTmbIds, setSelectTmbIds] = useState([]);
- const [usageSources, setUsageSources] = useState(
- Object.values(UsageSourceEnum)
- );
- const [isSelectAllTmb, setIsSelectAllTmb] = useState(true);
- const [unit, setUnit] = useState('day');
- const [projectName, setProjectName] = useState('');
- const [inputValue, setInputValue] = useState('');
-
- const sourceList = useMemo(
- () =>
- Object.entries(UsageSourceMap).map(([key, value]) => ({
- label: t(value.label as any),
- value: key
- })),
- [t]
- );
+ const { data: members, ScrollData, total: memberTotal } = useScrollPagination(getTeamMembers, {});
+ const {
+ value: selectTmbIds,
+ setValue: setSelectTmbIds,
+ isSelectAll: isSelectAllTmb,
+ setIsSelectAll: setIsSelectAllTmb
+ } = useMultipleSelect([], true);
const tmbList = useMemo(
() =>
members.map((item) => ({
label: (
-
-
- {item.memberName}
-
+
+
+ {item.memberName}
+
),
value: item.tmbId
})),
[members]
);
+ const {
+ value: usageSources,
+ setValue: setUsageSources,
+ isSelectAll: isSelectAllSource,
+ setIsSelectAll: setIsSelectAllSource
+ } = useMultipleSelect(Object.values(UsageSourceEnum), true);
+ const sourceList = useMemo(
+ () =>
+ Object.entries(UsageSourceMap).map(([key, value]) => ({
+ label: t(value.label as any),
+ value: key as UsageSourceEnum
+ })),
+ [t]
+ );
+
+ const [projectName, setProjectName] = useState('');
+ const [inputValue, setInputValue] = useState('');
+
const Tabs = useMemo(
() => (
{
{ label: t('account_usage:usage_detail'), value: 'detail' },
{ label: t('account_usage:dashboard'), value: 'dashboard' }
]}
- px={'1rem'}
+ py={1}
value={usageTab}
onChange={(e) => {
router.replace({
@@ -93,19 +107,19 @@ const UsageTable = () => {
const Selectors = useMemo(
() => (
-
-
-
+
+
+
{t('common:user.Time')}
- {usageTab === UsageTabEnum.dashboard && (
-
bg={'myGray.50'}
minH={'32px'}
height={'32px'}
@@ -113,38 +127,16 @@ const UsageTable = () => {
ml={1}
list={[
{ label: t('account_usage:every_day'), value: 'day' },
- { label: t('account_usage:every_week'), value: 'week' },
{ label: t('account_usage:every_month'), value: 'month' }
]}
value={unit}
- onchange={(val) => {
- if (!dateRange.from) return dateRange;
-
- switch (val) {
- case 'week':
- setDateRange({
- from: startOfWeek(dateRange.from, { weekStartsOn: 1 }),
- to: dateRange.to
- });
- break;
- case 'month':
- setDateRange({
- from: startOfMonth(dateRange.from),
- to: dateRange.to
- });
- break;
- default:
- break;
- }
-
- setUnit(val as 'day' | 'week' | 'month');
- }}
+ onchange={setUnit}
/>
- )}
+ )} */}
- {tmbList.length > 1 && userInfo?.team?.permission.hasManagePer && (
-
-
+ {userInfo?.team?.permission.hasManagePer && (
+
+
{t('account_usage:member')}
@@ -158,7 +150,6 @@ const UsageTable = () => {
height={'32px'}
bg={'myGray.50'}
w={'160px'}
- showCheckedIcon={false}
ScrollData={ScrollData}
isSelectAll={isSelectAllTmb}
setIsSelectAll={setIsSelectAllTmb}
@@ -166,25 +157,26 @@ const UsageTable = () => {
)}
-
-
- {t('common:user.type')}
+
+
+ {t('account_usage:source')}
-
+
list={sourceList}
value={usageSources}
- onSelect={(val) => setUsageSources(val as UsageSourceEnum[])}
+ onSelect={setUsageSources}
+ isSelectAll={isSelectAllSource}
+ setIsSelectAll={setIsSelectAllSource}
itemWrap={false}
height={'32px'}
bg={'myGray.50'}
w={'160px'}
- showCheckedIcon={false}
/>
- {usageTab === UsageTabEnum.detail && (
-
+ {/* {usageTab === UsageTabEnum.detail && (
+
{
onChange={(e) => setInputValue(e.target.value)}
/>
- )}
+ )} */}
),
[
- dateRange,
- selectTmbIds,
- sourceList,
t,
- tmbList,
- unit,
- usageSources,
+ dateRange,
usageTab,
- inputValue,
- isSelectAllTmb
+ unit,
+ userInfo?.team?.permission.hasManagePer,
+ tmbList,
+ selectTmbIds,
+ ScrollData,
+ isSelectAllTmb,
+ setIsSelectAllTmb,
+ sourceList,
+ usageSources,
+ setUsageSources,
+ isSelectAllSource,
+ setIsSelectAllSource,
+ setSelectTmbIds
]
);
@@ -226,11 +224,24 @@ const UsageTable = () => {
return () => clearTimeout(timer);
}, [inputValue]);
+ const filterParams = useMemo(
+ () => ({
+ dateRange,
+ selectTmbIds,
+ projectName,
+ isSelectAllTmb,
+ usageSources,
+ isSelectAllSource,
+ unit
+ }),
+ [dateRange, isSelectAllSource, unit, isSelectAllTmb, projectName, selectTmbIds, usageSources]
+ );
+
return (
{
flexDirection={'column'}
>
{usageTab === UsageTabEnum.detail && (
-
+
)}
{usageTab === UsageTabEnum.dashboard && (
-
+
)}
diff --git a/projects/app/src/pages/api/common/tracks/push.ts b/projects/app/src/pages/api/common/tracks/push.ts
index 8298c2f1f..daf63ea51 100644
--- a/projects/app/src/pages/api/common/tracks/push.ts
+++ b/projects/app/src/pages/api/common/tracks/push.ts
@@ -4,7 +4,7 @@ import { addLog } from '@fastgpt/service/common/system/log';
import { TrackEnum } from '@fastgpt/global/common/middle/tracks/constants';
import { TrackModel } from '@fastgpt/service/common/middle/tracks/schema';
import { authCert } from '@fastgpt/service/support/permission/auth/common';
-import { useReqFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
+import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
export type pushQuery = {};
@@ -38,7 +38,7 @@ async function handler(
return TrackModel.create(data);
}
-export default NextAPI(useReqFrequencyLimit(1, 5), handler);
+export default NextAPI(useIPFrequencyLimit(1, 5), handler);
export const config = {
api: {
diff --git a/projects/app/src/pages/api/core/dataset/searchTest.ts b/projects/app/src/pages/api/core/dataset/searchTest.ts
index dff352f78..0bb4260f9 100644
--- a/projects/app/src/pages/api/core/dataset/searchTest.ts
+++ b/projects/app/src/pages/api/core/dataset/searchTest.ts
@@ -14,7 +14,7 @@ import {
import { NextAPI } from '@/service/middleware/entry';
import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
-import { useReqFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
+import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
async function handler(req: NextApiRequest) {
const {
@@ -100,4 +100,4 @@ async function handler(req: NextApiRequest) {
};
}
-export default NextAPI(useReqFrequencyLimit(1, 15), handler);
+export default NextAPI(useIPFrequencyLimit(1, 15), handler);
diff --git a/projects/app/src/pages/api/support/user/account/loginByPassword.ts b/projects/app/src/pages/api/support/user/account/loginByPassword.ts
index 6da09119b..ffb5a1417 100644
--- a/projects/app/src/pages/api/support/user/account/loginByPassword.ts
+++ b/projects/app/src/pages/api/support/user/account/loginByPassword.ts
@@ -5,7 +5,7 @@ import { getUserDetail } from '@fastgpt/service/support/user/controller';
import type { PostLoginProps } from '@fastgpt/global/support/user/api.d';
import { UserStatusEnum } from '@fastgpt/global/support/user/constant';
import { NextAPI } from '@/service/middleware/entry';
-import { useReqFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
+import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
import { pushTrack } from '@fastgpt/service/common/middle/tracks/utils';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { UserErrEnum } from '@fastgpt/global/common/error/code/user';
@@ -70,4 +70,4 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
};
}
-export default NextAPI(useReqFrequencyLimit(120, 10, true), handler);
+export default NextAPI(useIPFrequencyLimit(120, 10, true), handler);
diff --git a/projects/app/src/pages/api/support/user/team/plan/getTeamPlanStatus.ts b/projects/app/src/pages/api/support/user/team/plan/getTeamPlanStatus.ts
index 0d0dd7e10..41a2d7605 100644
--- a/projects/app/src/pages/api/support/user/team/plan/getTeamPlanStatus.ts
+++ b/projects/app/src/pages/api/support/user/team/plan/getTeamPlanStatus.ts
@@ -4,14 +4,16 @@ import { getTeamPlanStatus } from '@fastgpt/service/support/wallet/sub/utils';
import { NextAPI } from '@/service/middleware/entry';
async function handler(req: NextApiRequest, res: NextApiResponse) {
- const { teamId } = await authCert({
- req,
- authToken: true
- });
+ try {
+ const { teamId } = await authCert({
+ req,
+ authToken: true
+ });
- return getTeamPlanStatus({
- teamId
- });
+ return getTeamPlanStatus({
+ teamId
+ });
+ } catch (error) {}
}
export default NextAPI(handler);
diff --git a/projects/app/src/pages/api/v1/audio/transcriptions.ts b/projects/app/src/pages/api/v1/audio/transcriptions.ts
index 04c2be95b..b6c642cfd 100644
--- a/projects/app/src/pages/api/v1/audio/transcriptions.ts
+++ b/projects/app/src/pages/api/v1/audio/transcriptions.ts
@@ -8,7 +8,7 @@ import { authChatCrud } from '@/service/support/permission/auth/chat';
import { OutLinkChatAuthProps } from '@fastgpt/global/support/permission/chat';
import { NextAPI } from '@/service/middleware/entry';
import { aiTranscriptions } from '@fastgpt/service/core/ai/audio/transcriptions';
-import { useReqFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
+import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
import { getFirstSTTModel } from '@fastgpt/service/core/ai/model';
const upload = getUploadModel({
@@ -90,7 +90,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
removeFilesByPaths(filePaths);
}
-export default NextAPI(useReqFrequencyLimit(1, 1), handler);
+export default NextAPI(useIPFrequencyLimit(1, 1), handler);
export const config = {
api: {
diff --git a/projects/app/src/pages/app/detail/index.tsx b/projects/app/src/pages/app/detail/index.tsx
index 54da870e5..9fad08f51 100644
--- a/projects/app/src/pages/app/detail/index.tsx
+++ b/projects/app/src/pages/app/detail/index.tsx
@@ -5,19 +5,19 @@ import Loading from '@fastgpt/web/components/common/MyLoading';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import NextHead from '@/components/common/NextHead';
import { useContextSelector } from 'use-context-selector';
-import AppContextProvider, { AppContext } from './components/context';
+import AppContextProvider, { AppContext } from '@/pageComponents/app/detail/context';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { useChatStore } from '@/web/core/chat/context/useChatStore';
-const SimpleEdit = dynamic(() => import('./components/SimpleApp'), {
+const SimpleEdit = dynamic(() => import('@/pageComponents/app/detail/SimpleApp'), {
ssr: false,
loading: () =>
});
-const Workflow = dynamic(() => import('./components/Workflow'), {
+const Workflow = dynamic(() => import('@/pageComponents/app/detail/Workflow'), {
ssr: false,
loading: () =>
});
-const Plugin = dynamic(() => import('./components/Plugin'), {
+const Plugin = dynamic(() => import('@/pageComponents/app/detail/Plugin'), {
ssr: false,
loading: () =>
});
diff --git a/projects/app/src/pages/app/list/index.tsx b/projects/app/src/pages/app/list/index.tsx
index 118674d88..86d7da1ee 100644
--- a/projects/app/src/pages/app/list/index.tsx
+++ b/projects/app/src/pages/app/list/index.tsx
@@ -11,7 +11,7 @@ import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { postCreateAppFolder } from '@/web/core/app/api/app';
import type { EditFolderFormType } from '@fastgpt/web/components/common/MyModal/EditFolderModal';
import { useContextSelector } from 'use-context-selector';
-import AppListContextProvider, { AppListContext } from './components/context';
+import AppListContextProvider, { AppListContext } from '@/pageComponents/app/list/context';
import FolderPath from '@/components/common/folder/Path';
import { useRouter } from 'next/router';
import FolderSlideCard from '@/components/common/folder/SlideCard';
@@ -22,22 +22,22 @@ import {
getCollaboratorList,
postUpdateAppCollaborators
} from '@/web/core/app/api/collaborator';
-import type { CreateAppType } from './components/CreateModal';
+import type { CreateAppType } from '@/pageComponents/app/list/CreateModal';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import MyBox from '@fastgpt/web/components/common/MyBox';
import LightRowTabs from '@fastgpt/web/components/common/Tabs/LightRowTabs';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
import MyIcon from '@fastgpt/web/components/common/Icon';
-import TemplateMarketModal from './components/TemplateMarketModal';
+import TemplateMarketModal from '@/pageComponents/app/list/TemplateMarketModal';
import MyImage from '@fastgpt/web/components/common/Image/MyImage';
-import JsonImportModal from './components/JsonImportModal';
+import JsonImportModal from '@/pageComponents/app/list/JsonImportModal';
-const CreateModal = dynamic(() => import('./components/CreateModal'));
+const CreateModal = dynamic(() => import('@/pageComponents/app/list/CreateModal'));
const EditFolderModal = dynamic(
() => import('@fastgpt/web/components/common/MyModal/EditFolderModal')
);
-const HttpEditModal = dynamic(() => import('./components/HttpPluginEditModal'));
-const List = dynamic(() => import('./components/List'));
+const HttpEditModal = dynamic(() => import('@/pageComponents/app/list/HttpPluginEditModal'));
+const List = dynamic(() => import('@/pageComponents/app/list/List'));
const MyApps = () => {
const { t } = useTranslation();
diff --git a/projects/app/src/pages/chat/index.module.scss b/projects/app/src/pages/chat/index.module.scss
deleted file mode 100644
index aea66fef6..000000000
--- a/projects/app/src/pages/chat/index.module.scss
+++ /dev/null
@@ -1,18 +0,0 @@
-.newChat {
- .modelListContainer {
- height: 0;
- overflow: hidden;
- }
- .modelList {
- border-radius: 6px;
- }
- &:hover {
- .modelListContainer {
- height: 60vh;
- }
- .modelList {
- box-shadow: 0 0 5px rgba($color: #000000, $alpha: 0.05);
- border: 1px solid #dee0e2;
- }
- }
-}
diff --git a/projects/app/src/pages/chat/index.tsx b/projects/app/src/pages/chat/index.tsx
index e574d0ff0..f9339b1d2 100644
--- a/projects/app/src/pages/chat/index.tsx
+++ b/projects/app/src/pages/chat/index.tsx
@@ -11,9 +11,9 @@ import { useTranslation } from 'next-i18next';
import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type';
import PageContainer from '@/components/PageContainer';
import SideBar from '@/components/SideBar';
-import ChatHistorySlider from './components/ChatHistorySlider';
-import SliderApps from './components/SliderApps';
-import ChatHeader from './components/ChatHeader';
+import ChatHistorySlider from '@/pageComponents/chat/ChatHistorySlider';
+import SliderApps from '@/pageComponents/chat/SliderApps';
+import ChatHeader from '@/pageComponents/chat/ChatHeader';
import { useUserStore } from '@/web/support/user/useUserStore';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { getChatTitleFromChatMessage } from '@fastgpt/global/core/chat/utils';
@@ -37,7 +37,7 @@ import ChatRecordContextProvider, {
ChatRecordContext
} from '@/web/core/chat/context/chatRecordContext';
-const CustomPluginRunBox = dynamic(() => import('./components/CustomPluginRunBox'));
+const CustomPluginRunBox = dynamic(() => import('@/pageComponents/chat/CustomPluginRunBox'));
const Chat = ({ myApps }: { myApps: AppListItemType[] }) => {
const router = useRouter();
diff --git a/projects/app/src/pages/chat/share.tsx b/projects/app/src/pages/chat/share.tsx
index 2dd85c879..7f010f3e6 100644
--- a/projects/app/src/pages/chat/share.tsx
+++ b/projects/app/src/pages/chat/share.tsx
@@ -9,8 +9,8 @@ import ChatBox from '@/components/core/chat/ChatContainer/ChatBox';
import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type';
import PageContainer from '@/components/PageContainer';
-import ChatHeader from './components/ChatHeader';
-import ChatHistorySlider from './components/ChatHistorySlider';
+import ChatHeader from '@/pageComponents/chat/ChatHeader';
+import ChatHistorySlider from '@/pageComponents/chat/ChatHistorySlider';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useTranslation } from 'next-i18next';
import { getInitOutLinkChatInfo } from '@/web/core/chat/api';
@@ -38,7 +38,7 @@ import { ChatSourceEnum } from '@fastgpt/global/core/chat/constants';
import { useI18nLng } from '@fastgpt/web/hooks/useI18n';
import { AppSchema } from '@fastgpt/global/core/app/type';
-const CustomPluginRunBox = dynamic(() => import('./components/CustomPluginRunBox'));
+const CustomPluginRunBox = dynamic(() => import('@/pageComponents/chat/CustomPluginRunBox'));
type Props = {
appId: string;
diff --git a/projects/app/src/pages/chat/team.tsx b/projects/app/src/pages/chat/team.tsx
index db0c5af31..cc0b94097 100644
--- a/projects/app/src/pages/chat/team.tsx
+++ b/projects/app/src/pages/chat/team.tsx
@@ -6,15 +6,15 @@ import { Box, Flex, Drawer, DrawerOverlay, DrawerContent, useTheme } from '@chak
import SideBar from '@/components/SideBar';
import PageContainer from '@/components/PageContainer';
import { getMyTokensApps } from '@/web/core/chat/api';
-import ChatHistorySlider from './components/ChatHistorySlider';
-import ChatHeader from './components/ChatHeader';
+import ChatHistorySlider from '@/pageComponents/chat/ChatHistorySlider';
+import ChatHeader from '@/pageComponents/chat/ChatHeader';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useTranslation } from 'next-i18next';
import ChatBox from '@/components/core/chat/ChatContainer/ChatBox';
import type { StartChatFnProps } from '@/components/core/chat/ChatContainer/type';
import { streamFetch } from '@/web/common/api/fetch';
import { getChatTitleFromChatMessage } from '@fastgpt/global/core/chat/utils';
-import SliderApps from './components/SliderApps';
+import SliderApps from '@/pageComponents/chat/SliderApps';
import { GPTMessages2Chats } from '@fastgpt/global/core/chat/adapt';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import ChatContextProvider, { ChatContext } from '@/web/core/chat/context/chatContext';
@@ -33,7 +33,7 @@ import ChatRecordContextProvider, {
import { useChatStore } from '@/web/core/chat/context/useChatStore';
import { useMount } from 'ahooks';
import { ChatSourceEnum } from '@fastgpt/global/core/chat/constants';
-const CustomPluginRunBox = dynamic(() => import('./components/CustomPluginRunBox'));
+const CustomPluginRunBox = dynamic(() => import('@/pageComponents/chat/CustomPluginRunBox'));
type Props = { appId: string; chatId: string; teamId: string; teamToken: string };
diff --git a/projects/app/src/pages/dataset/detail/index.tsx b/projects/app/src/pages/dataset/detail/index.tsx
index 809ac15dd..50bf043a7 100644
--- a/projects/app/src/pages/dataset/detail/index.tsx
+++ b/projects/app/src/pages/dataset/detail/index.tsx
@@ -7,24 +7,26 @@ import dynamic from 'next/dynamic';
import PageContainer from '@/components/PageContainer';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { useTranslation } from 'next-i18next';
-import MetaDataCard from './components/MetaDataCard';
-import NavBar from './components/NavBar';
+import MetaDataCard from '@/pageComponents/dataset/detail/MetaDataCard';
+import NavBar from '@/pageComponents/dataset/detail/NavBar';
import MyBox from '@fastgpt/web/components/common/MyBox';
import {
DatasetPageContext,
DatasetPageContextProvider
} from '@/web/core/dataset/context/datasetPageContext';
-import CollectionPageContextProvider from './components/CollectionCard/Context';
+import CollectionPageContextProvider from '@/pageComponents/dataset/detail/CollectionCard/Context';
import { useContextSelector } from 'use-context-selector';
import NextHead from '@/components/common/NextHead';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
-const CollectionCard = dynamic(() => import('./components/CollectionCard/index'));
-const DataCard = dynamic(() => import('./components/DataCard'));
-const Test = dynamic(() => import('./components/Test'));
-const Info = dynamic(() => import('./components/Info/index'));
-const Import = dynamic(() => import('./components/Import'));
+const CollectionCard = dynamic(
+ () => import('@/pageComponents/dataset/detail/CollectionCard/index')
+);
+const DataCard = dynamic(() => import('@/pageComponents/dataset/detail/DataCard'));
+const Test = dynamic(() => import('@/pageComponents/dataset/detail/Test'));
+const Info = dynamic(() => import('@/pageComponents/dataset/detail/Info/index'));
+const Import = dynamic(() => import('@/pageComponents/dataset/detail/Import'));
export enum TabEnum {
dataCard = 'dataCard',
diff --git a/projects/app/src/pages/dataset/list/index.tsx b/projects/app/src/pages/dataset/list/index.tsx
index a1f96c350..f50cd52ba 100644
--- a/projects/app/src/pages/dataset/list/index.tsx
+++ b/projects/app/src/pages/dataset/list/index.tsx
@@ -4,7 +4,7 @@ import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import ParentPaths from '@/components/common/folder/Path';
-import List from './component/List';
+import List from '@/pageComponents/dataset/list/List';
import { DatasetsContext } from './context';
import DatasetContextProvider from './context';
import { useContextSelector } from 'use-context-selector';
@@ -24,7 +24,7 @@ import {
getCollaboratorList
} from '@/web/core/dataset/api/collaborator';
import { useSystem } from '@fastgpt/web/hooks/useSystem';
-import { CreateDatasetType } from './component/CreateModal';
+import { CreateDatasetType } from '@/pageComponents/dataset/list/CreateModal';
import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
import { useToast } from '@fastgpt/web/hooks/useToast';
import MyBox from '@fastgpt/web/components/common/MyBox';
@@ -34,7 +34,7 @@ const EditFolderModal = dynamic(
() => import('@fastgpt/web/components/common/MyModal/EditFolderModal')
);
-const CreateModal = dynamic(() => import('./component/CreateModal'));
+const CreateModal = dynamic(() => import('@/pageComponents/dataset/list/CreateModal'));
const Dataset = () => {
const { isPc } = useSystem();
diff --git a/projects/app/src/pages/login/index.tsx b/projects/app/src/pages/login/index.tsx
index fd12521db..44cd6c73c 100644
--- a/projects/app/src/pages/login/index.tsx
+++ b/projects/app/src/pages/login/index.tsx
@@ -28,11 +28,11 @@ import { useSystem } from '@fastgpt/web/hooks/useSystem';
import { GET } from '@/web/common/api/request';
import { getDocPath } from '@/web/common/system/doc';
import { getWebReqUrl } from '@fastgpt/web/common/system/utils';
-import LoginForm from './components/LoginForm/LoginForm';
+import LoginForm from '@/pageComponents/login/LoginForm/LoginForm';
-const RegisterForm = dynamic(() => import('./components/RegisterForm'));
-const ForgetPasswordForm = dynamic(() => import('./components/ForgetPasswordForm'));
-const WechatForm = dynamic(() => import('./components/LoginForm/WechatForm'));
+const RegisterForm = dynamic(() => import('@/pageComponents/login/RegisterForm'));
+const ForgetPasswordForm = dynamic(() => import('@/pageComponents/login/ForgetPasswordForm'));
+const WechatForm = dynamic(() => import('@/pageComponents/login/LoginForm/WechatForm'));
const CommunityModal = dynamic(() => import('@/components/CommunityModal'));
const ipDetectURL = 'https://qifu-api.baidubce.com/ip/local/geo/v1/district';
diff --git a/projects/app/src/pages/price/index.tsx b/projects/app/src/pages/price/index.tsx
index 33d6fd987..53f9965b5 100644
--- a/projects/app/src/pages/price/index.tsx
+++ b/projects/app/src/pages/price/index.tsx
@@ -3,16 +3,16 @@ import { serviceSideProps } from '@fastgpt/web/common/system/nextjs';
import { Box, Flex, HStack, VStack } from '@chakra-ui/react';
import { useUserStore } from '@/web/support/user/useUserStore';
import { getTeamPlanStatus } from '@/web/support/user/team/api';
-import { useQuery } from '@tanstack/react-query';
-import StandardPlan from './components/Standard';
-import ExtraPlan from './components/ExtraPlan';
-import PointsCard from './components/Points';
-import FAQ from './components/FAQ';
+import StandardPlan from '@/pageComponents/price/Standard';
+import ExtraPlan from '@/pageComponents/price/ExtraPlan';
+import PointsCard from '@/pageComponents/price/Points';
+import FAQ from '@/pageComponents/price/FAQ';
import { useTranslation } from 'next-i18next';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useRouter } from 'next/router';
+import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
const PriceBox = () => {
const { userInfo } = useUserStore();
@@ -20,8 +20,9 @@ const PriceBox = () => {
const { feConfigs } = useSystemStore();
const router = useRouter();
- const { data: teamSubPlan } = useQuery(['getTeamPlanStatus'], getTeamPlanStatus, {
- enabled: !!userInfo
+ const { data: teamSubPlan } = useRequest2(getTeamPlanStatus, {
+ manual: false,
+ refreshDeps: [userInfo]
});
const onPaySuccess = () => {
diff --git a/projects/app/src/pages/toolkit/index.tsx b/projects/app/src/pages/toolkit/index.tsx
index 3b15815f7..9dcea82a3 100644
--- a/projects/app/src/pages/toolkit/index.tsx
+++ b/projects/app/src/pages/toolkit/index.tsx
@@ -4,7 +4,7 @@ import { Box, Flex, Grid, useDisclosure } from '@chakra-ui/react';
import Avatar from '@fastgpt/web/components/common/Avatar';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useMemo, useState } from 'react';
-import PluginCard from './components/PluginCard';
+import PluginCard from '@/pageComponents/toolkit/PluginCard';
import { i18nT } from '@fastgpt/web/i18n/utils';
import { useTranslation } from 'next-i18next';
import { useRouter } from 'next/router';
diff --git a/projects/app/src/web/common/system/utils.ts b/projects/app/src/web/common/system/utils.ts
index 3d5ea1ef8..8f6e4484f 100644
--- a/projects/app/src/web/common/system/utils.ts
+++ b/projects/app/src/web/common/system/utils.ts
@@ -1,12 +1,44 @@
import { useSystemStore } from './useSystemStore';
-export const downloadFetch = async ({ url, filename }: { url: string; filename: string }) => {
- const a = document.createElement('a');
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
+export const downloadFetch = async ({
+ url,
+ filename,
+ body
+}: {
+ url: string;
+ filename: string;
+ body?: Record;
+}) => {
+ if (body) {
+ // fetch data with POST method if body exists
+ const response = await fetch(url, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify(body)
+ });
+
+ const blob = await response.blob();
+ const downloadUrl = window.URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = downloadUrl;
+ a.download = filename;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+
+ // clean up the blob URL
+ window.URL.revokeObjectURL(downloadUrl);
+ } else {
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = filename;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ }
};
export const getWebLLMModel = (model?: string) => {
diff --git a/projects/app/src/web/support/wallet/usage/api.ts b/projects/app/src/web/support/wallet/usage/api.ts
index 6fccc9bdb..f979898ab 100644
--- a/projects/app/src/web/support/wallet/usage/api.ts
+++ b/projects/app/src/web/support/wallet/usage/api.ts
@@ -1,7 +1,8 @@
import { POST } from '@/web/common/api/request';
import {
CreateTrainingUsageProps,
- GetTotalPointsProps,
+ GetUsageDashboardProps,
+ GetUsageDashboardResponseItem,
GetUsageProps
} from '@fastgpt/global/support/wallet/usage/api.d';
import type { UsageItemType } from '@fastgpt/global/support/wallet/usage/type';
@@ -10,11 +11,8 @@ import { PaginationProps, PaginationResponse } from '@fastgpt/web/common/fetch/t
export const getUserUsages = (data: PaginationProps) =>
POST>(`/proApi/support/wallet/usage/getUsage`, data);
-export const getTotalPoints = (data: GetTotalPointsProps) =>
- POST<{ totalPoints: number; date: string }[]>(
- `/proApi/support/wallet/usage/getTotalPoints`,
- data
- );
+export const getDashboardData = (data: GetUsageDashboardProps) =>
+ POST(`/proApi/support/wallet/usage/getDashboardData`, data);
export const postCreateTrainingUsage = (data: CreateTrainingUsageProps) =>
POST(`/support/wallet/usage/createTrainingUsage`, data);
diff --git a/projects/app/tsconfig.json b/projects/app/tsconfig.json
index 975513eb1..7d58a40e2 100644
--- a/projects/app/tsconfig.json
+++ b/projects/app/tsconfig.json
@@ -1,10 +1,10 @@
{
- "extends":"../../tsconfig.json",
+ "extends": "../../tsconfig.json",
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
},
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.d.ts","../../packages/**/*.d.ts"]
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.d.ts", "../../packages/**/*.d.ts"]
}
|