vue2-client 1.18.39 → 1.18.40

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 (102) hide show
  1. package/.eslintrc.js +90 -90
  2. package/Components.md +60 -60
  3. package/docs/index.md +30 -30
  4. package/docs//350/257/267/346/261/202/345/267/245/345/205/267/344/275/277/347/224/250/350/257/264/346/230/216.md +353 -0
  5. package/index.js +31 -31
  6. package/jest-transform-stub.js +8 -8
  7. package/jest.setup.js +7 -7
  8. package/package.json +1 -1
  9. package/src/assets/img/querySlotDemo.svg +15 -15
  10. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  11. package/src/base-client/components/common/CitySelect/index.js +3 -3
  12. package/src/base-client/components/common/CitySelect/index.md +109 -109
  13. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  14. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  15. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  16. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  17. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  18. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  19. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  20. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  21. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  22. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  23. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  24. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  25. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  26. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  27. package/src/base-client/components/common/Tree/index.js +2 -2
  28. package/src/base-client/components/common/Upload/index.js +3 -3
  29. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  30. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  31. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  32. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  33. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  34. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  35. package/src/base-client/components/common/XDescriptions/index.md +322 -322
  36. package/src/base-client/components/common/XForm/index.md +178 -178
  37. package/src/base-client/components/common/XFormTable/demo.vue +2 -4
  38. package/src/base-client/components/common/XReport/print.js +186 -186
  39. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +1 -1
  40. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  41. package/src/base-client/components/common/XStepView/index.js +3 -3
  42. package/src/base-client/components/common/XStepView/index.md +31 -31
  43. package/src/base-client/components/common/XTable/XTable.vue +1715 -1715
  44. package/src/base-client/components/common/XTable/XTableWrapper.vue +786 -769
  45. package/src/base-client/components/common/XTable/index.md +255 -255
  46. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  47. package/src/base-client/plugins/Config.js +19 -19
  48. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  49. package/src/components/Charts/Bar.vue +62 -62
  50. package/src/components/Charts/ChartCard.vue +134 -134
  51. package/src/components/Charts/Liquid.vue +67 -67
  52. package/src/components/Charts/MiniArea.vue +39 -39
  53. package/src/components/Charts/MiniBar.vue +39 -39
  54. package/src/components/Charts/MiniProgress.vue +75 -75
  55. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  56. package/src/components/Charts/Radar.vue +68 -68
  57. package/src/components/Charts/RankList.vue +77 -77
  58. package/src/components/Charts/TagCloud.vue +113 -113
  59. package/src/components/Charts/TransferBar.vue +64 -64
  60. package/src/components/Charts/Trend.vue +82 -82
  61. package/src/components/Charts/chart.less +12 -12
  62. package/src/components/Charts/smooth.area.less +13 -13
  63. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  64. package/src/components/NumberInfo/index.js +3 -3
  65. package/src/components/NumberInfo/index.less +54 -54
  66. package/src/components/NumberInfo/index.md +43 -43
  67. package/src/components/card/ChartCard.vue +79 -79
  68. package/src/components/chart/Bar.vue +60 -60
  69. package/src/components/chart/MiniArea.vue +67 -67
  70. package/src/components/chart/MiniBar.vue +59 -59
  71. package/src/components/chart/MiniProgress.vue +57 -57
  72. package/src/components/chart/Radar.vue +80 -80
  73. package/src/components/chart/RankingList.vue +60 -60
  74. package/src/components/chart/Trend.vue +79 -79
  75. package/src/components/chart/index.less +9 -9
  76. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  77. package/src/components/input/IInput.vue +66 -66
  78. package/src/components/menu/SideMenu.vue +75 -75
  79. package/src/components/menu/menu.js +273 -273
  80. package/src/components/tool/AStepItem.vue +60 -60
  81. package/src/composables/demo/UseRequestDemo.vue +175 -0
  82. package/src/composables/index.js +6 -0
  83. package/src/composables/useGlobalLoading.js +206 -0
  84. package/src/composables/usePost.js +221 -0
  85. package/src/layouts/CommonLayout.vue +56 -56
  86. package/src/layouts/header/HeaderNotice.vue +177 -177
  87. package/src/lib.js +1 -1
  88. package/src/mock/extend/index.js +84 -84
  89. package/src/mock/goods/index.js +108 -108
  90. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  91. package/src/pages/system/dictionary/index.vue +44 -44
  92. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  93. package/src/pages/system/monitor/operLog/index.vue +37 -37
  94. package/src/services/api/cas.js +79 -79
  95. package/src/services/api/restTools.js +34 -46
  96. package/src/store/modules/setting.js +119 -119
  97. package/src/utils/authority-utils.js +85 -85
  98. package/src/utils/errorCode.js +6 -6
  99. package/src/utils/map-utils.js +47 -47
  100. package/src/utils/request.js +103 -0
  101. package/vue.config.js +9 -4
  102. 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>
@@ -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,5 +1,6 @@
1
1
  import { getSystemVersion, METHOD, request } from '@vue2-client/utils/request'
2
2
  import { ACCESS_TOKEN, V4_ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
3
+ import { showGlobalLoading, hideGlobalLoading } from '@vue2-client/composables/useGlobalLoading'
3
4
 
4
5
  /**
5
6
  * GET请求
@@ -15,21 +16,31 @@ function get (url, parameter) {
15
16
  * POST请求
16
17
  * @param url 请求地址
17
18
  * @param parameter 请求参数
18
- * @param config
19
+ * @param config 配置项
20
+ * @param {boolean|string} config.globalLoading - 是否显示全局 Loading,可传入字符串作为提示文字
21
+ * @param {boolean} config.dedupe - 是否启用请求去重(POST 默认开启,设为 false 可关闭)
19
22
  * @returns {Promise<AxiosResponse<T>>}
20
23
  */
21
24
  function post (url, parameter, config = {}) {
22
- return request(url, METHOD.POST, parameter, config)
25
+ const { globalLoading, ...axiosConfig } = config
26
+
27
+ // 全局 Loading - 请求开始时显示
28
+ if (globalLoading) {
29
+ showGlobalLoading(globalLoading)
30
+ }
31
+
32
+ // 发起请求
33
+ return request(url, METHOD.POST, parameter, axiosConfig)
34
+ .finally(() => {
35
+ // 请求结束时隐藏全局 Loading
36
+ if (globalLoading) {
37
+ hideGlobalLoading()
38
+ }
39
+ })
23
40
  }
24
41
 
25
42
  /**
26
- * POST请求
27
- * @param url 请求地址
28
- * @param parameter 请求参数
29
- * @param serviceName
30
- * @param isDev
31
- * @param config
32
- * @returns {Promise<AxiosResponse<T>>}
43
+ * POST请求(按服务名)
33
44
  */
34
45
  function postByServiceName (url, parameter, serviceName = process.env.VUE_APP_SYSTEM_NAME, isDev, config = {}) {
35
46
  if (url.startsWith('api/') || url.startsWith('/api/')) {
@@ -76,11 +87,14 @@ function put (url, parameter, config = {}) {
76
87
  * @param {Function} onError - 错误处理回调
77
88
  * @returns {Function} - 用于取消请求的函数
78
89
  */
79
- function startEventStreamPOST (url, params, headers = {}, onDataUpdate, onError, serviceName = process.env.VUE_APP_SYSTEM_NAME, method = 'GET') {
90
+ function startEventStreamPOST (url, params, headers = {}, onDataUpdate, onError, serviceName = process.env.VUE_APP_SYSTEM_NAME) {
80
91
  return startEventStream(url, params, headers, onDataUpdate, onError, serviceName, 'POST')
81
92
  }
93
+
94
+ /**
95
+ * EventSource 请求
96
+ */
82
97
  function startEventStream (url, params, headers = {}, onDataUpdate, onError, serviceName = process.env.VUE_APP_SYSTEM_NAME, method = 'GET') {
83
- // let isStopped = false
84
98
  let isStopped = false
85
99
  let requestCount = 0
86
100
 
@@ -91,25 +105,21 @@ function startEventStream (url, params, headers = {}, onDataUpdate, onError, ser
91
105
  url = '/api/' + serviceName + url
92
106
  }
93
107
 
94
- console.log(`[EventStream] 开始新的请求: ${url}`, {
95
- params,
96
- headers,
97
- method
98
- })
108
+ console.log(`[EventStream] 开始新的请求: ${url}`, { params, headers, method })
99
109
 
100
110
  const controller = new AbortController()
101
111
  const { signal } = controller
102
112
  const token = localStorage.getItem(ACCESS_TOKEN)
103
- // 增加 V4 登录请求头
113
+
104
114
  if (token) {
105
115
  const compatible = getSystemVersion()
106
116
  if (compatible === 'V4') {
107
- // V4 环境则添加 V4请求头
108
117
  headers[V4_ACCESS_TOKEN] = token
109
118
  } else {
110
119
  headers[ACCESS_TOKEN] = token
111
120
  }
112
121
  }
122
+
113
123
  fetch(url, {
114
124
  method: method,
115
125
  headers: {
@@ -126,20 +136,14 @@ function startEventStream (url, params, headers = {}, onDataUpdate, onError, ser
126
136
  }
127
137
 
128
138
  requestCount++
129
- console.log(`[EventStream] 请求已打开 (第${requestCount}次): ${url}`, {
130
- status: response.status,
131
- statusText: response.statusText
132
- })
139
+ console.log(`[EventStream] 请求已打开 (第${requestCount}次): ${url}`)
133
140
 
134
141
  const reader = response.body.getReader()
135
142
  const decoder = new TextDecoder()
136
143
  let buffer = ''
137
144
 
138
145
  function processStream () {
139
- if (isStopped) {
140
- console.log(`[EventStream] 请求已停止,停止读取流: ${url}`)
141
- return
142
- }
146
+ if (isStopped) return
143
147
 
144
148
  reader.read().then(({ done, value }) => {
145
149
  if (done) {
@@ -150,38 +154,23 @@ function startEventStream (url, params, headers = {}, onDataUpdate, onError, ser
150
154
  const chunk = decoder.decode(value, { stream: true })
151
155
  buffer += chunk
152
156
 
153
- // 处理接收到的数据
154
157
  const lines = buffer.split('\n')
155
- buffer = lines.pop() // 保留最后一个不完整的行
158
+ buffer = lines.pop()
156
159
 
157
160
  let currentEvent = null
158
- let currentData = null
159
161
 
160
162
  for (const line of lines) {
161
163
  if (line.startsWith('event: ')) {
162
164
  currentEvent = line.slice(7)
163
165
  } else if (line.startsWith('data: ')) {
164
- currentData = line.slice(6)
166
+ const currentData = line.slice(6)
165
167
  try {
166
168
  const parsedData = JSON.parse(currentData)
167
- if (currentEvent === 'additionalInfo') {
168
- // 触发 additionalInfo 回调
169
- onDataUpdate?.(parsedData, 'additionalInfo')
170
- } else {
171
- // 普通消息数据
172
- onDataUpdate?.(parsedData, 'sourceInfo')
173
- }
169
+ onDataUpdate?.(parsedData, currentEvent === 'additionalInfo' ? 'additionalInfo' : 'sourceInfo')
174
170
  } catch (e) {
175
- if (currentEvent === 'sourceInfo') {
176
- // 触发 sourceInfo 回调
177
- onDataUpdate?.(currentData, 'sourceInfo')
178
- } else {
179
- onDataUpdate?.(currentData, 'data')
180
- }
171
+ onDataUpdate?.(currentData, currentEvent === 'sourceInfo' ? 'sourceInfo' : 'data')
181
172
  }
182
- // 重置当前事件和数据
183
173
  currentEvent = null
184
- currentData = null
185
174
  }
186
175
  }
187
176
 
@@ -204,7 +193,6 @@ function startEventStream (url, params, headers = {}, onDataUpdate, onError, ser
204
193
  }
205
194
  })
206
195
 
207
- // 返回停止函数
208
196
  return () => {
209
197
  isStopped = true
210
198
  controller.abort()
@@ -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
+ }