import { HandleClass } from './behavior'; class HandleBehavior { constructor(props) { this.formData = props.formData || null; } initBehavior = (formData) => { if (!this.formData) { this.formData = formData } if (!this.formData) return this.hiddenFilds(); this.formData.map(item => { if (!item.behaviors || !Array.isArray(item.behaviors) || item.behaviors.length === 0) return; const value = this.handleFormaterValue(item.value, item); this.handleBehavior({ currentValue: value, componentData: item }) }) return this; } getFormData = () => { return this.formData } handleFormaterValue = (value, item) => { if (!value) return value; if (Array.isArray(value) && value.length) { return value[0].value; } if (typeof value === 'object' && value) { return value.value; } return value; } /* * 处理行为方法 */ handleBehavior = ({ currentValue, componentData = {}, eventType, formData }) => { this.formData = formData || this.formData; const value = this.handleFormaterValue((currentValue || componentData.value), componentData); const events = componentData.events || [] const behaviors = componentData.behaviors || []; const changeEvents = eventType ? events.filter(ls => ls.eventValue === 'onChange') : events; changeEvents.forEach(event => { this.onChangeBehavior({ event, value, componentData, behaviors }) }); } onChangeBehavior = ({ event, value, componentData, behaviors }) => { if (!event.behaviors || !Array.isArray(event.behaviors)) return; event.behaviors.forEach(item => { this.handleBehaviorType({ value, behavior: item, componentData, behaviors }); }); } handleBehaviorType = ({ value, behavior, behaviors, componentData }) => { const behaviorInstance = HandleClass[behavior.behaviorValue]; if (!behaviorInstance || !behaviorInstance.fun) return; let formData = this.formData; this.formData = behaviorInstance.fun({ value, behavior, behaviors, formData, componentData }, this.resertValueCallback); } resertValueCallback = ({ key, value }) => { const componentData = this.formData.find(ls => ls.name === key) || {}; this.handleBehavior({ currentValue: value, componentData }) } hiddenFilds = () => { this.formData = this.formData.filter(item => item.type !== 'hidden') } } export default HandleBehavior