表单设计器2 - form-generator源码学习

form-generator是基于vue框架的Element UI表单设计及代码生成器。表单设计器,常用于需要给用户提供表单定制功能的场景中。例如开发一套工作流系统,工作流中涉及到的请假、出差、审批等页面或表单,HR是可以自己定义和调整的。表单不是固定的,是在需要的时候创建出来的。

使用的插件

1、vuedraggable:可拖动模块

2、throttle-debounce:节流-防抖动
npm 模块throttle-debounce,它提供了throttle和debounce两个函数:throttle 的含义是节流,debounce 的含义是防抖动,通过它们可以限制函数的执行频率,避免短时间内函数多次执行造成性能问题

vuedraggable常用属性:
value: 用于实现拖拽的list,通常和内部v-for循环的数组为同一数组,类型为Array
list: 效果同value的。和v-model不能共用,类型为Array
group: 用于分组,同一组的不同list可以相互拖动。group一般的用法是用来区分拖拽组的,group名称相同的拖拽组可以相互拖放。
group属性还有更详细的配置。group="{name:'abc', pull: 'clone', put: false}"
put参数用来控制别的地方内容是否可以拖拽到自己这边来。
pull参数控制的是从当前拖走,放在另一个地方的行为。默认情况下(设置为true)是你拖拽到另外一个地方去,当前列表中就会少一个,对方列表多一个。如果设置为‘clone’,那么当前列表不会减少,同时对方列表多了一个。
clone: 返回值为true时克隆,可以理解为正常的拖拽变成了复制。当pull:'clone时的拖拽的回调函数’,类型为Function
draggable: 定义哪些列表单元可以进行拖放,类型为Selector
sort: 定义是否可以拖拽,类型为Boolean
animation:拖动过程中的动画

设计思想

跟自己的vue工程融合

那么,如何将form-generator引入到自己的vue工程中呢?
查看源码,发现该工程是一个多页面工程,打包出来有两个页面,一个是index.html,一个是preview.html。
preview.html是在index.html的按钮点击事件中打开的,以iframe形式呈现。而非单页面应用,不能发布成包(有待考证),不符合我们目前微前端的开发模式。

为了符合我们现有的开发模式,需要将改开源工程,改造成单页面应用,并成功发布。
为了满足以上要求,首先要将preview页面改造成一个组件,并在主页面中依赖。这个过程中,最复杂的是(待完善)

form-generator源码分析

从新增一个组件的角度出发,顺序是:
新增组件的配置:components/generator/config.js
传入拖动组件中:在views/home/index.vue
渲染该组件所在的拖动组:views/home/DraggableItem.vue
渲染拖动组每个组件:/components/render/render.vue
组件如果有slot,单独开发:/components/render/slots

该插件的缺陷:

  1. 不是单页面工程
  2. 没有做国际化
  3. 下拉框不能加载远程的数据
  4. 组件不够丰富,没有表格组件
  5. 组件是elementui开发的,跟目前用的antd不同

需要打通的流程

  1. 改造成单页面工程,发布到仓库,再其他工程中使用(70%)
  2. 封装一个选择组织人员的业务组件,再配置到当前框架中,扩充基础组件
  3. 增加请求远程数据的功能
  4. 创建一个表单,保存并使用在工作流中,考虑如何保存创建的表单模板,vue文件还是json等?
  5. form表单能获取值,新增的业务组件怎么拿到值呢
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容