From f26f29d84e0a68831a6af14dab3eec5500496d2e Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期三, 28 五月 2025 16:48:52 +0800 Subject: [PATCH] 初始化项目 --- common/http.interceptor.js | 163 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 163 insertions(+), 0 deletions(-) diff --git a/common/http.interceptor.js b/common/http.interceptor.js new file mode 100644 index 0000000..55358ae --- /dev/null +++ b/common/http.interceptor.js @@ -0,0 +1,163 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + */ + +import errorCode from "./errorCode"; +import config from "./config"; + +// 姝ゅ绗簩涓弬鏁皏m锛屽氨鏄垜浠湪椤甸潰浣跨敤鐨則his锛屼綘鍙互閫氳繃vm鑾峰彇vuex绛夋搷浣� +const install = (Vue, vm) => { + + // 閫氱敤璇锋眰澶磋瀹� + const ajaxHeader = 'x-ajax'; + const sessionIdHeader = 'Authorization'; + const rememberMeHeader = 'x-remember'; + + // 璇锋眰鍙傛暟榛樿閰嶇疆 + Vue.prototype.$u.http.setConfig({ + baseUrl: vm.vuex_config.baseUrl, + originalData: true, + // 榛樿澶撮儴锛宧ttp2绾﹀畾header鍚嶇О缁熶竴灏忓啓 ThinkGem + header: { + 'x-requested-with': 'XMLHttpRequest' + } + }); + + // 璇锋眰鎷︽埅锛岄厤缃甌oken绛夊弬鏁� + Vue.prototype.$u.http.interceptor.request = (req) => { + + if (!req.header) { + req.header = []; + } + + // 榛樿鎸囧畾杩斿洖 JSON 鏁版嵁 + if (!req.header[ajaxHeader]) { + req.header[ajaxHeader] = 'json'; + } + + // 璁惧畾浼犻�� Token 璁よ瘉鍙傛暟 ThinkGem + if (!req.header[sessionIdHeader] && vm.vuex_token) { + req.header[sessionIdHeader] = 'Bearer ' + vm.vuex_token; + } + + // 涓鸿妭鐪佹祦閲忥紝璁颁綇鎴戞暟鎹笉鏄瘡娆¢兘鍙戦�佺殑锛屽綋浼氳瘽澶辨晥鍚庯紝灏濊瘯閲嶈瘯鐧诲綍 ThinkGem + if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember) { + req.header[rememberMeHeader] = vm.vuex_remember; + req.remember = false; + } + + //浼犻�扐PP鐗堟湰鍙� + //req.header['APP-VERSION'] = config.appv; + + // console.log('request', req); + return req; + } + + // 鍝嶅簲鎷︽埅锛屽垽鏂姸鎬佺爜鏄惁閫氳繃 + Vue.prototype.$u.http.interceptor.response = async (res, req) => { + const status = Number(res.statusCode) || 200 + const message = res.data.msg || errorCode[status] || errorCode['default'] + + //鍒ゆ柇鐗堟湰 + if ((status == 200 || res.data.code === 1) && message.split("@")[0]=='APP-VERSION') { + vm.$u.toast(message.split("@")[1]); + return Promise.reject(new Error(message.split("@")[1])) + } + //杩斿洖鐢ㄦ埛鍑瘉宸茶繃鏈熸椂锛屽埛鏂皌oken璺宠浆鑷冲簲鐢ㄩ椤� + if(message=='鐢ㄦ埛鍑瘉宸茶繃鏈�'){ + let currRefreshToken=vm.vuex_refresh_token + let refreshTokenParam={ + grant_type:'refresh_token', + refresh_token:currRefreshToken, + client_id:'pig', + client_secret:'pig' + } + //娓呯┖瀛樺偍淇℃伅 + vm.$u.vuex('vuex_token', '') + vm.$u.vuex('vuex_refresh_token', '') + vm.$u.vuex('vuex_username', '') + vm.$u.vuex('vuex_userId', '') + vm.$u.vuex('vuex_client_id', '') + vm.$u.vuex('vuex_user', {}) + + vm.$u.api.refreshToken(refreshTokenParam).then((resAgain) => { + //瀛樺偍鐩稿叧淇℃伅 + vm.$u.vuex("vuex_token", resAgain.access_token); + vm.$u.vuex("vuex_refresh_token", resAgain.refresh_token); + vm.$u.vuex("vuex_username", resAgain.user_info.username); + vm.$u.vuex("vuex_userId", resAgain.user_info.id); + //vm.$u.vuex("vuex_client_id", resAgain.client_id); + vm.$u.vuex("vuex_user", resAgain.user_info); + + setTimeout(() => { + uni.reLaunch({ + url: '/pages/sys/home/index' + }); + }, 500); + + }).catch(()=>{ + setTimeout(() => { + uni.reLaunch({ + url: '/pages/sys/login/index' + }); + }, 500); + }); + return + } + // 鍚庡彴瀹氫箟 424 閽堝浠ょ墝杩囧幓鐨勭壒娈婂搷搴旂爜 + if (status === 424) { + vm.$u.toast('浠ょ墝杩囨湡锛岃閲嶆柊鐧诲綍'); + vm.$u.api.logout().then(res => { + //娓呯┖瀛樺偍淇℃伅 + vm.$u.vuex('vuex_token', '') + vm.$u.vuex('vuex_refresh_token', '') + vm.$u.vuex('vuex_username', '') + vm.$u.vuex('vuex_userId', '') + vm.$u.vuex('vuex_client_id', '') + vm.$u.vuex('vuex_user', {}) + + setTimeout(() => { + uni.reLaunch({ + url: '/pages/sys/login/index' + }); + }, 500); + + }); + return + } + + if (status !== 200 || res.data.code === 1) { + vm.$u.toast(message,3500); + return Promise.reject(new Error(message)) + } + + 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 +} -- Gitblit v1.9.3