0
点赞
收藏
分享

微信扫一扫

手把手教你用EZDML批量生成vue-element-admin前端页面代码

EZDML 3.26增加了vue-element-admin示例生成模板,本文就以它来讲解示范,如何从零开始用EZDML批量生成代码。

先说下,本人较少写文章,字少,图多,有时比较啰嗦,大家多包涵。

前提当然是已经下载安装EZDML了,可从ezdml.com官网下载,需要3.26以上的版本。

EZDML具有强大的脚本模板引擎功能,支持pascal和javascript脚本。EZDML新版默认就已经能生成vue-element-admin模板了(见上一个帖子),不过为了方便理解,我们在这里要假装还没有这个功能。

 

要想批量生成,先要有单个生成,因此首先要有通过一个表生成一个vue-element界面的基本脚本模板,这个EZDML已经有现成的。比如我们新建一个Area地区表,点工具栏按钮“新增表”,在描述字输入以下内容:

area 地区
------
id(ID) PKI
name 名称 String
fullName 全称 S
createDate 创建日期 Date
modifyDate 最后修改日期 D
orders 排序 I
grade 层级 I
treePath 树路径 S
parent_id 上级地区 FKI

嗯,是的,EZDML建表的第二个标准姿势就是用键盘输入类似的文本内容(第一个标准姿势是从其它现有表复制粘贴类似的文本内容)。

确定,并把模型改名为user(用户):

双击area表打开属性,切到界面页,点“表单”,这里会显示界面和数据的预览。按Ctrl键选中除“orders(排序)”外的所有字段,将它们设置为“必填”:

选中“name(名称)”,设置其数据生成类型为“city_cn:城市(中国,中文)”:

选中“fulleName(全称)”,设置其“数据生成规则”为“中国%FIELD(name)%市”:

切换到生成页,可以看到三个vue的生成模板:

点右上角的浏览器打开可以预览:

这里我们只关注Form表单和List列表两个生成模型,后面要用到:

可点编辑脚本看看,这个是JS脚本:

 核心代码在include的那个VueElementLib.js_里,执行菜单“运行|编译检查”,会将include的代码全显示出来,基本原理就是用JS遍历curTable的字段属性输出内容,代码不多,带有注释,应该基本都能看懂,不看也没什么问题,具体这里就不展开讲了:

保存模型文件备用。 

顺便说下这个脚本调试器,EZDML原来只支持pascal脚本,后来才加的JS,这个编辑器原本是给Pascal脚本用的,并不支持JS调试,所以对JS来说,只有执行成功或失败,没法下断点看变量之类的,可调试功能基本为0,用它调JS只能凭各自本事了。

单个表的脚本模板有了,接下来我们基于vue-element-admin的基础进行批量生成。

vue-element-admin 是一个后台前端解决方案,基于 vue 和 element-ui实现,作者为PanJiaChen(花裤衩 https://panjiachen.gitee.io/vue-element-admin-site/zh/)。它有几个版本,为了方便示范,我们选取比较简单的基础模板vue-admin-template来操作。

首先是下载源码安装运行,我用git拉取,本机要安装git和NodeJs,执行的命令如下:

D:
cd D:\temp
git clone https://gitee.com/panjiachen/vue-admin-template
npm install
npm run dev

直接npm install可能较慢,可加参数使用阿里数据源:npm install --registry=https://registry.npm.taobao.org

安装完成,运行npm run dev:

编译成功:

自动打开浏览器:

默认是英文界面:

vue-element-template默认是英文的,看着不舒服,我改成中文了,具体过程就不细述了:

接着,我在src目录下,创建ez_views\user\area子目录,并将刚才EZDML生成的Form和List两个内容分别保存到这个子目录,取名detail.vue和list.vue:

接着,打开router/index.js,添加/ez_user/area_list和/ez_user/area_detail/:id两个路由,当然是指向刚才那两个vue了:

保存运行,效果如下:

表单是弹出的,还关不掉,不要紧,先放着:

打开list.vue和detail.vue,我们会发现,生成的数据也在里面,这个显然要转移到mock里:

在mock目录下创建子目录ez_mock/user,并新建area.js,将list.vue和detail.vue的数据转移到这里来:

并输出/vue-admin-template/ez_user/area/list和detail两个API接口:

然后再修改list.vue和detail.vue,增加fetchData方法,让它们从mock接口获取数据:

保存再跑,页面看起来没变化,但跟踪网络请求会发现会从后端请求数据了:

至此为止,我们已经有一个模板工程了。这个工程我提交到了gitee(我在gitee上Fork了原作者的vue-element-template工程,并将改过的内容提交):

https://gitee.com/huzgd/vue-admin-template

模板工程做好后,接下来准备批量生成。打开EZDML的脚本模板文件夹(我机上是D:\EZDML\Templates),创建helloVueAdmin子目录:

 并将刚才改过的vue-admin-template整个目录文件拷过来(.git、node_modules目录和package-lock.json除外):

用EZDML打开演示文件demo_ch.dmj,切到store(店铺)模型,执行菜单“模型|生成代码”命令,这时也是可以生成的:

我机上默认是生成到D:\EZDML\temp\ezdml\helloVueAdmin,不过打开目标文件夹,你会发现生成只是机械地把所有文件拷到目录路径下,应该说这个生成是假的:

 打开终端执行安装运行,当然也是可以运行的,只不过运行还是只有用户|地区模块而已:

接下来我们配置批量输出,回到模板文件夹D:\EZDML\Templates\helloVueAdmin,打开src\ez_views目录:

将子目录user改名为ezmodel,并创建_dml_config.INI文件:

 _dml_config.INI文件内容只有两行,意思是生成时将ezmodel文件夹改名为真正的模型名(如有汉字则转成拼音):

 然后进入ezmodel目录:

同样将area改名为eztable,同样也创建一个_dml_config.INI文件:

 这回我们多写一行,大概意思是遍历所有表,对每个表都将eztable复制一份,并改名为表名(汉字转拼音):

 再次执行代码生成,这时会发现有批量生成内容的日志了:

打开目标目录,刚才生成的user还在(嗯,默认不会删除的),旁边多了个store:

 打开store子目录,确实为每个表都生成了目录:

 当然了,目前所有目录的文件都是一样的,这个我们就需要进一步处理了。

打开模板的EZDML\Templates\helloVueAdmin\src\ez_views\ezmodel\eztable目录:

同样创建一个_dml_config.INI文件,内容如下:

 意思很明确,就是把这两个文件当JS脚本模板执行,输出的结果写到目标文件里。

接下来就是把list.vue和detail.vue改造成JS模板。这两文件本来就是用JS生成的,现在只是还原回去,就是把template下的VueElementList_vue.js内容拷到list.vue里,把VueElementForm_vue.js的内容拷到detail.js里,并稍作修改,让#include "VueElementLib.js_"路径指向template:

重新生成代码,会发现生成内容确实变了:

为了能在界面上看到效果,我们还需要生成路由。在src\router下创建_dml_config.INI,内容就是让index.js变为一个JS模板:

然后修改router/index.js,首先是加个<% %>头,以<%开头的会被识别为模板格式:

要把原来写死的路由改掉,找到原来的内容:

改成动态的,大概就是遍历当前模型的所有选中的表,生成路由配置:


  {
    path: '/ez_${ChnToPY(curModel.name)}',
    component: Layout,
    redirect: '/ez_${ChnToPY(curModel.name)}/area_list',
    meta: { title: '${curModel.displayName}', icon: 'el-icon-menu' },
    children: [
<%
  var md=curModel;
  for(var j=0; j<md.tables.count; j++)
  {
    var tb = md.tables.getItem(j);
    if(!tb.isChecked || (tb.typeName == 'TEXT') )
      continue;
%>
      {
        path: '${ChnToPY(tb.name)}_list',
        name: 'Ez${ChnToPY(tb.name)}List',
        component: () => import('@/ez_views/${ChnToPY(curModel.name)}/${ChnToPY(tb.name)}/list'),
        meta: { title: '${tb.UIDisplayName}列表', icon: 'el-icon-document' }
      },
      {
        path: '${ChnToPY(tb.name)}_form',
        name: 'Ez${ChnToPY(tb.name)}Form',
        component: () => import('@/ez_views/${ChnToPY(curModel.name)}/${ChnToPY(tb.name)}/detail'),
        meta: { title: '${tb.UIDisplayName}表单', icon: 'el-icon-document' }
      },
<%
  }
%>
    ]
  },

生成结果:

这时运行能看到菜单了:

至此我们已经完成了批量生成路由、列表、表单功能了。接下来照着套路把mock里的内容也处理一遍,就是目录文件改名,加_dml_config.INI配置:

对每个表循环生成mock数据脚本:

 

再修改list/detail改用mock数据请求,并把表单做成组件放入列表中:

加个完成后的shell启动命令(在根目录下_dml_config.INI里配置auto_open_on_finished),就是EZDML自带的vueElemeAdmin模板了。

写得有点疲了,后面偷懒简化了,反正最后结果大概就是这样了:

生成的过程有点曲折,不过一旦写好就可以哗哗地大量制造代码了,能省事不少。如有问题可加Q群沟通(见软件的帮助、关于)。

举报

相关推荐

0 条评论