You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
3.5 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import request from '../request';
import { REQUEST_URL } from '@/config/EnvProperties';
export default class HttpHandler {
HttpHandlerName = '';
params: { [propName: string]: any } = {};
files: File[] = [];
// 构造方法创建
constructor(handlerName: string) {
this.HttpHandlerName = handlerName;
}
public validate(str: string) {
if (!str) {
return false;
}
const s = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
return !(s == '' || s == 'null' || s == 'undefined');
}
// 添加参数
public AddPara(key: string, val: any) {
this.params[key] = val;
}
// 添加json类型
public AddJson(json: { [propName: string]: any }) {
this.params = {
...this.params,
...json,
};
}
public AddFile(file) {
this.files.push(file);
}
public Clear() {
this.params = {};
}
// 添加url参数
public AddUrlData(url = '') {
let queryString = url;
if (!url) {
queryString = window.location.href.split('?')[1];
if (!queryString) {
return;
}
}
queryString = decodeURI(queryString);
for (const data of queryString.split('&')) {
const [key, val] = data.split('=');
if (!this.validate(key) || !this.validate(val)) {
continue;
}
if (key == 'DoType' || key == 'DoMethod' || key == 'HttpHandlerName') {
continue;
}
this.AddPara(key, decodeURIComponent(val));
}
}
// todo vue中应该是用不到此方法历史原因保留
// 添加formData
public AddFormData(fData: Record<string, any>) {
const keys = Object.keys(fData);
for (const key of keys) {
this.AddPara(key, fData[key]);
}
}
// 获取url参数, 向外提供?
public getParams() {
const params = JSON.parse(JSON.stringify(this.params));
const keys = Object.keys(params);
const pArr: Array<string> = [];
for (const key of keys) {
let val = params[key];
if (val.includes('<script')) {
val = '';
}
pArr.push(`${key}=${val}`);
}
return pArr.join('&');
}
private paramsToFormData() {
const params = JSON.parse(JSON.stringify(this.params));
const keys = Object.keys(params);
// if (keys.length === 0) return null;
const formData = new FormData();
for (const key of keys) {
formData.append(key, `${params[key]}`);
}
if (this.files.length > 0) {
for (const file of this.files) {
formData.append('file', file);
}
}
return formData;
}
// 自定义请求
public CustomRequest<T>(params: Record<string, any>): Promise<T> {
return request.post<null, T>(REQUEST_URL, this.paramsToFormData(), {
params,
});
}
// 这两个方法其实没有差别因为已经在axios里面判断过了.
public DoMethodReturnString(methodName: string) {
return request.post<null, string>(REQUEST_URL, this.paramsToFormData(), {
params: {
DoType: 'HttpHandler',
DoMethod: methodName,
HttpHandlerName: this.HttpHandlerName,
t: Math.random(),
},
});
}
public DoMethodReturnJson<T = Recordable>(methodName: string) {
// REQUEST_URL 请求地址
// this.paramsToFormData() 通过方法获取参数
// params 实际是拼接在url里面的
return request.post<null, T>(REQUEST_URL, this.paramsToFormData(), {
params: {
DoType: 'HttpHandler',
DoMethod: methodName,
HttpHandlerName: this.HttpHandlerName,
t: Math.random(),
},
});
}
}