@form-create/core
Version:
FormCreate低代码表单渲染引擎,可以通过 JSON 生成具有动态渲染、数据收集、验证和提交功能的低代码表单。支持6个UI框架,适配移动端,并且支持生成任何 Vue 组件。
61 lines (54 loc) • 1.54 kB
JavaScript
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());