feat(generate): 优化代码生成逻辑

- 新增公共字段配置,统一处理常见字段的生成规则
- 修复模板中的一些错误,如变量名、函数名等
- 优化代码结构,提高可读性和可维护性
This commit is contained in:
2025-07-01 23:40:43 +08:00
parent bd13f1cfdc
commit 1c316594f5
10 changed files with 568 additions and 175 deletions

View File

@@ -79,7 +79,7 @@ async def delete_{{ name }}_list(request: Request, params: DeleteListParams):
async def update_{{ name }}(request: Request, params: Update{{ class_name }}Params, id: str = Path(description="{{ description }}ID")):
if {{ name }} := await {{ class_name }}.get_or_none(id=id, del_flag=1):
{% for column in columns if column.is_edit %}
{{ name }}.{{ column.python_name }} = params.{{ column.python_name }},
{{ name }}.{{ column.python_name }} = params.{{ column.python_name }}
{% endfor %}
await {{ name }}.save()
return Response.success(msg="修改成功")

View File

@@ -14,7 +14,7 @@ class {{ class_name }}(BaseModel):
"""
{{ table_comment }}模型
"""
{% for column in columns %}
{% for column in columns if column.is_common == false %}
{%- set params = [] %}
{%- if column.max_length is not none %}{% set params = params + ["max_length=" ~ column.max_length] %}{% endif %}
{%- if column.is_nullable %}{% set params = params + ["null=True"] %}{% endif %}

View File

@@ -14,7 +14,7 @@ from schemas.common import BaseResponse, ListQueryResult
class {{ class_name }}Info(BaseModel):
"""{{ description }}信息"""
model_config = ConfigDict(alias_generator=to_snake, populate_by_name=True)
{% for column in columns %}
{% for column in columns if column.is_list %}
{{ column.python_name }}: {% if not column.is_required %}Optional[{% endif %}{{ column.python_type }}{% if not column.is_required %}]{% endif %} = Field(
{% if column.default is not none %}default={{ column.default }}, {% endif %}title="{{ column.column_comment }}"
)
@@ -46,6 +46,6 @@ class Get{{ class_name }}InfoListResult(ListQueryResult):
"""获取{{ description }}信息列表响应结果"""
result: List[{{ class_name }}Info] = Field(None, title="{{ table_comment }}信息列表")
class Get{{ class_name }}InfoListResponse(BaseResponse):
class Get{{ class_name }}ListResponse(BaseResponse):
"""获取{{ description }}信息列表响应"""
data: Get{{ class_name }}InfoListResult = Field(None, title="{{ table_comment }}信息列表")

View File

@@ -184,9 +184,7 @@ export const use{{ class_name }} = (tableRef: Ref) => {
const onbatchDel = async () => {
// 返回当前选中的行
const curSelected = tableRef.value.getTableRef().getSelectionRows();
const res = await delete{{ class_name }}ListAPI({
ids: getKeyList(curSelected, "id")
});
const res = await delete{{ class_name }}ListAPI(getKeyList(curSelected, "id"));
if (res.success) {
message(res.msg, {
type: "success"
@@ -235,7 +233,7 @@ export const use{{ class_name }} = (tableRef: Ref) => {
{{ column.python_name }}: FormData.{{ column.python_name }} ?? "",
{% endfor %}
};
const res = await postAdd{{ class_name }}PI(addForm);
const res = await postAdd{{ class_name }}API(addForm);
if (res.success) {
done();
await onSearch();
@@ -243,7 +241,7 @@ export const use{{ class_name }} = (tableRef: Ref) => {
message(res.msg, { type: res.success ? "success" : "error" });
} else {
let updateForm = {
{% for column in columns if column.is_update %}
{% for column in columns if column.is_edit %}
/** {{ column.column_comment }} */
{{ column.python_name }}: FormData.{{ column.python_name }} ?? "",
{% endfor %}

View File

@@ -1,5 +1,10 @@
<template>
<el-form ref="ruleFormRef" :model="newFormInline" label-width="82px">
<el-form
ref="ruleFormRef"
:model="newFormInline"
:rules="formRules"
label-width="82px"
>
<el-row :gutter="30">
[% for column in columns if column.is_insert or column.is_edit %]
<re-col :value="24" :xm="24" :sm="24">
@@ -63,7 +68,7 @@
</el-form>
</template>
<script setup lang="ts">
import { ref } from "vue";
import { reactive, ref } from "vue";
import ReCol from "@/components/ReCol";
import type { FormRules } from "element-plus";
import { [[ class_name ]]Info } from "types/[[ name ]]";
@@ -84,7 +89,7 @@ const props = withDefaults(defineProps<FormProps>(), {
[% endfor %]
})
});
const newFormInline = ref<ConfigInfo>(props.formInline);
const newFormInline = ref<[[ class_name ]]Info>(props.formInline);
/** 自定义表单规则校验 */
const formRules = reactive<FormRules>({
[% for column in columns if column.is_insert or column.is_edit %]

View File

@@ -78,7 +78,7 @@
</el-button>
</el-form-item>
</el-form>
<PureTableBar title="{{ description }}管理" :columns="columns" @refresh="onSearch">
<PureTableBar title="[[ description ]]管理" :columns="columns" @refresh="onSearch">
<template #buttons>
<el-button
v-if="hasAuth('[[ name ]]:btn:add')"
@@ -179,7 +179,7 @@
<script setup lang="ts">
defineOptions({
name: "{{ class_name }}Index"
name: "[[ class_name ]]Index"
});
import { ref } from "vue";
import { use[[ class_name ]] } from "./utils/hook";