UNPKG

fastchar-appjs

Version:

快速搭建VUE项目工具类的基本库,主要用于每个功能页面独立生成html,不使用vue单页面功能。

532 lines (531 loc) 19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FastServer = void 0; const tslib_1 = require("tslib"); const axios_1 = tslib_1.__importDefault(require("axios")); const FastNative_1 = require("./FastNative"); const FastBaseApp_1 = require("./FastBaseApp"); const FastHelper_1 = require("./FastHelper"); /** * FastServer 创息公司请求服务器接口工具类 * @author Janesen */ var FastServer; (function (FastServer) { /** * 基本的网络请求接口 */ class Base { constructor() { } /** * 获取请求接口的默认头信息配置 */ static getHeaderConfig() { if (window["FastSecurity"]) { return { token: FastSecurity.token() }; } return {}; } /** * 获取地址栏携带的参数 * @param paramName 参数名 */ static getWindowUrlParam(paramName) { return this.getUrlParam(window.location.href, paramName); } /** * 获取地址栏携带的参数对象信息 */ static getWindowUrlInfo() { return this.getUrlParamInfo(window.location.href); } /** * 获取url的参数 * @param url 地址 * @param paramName 参数名 */ static getUrlParam(url, paramName) { let windowUrlInfo = FastServer.Base.getUrlParamInfo(url); for (let windowUrlInfoKey in windowUrlInfo) { if (windowUrlInfoKey == paramName) { return windowUrlInfo[windowUrlInfoKey]; } } return null; } /** * 获取url的参数实体对象 * @param url 地址 */ static getUrlParamInfo(url) { let urlInfo = {}; let splitArray = url.split("#")[0].split("?"); let search = splitArray[splitArray.length - 1]; let vars = search.split("&"); for (let i = 0; i < vars.length; i++) { let pair = vars[i].split("="); urlInfo[pair[0]] = pair[1]; } return urlInfo; } /** * 追加url参数 * @param url * @param params */ static appendUrlParams(url, params) { let newUrl = url; if (url.indexOf("?") > 0) { newUrl = url + "&1=1"; } else { newUrl = url + "?1=1"; } if (params) { this.convertToFormData(params).forEach(function (value, key, parent) { if (value instanceof File) { return; } newUrl = newUrl + "&" + key + "=" + value; }); } return newUrl; } /** * 合并多个FormData参数 * @param formData */ static mergeFormData(...formData) { const newParams = new FormData(); formData.forEach(function (item) { if (FastHelper_1.FastHelper.Strings.isEmpty(item)) { return true; } item.forEach(function (value, key, parent) { newParams.append(key, value); }); }); return newParams; } /** * 如果是formData对象则转转换参数为object对象 * @param param */ static convertToObject(param) { if (param instanceof FormData) { let newParams = {}; param.forEach(function (value, key, parent) { newParams[key] = value; }); return newParams; } return param; } /** * 转换参数为FormData格式 * @param param 任意格式的参数,FormData、Object、Function */ static convertToFormData(param) { const newParams = new FormData(); if (param instanceof FormData) { return param; } else if (FastHelper_1.FastHelper.Functions.isFunction(param)) { return this.convertToFormData(param()); } else { for (let paramKey in param) { if (param.hasOwnProperty(paramKey)) { newParams.append(paramKey, param[paramKey]); } } } return newParams; } /** * 合并参数并转换为FormData格式 * @param params 任意多个参数,FormData、Object、Function */ static mergeParams(...params) { let newParams = new FormData(); params.forEach(function (param) { if (FastHelper_1.FastHelper.Strings.isEmpty(param)) { return true; } if (FastHelper_1.FastHelper.Arrays.isArray(param)) { newParams = FastServer.Base.mergeFormData(newParams, FastServer.Base.mergeParamsByArray(param)); } else { newParams = FastServer.Base.mergeFormData(newParams, FastServer.Base.convertToFormData(param)); } }); return newParams; } /** * 将数组格式的参数合并 * @param params 数组 */ static mergeParamsByArray(params) { let newParams = new FormData(); for (let i = 0; i < params.length; i++) { let item = params[i]; if (FastHelper_1.FastHelper.Strings.isEmpty(item)) { continue; } if (FastHelper_1.FastHelper.Arrays.isArray(item)) { newParams = FastServer.Base.mergeFormData(newParams, FastServer.Base.mergeParamsByArray(item)); } else { newParams = FastServer.Base.mergeFormData(newParams, FastServer.Base.convertToFormData(item)); } } return newParams; } /** * 发起接口请求 * @param method 请求方法,例如,post、get * @param url 请求地址 * @param params 请求参数 */ static doRequest(method, url, params) { let axiosConfig = { headers: FastServer.Base.getHeaderConfig(), method: method, url: url, timeout: 3 * 60 * 1000 }; if (method === "post") { if (FastHelper_1.FastHelper.Strings.isString(params)) { axiosConfig.paramsSerializer = params; } else { axiosConfig.data = this.convertToFormData(params); } } else { if (FastHelper_1.FastHelper.Strings.isString(params)) { axiosConfig.paramsSerializer = params; } else { axiosConfig.params = FastServer.Base.convertToObject(params); } } return axios_1.default(axiosConfig); } /** * 执行post请求 * @param url 请求地址 * @param params 请求参数,可为object或formdata */ static doPost(url, params) { return this.doRequest("post", url, params); } /** * 执行get请求 * @param url 请求接口地址 * @param params 请求接口参数 */ static doGet(url, params) { return this.doRequest("get", url, params); } } FastServer.Base = Base; // noinspection DuplicatedCode /** * 创息公司系统的接口请求类 */ class Croshe extends Base { /** * 获取接口的全局参数,同步获取了原生APP的全局参数 */ static async getFinalParams() { let result = await FastNative_1.FastNative.CrosheApp.getFinalParams(); let justFinalParams = {}; if (result && result.success) { for (let dataKey in result.data) { justFinalParams[dataKey] = result.data[dataKey]; } } let finalParams = FastBaseApp_1.FastBaseApp.Config.getGlobalConfig("FinalParams"); if (finalParams) { for (let dataKey in finalParams) { if (finalParams[dataKey] === undefined) { continue; } justFinalParams[dataKey] = finalParams[dataKey]; } } return justFinalParams; } /** * 发起请求接口 * @param method 请求方法,例如:post、get * @param url 接口地址 完整的地址,例如:http://loalhost:8080/user/login * @param params 参数 * @param config 请求配置 * @param callBack 请求接口回调函数,在使用alwaysCache和alwaysBackRequest参数为true时,必须使用回调函数接收 */ static async request(method, url, params, config, callBack) { return new Promise(async function (resolved, rejected) { if (!config) { config = { finalParams: true }; } params = FastServer.Base.convertToFormData(params); if (config.finalParams) { let justFinalParams = await FastServer.Croshe.getFinalParams(); for (let dataKey in justFinalParams) { if (params.has(dataKey)) { delete justFinalParams[dataKey]; } } params = FastServer.Base.mergeParams(justFinalParams, params); } let cacheKey = FastServer.Croshe.buildCacheKey(url, params); let cachedData = false; if (config.cache) { let result = await FastNative_1.FastNative.CrosheApp.getCache(cacheKey); if (result.success) { cachedData = true; let fastResponseData = new FastResponseData(JSON.parse(result.data), true); fastResponseData.requestConfig = config; resolved(fastResponseData); if (callBack) { callBack(fastResponseData); } if (!config.alwaysCache) { return; } } } if (!url) { let fastResponseData = new FastResponseData({ success: false, message: "JS错误:请求地址不可为空!" }); resolved(fastResponseData); if (callBack) { callBack(fastResponseData); } return; } FastServer.Base.doRequest(method, url, params).then(function (response) { if (!config) { config = new FastServer.FastRequestConfig(); } let fastResponseData = new FastResponseData(response.data); fastResponseData.requestConfig = config; if (config.cache) { if (config.alwaysBackRequest || !cachedData) { resolved(fastResponseData); if (callBack) { callBack(fastResponseData); } } FastNative_1.FastNative.CrosheApp.setCache(cacheKey, JSON.stringify(response.data)); } else { resolved(fastResponseData); if (callBack) { callBack(fastResponseData); } } }).catch(function (error) { console.error(error); rejected(error); }); }); } /** * post请求接口 * @param url 接口地址 完整的地址,例如:http://loalhost:8080/user/login * @param params 参数 * @param config 请求配置 * @param callBack 请求接口回调函数,在使用alwaysCache和alwaysBackRequest参数为true时,必须使用回调函数接收 */ static async post(url, params, config, callBack) { return this.request("post", url, params, config, callBack); } /** * get请求接口 * @param url 接口地址 完整的地址,例如:http://loalhost:8080/user/login * @param params 参数 * @param config 请求配置 * @param callBack 请求接口回调函数,在使用alwaysCache和alwaysBackRequest参数为true时,必须使用回调函数接收 */ static async get(url, params, config, callBack) { return this.request("get", url, params, config, callBack); } /** * 构建接口请求的缓存key * @param url 请求地址 * @param params 请求参数 */ static buildCacheKey(url, params) { const md5 = require('md5'); if (params instanceof FormData) { let paramObj = {}; params.forEach(function (value, key, parent) { if (value instanceof File) { paramObj[key] = value.name + "//" + value.size + "//" + value.type; } else { paramObj[key] = value; } }); return md5(url + JSON.stringify(paramObj)); } return md5(url + JSON.stringify(params)); } } FastServer.Croshe = Croshe; /** * 创息公司接口返回数据的格式解析类 */ class FastResponseData { responseData; cacheData = false; requestConfig = new FastServer.FastRequestConfig(); constructor(responseData, cacheData) { this.responseData = responseData; if (cacheData == undefined) { cacheData = false; } this.cacheData = cacheData; } /** * 获取接口返回的原始数据 */ getResponseData() { return this.responseData; } /** * 判断当前回调的数据是否是缓存的数据 */ isCacheData() { return this.cacheData; } /** * 判断接口是否请求成功-success */ isSuccess() { return this.responseData.success; } /** * 获取接口请求返回的状态值-code */ getCode() { return this.responseData.code; } /** * 获取接口请求返回的消息提示-message */ getMessage() { return this.responseData.message; } /** * 获取接口请求返回的数据-data */ getData() { return this.responseData.data; } /** * 获取接口请求返回的其他数据,例如:data_1、data_2 * @param suffixIndex 数据后缀,例如:data_1 后缀传 1 */ getOtherData(suffixIndex) { return this.responseData["data_" + suffixIndex]; } /** * 判断接口返回的数据data是否是分页的数据 */ isPageData() { if (!this.responseData.data) { return false; } return this.responseData.data.hasOwnProperty("page"); } /** * 获取接口返回的数据列表,如果data是分页数据则返回分页的列表,否则返回data */ getList() { if (this.isPageData()) { return this.responseData.data.list; } if (this.responseData.data) { return this.responseData.data; } return []; } /** * 获取接口列表分页数据的页数 */ getPage() { if (this.isPageData()) { return this.responseData.data.page; } return -1; } /** * 获取接口列表分页数据的总页数 */ getTotalPage() { if (this.isPageData()) { return this.responseData.data.totalPage; } return -1; } /** * 获取接口列表分页数据的总行数 */ getTotalRow() { if (this.isPageData()) { return this.responseData.data.totalRow; } return -1; } /** * 获取接口列表分页数据的每页大小 */ getPageSize() { if (this.isPageData()) { return this.responseData.data.pageSize; } return -1; } /** * 是否已加载结束,当page>=totalPage 或 list 为空时,认为加载已结束 */ isFinished() { return this.getPage() >= this.getTotalPage() || this.getList().length === 0; } } FastServer.FastResponseData = FastResponseData; /** * 接口请求配置类 */ class FastRequestConfig { /** * 是否追加全局参数,默认true */ finalParams = true; /** * 是否缓存数据,true:检测到有当前接口的缓存数据时,将回调缓存的数据 */ cache = false; /** * 是否总是缓存数据,true:无论是否已有缓存数据,都将请求接口并刷新当前缓存的数据,不支持then方法接收 */ alwaysCache = false; /** * 是否总是回调接口请求返回的数据,true:如果有缓存第一次回调缓存数据,第二次回调接口返回的数据,否则值回调一次接口返回的数据,不支持then方法接收 */ alwaysBackRequest = false; } FastServer.FastRequestConfig = FastRequestConfig; for (let subClass in FastServer) { // @ts-ignore FastServer[subClass](); } })(FastServer = exports.FastServer || (exports.FastServer = {}));