diff --git a/modules/core/src/main/resources/templates/modules/gen/app/appApi.xml b/modules/core/src/main/resources/templates/modules/gen/app/appApi.xml
new file mode 100644
index 00000000..05f3367d
--- /dev/null
+++ b/modules/core/src/main/resources/templates/modules/gen/app/appApi.xml
@@ -0,0 +1,34 @@
+
+
+
+ http.api.js
+ ${frontDir}/common
+ http.api.${className}.js
+ {
+ vm.$u.api = {
+
+ // 请将以下 ${functionName} 代码,复制到 http.api.js 文件中
+
+ // ${functionName} 开始
+ ${className}: {
+ form: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/form', params),
+ list: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/listData', params),
+ save: (params = {}) => vm.$u.postJson(config.adminPath+'/${urlPrefix}/save', params),
+ <% if(toBoolean(table.optionMap['isHaveDisableEnable'])){ %>
+ disable: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/disable', params),
+ enable: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/enable', params),
+ <% } %>
+ delete: (params = {}) => vm.$u.post(config.adminPath+'/${urlPrefix}/delete', params),
+ },
+ // ${functionName} 结束
+
+ };
+}
+export default {
+ install
+}
+]]>
+
+
\ No newline at end of file
diff --git a/modules/core/src/main/resources/templates/modules/gen/app/appForm.xml b/modules/core/src/main/resources/templates/modules/gen/app/appForm.xml
new file mode 100644
index 00000000..09c58fc6
--- /dev/null
+++ b/modules/core/src/main/resources/templates/modules/gen/app/appForm.xml
@@ -0,0 +1,282 @@
+
+
+
+ form.vue
+ ${frontDir}/pages/${urlPrefix}
+ form.vue
+
+
+
+ <%
+ var userselectExists = false;
+ var officeselectExists = false;
+ var companyselectExists = false;
+ var areaselectExists = false;
+ for(c in table.columnList){
+ if(c.isQuery == "1" && !c.isTreeEntityColumn){
+ if(c.showType == 'userselect'){
+ userselectExists = true;
+ }else if(c.showType == 'officeselect'){
+ officeselectExists = true;
+ }else if(c.showType == 'companyselect'){
+ companyselectExists = true;
+ }else if(c.showType == 'areaselect'){
+ areaselectExists = true;
+ }
+ }
+ }
+ %>
+ <%
+ for (c in table.columnList){
+ if (c.isEdit == '1' && c.showType != 'hidden'){
+ // 如果是树结构的字段,则自动忽略
+ if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
+ 'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
+ && c.attrName != table.treeViewCodeAttrName
+ && c.attrName != table.treeViewNameAttrName){
+ continue;
+ }
+ %>
+ <% if(c.showType == 'input'){ %>
+
+
+
+ <% }else if(c.showType == 'textarea'){ %>
+
+
+
+ <% }else if(c.showType == 'select' || c.showType == 'select_multiple'){
+ var isMultiple = (c.showType == 'select_multiple'); %>
+
+ multiple="true"<% } %> placeholder="请选择${c.columnLabel}">
+
+ <% }else if(c.showType == 'radio'){ %>
+
+
+
+ <% }else if(c.showType == 'checkbox'){ %>
+
+
+
+ <% }else if(c.showType == 'date' || c.showType == 'datetime'){
+ var isTime = (c.showType == 'datetime'); %>
+
+
+
+ <% }else if(c.showType == 'userselect'){ %>
+
+
+ :label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>>
+
+ <% }else if(c.showType == 'officeselect'){ %>
+
+
+ :label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>>
+
+ <% }else if(c.showType == 'companyselect'){ %>
+
+
+ :label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>>
+
+ <% }else if(c.showType == 'areaselect'){ %>
+
+
+ :label-value="model.${c.attrName2}" @label-input="model.${c.attrName2} = $event"<% } %>>
+
+ <% }else{ %>
+
+
+
+ <% } %>
+ <%
+ }
+ }
+ %>
+ <% if(toBoolean(table.optionMap['isImageUpload'])){ %>
+
+
+
+
+ <% } %>
+
+
+
+
+
+<% %>
+]]>
+
+
\ No newline at end of file
diff --git a/modules/core/src/main/resources/templates/modules/gen/app/appList.xml b/modules/core/src/main/resources/templates/modules/gen/app/appList.xml
new file mode 100644
index 00000000..f1f03672
--- /dev/null
+++ b/modules/core/src/main/resources/templates/modules/gen/app/appList.xml
@@ -0,0 +1,162 @@
+
+
+
+ list.vue
+ ${frontDir}/pages/${urlPrefix}
+ list.vue
+
+
+
+
+
+
+
+
+ <%
+ var idParam = '', idParam2 = '';
+ for(pk in table.pkList){
+ idParam = idParam + (pk.attrName + '=\'+item.' + pk.attrName);
+ idParam2 = idParam2 + ('item.' + pk.attrName);
+ if (pkLP.index != table.pkList.~size) {
+ idParam = idParam + '&';
+ idParam2 = idParam2 + ' || ';
+ }
+ }
+ for(c in table.columnList){
+ if(c.isList == "1"){
+ // 如果是树结构的字段,则自动忽略
+ if(table.isTreeEntity && @StringUtils.inString(c.columnName, 'parent_code',
+ 'parent_codes', 'tree_sorts', 'tree_leaf', 'tree_level', 'tree_names')
+ && c.attrName != table.treeViewCodeAttrName
+ && c.attrName != table.treeViewNameAttrName){
+ continue;
+ }
+ %>
+
+ {{item.${c.attrName} || ${idParam2}}}
+ 创建者:{{item.createBy}} | 时间:{{item.createDate}}
+
+ <%
+ break;
+ }
+ }
+ %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<% %>
+]]>
+
+
\ No newline at end of file
diff --git a/modules/core/src/main/resources/templates/modules/gen/app/appPages.xml b/modules/core/src/main/resources/templates/modules/gen/app/appPages.xml
new file mode 100644
index 00000000..fe107eba
--- /dev/null
+++ b/modules/core/src/main/resources/templates/modules/gen/app/appPages.xml
@@ -0,0 +1,33 @@
+
+
+
+ pages.json
+ ${frontDir}
+ pages.${className}.json
+
+
+
\ No newline at end of file
diff --git a/modules/core/src/main/resources/templates/modules/gen/config.xml b/modules/core/src/main/resources/templates/modules/gen/config.xml
index 51439f4a..5779b539 100644
--- a/modules/core/src/main/resources/templates/modules/gen/config.xml
+++ b/modules/core/src/main/resources/templates/modules/gen/config.xml
@@ -170,6 +170,12 @@
query/dao.xml
+
+ app/appApi.xml
+ app/appList.xml
+ app/appForm.xml
+ app/appPages.xml
+