module-menu-vue 0.3.11 → 0.3.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +24 -24
  2. package/babel.config.js +5 -5
  3. package/index.js +4 -4
  4. package/jsconfig.json +19 -19
  5. package/package.json +48 -48
  6. package/public/index.html +14 -14
  7. package/src/App.vue +29 -29
  8. package/src/assets/admin_logo.svg +48 -48
  9. package/src/assets/admin_slogo.svg +48 -48
  10. package/src/assets/alert_logo.svg +26 -26
  11. package/src/assets/alert_slogo.svg +26 -26
  12. package/src/assets/childIcon.svg +10 -10
  13. package/src/assets/dataManager_logo.svg +42 -42
  14. package/src/assets/dataanalytic_logo.svg +44 -44
  15. package/src/assets/dataanalytic_slogo.svg +47 -47
  16. package/src/assets/dataasset_logo.svg +52 -52
  17. package/src/assets/dataasset_slogo.svg +52 -52
  18. package/src/assets/datacollection_logo.svg +70 -70
  19. package/src/assets/datacollection_slogo.svg +70 -70
  20. package/src/assets/datadev_logo.svg +26 -26
  21. package/src/assets/datadev_slogo.svg +26 -26
  22. package/src/assets/datalabel_logo.svg +26 -26
  23. package/src/assets/datalabel_slogo.svg +26 -26
  24. package/src/assets/datamanager_slogo.svg +42 -42
  25. package/src/assets/dataservice_logo.svg +209 -209
  26. package/src/assets/dataservice_slogo.svg +209 -209
  27. package/src/assets/datasharing_logo.svg +28 -28
  28. package/src/assets/datasharing_slogo.svg +28 -28
  29. package/src/assets/exchange_portal_logo.svg +9 -9
  30. package/src/assets/home.svg +12 -12
  31. package/src/assets/ic_biaoqianfenxi.png +0 -0
  32. package/src/assets/ic_gonggongmokuai_m.svg +5 -5
  33. package/src/assets/ic_shujuhuiju_m.svg +5 -5
  34. package/src/assets/ic_shujukaifa_m.svg +15 -15
  35. package/src/assets/ic_shujukaifang_m.svg +5 -5
  36. package/src/assets/ic_shujuyingyong_m.svg +5 -5
  37. package/src/assets/ic_shujuzhili_m.svg +5 -5
  38. package/src/assets/metadata_logo.svg +25 -25
  39. package/src/assets/metadata_slogo.svg +25 -25
  40. package/src/assets/module.svg +12 -12
  41. package/src/assets/operate_logo.svg +63 -63
  42. package/src/assets/operate_slogo.svg +63 -63
  43. package/src/assets/personalCenter.svg +15 -15
  44. package/src/assets/quality_logo.svg +26 -26
  45. package/src/assets/quality_slogo.svg +26 -26
  46. package/src/assets/systemManage.svg +15 -15
  47. package/src/assets/wordorder_logo.svg +57 -57
  48. package/src/assets/workorder_slogo.svg +54 -54
  49. package/src/components/Menu/ModuleMenu.vue +344 -341
  50. package/src/components/Menu/constant.js +560 -545
  51. package/src/components/Menu/menu.css +122 -122
  52. package/src/components/Menu/service.js +25 -25
  53. package/src/components/Portal/PortalBtn.vue +30 -30
  54. package/src/components/Tenant/TenantList.vue +74 -74
  55. package/src/components/Tenant/service.js +17 -17
  56. package/src/components/User/UserInfo.vue +227 -227
  57. package/src/components/User/constant.js +11 -11
  58. package/src/components/User/service.js +14 -14
  59. package/src/components/Util/axios.js +89 -89
  60. package/src/components/Util/config.js +13 -13
  61. package/src/components/Util/permessionUtils.js +46 -46
  62. package/src/components/Util/userInfo.js +96 -96
  63. package/src/main.js +11 -11
  64. package/vue.config.js +34 -34
@@ -1,90 +1,90 @@
1
- import axios from 'axios';
2
- import getStore from './userInfo';
3
- import { checkToken } from './permessionUtils';
4
- let tokenValue = 'ba8db130f3334ae5b432b1398e0c1b1d';
5
- axios.interceptors.response.use(
6
- (response) => {
7
- if (response.status === 200) {
8
- return response;
9
- } else if (response.data.code === 401 || response.status === 401 || response.status === 302 || response.status === 403) {
10
- console.log('response env: ', process.env.NODE_ENV)
11
- if (process.env.NODE_ENV === 'production') {
12
- tokenValue = getStore({ name: 'access_token' });
13
- }
14
- checkToken(tokenValue);
15
- } else {
16
- console.log('接口异常 response');
17
- return Promise.reject('error');
18
- }
19
- },
20
- (error) => {
21
- console.log('error', error)
22
- if (error.response) {
23
- if (error.response.status === 401) {
24
- console.log('response error env: ', process.env.NODE_ENV)
25
- if (process.env.NODE_ENV === 'production') {
26
- tokenValue = getStore({ name: 'access_token' });
27
- }
28
- checkToken(tokenValue);
29
- } else if (error.response.status === 403) {
30
- // 提示无权限等
31
- } else {
32
- // 其他错误处理
33
- }
34
- }
35
- console.log('=========', JSON.stringify(error))
36
- return Promise.reject(error.response);
37
- },
38
- );
39
-
40
- /** 全局请求拦截器 */
41
- axios.interceptors.request.use(
42
- async (params) => {
43
- // 多种环境,对接门户时,需要在请求头中设置token等信息
44
- const environmentList = ['production', 'development', 'test']
45
- console.log('request env: ', process.env.NODE_ENV)
46
- if (environmentList.includes(process.env.NODE_ENV)) {
47
- console.log('环境进来了。。。')
48
- const TENANT_ID = getStore({ name: 'tenantId' }) || '1';
49
- const isToken = (params.headers || {}).isToken === false;
50
- const token = getStore({ name: 'access_token' });
51
- console.log('token', token)
52
- console.log('isToken', isToken)
53
- console.log('TENANT_ID', TENANT_ID)
54
- if (token && !isToken) {
55
- params.headers['Authorization'] = `Bearer ${token}`;
56
- }
57
- if (TENANT_ID) {
58
- params.headers["TENANT-ID"] = TENANT_ID; // 租户ID
59
- }
60
- return params;
61
- }
62
- params.headers['Authorization'] = `Bearer ${tokenValue}`;
63
- params.headers['TENANT-ID'] = '1';
64
- console.log('params', JSON.stringify(params))
65
- return params;
66
- },
67
- function (error) {
68
- // 对请求错误做些什么
69
- return Promise.reject(error);
70
- },
71
- );
72
-
73
- function Axios(url, method) {
74
- return new Promise((resolve, reject) => {
75
- axios({
76
- method: method,
77
- url: url,
78
- })
79
- .then((res) => {
80
- console.log('res', res)
81
- resolve(res);
82
- })
83
- .catch((err) => {
84
- console.log('err', err)
85
- reject(err);
86
- });
87
- })
88
- }
89
-
1
+ import axios from 'axios';
2
+ import getStore from './userInfo';
3
+ import { checkToken } from './permessionUtils';
4
+ let tokenValue = 'ff1d727b433e4c2daf77c3e3f0190016';
5
+ axios.interceptors.response.use(
6
+ (response) => {
7
+ if (response.status === 200) {
8
+ return response;
9
+ } else if (response.data.code === 401 || response.status === 401 || response.status === 302 || response.status === 403) {
10
+ console.log('response env: ', process.env.NODE_ENV)
11
+ if (process.env.NODE_ENV === 'production') {
12
+ tokenValue = getStore({ name: 'access_token' });
13
+ }
14
+ checkToken(tokenValue);
15
+ } else {
16
+ console.log('接口异常 response');
17
+ return Promise.reject('error');
18
+ }
19
+ },
20
+ (error) => {
21
+ console.log('error', error)
22
+ if (error.response) {
23
+ if (error.response.status === 401) {
24
+ console.log('response error env: ', process.env.NODE_ENV)
25
+ if (process.env.NODE_ENV === 'production') {
26
+ tokenValue = getStore({ name: 'access_token' });
27
+ }
28
+ checkToken(tokenValue);
29
+ } else if (error.response.status === 403) {
30
+ // 提示无权限等
31
+ } else {
32
+ // 其他错误处理
33
+ }
34
+ }
35
+ console.log('=========', JSON.stringify(error))
36
+ return Promise.reject(error.response);
37
+ },
38
+ );
39
+
40
+ /** 全局请求拦截器 */
41
+ axios.interceptors.request.use(
42
+ async (params) => {
43
+ // 多种环境,对接门户时,需要在请求头中设置token等信息
44
+ const environmentList = ['production', 'development', 'test']
45
+ console.log('request env: ', process.env.NODE_ENV)
46
+ if (environmentList.includes(process.env.NODE_ENV)) {
47
+ console.log('环境进来了。。。')
48
+ const TENANT_ID = getStore({ name: 'tenantId' }) || '1';
49
+ const isToken = (params.headers || {}).isToken === false;
50
+ const token = getStore({ name: 'access_token' });
51
+ console.log('token', token)
52
+ console.log('isToken', isToken)
53
+ console.log('TENANT_ID', TENANT_ID)
54
+ if (token && !isToken) {
55
+ params.headers['Authorization'] = `Bearer ${token}`;
56
+ }
57
+ if (TENANT_ID) {
58
+ params.headers["TENANT-ID"] = TENANT_ID; // 租户ID
59
+ }
60
+ return params;
61
+ }
62
+ params.headers['Authorization'] = `Bearer ${tokenValue}`;
63
+ params.headers['TENANT-ID'] = '1';
64
+ console.log('params', JSON.stringify(params))
65
+ return params;
66
+ },
67
+ function (error) {
68
+ // 对请求错误做些什么
69
+ return Promise.reject(error);
70
+ },
71
+ );
72
+
73
+ function Axios(url, method) {
74
+ return new Promise((resolve, reject) => {
75
+ axios({
76
+ method: method,
77
+ url: url,
78
+ })
79
+ .then((res) => {
80
+ console.log('res', res)
81
+ resolve(res);
82
+ })
83
+ .catch((err) => {
84
+ console.log('err', err)
85
+ reject(err);
86
+ });
87
+ })
88
+ }
89
+
90
90
  export default Axios;
@@ -1,14 +1,14 @@
1
- const address = location.hostname
2
- const port = location.port
3
- const baseCof =
4
- process.env.NODE_ENV === 'production' ?
5
- {
6
- baseSever: `https://${address}:${port}`,
7
- basePath: `/app/cmcc/data`,
8
- }
9
- :
10
- {
11
- baseSever: location.origin,
12
- basePath: '/cmcc/data',
13
- };
1
+ const address = location.hostname
2
+ const port = location.port
3
+ const baseCof =
4
+ process.env.NODE_ENV === 'production' ?
5
+ {
6
+ baseSever: `https://${address}:${port}`,
7
+ basePath: `/app/cmcc/data`,
8
+ }
9
+ :
10
+ {
11
+ baseSever: location.origin,
12
+ basePath: '/cmcc/data',
13
+ };
14
14
  export default baseCof;
@@ -1,47 +1,47 @@
1
- import Axios from './axios';
2
- const localStorageToken = localStorage.getItem('ACCESS_TOKEN')
3
- const stash = sessionStorage.getItem('stash')
4
- const DEFAULT_LOGOUT_URL = localStorageToken ? '/admin-ui/login' : stash === 'GZW' ? '/data-platform/#/login' : stash === 'PANWEI' ? '/bigdata-portal/#/login' : '/#/login'
5
- import { integrationLogout } from '../User/service.js'
6
- // 校验token是否失效
7
- export const checkToken = async (token) => {
8
- if (localStorageToken) {
9
- await integrationLogout()
10
- this.$message.error({content:'用户凭证已过期,请重新登录', onClose: ()=>{
11
- localStorage.clear();
12
- sessionStorage.clear();
13
- getLoginUrl()
14
- .then((res) => {
15
- if (res && res.data && res.data.data && res.data.data.loginoutUrl) {
16
- console.log('Login URL found:', res.data.data.loginoutUrl);
17
- window.location.replace(res.data.data.loginoutUrl);
18
- } else {
19
- console.log('No login URL found, redirect to default login page.');
20
- window.location.replace('/admin-ui/login');
21
- }
22
- })
23
- .catch((e) => {
24
- console.log('GetLoginUrl error: ', e);
25
- window.location.replace('/admin-ui/login');
26
- });
27
- }});
28
- } else {
29
- const url = stash === 'GZW' ? `/data-platform/auth/oauth/check_token?token=${token}` : `/auth/oauth/check_token?token=${token}`
30
- Axios(url, 'get')
31
- .then().catch(() =>{
32
- this.$message.error({content:'用户凭证已过期,请重新登录', onClose: ()=>{
33
- localStorage.clear();
34
- sessionStorage.clear();
35
- location.href = DEFAULT_LOGOUT_URL;
36
- }});
37
- })
38
- }
39
- }
40
-
41
- // 获取登录地址信息
42
- export function getLoginUrl() {
43
- return Axios(
44
- '/admin-api/system/auth/getCodeUrl',
45
- 'get',
46
- )
1
+ import Axios from './axios';
2
+ const localStorageToken = localStorage.getItem('ACCESS_TOKEN')
3
+ const stash = sessionStorage.getItem('stash')
4
+ const DEFAULT_LOGOUT_URL = localStorageToken ? '/admin-ui/login' : stash === 'GZW' ? '/data-platform/#/login' : stash === 'PANWEI' ? '/bigdata-portal/#/login' : '/#/login'
5
+ import { integrationLogout } from '../User/service.js'
6
+ // 校验token是否失效
7
+ export const checkToken = async (token) => {
8
+ if (localStorageToken) {
9
+ await integrationLogout()
10
+ this.$message.error({content:'用户凭证已过期,请重新登录', onClose: ()=>{
11
+ localStorage.clear();
12
+ sessionStorage.clear();
13
+ getLoginUrl()
14
+ .then((res) => {
15
+ if (res && res.data && res.data.data && res.data.data.loginoutUrl) {
16
+ console.log('Login URL found:', res.data.data.loginoutUrl);
17
+ window.location.href = res.data.data.loginoutUrl;
18
+ } else {
19
+ console.log('No login URL found, redirect to default login page.');
20
+ window.location.href = res.data.data.loginoutUrl;
21
+ }
22
+ })
23
+ .catch((e) => {
24
+ console.log('GetLoginUrl error: ', e);
25
+ window.location.href = '/admin-ui/login';
26
+ });
27
+ }});
28
+ } else {
29
+ const url = stash === 'GZW' ? `/data-platform/auth/oauth/check_token?token=${token}` : `/auth/oauth/check_token?token=${token}`
30
+ Axios(url, 'get')
31
+ .then().catch(() =>{
32
+ this.$message.error({content:'用户凭证已过期,请重新登录', onClose: ()=>{
33
+ localStorage.clear();
34
+ sessionStorage.clear();
35
+ location.href = DEFAULT_LOGOUT_URL;
36
+ }});
37
+ })
38
+ }
39
+ }
40
+
41
+ // 获取登录地址信息
42
+ export function getLoginUrl() {
43
+ return Axios(
44
+ '/admin-api/system/auth/getCodeUrl',
45
+ 'get',
46
+ )
47
47
  }
@@ -1,97 +1,97 @@
1
- /**
2
- * 获取认证相关的localStorage/SessionStorage
3
- */
4
- function getStore(params) {
5
- let { name, debug } = params;
6
- // 使用 ACCESS_TOKEN 判断是否是一体化
7
- const token = localStorage.getItem('ACCESS_TOKEN')
8
- if (token) {
9
- let storageStr = '';
10
- if (name === 'access_token') {
11
- storageStr = localStorage.getItem('ACCESS_TOKEN');
12
- } else if (name === 'tenantId') {
13
- // 暂定当前租户 curTenantId
14
- storageStr = localStorage.getItem('curTenantId');
15
- } else if (name === 'userName') {
16
- // 获取当前登录用户名称
17
- storageStr = localStorage.getItem('userName');
18
- } else if (name === 'userId') {
19
- // 获取当前登录用户Id
20
- storageStr = localStorage.getItem('userId');
21
- }
22
- return storageStr;
23
- } else {
24
- const keyName = 'bigdata-';
25
- name = keyName + name;
26
- let obj = {};
27
- let content;
28
- obj = sessionStorage.getItem(name);
29
- if (!obj || Object.keys(obj).length === 0) obj = localStorage.getItem(name);
30
- if (!obj || Object.keys(obj).length === 0) return '';
31
- try {
32
- obj = JSON.parse(obj);
33
- } catch (e) {
34
- return '';
35
- }
36
- if (debug) {
37
- return '';
38
- }
39
- if (obj.dataType === 'string') {
40
- content = obj.content;
41
- } else if (obj.dataType === 'number') {
42
- content = Number(obj.content);
43
- } else if (obj.dataType === 'boolean') {
44
- // eslint-disable-next-line no-eval
45
- content = eval(obj.content);
46
- } else if (obj.dataType === 'object') {
47
- content = obj.content;
48
- }
49
- return content;
50
- }
51
- }
52
- export default getStore;
53
-
54
- export const getUserName = () => {
55
- // 使用 ACCESS_TOKEN 判断是否是一体化
56
- const token = localStorage.getItem('ACCESS_TOKEN')
57
- if (token) {
58
- const name = getStore({ name: 'userName' });
59
- if (!name) {
60
- return '';
61
- }
62
- return name;
63
- } else {
64
- const userInfo = getStore({ name: 'userInfo' });
65
- if (userInfo && Object.keys(userInfo).length > 0 && userInfo.username) {
66
- console.log('username', userInfo.username)
67
- return userInfo.username;
68
- }
69
- return '';
70
- }
71
- };
72
-
73
- export const getUserId = () => {
74
- // 使用 ACCESS_TOKEN 判断是否是一体化
75
- const token = localStorage.getItem('ACCESS_TOKEN')
76
- if (token) {
77
- const id = getStore({ name: 'userId' });
78
- if (!id) {
79
- return '';
80
- }
81
- return id;
82
- } else {
83
- const userInfo = getStore({ name: 'userInfo' });
84
- if (userInfo && Object.keys(userInfo).length > 0 && userInfo.id) {
85
- return userInfo.id;
86
- }
87
- return '';
88
- }
89
- };
90
-
91
- /**
92
- * 获取是否拥有系统管理左侧菜单权限标识
93
- * @returns
94
- */
95
- export const getIsHaveSystemManagementPermissionFlag = () => {
96
- return getStore({ name: 'isHaveSystemManagementPermission' });
1
+ /**
2
+ * 获取认证相关的localStorage/SessionStorage
3
+ */
4
+ function getStore(params) {
5
+ let { name, debug } = params;
6
+ // 使用 ACCESS_TOKEN 判断是否是一体化
7
+ const token = localStorage.getItem('ACCESS_TOKEN')
8
+ if (token) {
9
+ let storageStr = '';
10
+ if (name === 'access_token') {
11
+ storageStr = localStorage.getItem('ACCESS_TOKEN');
12
+ } else if (name === 'tenantId') {
13
+ // 暂定当前租户 curTenantId
14
+ storageStr = localStorage.getItem('curTenantId');
15
+ } else if (name === 'userName') {
16
+ // 获取当前登录用户名称
17
+ storageStr = localStorage.getItem('userName');
18
+ } else if (name === 'userId') {
19
+ // 获取当前登录用户Id
20
+ storageStr = localStorage.getItem('userId');
21
+ }
22
+ return storageStr;
23
+ } else {
24
+ const keyName = 'bigdata-';
25
+ name = keyName + name;
26
+ let obj = {};
27
+ let content;
28
+ obj = sessionStorage.getItem(name);
29
+ if (!obj || Object.keys(obj).length === 0) obj = localStorage.getItem(name);
30
+ if (!obj || Object.keys(obj).length === 0) return '';
31
+ try {
32
+ obj = JSON.parse(obj);
33
+ } catch (e) {
34
+ return '';
35
+ }
36
+ if (debug) {
37
+ return '';
38
+ }
39
+ if (obj.dataType === 'string') {
40
+ content = obj.content;
41
+ } else if (obj.dataType === 'number') {
42
+ content = Number(obj.content);
43
+ } else if (obj.dataType === 'boolean') {
44
+ // eslint-disable-next-line no-eval
45
+ content = eval(obj.content);
46
+ } else if (obj.dataType === 'object') {
47
+ content = obj.content;
48
+ }
49
+ return content;
50
+ }
51
+ }
52
+ export default getStore;
53
+
54
+ export const getUserName = () => {
55
+ // 使用 ACCESS_TOKEN 判断是否是一体化
56
+ const token = localStorage.getItem('ACCESS_TOKEN')
57
+ if (token) {
58
+ const name = getStore({ name: 'userName' });
59
+ if (!name) {
60
+ return '';
61
+ }
62
+ return name;
63
+ } else {
64
+ const userInfo = getStore({ name: 'userInfo' });
65
+ if (userInfo && Object.keys(userInfo).length > 0 && userInfo.username) {
66
+ console.log('username', userInfo.username)
67
+ return userInfo.username;
68
+ }
69
+ return '';
70
+ }
71
+ };
72
+
73
+ export const getUserId = () => {
74
+ // 使用 ACCESS_TOKEN 判断是否是一体化
75
+ const token = localStorage.getItem('ACCESS_TOKEN')
76
+ if (token) {
77
+ const id = getStore({ name: 'userId' });
78
+ if (!id) {
79
+ return '';
80
+ }
81
+ return id;
82
+ } else {
83
+ const userInfo = getStore({ name: 'userInfo' });
84
+ if (userInfo && Object.keys(userInfo).length > 0 && userInfo.id) {
85
+ return userInfo.id;
86
+ }
87
+ return '';
88
+ }
89
+ };
90
+
91
+ /**
92
+ * 获取是否拥有系统管理左侧菜单权限标识
93
+ * @returns
94
+ */
95
+ export const getIsHaveSystemManagementPermissionFlag = () => {
96
+ return getStore({ name: 'isHaveSystemManagementPermission' });
97
97
  }
package/src/main.js CHANGED
@@ -1,11 +1,11 @@
1
- import Vue from 'vue'
2
- import ElementUI from 'element-ui';
3
- import App from './App.vue'
4
- import 'element-ui/lib/theme-chalk/index.css';
5
-
6
- Vue.config.productionTip = false
7
- Vue.use(ElementUI);
8
-
9
- new Vue({
10
- render: h => h(App),
11
- }).$mount('#app')
1
+ import Vue from 'vue'
2
+ import ElementUI from 'element-ui';
3
+ import App from './App.vue'
4
+ import 'element-ui/lib/theme-chalk/index.css';
5
+
6
+ Vue.config.productionTip = false
7
+ Vue.use(ElementUI);
8
+
9
+ new Vue({
10
+ render: h => h(App),
11
+ }).$mount('#app')
package/vue.config.js CHANGED
@@ -1,34 +1,34 @@
1
- const url = 'https://192.168.108.203:31950'
2
- module.exports = {
3
- lintOnSave: true,
4
- productionSourceMap: false,
5
- css: {
6
- // 忽略 CSS order 顺序警告
7
- extract: { ignoreOrder: true },
8
- // 查看CSS属于哪个css文件
9
- sourceMap: process.env.NODE_ENV === "development",
10
- },
11
- // 配置转发代理
12
- devServer: {
13
- // disableHostCheck: true,
14
- port: 8080,
15
- proxy: {
16
- "/": {
17
- // target:' https://10.136.106.82:30011',
18
- target: url,
19
- ws: false, // 需要websocket 开启
20
- changOrigin: true, //允许跨域
21
- pathRewrite: {
22
- "^/": "/",
23
- },
24
- },
25
- '/admin-api': {
26
- target: url,
27
- changeOrigin: true,
28
- pathRewrite: { '^': '' },
29
- }
30
- // 3.5 以后不需要再配置
31
- },
32
- },
33
- };
34
-
1
+ const url = 'https://192.168.108.203:31950'
2
+ module.exports = {
3
+ lintOnSave: true,
4
+ productionSourceMap: false,
5
+ css: {
6
+ // 忽略 CSS order 顺序警告
7
+ extract: { ignoreOrder: true },
8
+ // 查看CSS属于哪个css文件
9
+ sourceMap: process.env.NODE_ENV === "development",
10
+ },
11
+ // 配置转发代理
12
+ devServer: {
13
+ // disableHostCheck: true,
14
+ port: 8080,
15
+ proxy: {
16
+ "/": {
17
+ // target:' https://10.136.106.82:30011',
18
+ target: url,
19
+ ws: false, // 需要websocket 开启
20
+ changOrigin: true, //允许跨域
21
+ pathRewrite: {
22
+ "^/": "/",
23
+ },
24
+ },
25
+ '/admin-api': {
26
+ target: url,
27
+ changeOrigin: true,
28
+ pathRewrite: { '^': '' },
29
+ }
30
+ // 3.5 以后不需要再配置
31
+ },
32
+ },
33
+ };
34
+