diff --git a/README.md b/README.md index faee47d94b4c7063c05e655f9f2058b22094fe0c..305a57be785474aaaa93147866613d7b3c07560f 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,7 @@ $yarn/cnpm/npm i && yarn/cnpm/npm run serve |clipboard|yarn add / npm i / cnpm i clipboard |文字拷贝| |lodash|yarn add / npm i / cnpm i lodash |实用工具库| |wangeditor|yarn add / npm i / cnpm i wangeditor cos-js-sdk-v5 |富文本编辑| +|axios|yarn add / npm i / cnpm i axios qs|ajax请求| ## 计划 @@ -120,6 +121,50 @@ $yarn/cnpm/npm i && yarn/cnpm/npm run serve }, ``` +### ajax请求示例 + +> ajax请求使用了`axios`,在`src/tools/http.js`定义了axios的请求配置,里面注释掉的代码是平常项目里的一些操作。 + +1. demo: + +```js + + + + + +``` + ## 提交规范 ```bash diff --git a/src/main.js b/src/main.js index d2c40c04d5909f5e72701968bc5f4fecde1c074d..eb416091cafff1012a5a20b93304ea06ee6ccedd 100644 --- a/src/main.js +++ b/src/main.js @@ -9,6 +9,7 @@ import VCharts from 'v-charts'; import { message } from 'ant-design-vue'; import './assets/iconfont.css'; import * as lodash from "lodash"; +import http from './tools/http'; Vue.config.productionTip = false Vue.use(Antd); @@ -18,6 +19,8 @@ Vue.use(VCharts) Vue.prototype.$baseLodash = lodash; //注入全局属性$msg Vue.prototype.$msg = message; +// ajax请求 +Vue.prototype.$http = http; message.config({ duration: 2,// 持续时间 diff --git a/src/tools/http.js b/src/tools/http.js new file mode 100644 index 0000000000000000000000000000000000000000..6ef438c12e4a51fa15464b5bc97df1a4e553c18f --- /dev/null +++ b/src/tools/http.js @@ -0,0 +1,141 @@ +/**axios封装 + * 请求拦截、相应拦截、错误统一处理 + */ +import axios from 'axios'; +import QS from 'qs'; +// import store from '../store/index' + +//默认地址 +axios.defaults.baseURL = 'your api urls'; + +// 请求超时时间 +axios.defaults.timeout = 10000; + +// post请求头 +axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; + +// 请求拦截器 +axios.interceptors.request.use( + config => { + // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了 + // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 + // const tempToken = store.state.tempToken; + // const token = store.state.token; + // const scope = store.state.scope; + // // if (!tempToken) { + // // window.location.href = 'https://b2r-shop.yyk2c.com/ShopJwtAuth/Auth' + // // } + // token && (config.headers.Authorization = token) && (config.headers.scope = scope); + return config; + }, + error => { + return Promise.error(error); + }) + +// 响应拦截器 +axios.interceptors.response.use( + response => { + if (response.status === 200) { + return Promise.resolve(response); + } else { + return Promise.reject(response); + } + }, + // 服务器状态码不是200的情况 + error => { + if (error.response.status) { + // switch (error.response.status) { + // // 401: 未登录 + // // 未登录则跳转登录页面,并携带当前页面的路径 + // // 在登录成功后返回当前页面,这一步需要在登录页操作。 + // case 401: + // router.replace({ + // path: '/login', + // query: { redirect: router.currentRoute.fullPath } + // }); + // break; + // // 403 token过期 + // // 登录过期对用户进行提示 + // // 清除本地token和清空vuex中token对象 + // // 跳转登录页面 + // case 403: + // window.console.log('登录过期,请重新登录'); + // // Toast({ + // // message: '登录过期,请重新登录', + // // duration: 1000, + // // forbidClick: true + // // }); + // // 清除token + // localStorage.removeItem('token'); + // // store.commit('loginSuccess', null); + // // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面 + // setTimeout(() => { + // router.replace({ + // path: '/login', + // query: { + // redirect: router.currentRoute.fullPath + // } + // }); + // }, 1000); + // break; + // // 404请求不存在 + // case 404: + // // Toast({ + // // message: '网络请求不存在', + // // duration: 1500, + // // forbidClick: true + // // }); + // window.console.log('网络请求不存在'); + // break; + // // 其他错误,直接抛出错误提示 + // default: + // // Toast({ + // // message: error.response.data.message, + // // duration: 1500, + // // forbidClick: true + // // }); + // window.console.log(error.response.data.message); + // } + return Promise.reject(error.response); + } + } +); +/** + * get方法,对应get请求 + * @param {String} url [请求的url地址] + * @param {Object} params [请求时携带的参数] + */ +function get(url, params) { + return new Promise((resolve, reject) => { + axios.get(url, { + params: params + }) + .then(res => { + resolve(res.data); + }) + .catch(err => { + reject(err.data) + }) + }); +} +/** + * post方法,对应post请求 + * @param {String} url [请求的url地址] + * @param {Object} params [请求时携带的参数] + */ +function post(url, params) { + return new Promise((resolve, reject) => { + axios.post(url, QS.stringify(params)) + .then(res => { + resolve(res.data); + }) + .catch(err => { + reject(err.data) + }) + }); +} + +export default { + get, + post +} \ No newline at end of file diff --git a/src/workerviews/WorkForm.vue b/src/workerviews/WorkForm.vue index 9f739a15571f4abaec71466ea6d3a817648d92fb..8593afbf48360251b6b45618cef25ae80c5d9c26 100644 --- a/src/workerviews/WorkForm.vue +++ b/src/workerviews/WorkForm.vue @@ -6,14 +6,15 @@ 搜索
- + @@ -24,7 +25,29 @@