UNPKG

@form-create/core

Version:

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

61 lines (54 loc) 1.54 kB
import extend from '@form-create/utils/lib/extend'; import is from '@form-create/utils/lib/type'; import {attrs} from '../frame/attrs'; import {copyRule, mergeRule} from '../frame/util'; import {$set} from '@form-create/utils/lib/modify'; export function baseRule() { return { props: {}, on: {}, options: [], children: [], effect: {}, hidden: false, display: true, value: undefined, }; } export function creatorFactory(name, init) { return (title, field, value, props = {}) => { const maker = new Creator(name, title, field, value, props); if (init) { if (is.Function(init)) init(maker); else maker.props(init); } return maker; }; } export default function Creator(type, title, field, value, props) { this._data = extend(baseRule(), {type, title, field, value, props: props || {}}); this.event = this.on; } extend(Creator.prototype, { getRule() { return this._data; }, setProp(key, value) { $set(this._data, key, value); return this; }, _clone() { const clone = new this.constructor(); clone._data = copyRule(this._data); return clone; }, }) export function appendProto(attrs) { attrs.forEach(name => { Creator.prototype[name] = function (key) { mergeRule(this._data, {[name]: arguments.length < 2 ? key : {[key]: arguments[1]}}) return this; }; }); } appendProto(attrs());