Ver a proveniência

增加接口请求loading动画

wulanhaote
liuminjian há 4 anos
ascendente
cometimento
2fe211857f
6 ficheiros alterados com 126 adições e 20 eliminações
  1. +61
    -1
      src/App.vue
  2. +27
    -0
      src/components/workbench/index/header.vue
  3. +7
    -2
      src/router/index.js
  4. +13
    -6
      src/utils/request.js
  5. +3
    -1
      src/views/document/index.vue
  6. +15
    -10
      src/views/workbench/index.vue

+ 61
- 1
src/App.vue Ver ficheiro

@@ -10,6 +10,32 @@
<div class="nsgk-noNav-main" v-else> <div class="nsgk-noNav-main" v-else>
<router-view /> <router-view />
</div> </div>
<!-- <div
class="nsgk-global-main"
v-if="!$route.meta.hidden || $route.meta.hidden == undefined"
>
<transition
:name="
direction == ''
? ''
: 'fade-' + (direction === 'forward' ? 'last' : 'next')
"
>
<router-view />
</transition>
<navFooter></navFooter>
</div>
<div class="nsgk-noNav-main" v-else>
<transition
:name="
direction == ''
? ''
: 'fade-' + (direction === 'forward' ? 'last' : 'next')
"
>
<router-view />
</transition>
</div> -->
</div> </div>
</template> </template>


@@ -18,7 +44,19 @@ import navFooter from "@/components/common/nav_footer";
export default { export default {
name: "App", name: "App",
components: { navFooter }, components: { navFooter },
mounted() {},
data: () => {
return {
direction: "",
};
},
watch: {
// $route(to, from) {
// let toName = to.name;
// const toIndex = to.meta.index;
// const fromIndex = from.meta.index;
// this.direction = toIndex < fromIndex ? "forward" : "backward";
// },
},
}; };
</script> </script>


@@ -28,4 +66,26 @@ export default {
min-height: 100vh; min-height: 100vh;
padding-bottom: 110px; padding-bottom: 110px;
} }
// .fade-last-enter-active {
// animation: bounce-in 0.6s;
// }
// .fade-next-enter-active {
// animation: bounce-out 0.6s;
// }
// @keyframes bounce-in {
// 0% {
// transform: translateX(-100%);
// }
// 100% {
// transform: translateX(0rem);
// }
// }
// @keyframes bounce-out {
// 0% {
// transform: translateX(100%);
// }
// 100% {
// transform: translateX(0rem);
// }
// }
</style> </style>

+ 27
- 0
src/components/workbench/index/header.vue Ver ficheiro

@@ -0,0 +1,27 @@
<template>
<div class="workbench-header">
<div class="company-title">
测试公司<van-icon name="arrow-down" class="control-icon" size="18" />
</div>
</div>
</template>
<script>
export default {};
</script>
<style scoped lang="scss">
.workbench-header {
height: 85px;
line-height: 85px;
background: #fff;
padding: 0 40px;
.company-title {
font-size: 34px;
font-weight: bold;
float: left;
.control-icon {
margin-left: 10px;
vertical-align: -6px;
}
}
}
</style>

+ 7
- 2
src/router/index.js Ver ficheiro

@@ -14,6 +14,7 @@ export const constantRoutes = [
name: 'index', name: 'index',
meta: { meta: {
title: '主页', title: '主页',
index: 1
}, },
component: (resolve) => require(['@/views/index'], resolve) component: (resolve) => require(['@/views/index'], resolve)
}, },
@@ -22,7 +23,7 @@ export const constantRoutes = [
name: 'login', name: 'login',
meta: { meta: {
title: '登录页', title: '登录页',
hidden: true
hidden: true,
}, },
component: (resolve) => require(['@/views/login'], resolve) component: (resolve) => require(['@/views/login'], resolve)
}, },
@@ -31,6 +32,7 @@ export const constantRoutes = [
name: 'document', name: 'document',
meta: { meta: {
title: '文档', title: '文档',
index: 2
}, },
component: (resolve) => require(['@/views/document'], resolve) component: (resolve) => require(['@/views/document'], resolve)
}, },
@@ -39,6 +41,7 @@ export const constantRoutes = [
name: 'workbench', name: 'workbench',
meta: { meta: {
title: '工作台', title: '工作台',
index: 3
}, },
component: (resolve) => require(['@/views/workbench'], resolve) component: (resolve) => require(['@/views/workbench'], resolve)
}, },
@@ -47,6 +50,7 @@ export const constantRoutes = [
name: 'addressBook', name: 'addressBook',
meta: { meta: {
title: '通讯录', title: '通讯录',
index: 4
}, },
component: (resolve) => require(['@/views/addressBook'], resolve) component: (resolve) => require(['@/views/addressBook'], resolve)
}, },
@@ -55,8 +59,9 @@ export const constantRoutes = [
name: 'mynsgk', name: 'mynsgk',
meta: { meta: {
title: '我的', title: '我的',
index: 5
}, },
component: (resolve) => require(['@/views/addressBook'], resolve)
component: (resolve) => require(['@/views/mynsgk'], resolve)
} }
]; ];




+ 13
- 6
src/utils/request.js Ver ficheiro

@@ -1,6 +1,6 @@
import axios from 'axios' import axios from 'axios'
// import { Notification, MessageBox, Message } from 'element-ui' // import { Notification, MessageBox, Message } from 'element-ui'
import { Notify,Dialog } from 'vant';
import { Notify, Dialog, Toast } from 'vant';
import store from '@/store' import store from '@/store'
import { getToken } from '@/utils/auth' import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode' import errorCode from '@/utils/errorCode'
@@ -15,6 +15,11 @@ const service = axios.create({
}) })
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
Toast.loading({
message: '加载中...',
forbidClick: true,
duration: 0
});
// 是否需要设置 token // 是否需要设置 token
const isToken = (config.headers || {}).isToken === false const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) { if (getToken() && !isToken) {
@@ -26,7 +31,7 @@ service.interceptors.request.use(config => {
for (const propName of Object.keys(config.params)) { for (const propName of Object.keys(config.params)) {
const value = config.params[propName]; const value = config.params[propName];
var part = encodeURIComponent(propName) + "="; var part = encodeURIComponent(propName) + "=";
if (value !== null && typeof(value) !== "undefined") {
if (value !== null && typeof (value) !== "undefined") {
if (typeof value === 'object') { if (typeof value === 'object') {
for (const key of Object.keys(value)) { for (const key of Object.keys(value)) {
let params = propName + '[' + key + ']'; let params = propName + '[' + key + ']';
@@ -50,6 +55,7 @@ service.interceptors.request.use(config => {


// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(res => {
Toast.clear();
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
@@ -59,13 +65,13 @@ service.interceptors.response.use(res => {
Dialog.confirm({ Dialog.confirm({
title: '系统提示', title: '系统提示',
message: '登录状态已过期,您可以继续留在该页面,或者重新登录', message: '登录状态已过期,您可以继续留在该页面,或者重新登录',
confirmButtonText:'重新登录',
cancelButtonText:'取消'
confirmButtonText: '重新登录',
cancelButtonText: '取消'
}) })
.then(() => { .then(() => {
store.dispatch('LogOut').then(() => { store.dispatch('LogOut').then(() => {
location.href = '/index';
})
location.href = '/index';
})
}) })
} else if (code === 500) { } else if (code === 500) {
Notify({ type: 'warning', message: msg }); Notify({ type: 'warning', message: msg });
@@ -89,6 +95,7 @@ service.interceptors.response.use(res => {
else if (message.includes("Request failed with status code")) { else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常"; message = "系统接口" + message.substr(message.length - 3) + "异常";
} }
Toast.clear();
// Message({ // Message({
// message: message, // message: message,
// type: 'error', // type: 'error',


+ 3
- 1
src/views/document/index.vue Ver ficheiro

@@ -1,5 +1,7 @@
<template> <template>
<div class="app-container">文档</div>
<div class="app-container">
文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档文档
</div>
</template> </template>


<script> <script>


+ 15
- 10
src/views/workbench/index.vue Ver ficheiro

@@ -1,18 +1,23 @@
<template> <template>
<div class="app-container">工作台</div>
<div class="app-container">
<workbenchHeader></workbenchHeader>
</div>
</template> </template>


<script> <script>
export default {
name: "workbench",
data() {
return {};
},
mounted() { },
methods: {},
};
import workbenchHeader from "@/components/workbench/index/header";
export default {
name: "workbench",
components: { workbenchHeader },
data() {
return {};
},
mounted() {},
methods: {},
};
</script> </script>


<style scoped lang="scss"> <style scoped lang="scss">
.app-container {}
.app-container {
}
</style> </style>

Carregando…
Cancelar
Guardar