Commit a4b1395e929ff13dcdadc18ef76b7fdbc767ba32

Authored by YunaiV
1 parent 256c560d

代码生成:主子表(inner)部分模版

yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/_column.vm 0 → 100644
  1 +## 提供给 baseVO、createVO、updateVO 生成字段
  2 + @Schema(description = "${column.columnComment}"#if (!${column.nullable}), requiredMode = Schema.RequiredMode.REQUIRED#end#if ("$!column.example" != ""), example = "${column.example}"#end)
  3 +#if (!${column.nullable})## 判断 @NotEmpty 和 @NotNull 注解
  4 +#if (${column.javaType} == 'String')
  5 + @NotEmpty(message = "${column.columnComment}不能为空")
  6 +#else
  7 + @NotNull(message = "${column.columnComment}不能为空")
  8 +#end
  9 +#end
  10 +#if (${column.javaType} == "LocalDateTime")## 时间类型
  11 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  12 +#end
  13 + private ${column.javaType} ${column.javaField};
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/form_sub_normal.vue.vm
@@ -146,6 +146,11 @@ @@ -146,6 +146,11 @@
146 #end 146 #end
147 #end 147 #end
148 #end 148 #end
  149 + <el-table-column align="center" fixed="right" label="操作" width="60">
  150 + <template #default="{ $index }">
  151 + <el-button @click="handleDelete($index)" link>—</el-button>
  152 + </template>
  153 + </el-table-column>
149 </el-table> 154 </el-table>
150 </el-form> 155 </el-form>
151 <el-row justify="center" class="mt-3"> 156 <el-row justify="center" class="mt-3">
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_erp.vue.vm
  1 +#set ($subTable = $subTables.get($subIndex))##当前表
  2 +#set ($subColumns = $subColumnsList.get($subIndex))##当前字段数组
  3 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
  4 +#set ($subSimpleClassName = $subSimpleClassNames.get($subIndex))
  5 +#set ($subJoinColumn = $subJoinColumns.get($subIndex))##当前 join 字段
  6 +#set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  7 +<template>
  8 + <!-- 列表 -->
  9 + <ContentWrap>
  10 + <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  11 + #foreach($column in $subColumns)
  12 + #if ($column.listOperationResult)
  13 + #set ($dictType=$column.dictType)
  14 + #set ($javaField = $column.javaField)
  15 + #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  16 + #set ($comment=$column.columnComment)
  17 + #if ($column.javaType == "LocalDateTime")## 时间类型
  18 + <el-table-column
  19 + label="${comment}"
  20 + align="center"
  21 + prop="${javaField}"
  22 + :formatter="dateFormatter"
  23 + width="180px"
  24 + />
  25 + #elseif($column.dictType && "" != $column.dictType)## 数据字典
  26 + <el-table-column label="${comment}" align="center" prop="${javaField}">
  27 + <template #default="scope">
  28 + <dict-tag :type="DICT_TYPE.$dictType.toUpperCase()" :value="scope.row.${column.javaField}" />
  29 + </template>
  30 + </el-table-column>
  31 + #else
  32 + <el-table-column label="${comment}" align="center" prop="${javaField}" />
  33 + #end
  34 + #end
  35 + #end
  36 + #if ($table.templateType == 11)
  37 + <el-table-column label="操作" align="center">
  38 + <template #default="scope">
  39 + <el-button
  40 + link
  41 + type="primary"
  42 + @click="openForm('update', scope.row.id)"
  43 + v-hasPermi="['${permissionPrefix}:update']"
  44 + >
  45 + 编辑
  46 + </el-button>
  47 + <el-button
  48 + link
  49 + type="danger"
  50 + @click="handleDelete(scope.row.id)"
  51 + v-hasPermi="['${permissionPrefix}:delete']"
  52 + >
  53 + 删除
  54 + </el-button>
  55 + </template>
  56 + </el-table-column>
  57 + #end
  58 + </el-table>
  59 + #if ($table.templateType == 11)
  60 + <!-- 分页 -->
  61 + <Pagination
  62 + :total="total"
  63 + v-model:page="queryParams.pageNo"
  64 + v-model:limit="queryParams.pageSize"
  65 + @pagination="getList"
  66 + />
  67 + #end
  68 + </ContentWrap>
  69 +</template>
  70 +
  71 +<script setup lang="ts">
  72 +const props = defineProps<{
  73 + ${subJoinColumn.javaField}: undefined // ${subJoinColumn.columnComment}(主表的关联字段)
  74 +}>()
  75 +const loading = ref(true) // 列表的加载中
  76 +const list = ref([]) // 列表的数据
  77 +
  78 +/** 查询列表 */
  79 +const getList = async () => {
  80 + loading.value = true
  81 + try {
  82 + #if ( $subTable.subJoinMany )
  83 + formData.value = await ${simpleClassName}Api.get${subSimpleClassName}ListBy${SubJoinColumnName}(val)
  84 + #else
  85 + const data = await ${simpleClassName}Api.get${subSimpleClassName}By${SubJoinColumnName}(val)
  86 + if (!data) {
  87 + return
  88 + }
  89 + formData.value = data
  90 + #end
  91 + } finally {
  92 + loading.value = false
  93 + }
  94 +}
  95 +
  96 +/** 初始化 **/
  97 +onMounted(() => {
  98 + getList()
  99 +})
  100 +</script>
0 \ No newline at end of file 101 \ No newline at end of file
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/components/list_sub_inner.vue.vm
  1 +## 子表的 erp 和 inner 使用相似的 list 列表,差异主要两点:
  2 +## 1)inner 使用 list 不分页,erp 使用 page 分页
  3 +## 2)erp 支持单个子表的新增、修改、删除,inner 不支持
  4 +#parse("codegen/vue3/views/components/list_sub_erp.vue.vm")
0 \ No newline at end of file 5 \ No newline at end of file
yudao-module-infra/yudao-module-infra-biz/src/test/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngineTest.java
@@ -178,7 +178,7 @@ public class CodegenEngineTest extends BaseMockitoUnitTest { @@ -178,7 +178,7 @@ public class CodegenEngineTest extends BaseMockitoUnitTest {
178 } 178 }
179 179
180 @Test 180 @Test
181 - public void testExecute_vue3_masterSub() { 181 + public void testExecute_vue3_masterNormal() {
182 // 准备请求参数 182 // 准备请求参数
183 // 主表 183 // 主表
184 CodegenTableDO table = new CodegenTableDO().setScene(CodegenSceneEnum.ADMIN.getScene()).setParentMenuId(888L) 184 CodegenTableDO table = new CodegenTableDO().setScene(CodegenSceneEnum.ADMIN.getScene()).setParentMenuId(888L)
@@ -461,6 +461,290 @@ public class CodegenEngineTest extends BaseMockitoUnitTest { @@ -461,6 +461,290 @@ public class CodegenEngineTest extends BaseMockitoUnitTest {
461 } 461 }
462 } 462 }
463 463
  464 + @Test
  465 + public void testExecute_vue3_masterInner() {
  466 + // 准备请求参数
  467 + // 主表
  468 + CodegenTableDO table = new CodegenTableDO().setScene(CodegenSceneEnum.ADMIN.getScene()).setParentMenuId(888L)
  469 + .setTableName("infra_demo12_student").setTableComment("学生表")
  470 + .setModuleName("infra").setBusinessName("demo12").setClassName("InfraDemo11Student")
  471 + .setClassComment("学生").setAuthor("芋道源码")
  472 + .setTemplateType(CodegenTemplateTypeEnum.MASTER_INNER.getType())
  473 + .setFrontType(CodegenFrontTypeEnum.VUE3.getType());
  474 + CodegenColumnDO idColumn = new CodegenColumnDO().setColumnName("id").setDataType(JdbcType.BIGINT.name())
  475 + .setId(100L)
  476 + .setColumnComment("编号").setNullable(false).setPrimaryKey(true).setAutoIncrement(true)
  477 + .setJavaType("Long").setJavaField("id").setExample("1024")
  478 + .setCreateOperation(false).setUpdateOperation(true)
  479 + .setListOperation(false)
  480 + .setListOperationResult(true);
  481 + CodegenColumnDO nameColumn = new CodegenColumnDO().setColumnName("name").setDataType(JdbcType.VARCHAR.name())
  482 + .setColumnComment("名字").setNullable(false)
  483 + .setJavaType("String").setJavaField("name").setExample("芋头")
  484 + .setCreateOperation(true).setUpdateOperation(true)
  485 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.LIKE.getCondition())
  486 + .setListOperationResult(true)
  487 + .setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType());
  488 + CodegenColumnDO descriptionColumn = new CodegenColumnDO().setColumnName("description").setDataType(JdbcType.VARCHAR.name())
  489 + .setColumnComment("简介").setNullable(false)
  490 + .setJavaType("String").setJavaField("description").setExample("我是介绍")
  491 + .setCreateOperation(true).setUpdateOperation(true)
  492 + .setListOperation(false)
  493 + .setListOperationResult(true)
  494 + .setHtmlType(CodegenColumnHtmlTypeEnum.TEXTAREA.getType());
  495 + CodegenColumnDO birthdayColumn = new CodegenColumnDO().setColumnName("birthday").setDataType(JdbcType.DATE.name())
  496 + .setColumnComment("出生日期").setNullable(false)
  497 + .setJavaType("LocalDateTime").setJavaField("birthday")
  498 + .setCreateOperation(true).setUpdateOperation(true)
  499 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  500 + .setListOperationResult(true)
  501 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  502 + CodegenColumnDO sexColumn = new CodegenColumnDO().setColumnName("sex").setDataType(JdbcType.INTEGER.name())
  503 + .setColumnComment("性别").setNullable(false)
  504 + .setJavaType("Integer").setJavaField("sex").setExample("1")
  505 + .setCreateOperation(true).setUpdateOperation(true)
  506 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  507 + .setListOperationResult(true)
  508 + .setHtmlType(CodegenColumnHtmlTypeEnum.SELECT.getType())
  509 + .setDictType("system_user_sex");
  510 + CodegenColumnDO enabledColumn = new CodegenColumnDO().setColumnName("enabled").setDataType(JdbcType.BOOLEAN.name())
  511 + .setColumnComment("是否有效").setNullable(false)
  512 + .setJavaType("Boolean").setJavaField("enabled").setExample("true")
  513 + .setCreateOperation(true).setUpdateOperation(true)
  514 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  515 + .setListOperationResult(true)
  516 + .setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType())
  517 + .setDictType("infra_boolean_string");
  518 + CodegenColumnDO avatarColumn = new CodegenColumnDO().setColumnName("avatar").setDataType(JdbcType.VARCHAR.name())
  519 + .setColumnComment("头像").setNullable(false)
  520 + .setJavaType("String").setJavaField("avatar").setExample("https://www.iocoder.cn/1.png")
  521 + .setCreateOperation(true).setUpdateOperation(true)
  522 + .setListOperation(false)
  523 + .setListOperationResult(true)
  524 + .setHtmlType(CodegenColumnHtmlTypeEnum.IMAGE_UPLOAD.getType());
  525 + CodegenColumnDO videoColumn = new CodegenColumnDO().setColumnName("video").setDataType(JdbcType.VARCHAR.name())
  526 + .setColumnComment("附件").setNullable(true)
  527 + .setJavaType("String").setJavaField("video").setExample("https://www.iocoder.cn/1.mp4")
  528 + .setCreateOperation(true).setUpdateOperation(true)
  529 + .setListOperation(false)
  530 + .setListOperationResult(true)
  531 + .setHtmlType(CodegenColumnHtmlTypeEnum.FILE_UPLOAD.getType());
  532 + CodegenColumnDO memoColumn = new CodegenColumnDO().setColumnName("memo").setDataType(JdbcType.VARCHAR.name())
  533 + .setColumnComment("备注").setNullable(false)
  534 + .setJavaType("String").setJavaField("memo").setExample("我是备注")
  535 + .setCreateOperation(true).setUpdateOperation(true)
  536 + .setListOperation(false)
  537 + .setListOperationResult(true)
  538 + .setHtmlType(CodegenColumnHtmlTypeEnum.EDITOR.getType());
  539 + CodegenColumnDO createTimeColumn = new CodegenColumnDO().setColumnName("create_time").setDataType(JdbcType.DATE.name())
  540 + .setColumnComment("创建时间").setNullable(true)
  541 + .setJavaType("LocalDateTime").setJavaField("createTime")
  542 + .setCreateOperation(false).setUpdateOperation(false)
  543 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.BETWEEN.getCondition())
  544 + .setListOperationResult(true)
  545 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  546 + List<CodegenColumnDO> columns = Arrays.asList(idColumn, nameColumn, descriptionColumn, birthdayColumn,
  547 + sexColumn, enabledColumn, avatarColumn, videoColumn, memoColumn, createTimeColumn);
  548 +
  549 + // 子表(联系人)
  550 + CodegenTableDO contactTable = new CodegenTableDO().setScene(CodegenSceneEnum.ADMIN.getScene())
  551 + .setTableName("infra_demo12_student_contact").setTableComment("学生联系人表")
  552 + .setModuleName("infra").setBusinessName("demo12").setClassName("InfraDemo11StudentContact")
  553 + .setClassComment("学生联系人").setAuthor("芋道源码")
  554 + .setTemplateType(CodegenTemplateTypeEnum.SUB.getType())
  555 + .setFrontType(CodegenFrontTypeEnum.VUE3.getType())
  556 + .setSubJoinColumnId(100L).setSubJoinMany(true);
  557 + CodegenColumnDO contactIdColumn = new CodegenColumnDO().setColumnName("id").setDataType(JdbcType.BIGINT.name())
  558 + .setColumnComment("编号").setNullable(false).setPrimaryKey(true).setAutoIncrement(true)
  559 + .setJavaType("Long").setJavaField("id").setExample("1024")
  560 + .setCreateOperation(false).setUpdateOperation(true)
  561 + .setListOperation(false)
  562 + .setListOperationResult(true);
  563 + CodegenColumnDO contactStudentIdColumn = new CodegenColumnDO().setColumnName("student_id").setDataType(JdbcType.BIGINT.name())
  564 + .setColumnComment("学生编号").setNullable(false).setPrimaryKey(false)
  565 + .setJavaType("Long").setJavaField("studentId").setExample("2048")
  566 + .setCreateOperation(true).setUpdateOperation(true)
  567 + .setListOperation(false)
  568 + .setListOperationResult(true)
  569 + .setId(100L);
  570 + CodegenColumnDO contactNameColumn = new CodegenColumnDO().setColumnName("name").setDataType(JdbcType.VARCHAR.name())
  571 + .setColumnComment("名字").setNullable(false)
  572 + .setJavaType("String").setJavaField("name").setExample("芋头")
  573 + .setCreateOperation(true).setUpdateOperation(true)
  574 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.LIKE.getCondition())
  575 + .setListOperationResult(true)
  576 + .setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType());
  577 + CodegenColumnDO contactDescriptionColumn = new CodegenColumnDO().setColumnName("description").setDataType(JdbcType.VARCHAR.name())
  578 + .setColumnComment("简介").setNullable(false)
  579 + .setJavaType("String").setJavaField("description").setExample("我是介绍")
  580 + .setCreateOperation(true).setUpdateOperation(true)
  581 + .setListOperation(false)
  582 + .setListOperationResult(true)
  583 + .setHtmlType(CodegenColumnHtmlTypeEnum.TEXTAREA.getType());
  584 + CodegenColumnDO contactBirthdayColumn = new CodegenColumnDO().setColumnName("birthday").setDataType(JdbcType.DATE.name())
  585 + .setColumnComment("出生日期").setNullable(false)
  586 + .setJavaType("LocalDateTime").setJavaField("birthday")
  587 + .setCreateOperation(true).setUpdateOperation(true)
  588 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  589 + .setListOperationResult(true)
  590 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  591 + CodegenColumnDO contactSexColumn = new CodegenColumnDO().setColumnName("sex").setDataType(JdbcType.INTEGER.name())
  592 + .setColumnComment("性别").setNullable(false)
  593 + .setJavaType("Integer").setJavaField("sex").setExample("1")
  594 + .setCreateOperation(true).setUpdateOperation(true)
  595 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  596 + .setListOperationResult(true)
  597 + .setHtmlType(CodegenColumnHtmlTypeEnum.SELECT.getType())
  598 + .setDictType("system_user_sex");
  599 + CodegenColumnDO contactEnabledColumn = new CodegenColumnDO().setColumnName("enabled").setDataType(JdbcType.BOOLEAN.name())
  600 + .setColumnComment("是否有效").setNullable(false)
  601 + .setJavaType("Boolean").setJavaField("enabled").setExample("true")
  602 + .setCreateOperation(true).setUpdateOperation(true)
  603 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  604 + .setListOperationResult(true)
  605 + .setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType())
  606 + .setDictType("infra_boolean_string");
  607 + CodegenColumnDO contactAvatarColumn = new CodegenColumnDO().setColumnName("avatar").setDataType(JdbcType.VARCHAR.name())
  608 + .setColumnComment("头像").setNullable(false)
  609 + .setJavaType("String").setJavaField("avatar").setExample("https://www.iocoder.cn/1.png")
  610 + .setCreateOperation(true).setUpdateOperation(true)
  611 + .setListOperation(false)
  612 + .setListOperationResult(true)
  613 + .setHtmlType(CodegenColumnHtmlTypeEnum.IMAGE_UPLOAD.getType());
  614 + CodegenColumnDO contactVideoColumn = new CodegenColumnDO().setColumnName("video").setDataType(JdbcType.VARCHAR.name())
  615 + .setColumnComment("附件").setNullable(true)
  616 + .setJavaType("String").setJavaField("video").setExample("https://www.iocoder.cn/1.mp4")
  617 + .setCreateOperation(true).setUpdateOperation(true)
  618 + .setListOperation(false)
  619 + .setListOperationResult(true)
  620 + .setHtmlType(CodegenColumnHtmlTypeEnum.FILE_UPLOAD.getType());
  621 + CodegenColumnDO contactMemoColumn = new CodegenColumnDO().setColumnName("memo").setDataType(JdbcType.VARCHAR.name())
  622 + .setColumnComment("备注").setNullable(false)
  623 + .setJavaType("String").setJavaField("memo").setExample("我是备注")
  624 + .setCreateOperation(true).setUpdateOperation(true)
  625 + .setListOperation(false)
  626 + .setListOperationResult(true)
  627 + .setHtmlType(CodegenColumnHtmlTypeEnum.EDITOR.getType());
  628 + CodegenColumnDO contactCreateTimeColumn = new CodegenColumnDO().setColumnName("create_time").setDataType(JdbcType.DATE.name())
  629 + .setColumnComment("创建时间").setNullable(true)
  630 + .setJavaType("LocalDateTime").setJavaField("createTime")
  631 + .setCreateOperation(false).setUpdateOperation(false)
  632 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.BETWEEN.getCondition())
  633 + .setListOperationResult(true)
  634 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  635 + List<CodegenColumnDO> contactColumns = Arrays.asList(contactIdColumn, contactStudentIdColumn,
  636 + contactNameColumn, contactDescriptionColumn, contactBirthdayColumn,
  637 + contactSexColumn, contactEnabledColumn, contactAvatarColumn, contactVideoColumn, contactMemoColumn, contactCreateTimeColumn);
  638 +
  639 + // 子表(班主任)
  640 + CodegenTableDO teacherTable = new CodegenTableDO().setScene(CodegenSceneEnum.ADMIN.getScene())
  641 + .setTableName("infra_demo12_student_teacher").setTableComment("学生班主任表")
  642 + .setModuleName("infra").setBusinessName("demo12").setClassName("InfraDemo11StudentTeacher")
  643 + .setClassComment("学生班主任").setAuthor("芋道源码")
  644 + .setTemplateType(CodegenTemplateTypeEnum.SUB.getType())
  645 + .setFrontType(CodegenFrontTypeEnum.VUE3.getType())
  646 + .setSubJoinColumnId(200L).setSubJoinMany(false);
  647 + CodegenColumnDO teacherIdColumn = new CodegenColumnDO().setColumnName("id").setDataType(JdbcType.BIGINT.name())
  648 + .setColumnComment("编号").setNullable(false).setPrimaryKey(true).setAutoIncrement(true)
  649 + .setJavaType("Long").setJavaField("id").setExample("1024")
  650 + .setCreateOperation(false).setUpdateOperation(true)
  651 + .setListOperation(false)
  652 + .setListOperationResult(true);
  653 + CodegenColumnDO teacherStudentIdColumn = new CodegenColumnDO().setColumnName("student_id").setDataType(JdbcType.BIGINT.name())
  654 + .setColumnComment("学生编号").setNullable(false).setPrimaryKey(false)
  655 + .setJavaType("Long").setJavaField("studentId").setExample("2048")
  656 + .setCreateOperation(true).setUpdateOperation(true)
  657 + .setListOperation(false)
  658 + .setListOperationResult(true)
  659 + .setId(200L);
  660 + CodegenColumnDO teacherNameColumn = new CodegenColumnDO().setColumnName("name").setDataType(JdbcType.VARCHAR.name())
  661 + .setColumnComment("名字").setNullable(false)
  662 + .setJavaType("String").setJavaField("name").setExample("芋头")
  663 + .setCreateOperation(true).setUpdateOperation(true)
  664 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.LIKE.getCondition())
  665 + .setListOperationResult(true)
  666 + .setHtmlType(CodegenColumnHtmlTypeEnum.INPUT.getType());
  667 + CodegenColumnDO teacherDescriptionColumn = new CodegenColumnDO().setColumnName("description").setDataType(JdbcType.VARCHAR.name())
  668 + .setColumnComment("简介").setNullable(false)
  669 + .setJavaType("String").setJavaField("description").setExample("我是介绍")
  670 + .setCreateOperation(true).setUpdateOperation(true)
  671 + .setListOperation(false)
  672 + .setListOperationResult(true)
  673 + .setHtmlType(CodegenColumnHtmlTypeEnum.TEXTAREA.getType());
  674 + CodegenColumnDO teacherBirthdayColumn = new CodegenColumnDO().setColumnName("birthday").setDataType(JdbcType.DATE.name())
  675 + .setColumnComment("出生日期").setNullable(false)
  676 + .setJavaType("LocalDateTime").setJavaField("birthday")
  677 + .setCreateOperation(true).setUpdateOperation(true)
  678 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  679 + .setListOperationResult(true)
  680 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  681 + CodegenColumnDO teacherSexColumn = new CodegenColumnDO().setColumnName("sex").setDataType(JdbcType.INTEGER.name())
  682 + .setColumnComment("性别").setNullable(false)
  683 + .setJavaType("Integer").setJavaField("sex").setExample("1")
  684 + .setCreateOperation(true).setUpdateOperation(true)
  685 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  686 + .setListOperationResult(true)
  687 + .setHtmlType(CodegenColumnHtmlTypeEnum.SELECT.getType())
  688 + .setDictType("system_user_sex");
  689 + CodegenColumnDO teacherEnabledColumn = new CodegenColumnDO().setColumnName("enabled").setDataType(JdbcType.BOOLEAN.name())
  690 + .setColumnComment("是否有效").setNullable(false)
  691 + .setJavaType("Boolean").setJavaField("enabled").setExample("true")
  692 + .setCreateOperation(true).setUpdateOperation(true)
  693 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.EQ.getCondition())
  694 + .setListOperationResult(true)
  695 + .setHtmlType(CodegenColumnHtmlTypeEnum.RADIO.getType())
  696 + .setDictType("infra_boolean_string");
  697 + CodegenColumnDO teacherAvatarColumn = new CodegenColumnDO().setColumnName("avatar").setDataType(JdbcType.VARCHAR.name())
  698 + .setColumnComment("头像").setNullable(false)
  699 + .setJavaType("String").setJavaField("avatar").setExample("https://www.iocoder.cn/1.png")
  700 + .setCreateOperation(true).setUpdateOperation(true)
  701 + .setListOperation(false)
  702 + .setListOperationResult(true)
  703 + .setHtmlType(CodegenColumnHtmlTypeEnum.IMAGE_UPLOAD.getType());
  704 + CodegenColumnDO teacherVideoColumn = new CodegenColumnDO().setColumnName("video").setDataType(JdbcType.VARCHAR.name())
  705 + .setColumnComment("附件").setNullable(true)
  706 + .setJavaType("String").setJavaField("video").setExample("https://www.iocoder.cn/1.mp4")
  707 + .setCreateOperation(true).setUpdateOperation(true)
  708 + .setListOperation(false)
  709 + .setListOperationResult(true)
  710 + .setHtmlType(CodegenColumnHtmlTypeEnum.FILE_UPLOAD.getType());
  711 + CodegenColumnDO teacherMemoColumn = new CodegenColumnDO().setColumnName("memo").setDataType(JdbcType.VARCHAR.name())
  712 + .setColumnComment("备注").setNullable(false)
  713 + .setJavaType("String").setJavaField("memo").setExample("我是备注")
  714 + .setCreateOperation(true).setUpdateOperation(true)
  715 + .setListOperation(false)
  716 + .setListOperationResult(true)
  717 + .setHtmlType(CodegenColumnHtmlTypeEnum.EDITOR.getType());
  718 + CodegenColumnDO teacherCreateTimeColumn = new CodegenColumnDO().setColumnName("create_time").setDataType(JdbcType.DATE.name())
  719 + .setColumnComment("创建时间").setNullable(true)
  720 + .setJavaType("LocalDateTime").setJavaField("createTime")
  721 + .setCreateOperation(false).setUpdateOperation(false)
  722 + .setListOperation(true).setListOperationCondition(CodegenColumnListConditionEnum.BETWEEN.getCondition())
  723 + .setListOperationResult(true)
  724 + .setHtmlType(CodegenColumnHtmlTypeEnum.DATETIME.getType());
  725 + List<CodegenColumnDO> teacherColumns = Arrays.asList(teacherIdColumn, teacherStudentIdColumn,
  726 + teacherNameColumn, teacherDescriptionColumn, teacherBirthdayColumn,
  727 + teacherSexColumn, teacherEnabledColumn, teacherAvatarColumn, teacherVideoColumn, teacherMemoColumn, teacherCreateTimeColumn);
  728 +
  729 + // 调用
  730 + Map<String, String> result = codegenEngine.execute(table, columns,
  731 + Arrays.asList(contactTable, teacherTable), Arrays.asList(contactColumns, teacherColumns));
  732 +
  733 + // 构建 zip 包
  734 + writeFile(result, "/Users/yunai/test/demo12.zip");
  735 +
  736 + // 断言
  737 + assertEquals(27, result.size());
  738 +
  739 + for (Map.Entry<String, String> entry : result.entrySet()) {
  740 + System.out.println(entry.getKey());
  741 + System.out.println(entry.getValue());
  742 + System.out.println("");
  743 + System.out.println("");
  744 + System.out.println("");
  745 + }
  746 + }
  747 +
464 private void assertPathContentEquals(String path, Map<String, String> result, String key) { 748 private void assertPathContentEquals(String path, Map<String, String> result, String key) {
465 String pathContent = ResourceUtil.readUtf8Str("codegen/" + path); 749 String pathContent = ResourceUtil.readUtf8Str("codegen/" + path);
466 String valueContent = result.get(key); 750 String valueContent = result.get(key);