fix(gencode): 修复表导入参数格式问题并优化UI样式

修复前端传递表名参数格式与后端API不匹配的问题,调整参数为逗号分隔字符串
优化操作按钮颜色区分不同功能,修正预览对话框变量命名和模板文件后缀
重构文件上传接口模拟实现,移除未使用的导入
This commit is contained in:
zhangtao
2025-10-09 00:36:49 +08:00
parent 97e6382710
commit 1ee6278107
6 changed files with 51 additions and 32 deletions
@@ -47,7 +47,7 @@ async def get_gen_db_table_list_controller(
@GenRouter.post("/import", summary="导入表结构", description="导入表结构")
async def import_gen_table_controller(
table_names: List[str] = Query(..., description="表名列表", embed=True),
table_names: List[str] = Query(..., description="表名列表"),
auth: AuthSchema = Depends(AuthPermission(["generator:gencode:import"])),
) -> JSONResponse:
add_gen_table_list = await GenTableService.get_gen_db_table_list_by_name_service(auth, table_names)
+10 -5
View File
@@ -21,12 +21,17 @@ const GencodeAPI = {
})
},
// 导入表
// 导入表 - 将数组转换为适合FastAPI解析的格式
importTable(table_names: string[]) {
// 构建符合FastAPI期望的查询字符串
let queryString = '';
table_names.forEach((name, index) => {
queryString += `${index === 0 ? '?' : '&'}table_names=${encodeURIComponent(name)}`;
});
return request<ApiResponse>({
url: `${API_PATH}/import`,
method: 'post',
params: { table_names }
url: `${API_PATH}/import${queryString}`,
method: 'post'
})
},
@@ -61,7 +66,7 @@ const GencodeAPI = {
return request<ApiResponse>({
url: `${API_PATH}/delete`,
method: 'delete',
data: data
data
})
},
+17 -3
View File
@@ -33,12 +33,26 @@ import "@wangeditor-next/editor/dist/css/style.css";
import { Toolbar, Editor } from "@wangeditor-next/editor-for-vue";
import { IToolbarConfig, IEditorConfig } from "@wangeditor-next/editor";
// 文件上传 API
import FileAPI from "@/api/file.api";
// 上传图片回调函数类型
type InsertFnType = (_url: string, _alt: string, _href: string) => void;
// 模拟文件上传API,根据实际项目结构调整
interface UploadResult {
url: string;
name: string;
}
const FileAPI = {
uploadFile: async (file: File): Promise<UploadResult> => {
// 这里应该是实际的文件上传逻辑
// 暂时返回一个mock数据
return Promise.resolve({
url: 'https://example.com/image.jpg',
name: file.name
});
}
};
defineProps({
height: {
type: String,
@@ -123,8 +123,8 @@ function handleImportTable() {
ElMessage.error("请选择要导入的表");
return;
}
// 因为tables.value已经是string[]类型了,直接传入
GencodeAPI.importTable(tables.value).then((res: any) => {
// 传递逗号分隔的字符串格式
GencodeAPI.importTable(tableNames.split(",")).then((res: any) => {
ElMessage.success(res.data.message);
if (res.data.code === 200) {
visible.value = false;
+12 -13
View File
@@ -175,19 +175,19 @@
<el-table-column label="操作" align="center" width="330" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="预览" placement="top">
<el-button v-hasPerm="['generator:gencode:query']" link type="primary" icon="View" @click="handlePreview(scope.row)"></el-button>
<el-button v-hasPerm="['generator:gencode:query']" link type="info" icon="View" @click="handlePreview(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="编辑" placement="top">
<el-button v-hasPerm="['generator:gencode:update']" link type="primary" icon="Edit" @click="handleEditTable(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="删除" placement="top">
<el-button v-hasPerm="['generator:gencode:delete']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
<el-button v-hasPerm="['generator:gencode:delete']" link type="danger" icon="Delete" @click="handleDelete(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="同步" placement="top">
<el-button v-hasPerm="['generator:gencode:edit']" link type="primary" icon="Refresh" @click="handleSynchDb(scope.row)"></el-button>
<el-button v-hasPerm="['generator:gencode:edit']" link type="success" icon="Refresh" @click="handleSynchDb(scope.row)"></el-button>
</el-tooltip>
<el-tooltip content="生成代码" placement="top">
<el-button v-hasPerm="['generator:gencode:code']" link type="primary" icon="Download" @click="handleGenTable(scope.row)"></el-button>
<el-button v-hasPerm="['generator:gencode:code']" link type="warning" icon="Download" @click="handleGenTable(scope.row)"></el-button>
</el-tooltip>
</template>
</el-table-column>
@@ -205,15 +205,15 @@
</el-card>
<!-- 预览界面 -->
<el-dialog v-model="preview.open" :title="preview.title" width="80%" top="5vh" append-to-body class="scrollbar">
<el-tabs v-model="preview.activeName">
<el-dialog v-model="preview.open" :title="preview.title" width="80%" height="70%" top="5vh" append-to-body class="scrollbar">
<el-tabs v-model="preview.active_name">
<el-tab-pane
v-for="(value, key) in preview.data"
:label="String(key).substring(String(key).lastIndexOf('/')+1,String(key).indexOf('.jinja2'))"
:name="String(key).substring(String(key).lastIndexOf('/')+1,String(key).indexOf('.jinja2'))"
:key="value"
:label="String(key).substring(String(key).lastIndexOf('/')+1,String(key).indexOf('.j2'))"
:name="String(key).substring(String(key).lastIndexOf('/')+1,String(key).indexOf('.j2'))"
>
<el-link :underline="false" icon="DocumentCopy" @click="() => handleCopyText(value)" style="float:right">&nbsp;复制</el-link>
<el-link :underline="false" icon="DocumentCopy" style="float:right" @click="() => handleCopyText(value)">&nbsp;复制</el-link>
<pre>{{ value }}</pre>
</el-tab-pane>
</el-tabs>
@@ -263,7 +263,6 @@ const data = reactive({
title: "代码预览",
data: {},
active_name: "model.py",
activeName: "model.py" // 添加正确的 activeName 属性
}
});
@@ -386,9 +385,9 @@ function handleRefresh() {
/** 预览按钮 */
function handlePreview(row: any) {
GencodeAPI.previewTable(row.id).then(response => {
preview.value.data = response.data;
preview.value.data = response.data.data;
preview.value.open = true;
preview.value.activeName = "do.py";
preview.value.active_name = "model.py";
});
}
@@ -419,7 +418,7 @@ function handleCopyText(value: string) {
/** 修改按钮操作 */
function handleEditTable(row: any) {
const tableId = row.id || ids.value[0];
router.push({ path: "/tool/gen-edit/index/" + tableId, query: { page_no: queryFormData.value.page_no } });
router.push({ path: "/gencode/gen-edit/index/" + tableId, query: { page_no: queryFormData.value.page_no } });
}
/** 删除按钮操作 */
+1
View File
@@ -191,6 +191,7 @@ export default defineConfig(({ mode }: ConfigEnv) => {
"element-plus/es/components/header/style/index",
"element-plus/es/components/slider/style/index",
"element-plus/es/components/button-group/style/index",
"element-plus/es/components/result/style/index"
],
},
// 构建配置