diff --git a/backend/apps/api.py b/backend/apps/api.py
index 8b836c0d..eac8c39e 100644
--- a/backend/apps/api.py
+++ b/backend/apps/api.py
@@ -7,6 +7,7 @@
from apps.mcp import mcp
from apps.system.api import login, user, aimodel, workspace, assistant
from apps.terminology.api import terminology
+from apps.settings.api import base
api_router = APIRouter()
api_router.include_router(login.router)
@@ -14,6 +15,7 @@
api_router.include_router(workspace.router)
api_router.include_router(assistant.router)
api_router.include_router(aimodel.router)
+api_router.include_router(base.router)
api_router.include_router(terminology.router)
api_router.include_router(data_training.router)
api_router.include_router(datasource.router)
diff --git a/backend/apps/data_training/api/data_training.py b/backend/apps/data_training/api/data_training.py
index 134ff90b..9d40c5ca 100644
--- a/backend/apps/data_training/api/data_training.py
+++ b/backend/apps/data_training/api/data_training.py
@@ -8,7 +8,7 @@
import pandas as pd
from fastapi import APIRouter, File, UploadFile, Query
-from fastapi.responses import StreamingResponse, FileResponse
+from fastapi.responses import StreamingResponse
from apps.chat.models.chat_model import AxisObj
from apps.data_training.curd.data_training import page_data_training, create_training, update_training, delete_training, \
@@ -16,7 +16,6 @@
from apps.data_training.models.data_training_model import DataTrainingInfo
from common.core.config import settings
from common.core.deps import SessionDep, CurrentUser, Trans
-from common.core.file import FileRequest
from common.utils.data_format import DataFormat
router = APIRouter(tags=["DataTraining"], prefix="/system/data-training")
@@ -213,30 +212,3 @@ def inner():
}
return await asyncio.to_thread(inner)
-
-
-@router.post("/download-fail-info")
-async def download_excel(req: FileRequest):
- """
- 根据文件路径下载 Excel 文件
- """
- filename = req.file
- file_path = os.path.join(path, filename)
-
- # 检查文件是否存在
- if not os.path.exists(file_path):
- raise HTTPException(404, "File Not Exists")
-
- # 检查文件是否是 Excel 文件
- if not filename.endswith('_error.xlsx'):
- raise HTTPException(400, "Only support _error.xlsx")
-
- # 获取文件名
- filename = os.path.basename(file_path)
-
- # 返回文件
- return FileResponse(
- path=file_path,
- filename=filename,
- media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
- )
diff --git a/backend/apps/settings/api/base.py b/backend/apps/settings/api/base.py
new file mode 100644
index 00000000..5b96a0d0
--- /dev/null
+++ b/backend/apps/settings/api/base.py
@@ -0,0 +1,39 @@
+import os
+from http.client import HTTPException
+
+from fastapi import APIRouter
+from fastapi.responses import FileResponse
+
+from common.core.config import settings
+from common.core.file import FileRequest
+
+router = APIRouter(tags=["System"], prefix="/system")
+
+path = settings.EXCEL_PATH
+
+
+@router.post("/download-fail-info")
+async def download_excel(req: FileRequest):
+ """
+ 根据文件路径下载 Excel 文件
+ """
+ filename = req.file
+ file_path = os.path.join(path, filename)
+
+ # 检查文件是否存在
+ if not os.path.exists(file_path):
+ raise HTTPException(404, "File Not Exists")
+
+ # 检查文件是否是 Excel 文件
+ if not filename.endswith('_error.xlsx'):
+ raise HTTPException(400, "Only support _error.xlsx")
+
+ # 获取文件名
+ filename = os.path.basename(file_path)
+
+ # 返回文件
+ return FileResponse(
+ path=file_path,
+ filename=filename,
+ media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ )
diff --git a/backend/apps/settings/api/terminology.py b/backend/apps/settings/api/terminology.py
deleted file mode 100644
index 708e6ee7..00000000
--- a/backend/apps/settings/api/terminology.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from fastapi import APIRouter
-from sqlmodel import select
-from apps.settings.models.setting_models import term_model
-from apps.settings.schemas.setting_schemas import term_schema_creator
-from common.core.deps import SessionDep
-from common.core.pagination import Paginator
-from common.core.schemas import PaginatedResponse, PaginationParams
-router = APIRouter(tags=["Settings"], prefix="/settings/terminology")
-
-
-@router.get("/pager/{pageNum}/{pageSize}", response_model=PaginatedResponse[term_model])
-async def pager(
- session: SessionDep,
- pageNum: int,
- pageSize: int
-):
- pagination = PaginationParams(page=pageNum, size=pageSize)
- paginator = Paginator(session)
- filters = {}
- return await paginator.get_paginated_response(
- stmt=term_model,
- pagination=pagination,
- **filters)
-
-
-@router.get("/{id}", response_model=term_model)
-async def get_terminology_by_id(
- session: SessionDep,
- id: int
-):
- term = session.get(term_model, id)
- return term
-
-@router.post("", response_model=term_model)
-async def add_terminology(
- session: SessionDep,
- creator: term_schema_creator
-):
- terminology = term_model(**creator.model_dump())
- session.add(terminology)
- session.commit()
- return terminology
-
-@router.put("", response_model=term_model)
-async def update_terminology(
- session: SessionDep,
- terminology: term_model
-):
- terminology.id = int(terminology.id)
- term = session.exec(select(term_model).where(term_model.id == terminology.id)).first()
- update_data = terminology.model_dump(exclude_unset=True)
- for field, value in update_data.items():
- setattr(term, field, value)
- session.add(term)
- session.commit()
- return terminology
-
-@router.delete("/{id}", response_model=term_model)
-async def delete_terminology(
- session: SessionDep,
- id: int
-):
- term = session.exec(select(term_model).where(term_model.id == id)).first()
- session.delete(term)
- session.commit()
- return {
- "message": f"Terminology with ID {id} deleted successfully."
- }
diff --git a/frontend/src/api/professional.ts b/frontend/src/api/professional.ts
index 36599f47..64408d3a 100644
--- a/frontend/src/api/professional.ts
+++ b/frontend/src/api/professional.ts
@@ -16,13 +16,4 @@ export const professionalApi = {
responseType: 'blob',
requestOptions: { customError: true },
}),
- downloadError: (path: any) =>
- request.post(
- `/system/terminology/download-fail-info`,
- { file: path },
- {
- responseType: 'blob',
- requestOptions: { customError: true },
- }
- ),
}
diff --git a/frontend/src/api/setting.ts b/frontend/src/api/setting.ts
index 13dd64e4..456e5b6d 100644
--- a/frontend/src/api/setting.ts
+++ b/frontend/src/api/setting.ts
@@ -1,10 +1,20 @@
import { request } from '@/utils/request'
-export const termApi = {
+export const settingsApi = {
pager: (pageNumber: number, pageSize: number) =>
request.get(`/settings/terminology/pager/${pageNumber}/${pageSize}`),
add: (data: any) => request.post('/settings/terminology', data),
edit: (data: any) => request.put('/settings/terminology', data),
delete: (id: number) => request.delete(`/settings/terminology/${id}`),
query: (id: number) => request.get(`/settings/terminology/${id}`),
+
+ downloadError: (path: any) =>
+ request.post(
+ `/system/download-fail-info`,
+ { file: path },
+ {
+ responseType: 'blob',
+ requestOptions: { customError: true },
+ }
+ ),
}
diff --git a/frontend/src/api/training.ts b/frontend/src/api/training.ts
index dbb83ee0..ebc68e69 100644
--- a/frontend/src/api/training.ts
+++ b/frontend/src/api/training.ts
@@ -15,13 +15,4 @@ export const trainingApi = {
responseType: 'blob',
requestOptions: { customError: true },
}),
- downloadError: (path: any) =>
- request.post(
- `/system/data-training/download-fail-info`,
- { file: path },
- {
- responseType: 'blob',
- requestOptions: { customError: true },
- }
- ),
}
diff --git a/frontend/src/views/setting/Professional.vue b/frontend/src/views/setting/Professional.vue
deleted file mode 100644
index 4ab19613..00000000
--- a/frontend/src/views/setting/Professional.vue
+++ /dev/null
@@ -1,340 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/frontend/src/views/setting/index.vue b/frontend/src/views/setting/index.vue
deleted file mode 100644
index 7ea3cbfa..00000000
--- a/frontend/src/views/setting/index.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
- Terminology
-
-
-
-
-
-
-
-
- Data training
-
-
- Data training
-
-
-
-
-
-
-
-
diff --git a/frontend/src/views/system/professional/index.vue b/frontend/src/views/system/professional/index.vue
index 4d5d4f7a..8e15a2cf 100644
--- a/frontend/src/views/system/professional/index.vue
+++ b/frontend/src/views/system/professional/index.vue
@@ -13,8 +13,8 @@ import EmptyBackground from '@/views/dashboard/common/EmptyBackground.vue'
import { useI18n } from 'vue-i18n'
import { cloneDeep } from 'lodash-es'
import { genFileId, type UploadInstance, type UploadProps, type UploadRawFile } from 'element-plus'
-import { trainingApi } from '@/api/training.ts'
import { useCache } from '@/utils/useCache.ts'
+import { settingsApi } from '@/api/setting.ts'
interface Form {
id?: string | null
@@ -105,7 +105,7 @@ const onSuccess = (response: any) => {
fail_info: response.data.error_excel_filename,
})
)
- trainingApi
+ settingsApi
.downloadError(response.data.error_excel_filename)
.then((res) => {
const blob = new Blob([res], {
diff --git a/frontend/src/views/system/training/index.vue b/frontend/src/views/system/training/index.vue
index 001759d6..f8d538b5 100644
--- a/frontend/src/views/system/training/index.vue
+++ b/frontend/src/views/system/training/index.vue
@@ -2,6 +2,7 @@
import { computed, nextTick, onMounted, reactive, ref, unref } from 'vue'
import icon_export_outlined from '@/assets/svg/icon_export_outlined.svg'
import { trainingApi } from '@/api/training'
+import { settingsApi } from '@/api/setting.ts'
import { formatTimestamp } from '@/utils/date'
import { datasourceApi } from '@/api/datasource'
import ccmUpload from '@/assets/svg/icon_ccm-upload_outlined.svg'
@@ -124,7 +125,7 @@ const onSuccess = (response: any) => {
fail_info: response.data.error_excel_filename,
})
)
- trainingApi
+ settingsApi
.downloadError(response.data.error_excel_filename)
.then((res) => {
const blob = new Blob([res], {