搜索
重置
@@ -100,9 +92,9 @@
新增
展开/折叠
-#if($enableExport)
+<#if enableExport>
导出
-#end
+#if>
@@ -117,122 +109,115 @@
:default-expand-all="isExpandAll"
:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
>
-#set($firstTreeListField = "")
-#foreach($tempColumn in $columns)
-#if(!$tempColumn.pk && $tempColumn.list && "" != $tempColumn.javaField && $firstTreeListField == "")
-#set($firstTreeListField = $tempColumn.javaField)
-#end
-#end
-#foreach($column in $columns)
-#set($javaField=$column.javaField)
-#set($parentheseIndex=$column.columnComment.indexOf("("))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($column.pk)
-#elseif($enableStatus && $statusField == $javaField)
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#assign firstTreeListField = "">
+<#list columns as tempColumn>
+<#if !tempColumn.pk && tempColumn.list && "" != tempColumn.javaField && firstTreeListField == "">
+<#assign firstTreeListField = tempColumn.javaField>
+#if>
+#list>
+<#list columns as column>
+<#if column.pk>
+<#elseif enableStatus && statusField == column.javaField>
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
-#elseif($enableSort && $sortField == $javaField)
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#elseif enableSort && sortField == column.javaField>
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
-#if($column.javaType == "LocalDateTime")
+<#if column.javaType == "LocalDateTime">
-#else
-
-#end
+<#else>
+
+#if>
-#elseif($column.list && $column.htmlType == "switch")
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#elseif column.list && column.htmlType == "switch">
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
:active-value="true"
:inactive-value="false"
-#elseif($column.javaType == "Integer" || $column.javaType == "Long")
+<#elseif column.javaType == "Integer" || column.javaType == "Long">
:active-value="0"
:inactive-value="1"
-#else
+<#else>
active-value="0"
inactive-value="1"
-#end
+#if>
disabled
/>
-#elseif($column.list && $column.htmlType == "datetime")
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#elseif column.list && column.htmlType == "datetime">
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
- {{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}
+ {{ parseTime(scope.row.${column.javaField}, '{y}-{m}-{d}') }}
-#elseif($column.list && $column.htmlType == "imageUpload")
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#elseif column.list && column.htmlType == "imageUpload">
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
-
+
-#elseif($column.list && $column.dictColumn)
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
+<#elseif column.list && column.dictColumn>
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
-#if($column.htmlType == "checkbox")
-
-#else
-
-#end
+<#if column.htmlType == "checkbox">
+
+<#else>
+
+#if>
-#elseif($column.list && "" != $javaField)
-#if($javaField == $firstTreeListField)
-
-#else
-
-#end
-#end
-#end
-#if($enableStatus && !$statusColumn.list)
+<#elseif column.list && "" != column.javaField>
+<#if column.javaField == firstTreeListField>
+
+<#else>
+
+#if>
+#if>
+#list>
+<#if enableStatus && !statusColumn.list>
-#end
-#if($enableSort && !$sortColumn.list)
+#if>
+<#if enableSort && !sortColumn.list>
-#if($sortColumn.javaType == "LocalDateTime")
+<#if sortColumn.javaType == "LocalDateTime">
-#else
+<#else>
-#end
+#if>
-#end
+#if>
@@ -279,137 +264,129 @@
-#foreach($column in $columns)
-#set($field=$column.javaField)
-#if(($column.insert || $column.edit) && !$column.pk)
-#set($parentheseIndex=$column.columnComment.indexOf("("))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#set($dictType=$column.dictType)
-#if("" != $treeParentCode && $column.javaField == $treeParentCode)
-
+<#list columns as column>
+<#if (column.insert || column.edit) && !column.pk>
+<#if "" != treeParentCode && column.javaField == treeParentCode>
+
-#elseif($column.htmlType == "input")
-
-
+<#elseif column.htmlType == "input">
+
+
-#elseif($column.htmlType == "inputNumber")
-
-
+<#elseif column.htmlType == "inputNumber">
+
+
-#elseif($column.htmlType == "imageUpload")
-
-
+<#elseif column.htmlType == "imageUpload">
+
+
-#elseif($column.htmlType == "fileUpload")
-
-
+<#elseif column.htmlType == "fileUpload">
+
+
-#elseif($column.htmlType == "editor")
-
-
+<#elseif column.htmlType == "editor">
+
+
-#elseif($column.htmlType == "select" && "" != $dictType)
-
-
+<#elseif column.htmlType == "select" && column.dictType?has_content>
+
+
:value="parseInt(dict.value)"
-#else
+<#else>
:value="dict.value"
-#end
+#if>
>
-#elseif($column.htmlType == "select" && $dictType)
-
-
+<#elseif column.htmlType == "select" && column.dictType?has_content>
+
+
-#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
-
+<#elseif column.htmlType == "checkbox" && column.dictType?has_content>
+
+
{{dict.label}}
-#elseif($column.htmlType == "checkbox" && $dictType)
-
-
+<#elseif column.htmlType == "checkbox" && column.dictType?has_content>
+
+
请选择字典生成
-#elseif($column.htmlType == "radio" && "" != $dictType)
-
-
+<#elseif column.htmlType == "radio" && column.dictType?has_content>
+
+
:value="parseInt(dict.value)"
-#else
+<#else>
:value="dict.value"
-#end
+#if>
>{{dict.label}}
-#elseif($column.htmlType == "radio" && $dictType)
-
-
+<#elseif column.htmlType == "radio" && column.dictType?has_content>
+
+
请选择字典生成
-#elseif($column.htmlType == "switch")
-
+<#elseif column.htmlType == "switch">
+
:active-value="true"
:inactive-value="false"
-#elseif($column.javaType == "Integer" || $column.javaType == "Long")
+<#elseif column.javaType == "Integer" || column.javaType == "Long">
:active-value="0"
:inactive-value="1"
-#else
+<#else>
active-value="0"
inactive-value="1"
-#end
+#if>
/>
-#elseif($column.htmlType == "datetime")
-
+<#elseif column.htmlType == "datetime">
+
-#elseif($column.htmlType == "textarea")
-
-
+<#elseif column.htmlType == "textarea">
+
+
-#end
-#end
-#end
+#if>
+#if>
+#list>
-#set($needAddDateRange = false)
-#foreach ($column in $columns)
-#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-#set($needAddDateRange = true)
-#end
-#end
+
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/index.vue.ftl
similarity index 55%
rename from ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm
rename to ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/index.vue.ftl
index 03237fc7b..9bacf6fde 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/index.vue.ftl
@@ -8,70 +8,62 @@
-#foreach($column in $columns)
-#if($column.query)
-#set($dictType=$column.dictType)
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
-#set($parentheseIndex=$column.columnComment.indexOf("("))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($column.htmlType == "input" || $column.htmlType == "textarea")
-
-
+<#list columns as column>
+<#if column.query>
+<#if column.htmlType == "input" || column.htmlType == "textarea">
+
+
-#elseif($column.htmlType == "inputNumber")
-
+<#elseif column.htmlType == "inputNumber">
+
-#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
-
-
-
+<#elseif (column.htmlType == "select" || column.htmlType == "radio") && column.dictType?has_content>
+
+
+
-#elseif($column.htmlType == "switch" && "" != $dictType)
-
-
-
+<#elseif column.htmlType == "switch" && column.dictType?has_content>
+
+
+
-#elseif($column.htmlType == "switch")
-
-
-#if($column.javaType == "Boolean")
+<#elseif column.htmlType == "switch">
+
+
+<#if column.javaType == "Boolean">
-#elseif($column.javaType == "Integer" || $column.javaType == "Long")
+<#elseif column.javaType == "Integer" || column.javaType == "Long">
-#else
+<#else>
-#end
+#if>
-#elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
-
-
+<#elseif (column.htmlType == "select" || column.htmlType == "radio") && column.dictType?has_content>
+
+
-#elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
-
+<#elseif column.htmlType == "datetime" && column.queryType != "BETWEEN">
+
-#elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-
+<#elseif column.htmlType == "datetime" && column.queryType == "BETWEEN">
+
-#end
-#end
-#end
+#if>
+#if>
+#list>
搜索
重置
@@ -101,9 +93,9 @@
新增
修改
删除
-#if($enableExport)
+<#if enableExport>
导出
-#end
+#if>
@@ -111,112 +103,105 @@
-#foreach($column in $columns)
-#set($javaField=$column.javaField)
-#set($parentheseIndex=$column.columnComment.indexOf("("))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#if($column.pk)
-
-#elseif($enableStatus && $statusField == $javaField)
-
+<#list columns as column>
+<#if column.pk && column.list>
+
+<#elseif enableStatus && statusField == column.javaField>
+
-#elseif($enableSort && $sortField == $javaField)
-
+<#elseif enableSort && sortField == column.javaField>
+
-#if($column.javaType == "LocalDateTime")
+<#if column.javaType == "LocalDateTime">
-#else
-
-#end
+<#else>
+
+#if>
-#elseif($column.list && $column.htmlType == "switch")
-
+<#elseif column.list && column.htmlType == "switch">
+
:active-value="true"
:inactive-value="false"
-#elseif($column.javaType == "Integer" || $column.javaType == "Long")
+<#elseif column.javaType == "Integer" || column.javaType == "Long">
:active-value="0"
:inactive-value="1"
-#else
+<#else>
active-value="0"
inactive-value="1"
-#end
+#if>
disabled
/>
-#elseif($column.list && $column.htmlType == "datetime")
-
+<#elseif column.list && column.htmlType == "datetime">
+
- {{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}
+ {{ parseTime(scope.row.${column.javaField}, '{y}-{m}-{d}') }}
-#elseif($column.list && $column.htmlType == "imageUpload")
-
+<#elseif column.list && column.htmlType == "imageUpload">
+
-
+
-#elseif($column.list && $column.dictColumn)
-
+<#elseif column.list && column.dictColumn>
+
-#if($column.htmlType == "checkbox")
-
-#else
-
-#end
+<#if column.htmlType == "checkbox">
+
+<#else>
+
+#if>
-#elseif($column.list && "" != $javaField)
-
-#end
-#end
-#if($enableStatus && !$statusColumn.list)
+<#elseif column.list && "" != column.javaField>
+
+#if>
+#list>
+<#if enableStatus && !statusColumn.list>
:active-value="true"
:inactive-value="false"
-#elseif($statusColumn.javaType == "Integer" || $statusColumn.javaType == "Long")
+<#elseif statusColumn.javaType == "Integer" || statusColumn.javaType == "Long">
:active-value="0"
:inactive-value="1"
-#else
+<#else>
active-value="0"
inactive-value="1"
-#end
+#if>
@change="handleStatusChange(scope.row)"
/>
-#end
-#if($enableSort && !$sortColumn.list)
+#if>
+<#if enableSort && !sortColumn.list>
-#if($sortColumn.javaType == "LocalDateTime")
+<#if sortColumn.javaType == "LocalDateTime">
-#else
+<#else>
-#end
+#if>
-#end
+#if>
@@ -247,126 +232,117 @@
-#foreach($column in $columns)
-#set($field=$column.javaField)
-#if(($column.insert || $column.edit) && !$column.pk)
-#set($parentheseIndex=$column.columnComment.indexOf("("))
-#if($parentheseIndex != -1)
-#set($comment=$column.columnComment.substring(0, $parentheseIndex))
-#else
-#set($comment=$column.columnComment)
-#end
-#set($dictType=$column.dictType)
-#if($column.htmlType == "input")
-
-
+<#list columns as column>
+<#if (column.insert || column.edit) && !column.pk>`n<#if column.htmlType == "input">
+
+
-#elseif($column.htmlType == "inputNumber")
-
-
+<#elseif column.htmlType == "inputNumber">
+
+
-#elseif($column.htmlType == "imageUpload")
-
-
+<#elseif column.htmlType == "imageUpload">
+
+
-#elseif($column.htmlType == "fileUpload")
-
-
+<#elseif column.htmlType == "fileUpload">
+
+
-#elseif($column.htmlType == "editor")
-
-
+<#elseif column.htmlType == "editor">
+
+
-#elseif($column.htmlType == "select" && "" != $dictType)
-
-
+<#elseif column.htmlType == "select" && column.dictType?has_content>
+
+
:value="parseInt(dict.value)"
-#else
+<#else>
:value="dict.value"
-#end
+#if>
>
-#elseif($column.htmlType == "select" && $dictType)
-
-
+<#elseif column.htmlType == "select" && column.dictType?has_content>
+
+
-#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
-
+<#elseif column.htmlType == "checkbox" && column.dictType?has_content>
+
+
{{dict.label}}
-#elseif($column.htmlType == "checkbox" && $dictType)
-
-
+<#elseif column.htmlType == "checkbox" && column.dictType?has_content>
+
+
请选择字典生成
-#elseif($column.htmlType == "radio" && "" != $dictType)
-
-
+<#elseif column.htmlType == "radio" && column.dictType?has_content>
+
+
:value="parseInt(dict.value)"
-#else
+<#else>
:value="dict.value"
-#end
+#if>
>{{dict.label}}
-#elseif($column.htmlType == "radio" && $dictType)
-
-
+<#elseif column.htmlType == "radio" && column.dictType?has_content>
+
+
请选择字典生成
-#elseif($column.htmlType == "switch")
-
+<#elseif column.htmlType == "switch">
+
:active-value="true"
:inactive-value="false"
-#elseif($column.javaType == "Integer" || $column.javaType == "Long")
+<#elseif column.javaType == "Integer" || column.javaType == "Long">
:active-value="0"
:inactive-value="1"
-#else
+<#else>
active-value="0"
inactive-value="1"
-#end
+#if>
/>
-#elseif($column.htmlType == "datetime")
-
+<#elseif column.htmlType == "datetime">
+
+ placeholder="请选择${column.columnLabel}">
-#elseif($column.htmlType == "textarea")
-
-
+<#elseif column.htmlType == "textarea">
+
+
-#end
-#end
-#end
+#if>
+#if>
+#list>
-#set($needAddDateRange = false)
-#foreach ($column in $columns)
-#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-#set($needAddDateRange = true)
-#end
-#end
+
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/types.ts.ftl b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/types.ts.ftl
new file mode 100644
index 000000000..bd2d5cfa5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/vue/types.ts.ftl
@@ -0,0 +1,50 @@
+import type { BaseEntity<#if !table.tree>, PageQuery#if> } from '@/api/types';
+
+export interface ${BusinessName}VO {
+<#list columns as column>
+<#if column.list>
+ /**
+ * ${column.columnComment}
+ */
+ ${column.javaField}: ${column.tsType};
+<#if column.htmlType == "imageUpload">
+ /**
+ * ${column.columnComment}Url
+ */
+ ${column.javaField}Url: string;
+#if>
+#if>
+#list>
+<#if table.tree>
+ /**
+ * 子对象
+ */
+ children: ${BusinessName}VO[];
+#if>
+}
+
+export interface ${BusinessName}Form extends BaseEntity {
+<#list columns as column>
+<#if column.insert || column.edit>
+ /**
+ * ${column.columnComment}
+ */
+ ${column.javaField}?: ${column.tsType};
+#if>
+#list>
+}
+
+export interface ${BusinessName}Query<#if !table.tree> extends PageQuery#if> {
+<#list columns as column>
+<#if column.query>
+ /**
+ * ${column.columnComment}
+ */
+ ${column.javaField}?: ${column.tsType};
+#if>
+#list>
+ /**
+ * 日期范围参数
+ */
+ params?: any;
+}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/xml/mapper.xml.ftl
similarity index 98%
rename from ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm
rename to ruoyi-modules/ruoyi-gen/src/main/resources/fm/xml/mapper.xml.ftl
index 1c76ad8de..d99206849 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/fm/xml/mapper.xml.ftl
@@ -4,3 +4,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+
+
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/bo.java.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/bo.java.vm
deleted file mode 100644
index 9d1c938ba..000000000
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/bo.java.vm
+++ /dev/null
@@ -1,62 +0,0 @@
-package ${packageName}.domain.bo;
-
-import ${packageName}.domain.${ClassName};
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
-import io.github.linpeilie.annotations.AutoMapper;
-import java.io.Serial;
-import java.io.Serializable;
-import lombok.Data;
-import jakarta.validation.constraints.*;
-#foreach ($import in $importList)
-import ${import};
-#end
-
-/**
- * ${functionName}业务对象 ${tableName}
- *
- * @author ${author}
- * @date ${datetime}
- */
-@Data
-@AutoMapper(target = ${ClassName}.class, reverseConvertGenerate = false)
-public class ${ClassName}Bo implements Serializable {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
-#set($hasBetween = false)
-#foreach ($column in $columns)
-#if(!$table.isSuperColumn($column.javaField) && ($column.query || $column.insert || $column.edit))
- /**
- * $column.columnComment
- */
-#if($column.insert && $column.edit)
-#set($Group="AddGroup.class, EditGroup.class")
-#elseif($column.insert)
-#set($Group="AddGroup.class")
-#elseif($column.edit)
-#set($Group="EditGroup.class")
-#end
-#if($column.required)
-#if($column.javaType == 'String')
- @NotBlank(message = "$column.columnComment不能为空", groups = { $Group })
-#else
- @NotNull(message = "$column.columnComment不能为空", groups = { $Group })
-#end
-#end
- private $column.javaType $column.javaField;
-
-#end
-#if($column.query && $column.queryType == 'BETWEEN')
-#set($hasBetween = true)
-#end
-#end
-#if($hasBetween)
- /**
- * 查询参数
- */
- private Map params = new HashMap<>();
-#end
-
-}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/index.tsx.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/index.tsx.vm
deleted file mode 100644
index eddfbfe78..000000000
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/index.tsx.vm
+++ /dev/null
@@ -1,460 +0,0 @@
-#set($needDict = $dicts != '')
-#set($needDateRange = false)
-#set($needImagePreview = false)
-#set($needImageUpload = false)
-#set($needFileUpload = false)
-#set($needEditor = false)
-#set($needCheckbox = false)
-#set($needSelect = false)
-#set($needTextArea = false)
-#set($needDigit = false)
-#set($needDateField = false)
-#set($needSwitchField = false)
-#foreach($column in $columns)
-#if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-#set($needDateRange = true)
-#end
-#if($column.list && $column.htmlType == "imageUpload")
-#set($needImagePreview = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "imageUpload")
-#set($needImageUpload = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "fileUpload")
-#set($needFileUpload = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "editor")
-#set($needEditor = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "checkbox")
-#set($needCheckbox = true)
-#end
-#if(($column.insert || $column.edit || $column.query) && ($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "switch"))
-#set($needSelect = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "textarea")
-#set($needTextArea = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "inputNumber")
-#set($needDigit = true)
-#end
-#if(($column.insert || $column.edit) && $column.htmlType == "datetime")
-#set($needDateField = true)
-#end
-#if(($column.insert || $column.edit || $column.list) && $column.htmlType == "switch")
-#set($needSwitchField = true)
-#end
-#end
-#macro(comment $column)#set($idx=$column.columnComment.indexOf("("))#if($idx != -1)$column.columnComment.substring(0, $idx)#else$column.columnComment#end#end
-import { DeleteOutlined#if($enableExport), DownloadOutlined#end, EditOutlined, PlusOutlined } from '@ant-design/icons';
-import {
- ModalForm,
- PageContainer,
-#if($needCheckbox)
- ProFormCheckbox,
-#end
-#if($needDateField)
- ProFormDateTimePicker,
-#end
-#if($needDigit)
- ProFormDigit,
-#end
-#if($needSelect)
- ProFormSelect,
-#end
-#if($needTextArea)
- ProFormTextArea,
-#end
- ProFormText,
- ProTable,
- type ActionType,
- type ProColumns
-} from '@ant-design/pro-components';
-import { useBoolean } from 'ahooks';
-import { Button, Form, message, Popconfirm#if($enableStatus || $needSwitchField), Switch#end#if($enableSort), InputNumber#end } from 'antd';
-import { useRef, useState } from 'react';
-import type { ${BusinessName}Form, ${BusinessName}Query, ${BusinessName}VO } from '@/api/${moduleName}/${businessName}/types';
-import {
- add${BusinessName},
-#if($enableStatus)
- change${BusinessName}Status,
-#end
- del${BusinessName},
- get${BusinessName},
- list${BusinessName},
-#if($enableSort)
- update${BusinessName}Sort,
-#end
- update${BusinessName}
-} from '@/api/${moduleName}/${businessName}';
-#if($needDict)
-import DictTag from '@/components/common/DictTag';
-#end
-#if($needFileUpload)
-import FileUpload from '@/components/common/FileUpload';
-#end
-#if($needImagePreview)
-import ImagePreview from '@/components/common/ImagePreview';
-#end
-#if($needImageUpload)
-import ImageUpload from '@/components/common/ImageUpload';
-#end
-#if($needEditor)
-import RichTextEditor from '@/components/common/RichTextEditor';
-#end
-import RowActions from '@/components/common/RowActions';
-#if($needDict)
-import { useDict } from '@/hooks/useDict';
-#end
-#if($needDateRange)
-import { useDateRangeQuery } from '@/hooks/useDateRangeQuery';
-#end
-#if($enableExport)
-import { useTableExport } from '@/hooks/useTableExport';
-#end
-import { useTableSelection } from '@/hooks/useTableSelection';
-import { useUserStore } from '@/stores/userStore';
-#if($needDict)
-import { dictOptions } from '@/utils/dict';
-#end
-#if($enableStatus)
-import { confirmAction } from '@/utils/modal';
-#end
-import { hasPermi } from '@/utils/permission';
-import { #if($needDateField)formatDateTimeFields, toDayjsFields, #end toPageQuery, toTableData } from '@/utils/ruoyi';
-
-const default${BusinessName}Form: ${BusinessName}Form = {
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && !$column.pk && $column.htmlType == "checkbox")
- ${column.javaField}: [],
-#end
-#end
-};
-
-#macro(switchActiveValue $column)#if($column.javaType == "Boolean")true#elseif($column.javaType == "Integer" || $column.javaType == "Long")0#else'0'#end#end
-#macro(switchInactiveValue $column)#if($column.javaType == "Boolean")false#elseif($column.javaType == "Integer" || $column.javaType == "Long")1#else'1'#end#end
-#if($enableStatus)
-const ${statusField}ActiveValue = #if($statusColumn.javaType == "Boolean")true#elseif($statusColumn.javaType == "Integer" || $statusColumn.javaType == "Long")0#else'0'#end;
-const ${statusField}InactiveValue = #if($statusColumn.javaType == "Boolean")false#elseif($statusColumn.javaType == "Integer" || $statusColumn.javaType == "Long")1#else'1'#end;
-
-#end
-export default function ${BusinessName}Page() {
- const actionRef = useRef(undefined);
- const [form] = Form.useForm<${BusinessName}Form>();
- const userInfo = useUserStore(state => state.userInfo);
-#if($needDict)
- const dicts = useDict(${dicts});
-#end
- const { ids, selectedOne, handleSelectionChange, clearSelection } = useTableSelection<${BusinessName}VO>(
- row => row.${pkColumn.javaField}
- );
- const [modalOpen, { setTrue: openModal, setFalse: closeModal }] = useBoolean(false);
- const [modalTitle, setModalTitle] = useState('');
-#if($enableExport)
- const { updateExportParams, exportFile } = useTableExport();
-#end
-#foreach($column in $columns)
-#if($column.query && $column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
- const { applyDateRange: apply${AttrName}DateRange } = useDateRangeQuery('${AttrName}');
-#end
-#end
-
- const canAdd = hasPermi(userInfo, ['${permissionPrefix}:add']);
- const canEdit = hasPermi(userInfo, ['${permissionPrefix}:edit']);
- const canRemove = hasPermi(userInfo, ['${permissionPrefix}:remove']);
-#if($enableExport)
- const canExport = hasPermi(userInfo, ['${permissionPrefix}:export']);
-#end
-
- const openAdd = () => {
- form.resetFields();
- form.setFieldsValue(default${BusinessName}Form);
- setModalTitle('添加${functionName}');
- openModal();
- };
-
- const openEdit = async (row?: ${BusinessName}VO) => {
- const target = row || selectedOne;
- if (!target?.${pkColumn.javaField}) return;
- const res = await get${BusinessName}(target.${pkColumn.javaField});
- const data = #if($needDateField)toDayjsFields({ ...res.data }, [
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && $column.htmlType == "datetime")
- '${column.javaField}',
-#end
-#end
- ])#else{ ...res.data }#end;
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && $column.htmlType == "checkbox")
- if (typeof data.${column.javaField} === 'string') {
- data.${column.javaField} = data.${column.javaField}.split(',');
- }
-#end
-#end
- form.resetFields();
- form.setFieldsValue(data);
- setModalTitle('修改${functionName}');
- openModal();
- };
-
- const submitForm = async (values: ${BusinessName}Form) => {
- const submitValues = #if($needDateField)formatDateTimeFields({ ...values }, [
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && $column.htmlType == "datetime")
- '${column.javaField}',
-#end
-#end
- ])#else{ ...values }#end;
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && $column.htmlType == "checkbox")
- if (Array.isArray(submitValues.${column.javaField})) {
- submitValues.${column.javaField} = submitValues.${column.javaField}.join(',');
- }
-#end
-#end
- submitValues.${pkColumn.javaField} ? await update${BusinessName}(submitValues) : await add${BusinessName}(submitValues);
- message.success('操作成功');
- form.resetFields();
- actionRef.current?.reload();
- return true;
- };
-
- const remove = async (row?: ${BusinessName}VO) => {
- await del${BusinessName}(row?.${pkColumn.javaField} || ids);
- message.success('删除成功');
- clearSelection();
- actionRef.current?.reloadAndRest?.();
- };
-
-#if($enableStatus)
- const handleStatusChange = async (row: ${BusinessName}VO, checked: boolean) => {
- const previousStatus = row.${statusField};
- const status = checked ? ${statusField}ActiveValue : ${statusField}InactiveValue;
- const text = checked ? '启用' : '停用';
- try {
- await confirmAction(`确认要"${text}"吗?`);
- await change${BusinessName}Status(row.${pkColumn.javaField}, status);
- message.success(`${text}成功`);
- actionRef.current?.reload();
- } catch {
- row.${statusField} = previousStatus;
- actionRef.current?.reload();
- }
- };
-
-#end
-#if($enableSort)
- const handleSortChange = async (row: ${BusinessName}VO, value?: number | null) => {
- await update${BusinessName}Sort(row.${pkColumn.javaField}, value || 0);
- message.success('排序更新成功');
- actionRef.current?.reload();
- };
-
-#end
- const columns: ProColumns<${BusinessName}VO>[] = [
-#foreach($column in $columns)
-#set($javaField=$column.javaField)
-#set($dictType=$column.dictType)
-#if($column.list)
-#if($enableStatus && $statusField == $javaField)
- {
- title: '#comment($column)',
- dataIndex: '${javaField}',
- valueType: 'select',
- width: 100,
-#if("" != $dictType)
- fieldProps: { options: dictOptions(dicts.${dictType}) },
-#end
- render: (_, row) => (
- handleStatusChange(row, checked)}
- />
- )
- },
-#elseif($enableSort && $sortField == $javaField)
- {
- title: '#comment($column)',
- dataIndex: '${javaField}',
- search: false,
- width: 130,
- render: (_, row) => handleSortChange(row, value)} />
- },
-#elseif($column.htmlType == "datetime")
- { title: '#comment($column)', dataIndex: '${javaField}', valueType: 'dateTime', search: #if($column.query && $column.queryType != "BETWEEN")true#else false#end, width: 170 },
-#elseif($column.htmlType == "imageUpload")
- {
- title: '#comment($column)',
- dataIndex: '${javaField}Url',
- search: false,
- width: 100,
- render: (_, row) =>
- },
-#elseif($column.dictColumn)
- {
- title: '#comment($column)',
- dataIndex: '${javaField}',
- valueType: 'select',
- fieldProps: { options: dictOptions(dicts.${dictType}) },
- render: (_, row) =>
- },
-#elseif($column.htmlType == "switch")
- {
- title: '#comment($column)',
- dataIndex: '${javaField}',
- valueType: 'select',
- width: 100,
- render: (_, row) =>
- },
-#else
- { title: '#comment($column)', dataIndex: '${javaField}'#if(!$column.query), search: false#end },
-#end
-#end
-#if($column.query && $column.htmlType == "datetime" && $column.queryType == "BETWEEN")
- { title: '#comment($column)', dataIndex: '${javaField}Range', valueType: 'dateTimeRange', hideInTable: true },
-#end
-#end
- {
- title: '操作',
- valueType: 'option',
- width: 92,
- fixed: 'right',
- render: (_, row) => (
- , onClick: () => openEdit(row) },
- canRemove && {
- key: 'delete',
- label: '删除',
- icon: ,
- danger: true,
- confirm: `是否确认删除${functionName}编号为"#[[${row.]]#${pkColumn.javaField}#[[}]]#"的数据项?`,
- onClick: () => remove(row)
- }
- ]}
- />
- )
- }
- ];
-
- return (
-
- #end>
- actionRef={actionRef}
- rowKey="${pkColumn.javaField}"
- columns={columns}
- scroll={{ x: 1000 }}
- search={{ labelWidth: 90 }}
- pagination={{ defaultPageSize: 10, showSizeChanger: true }}
- rowSelection={{ selectedRowKeys: ids, onChange: handleSelectionChange }}
- request={async params => {
-#if($needDateRange)
- let query = toPageQuery(params);
-#foreach($column in $columns)
-#if($column.query && $column.htmlType == "datetime" && $column.queryType == "BETWEEN")
-#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
- query = apply${AttrName}DateRange(query, params.${column.javaField}Range as [string, string] | undefined);
- delete query.${column.javaField}Range;
-#end
-#end
-#else
- const query = toPageQuery(params);
-#end
-#if($enableExport)
- updateExportParams(query);
-#end
- const res = await list${BusinessName}(query);
- return toTableData(res);
- }}
- toolbar={{ title: '${functionName}列表' }}
- toolBarRender={() => [
- canAdd && (
- } onClick={openAdd}>
- 新增
-
- ),
- canEdit && (
- } onClick={() => openEdit()}>
- 修改
-
- ),
- canRemove && (
- remove()}>
- }>
- 删除
-
-
- )#if($enableExport),
- canExport && (
- }
- onClick={() => exportFile('/${moduleName}/${businessName}/export', () => `${businessName}_#[[${Date.now()}]]#.xlsx`)}
- >
- 导出
-
- )#end
- ]}
- />
-
-
- title={modalTitle}
- open={modalOpen}
- width={560}
- form={form}
- layout="vertical"
- initialValues={default${BusinessName}Form}
- modalProps={{ destroyOnHidden: true, onCancel: closeModal }}
- onOpenChange={open => !open && closeModal()}
- onFinish={submitForm}
- >
-
-#foreach($column in $columns)
-#if(($column.insert || $column.edit) && !$column.pk)
-#set($field=$column.javaField)
-#set($dictType=$column.dictType)
-#if($column.htmlType == "input")
-
-#elseif($column.htmlType == "textarea")
-
-#elseif($column.htmlType == "inputNumber")
-
-#elseif(($column.htmlType == "select" || $column.htmlType == "radio" || $column.htmlType == "switch") && "" != $dictType)
-
-#elseif($column.htmlType == "checkbox" && "" != $dictType)
-
-#elseif($column.htmlType == "switch")
- ({ checked: value === #switchActiveValue($column) })}
- normalize={checked => (checked ? #switchActiveValue($column) : #switchInactiveValue($column))}
- >
-
-
-#elseif($column.htmlType == "datetime")
-
-#elseif($column.htmlType == "imageUpload")
-
-
-
-#elseif($column.htmlType == "fileUpload")
-
-
-
-#elseif($column.htmlType == "editor")
-
-
-
-#else
-
-#end
-#end
-#end
-
-
- );
-}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/types.ts.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/types.ts.vm
deleted file mode 100644
index 39b7df2a1..000000000
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/react/types.ts.vm
+++ /dev/null
@@ -1,56 +0,0 @@
-import type { BaseEntity#if(!$table.tree), PageQuery#end } from '@/api/types';
-
-#macro(tsType $column)#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1)string | number#elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal')number#elseif($column.javaType == 'Boolean')boolean#else string#end#end
-
-export interface ${BusinessName}VO {
-#foreach ($column in $columns)
-#if($column.list || $column.pk)
- /**
- * $column.columnComment
- */
- $column.javaField: #tsType($column);
-#if($column.htmlType == "imageUpload")
- /**
- * ${column.columnComment}Url
- */
- ${column.javaField}Url?: string;
-#end
-#end
-#end
-#if($table.tree)
- /**
- * 子对象
- */
- children?: ${BusinessName}VO[];
-#end
-}
-
-export interface ${BusinessName}Form extends BaseEntity {
-#foreach ($column in $columns)
-#if($column.insert || $column.edit || $column.pk)
- /**
- * $column.columnComment
- */
-#if($column.htmlType == "checkbox")
- $column.javaField?: string | string[];
-#else
- $column.javaField?: #tsType($column);
-#end
-#end
-#end
-}
-
-export interface ${BusinessName}Query#if(!$table.tree) extends PageQuery#end {
-#foreach ($column in $columns)
-#if($column.query)
- /**
- * $column.columnComment
- */
- $column.javaField?: #tsType($column);
-#end
-#end
- /**
- * 日期范围参数
- */
- params?: Record;
-}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/types.ts.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/types.ts.vm
deleted file mode 100644
index eeef5f556..000000000
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/types.ts.vm
+++ /dev/null
@@ -1,61 +0,0 @@
-export interface ${BusinessName}VO {
-#foreach ($column in $columns)
-#if($column.list)
- /**
- * $column.columnComment
- */
- $column.javaField:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
- #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
- #elseif($column.javaType == 'Boolean') boolean;
- #else string;
- #end
-#if($column.htmlType == "imageUpload")
- /**
- * ${column.columnComment}Url
- */
- ${column.javaField}Url: string;
-#end
-#end
-#end
-#if ($table.tree)
- /**
- * 子对象
- */
- children: ${BusinessName}VO[];
-#end
-}
-
-export interface ${BusinessName}Form extends BaseEntity {
-#foreach ($column in $columns)
-#if($column.insert || $column.edit)
- /**
- * $column.columnComment
- */
- $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
- #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
- #elseif($column.javaType == 'Boolean') boolean;
- #else string;
- #end
-#end
-#end
-}
-
-export interface ${BusinessName}Query #if(!${treeCode})extends PageQuery #end{
-
-#foreach ($column in $columns)
-#if($column.query)
- /**
- * $column.columnComment
- */
- $column.javaField?:#if($column.javaField.indexOf("id") != -1 || $column.javaField.indexOf("Id") != -1) string | number;
- #elseif($column.javaType == 'Long' || $column.javaType == 'Integer' || $column.javaType == 'Double' || $column.javaType == 'Float' || $column.javaType == 'BigDecimal') number;
- #elseif($column.javaType == 'Boolean') boolean;
- #else string;
- #end
-#end
-#end
- /**
- * 日期范围参数
- */
- params?: any;
-}