
export default {
    name: "FORM_PLUGIN",

    // 列格式化方法配置
    listColumnFormatters:{},
    // 列格式化事件配置
    listColumnEvents:{},
    // 表单视图自定义配置组件包
    tableViewsConfigComponent:{},
    // 表单视图自定义渲染组件包
    tableViewsRenderComponent:{},

    /**
     * 载入格式化组件配置
     * @param id 组件标识
     * @param name 组件名称
     * @param isExistsEvent 是否需要配置动作
     * @param config 配置组件
     * @param render 渲染组件
     * @param getConfigDatas 获取配置组件内容的方法，不写默认getConfigDatas
     * @param reqBefore 请求前加载组件
     * @param reqAfter 请求后加载组件
     */
    installColumnFormatter({id,name,isExistsEvent,config,render,getConfigDatas = "getConfigDatas",reqBefore,reqAfter}){
        if(!id){
            console.log("参数中必须包含id");
            return;
        }
        if(this.listColumnFormatters[id]){
            console.error("格式化方法中已包含此组件id（"+ id +"），请修改id重新注册！");
            return;
        }
        let setting = {
            id: id,
            name: name,
            isExistsEvent: isExistsEvent,
            config: config,
            render: render,
            getConfigDatas: getConfigDatas,
            reqBefore: reqBefore,
            reqAfter: reqAfter
        };
        let compSet = {};
        compSet[setting.id] = setting;
        Object.assign(this.listColumnFormatters,compSet);
    },

    /**
     * 载入事件配置
     * @param id 组件标识
     * @param name 组件名称
     * @param config 配置组件
     * @param render 渲染组件
     * @param getEventDatas 获取事件配置内容的方法，不写默认getEventDatas
     * @param runEvent 调用点击或双击事件时执行的方法名，不写默认runEvent
     */
    installColumnEvent({id,name,config,render,getEventDatas = "getEventDatas",runEvent="runEvent"}){
        if(!id){
            console.log("参数中必须包含id");
            return;
        }
        if(this.listColumnEvents[id]){
            console.error("格式化事件中已包含此组件id（"+ id +"），请修改id重新注册！");
            return;
        }
        let setting = {
            id: id,
            name: name,
            config: config,
            render: render,
            getEventDatas: getEventDatas,
            runEvent: runEvent
        };
        let compSet = {};
        compSet[setting.id] = setting;
        Object.assign(this.listColumnEvents,compSet);
    },

    /**
     * 移除格式化组件配置
     * @param id
     */
    removeColumnFormatter(id){
        delete this.listColumnFormatters[id];
    },

    /**
     * 移除格式化组件配置
     * @param id
     */
    removeColumnEvent(id){
        delete this.listColumnEvents[id];
    },

    /**
     * 载入表单视图配置组件
     * @param name
     * @param component
     */
    installTableViewsConfigComponent(components){
        if(!components){
            console.log("组件不存在");
            return;
        }
        if(Array.isArray(components)){
            components.forEach(component => {
                this.tableViewsConfigComponent[component.name] = component;
            })
        }else{
            this.tableViewsConfigComponent[components.name] = components;
        }
    },

    /**
     * 载入表单视图渲染组件
     * @param name
     * @param component
     */
    installTableViewsRenderComponent(components){
        if(!components){
            console.log("组件不存在");
            return;
        }
        if(Array.isArray(components)){
            components.forEach(component => {
                this.tableViewsRenderComponent[component.name] = component;
            })
        }else{
            this.tableViewsRenderComponent[components.name] = components;
        }
    }

}
