From bf7244a861a8b4293017b6b6d668b5549faf0f02 Mon Sep 17 00:00:00 2001 From: Aaron <427787340@qq.com> Date: Fri, 26 Jul 2019 18:51:47 +0800 Subject: [PATCH] 完善Scheme组件请求 --- examples/main.js | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- examples/router/routes.js | 26 +++++++++++--------------- examples/views/docs/scheme.md | 7 +++++-- examples/views/docs/table.md | 7 ++----- examples/views/page/test.vue | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ packages/detail/index.vue | 7 +++++++ packages/form/index.vue | 27 ++++++++++++--------------- packages/scheme/index.vue | 294 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------ packages/scheme/utils.js | 41 +++++++++++++++++++++++++++++++++++++++++ packages/table/index.vue | 8 ++------ 10 files changed, 486 insertions(+), 98 deletions(-) create mode 100644 examples/views/page/test.vue create mode 100644 packages/scheme/utils.js diff --git a/examples/main.js b/examples/main.js index 38737cb..0e1664e 100644 --- a/examples/main.js +++ b/examples/main.js @@ -13,7 +13,89 @@ import '@/styles/theme/index.css'; import '@/styles/nprogress.scss'; import "highlight.js/styles/color-brewer.css"; -Vue.prototype.$axios = axios; +import { Notification } from 'element-ui'; + +const request = axios.create({ + baseURL: 'http://47.110.137.80:7101/', + timeout: 1000, + headers: { + 'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NTE4ODM0MTEsInN1YiI6ImFkbWluIiwiY3JlYXRlZCI6MTU1MTg4MzQxMTk2NX0.rocgsQq_EEbBDV-BcHpJCUS92KGjBH-0Pf47IrW9v3aj6xJCoFIrnKX4vtpPfYscTk1roBhR5s3I1DIvT8B9wg' + } +}); + +const codeMessage = { + 200: '服务器成功返回请求的数据', + 201: '新建或修改数据成功。', + 202: '一个请求已经进入后台排队(异步任务)', + 204: '删除数据成功。', + 400: '发出的请求有错误,服务器没有进行新建或修改数据,的操作。', + 401: '用户没有权限(令牌、用户名、密码错误)。', + 403: '用户得到授权,但是访问是被禁止的。', + 404: '发出的请求针对的是不存在的记录,服务器没有进行操作', + 406: '请求的格式不可得。', + 410: '请求的资源被永久删除,且不会再得到的。', + 422: '当创建一个对象时,发生一个验证错误。', + 500: '服务器发生错误,请检查服务器', + 502: '网关错误', + 503: '服务不可用,服务器暂时过载或维护', + 504: '网关超时' +}; + +const checkStatus = (response) => { + if (response.status >= 200 && response.status < 300) { + return response; + } + const errortext = codeMessage[response.status] || response.statusText; + const messageContent = ` + ${response.request.responseURL} + ${errortext} + `; + Notification.error({ + title: `请求错误 ${response.status}:`, + message: messageContent, + duration: 3000, + }); + const error = new Error(errortext); + error.name = response.status; + error.response = response; + return error; +} + +// respone 拦截器 +request.interceptors.response.use( + response => { + const { data = {} } = response; + const { businessException, errorCode, message, success } = data; + if (success) { + return data; + } else if (businessException) { + if (errorCode) { + Notification.error({ + title: '提示', + message, + duration: 3000, + }); + } + return { success: false }; + } else { + if (errorCode) { + Notification.error({ + title: '提示', + message: codeMessage[errorCode], + duration: 3000, + }); + } + return { success: false }; + } + }, + error => { + const e = checkStatus(error.response); + return { success: false }; + }); + +Vue.prototype.$axios = request; + + // 进度条配置 NProgress.configure({ showSpinner: false }); diff --git a/examples/router/routes.js b/examples/router/routes.js index 8a28080..ac83ef2 100644 --- a/examples/router/routes.js +++ b/examples/router/routes.js @@ -54,24 +54,20 @@ const _components = [ component: () => import('@/views/docs/scheme.md'), }, ] + }, + { + group: '测试', + children: [ + { + path: 'test', + name: 'test', + meta: { title: 'Scheme 测试' }, + component: () => import('@/views/page/test'), + }, + ] } ] -// const _components = [ -// { -// path: 'select', -// name: 'select', -// meta: { title: 'Select 选择器', group }, -// component: () => import('@/views/docs/select.md'), -// }, -// { -// path: 'form', -// name: 'form', -// meta: { title: 'Form 表单' }, -// component: () => import('@/views/docs/form.md'), -// }, -// ] - let _components_children = []; _components.forEach(data => { _components_children = [..._components_children, ...data.children] diff --git a/examples/views/docs/scheme.md b/examples/views/docs/scheme.md index 4b0518a..8733f42 100644 --- a/examples/views/docs/scheme.md +++ b/examples/views/docs/scheme.md @@ -11,6 +11,9 @@ Scheme是一个数据驱动的解决方案,通过既定的业务配置参数 ```html