Skip to content

Commit 5f4b2e4

Browse files
author
fanxiaocheng
committed
添加g
1 parent 1452316 commit 5f4b2e4

File tree

21 files changed

+680
-156
lines changed

21 files changed

+680
-156
lines changed

meta.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ module.exports = {
2222
"message": "Author"
2323
}
2424
},
25-
"skipInterpolation": "src/**/*.vue",
25+
"skipInterpolation": [
26+
"src/**/*.vue",
27+
"doc/*"
28+
],
2629
}

template/package.json

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
"lint": "eslint --ext .js,.vue src"
1212
},
1313
"dependencies": {
14+
"@antv/data-set": "^0.8.9",
15+
"@antv/g2": "^3.1.1",
1416
"axios": "^0.16.2",
1517
"cd-vue": "^0.1.1",
1618
"element-ui": "^2.3.7",

template/src/api/index.js

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
import axios from 'axios';
22
import { parseUrl, addPrefix } from './utils';
3-
// import jsonRpc from './jsonrpc/index';
43

54
// API配置
65
import config from '@/api/config';
76

87
// 模拟数据
9-
// import '@/api/mock';
8+
import '@/api/mock';
109

1110
// 拦截器
12-
import '@/api/interceptors';
11+
import interceptorsList from '@/api/interceptors';
12+
13+
const restAxios = axios.create();
14+
15+
Object.keys(interceptorsList).map((key) => {
16+
const list = interceptorsList[key];
17+
list.map((item) => {
18+
console.log(item, key, 'restAxios');
19+
restAxios.interceptors[key].use(item.success, item.error);
20+
});
21+
});
1322

1423
const Api = {};
1524

@@ -20,13 +29,11 @@ const axiosApi = () => {
2029
url = options && options.query ? parseUrl(url, options.query) : url;
2130
url = addPrefix(url);
2231

23-
return axios(Object.assign({}, item, options, { url }));
32+
return restAxios(Object.assign({}, item, options, { url }));
2433
}
2534
});
2635
};
2736

2837
axiosApi();
2938

30-
// Api.jsonrpc = jsonRpc;
31-
3239
export default Api;

template/src/api/interceptors.js

+47-42
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import axios from 'axios';
21
import store from '@/store';
32
import router from '@/router';
43
import * as types from '@/store/mutation-types';
@@ -8,46 +7,52 @@ const statusCode = {
87
EXPIRED_CREDENTIAL: 5,
98
};
109

11-
axios.interceptors.request.use((config) => {
12-
config.headers.Accept = 'application/vnd.edusoho.v2+json';
13-
14-
if (store.state.token) {
15-
config.headers['X-CSRF-Token'] = store.state.token;
16-
}
17-
18-
console.log('request', config);
19-
return config;
20-
}, error => Promise.reject(error));
21-
22-
axios.interceptors.response.use((res) => {
23-
console.log('resSuccess', res.data);
24-
25-
return res.data;
26-
}, (error) => {
27-
console.log('resError', error);
28-
29-
if (!error.response) {
30-
console.log(error);
31-
error.message = '网络问题,请联系管理员';
32-
return Promise.reject(error);;
33-
}
34-
35-
switch (error.response.status) {
36-
case 401:
37-
const code = error.response.data.error.code;
38-
// token过期的情况
39-
if (code === statusCode.EXPIRED_CREDENTIAL) {
40-
store.commit(types.USER_LOGOUT);
41-
42-
router.replace({
43-
name: 'login',
44-
query: { redirect: router.currentRoute.name },
45-
});
10+
export default {
11+
request: [{
12+
success: (config) => {
13+
config.headers.Accept = 'application/vnd.edusoho.v2+json';
14+
15+
if (store.state.token) {
16+
config.headers['X-CSRF-Token'] = store.state.token;
17+
}
18+
19+
console.log('request', config);
20+
return config;
21+
},
22+
error: error => Promise.reject(error),
23+
}],
24+
response: [{
25+
success: (res) => {
26+
console.log('resSuccess', res.data);
27+
return res.data;
28+
},
29+
error: (error) => {
30+
console.log('resError', error);
31+
32+
if (!error.response) {
33+
console.log(error);
34+
error.message = '网络问题,请联系管理员';
35+
return Promise.reject(error);;
36+
}
37+
38+
switch (error.response.status) {
39+
case 401:
40+
const code = error.response.data.error.code;
41+
// token过期的情况
42+
if (code === statusCode.EXPIRED_CREDENTIAL) {
43+
store.commit(types.USER_LOGOUT);
44+
45+
router.replace({
46+
name: 'login',
47+
query: { redirect: router.currentRoute.name },
48+
});
49+
}
50+
break;
51+
default:
52+
break;
4653
}
47-
break;
48-
default:
49-
break;
50-
}
5154

52-
return Promise.reject(error.response.data.error);
53-
});
55+
return Promise.reject(error.response.data.error);
56+
},
57+
}],
58+
}

template/src/api/jsonrpc/README.md

+54-20
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,46 @@
11
### jsonrpc 下载与使用
22

3-
* 下载
3+
## 下载
44

55
```js
66
yarn add jsonrpc-dispatch
77
```
88

9-
* 引入
10-
11-
在api中引入该库,在中后台解决方案中位于 ./src/api/jsonrpc/index.js
9+
## 初始化jsonrpc,规定请求行为和回调。
1210

1311
```js
14-
import jsonRpcConfig from '@/api/jsonRpc-config';
15-
```
16-
17-
18-
初始化jsonrpc,规定请求行为和回调。
12+
// 实例一个独立的axios,区分rest请求方式
13+
const jsonrpcAxios = axios.create();
14+
// 挂载拦截器
15+
Object.keys(interceptorsList).map((key) => {
16+
const list = interceptorsList[key];
17+
list.map((item) => {
18+
jsonrpcAxios.interceptors[key].use(item.success, item.error);
19+
});
20+
});
1921

20-
```js
2122
// axios调用
2223
const jsonrpc = new JSONRPC((message) => {
23-
axios({
24+
jsonrpcAxios({
2425
url: '/adminrpc', // 请求路由
2526
method: 'post', // 请求方式
2627
baseURL: 'http://live-service.local.cg-dev.cn', // 请求基础路由
2728
data: message, // 发送消息主体
2829
responseType: 'json', // 发送消息格式json
2930
}).then((res) => {
30-
jsonrpc.handle.bind(jsonrpc, res.data); //回调后使用jsonrpc.handle触发其本身的回调。
31+
if (!res) {
32+
return;
33+
}
34+
if (res.error) {
35+
throw new Error(res.error);
36+
}
37+
jsonrpc.handle(res.data); //回调后使用jsonrpc.handle触发其本身的回调。
3138
});
3239
});
3340

34-
export default jsonrpc;
41+
export {
42+
jsonrpc
43+
};
3544

3645
// 在需要的组件中引入jsonrpc
3746
import jsonrpc from '@/api/jsonrpc.js',
@@ -42,36 +51,61 @@ jsonrpc.request('add', [1,2]).then((result) => {
4251
});
4352

4453

45-
46-
4754
//可初始化多个jsonrpc消息对象,方便对不同域名的内容发送请求
4855
const live = new JSONRPC((message) => {
49-
axios({
56+
jsonrpcAxios({
5057
url: '/adminrpc', 请求路由
5158
method: 'post', // 请求方式
5259
baseURL: 'http://live-service.local.cg-dev.cn', // 请求基础路由
5360
data: message, // 发送消息主体
5461
responseType: 'json', // 发送消息格式json
5562
}).then((res) => {
56-
live.handle.bind(live, res.data); //回调后使用jsonrpc.handle触发其本身的回调。
63+
if (!res) {
64+
return;
65+
}
66+
if (res.error) {
67+
throw new Error(res.error);
68+
}
69+
live.handle(res.data); //回调后使用jsonrpc.handle触发其本身的回调。
5770
});
5871
});
5972
const log = new JSONRPC((message) => {
60-
axios({
73+
jsonrpcAxios({
6174
url: '/adminrpc', 请求路由
6275
method: 'post', // 请求方式
6376
baseURL: 'http://log.cg-dev.cn', // 请求基础路由
6477
data: message, // 发送消息主体
6578
responseType: 'json', // 发送消息格式json
6679
}).then((res) => {
67-
log.handle.bind(log, res.data); //回调后使用jsonrpc.handle触发其本身的回调。
80+
if (!res) {
81+
return;
82+
}
83+
if (res.error) {
84+
throw new Error(res.error);
85+
}
86+
log.handle(res.data); //回调后使用jsonrpc.handle触发其本身的回调。
6887
});
6988
});
70-
export default{
89+
export {
7190
live,
7291
log,
7392
};
7493

7594
```
7695
请求拦截部分在 ./src/api/jsonrpc/interceptors.js 中,有详细描述
7796

97+
## 组件内引入
98+
99+
```js
100+
import { jsonrpc } from '@/api/jsonrpc/index';
101+
```
102+
103+
使用
104+
105+
```js
106+
const requestData = {
107+
/* 请求所需参数 */
108+
}
109+
jsonrpc.request('方法名', requestData);
110+
```
111+

template/src/api/jsonrpc/index.js

+16-4
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,30 @@ import axios from 'axios';
22
import JSONRPC from 'jsonrpc-dispatch'
33

44
// 拦截器
5-
import '@/api/jsonrpc/interceptors';
5+
import interceptorsList from '@/api/jsonrpc/interceptors';
6+
7+
const jsonrpcAxios = axios.create();
8+
9+
Object.keys(interceptorsList).map((key) => {
10+
const list = interceptorsList[key];
11+
list.map((item) => {
12+
console.log(item, key, 'jsonrpcAxios');
13+
jsonrpcAxios.interceptors[key].use(item.success, item.error);
14+
});
15+
});
616

717
const jsonrpc = new JSONRPC((message) => {
8-
axios({
18+
jsonrpcAxios({
919
url: '/adminrpc', // 请求路由
1020
method: 'post', // 请求方式
1121
baseURL: 'http://live-service.local.cg-dev.cn', // 请求基础路由
1222
data: message, // 发送消息主体
1323
responseType: 'json', // 发送消息格式json
1424
}).then((res) => {
15-
jsonrpc.handle.bind(jsonrpc, res.data); //回调后使用jsonrpc.handle触发其本身的回调。
25+
jsonrpc.handle(res); //回调后使用jsonrpc.handle触发其本身的回调。
1626
});
1727
});
1828

19-
export default jsonrpc;
29+
export {
30+
jsonrpc
31+
};

0 commit comments

Comments
 (0)