From b47c4fbd8df97c6a5f8230f5a2fc8b71d43ba8ff Mon Sep 17 00:00:00 2001 From: "zhijiantianya@gmail.com" Date: Tue, 14 Nov 2023 19:37:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E7=94=9F=E6=88=90=E5=99=A8?= =?UTF-8?q?=EF=BC=9A=E5=A2=9E=E5=8A=A0=E6=A0=91=E5=BD=A2=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E7=9A=84=20vm=20=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataobject/codegen/CodegenTableDO.java | 17 +++++++ .../codegen/CodegenTemplateTypeEnum.java | 12 +++++ .../service/codegen/inner/CodegenEngine.java | 23 ++++++++- .../codegen/java/controller/controller.vm | 26 +++++++--- .../vo/{exportReqVO.vm => listReqVO.vm} | 0 .../resources/codegen/java/convert/convert.vm | 4 +- .../main/resources/codegen/java/dal/mapper.vm | 13 ++++- .../resources/codegen/java/enums/errorcode.vm | 3 +- .../resources/codegen/java/service/service.vm | 9 ++-- .../codegen/java/service/serviceImpl.vm | 15 +++++- .../codegen/java/test/serviceTest.vm | 5 +- .../main/resources/codegen/vue3/api/api.ts.vm | 9 +++- .../resources/codegen/vue3/views/form.vue.vm | 41 +++++++++++++++- .../resources/codegen/vue3/views/index.vue.vm | 48 ++++++++++++++++++- .../codegen/inner/CodegenEngineTest.java | 41 ++++++++++++++++ 15 files changed, 246 insertions(+), 20 deletions(-) rename yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/{exportReqVO.vm => listReqVO.vm} (100%) diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java index a50e7242f2..faee8177ec 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/dataobject/codegen/CodegenTableDO.java @@ -138,4 +138,21 @@ public class CodegenTableDO extends BaseDO { */ private Boolean subJoinMany; + // ========== 树表相关字段 ========== + + /** + * 树表的父字段编号 + * + * 关联 {@link CodegenColumnDO#getId()} + */ + private Long treeParentColumnId; + /** + * 树表的名字字段编号 + * + * 名字的用途:新增或修改时,select 框展示的字段 + * + * 关联 {@link CodegenColumnDO#getId()} + */ + private Long treeNameColumnId; + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java index 5a0d33f15d..9a218331c3 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/enums/codegen/CodegenTemplateTypeEnum.java @@ -4,6 +4,8 @@ import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.Objects; + /** * 代码生成模板类型 * @@ -38,4 +40,14 @@ public enum CodegenTemplateTypeEnum { MASTER_NORMAL.type, MASTER_ERP.type, MASTER_INNER.type); } + /** + * 是否为树表 + * + * @param type 类型 + * @return 是否树表 + */ + public static boolean isTree(Integer type) { + return Objects.equals(type, TREE.type); + } + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index a37cb5691e..31071d9bd2 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.infra.service.codegen.inner; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Filter; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -67,7 +68,7 @@ public class CodegenEngine { .put(javaTemplatePath("controller/vo/pageReqVO"), javaModuleImplVOFilePath("PageReqVO")) .put(javaTemplatePath("controller/vo/respVO"), javaModuleImplVOFilePath("RespVO")) .put(javaTemplatePath("controller/vo/updateReqVO"), javaModuleImplVOFilePath("UpdateReqVO")) - .put(javaTemplatePath("controller/vo/exportReqVO"), javaModuleImplVOFilePath("ExportReqVO")) + .put(javaTemplatePath("controller/vo/listReqVO"), javaModuleImplVOFilePath("ListReqVO")) .put(javaTemplatePath("controller/vo/excelVO"), javaModuleImplVOFilePath("ExcelVO")) .put(javaTemplatePath("controller/controller"), javaModuleImplControllerFilePath()) .put(javaTemplatePath("convert/convert"), @@ -216,8 +217,14 @@ public class CodegenEngine { if (isSubTemplate(vmPath)) { generateSubCode(table, subTables, result, vmPath, filePath, bindingMap); return; + // 2.2 特殊:树表专属逻辑 + } else if (isPageTemplate(vmPath)) { + // 减少多余的类生成,例如说 PageVO.java 类 + if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) { + return; + } } - // 2.2 默认生成 + // 2.3 默认生成 generateCode(result, vmPath, filePath, bindingMap); }); return result; @@ -314,6 +321,14 @@ public class CodegenEngine { // permission 前缀 bindingMap.put("permissionPrefix", table.getModuleName() + ":" + simpleClassNameStrikeCase); + // 特殊:树表专属逻辑 + if (CodegenTemplateTypeEnum.isTree(table.getTemplateType())) { + bindingMap.put("treeParentColumn", CollUtil.findOne(columns, + column -> Objects.equals(column.getId(), table.getTreeParentColumnId()))); + bindingMap.put("treeNameColumn", CollUtil.findOne(columns, + column -> Objects.equals(column.getId(), table.getTreeNameColumnId()))); + } + // 特殊:主子表专属逻辑 if (CollUtil.isNotEmpty(subTables)) { // 创建 bindingMap @@ -454,4 +469,8 @@ public class CodegenEngine { return path.contains("_sub"); } + private static boolean isPageTemplate(String path) { + return path.contains("page"); + } + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm index 0ba78b8a00..07e4758013 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/controller.vm @@ -85,28 +85,42 @@ public class ${sceneEnum.prefixClass}${table.className}Controller { return success(${table.className}Convert.INSTANCE.convert(${classNameVar})); } +#if ( $table.templateType != 2 ) @GetMapping("/page") @Operation(summary = "获得${table.classComment}分页") #if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") #end - public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageVO) { - PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageVO); + public CommonResult> get${simpleClassName}Page(@Valid ${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { + PageResult<${table.className}DO> pageResult = ${classNameVar}Service.get${simpleClassName}Page(pageReqVO); return success(${table.className}Convert.INSTANCE.convertPage(pageResult)); } +## 特殊:树表专属逻辑(树不需要分页接口) +#else + @GetMapping("/list") + @Operation(summary = "获得${table.classComment}列表") +#if ($sceneEnum.scene == 1) + @PreAuthorize("@ss.hasPermission('${permissionPrefix}:query')") +#end + public CommonResult> get${simpleClassName}List(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); + return success(${table.className}Convert.INSTANCE.convertList(list)); + } + +#end @GetMapping("/export-excel") @Operation(summary = "导出${table.classComment} Excel") #if ($sceneEnum.scene == 1) @PreAuthorize("@ss.hasPermission('${permissionPrefix}:export')") #end @OperateLog(type = EXPORT) - public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO, + public void export${simpleClassName}Excel(@Valid ${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO, HttpServletResponse response) throws IOException { - List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(exportReqVO); + List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(listReqVO); // 导出 Excel - List<${sceneEnum.prefixClass}${table.className}ExcelVO> datas = ${table.className}Convert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}ExcelVO.class, datas); + List<${sceneEnum.prefixClass}${table.className}ExcelVO> dataList = ${table.className}Convert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "${table.classComment}.xls", "数据", ${sceneEnum.prefixClass}${table.className}ExcelVO.class, dataList); } ## 特殊:主子表专属逻辑 diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm similarity index 100% rename from yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm rename to yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/listReqVO.vm diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/convert/convert.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/convert/convert.vm index 413a4a5020..b4119d936b 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/convert/convert.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/convert/convert.vm @@ -26,8 +26,10 @@ public interface ${table.className}Convert { ${sceneEnum.prefixClass}${table.className}RespVO convert(${table.className}DO bean); List<${sceneEnum.prefixClass}${table.className}RespVO> convertList(List<${table.className}DO> list); - +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) PageResult<${sceneEnum.prefixClass}${table.className}RespVO> convertPage(PageResult<${table.className}DO> page); +#end List<${sceneEnum.prefixClass}${table.className}ExcelVO> convertList02(List<${table.className}DO> list); diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm index 2c7088d134..92d35889b2 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/dal/mapper.vm @@ -49,6 +49,8 @@ import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePack @Mapper public interface ${table.className}Mapper extends BaseMapperX<${table.className}DO> { +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) default PageResult<${table.className}DO> selectPage(${sceneEnum.prefixClass}${table.className}PageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX<${table.className}DO>() #listCondition() @@ -56,11 +58,20 @@ public interface ${table.className}Mapper extends BaseMapperX<${table.className} } - default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ExportReqVO reqVO) { +#end + default List<${table.className}DO> selectList(${sceneEnum.prefixClass}${table.className}ListReqVO reqVO) { return selectList(new LambdaQueryWrapperX<${table.className}DO>() #listCondition() .orderByDesc(${table.className}DO::getId));## 大多数情况下,id 倒序 } +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 + default Long selectCountBy${ParentJavaField}(${treeParentColumn.javaType} ${treeParentColumn.javaField}) { + return selectCount(${table.className}DO::get${ParentJavaField}, ${treeParentColumn.javaField}); + } + +#end } \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm index 669a8c67ce..4f10fa6e10 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/enums/errorcode.vm @@ -1,3 +1,4 @@ // TODO 待办:请将下面的错误码复制到 yudao-module-${table.moduleName}-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! // ========== ${table.classComment} TODO 补充编号 ========== -ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); \ No newline at end of file +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS = new ErrorCode(TODO 补充编号, "${table.classComment}不存在"); +ErrorCode ${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN = new ErrorCode(TODO 补充编号, "存在存在子${table.classComment},无法删除"); \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm index 9153b3ea2a..9b1d36ed57 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/service.vm @@ -48,6 +48,8 @@ public interface ${table.className}Service { */ ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id); +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) /** * 获得${table.classComment}分页 * @@ -56,13 +58,14 @@ public interface ${table.className}Service { */ PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO); +#end /** - * 获得${table.classComment}列表, 用于 Excel 导出 + * 获得${table.classComment}列表 * - * @param exportReqVO 查询条件 + * @param listReqVO 查询条件 * @return ${table.classComment}列表 */ - List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO); + List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO); ## 特殊:主子表专属逻辑 #foreach ($subTable in $subTables) diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm index 7f3846bf5b..0a0a6c4ad1 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/service/serviceImpl.vm @@ -110,6 +110,14 @@ public class ${table.className}ServiceImpl implements ${table.className}Service public void delete${simpleClassName}(${primaryColumn.javaType} id) { // 校验存在 validate${simpleClassName}Exists(id); +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) +#set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写 + // 校验是否有子${table.classComment} + if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) { + throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN); + } +#end // 删除 ${classNameVar}Mapper.deleteById(id); ## 特殊:主子表专属逻辑 @@ -137,14 +145,17 @@ public class ${table.className}ServiceImpl implements ${table.className}Service return ${classNameVar}Mapper.selectById(id); } +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) @Override public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) { return ${classNameVar}Mapper.selectPage(pageReqVO); } +#end @Override - public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ExportReqVO exportReqVO) { - return ${classNameVar}Mapper.selectList(exportReqVO); + public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) { + return ${classNameVar}Mapper.selectList(listReqVO); } ## 特殊:主子表专属逻辑 diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm index 45332ce8fe..3f5b2e7dd1 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/test/serviceTest.vm @@ -137,6 +137,8 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest { assertServiceException(() -> ${classNameVar}Service.delete${simpleClassName}(id), ${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS); } +## 特殊:树表专属逻辑(树不需要分页接口) +#if ( $table.templateType != 2 ) @Test @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 public void testGet${simpleClassName}Page() { @@ -150,10 +152,11 @@ public class ${table.className}ServiceImplTest extends BaseDbUnitTest { assertPojoEquals(db${simpleClassName}, pageResult.getList().get(0)); } +#end @Test @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 public void testGet${simpleClassName}List() { - #getPageCondition("ExportReqVO") + #getPageCondition("ListReqVO") // 调用 List<${table.className}DO> list = ${classNameVar}Service.get${simpleClassName}List(reqVO); diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm index 532a1d3994..c4b0b4332f 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm @@ -15,10 +15,17 @@ export interface ${simpleClassName}VO { #end } -// 查询${table.classComment}列表 +#if ( $table.templateType != 2 ) +// 查询${table.classComment}分页 export const get${simpleClassName}Page = async (params) => { return await request.get({ url: `${baseURL}/page`, params }) } +#else +// 查询${table.classComment}列表 +export const get${simpleClassName}List = async (params) => { + return await request.get({ url: `${baseURL}/list`, params }) +} +#end // 查询${table.classComment}详情 export const get${simpleClassName} = async (id: number) => { diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm index 82ebaabd6b..5536c39c4c 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/form.vue.vm @@ -22,7 +22,22 @@ #elseif ($javaType == "Boolean") #set ($dictMethod = "getBoolDictOptions") #end - #if ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 + #if ( $table.templateType == 2 && $column.id == $treeParentColumn.id ) + + + + #elseif ($column.htmlType == "input" && !$column.primaryKey)## 忽略主键,不用在表单里 @@ -126,6 +141,10 @@ \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm index 0d38309717..f356722a31 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm @@ -101,6 +101,12 @@ > 导出 +## 特殊:树表专属逻辑 +#if ( $table.templateType == 2 ) + + 展开/折叠 + +#end @@ -117,6 +123,17 @@ highlight-current-row @current-change="handleCurrentChange" > +## 特殊:树表专属逻辑 +#elseif ( $table.templateType == 2 ) + #else #end @@ -218,6 +235,10 @@