Browse Source

提交 拦截器

wangguoyu 1 year ago
parent
commit
27d74bdab9
12 changed files with 385 additions and 106 deletions
  1. 4 0
      .gitignore
  2. 3 3
      App.vue
  3. 13 39
      api/login.js
  4. 2 1
      config.js
  5. 11 32
      main.js
  6. 21 0
      package.json
  7. 41 3
      pages/index/index.vue
  8. 2 0
      plugins/index.js
  9. 4 4
      utils/auth.js
  10. 178 0
      utils/request copy 1.js
  11. 73 0
      utils/request copy.js
  12. 33 24
      utils/request.js

+ 4 - 0
.gitignore

@@ -0,0 +1,4 @@
+.DS_Store
+node_modules
+.idea
+

+ 3 - 3
App.vue

@@ -2,13 +2,13 @@
 	export default {
 		// creat by wgy 0619  生命周期 钩子  
 		onLaunch: function() {
-			console.log('App Launch')
+		//	console.log('App Launch')
 		},
 		onShow: function() {
-			console.log('App Show')
+		//	console.log('App Show')
 		},
 		onHide: function() {
-			console.log('App Hide')
+			//console.log('App Hide')
 		}
 	}
 </script>

+ 13 - 39
api/login.js

@@ -1,60 +1,34 @@
 import request from '@/utils/request'
-
-// 登录方法
-export function login(username, password, code, uuid) {
-  const data = {
-    username,
-    password,
-    code,
-    uuid
-  }
+export function getAppConfig() {
   return request({
-    'url': '/login',
+    'url': '/common/app/config',
     headers: {
       isToken: false
     },
-    'method': 'post',
-    'data': data
+    method: 'post',
+    timeout: 20000
   })
 }
 
-// 注册方法
-export function register(data) {
+export function login(data = {}) {
   return request({
-    url: '/register',
+    'url': '/common/app/login',
     headers: {
       isToken: false
     },
     method: 'post',
-    data: data
-  })
-}
-
-// 获取用户详细信息
-export function getInfo() {
-  return request({
-    'url': '/getInfo',
-    'method': 'get'
-  })
-}
-
-// 退出方法
-export function logout() {
-  return request({
-    'url': '/logout',
-    'method': 'post'
+    data,
+    timeout: 20000
   })
 }
-
-import request from '@/utils/request'
-// 获取验证码
-export function getCeshi() {
+export function kaoshiList(data = {}) {
   return request({
-    'url': '/captchaImage',
+    'url': '/app/kaoshi/list',
     headers: {
       isToken: false
     },
-    method: 'get',
+    method: 'post',
+    data,
     timeout: 20000
   })
-}
+}

+ 2 - 1
config.js

@@ -1,5 +1,5 @@
 // 应用全局配置
-module.exports = {
+const configObject = {
   baseUrl: 'https://kf179.mtavip.com/api',
   // baseUrl: 'http://localhost:8080',
   // 应用信息
@@ -24,3 +24,4 @@ module.exports = {
     ]
   }
 }
+export default configObject

+ 11 - 32
main.js

@@ -1,32 +1,11 @@
-import App from './App'
-
-// #ifndef VUE3
-import Vue from 'vue'
-import './uni.promisify.adaptor'
-
-//import store from './store' // store
-import plugins from './plugins' // plugins
-import './permission' // permission
-
-Vue.config.productionTip = false
-App.mpType = 'app'
-const app = new Vue({
-  ...App
-})
-app.$mount()
-// #endif
-
-// #ifdef VUE3
-import { createSSRApp } from 'vue'
-export function createApp() {
-  const app = createSSRApp(App)
-  return {
-    app
-  }
-}
-// #endif
-
-
-
-
-
+import { createApp } from 'vue'
+import App from './App.vue'
+//import plugins from './plugins' // plugins
+//import './permission' // permission
+import { createPinia } from 'pinia'
+// 创建Vue应用实例
+const app = createApp(App)
+//app.use(plugins)
+app.use(createPinia())
+// 挂载Vue应用实例
+app.mount('#app') 

+ 21 - 0
package.json

@@ -0,0 +1,21 @@
+{
+  "name": "hbproject",
+  "version": "1.0.0",
+  "description": "",
+  "main": "main.js",
+  "dependencies": {
+    "axios": "^1.7.2",
+    "pinia": "^2.1.7",
+    "ts-md5": "^1.3.1"
+  },
+  "devDependencies": {},
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://gogs.mtavip.com/wangguoyu/uniProject.git"
+  },
+  "author": "",
+  "license": "ISC"
+}

+ 41 - 3
pages/index/index.vue

@@ -3,14 +3,52 @@
 		<image class="logo" src="/static/logo.png"></image>
 		<view class="text-area">
 			<text class="title">{{title}}6666</text>
-			<uni-icons type="contact" size="30"></uni-icons>
+
+			<input @click="denglu" placeholder="自动获得焦点" />
 		</view>
 	</view>
 </template>
 
 <script setup>
-	import { ref } from 'vue';
+	import {
+		getAppConfig,
+		login,
+		kaoshiList
+	} from '@/api/login.js'
+	import {
+		ref
+	} from 'vue';
 	let title = ref('Hello')
+	//console.log(this)
+	// getAppConfig();
+
+
+
+	const denglu = () => {
+		let req = {
+			password: 'sVXqow3/+jG5kIDVGqoezXoK/Pceal1cf/kiojvUdvSU0qTjm5ikUz9CHcsu05I9whRxeep/TDVAcNl2dEqAgSUr5Ufq1FDdHr5Pn/HA5LfoZV+n5j82RE93cwcrCJw6/MwW3ZWgISzvG5qN8t9IzkRX2qMB/7SJxnh3NzoaxX4=',
+			userName: 'root'
+		}
+		login(req).then(res => {
+			let obj  = JSON.stringify(res.data)
+			console.log(obj)
+			uni.setStorage({
+				key: 'Mta-Auth',
+				data: obj // 假设 this.userInputValue 是用户输入的数据
+			});
+
+			setTimeout(() => {
+				let req = {
+					'page': 1,
+					'size': 4,
+					'status': 1,
+				}
+				kaoshiList(req).then(res=>{
+					console.log(res)
+				})
+			}, 5000)
+		})
+	}
 </script>
 
 <style>
@@ -39,4 +77,4 @@
 		font-size: 36rpx;
 		color: #8f8f94;
 	}
-</style>
+</style>

+ 2 - 0
plugins/index.js

@@ -2,8 +2,10 @@ import tab from './tab'
 import auth from './auth'
 import modal from './modal'
 
+
 export default {
   install(Vue) {
+	  console.log(Vue)
     // 页签操作
     Vue.prototype.$tab = tab
     // 认证对象

+ 4 - 4
utils/auth.js

@@ -1,13 +1,13 @@
-const TokenKey = 'Mta-Token'
+const TokenKey = 'Mta-Auth'
 
-export function getToken() {
+export function getAuth() {
   return uni.getStorageSync(TokenKey)
 }
 
-export function setToken(token) {
+export function setAuth(token) {
   return uni.setStorageSync(TokenKey, token)
 }
 
-export function removeToken() {
+export function removeAuth() {
   return uni.removeStorageSync(TokenKey)
 }

+ 178 - 0
utils/request copy 1.js

@@ -0,0 +1,178 @@
+import axios     from 'axios';
+import { Md5 }   from 'ts-md5/dist/md5';
+import config from '@/config'
+let noTimeoutLimitArr = [
+
+];
+
+// create an axios instance
+const service = axios.create({
+                                 baseURL:         config.baseUrl, // url = base url + request url
+                                 withCredentials: false, // send cookies when cross-domain requests
+                                 timeout:         20000, // request timeout
+                             });
+
+export let needLoadingRequestCount = 0;
+export function showFullScreenLoading(config) {
+    if (needLoadingRequestCount === 0) {
+        store.state.isLoading = true
+    }
+    needLoadingRequestCount++;
+}
+
+export function tryHideFullScreenLoading() {
+    if (needLoadingRequestCount <= 0) {
+        return;
+    }
+
+    needLoadingRequestCount--;
+    if (needLoadingRequestCount === 0) {
+        store.state.isLoading = false
+    }
+}
+// request interceptor
+service.interceptors.request.use(
+    config => {
+        // do something before request is sent
+        // console.log(config);
+
+        function setTimeoutunlimit(config) {
+            // if (_.indexOf(noTimeoutLimitArr, config.url) > -1) {
+            //     config.timeout = 9999999999;
+            // }
+        }
+
+        function mixSignAndToken(config) {
+		//	debugger
+            // console.log(config.data, process.env.VUE_APP_BASE_API, process.env.VUE_APP_SECRET_KEY);
+            const checkurl = function (url) {
+                if (url === '/common/active') {
+                    return false;
+                }
+                // 用户端白名单
+                if (url.indexOf('/common') > -1) {
+                    return true;
+                }
+                // 管理端白名单
+                if (url === '/admin/user/auth') {
+                    return true;
+                }
+                // 短信服务白名单
+                if (url === 'sms/sendCode') {
+                    return true;
+                }
+                return false;
+            };
+			
+            if (checkurl(config.url)) {
+                if(config.url.indexOf('/open' >-1)){
+                }else {
+                    config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) + '123');
+                }
+            } else {
+                if (store.state.auth) {
+                    config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) + store.state.auth.secret);
+                    config.headers['X-AUTH-TOKEN'] = store.state.auth.token;
+                } else {
+                    // 非登录操作,但没有auth,跳转登录
+                    router.push('/' + store.state.tenantCode + '/login');
+                }
+            }
+
+        }
+        // if (!JSON.stringify(config.data.customLoadingSwitch)) {
+        //     //  如不需要在data中 LoadingSwitch:false
+        //     console.log('有loading');
+        //     showFullScreenLoading(config);
+        // }
+        mixSignAndToken(config);
+        setTimeoutunlimit(config);
+
+        /*if (store.getters.token) {
+            // let each request carry token
+            // ['X-Token'] is a custom headers key
+            // please modify it according to the actual situation
+            config.headers['X-Token'] = getToken();
+        }*/
+        return config;
+    },
+    error => {
+        // do something with request error
+        // console.log(error); // for debug
+        return Promise.reject(error);
+    },
+);
+
+
+
+// response interceptor
+service.interceptors.response.use(
+    /**
+     * If you want to get http information such as headers or status
+     * Please return  response => response
+     */
+
+    /**
+     * Determine the request status by custom code
+     * Here is just an example
+     * You can also judge the status by HTTP Status Code
+     */
+    response => {
+        const res = response.data;
+
+        // if the custom code is not 20000, it is judged as an error.
+        if (res.code !== 0) {
+    
+            // 401:登录超时
+            if (res.code === 401) {
+                setTimeout(function () {
+                    if (window.loading) {
+                        window.loading.close();
+                    }
+                    // console.log(router);
+                    /*if (router.app.$route.path.indexOf('/c/') === 0) {
+                        router.push('/c/' + store.state.tenantCode + '/login');
+                    } else {
+                        router.push('/a/' + store.state.tenantCode + '/login');
+                    }*/
+                    store.state.showBottomNav = true;
+                    router.push('/login');
+                }, 2000);
+            }
+            if (res.code === 405) {
+                setTimeout(function () {
+                    if (window.loading) {
+                        window.loading.close();
+                    }
+                    store.state.showBottomNav = true;
+                    router.push('/login');
+                }, 2000);
+            }
+
+            if (res.code === 502) {
+            //    Toast.fail('bad gateway');
+            }
+            if (res.code === 500 || res.code === 1001|| res.code ===1002) {
+                tryHideFullScreenLoading();
+                return Promise.reject('error' + res.code + '-' + (res.message === undefined ? 'nomessage': res.message));
+            }
+            tryHideFullScreenLoading();
+            return Promise.reject(res.message || 'error');
+        } else {
+            tryHideFullScreenLoading();
+            return res;
+        }
+    },
+    error => {
+
+        if (error == 'Error: Network Error') {
+        //    Toast.fail('网络断开,请检查网络');
+        } else {
+         //   Toast.fail('其他错误,请联系管理员');
+        }
+        tryHideFullScreenLoading();
+        return Promise.reject(error);
+    },
+);
+
+export default service;

+ 73 - 0
utils/request copy.js

@@ -0,0 +1,73 @@
+import store from '@/store'
+import config from '@/config'
+import { getToken } from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { toast, showConfirm, tansParams } from '@/utils/common'
+
+let timeout = 10000
+const baseUrl = config.baseUrl
+
+const request = config => {
+  // 是否需要设置 token
+  const isToken = (config.headers || {}).isToken === false
+  config.header = config.header || {}
+  if (getToken() && !isToken) {
+    config.header['Authorization'] = 'Bearer ' + getToken()
+  }
+  // get请求映射params参数
+  if (config.params) {
+    let url = config.url + '?' + tansParams(config.params)
+    url = url.slice(0, -1)
+    config.url = url
+  }
+  return new Promise((resolve, reject) => {
+    uni.request({
+        method: config.method || 'get',
+        timeout: config.timeout ||  timeout,
+        url: config.baseUrl || baseUrl + config.url,
+        data: config.data,
+        header: config.header,
+        dataType: 'json'
+      }).then(response => {
+        let [error, res] = response
+        if (error) {
+          toast('后端接口连接异常')
+          reject('后端接口连接异常')
+          return
+        }
+        const code = res.data.code || 200
+        const msg = errorCode[code] || res.data.msg || errorCode['default']
+        if (code === 401) {
+          showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
+            if (res.confirm) {
+              store.dispatch('LogOut').then(res => {
+                uni.reLaunch({ url: '/pages/login' })
+              })
+            }
+          })
+          reject('无效的会话,或者会话已过期,请重新登录。')
+        } else if (code === 500) {
+          toast(msg)
+          reject('500')
+        } else if (code !== 200) {
+          toast(msg)
+          reject(code)
+        }
+        resolve(res.data)
+      })
+      .catch(error => {
+        let { message } = error
+        if (message === 'Network Error') {
+          message = '后端接口连接异常'
+        } else if (message.includes('timeout')) {
+          message = '系统接口请求超时'
+        } else if (message.includes('Request failed with status code')) {
+          message = '系统接口' + message.substr(message.length - 3) + '异常'
+        }
+        toast(message)
+        reject(error)
+      })
+  })
+}
+
+export default request

+ 33 - 24
utils/request.js

@@ -1,58 +1,67 @@
+//import store from '@/store'
 import config from '@/config'
-import { getToken } from '@/utils/auth'
+import { getAuth } from '@/utils/auth'
+import { Md5 }   from 'ts-md5/dist/md5';
 import errorCode from '@/utils/errorCode'
 import { toast, showConfirm, tansParams } from '@/utils/common'
 
 let timeout = 10000
 const baseUrl = config.baseUrl
-
 const request = config => {
+
   // 是否需要设置 token
-  const isToken = (config.headers || {}).isToken === false
+ // const isToken = (config.headers || {}).isToken === false
   config.header = config.header || {}
-  if (getToken() && !isToken) {
-    config.header['Authorization'] = 'Bearer ' + getToken()
-  }
-  if (config.params) {
-    let url = config.url + '?' + tansParams(config.params)
-    url = url.slice(0, -1)
-    config.url = url
+  
+  
+ //  if (getToken() && !isToken) {
+	// config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) +auth.secret);
+	// config.headers['X-AUTH-TOKEN'] = auth.token;
+ //  }
+  if (getAuth()) {
+	config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) +JSON.parse(getAuth()).secret);
+	config.headers['X-AUTH-TOKEN'] = JSON.parse(getAuth()).token;
   }
   return new Promise((resolve, reject) => {
+	//  debugger
     uni.request({
         method: config.method || 'get',
         timeout: config.timeout ||  timeout,
         url: config.baseUrl || baseUrl + config.url,
         data: config.data,
-        header: config.header,
+        header: config.headers,
         dataType: 'json'
       }).then(response => {
-        let [error, res] = response
-        if (error) {
-          toast('后端接口连接异常')
-          reject('后端接口连接异常')
-          return
-        }
-        const code = res.data.code || 200
-        const msg = errorCode[code] || res.data.msg || errorCode['default']
+         const res = response.data;
+        // if (error) {
+        //   toast('后端接口连接异常')
+        //   reject('后端接口连接异常')
+        //   return
+        // }
+        const code = res.code 
+       // const msg = errorCode[code] || res.data.msg || errorCode['default']
         if (code === 401) {
           showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => {
-            // uni.reLaunch({ url: '/pages/login' })
+            // if (res.confirm) {
+            //   store.dispatch('LogOut').then(res => {
+            //     uni.reLaunch({ url: '/pages/login' })
+            //   })
+            // }
           })
           reject('无效的会话,或者会话已过期,请重新登录。')
         } else if (code === 500) {
           toast(msg)
           reject('500')
-        } else if (code !== 200) {
-          toast(msg)
+        } else if (code !== 0) {
+       //   toast(msg)
           reject(code)
         }
-        resolve(res.data)
+        resolve(res)
       })
       .catch(error => {
         let { message } = error
         if (message === 'Network Error') {
-          message = '网络错误'
+          message = '后端接口连接异常'
         } else if (message.includes('timeout')) {
           message = '系统接口请求超时'
         } else if (message.includes('Request failed with status code')) {