// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作 const install = (Vue, vm) => { // 通用请求头设定 const ajaxHeader = "x-ajax"; const sessionIdHeader = "Authorization"; const rememberMeHeader = "x-remember"; const lang = 'lang'; // 请求参数默认配置 Vue.prototype.$u.http.setConfig({ baseUrl: vm.vuex_config.baseUrl, originalData: true, // 默认头部,http2约定header名称统一小写 header: { "content-type": "application/json", "x-requested-with": "XMLHttpRequest", }, }); // 请求拦截,配置Token等参数 Vue.prototype.$u.http.interceptor.request = (req) => { if (!req.header) { req.header = []; } req.header["source"] = "app"; // 默认指定返回 JSON 数据 if (!req.header[ajaxHeader]) { req.header[ajaxHeader] = "json"; } // 设定传递 Token 认证参数 if (!req.header[sessionIdHeader] && vm.vuex_token) { req.header[sessionIdHeader] = vm.vuex_token; req.header[lang] = vm.vuex_language; } // 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录 if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember) { req.header[rememberMeHeader] = vm.vuex_remember; req.remember = false; } return req; }; // 响应拦截,判断状态码是否通过 Vue.prototype.$u.http.interceptor.response = async (res, req) => { let data = res.data; if (!data) { // vm.$u.toast("未连接到服务器"); return false; } if (res.data.code !== 200) { if (res.data.code === 401002 || res.data.code === 401001 || res.data.code === 50014) { uni.showToast({ title: data.msg ? data.msg : '请重新登陆!', duration: 3000, icon:'none' }) setTimeout(() => { uni.reLaunch({ url: "/pages/login/index" }); }, 3000) }else{ uni.showToast({ title: data.msg ? data.msg : '接口报错,请联系管理员!', duration:3000, icon:'none' }) } } else { return res.data } }; // 封装 get text 请求 vm.$u.getText = (url, data = {}, header = {}) => { return vm.$u.http.request({ dataType: "text", method: "GET", url, header, data, }); }; // 封装 post json 请求 vm.$u.postJson = (url, data = {}, header = {}) => { header["content-type"] = "application/json"; return vm.$u.http.request({ url, method: "POST", header, data, }); }; }; export default { install, };