Source: common/settings.js

/**
 * @desc 配置信息,可以通过 `adm.setSettings` 方法修改
 * @alias settings
 * @type {Object}
 */
export default {
    cachePrefix: '__DM__', // 缓存数据时使用的前缀,用于区别普通数据
    isJquery: true, // 是否使用 jQuery 的 $.Deferred。为 false 则使用 Promise
    errAlert: true, // ajax 出错时是否全局提示,fnAjaxFail 中使用。全局性开关
    errMsg: '',     // 系统错误(40x/50x)时的提示信息,为空则使用 err.responseText
    alert: (msg) => { // 全局性提示方法注册,可根据项目的 alert 组件进行注册
        console.trace(msg);
        // window.alert(msg);
    },
    /**
     * ajax 开始/结束时回调方法
     * 例如单击按钮后,在开始时禁用按钮,结束时恢复它;
     * 再例如,在 ajax 开始时启用页面动画,结束时关闭页面动画。
     * @param  {Object}  config.waiting - 参数内容可根据 `fnWaiting` 具体的处理来设置
     * @param  {Number} time - 存在值时在 ajax 结束调用,值为 ajax 消耗的时间;省略时在 ajax 开始前被调用
     * @return {void}
     */
    fnWaiting(config, time) {
        // const waiting = config.waiting;
        // if ('development' === process.env.NODE_ENV && time) {
        //     console.trace('ajax 请求消耗时间:', time);
        // }
        // if (!waiting) {
        //     return;
        // }
        // more...
    },
    /**
     * ajax 请求开始前回调方法
     * @param  {Object} config - ajax 请求配置,由于是引用传参,可在这里通过修改它实现 mock 数据等功能
     * @return {void}
     */
    fnBeforeAjax(config) {},
    /**
     * 通用 ajax 请求返回时回调方法
     * 对于基于接口的约定,如这里的示例:以 `code` 为 `200` 认为是成功的数据,否则为出错
     * @param {Object} result - ajax 返回的数据结果
     * @param {Function} callback - 成功回调方法
     * @param {Function} errCallback - 出错回调方法
     * @param {Object} config - ajax 请求参数配置,即 `adm.get/save` 的第一个参数
     * @returns {Boolean|Object|Promise} 表示成功或失败,或成功后返回的数据(如对 result 处理后返回),或 Promise 风格回调
     */
    fnAjaxDone(result, callback, errCallback, config) {
        let success = false;

        if (result && result.code === 200) {
            if (callback) {
                callback(result);
            }

            // code 200 认为成功,否则认为失败
            success = true;
        } else {
            if (errCallback) {
                errCallback(result);
            }

            // 全局性系统提示,设置为 false,则不提示,适合由用户自定义错误处理的情况
            if (config.tipConfig !== false) {
                result.message = result.message || '系统错误';
                this.alert(result.message);
            }
        }

        return success;
    },
    /**
     * ajax 失败回调方法,一般为 30x、40x、50x 或返回格式不对、网络中断等
     * @param  {Object} err
     * @param  {Object} config
     * @return {void}
     */
    fnAjaxFail(err, config) {
        let msg = err.responseText || err.statusText || '';

        if (msg.length > 300) {
            msg = msg.slice(0, 300) + '...';
        }

        if (0 === err.status) {
            this.alert('登录超时');
            // window.location.reload();
        } else if (config.errAlert || (void 0) === config.errAlert && this.errAlert) {
            // errAlert = false 时禁止 40x/50x 等错误的全局提示
            this.alert(config.errMsg || this.errMsg || ('数据请求失败: ' + msg));
        }
    }
};