diff --git a/backend/apps/api.py b/backend/apps/api.py index 9cdb8315..f53f7fa4 100644 --- a/backend/apps/api.py +++ b/backend/apps/api.py @@ -5,7 +5,7 @@ from apps.data_training.api import data_training from apps.datasource.api import datasource, table_relation, recommended_problem from apps.mcp import mcp -from apps.system.api import login, user, aimodel, workspace, assistant +from apps.system.api import login, user, aimodel, workspace, assistant, parameter from apps.terminology.api import terminology from apps.settings.api import base @@ -23,5 +23,6 @@ api_router.include_router(dashboard_api.router) api_router.include_router(mcp.router) api_router.include_router(table_relation.router) +api_router.include_router(parameter.router) api_router.include_router(recommended_problem.router) diff --git a/backend/apps/system/api/parameter.py b/backend/apps/system/api/parameter.py new file mode 100644 index 00000000..dc335281 --- /dev/null +++ b/backend/apps/system/api/parameter.py @@ -0,0 +1,17 @@ + +from fastapi import APIRouter, Request +from sqlbot_xpack.config.model import SysArgModel + + +from apps.system.crud.parameter_manage import get_parameter_args, save_parameter_args +from common.core.deps import SessionDep + +router = APIRouter(tags=["system/parameter"], prefix="/system/parameter") + +@router.get("") +async def get_args(session: SessionDep) -> list[SysArgModel]: + return await get_parameter_args(session) + +@router.post("", ) +async def save_args(session: SessionDep, request: Request): + return await save_parameter_args(session = session, request = request) diff --git a/backend/apps/system/crud/parameter_manage.py b/backend/apps/system/crud/parameter_manage.py new file mode 100644 index 00000000..118dad51 --- /dev/null +++ b/backend/apps/system/crud/parameter_manage.py @@ -0,0 +1,41 @@ +from fastapi import Request +from sqlbot_xpack.config.arg_manage import get_group_args, save_group_args +from sqlbot_xpack.config.model import SysArgModel +import json +from common.core.deps import SessionDep +from sqlbot_xpack.file_utils import SQLBotFileUtils + +async def get_parameter_args(session: SessionDep) -> list[SysArgModel]: + group_args = await get_group_args(session=session) + return [x for x in group_args if not x.pkey.startswith('appearance.')] + +async def save_parameter_args(session: SessionDep, request: Request): + allow_file_mapping = { + """ "test_logo": { "types": [".jpg", ".jpeg", ".png", ".svg"], "size": 5 * 1024 * 1024 } """ + } + form_data = await request.form() + files = form_data.getlist("files") + json_text = form_data.get("data") + sys_args = [ + SysArgModel(**{**item, "pkey": f"{item['pkey']}"}) + for item in json.loads(json_text) + if "pkey" in item + ] + if not sys_args: + return + file_mapping = None + if files: + file_mapping = {} + for file in files: + origin_file_name = file.filename + file_name, flag_name = SQLBotFileUtils.split_filename_and_flag(origin_file_name) + file.filename = file_name + allow_limit_obj = allow_file_mapping.get(flag_name) + if allow_limit_obj: + SQLBotFileUtils.check_file(file=file, file_types=allow_limit_obj.get("types"), limit_file_size=allow_limit_obj.get("size")) + else: + raise Exception(f'The file [{file_name}] is not allowed to be uploaded!') + file_id = await SQLBotFileUtils.upload(file) + file_mapping[f"{flag_name}"] = file_id + + await save_group_args(session=session, sys_args=sys_args, file_mapping=file_mapping) \ No newline at end of file diff --git a/frontend/src/i18n/en.json b/frontend/src/i18n/en.json index 45520262..9c081b60 100644 --- a/frontend/src/i18n/en.json +++ b/frontend/src/i18n/en.json @@ -14,13 +14,15 @@ "rows_of_data": "Limit 1000 Rows of Data", "third_party_platform_settings": "Third-Party Platform Settings", "by_third_party_platform": "Automatic User Creation by Third-Party Platform", - "platform_user_organization": "Third-Party Platform User Organization", + "platform_user_organization": "Third-Party Platform Workspace", "platform_user_roles": "Third-Party Platform User Roles", "excessive_data_volume": "Disabling the 1000-row data limit may cause system lag due to excessive data volume.", "prompt": "Prompt", "disabling_successfully": "Disabling Successfully", "closed_by_default": "In the Question Count window, control whether the model thinking process is expanded or closed by default.", - "and_platform_integration": "Scope includes authentication settings and platform integration." + "and_platform_integration": "Scope includes authentication settings and platform integration.", + "login_settings": "Login Settings", + "default_login": "Default Login Method" }, "prompt": { "default_password": "Default password:{msg}", @@ -815,4 +817,4 @@ "modelType": { "llm": "Large Language Model" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/ko-KR.json b/frontend/src/i18n/ko-KR.json index 00724c6d..8544f1b9 100644 --- a/frontend/src/i18n/ko-KR.json +++ b/frontend/src/i18n/ko-KR.json @@ -14,13 +14,15 @@ "rows_of_data": "데이터 1,000행 제한", "third_party_platform_settings": "타사 플랫폼 설정", "by_third_party_platform": "타사 플랫폼에 의한 자동 사용자 생성", - "platform_user_organization": "타사 플랫폼 사용자 구성", + "platform_user_organization": "제3자 플랫폼 작업 공간", "platform_user_roles": "타사 플랫폼 사용자 역할", "excessive_data_volume": "1,000행 데이터 제한을 비활성화하면 과도한 데이터 양으로 인해 시스템 지연이 발생할 수 있습니다.", "prompt": "프롬프트", "disabling_successfully": "비활성화 완료", "closed_by_default": "질문 수 창에서 모델 사고 프로세스를 기본적으로 확장할지 또는 닫을지 여부를 제어합니다.", - "and_platform_integration": "범위에는 인증 설정 및 플랫폼 통합이 포함됩니다." + "and_platform_integration": "범위에는 인증 설정 및 플랫폼 통합이 포함됩니다.", + "login_settings": "로그인 설정", + "default_login": "기본 로그인 방식" }, "prompt": { "default_password:": "기본 비밀번호:{msg}", @@ -815,4 +817,4 @@ "modelType": { "llm": "대형 언어 모델" } -} \ No newline at end of file +} diff --git a/frontend/src/i18n/zh-CN.json b/frontend/src/i18n/zh-CN.json index 0be8b96b..a3c8a4c6 100644 --- a/frontend/src/i18n/zh-CN.json +++ b/frontend/src/i18n/zh-CN.json @@ -14,13 +14,15 @@ "rows_of_data": "限制 1000 行数据", "third_party_platform_settings": "第三方平台设置", "by_third_party_platform": "第三方自动创建用户", - "platform_user_organization": "第三方平台用户组织", + "platform_user_organization": "第三方平台工作空间", "platform_user_roles": "第三方平台用户角色", "excessive_data_volume": "关闭1000行的数据限制后,数据量过大,可能会造成系统卡顿", "prompt": "提示", "disabling_successfully": "关闭成功", "closed_by_default": "在问数窗口中,控制模型思考过程默认展开或者关闭", - "and_platform_integration": "作用域包括认证设置和平台对接" + "and_platform_integration": "作用域包括认证设置和平台对接", + "login_settings": "登录设置", + "default_login": "默认登录方式" }, "prompt": { "default_password": "默认密码:{msg}", @@ -816,4 +818,4 @@ "modelType": { "llm": "大语言模型" } -} \ No newline at end of file +} diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 8ba1f21f..275d33a4 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -95,6 +95,7 @@ export const routes = [ }, { path: '/set', + name: 'set', component: LayoutDsl, redirect: '/set/member', meta: { title: t('workspace.set'), iconActive: 'set', iconDeActive: 'noSet' }, @@ -145,6 +146,7 @@ export const routes = [ }, { path: '/system', + name: 'system', component: LayoutDsl, redirect: '/system/user', meta: { hidden: true }, diff --git a/frontend/src/utils/utils.ts b/frontend/src/utils/utils.ts index f31e25d6..1373ada5 100644 --- a/frontend/src/utils/utils.ts +++ b/frontend/src/utils/utils.ts @@ -263,3 +263,22 @@ export const getSQLBotAddr = (portEnd?: boolean) => { } return addr.substring(0, addr.length - 1) } + +export const formatArg = (text: string) => { + if (!text) { + return false + } + const mappingArray = ['true', 'false', '1', '0'] + const match = mappingArray.some((item: string) => { + return item === text.toLocaleLowerCase() + }) + if (!match) { + return text + } + try { + return JSON.parse(text) + } catch (e: any) { + console.warn(e) + return text + } +} diff --git a/frontend/src/views/system/parameter/index.vue b/frontend/src/views/system/parameter/index.vue index 273b7f9c..dd87dacc 100644 --- a/frontend/src/views/system/parameter/index.vue +++ b/frontend/src/views/system/parameter/index.vue @@ -1,23 +1,63 @@ diff --git a/frontend/src/views/system/parameter/xpack/PlatformParam.vue b/frontend/src/views/system/parameter/xpack/PlatformParam.vue new file mode 100644 index 00000000..0b08b2b3 --- /dev/null +++ b/frontend/src/views/system/parameter/xpack/PlatformParam.vue @@ -0,0 +1,210 @@ + + + + +