UNPKG

@ozo/react-rock

Version:

React 移动端开发脚手架,基于CRA3,通用、开箱即用。

105 lines (96 loc) 4.11 kB
import APIAgent from '@/api/Agent'; // 请求底层处理 import { persistParam } from '@/utils/persistData.js'; // 数据持久化 const Agent = new APIAgent(); /* eslint-disable no-use-before-define */ /** * @description Store公共基类,集成了发送请求,持久化字段等功能 * 用handleShowLoading handleRequestError配合UIStore,实现展示loading和错误提示, * 用commonRequestData 配合UserStore,实现请求中挂全局参数,比如token * @export * @class Store */ export default class Store { /** * @description 数据持久化(localStorage或sessionStorage) * @param {string|array} keyNames 键值项名称 * @param {boolean} inSessionStorage 是否添加到sessionStorage,默认为false,添加到localStorage * @param {boolean} global 是否用于全局,默认为false,keyName前会增加前缀(所属store的名称),true则不添加前缀 */ persistParam(keyNames, inSessionStorage = false, global = false) { persistParam(this, keyNames, inSessionStorage, global); } /** * @description 发送POST请求 * @param {string} url 请求地址 * @param {object} _params 参数 * @param {object} opts 其他操作参数 如 { * noCommonData:false //不挂载公共参数,比如token * loading:false //不展示loading图标 * toast:false //不展示接口错误信息 * } * @returns Promise */ sendPost(url = '', _params = {}, opts = { noCommonData: false, loading: false, toast: false }) { //是否开启loading图标 opts.loading && Store.handleShowLoading && Store.handleShowLoading(true); //是否挂上公共参数 !opts.noCommonData && Object.assign(_params, Store.commonRequestData); return Agent.post(url, _params).then((json) => _handleData(json, url, _params, opts)); } /** * @description 发送GET请求 * @param {string} url 请求地址 * @param {object} _params 参数 * @param {object} opts 其他操作参数 如 { * noCommonData:false //不挂在公共参数 * loading:false //不展示loading图标 * toast:false //不展示接口错误信息 * } * @returns Promise */ sendGet(url = '', _params = {}, opts = { noCommonData: false, loading: false, toast: false }) { //是否开启loading图标 opts.loading && Store.handleShowLoading && Store.handleShowLoading(true); //是否挂上公共参数 !opts.noCommonData && Object.assign(_params, Store.commonRequestData); return Agent.get(url, _params).then((json) => _handleData.call(this, json, url, _params, opts)); } } /** * @description 处理获取的结果 * 1.实现token自动刷新功能 * 2.实现自动根据api/ResponseCode中的错误信息显示 * @param {*} json 获取到的结果 * @param {*} url url * @param {*} params 参数 * @param {*} opts 操作 * @returns 获取的数据 */ function _handleData(json, url, params, opts) { // 只有明确接口调用开启loading才关闭,避免引起本次接口关闭掉其它接口的loading opts.loading && Store.handleShowLoading && Store.handleShowLoading(false); // 特殊格式(示例代码) if (json && json.results !== null) { return json; } if (!json || typeof json.result === 'undefined' || json.result === null) { !opts.toast && json && Store.handleRequestError && Store.handleRequestError(json.result); console.log(`数据格式不正确!`); return {}; } switch (json.result) { //获取数据成功 case '0': return json; //token过期 case '-1': { return this.refreshToken(url, params); } //自动显示错误信息 default: { console.log(`Requst is get Error,Code :${json.result}`); !opts.toast && Store.handleRequestError && Store.handleRequestError(json.result); return json; } } }