import { EquipmentType } from '@/utils/dictMap' import { submitBoilerSign } from '@/api/boiler/boilerSign' import { submitPipeSign } from '@/api/pipe/pipeSign' import { signConfirm } from '@/api/sign' type Adapter = { inputAdapter: (data: any) => any reqFunction: (params: any) => any outputAdapter: (data: any) => any } export enum SignFuncName { SubmitSign, } const map = { [SignFuncName.SubmitSign]: { [EquipmentType.BOILER]: { inputAdapter: null, reqFunction: submitBoilerSign, outputAdapter: null, }, [EquipmentType.PIPE]: { inputAdapter: null, reqFunction: submitPipeSign, outputAdapter: null, }, [EquipmentType.CONTAINER]: { inputAdapter: null, reqFunction: signConfirm, outputAdapter: null, }, }, } export const requestFunc = (funcName: SignFuncName, equipType: EquipmentType, params: any) => { const funMap = map[funcName] const adapter = funMap[equipType] // 1. input adapter let reqParams = params if (adapter.inputAdapter != null) { reqParams = adapter.inputAdapter(params) } if (!adapter.reqFunction) { throw new Error('api for send is not exists') } // 2. send req const respData = adapter.reqFunction(reqParams) // 3. output adapter let adaptedRespData = respData if (adapter.outputAdapter) { adaptedRespData = adaptedRespData = adapter.outputAdapter(respData) } return adaptedRespData }