vue2-client 1.18.38 → 1.18.39
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.
- package/.eslintrc.js +90 -90
- package/Components.md +60 -60
- package/docs/index.md +30 -30
- package/index.js +31 -31
- package/jest-transform-stub.js +8 -8
- package/jest.setup.js +7 -7
- package/package.json +1 -1
- package/src/assets/img/querySlotDemo.svg +15 -15
- package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
- package/src/base-client/components/common/CitySelect/index.js +3 -3
- package/src/base-client/components/common/CitySelect/index.md +109 -109
- package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
- package/src/base-client/components/common/CreateQuery/index.js +3 -3
- package/src/base-client/components/common/CreateQuery/index.md +42 -42
- package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
- package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
- package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
- package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
- package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
- package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
- package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
- package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
- package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
- package/src/base-client/components/common/PersonSetting/index.js +3 -3
- package/src/base-client/components/common/Tree/Tree.vue +149 -149
- package/src/base-client/components/common/Tree/index.js +2 -2
- package/src/base-client/components/common/Upload/index.js +3 -3
- package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
- package/src/base-client/components/common/XCard/XCard.vue +64 -64
- package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
- package/src/base-client/components/common/XDataDrawer/index.js +3 -3
- package/src/base-client/components/common/XDataDrawer/index.md +41 -41
- package/src/base-client/components/common/XDatePicker/demo.vue +31 -0
- package/src/base-client/components/common/XDatePicker/index.vue +61 -0
- package/src/base-client/components/common/XDescriptions/index.js +3 -3
- package/src/base-client/components/common/XDescriptions/index.md +322 -322
- package/src/base-client/components/common/XForm/XForm.vue +5 -3
- package/src/base-client/components/common/XForm/XFormItem.vue +1 -1
- package/src/base-client/components/common/XForm/index.md +178 -178
- package/src/base-client/components/common/XFormTable/demo.vue +125 -125
- package/src/base-client/components/common/XReport/print.js +186 -186
- package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
- package/src/base-client/components/common/XStepView/index.js +3 -3
- package/src/base-client/components/common/XStepView/index.md +31 -31
- package/src/base-client/components/common/XTable/XTable.vue +1715 -1715
- package/src/base-client/components/common/XTable/XTableWrapper.vue +769 -769
- package/src/base-client/components/common/XTable/index.md +255 -255
- package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
- package/src/base-client/plugins/Config.js +19 -19
- package/src/base-client/plugins/tabs-page-plugin.js +39 -39
- package/src/components/Charts/Bar.vue +62 -62
- package/src/components/Charts/ChartCard.vue +134 -134
- package/src/components/Charts/Liquid.vue +67 -67
- package/src/components/Charts/MiniArea.vue +39 -39
- package/src/components/Charts/MiniBar.vue +39 -39
- package/src/components/Charts/MiniProgress.vue +75 -75
- package/src/components/Charts/MiniSmoothArea.vue +40 -40
- package/src/components/Charts/Radar.vue +68 -68
- package/src/components/Charts/RankList.vue +77 -77
- package/src/components/Charts/TagCloud.vue +113 -113
- package/src/components/Charts/TransferBar.vue +64 -64
- package/src/components/Charts/Trend.vue +82 -82
- package/src/components/Charts/chart.less +12 -12
- package/src/components/Charts/smooth.area.less +13 -13
- package/src/components/NumberInfo/NumberInfo.vue +54 -54
- package/src/components/NumberInfo/index.js +3 -3
- package/src/components/NumberInfo/index.less +54 -54
- package/src/components/NumberInfo/index.md +43 -43
- package/src/components/card/ChartCard.vue +79 -79
- package/src/components/chart/Bar.vue +60 -60
- package/src/components/chart/MiniArea.vue +67 -67
- package/src/components/chart/MiniBar.vue +59 -59
- package/src/components/chart/MiniProgress.vue +57 -57
- package/src/components/chart/Radar.vue +80 -80
- package/src/components/chart/RankingList.vue +60 -60
- package/src/components/chart/Trend.vue +79 -79
- package/src/components/chart/index.less +9 -9
- package/src/components/checkbox/ColorCheckbox.vue +157 -157
- package/src/components/input/IInput.vue +66 -66
- package/src/components/menu/SideMenu.vue +75 -75
- package/src/components/menu/menu.js +273 -273
- package/src/components/tool/AStepItem.vue +60 -60
- package/src/layouts/CommonLayout.vue +56 -56
- package/src/layouts/header/HeaderNotice.vue +177 -177
- package/src/lib.js +1 -1
- package/src/mock/extend/index.js +84 -84
- package/src/mock/goods/index.js +108 -108
- package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
- package/src/pages/system/dictionary/index.vue +44 -44
- package/src/pages/system/monitor/loginInfor/index.vue +37 -37
- package/src/pages/system/monitor/operLog/index.vue +37 -37
- package/src/services/api/cas.js +79 -79
- package/src/store/modules/setting.js +119 -119
- package/src/utils/authority-utils.js +85 -85
- package/src/utils/errorCode.js +6 -6
- package/src/utils/map-utils.js +47 -47
- package/vue.config.js +4 -4
- package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<a-card :bordered="false">
|
|
3
|
-
<x-form-table
|
|
4
|
-
title="操作日志"
|
|
5
|
-
:queryParamsName="queryParamsName"
|
|
6
|
-
serviceName="af-system"
|
|
7
|
-
@action="toDetail">
|
|
8
|
-
</x-form-table>
|
|
9
|
-
</a-card>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script>
|
|
13
|
-
import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
|
|
14
|
-
|
|
15
|
-
export default {
|
|
16
|
-
name: 'OperLog',
|
|
17
|
-
components: {
|
|
18
|
-
XFormTable
|
|
19
|
-
},
|
|
20
|
-
data () {
|
|
21
|
-
return {
|
|
22
|
-
// 选中的编号
|
|
23
|
-
selectNo: undefined,
|
|
24
|
-
// 查询配置文件名
|
|
25
|
-
queryParamsName: 'crud_oper_log_manage',
|
|
26
|
-
// 是否显示详情抽屉
|
|
27
|
-
detailVisible: false
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
methods: {
|
|
31
|
-
toDetail (record, id) {
|
|
32
|
-
this.selectNo = id + ''
|
|
33
|
-
this.detailVisible = true
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<a-card :bordered="false">
|
|
3
|
+
<x-form-table
|
|
4
|
+
title="操作日志"
|
|
5
|
+
:queryParamsName="queryParamsName"
|
|
6
|
+
serviceName="af-system"
|
|
7
|
+
@action="toDetail">
|
|
8
|
+
</x-form-table>
|
|
9
|
+
</a-card>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
name: 'OperLog',
|
|
17
|
+
components: {
|
|
18
|
+
XFormTable
|
|
19
|
+
},
|
|
20
|
+
data () {
|
|
21
|
+
return {
|
|
22
|
+
// 选中的编号
|
|
23
|
+
selectNo: undefined,
|
|
24
|
+
// 查询配置文件名
|
|
25
|
+
queryParamsName: 'crud_oper_log_manage',
|
|
26
|
+
// 是否显示详情抽屉
|
|
27
|
+
detailVisible: false
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
methods: {
|
|
31
|
+
toDetail (record, id) {
|
|
32
|
+
this.selectNo = id + ''
|
|
33
|
+
this.detailVisible = true
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
</script>
|
package/src/services/api/cas.js
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
import { post } from '@vue2-client/services/api/restTools'
|
|
2
|
-
import notification from 'ant-design-vue/lib/notification'
|
|
3
|
-
import { logout } from '@vue2-client/services/user'
|
|
4
|
-
import Cookie from 'js-cookie'
|
|
5
|
-
|
|
6
|
-
const casApi = {
|
|
7
|
-
// 根据用户信息校验服务访问权限并生成ST
|
|
8
|
-
createSTByUserInfo: '/api/af-sso/logic/createSTByUserInfo',
|
|
9
|
-
// 根据TGC生成ST
|
|
10
|
-
createSTByTGC: '/api/af-sso/logic/createSTByTGC',
|
|
11
|
-
// 验证ST
|
|
12
|
-
serviceValidate: '/api/af-sso/logic/openapi/serviceValidate',
|
|
13
|
-
// 其他验证
|
|
14
|
-
otherValidate: '/api/af-sso/logic'
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function setTGTCookie (cookie) {
|
|
18
|
-
return Cookie.set('TGT-Cookie', cookie)
|
|
19
|
-
}
|
|
20
|
-
function removeTGTCookie () {
|
|
21
|
-
return Cookie.remove('TGT-Cookie')
|
|
22
|
-
}
|
|
23
|
-
export function getTGTCookie () {
|
|
24
|
-
return Cookie.get('TGT-Cookie')
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function CASLoginByAuth (serviceKey) {
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
post(casApi.createSTByUserInfo, {
|
|
30
|
-
serviceKey: serviceKey
|
|
31
|
-
}).then(res => {
|
|
32
|
-
setTGTCookie(res.tgc)
|
|
33
|
-
resolve(res)
|
|
34
|
-
}).catch(msg => {
|
|
35
|
-
reject(msg)
|
|
36
|
-
})
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function CASLogin (serviceKey, inner) {
|
|
41
|
-
// 从第三方跳转登录
|
|
42
|
-
const tgc = getTGTCookie()
|
|
43
|
-
if (tgc && !inner) {
|
|
44
|
-
return new Promise((resolve, reject) => {
|
|
45
|
-
post(casApi.createSTByTGC, {
|
|
46
|
-
serviceKey: serviceKey,
|
|
47
|
-
tgc: tgc
|
|
48
|
-
}).then(res => {
|
|
49
|
-
resolve(res)
|
|
50
|
-
}).catch(msg => {
|
|
51
|
-
if (msg === '当前操作没有权限') {
|
|
52
|
-
removeTGTCookie()
|
|
53
|
-
notification.error({
|
|
54
|
-
message: '授权已过期,请重新登录',
|
|
55
|
-
description: '2秒后自动跳转回登陆页面'
|
|
56
|
-
})
|
|
57
|
-
logout().then(() => {
|
|
58
|
-
setTimeout(() => {
|
|
59
|
-
window.location.href = '/login?serviceKey=' + serviceKey
|
|
60
|
-
}, 1500)
|
|
61
|
-
})
|
|
62
|
-
} else {
|
|
63
|
-
reject(msg)
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
})
|
|
67
|
-
} else {
|
|
68
|
-
return CASLoginByAuth(serviceKey)
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function doOtherValidate (logicName, st, serviceKey) {
|
|
73
|
-
return post(casApi.otherValidate + '/' + logicName, {
|
|
74
|
-
st: st,
|
|
75
|
-
serviceKey: serviceKey
|
|
76
|
-
}, null)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export default casApi
|
|
1
|
+
import { post } from '@vue2-client/services/api/restTools'
|
|
2
|
+
import notification from 'ant-design-vue/lib/notification'
|
|
3
|
+
import { logout } from '@vue2-client/services/user'
|
|
4
|
+
import Cookie from 'js-cookie'
|
|
5
|
+
|
|
6
|
+
const casApi = {
|
|
7
|
+
// 根据用户信息校验服务访问权限并生成ST
|
|
8
|
+
createSTByUserInfo: '/api/af-sso/logic/createSTByUserInfo',
|
|
9
|
+
// 根据TGC生成ST
|
|
10
|
+
createSTByTGC: '/api/af-sso/logic/createSTByTGC',
|
|
11
|
+
// 验证ST
|
|
12
|
+
serviceValidate: '/api/af-sso/logic/openapi/serviceValidate',
|
|
13
|
+
// 其他验证
|
|
14
|
+
otherValidate: '/api/af-sso/logic'
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function setTGTCookie (cookie) {
|
|
18
|
+
return Cookie.set('TGT-Cookie', cookie)
|
|
19
|
+
}
|
|
20
|
+
function removeTGTCookie () {
|
|
21
|
+
return Cookie.remove('TGT-Cookie')
|
|
22
|
+
}
|
|
23
|
+
export function getTGTCookie () {
|
|
24
|
+
return Cookie.get('TGT-Cookie')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function CASLoginByAuth (serviceKey) {
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
post(casApi.createSTByUserInfo, {
|
|
30
|
+
serviceKey: serviceKey
|
|
31
|
+
}).then(res => {
|
|
32
|
+
setTGTCookie(res.tgc)
|
|
33
|
+
resolve(res)
|
|
34
|
+
}).catch(msg => {
|
|
35
|
+
reject(msg)
|
|
36
|
+
})
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function CASLogin (serviceKey, inner) {
|
|
41
|
+
// 从第三方跳转登录
|
|
42
|
+
const tgc = getTGTCookie()
|
|
43
|
+
if (tgc && !inner) {
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
post(casApi.createSTByTGC, {
|
|
46
|
+
serviceKey: serviceKey,
|
|
47
|
+
tgc: tgc
|
|
48
|
+
}).then(res => {
|
|
49
|
+
resolve(res)
|
|
50
|
+
}).catch(msg => {
|
|
51
|
+
if (msg === '当前操作没有权限') {
|
|
52
|
+
removeTGTCookie()
|
|
53
|
+
notification.error({
|
|
54
|
+
message: '授权已过期,请重新登录',
|
|
55
|
+
description: '2秒后自动跳转回登陆页面'
|
|
56
|
+
})
|
|
57
|
+
logout().then(() => {
|
|
58
|
+
setTimeout(() => {
|
|
59
|
+
window.location.href = '/login?serviceKey=' + serviceKey
|
|
60
|
+
}, 1500)
|
|
61
|
+
})
|
|
62
|
+
} else {
|
|
63
|
+
reject(msg)
|
|
64
|
+
}
|
|
65
|
+
})
|
|
66
|
+
})
|
|
67
|
+
} else {
|
|
68
|
+
return CASLoginByAuth(serviceKey)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function doOtherValidate (logicName, st, serviceKey) {
|
|
73
|
+
return post(casApi.otherValidate + '/' + logicName, {
|
|
74
|
+
st: st,
|
|
75
|
+
serviceKey: serviceKey
|
|
76
|
+
}, null)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export default casApi
|
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
import config from '@vue2-client/config'
|
|
2
|
-
import { ADMIN } from '@vue2-client/config/default'
|
|
3
|
-
import { formatFullPath } from '@vue2-client/utils/i18n'
|
|
4
|
-
import { filterMenu } from '@vue2-client/utils/authority-utils'
|
|
5
|
-
import { getLocalSetting } from '@vue2-client/utils/themeUtil'
|
|
6
|
-
import deepClone from 'lodash.clonedeep'
|
|
7
|
-
|
|
8
|
-
const localSetting = getLocalSetting(true)
|
|
9
|
-
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
|
|
10
|
-
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []
|
|
11
|
-
|
|
12
|
-
export default {
|
|
13
|
-
namespaced: true,
|
|
14
|
-
state: {
|
|
15
|
-
isMobile: false,
|
|
16
|
-
animates: ADMIN.animates,
|
|
17
|
-
palettes: ADMIN.palettes,
|
|
18
|
-
pageMinHeight: 0,
|
|
19
|
-
menuData: [],
|
|
20
|
-
activatedFirst: undefined,
|
|
21
|
-
customTitles,
|
|
22
|
-
...config,
|
|
23
|
-
...localSetting
|
|
24
|
-
},
|
|
25
|
-
getters: {
|
|
26
|
-
menuData (state, getters, rootState) {
|
|
27
|
-
if (state.filterMenu) {
|
|
28
|
-
const { permissions, roles } = rootState.account
|
|
29
|
-
return filterMenu(deepClone(state.menuData), permissions, roles)
|
|
30
|
-
}
|
|
31
|
-
return state.menuData
|
|
32
|
-
},
|
|
33
|
-
firstMenu (state, getters) {
|
|
34
|
-
const { menuData } = getters
|
|
35
|
-
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
36
|
-
formatFullPath(menuData)
|
|
37
|
-
}
|
|
38
|
-
return menuData.map(item => {
|
|
39
|
-
const menuItem = { ...item }
|
|
40
|
-
delete menuItem.children
|
|
41
|
-
return menuItem
|
|
42
|
-
})
|
|
43
|
-
},
|
|
44
|
-
subMenu (state) {
|
|
45
|
-
const { menuData, activatedFirst } = state
|
|
46
|
-
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
47
|
-
formatFullPath(menuData)
|
|
48
|
-
}
|
|
49
|
-
const current = menuData.find(menu => menu.fullPath === activatedFirst)
|
|
50
|
-
return current && current.children || []
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
mutations: {
|
|
54
|
-
setDevice (state, isMobile) {
|
|
55
|
-
state.isMobile = isMobile
|
|
56
|
-
},
|
|
57
|
-
setTheme (state, theme) {
|
|
58
|
-
state.theme = theme
|
|
59
|
-
},
|
|
60
|
-
setLayout (state, layout) {
|
|
61
|
-
state.layout = layout
|
|
62
|
-
},
|
|
63
|
-
setMultiPage (state, multiPage) {
|
|
64
|
-
state.multiPage = multiPage
|
|
65
|
-
},
|
|
66
|
-
setAnimate (state, animate) {
|
|
67
|
-
state.animate = animate
|
|
68
|
-
},
|
|
69
|
-
setWeekMode (state, weekMode) {
|
|
70
|
-
state.weekMode = weekMode
|
|
71
|
-
},
|
|
72
|
-
setFixedHeader (state, fixedHeader) {
|
|
73
|
-
state.fixedHeader = fixedHeader
|
|
74
|
-
},
|
|
75
|
-
setFixedSideBar (state, fixedSideBar) {
|
|
76
|
-
state.fixedSideBar = fixedSideBar
|
|
77
|
-
},
|
|
78
|
-
setLang (state, lang) {
|
|
79
|
-
state.lang = lang
|
|
80
|
-
},
|
|
81
|
-
setHideSetting (state, hideSetting) {
|
|
82
|
-
state.hideSetting = hideSetting
|
|
83
|
-
},
|
|
84
|
-
correctPageMinHeight (state, minHeight) {
|
|
85
|
-
state.pageMinHeight += minHeight
|
|
86
|
-
},
|
|
87
|
-
setMenuData (state, menuData) {
|
|
88
|
-
state.menuData = menuData
|
|
89
|
-
},
|
|
90
|
-
setAsyncRoutes (state, asyncRoutes) {
|
|
91
|
-
state.asyncRoutes = asyncRoutes
|
|
92
|
-
},
|
|
93
|
-
setPageWidth (state, pageWidth) {
|
|
94
|
-
state.pageWidth = pageWidth
|
|
95
|
-
},
|
|
96
|
-
setActivatedFirst (state, activatedFirst) {
|
|
97
|
-
state.activatedFirst = activatedFirst
|
|
98
|
-
},
|
|
99
|
-
setFixedTabs (state, fixedTabs) {
|
|
100
|
-
state.fixedTabs = fixedTabs
|
|
101
|
-
},
|
|
102
|
-
setCustomTitle (state, { path, title }) {
|
|
103
|
-
if (title) {
|
|
104
|
-
const obj = state.customTitles.find(item => item.path === path)
|
|
105
|
-
if (obj) {
|
|
106
|
-
obj.title = title
|
|
107
|
-
} else {
|
|
108
|
-
state.customTitles.push({ path, title })
|
|
109
|
-
}
|
|
110
|
-
sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
setSetting (state, setting) {
|
|
114
|
-
for (const key in setting) {
|
|
115
|
-
state[key] = setting[key]
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
import config from '@vue2-client/config'
|
|
2
|
+
import { ADMIN } from '@vue2-client/config/default'
|
|
3
|
+
import { formatFullPath } from '@vue2-client/utils/i18n'
|
|
4
|
+
import { filterMenu } from '@vue2-client/utils/authority-utils'
|
|
5
|
+
import { getLocalSetting } from '@vue2-client/utils/themeUtil'
|
|
6
|
+
import deepClone from 'lodash.clonedeep'
|
|
7
|
+
|
|
8
|
+
const localSetting = getLocalSetting(true)
|
|
9
|
+
const customTitlesStr = sessionStorage.getItem(process.env.VUE_APP_TBAS_TITLES_KEY)
|
|
10
|
+
const customTitles = (customTitlesStr && JSON.parse(customTitlesStr)) || []
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
namespaced: true,
|
|
14
|
+
state: {
|
|
15
|
+
isMobile: false,
|
|
16
|
+
animates: ADMIN.animates,
|
|
17
|
+
palettes: ADMIN.palettes,
|
|
18
|
+
pageMinHeight: 0,
|
|
19
|
+
menuData: [],
|
|
20
|
+
activatedFirst: undefined,
|
|
21
|
+
customTitles,
|
|
22
|
+
...config,
|
|
23
|
+
...localSetting
|
|
24
|
+
},
|
|
25
|
+
getters: {
|
|
26
|
+
menuData (state, getters, rootState) {
|
|
27
|
+
if (state.filterMenu) {
|
|
28
|
+
const { permissions, roles } = rootState.account
|
|
29
|
+
return filterMenu(deepClone(state.menuData), permissions, roles)
|
|
30
|
+
}
|
|
31
|
+
return state.menuData
|
|
32
|
+
},
|
|
33
|
+
firstMenu (state, getters) {
|
|
34
|
+
const { menuData } = getters
|
|
35
|
+
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
36
|
+
formatFullPath(menuData)
|
|
37
|
+
}
|
|
38
|
+
return menuData.map(item => {
|
|
39
|
+
const menuItem = { ...item }
|
|
40
|
+
delete menuItem.children
|
|
41
|
+
return menuItem
|
|
42
|
+
})
|
|
43
|
+
},
|
|
44
|
+
subMenu (state) {
|
|
45
|
+
const { menuData, activatedFirst } = state
|
|
46
|
+
if (menuData.length > 0 && !menuData[0].fullPath) {
|
|
47
|
+
formatFullPath(menuData)
|
|
48
|
+
}
|
|
49
|
+
const current = menuData.find(menu => menu.fullPath === activatedFirst)
|
|
50
|
+
return current && current.children || []
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
mutations: {
|
|
54
|
+
setDevice (state, isMobile) {
|
|
55
|
+
state.isMobile = isMobile
|
|
56
|
+
},
|
|
57
|
+
setTheme (state, theme) {
|
|
58
|
+
state.theme = theme
|
|
59
|
+
},
|
|
60
|
+
setLayout (state, layout) {
|
|
61
|
+
state.layout = layout
|
|
62
|
+
},
|
|
63
|
+
setMultiPage (state, multiPage) {
|
|
64
|
+
state.multiPage = multiPage
|
|
65
|
+
},
|
|
66
|
+
setAnimate (state, animate) {
|
|
67
|
+
state.animate = animate
|
|
68
|
+
},
|
|
69
|
+
setWeekMode (state, weekMode) {
|
|
70
|
+
state.weekMode = weekMode
|
|
71
|
+
},
|
|
72
|
+
setFixedHeader (state, fixedHeader) {
|
|
73
|
+
state.fixedHeader = fixedHeader
|
|
74
|
+
},
|
|
75
|
+
setFixedSideBar (state, fixedSideBar) {
|
|
76
|
+
state.fixedSideBar = fixedSideBar
|
|
77
|
+
},
|
|
78
|
+
setLang (state, lang) {
|
|
79
|
+
state.lang = lang
|
|
80
|
+
},
|
|
81
|
+
setHideSetting (state, hideSetting) {
|
|
82
|
+
state.hideSetting = hideSetting
|
|
83
|
+
},
|
|
84
|
+
correctPageMinHeight (state, minHeight) {
|
|
85
|
+
state.pageMinHeight += minHeight
|
|
86
|
+
},
|
|
87
|
+
setMenuData (state, menuData) {
|
|
88
|
+
state.menuData = menuData
|
|
89
|
+
},
|
|
90
|
+
setAsyncRoutes (state, asyncRoutes) {
|
|
91
|
+
state.asyncRoutes = asyncRoutes
|
|
92
|
+
},
|
|
93
|
+
setPageWidth (state, pageWidth) {
|
|
94
|
+
state.pageWidth = pageWidth
|
|
95
|
+
},
|
|
96
|
+
setActivatedFirst (state, activatedFirst) {
|
|
97
|
+
state.activatedFirst = activatedFirst
|
|
98
|
+
},
|
|
99
|
+
setFixedTabs (state, fixedTabs) {
|
|
100
|
+
state.fixedTabs = fixedTabs
|
|
101
|
+
},
|
|
102
|
+
setCustomTitle (state, { path, title }) {
|
|
103
|
+
if (title) {
|
|
104
|
+
const obj = state.customTitles.find(item => item.path === path)
|
|
105
|
+
if (obj) {
|
|
106
|
+
obj.title = title
|
|
107
|
+
} else {
|
|
108
|
+
state.customTitles.push({ path, title })
|
|
109
|
+
}
|
|
110
|
+
sessionStorage.setItem(process.env.VUE_APP_TBAS_TITLES_KEY, JSON.stringify(state.customTitles))
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
setSetting (state, setting) {
|
|
114
|
+
for (const key in setting) {
|
|
115
|
+
state[key] = setting[key]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 判断是否有路由的权限
|
|
3
|
-
* @param authority 路由权限配置
|
|
4
|
-
* @param permissions 用户权限集合
|
|
5
|
-
* @returns {boolean|*}
|
|
6
|
-
*/
|
|
7
|
-
function hasPermission (authority, permissions) {
|
|
8
|
-
let required = '*'
|
|
9
|
-
if (typeof authority === 'string') {
|
|
10
|
-
required = authority
|
|
11
|
-
} else if (Array.isArray(authority)) {
|
|
12
|
-
required = authority
|
|
13
|
-
} else if (typeof authority === 'object') {
|
|
14
|
-
required = authority.permission
|
|
15
|
-
}
|
|
16
|
-
return required === '*' || hasAnyItem(required, permissions, (r, t) => !!(r === t || r === t.id))
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* 判断是否有路由需要的角色
|
|
21
|
-
* @param authority 路由权限配置
|
|
22
|
-
* @param roles 用户角色集合
|
|
23
|
-
*/
|
|
24
|
-
function hasRole (authority, roles) {
|
|
25
|
-
let required
|
|
26
|
-
if (typeof authority === 'object') {
|
|
27
|
-
required = authority.role
|
|
28
|
-
}
|
|
29
|
-
return authority === '*' || hasAnyItem(required, roles, (r, t) => !!(r === t || r === t.id))
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* 判断目标数组是否有所需元素
|
|
34
|
-
* @param {String | String[]}required 所需元素,数组或单个元素
|
|
35
|
-
* @param {String[]|Object[]} source 目标数组
|
|
36
|
-
* @param {Function} filter 匹配条件
|
|
37
|
-
* (r: String, s: String|Object) => boolean
|
|
38
|
-
* @returns {boolean}
|
|
39
|
-
*/
|
|
40
|
-
function hasAnyItem (required, source, filter) {
|
|
41
|
-
if (!required) {
|
|
42
|
-
return false
|
|
43
|
-
}
|
|
44
|
-
const checkedList = Array.isArray(required) ? required : [required]
|
|
45
|
-
return !!source.find(s => checkedList.find(r => filter(r, s)))
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* 路由权限校验
|
|
50
|
-
* @param route 路由
|
|
51
|
-
* @param permissions 用户权限集合
|
|
52
|
-
* @param roles 用户角色集合
|
|
53
|
-
* @returns {boolean}
|
|
54
|
-
*/
|
|
55
|
-
function hasAuthority (route, permissions, roles) {
|
|
56
|
-
const authorities = [...route.meta.pAuthorities, route.meta.authority]
|
|
57
|
-
for (const authority of authorities) {
|
|
58
|
-
if (!hasPermission(authority, permissions) && !hasRole(authority, roles)) {
|
|
59
|
-
return false
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return true
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* 根据权限配置过滤菜单数据
|
|
67
|
-
* @param menuData
|
|
68
|
-
* @param permissions
|
|
69
|
-
* @param roles
|
|
70
|
-
*/
|
|
71
|
-
function filterMenu (menuData, permissions, roles) {
|
|
72
|
-
return menuData.filter(menu => {
|
|
73
|
-
if (menu.meta && menu.meta.invisible === undefined) {
|
|
74
|
-
if (!hasAuthority(menu, permissions, roles)) {
|
|
75
|
-
return false
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
if (menu.children && menu.children.length > 0) {
|
|
79
|
-
menu.children = filterMenu(menu.children, permissions, roles)
|
|
80
|
-
}
|
|
81
|
-
return true
|
|
82
|
-
})
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export { filterMenu, hasAuthority }
|
|
1
|
+
/**
|
|
2
|
+
* 判断是否有路由的权限
|
|
3
|
+
* @param authority 路由权限配置
|
|
4
|
+
* @param permissions 用户权限集合
|
|
5
|
+
* @returns {boolean|*}
|
|
6
|
+
*/
|
|
7
|
+
function hasPermission (authority, permissions) {
|
|
8
|
+
let required = '*'
|
|
9
|
+
if (typeof authority === 'string') {
|
|
10
|
+
required = authority
|
|
11
|
+
} else if (Array.isArray(authority)) {
|
|
12
|
+
required = authority
|
|
13
|
+
} else if (typeof authority === 'object') {
|
|
14
|
+
required = authority.permission
|
|
15
|
+
}
|
|
16
|
+
return required === '*' || hasAnyItem(required, permissions, (r, t) => !!(r === t || r === t.id))
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 判断是否有路由需要的角色
|
|
21
|
+
* @param authority 路由权限配置
|
|
22
|
+
* @param roles 用户角色集合
|
|
23
|
+
*/
|
|
24
|
+
function hasRole (authority, roles) {
|
|
25
|
+
let required
|
|
26
|
+
if (typeof authority === 'object') {
|
|
27
|
+
required = authority.role
|
|
28
|
+
}
|
|
29
|
+
return authority === '*' || hasAnyItem(required, roles, (r, t) => !!(r === t || r === t.id))
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 判断目标数组是否有所需元素
|
|
34
|
+
* @param {String | String[]}required 所需元素,数组或单个元素
|
|
35
|
+
* @param {String[]|Object[]} source 目标数组
|
|
36
|
+
* @param {Function} filter 匹配条件
|
|
37
|
+
* (r: String, s: String|Object) => boolean
|
|
38
|
+
* @returns {boolean}
|
|
39
|
+
*/
|
|
40
|
+
function hasAnyItem (required, source, filter) {
|
|
41
|
+
if (!required) {
|
|
42
|
+
return false
|
|
43
|
+
}
|
|
44
|
+
const checkedList = Array.isArray(required) ? required : [required]
|
|
45
|
+
return !!source.find(s => checkedList.find(r => filter(r, s)))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 路由权限校验
|
|
50
|
+
* @param route 路由
|
|
51
|
+
* @param permissions 用户权限集合
|
|
52
|
+
* @param roles 用户角色集合
|
|
53
|
+
* @returns {boolean}
|
|
54
|
+
*/
|
|
55
|
+
function hasAuthority (route, permissions, roles) {
|
|
56
|
+
const authorities = [...route.meta.pAuthorities, route.meta.authority]
|
|
57
|
+
for (const authority of authorities) {
|
|
58
|
+
if (!hasPermission(authority, permissions) && !hasRole(authority, roles)) {
|
|
59
|
+
return false
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return true
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* 根据权限配置过滤菜单数据
|
|
67
|
+
* @param menuData
|
|
68
|
+
* @param permissions
|
|
69
|
+
* @param roles
|
|
70
|
+
*/
|
|
71
|
+
function filterMenu (menuData, permissions, roles) {
|
|
72
|
+
return menuData.filter(menu => {
|
|
73
|
+
if (menu.meta && menu.meta.invisible === undefined) {
|
|
74
|
+
if (!hasAuthority(menu, permissions, roles)) {
|
|
75
|
+
return false
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (menu.children && menu.children.length > 0) {
|
|
79
|
+
menu.children = filterMenu(menu.children, permissions, roles)
|
|
80
|
+
}
|
|
81
|
+
return true
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { filterMenu, hasAuthority }
|
package/src/utils/errorCode.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
401: '认证失败,无法访问系统资源',
|
|
3
|
-
403: '当前操作没有权限',
|
|
4
|
-
404: '访问资源不存在',
|
|
5
|
-
default: '系统未知错误,请反馈给管理员'
|
|
6
|
-
}
|
|
1
|
+
export default {
|
|
2
|
+
401: '认证失败,无法访问系统资源',
|
|
3
|
+
403: '当前操作没有权限',
|
|
4
|
+
404: '访问资源不存在',
|
|
5
|
+
default: '系统未知错误,请反馈给管理员'
|
|
6
|
+
}
|