From 3b6e465843d4118b5d82ab76a9e5a40826e76030 Mon Sep 17 00:00:00 2001 From: MyGit <3282299728@qq.com> Date: Fri, 28 Jun 2024 15:48:48 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=E6=8B=96=E6=8B=BD=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/bs-comp/sheets/TaggingSheet.tsx | 15 +++++++++++++-- src/frontend/vite.config.ts | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/components/bs-comp/sheets/TaggingSheet.tsx b/src/frontend/src/components/bs-comp/sheets/TaggingSheet.tsx index 8e0404d66..16967654f 100644 --- a/src/frontend/src/components/bs-comp/sheets/TaggingSheet.tsx +++ b/src/frontend/src/components/bs-comp/sheets/TaggingSheet.tsx @@ -1,3 +1,4 @@ +import { useState } from "react"; import { Sheet, SheetContent, @@ -7,11 +8,20 @@ import { import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; export default function TaggingSheet({children}) { - const buttons = [ + const init = [ {id:'01',name:'Button01'}, {id:'02',name:'Button02'}, {id:'03',name:'Button03'}, ] + const [buttons, setButtons] = useState(init) + + const handleDragEnd = (result) => { + if(!result.destination) return + const newButtons = init + const [moveItem] = newButtons.splice(result.source.index, 1) + newButtons.splice(result.destination.index, 0, moveItem) + setButtons(newButtons) + } return {children} @@ -22,7 +32,7 @@ export default function TaggingSheet({children}) {
- console.log('-------------')}> + {(provided) => (
@@ -36,6 +46,7 @@ export default function TaggingSheet({children}) { )} ))} + {provided.placeholder}
)}
diff --git a/src/frontend/vite.config.ts b/src/frontend/vite.config.ts index 807462a27..d369b4e48 100644 --- a/src/frontend/vite.config.ts +++ b/src/frontend/vite.config.ts @@ -6,7 +6,7 @@ import svgr from "vite-plugin-svgr"; const apiRoutes = ["^/api/", "/health"]; import path from "path"; // Use environment variable to determine the target. -const target = process.env.VITE_PROXY_TARGET || "http://127.0.0.1:7860"; +const target = process.env.VITE_PROXY_TARGET || "http://192.168.106.120:3002"; const proxyTargets = apiRoutes.reduce((proxyObj, route) => { proxyObj[route] = { From 8cb77ec6bf975bdcb65cfac84563123ef10592bd Mon Sep 17 00:00:00 2001 From: GuoQing Zhang Date: Fri, 28 Jun 2024 16:05:35 +0800 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bisheng/api/services/role_group_service.py | 11 +++++++---- src/backend/bisheng/api/v1/usergroup.py | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/backend/bisheng/api/services/role_group_service.py b/src/backend/bisheng/api/services/role_group_service.py index 7616dfde2..3f0977454 100644 --- a/src/backend/bisheng/api/services/role_group_service.py +++ b/src/backend/bisheng/api/services/role_group_service.py @@ -10,6 +10,7 @@ from bisheng.api.services.user_service import UserPayload from bisheng.api.errcode.user import UserGroupNotDeleteError from bisheng.api.utils import get_request_ip +from bisheng.api.v1.schemas import resp_200 from bisheng.database.models.assistant import AssistantDao from bisheng.database.models.flow import FlowDao from bisheng.database.models.gpts_tools import GptsToolsDao @@ -91,15 +92,17 @@ def delete_group(self, request: Request, login_user: UserPayload, group_id: int) """删除用户组""" group_info = GroupDao.get_user_group(group_id) if not group_info: - return None + return resp_200() # 判断组下是否还有用户 user_group_list = UserGroupDao.get_group_user(group_id) if user_group_list: return UserGroupNotDeleteError.return_resp() GroupDao.delete_group(group_id) + self.delete_group_hook(request, login_user, group_info) + return resp_200() - def delete_group_hook(self, request: Request, login_user: UserPayload, group_info: int): + def delete_group_hook(self, request: Request, login_user: UserPayload, group_info: Group): logger.info(f'act=delete_group_hook user={login_user.user_name} group_id={group_info.id}') # 记录审计日志 AuditLogService.delete_user_group(login_user, get_request_ip(request), group_info) @@ -109,8 +112,8 @@ def delete_group_hook(self, request: Request, login_user: UserPayload, group_inf need_move_resource = [] for one in all_resource: # 获取资源属于几个组,属于多个组则不用处理, 否则将资源转移到默认用户组 - resourece_groups = GroupResourceDao.get_resource_group(ResourceTypeEnum(one.type), one.third_id) - if len(resourece_groups) > 1: + resource_groups = GroupResourceDao.get_resource_group(ResourceTypeEnum(one.type), one.third_id) + if len(resource_groups) > 1: continue else: one.group_id = DefaultGroup diff --git a/src/backend/bisheng/api/v1/usergroup.py b/src/backend/bisheng/api/v1/usergroup.py index d3f38f730..3ae4bee7f 100644 --- a/src/backend/bisheng/api/v1/usergroup.py +++ b/src/backend/bisheng/api/v1/usergroup.py @@ -82,7 +82,7 @@ async def delete_group(request: Request, if not login_user.is_admin(): return UnAuthorizedError.return_resp() - return resp_200(RoleGroupService().delete_group(request, login_user, group_id)) + return RoleGroupService().delete_group(request, login_user, group_id) @router.post('/set_user_group', From 99bcf91ac1d9b67d159b0e1bed0b324a167669c4 Mon Sep 17 00:00:00 2001 From: dolphin <78075021@qq.com> Date: Fri, 28 Jun 2024 16:09:23 +0800 Subject: [PATCH 3/5] feat: Support level routing access system --- src/frontend/index.html | 2 +- src/frontend/package-lock.json | 458 +++++++++++++++++- src/frontend/package.json | 3 +- src/frontend/src/App.css | 5 +- .../components/VariablesComponent/index.tsx | 2 +- .../bs-comp/chatComponent/ChatInput.tsx | 4 +- .../bs-comp/chatComponent/MessageUser.tsx | 2 +- .../bs-comp/chatComponent/messageStore.ts | 7 +- .../chatComponent/buildTrigger/index.tsx | 2 +- src/frontend/src/controllers/request.ts | 5 +- src/frontend/src/i18n.js | 2 +- src/frontend/src/layout/MainLayout.tsx | 4 +- src/frontend/src/modals/formModal/index.tsx | 2 +- .../ChatAppPage/components/ChatPanne.tsx | 14 +- .../pages/ChatAppPage/components/FileView.tsx | 2 +- .../pages/DiffFlowPage/components/RunTest.tsx | 2 +- .../pages/EvaluationPage/EvaluationCreate.tsx | 26 +- src/frontend/src/pages/LoginPage/login.tsx | 8 +- src/frontend/src/pages/LoginPage/resetPwd.tsx | 2 +- src/frontend/src/pages/ModelPage/doc.tsx | 2 +- src/frontend/src/pages/Page403.tsx | 2 +- .../src/pages/Report/components/Word.tsx | 6 +- src/frontend/src/pages/Report/index.tsx | 2 +- .../editAssistant/AutoPromptDialog.tsx | 2 +- .../components/editAssistant/TestChat.tsx | 4 +- src/frontend/src/routes.tsx | 2 +- src/frontend/src/store/diffFlowStore.tsx | 2 +- 27 files changed, 515 insertions(+), 59 deletions(-) diff --git a/src/frontend/index.html b/src/frontend/index.html index 93372b65a..0402eee16 100644 --- a/src/frontend/index.html +++ b/src/frontend/index.html @@ -6,7 +6,7 @@ - + <%- aceScriptSrc %> BISHENG diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json index fe701e13d..086b8b054 100644 --- a/src/frontend/package-lock.json +++ b/src/frontend/package-lock.json @@ -1,16 +1,15 @@ { "name": "bisheng", - "version": "0.3.1", + "version": "0.3.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "bisheng", - "version": "0.3.1", + "version": "0.3.1.4", "dependencies": { "@emotion/react": "^11.11.1", "@emotion/styled": "^11.11.0", - "@esbuild/win32-x64": "^0.21.5", "@headlessui/react": "^1.7.17", "@heroicons/react": "^2.0.18", "@mui/material": "^5.14.7", @@ -116,6 +115,7 @@ "tailwindcss": "^3.3.3", "typescript": "^5.2.2", "vite": "^4.5.2", + "vite-plugin-html": "^3.2.2", "vite-plugin-static-copy": "^0.17.0" }, "engines": { @@ -1009,6 +1009,7 @@ "cpu": [ "x64" ], + "optional": true, "os": [ "win32" ], @@ -1177,6 +1178,16 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", @@ -4224,6 +4235,12 @@ "node": ">=8" } }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", @@ -4481,6 +4498,12 @@ "readable-stream": "^3.4.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -4540,6 +4563,12 @@ "ieee754": "^1.2.1" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true + }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmmirror.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -4603,6 +4632,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, "node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -4745,6 +4784,27 @@ "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.5.1.tgz", "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cli-cursor": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz", @@ -5096,6 +5156,12 @@ "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5125,7 +5191,22 @@ "version": "0.0.1", "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "optional": true + "devOptional": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -5211,6 +5292,22 @@ "tiny-invariant": "^1.0.6" } }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-selector-tokenizer": { "version": "0.8.0", "resolved": "https://registry.npmmirror.com/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", @@ -5220,6 +5317,18 @@ "fastparse": "^1.1.2" } }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz", @@ -5731,6 +5840,32 @@ "csstype": "^3.0.2" } }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/domexception/-/domexception-4.0.0.tgz", @@ -5743,11 +5878,40 @@ "node": ">=12" } }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, "node_modules/dompurify": { "version": "3.0.11", "resolved": "https://registry.npmmirror.com/dompurify/-/dompurify-3.0.11.tgz", "integrity": "sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==" }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -5757,11 +5921,47 @@ "tslib": "^2.0.3" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-8.0.3.tgz", + "integrity": "sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.717", "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", @@ -6109,6 +6309,27 @@ "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/filename-reserved-regex": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz", @@ -6695,6 +6916,15 @@ "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", @@ -6727,6 +6957,36 @@ "node": ">=12" } }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", @@ -7254,6 +7514,46 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/jest-diff": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/jest-diff/-/jest-diff-27.5.1.tgz", @@ -8381,6 +8681,16 @@ } } }, + "node_modules/node-html-parser": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", + "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", + "dev": true, + "dependencies": { + "css-select": "^4.2.1", + "he": "1.2.0" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz", @@ -8451,6 +8761,18 @@ "set-blocking": "^2.0.0" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/nwsapi": { "version": "2.2.7", "resolved": "https://registry.npmmirror.com/nwsapi/-/nwsapi-2.2.7.tgz", @@ -8637,6 +8959,16 @@ "node": ">=4" } }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", @@ -8691,6 +9023,16 @@ "node": ">=0.12" } }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", @@ -8768,6 +9110,12 @@ "node": ">=18" } }, + "node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, "node_modules/pdfjs-dist": { "version": "3.10.111", "resolved": "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-3.10.111.tgz", @@ -9753,6 +10101,15 @@ "unist-util-visit": "^4.0.0" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/remark-gfm/-/remark-gfm-3.0.1.tgz", @@ -10495,6 +10852,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -10881,6 +11257,30 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "optional": true }, + "node_modules/terser": { + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "devOptional": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true + }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", @@ -11364,6 +11764,56 @@ } } }, + "node_modules/vite-plugin-html": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/vite-plugin-html/-/vite-plugin-html-3.2.2.tgz", + "integrity": "sha512-vb9C9kcdzcIo/Oc3CLZVS03dL5pDlOFuhGlZYDCJ840BhWl/0nGeZWf3Qy7NlOayscY4Cm/QRgULCQkEZige5Q==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.0", + "colorette": "^2.0.16", + "connect-history-api-fallback": "^1.6.0", + "consola": "^2.15.3", + "dotenv": "^16.0.0", + "dotenv-expand": "^8.0.2", + "ejs": "^3.1.6", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.1", + "html-minifier-terser": "^6.1.0", + "node-html-parser": "^5.3.3", + "pathe": "^0.2.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-html/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/vite-plugin-html/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/vite-plugin-static-copy": { "version": "0.17.1", "resolved": "https://registry.npmmirror.com/vite-plugin-static-copy/-/vite-plugin-static-copy-0.17.1.tgz", diff --git a/src/frontend/package.json b/src/frontend/package.json index b49143389..2276c7adb 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,6 +1,6 @@ { "name": "bisheng", - "version": "0.3.1.4", + "version": "0.3.2", "private": true, "dependencies": { "@emotion/react": "^11.11.1", @@ -136,6 +136,7 @@ "tailwindcss": "^3.3.3", "typescript": "^5.2.2", "vite": "^4.5.2", + "vite-plugin-html": "^3.2.2", "vite-plugin-static-copy": "^0.17.0" }, "engines": { diff --git a/src/frontend/src/App.css b/src/frontend/src/App.css index eec3d61d6..3e7b125dd 100644 --- a/src/frontend/src/App.css +++ b/src/frontend/src/App.css @@ -215,11 +215,12 @@ .bs-chat-bg { width: 100%; - background: url(/points.png) 0 100% repeat-x; + background-position: 0 100%; + background-repeat: repeat-x; background-size: 10px 432px; } /* report情况隐藏离开按钮 */ -.report-hidden .leave{ +.report-hidden .leave { display: none !important; } \ No newline at end of file diff --git a/src/frontend/src/components/VariablesComponent/index.tsx b/src/frontend/src/components/VariablesComponent/index.tsx index 2ae6b02c4..9355c133a 100644 --- a/src/frontend/src/components/VariablesComponent/index.tsx +++ b/src/frontend/src/components/VariablesComponent/index.tsx @@ -70,7 +70,7 @@ export default function VariablesComponent({ vid, nodeId, flowId, onChange }: { param.id = _item.id } captureAndAlertRequestErrorHoc(saveVariableApi(param).then(res => { - const _items = items.map(item => item.id === _item.id ? { ..._item, id: res.id } : item) + const _items = items.map(item => item.id === _item.id ? { ..._item, id: res.id, update: true } : item) // const hasValue = _items.find(item => item.name) // 保存时 id传出去保存,用来校验必填项 onChange(_items.map(el => el.name)) diff --git a/src/frontend/src/components/bs-comp/chatComponent/ChatInput.tsx b/src/frontend/src/components/bs-comp/chatComponent/ChatInput.tsx index d57795362..60333d8ab 100644 --- a/src/frontend/src/components/bs-comp/chatComponent/ChatInput.tsx +++ b/src/frontend/src/components/bs-comp/chatComponent/ChatInput.tsx @@ -101,7 +101,7 @@ export default function ChatInput({ clear, form, stop, questions, inputForm, wsU const sendWsMsg = async (msg) => { try { - console.log('WebSocket send: ' + Date.now() + ' 毫秒'); + // console.log('WebSocket send: ' + Date.now() + ' 毫秒'); wsRef.current.send(JSON.stringify(msg)) } catch (error) { @@ -138,7 +138,7 @@ export default function ChatInput({ clear, form, stop, questions, inputForm, wsU res('ok') }; ws.onmessage = (event) => { - console.log('WebSocket get: ' + Date.now() + ' 毫秒'); + // console.log('WebSocket get: ' + Date.now() + ' 毫秒'); const data = JSON.parse(event.data); const errorMsg = data.category === 'error' ? data.intermediate_steps : '' // 异常类型处理,提示 diff --git a/src/frontend/src/components/bs-comp/chatComponent/MessageUser.tsx b/src/frontend/src/components/bs-comp/chatComponent/MessageUser.tsx index 6761b6b00..6f2ead90c 100644 --- a/src/frontend/src/components/bs-comp/chatComponent/MessageUser.tsx +++ b/src/frontend/src/components/bs-comp/chatComponent/MessageUser.tsx @@ -30,7 +30,7 @@ export default function MessageUser({ useName, data }: { data: ChatMessageType }
{msg}
-
+
{/* 附加信息 */} diff --git a/src/frontend/src/components/bs-comp/chatComponent/messageStore.ts b/src/frontend/src/components/bs-comp/chatComponent/messageStore.ts index 632ff1bc4..61184ab2a 100644 --- a/src/frontend/src/components/bs-comp/chatComponent/messageStore.ts +++ b/src/frontend/src/components/bs-comp/chatComponent/messageStore.ts @@ -189,10 +189,15 @@ export const useMessageStore = create((set, get) => ({ id: isRunLog ? wsdata.extra : wsdata.messageId, // 每条消息必唯一 message: isRunLog ? JSON.parse(wsdata.message) : currentMessage.message + wsdata.message, thought: currentMessage.thought + (wsdata.thought ? `${wsdata.thought}\n` : ''), - files: wsdata.files || null, + files: wsdata.files || [], category: wsdata.category || '', source: wsdata.source } + // 无id补上(如文件解析完成消息,后端无返回messageid) + if (!newCurrentMessage.id) { + newCurrentMessage.id = Math.random() * 1000000 + console.log('msg:', newCurrentMessage); + } messages[currentMessageIndex] = newCurrentMessage // 会话特殊处理,兼容后端的缺陷 diff --git a/src/frontend/src/components/chatComponent/buildTrigger/index.tsx b/src/frontend/src/components/chatComponent/buildTrigger/index.tsx index d36094e55..766ce1ede 100644 --- a/src/frontend/src/components/chatComponent/buildTrigger/index.tsx +++ b/src/frontend/src/components/chatComponent/buildTrigger/index.tsx @@ -71,7 +71,7 @@ export default function BuildTrigger({ let validationResults = []; let finished = false; let buildEnd = false - const apiUrl = `/api/v1/build/stream/${flowId}`; + const apiUrl = `${__APP_ENV__.BASE_URL}/api/v1/build/stream/${flowId}`; const eventSource = new EventSource(apiUrl); eventSource.onmessage = (event) => { diff --git a/src/frontend/src/controllers/request.ts b/src/frontend/src/controllers/request.ts index a30b24d68..975ed0396 100644 --- a/src/frontend/src/controllers/request.ts +++ b/src/frontend/src/controllers/request.ts @@ -3,8 +3,7 @@ import axios from "axios"; import i18next from "i18next"; axios.defaults.withCredentials = true; const customAxios = axios.create({ - baseURL:'' - // baseURL:'/proapi' + baseURL: import.meta.env.BASE_URL // 配置 }); @@ -13,7 +12,7 @@ customAxios.interceptors.response.use(function (response) { return response.data.data; } if (response.data.status_code === 403) { - location.href = '/403' + location.href = __APP_ENV__.BASE_URL + '/403' return Promise.reject(response.data.status_message); } return Promise.reject(response.data.status_message); diff --git a/src/frontend/src/i18n.js b/src/frontend/src/i18n.js index 15863bf4e..6619d6ae0 100644 --- a/src/frontend/src/i18n.js +++ b/src/frontend/src/i18n.js @@ -15,7 +15,7 @@ i18n.use(Backend) ns: ['bs'], lng: 'zh', // userLanguage === 'zh' ? userLanguage : 'en', // 除中文即英文 backend: { - loadPath: '/locales/{{lng}}/{{ns}}.json' + loadPath: __APP_ENV__.BASE_URL + '/locales/{{lng}}/{{ns}}.json' }, interpolation: { escapeValue: false // react already safes from xss diff --git a/src/frontend/src/layout/MainLayout.tsx b/src/frontend/src/layout/MainLayout.tsx index 7791c59c1..3b546dff5 100755 --- a/src/frontend/src/layout/MainLayout.tsx +++ b/src/frontend/src/layout/MainLayout.tsx @@ -64,7 +64,7 @@ export default function MainLayout() {
- +
@@ -98,7 +98,7 @@ export default function MainLayout() {
- + diff --git a/src/frontend/src/modals/formModal/index.tsx b/src/frontend/src/modals/formModal/index.tsx index a1769e347..3d9dc5eea 100644 --- a/src/frontend/src/modals/formModal/index.tsx +++ b/src/frontend/src/modals/formModal/index.tsx @@ -190,7 +190,7 @@ export default function FormModal({ const isSecureProtocol = window.location.protocol === "https:"; const webSocketProtocol = isSecureProtocol ? "wss" : "ws"; const host = appConfig.websocketHost || window.location.host // isDevelopment ? "localhost:7860" : window.location.host; - const chatEndpoint = `/api/v1/chat/${chatId}`; + const chatEndpoint = `${__APP_ENV__.BASE_URL}/api/v1/chat/${chatId}`; const token = localStorage.getItem("ws_token") || ''; return `${isDevelopment ? "ws" : webSocketProtocol diff --git a/src/frontend/src/pages/ChatAppPage/components/ChatPanne.tsx b/src/frontend/src/pages/ChatAppPage/components/ChatPanne.tsx index 5aa434d15..a6db61bf0 100644 --- a/src/frontend/src/pages/ChatAppPage/components/ChatPanne.tsx +++ b/src/frontend/src/pages/ChatAppPage/components/ChatPanne.tsx @@ -112,11 +112,11 @@ export default function ChatPanne({ customWsHost = '', appendHistory = false, da // 应用链接 const { appConfig } = useContext(locationContext) const token = localStorage.getItem("ws_token") || ''; - let wsUrl = type === 'flow' ? `${appConfig.websocketHost}/api/v1/chat/${flowRef.current?.id}?type=L1&t=${token}` : - `${location.host}/api/v1/assistant/chat/${assistant?.id}?t=${token}` + let wsUrl = type === 'flow' ? `${appConfig.websocketHost}${__APP_ENV__.BASE_URL}/api/v1/chat/${flowRef.current?.id}?type=L1&t=${token}` : + `${location.host}${__APP_ENV__.BASE_URL}/api/v1/assistant/chat/${assistant?.id}?t=${token}` if (customWsHost) { - wsUrl = `${appConfig.websocketHost}${customWsHost}&t=${token}` + wsUrl = `${appConfig.websocketHost}${__APP_ENV__.BASE_URL}${customWsHost}&t=${token}` } // sendmsg user name @@ -157,8 +157,8 @@ export default function ChatPanne({ customWsHost = '', appendHistory = false, da document.dispatchEvent(myEvent); } - if (!(flow || assistant)) return
- + if (!(flow || assistant)) return
+

{t('chat.chooseOne')}{t('chat.dialogue')}
{t('chat.start')}{t('chat.wenqingruijian')}

@@ -175,7 +175,7 @@ export default function ChatPanne({ customWsHost = '', appendHistory = false, da
- return
+ return
{/* 技能会话 */} { flow &&
@@ -242,7 +242,7 @@ const useBuild = () => { let validationResults = []; let finished = false; let buildEnd = false - const apiUrl = `/api/v1/build/stream/${flowId}?chat_id=${chatId}`; + const apiUrl = `${__APP_ENV__.BASE_URL}/api/v1/build/stream/${flowId}?chat_id=${chatId}`; const eventSource = new EventSource(apiUrl); eventSource.onmessage = (event) => { diff --git a/src/frontend/src/pages/ChatAppPage/components/FileView.tsx b/src/frontend/src/pages/ChatAppPage/components/FileView.tsx index d82289cad..d21769a28 100644 --- a/src/frontend/src/pages/ChatAppPage/components/FileView.tsx +++ b/src/frontend/src/pages/ChatAppPage/components/FileView.tsx @@ -144,7 +144,7 @@ export default function FileView({ data }) { // sass环境使用sass地址 const pdfUrl = checkSassUrl(data.fileUrl); // '/doc.pdf'; - pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdf.worker.min.js'; + pdfjsLib.GlobalWorkerOptions.workerSrc = __APP_ENV__.BASE_URL + '/pdf.worker.min.js'; pdfjsLib.getDocument(pdfUrl).promise.then((pdfDocument) => { setLoading(false) setPdf(pdfDocument) diff --git a/src/frontend/src/pages/DiffFlowPage/components/RunTest.tsx b/src/frontend/src/pages/DiffFlowPage/components/RunTest.tsx index 5e8118598..e8d27511c 100644 --- a/src/frontend/src/pages/DiffFlowPage/components/RunTest.tsx +++ b/src/frontend/src/pages/DiffFlowPage/components/RunTest.tsx @@ -260,7 +260,7 @@ const useBuild = () => { let finished = false; let buildEnd = false const qstr = flow.id ? `?version_id=${flow.id}` : '' - const apiUrl = `/api/v1/build/stream/${flowId}${qstr}`; + const apiUrl = `${__APP_ENV__.BASE_URL}/api/v1/build/stream/${flowId}${qstr}`; const eventSource = new EventSource(apiUrl); eventSource.onmessage = (event) => { diff --git a/src/frontend/src/pages/EvaluationPage/EvaluationCreate.tsx b/src/frontend/src/pages/EvaluationPage/EvaluationCreate.tsx index f89aed713..c17237abc 100644 --- a/src/frontend/src/pages/EvaluationPage/EvaluationCreate.tsx +++ b/src/frontend/src/pages/EvaluationPage/EvaluationCreate.tsx @@ -62,12 +62,12 @@ export default function EvaluatingCreate() { const errorlist = []; // 限制文件最大为 10M - if(size > 10 * 1024 * 1024){ + if (size > 10 * 1024 * 1024) { errorlist.push(t("evaluation.fileSizeLimit")); fileRef.current = null return handleError(errorlist); } - + const names = acceptedFiles[0].name; setFileName(names); }; @@ -131,7 +131,7 @@ export default function EvaluatingCreate() { const handleDownloadTemplate = () => { const link = document.createElement("a"); - link.href = "/template.csv"; // 文件路径 + link.href = __APP_ENV__.BASE_URL + "/template.csv"; // 文件路径 link.download = "template.csv"; // 下载时的文件名 document.body.appendChild(link); link.click(); @@ -140,15 +140,15 @@ export default function EvaluatingCreate() { const handleSearch = useCallback(debounce((value) => { if (selectedType === "flow") { - readFlowsFromDatabase(1, 100, value).then((_flow) => { - setDataSource(_flow.data); - }); - } else if (selectedType === "assistant") { - getAssistantsApi(1, 100, value).then((data) => { - setDataSource((data as any).data as AssistantItemDB[]); - }); - } - }, 300),[selectedType]) + readFlowsFromDatabase(1, 100, value).then((_flow) => { + setDataSource(_flow.data); + }); + } else if (selectedType === "assistant") { + getAssistantsApi(1, 100, value).then((data) => { + setDataSource((data as any).data as AssistantItemDB[]); + }); + } + }, 300), [selectedType]) const handleInputChange = (event) => { setQuery(event.target.value); @@ -157,7 +157,7 @@ export default function EvaluatingCreate() { useEffect(() => { return () => { - handleSearch.cancel(); + handleSearch.cancel(); }; }, [handleSearch]); diff --git a/src/frontend/src/pages/LoginPage/login.tsx b/src/frontend/src/pages/LoginPage/login.tsx index fdf725515..abe9311b3 100644 --- a/src/frontend/src/pages/LoginPage/login.tsx +++ b/src/frontend/src/pages/LoginPage/login.tsx @@ -62,7 +62,7 @@ export const LoginPage = () => { // setUser(res.data) localStorage.setItem('ws_token', res.access_token) localStorage.setItem('isLogin', '1') - location.href = '/' + location.href = __APP_ENV__.BASE_URL + '/' }), (error) => { if (error.indexOf('过期') !== -1) { // 有时间改为 code 判断 localStorage.setItem('account', mail) @@ -119,13 +119,13 @@ export const LoginPage = () => { return
- logo_picture - logo_picture + logo_picture + logo_picture
- small_logo + small_logo {t('login.slogen')}
diff --git a/src/frontend/src/pages/LoginPage/resetPwd.tsx b/src/frontend/src/pages/LoginPage/resetPwd.tsx index eaee5a54c..ce9c90f88 100644 --- a/src/frontend/src/pages/LoginPage/resetPwd.tsx +++ b/src/frontend/src/pages/LoginPage/resetPwd.tsx @@ -84,7 +84,7 @@ export const ResetPwdPage = () => { >}
- small_logo + small_logo {t('resetPassword.slogen')}
diff --git a/src/frontend/src/pages/ModelPage/doc.tsx b/src/frontend/src/pages/ModelPage/doc.tsx index 24b587de5..bc02bea03 100644 --- a/src/frontend/src/pages/ModelPage/doc.tsx +++ b/src/frontend/src/pages/ModelPage/doc.tsx @@ -201,7 +201,7 @@ export default function Doc() { // const [loading, setLoading] = useState(true) useEffect(() => { - var link = '/doc.pdf' + var link = __APP_ENV__.BASE_URL + '/doc.pdf' var iframe: any = document.getElementById('iframe') diff --git a/src/frontend/src/pages/Page403.tsx b/src/frontend/src/pages/Page403.tsx index 44e08fef4..79206f642 100644 --- a/src/frontend/src/pages/Page403.tsx +++ b/src/frontend/src/pages/Page403.tsx @@ -13,7 +13,7 @@ export default function Page403() {
diff --git a/src/frontend/src/pages/Report/components/Word.tsx b/src/frontend/src/pages/Report/components/Word.tsx index 97e712eb7..9e93026ab 100644 --- a/src/frontend/src/pages/Report/components/Word.tsx +++ b/src/frontend/src/pages/Report/components/Word.tsx @@ -6,7 +6,7 @@ export default function Word({ data }) { const { appConfig } = useContext(locationContext) const wordUrl = appConfig.officeUrl - const backUrl = location.origin + '/api/v1/report/callback' // 后端服务地址 + const backUrl = `${location.origin}${__APP_ENV__.BASE_URL}/api/v1/report/callback` // 后端服务地址 const editorConfig = { // 编辑器宽度 @@ -55,8 +55,8 @@ export default function Word({ data }) { unit: "cm", uiTheme: "theme-dark", logo: { - "image": location.origin + "/logo.jpeg", - "imageDark": location.origin + "/logo.jpeg", + "image": location.origin + __APP_ENV__.BASE_URL + "/logo.jpeg", + "imageDark": location.origin + __APP_ENV__.BASE_URL + "/logo.jpeg", "url": "https://example.com" } }, diff --git a/src/frontend/src/pages/Report/index.tsx b/src/frontend/src/pages/Report/index.tsx index 2a22ad30a..5a4d63cbe 100644 --- a/src/frontend/src/pages/Report/index.tsx +++ b/src/frontend/src/pages/Report/index.tsx @@ -88,7 +88,7 @@ const useReport = () => { setDocx({ ...docx, // path: 'http://192.168.106.120:3002/empty.docx' - path: location.origin + '/empty.docx' // 文档服务能访问到的文件地址 + path: location.origin + __APP_ENV__.BASE_URL + '/empty.docx' // 文档服务能访问到的文件地址 }) } diff --git a/src/frontend/src/pages/SkillPage/components/editAssistant/AutoPromptDialog.tsx b/src/frontend/src/pages/SkillPage/components/editAssistant/AutoPromptDialog.tsx index 9dfb6720d..ce594cd63 100644 --- a/src/frontend/src/pages/SkillPage/components/editAssistant/AutoPromptDialog.tsx +++ b/src/frontend/src/pages/SkillPage/components/editAssistant/AutoPromptDialog.tsx @@ -27,7 +27,7 @@ export default function AutoPromptDialog({ onOpenChange }) { const init = () => { const prompt = areaRef.current.value - const apiUrl = `/api/v1/assistant/auto?assistant_id=${id}&prompt=${encodeURIComponent(prompt)}`; + const apiUrl = `${__APP_ENV__.BASE_URL}/api/v1/assistant/auto?assistant_id=${id}&prompt=${encodeURIComponent(prompt)}`; const eventSource = new EventSource(apiUrl); areaRef.current.value = '' let queue = LoadType.Prompt diff --git a/src/frontend/src/pages/SkillPage/components/editAssistant/TestChat.tsx b/src/frontend/src/pages/SkillPage/components/editAssistant/TestChat.tsx index e74335a33..ffd703a15 100644 --- a/src/frontend/src/pages/SkillPage/components/editAssistant/TestChat.tsx +++ b/src/frontend/src/pages/SkillPage/components/editAssistant/TestChat.tsx @@ -8,7 +8,7 @@ import { useTranslation } from "react-i18next"; export default function TestChat({ assisId, guideQuestion }) { const token = localStorage.getItem("ws_token") || ''; - const wsUrl = `${location.host}/api/v1/assistant/chat/${assisId}?t=${token}` + const wsUrl = `${location.host}${__APP_ENV__.BASE_URL}/api/v1/assistant/chat/${assisId}?t=${token}` const { messages, changeChatId } = useMessageStore() const { assistantState } = useAssistantStore() @@ -38,7 +38,7 @@ export default function TestChat({ assisId, guideQuestion }) { return [msgData, inputKey] } - return
+ return
{t('build.debugPreview')} diff --git a/src/frontend/src/routes.tsx b/src/frontend/src/routes.tsx index ff8a6abd9..7939310a3 100755 --- a/src/frontend/src/routes.tsx +++ b/src/frontend/src/routes.tsx @@ -46,7 +46,7 @@ const ErrorHoc = ({ Comp }) => { } const baseConfig = { - // basename: "/pro" + basename: __APP_ENV__.BASE_URL } diff --git a/src/frontend/src/store/diffFlowStore.tsx b/src/frontend/src/store/diffFlowStore.tsx index f4e6c8035..5043b4d59 100644 --- a/src/frontend/src/store/diffFlowStore.tsx +++ b/src/frontend/src/store/diffFlowStore.tsx @@ -220,7 +220,7 @@ const runTest = ({ questions, questionIndexs, nodeId, versionIds, inputs, refs } }) return new Promise((resolve, reject) => { - const apiUrl = `/api/v1/flows/compare/stream?data=${encodeURIComponent(data)}`; + const apiUrl = `${__APP_ENV__.BASE_URL}/api/v1/flows/compare/stream?data=${encodeURIComponent(data)}`; const eventSource = new EventSource(apiUrl); eventSource.onmessage = (event) => { From d322c502ebe1d347c09b37cf3c884e1635450258 Mon Sep 17 00:00:00 2001 From: MyGit <3282299728@qq.com> Date: Fri, 28 Jun 2024 16:32:15 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=AD=9B=E9=80=89=E5=B7=B2=E9=80=89=E9=A1=B9=E4=B8=8A=E6=B5=AE?= =?UTF-8?q?=E7=BD=AE=E9=A1=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/SystemPage/components/Users.tsx | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/SystemPage/components/Users.tsx b/src/frontend/src/pages/SystemPage/components/Users.tsx index 206a67ecd..ea75093d1 100644 --- a/src/frontend/src/pages/SystemPage/components/Users.tsx +++ b/src/frontend/src/pages/SystemPage/components/Users.tsx @@ -24,7 +24,7 @@ import { useTable } from "../../../util/hook"; import UserRoleModal from "./UserRoleModal"; import UserPwdModal from "@/pages/LoginPage/UserPwdModal"; -function UsersFilter({ options, nameKey, placeholder, onFilter }) { +function UsersFilter({ options, onChecked, nameKey, placeholder, onFilter }) { const [open, setOpen] = useState(false) const [_value, setValue] = useState([]) const [searchKey, setSearchKey] = useState('') @@ -35,6 +35,10 @@ function UsersFilter({ options, nameKey, placeholder, onFilter }) { index === -1 ? val.push(id) : val.splice(index, 1) return [...val] }) + // 已选项上浮 + const checked = options.filter(o => _value.includes(o.id)) + const uncheck = options.filter(o => !_value.includes(o.id)) + onChecked([...checked, ...uncheck]) } const filterData = () => { @@ -125,6 +129,13 @@ export default function Users(params) { const res: any = await getRolesApi() setRoles(res) } + // 已选项上浮 + const handleGroupChecked = (values) => { + setUserGroups(values) + } + const handleRoleChecked = (values) => { + setRoles(values) + } useEffect(() => { getUserGoups() @@ -173,6 +184,7 @@ export default function Users(params) { filterData({ groupId: ids })} > @@ -184,6 +196,7 @@ export default function Users(params) { filterData({ roleId: ids })} > From ced76bd39aabe6e05a49b7d8de4e7f81e3ba55ef Mon Sep 17 00:00:00 2001 From: dolphin <78075021@qq.com> Date: Fri, 28 Jun 2024 16:39:20 +0800 Subject: [PATCH 5/5] feat: vite config --- src/frontend/src/layout/MainLayout.tsx | 6 +- .../ChatAppPage/components/ResouceModal.tsx | 4 +- src/frontend/src/pages/LoginPage/login.tsx | 8 +-- .../pages/SystemPage/components/EditRole.tsx | 4 +- src/frontend/vite.config.ts | 56 +++++++++++++++---- 5 files changed, 56 insertions(+), 22 deletions(-) diff --git a/src/frontend/src/layout/MainLayout.tsx b/src/frontend/src/layout/MainLayout.tsx index 3b546dff5..cd9e8b550 100755 --- a/src/frontend/src/layout/MainLayout.tsx +++ b/src/frontend/src/layout/MainLayout.tsx @@ -135,13 +135,13 @@ export default function MainLayout() { {t('menu.models')} } - {/* { - 中英 + {/* 中英 */} + { isMenu('evaluation') && {t('menu.evaluation')} - } */} + } { isAdmin && <> diff --git a/src/frontend/src/pages/ChatAppPage/components/ResouceModal.tsx b/src/frontend/src/pages/ChatAppPage/components/ResouceModal.tsx index 83bf338f6..2c2e66efe 100644 --- a/src/frontend/src/pages/ChatAppPage/components/ResouceModal.tsx +++ b/src/frontend/src/pages/ChatAppPage/components/ResouceModal.tsx @@ -91,7 +91,7 @@ const ResultPanne = ({ chatId, words, data, onClose, onAdd, children }: { chatId
{/* label */} {/* 中英 */} - {/*
+
{t('chat.filterLabel')}
?
@@ -109,7 +109,7 @@ const ResultPanne = ({ chatId, words, data, onClose, onAdd, children }: { chatId }}>
:
{t('chat.addCustomLabel')}
} -
*/} +
{/* files */}

{t('chat.sourceDocumentsLabel')}

diff --git a/src/frontend/src/pages/LoginPage/login.tsx b/src/frontend/src/pages/LoginPage/login.tsx index abe9311b3..bc3665513 100644 --- a/src/frontend/src/pages/LoginPage/login.tsx +++ b/src/frontend/src/pages/LoginPage/login.tsx @@ -178,10 +178,10 @@ export const LoginPage = () => { ) } {/* 中英 */} - - {/* { + disabled={isLoading} onClick={handleLogin} >{t('login.loginButton')} */} + { showLogin ? <>
setShowLogin(false)}>{t('login.noAccountRegister')} @@ -198,7 +198,7 @@ export const LoginPage = () => { className='h-[48px] mt-[32px] dark:bg-button' disabled={isLoading} onClick={handleRegister} >{t('login.registerButton')} - } */} + } {appConfig.hasSSO && }
diff --git a/src/frontend/src/pages/SystemPage/components/EditRole.tsx b/src/frontend/src/pages/SystemPage/components/EditRole.tsx index ca566ffbe..8a3af826d 100644 --- a/src/frontend/src/pages/SystemPage/components/EditRole.tsx +++ b/src/frontend/src/pages/SystemPage/components/EditRole.tsx @@ -200,12 +200,12 @@ export default function EditRole({ id, name, groupId, onChange, onBeforeChange } {/* 中英 */} - {/* + 评测 switchDataChange(MenuType.EVALUATION, 'useMenu', bln)} /> - */} +
diff --git a/src/frontend/vite.config.ts b/src/frontend/vite.config.ts index d369b4e48..edad03d12 100644 --- a/src/frontend/vite.config.ts +++ b/src/frontend/vite.config.ts @@ -1,12 +1,13 @@ import react from "@vitejs/plugin-react-swc"; -import { visualizer } from "rollup-plugin-visualizer"; +import path from "path"; import { defineConfig } from "vite"; +import { createHtmlPlugin } from 'vite-plugin-html'; import { viteStaticCopy } from 'vite-plugin-static-copy'; import svgr from "vite-plugin-svgr"; -const apiRoutes = ["^/api/", "/health"]; -import path from "path"; + // Use environment variable to determine the target. const target = process.env.VITE_PROXY_TARGET || "http://192.168.106.120:3002"; +const apiRoutes = ["^/api/", "/health"]; const proxyTargets = apiRoutes.reduce((proxyObj, route) => { proxyObj[route] = { @@ -16,19 +17,41 @@ const proxyTargets = apiRoutes.reduce((proxyObj, route) => { secure: false, ws: true, }; - // 文件服务地址 - proxyObj['/bisheng'] = { - target: "http://127.0.0.1:50061", - changeOrigin: true, - withCredentials: true, - secure: false - } return proxyObj; }, {}); +// 文件服务地址 +proxyTargets['/bisheng'] = { + target: "http://127.0.0.1:50061", + changeOrigin: true, + withCredentials: true, + secure: false +} +proxyTargets['/custom_base/api'] = { + target, + changeOrigin: true, + withCredentials: true, + secure: false, + rewrite: (path) => { + return path.replace(/^\/custom_base\/api/, '/api'); + }, + configure: (proxy, options) => { + proxy.on('proxyReq', (proxyReq, req, res) => { + console.log('Proxying request to:', proxyReq.path); + }); + } +} + +/** + * 开启子路由访问 + * 开启后一般外层网管匹配【custom】时直接透传转到内层网关 + * 内层网关访问 api或者前端静态资源需要去掉【custom】前缀 +*/ +// const app_env = { BASE_URL: '/custom' } +const app_env = { BASE_URL: '' } export default defineConfig(() => { return { - // base: '/poo', + base: app_env.BASE_URL || '/', build: { // minify: 'esbuild', // 使用 esbuild 进行 Tree Shaking 和压缩 outDir: "build", @@ -51,6 +74,14 @@ export default defineConfig(() => { plugins: [ react(), svgr(), + createHtmlPlugin({ + minify: true, + inject: { + data: { + aceScriptSrc: ``, + }, + }, + }), viteStaticCopy({ targets: [ { @@ -74,6 +105,9 @@ export default defineConfig(() => { // open: true, // }) ], + define: { + __APP_ENV__: JSON.stringify(app_env) + }, server: { host: '0.0.0.0', port: 3001,