UNPKG

@form-create/core

Version:

FormCreate低代码表单渲染引擎,可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。

60 lines (52 loc) 1.68 kB
import toLine from '@form-create/utils/lib/toline'; import is from '@form-create/utils/lib/type'; import toString from '@form-create/utils/lib/tostring'; import extend from '@form-create/utils/lib/extend'; import Vue from 'vue'; function parseProp(prop) { if (is.String(prop)) return {domProps: {innerHTML: prop}}; return prop; } export function CreateNodeFactory() { const aliasMap = {}; function CreateNode(vm) { vm && this.setVm(vm); } extend(CreateNode.prototype, { setVm(vm) { this.vm = vm; this.$h = vm.$createElement; }, make(tag, data, children) { if (Vue.config.isReservedTag(tag) && data.nativeOn) delete data.nativeOn; return this.makeComponent(tag, data, children); }, makeComponent(type, data, children) { let Node = this.$h(type, parseProp(data), children || []); Node.context = this.vm; return Node; }, aliasMap }); extend(CreateNode, { aliasMap, alias(alias, name) { aliasMap[alias] = name; }, use(nodes) { Object.keys(nodes).forEach((k) => { const line = toLine(k); const lower = toString(k).toLocaleLowerCase(); const v = nodes[k]; [k, line, lower].forEach(n => { CreateNode.alias(k, v); CreateNode.prototype[n] = function (data, children) { return this.make(v, data, children); }; }); }); } }) return CreateNode; }