diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValue.ftl b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValue.ftl
new file mode 100644
index 00000000..634cf17d
--- /dev/null
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValue.ftl
@@ -0,0 +1,13 @@
+<#list columns as po>
+ <#if po.isShow == 'Y'>
+ <#if po.fieldName != 'id'>
+ <#if po.defaultVal??>
+ <#if po.fieldDbType=="BigDecimal" || po.fieldDbType=="double" || po.fieldDbType=="int">
+ ${po.fieldName}:${po.defaultVal},
+ <#else>
+ ${po.fieldName}:"${po.defaultVal}",
+ #if>
+ #if>
+ #if>
+ #if>
+#list>
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValueSub.ftl b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValueSub.ftl
new file mode 100644
index 00000000..eeaf6438
--- /dev/null
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/common/init/initValueSub.ftl
@@ -0,0 +1,13 @@
+<#list sub.colums as po>
+ <#if po.isShow == 'Y'>
+ <#if po.fieldName != 'id'>
+ <#if po.defaultVal??>
+ <#if po.fieldDbType=="BigDecimal" || po.fieldDbType=="double" || po.fieldDbType=="int">
+ ${po.fieldName}:${po.defaultVal},
+ <#else>
+ ${po.fieldName}:"${po.defaultVal}",
+ #if>
+ #if>
+ #if>
+ #if>
+#list>
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
new file mode 100644
index 00000000..9a8ffd82
--- /dev/null
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
@@ -0,0 +1,530 @@
+<#include "/common/utils.ftl">
+
+
+
+
+
+
+<#assign form_popup = false>
+<#assign form_cat_tree = false>
+<#assign form_cat_back = "">
+<#assign bpm_flag=false>
+<#assign form_span = 24>
+<#list columns as po>
+<#if po.fieldDbName=='bpm_status'>
+ <#assign bpm_flag=true>
+#if>
+<#if po.isShow =='Y' && po.fieldName != 'id'>
+<#assign form_field_dictCode="">
+ <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
+ <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
+ <#elseif po.dictField?default("")?trim?length gt 1>
+ <#assign form_field_dictCode="${po.dictField}">
+ #if>
+ <#if po.classType =='textarea'>
+
+
+ <#else>
+
+
+ #if>
+ <#if po.classType =='date'>
+ disabled#if>/>
+ <#elseif po.classType =='datetime'>
+ disabled#if>/>
+ <#elseif po.classType =='time'>
+ disabled#if>/>
+ <#elseif po.classType =='popup'>
+ <#assign form_popup=true>
+ disabled#if>/>
+ <#elseif po.classType =='sel_depart'>
+ disabled#if>/>
+<#elseif po.classType =='switch'>
+ :options="${po.dictField}"#if> <#if po.readonly=='Y'>disabled#if>>
+ <#elseif po.classType =='pca'>
+ disabled#if>/>
+ <#elseif po.classType =='markdown'>
+
+ <#elseif po.classType =='password'>
+ disabled#if>/>
+ <#elseif po.classType =='sel_user'>
+ disabled#if>/>
+ <#elseif po.classType =='textarea'>
+ disabled#if>/>
+ <#elseif po.classType=='list' || po.classType=='radio'>
+ disabled#if>/>
+ <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
+ disabled#if>/>
+ <#elseif po.classType=='sel_search'>
+ disabled#if>/>
+ <#elseif po.classType=='cat_tree'>
+ <#assign form_cat_tree = true>
+ back="${dashedToCamel(po.dictText)}" @change="handleCategoryChange"#if> <#if po.readonly=='Y'>disabled#if>/>
+ <#if po.dictText?default("")?trim?length gt 1>
+ <#assign form_cat_back = "${po.dictText}">
+ #if>
+ <#elseif po.fieldDbType=='int' || po.fieldDbType=='double' || po.fieldDbType=='BigDecimal'>
+ disabled#if>/>
+ <#elseif po.classType=='file'>
+ disabled#if> <#if po.uploadnum??>:number=${po.uploadnum}#if>>
+ <#elseif po.classType=='image'>
+ :number=${po.uploadnum}#if> v-model="model.${po.fieldName}" <#if po.readonly=='Y'>disabled#if>>
+ <#elseif po.classType=='umeditor'>
+ disabled#if>/>
+ <#elseif po.classType == 'sel_tree'>
+
+ <#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
+ dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
+ <#elseif po.dictText?split(',')[1]??>
+ pidField="${po.dictText?split(',')[1]}"
+ <#elseif po.dictText?split(',')[3]??>
+ hasChildField="${po.dictText?split(',')[3]}"
+ #if>
+ #if>
+ pidValue="${po.dictField}"
+ <#if po.readonly=='Y'>disabled#if>>
+
+ <#else>
+ disabled#if>>
+ #if>
+
+
+#if>
+#list>
+
+
+
+
+
+<#list subTables as sub><#rt/>
+ <#if sub.foreignRelationType =='1'>
+
+ <${Format.humpToShortbar(sub.entityName)}-form ref="${sub.entityName?uncap_first}Form" @validateError="validateError" :disabled="formDisabled">${Format.humpToShortbar(sub.entityName)}-form>
+
+
+ <#else>
+
+
+
+ #if>
+#list>
+
+ <#if bpm_flag>
+ 提 交
+ #if>
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
new file mode 100644
index 00000000..a2b4ad2b
--- /dev/null
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
@@ -0,0 +1,491 @@
+<#include "/common/utils.ftl">
+
+
+<#assign form_popup = false>
+<#assign form_cat_tree = false>
+<#assign form_cat_back = "">
+<#assign form_span = 24>
+
+
+
+
+
+
+ <#list columns as po>
+ <#if po.isShow =='Y' && po.fieldName != 'id'>
+ <#assign form_field_dictCode="">
+ <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
+ <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
+ <#elseif po.dictField?default("")?trim?length gt 1>
+ <#assign form_field_dictCode="${po.dictField}">
+ #if>
+ <#if po.classType =='textarea'>
+
+
+ <#else>
+
+
+ #if>
+ <#if po.classType =='date'>
+ disabled#if>/>
+ <#elseif po.classType =='datetime'>
+ disabled#if>/>
+ <#elseif po.classType =='time'>
+ disabled#if>/>
+ <#elseif po.classType =='popup'>
+ <#assign form_popup=true>
+ disabled#if>/>
+ <#elseif po.classType =='sel_depart'>
+ disabled#if>/>
+ <#elseif po.classType =='switch'>
+ :options="${po.dictField}"#if> <#if po.readonly=='Y'>disabled#if>>
+ <#elseif po.classType =='pca'>
+ disabled#if>/>
+ <#elseif po.classType =='markdown'>
+
+ <#elseif po.classType =='password'>
+ disabled#if>/>
+ <#elseif po.classType =='sel_user'>
+ disabled#if>/>
+ <#elseif po.classType =='textarea'>
+ disabled#if>/>
+ <#elseif po.classType=='list' || po.classType=='radio'>
+ disabled#if>/>
+ <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
+ disabled#if>/>
+ <#elseif po.classType=='sel_search'>
+ disabled#if>/>
+ <#elseif po.classType=='cat_tree'>
+ <#assign form_cat_tree = true>
+ back="${dashedToCamel(po.dictText)}" @change="handleCategoryChange"#if> <#if po.readonly=='Y'>disabled#if>/>
+ <#if po.dictText?default("")?trim?length gt 1>
+ <#assign form_cat_back = "${po.dictText}">
+ #if>
+ <#elseif po.fieldDbType=='int' || po.fieldDbType=='double' || po.fieldDbType=='BigDecimal'>
+ disabled#if>/>
+ <#elseif po.classType=='file'>
+ disabled#if> <#if po.uploadnum??>:number=${po.uploadnum}#if>>
+ <#elseif po.classType=='image'>
+ :number=${po.uploadnum}#if> v-model="model.${po.fieldName}" <#if po.readonly=='Y'>disabled#if>>
+ <#elseif po.classType=='umeditor'>
+ disabled#if>/>
+ <#elseif po.classType == 'sel_tree'>
+
+ <#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
+ dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
+ <#elseif po.dictText?split(',')[1]??>
+ pidField="${po.dictText?split(',')[1]}"
+ <#elseif po.dictText?split(',')[3]??>
+ hasChildField="${po.dictText?split(',')[3]}"
+ #if>
+ #if>
+ pidValue="${po.dictField}"
+ <#if po.readonly=='Y'>disabled#if>>
+
+ <#else>
+ disabled#if>>
+ #if>
+
+
+ #if>
+ #list>
+
+
+
+
+
+
+<#list subTables as sub><#rt/>
+<#if sub.foreignRelationType =='1'>
+
+ <${Format.humpToShortbar(sub.entityName)}-form ref="${sub.entityName?uncap_first}Form" @validateError="validateError">${Format.humpToShortbar(sub.entityName)}-form>
+
+
+<#else>
+
+
+
+
+#if>
+#list>
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
new file mode 100644
index 00000000..76e6bdc1
--- /dev/null
+++ b/jero-boot/jero-boot-single-startup/src/main/resources/jero/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Form.vuei
@@ -0,0 +1,146 @@
+
+
+
+
+<#list columns as po><#rt/>
+ <#if po_index % 2 == 0 ><#rt/>
+
+ <#if po.fieldName !='id'>
+ <#list [po_index, po_index+1] as idx><#rt/>
+ <#if idx lt columns?size>
+
+
+ <#if columns[idx].fieldType =='date'>
+
+ <#elseif columns[idx].fieldType =='datetime'>
+
+ <#elseif "int,decimal,double,"?contains(columns[idx].fieldType)>
+
+ <#else>
+
+ #if>
+
+
+ #if>
+ #list><#rt/>
+ #if><#rt/>
+
+ #if><#rt/>
+#list>
+
+
+
+
+<#list subTables as sub><#rt/>
+
+
+
+#list>
+
+
+
+
+
+
+
\ No newline at end of file