//服务端地址 import {server} from "./api"; export enum Method { PUT="PUT", POST="POST", GET="GET" } export enum Result { OK="OK", FAIL="FAIL" } /** * 响应数据 */ export class JSONResponse { result?:Result customResult?:Q } /** * 数据类型转换 */ export abstract class TransformData> { protected target: T constructor() { this.target = this.newObject(); } protected abstract newObject(): T public transform(data:any){ this.transformResult(data) this.transformBody(data) return this.target } protected transformBody(data:any){ } private transformResult(data:any){ if("result" in data ) { this.target.result = data.result } if("customResult" in data){ this.target.customResult = data.customResult } } } //发送请求 export function request,T extends TransformData>(api:string,method:Method,formParams: {[propName:string]: string | Blob|Array},transform:T,callback:Function) { let formData let queryParams='' if(method===Method.GET) { for(let formParam in formParams){ let params=formParams[formParam] if(params instanceof Array) { for(let value in params){ queryParams+='&'+formParam+'='+params[value] } }else{ queryParams += '&' + formParam + '=' + params } } queryParams='?'+queryParams.substr(1) }else{ formData=new FormData() for (let formParam in formParams) { let params= formParams[formParam] if(params instanceof Array){ for(let value in params){ if(params.hasOwnProperty(value)) { formData.append(formParam + '[]', params[value]) } } }else if(params instanceof Blob||typeof params==="string"){ formData.append(formParam,params) } } } fetch(server+api+queryParams,{ method:method, body:formData, credentials: 'include', }) .then( response=>{if(response.status===200){ return response.json() }else{ throw new Error("遇到无法处理的错误,请联系管理员") }} ) .catch( error =>console.error('Error:', error) ) .then((response:JSONResponse)=>{ callback(transform.transform(response)) }) }