import { IS_ARRAY_STRING_REG, deconstruct } from './shared' /** * 钩子方法,可触发对应钩子 */ function Hooks() { this.hooks = [] } /** * 绑定钩子 * @param {String} type 钩子名称 * @param {Function} action 执行钩子触发的方法 */ Hooks.prototype.bind = function(type, action) { this.hooks[type] = action } /** * 触发之前绑定的钩子 * @param {String} type 钩子类型 */ Hooks.prototype.tap = function(type, params) { this.hooks[type] && this.hooks[type](params) } // hook实例 const HooksIntance = new Hooks() export const BEFORE_REQUEST = 'beforeRequest' /** * 绑定接口请求前触发的事件 * @param formData 当前表单触发的数据 */ HooksIntance.bind(BEFORE_REQUEST, formData => { // 校验当前接口请求数据中是否有需要解构的内容 Object.keys(formData).forEach(key => { // 将key去掉空格 const noSpaceKey = key.replace(' ', '') // 如果当前是数组字符串 if (IS_ARRAY_STRING_REG.test(noSpaceKey)) { // 当前值 const formItemValue = formData[key] ? ( formData[key] instanceof Array ? formData[key] : `${formData[key] || ''}`.split(',') ) : [] // 将解构的数据放入数组中 deconstruct(noSpaceKey).forEach((mapKey, mapIndex) => { formData[mapKey] = formItemValue[mapIndex] }) // 删除原来的数据 delete formData[key] } }) }) export default HooksIntance