vue2-client 1.8.166 → 1.8.167

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 (167) hide show
  1. package/.env +19 -19
  2. package/.eslintrc.js +90 -90
  3. package/CHANGELOG.md +824 -824
  4. package/Components.md +60 -60
  5. package/babel.config.js +21 -21
  6. package/docs/index.md +30 -30
  7. package/index.js +31 -31
  8. package/jest-transform-stub.js +8 -8
  9. package/jest.config.js +21 -21
  10. package/jest.setup.js +7 -7
  11. package/package.json +97 -97
  12. package/public/index.html +27 -27
  13. package/src/App.vue +164 -164
  14. package/src/ReportView.js +19 -19
  15. package/src/assets/img/querySlotDemo.svg +15 -15
  16. package/src/assets/svg/badtwo.svg +1 -1
  17. package/src/assets/svg/goodtwo.svg +1 -1
  18. package/src/base-client/components/common/AMisRender/index.js +3 -3
  19. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  20. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +316 -316
  21. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  22. package/src/base-client/components/common/CitySelect/index.js +3 -3
  23. package/src/base-client/components/common/CitySelect/index.md +109 -109
  24. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  25. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  26. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  27. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  28. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  29. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  30. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  31. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  32. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  33. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  34. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  35. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  36. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  37. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  38. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  39. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  40. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  41. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  42. package/src/base-client/components/common/Tree/index.js +2 -2
  43. package/src/base-client/components/common/Upload/Upload.vue +197 -197
  44. package/src/base-client/components/common/Upload/index.js +3 -3
  45. package/src/base-client/components/common/XAddForm/XAddForm.vue +92 -92
  46. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +502 -502
  47. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  48. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  49. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  50. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  51. package/src/base-client/components/common/XBadge/XBadge.vue +78 -78
  52. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  53. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  54. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  55. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  56. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +117 -117
  57. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  58. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  59. package/src/base-client/components/common/XForm/XForm.vue +253 -253
  60. package/src/base-client/components/common/XForm/XFormItem.vue +545 -545
  61. package/src/base-client/components/common/XForm/XTreeSelect.vue +191 -191
  62. package/src/base-client/components/common/XForm/index.md +178 -178
  63. package/src/base-client/components/common/XFormCol/XFormCol.vue +38 -38
  64. package/src/base-client/components/common/XFormTable/XFormTable.vue +418 -418
  65. package/src/base-client/components/common/XFormTable/index.md +98 -98
  66. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +131 -131
  67. package/src/base-client/components/common/XReport/XReport.vue +694 -694
  68. package/src/base-client/components/common/XReport/XReportDesign.vue +423 -414
  69. package/src/base-client/components/common/XReport/XReportTrGroup.vue +602 -596
  70. package/src/base-client/components/common/XReport/index.js +3 -3
  71. package/src/base-client/components/common/XReport/index.md +44 -44
  72. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  73. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  74. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  75. package/src/base-client/components/common/XStepView/index.js +3 -3
  76. package/src/base-client/components/common/XStepView/index.md +31 -31
  77. package/src/base-client/components/common/XTable/XTable.vue +549 -549
  78. package/src/base-client/components/common/XTable/index.md +255 -255
  79. package/src/base-client/components/common/XTree/XTree.vue +76 -76
  80. package/src/base-client/components/common/XTree/index.js +3 -3
  81. package/src/base-client/components/common/XTree/index.md +36 -36
  82. package/src/base-client/components/index.js +47 -47
  83. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  84. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  85. package/src/base-client/plugins/AppData.js +115 -115
  86. package/src/base-client/plugins/Config.js +19 -19
  87. package/src/base-client/plugins/GetLoginInfoService.js +182 -182
  88. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  89. package/src/bootstrap.js +39 -39
  90. package/src/components/CodeMirror/inedx.vue +118 -118
  91. package/src/components/CodeMirror/setting.js +40 -40
  92. package/src/components/FilePreview/FilePreview.vue +166 -166
  93. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  94. package/src/components/STable/index.js +323 -323
  95. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  96. package/src/components/checkbox/ImgCheckbox.vue +163 -163
  97. package/src/components/menu/SideMenu.vue +75 -75
  98. package/src/components/menu/menu.js +273 -273
  99. package/src/components/tool/AStepItem.vue +60 -60
  100. package/src/config/CreateQueryConfig.js +322 -322
  101. package/src/config/default/antd.config.js +89 -89
  102. package/src/config/default/setting.config.js +53 -53
  103. package/src/font-style/font.css +4 -4
  104. package/src/layouts/CommonLayout.vue +56 -56
  105. package/src/layouts/PageLayout.vue +151 -151
  106. package/src/layouts/SinglePageView.vue +138 -138
  107. package/src/layouts/header/AdminHeader.vue +132 -132
  108. package/src/layouts/header/HeaderNotice.vue +177 -177
  109. package/src/layouts/tabs/TabsHead.vue +189 -189
  110. package/src/layouts/tabs/TabsView.vue +387 -387
  111. package/src/lib.js +1 -1
  112. package/src/main.js +26 -26
  113. package/src/mock/extend/index.js +84 -84
  114. package/src/mock/goods/index.js +108 -108
  115. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  116. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  117. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  118. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  119. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  120. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  121. package/src/pages/DynamicStatistics/FavoriteList.vue +51 -51
  122. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  123. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  124. package/src/pages/DynamicStatistics/index.vue +282 -282
  125. package/src/pages/Example/index.vue +1432 -1305
  126. package/src/pages/ServiceReview/index.vue +284 -284
  127. package/src/pages/XReportView/index.vue +62 -62
  128. package/src/pages/login/Login.vue +378 -378
  129. package/src/pages/login/LoginV3.vue +389 -389
  130. package/src/pages/resourceManage/orgListManage.vue +98 -98
  131. package/src/pages/system/dictionary/index.vue +44 -44
  132. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  133. package/src/pages/system/monitor/operLog/index.vue +37 -37
  134. package/src/pages/system/settings/modifyPassword.vue +117 -117
  135. package/src/pages/system/ticket/index.vue +480 -480
  136. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  137. package/src/router/async/config.async.js +32 -32
  138. package/src/router/async/router.map.js +98 -98
  139. package/src/router/guards.js +214 -214
  140. package/src/router/index.js +27 -27
  141. package/src/router.js +18 -18
  142. package/src/services/api/TicketDetailsViewApi.js +46 -46
  143. package/src/services/api/cas.js +79 -79
  144. package/src/services/api/common.js +274 -274
  145. package/src/services/api/entity.js +18 -18
  146. package/src/services/api/index.js +17 -17
  147. package/src/services/api/restTools.js +46 -46
  148. package/src/services/apiService.js +14 -14
  149. package/src/services/user.js +71 -71
  150. package/src/store/modules/setting.js +119 -119
  151. package/src/theme/default/style.less +57 -57
  152. package/src/utils/authority-utils.js +85 -85
  153. package/src/utils/errorCode.js +6 -6
  154. package/src/utils/htmlToPDF.js +108 -108
  155. package/src/utils/htmlToPDFApi.js +5 -5
  156. package/src/utils/indexedDB.js +201 -201
  157. package/src/utils/login.js +141 -141
  158. package/src/utils/map-utils.js +47 -47
  159. package/src/utils/request.js +343 -343
  160. package/src/utils/routerUtil.js +428 -428
  161. package/src/utils/util.js +231 -231
  162. package/src/utils/waterMark.js +31 -31
  163. package/test/Amis.spec.js +163 -163
  164. package/test/Tree.spec.js +167 -167
  165. package/test/myDialog.spec.js +46 -46
  166. package/vue.config.js +166 -166
  167. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
@@ -1,273 +1,273 @@
1
- /**
2
- * 该插件可根据菜单配置自动生成 ANTD menu组件
3
- * menuOptions示例:
4
- * [
5
- * {
6
- * name: '菜单名称',
7
- * path: '菜单路由',
8
- * meta: {
9
- * icon: '菜单图标',
10
- * invisible: 'boolean, 是否不可见, 默认 false',
11
- * },
12
- * children: [子菜单配置]
13
- * },
14
- * {
15
- * name: '菜单名称',
16
- * path: '菜单路由',
17
- * meta: {
18
- * icon: '菜单图标',
19
- * invisible: 'boolean, 是否不可见, 默认 false',
20
- * },
21
- * children: [子菜单配置]
22
- * }
23
- * ]
24
- *
25
- * i18n: 国际化配置。系统默认会根据 options route配置的 path 和 name 生成英文以及中文的国际化配置,如需自定义或增加其他语言,配置
26
- * 此项即可。如:
27
- * i18n: {
28
- * messages: {
29
- * CN: {dashboard: {name: '监控中心'}}
30
- * HK: {dashboard: {name: '監控中心'}}
31
- * }
32
- * }
33
- **/
34
- import Menu from 'ant-design-vue/es/menu'
35
- import Icon from 'ant-design-vue/es/icon'
36
- import fastEqual from 'fast-deep-equal'
37
- import { getI18nKey } from '@vue2-client/utils/routerUtil'
38
- import { mapMutations } from 'vuex'
39
-
40
- const { Item, SubMenu } = Menu
41
-
42
- const resolvePath = (path, params = {}) => {
43
- let _path = path
44
- Object.entries(params).forEach(([key, value]) => {
45
- _path = _path.replace(new RegExp(`:${key}`, 'g'), value)
46
- })
47
- return _path
48
- }
49
-
50
- const toRoutesMap = (routes) => {
51
- const map = {}
52
- routes.forEach(route => {
53
- map[route.fullPath] = route
54
- if (route.children && route.children.length > 0) {
55
- const childrenMap = toRoutesMap(route.children)
56
- Object.assign(map, childrenMap)
57
- }
58
- })
59
- return map
60
- }
61
-
62
- export default {
63
- name: 'IMenu',
64
- props: {
65
- options: {
66
- type: Array,
67
- required: true
68
- },
69
- theme: {
70
- type: String,
71
- required: false,
72
- default: 'dark'
73
- },
74
- mode: {
75
- type: String,
76
- required: false,
77
- default: 'inline'
78
- },
79
- collapsed: {
80
- type: Boolean,
81
- required: false,
82
- default: false
83
- },
84
- i18n: Object,
85
- openKeys: Array
86
- },
87
- data () {
88
- return {
89
- selectedKeys: [],
90
- sOpenKeys: [],
91
- cachedOpenKeys: []
92
- }
93
- },
94
- computed: {
95
- menuTheme () {
96
- return this.theme === 'light' ? this.theme : 'dark'
97
- },
98
- routesMap () {
99
- return toRoutesMap(this.options)
100
- }
101
- },
102
- created () {
103
- this.updateMenu()
104
- if (this.options.length > 0 && !this.options[0].fullPath) {
105
- this.formatOptions(this.options, '')
106
- }
107
- // 自定义国际化配置
108
- if (this.i18n && this.i18n.messages) {
109
- const messages = this.i18n.messages
110
- Object.keys(messages).forEach(key => {
111
- this.$i18n.mergeLocaleMessage(key, messages[key])
112
- })
113
- }
114
- },
115
- watch: {
116
- options (val) {
117
- if (val.length > 0 && !val[0].fullPath) {
118
- this.formatOptions(this.options, '')
119
- }
120
- },
121
- i18n (val) {
122
- if (val && val.messages) {
123
- const messages = this.i18n.messages
124
- Object.keys(messages).forEach(key => {
125
- this.$i18n.mergeLocaleMessage(key, messages[key])
126
- })
127
- }
128
- },
129
- collapsed (val) {
130
- if (val) {
131
- this.cachedOpenKeys = this.sOpenKeys
132
- this.sOpenKeys = []
133
- } else {
134
- this.sOpenKeys = this.cachedOpenKeys
135
- }
136
- },
137
- $route: function () {
138
- if (this.$route.meta && this.$route.meta.singlePage) {
139
- this.setSingle(this.$route)
140
- }
141
- this.updateMenu()
142
- },
143
- sOpenKeys (val) {
144
- this.$emit('openChange', val)
145
- this.$emit('update:openKeys', val)
146
- }
147
- },
148
- methods: {
149
- ...mapMutations('account', ['setSingle']),
150
- renderIcon: function (h, icon, key) {
151
- if (this.$scopedSlots.icon && icon && icon !== 'none') {
152
- const vnodes = this.$scopedSlots.icon({ icon, key })
153
- vnodes.forEach(vnode => {
154
- vnode.data.class = vnode.data.class ? vnode.data.class : []
155
- vnode.data.class.push('anticon')
156
- })
157
- return vnodes
158
- }
159
- return !icon || icon === 'none' ? null : h(Icon, { props: { type: icon } })
160
- },
161
- renderMenuItem: function (h, menu) {
162
- let tag = 'router-link'
163
- const path = resolvePath(menu.fullPath, menu.meta.params)
164
- let config = { props: { to: { path, query: menu.meta.query } }, attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;' } }
165
- if (menu.meta && menu.meta.link) {
166
- tag = 'a'
167
- config = { attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;', href: menu.meta.link, target: '_blank' } }
168
- }
169
- return h(
170
- Item, { key: menu.fullPath },
171
- [
172
- h(tag, config,
173
- [
174
- this.renderIcon(h, menu.meta ? menu.meta.icon : 'none', menu.fullPath),
175
- this.$t(getI18nKey(menu.fullPath))
176
- ]
177
- )
178
- ]
179
- )
180
- },
181
- renderSubMenu: function (h, menu) {
182
- const this_ = this
183
- const subItem = [h('span', { slot: 'title', attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;' } },
184
- [
185
- this.renderIcon(h, menu.meta ? menu.meta.icon : 'none', menu.fullPath),
186
- this.$t(getI18nKey(menu.fullPath))
187
- ]
188
- )]
189
- const itemArr = []
190
- menu.children.forEach(function (item) {
191
- itemArr.push(this_.renderItem(h, item))
192
- })
193
- return h(SubMenu, { key: menu.fullPath },
194
- subItem.concat(itemArr)
195
- )
196
- },
197
- renderItem: function (h, menu) {
198
- const meta = menu.meta
199
- if (!meta || !meta.invisible) {
200
- let renderChildren = false
201
- const children = menu.children
202
- if (children !== undefined) {
203
- for (let i = 0; i < children.length; i++) {
204
- const childMeta = children[i].meta
205
- if (!childMeta || !childMeta.invisible) {
206
- renderChildren = true
207
- break
208
- }
209
- }
210
- }
211
- return (menu.children && renderChildren) ? this.renderSubMenu(h, menu) : this.renderMenuItem(h, menu)
212
- }
213
- },
214
- renderMenu: function (h, menuTree) {
215
- const this_ = this
216
- const menuArr = []
217
- menuTree.forEach(function (menu, i) {
218
- menuArr.push(this_.renderItem(h, menu, '0', i))
219
- })
220
- return menuArr
221
- },
222
- formatOptions (options, parentPath) {
223
- options.forEach(route => {
224
- const isFullPath = route.path.substring(0, 1) === '/'
225
- route.fullPath = isFullPath ? route.path : parentPath + '/' + route.path
226
- if (route.children) {
227
- this.formatOptions(route.children, route.fullPath)
228
- }
229
- })
230
- },
231
- updateMenu () {
232
- this.selectedKeys = this.getSelectedKeys()
233
- let openKeys = this.selectedKeys.filter(item => item !== '')
234
- openKeys = openKeys.slice(0, openKeys.length - 1)
235
- if (!fastEqual(openKeys, this.sOpenKeys)) {
236
- this.collapsed || this.mode === 'horizontal' ? this.cachedOpenKeys = openKeys : this.sOpenKeys = openKeys
237
- }
238
- },
239
- getSelectedKeys () {
240
- let matches = this.$route.matched
241
- const route = matches[matches.length - 1]
242
- let chose = this.routesMap[route.path]
243
- if (chose && chose.meta && chose.meta.highlight) {
244
- chose = this.routesMap[chose.meta.highlight]
245
- const resolve = this.$router.resolve({ path: chose.fullPath })
246
- matches = (resolve.resolved && resolve.resolved.matched) || matches
247
- }
248
- return matches.map(item => item.path)
249
- }
250
- },
251
- render (h) {
252
- return h(
253
- Menu,
254
- {
255
- props: {
256
- theme: this.menuTheme,
257
- mode: this.$props.mode,
258
- selectedKeys: this.selectedKeys,
259
- openKeys: this.openKeys ? this.openKeys : this.sOpenKeys
260
- },
261
- on: {
262
- 'update:openKeys': (val) => {
263
- this.sOpenKeys = val
264
- },
265
- click: (obj) => {
266
- obj.selectedKeys = [obj.key]
267
- this.$emit('select', obj)
268
- }
269
- }
270
- }, this.renderMenu(h, this.options)
271
- )
272
- }
273
- }
1
+ /**
2
+ * 该插件可根据菜单配置自动生成 ANTD menu组件
3
+ * menuOptions示例:
4
+ * [
5
+ * {
6
+ * name: '菜单名称',
7
+ * path: '菜单路由',
8
+ * meta: {
9
+ * icon: '菜单图标',
10
+ * invisible: 'boolean, 是否不可见, 默认 false',
11
+ * },
12
+ * children: [子菜单配置]
13
+ * },
14
+ * {
15
+ * name: '菜单名称',
16
+ * path: '菜单路由',
17
+ * meta: {
18
+ * icon: '菜单图标',
19
+ * invisible: 'boolean, 是否不可见, 默认 false',
20
+ * },
21
+ * children: [子菜单配置]
22
+ * }
23
+ * ]
24
+ *
25
+ * i18n: 国际化配置。系统默认会根据 options route配置的 path 和 name 生成英文以及中文的国际化配置,如需自定义或增加其他语言,配置
26
+ * 此项即可。如:
27
+ * i18n: {
28
+ * messages: {
29
+ * CN: {dashboard: {name: '监控中心'}}
30
+ * HK: {dashboard: {name: '監控中心'}}
31
+ * }
32
+ * }
33
+ **/
34
+ import Menu from 'ant-design-vue/es/menu'
35
+ import Icon from 'ant-design-vue/es/icon'
36
+ import fastEqual from 'fast-deep-equal'
37
+ import { getI18nKey } from '@vue2-client/utils/routerUtil'
38
+ import { mapMutations } from 'vuex'
39
+
40
+ const { Item, SubMenu } = Menu
41
+
42
+ const resolvePath = (path, params = {}) => {
43
+ let _path = path
44
+ Object.entries(params).forEach(([key, value]) => {
45
+ _path = _path.replace(new RegExp(`:${key}`, 'g'), value)
46
+ })
47
+ return _path
48
+ }
49
+
50
+ const toRoutesMap = (routes) => {
51
+ const map = {}
52
+ routes.forEach(route => {
53
+ map[route.fullPath] = route
54
+ if (route.children && route.children.length > 0) {
55
+ const childrenMap = toRoutesMap(route.children)
56
+ Object.assign(map, childrenMap)
57
+ }
58
+ })
59
+ return map
60
+ }
61
+
62
+ export default {
63
+ name: 'IMenu',
64
+ props: {
65
+ options: {
66
+ type: Array,
67
+ required: true
68
+ },
69
+ theme: {
70
+ type: String,
71
+ required: false,
72
+ default: 'dark'
73
+ },
74
+ mode: {
75
+ type: String,
76
+ required: false,
77
+ default: 'inline'
78
+ },
79
+ collapsed: {
80
+ type: Boolean,
81
+ required: false,
82
+ default: false
83
+ },
84
+ i18n: Object,
85
+ openKeys: Array
86
+ },
87
+ data () {
88
+ return {
89
+ selectedKeys: [],
90
+ sOpenKeys: [],
91
+ cachedOpenKeys: []
92
+ }
93
+ },
94
+ computed: {
95
+ menuTheme () {
96
+ return this.theme === 'light' ? this.theme : 'dark'
97
+ },
98
+ routesMap () {
99
+ return toRoutesMap(this.options)
100
+ }
101
+ },
102
+ created () {
103
+ this.updateMenu()
104
+ if (this.options.length > 0 && !this.options[0].fullPath) {
105
+ this.formatOptions(this.options, '')
106
+ }
107
+ // 自定义国际化配置
108
+ if (this.i18n && this.i18n.messages) {
109
+ const messages = this.i18n.messages
110
+ Object.keys(messages).forEach(key => {
111
+ this.$i18n.mergeLocaleMessage(key, messages[key])
112
+ })
113
+ }
114
+ },
115
+ watch: {
116
+ options (val) {
117
+ if (val.length > 0 && !val[0].fullPath) {
118
+ this.formatOptions(this.options, '')
119
+ }
120
+ },
121
+ i18n (val) {
122
+ if (val && val.messages) {
123
+ const messages = this.i18n.messages
124
+ Object.keys(messages).forEach(key => {
125
+ this.$i18n.mergeLocaleMessage(key, messages[key])
126
+ })
127
+ }
128
+ },
129
+ collapsed (val) {
130
+ if (val) {
131
+ this.cachedOpenKeys = this.sOpenKeys
132
+ this.sOpenKeys = []
133
+ } else {
134
+ this.sOpenKeys = this.cachedOpenKeys
135
+ }
136
+ },
137
+ $route: function () {
138
+ if (this.$route.meta && this.$route.meta.singlePage) {
139
+ this.setSingle(this.$route)
140
+ }
141
+ this.updateMenu()
142
+ },
143
+ sOpenKeys (val) {
144
+ this.$emit('openChange', val)
145
+ this.$emit('update:openKeys', val)
146
+ }
147
+ },
148
+ methods: {
149
+ ...mapMutations('account', ['setSingle']),
150
+ renderIcon: function (h, icon, key) {
151
+ if (this.$scopedSlots.icon && icon && icon !== 'none') {
152
+ const vnodes = this.$scopedSlots.icon({ icon, key })
153
+ vnodes.forEach(vnode => {
154
+ vnode.data.class = vnode.data.class ? vnode.data.class : []
155
+ vnode.data.class.push('anticon')
156
+ })
157
+ return vnodes
158
+ }
159
+ return !icon || icon === 'none' ? null : h(Icon, { props: { type: icon } })
160
+ },
161
+ renderMenuItem: function (h, menu) {
162
+ let tag = 'router-link'
163
+ const path = resolvePath(menu.fullPath, menu.meta.params)
164
+ let config = { props: { to: { path, query: menu.meta.query } }, attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;' } }
165
+ if (menu.meta && menu.meta.link) {
166
+ tag = 'a'
167
+ config = { attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;', href: menu.meta.link, target: '_blank' } }
168
+ }
169
+ return h(
170
+ Item, { key: menu.fullPath },
171
+ [
172
+ h(tag, config,
173
+ [
174
+ this.renderIcon(h, menu.meta ? menu.meta.icon : 'none', menu.fullPath),
175
+ this.$t(getI18nKey(menu.fullPath))
176
+ ]
177
+ )
178
+ ]
179
+ )
180
+ },
181
+ renderSubMenu: function (h, menu) {
182
+ const this_ = this
183
+ const subItem = [h('span', { slot: 'title', attrs: { style: 'overflow:hidden;white-space:normal;text-overflow:clip;' } },
184
+ [
185
+ this.renderIcon(h, menu.meta ? menu.meta.icon : 'none', menu.fullPath),
186
+ this.$t(getI18nKey(menu.fullPath))
187
+ ]
188
+ )]
189
+ const itemArr = []
190
+ menu.children.forEach(function (item) {
191
+ itemArr.push(this_.renderItem(h, item))
192
+ })
193
+ return h(SubMenu, { key: menu.fullPath },
194
+ subItem.concat(itemArr)
195
+ )
196
+ },
197
+ renderItem: function (h, menu) {
198
+ const meta = menu.meta
199
+ if (!meta || !meta.invisible) {
200
+ let renderChildren = false
201
+ const children = menu.children
202
+ if (children !== undefined) {
203
+ for (let i = 0; i < children.length; i++) {
204
+ const childMeta = children[i].meta
205
+ if (!childMeta || !childMeta.invisible) {
206
+ renderChildren = true
207
+ break
208
+ }
209
+ }
210
+ }
211
+ return (menu.children && renderChildren) ? this.renderSubMenu(h, menu) : this.renderMenuItem(h, menu)
212
+ }
213
+ },
214
+ renderMenu: function (h, menuTree) {
215
+ const this_ = this
216
+ const menuArr = []
217
+ menuTree.forEach(function (menu, i) {
218
+ menuArr.push(this_.renderItem(h, menu, '0', i))
219
+ })
220
+ return menuArr
221
+ },
222
+ formatOptions (options, parentPath) {
223
+ options.forEach(route => {
224
+ const isFullPath = route.path.substring(0, 1) === '/'
225
+ route.fullPath = isFullPath ? route.path : parentPath + '/' + route.path
226
+ if (route.children) {
227
+ this.formatOptions(route.children, route.fullPath)
228
+ }
229
+ })
230
+ },
231
+ updateMenu () {
232
+ this.selectedKeys = this.getSelectedKeys()
233
+ let openKeys = this.selectedKeys.filter(item => item !== '')
234
+ openKeys = openKeys.slice(0, openKeys.length - 1)
235
+ if (!fastEqual(openKeys, this.sOpenKeys)) {
236
+ this.collapsed || this.mode === 'horizontal' ? this.cachedOpenKeys = openKeys : this.sOpenKeys = openKeys
237
+ }
238
+ },
239
+ getSelectedKeys () {
240
+ let matches = this.$route.matched
241
+ const route = matches[matches.length - 1]
242
+ let chose = this.routesMap[route.path]
243
+ if (chose && chose.meta && chose.meta.highlight) {
244
+ chose = this.routesMap[chose.meta.highlight]
245
+ const resolve = this.$router.resolve({ path: chose.fullPath })
246
+ matches = (resolve.resolved && resolve.resolved.matched) || matches
247
+ }
248
+ return matches.map(item => item.path)
249
+ }
250
+ },
251
+ render (h) {
252
+ return h(
253
+ Menu,
254
+ {
255
+ props: {
256
+ theme: this.menuTheme,
257
+ mode: this.$props.mode,
258
+ selectedKeys: this.selectedKeys,
259
+ openKeys: this.openKeys ? this.openKeys : this.sOpenKeys
260
+ },
261
+ on: {
262
+ 'update:openKeys': (val) => {
263
+ this.sOpenKeys = val
264
+ },
265
+ click: (obj) => {
266
+ obj.selectedKeys = [obj.key]
267
+ this.$emit('select', obj)
268
+ }
269
+ }
270
+ }, this.renderMenu(h, this.options)
271
+ )
272
+ }
273
+ }
@@ -1,60 +1,60 @@
1
- <template>
2
- <div
3
- :class="['step-item', link ? 'linkable' : null]"
4
- @click="go"
5
- >
6
- <span :style="titleStyle">{{ title }}</span>
7
- <a-icon v-if="icon" :style="iconStyle" :type="icon" />
8
- <slot></slot>
9
- </div>
10
- </template>
11
-
12
- <script>
13
- const Group = {
14
- name: 'AStepItemGroup',
15
- props: {
16
- align: {
17
- type: String,
18
- default: 'center',
19
- validator (value) {
20
- return ['left', 'center', 'right'].indexOf(value) !== -1
21
- }
22
- }
23
- },
24
- render (h) {
25
- return h(
26
- 'div',
27
- { attrs: { style: `text-align: ${this.align}; margin-top: 8px` } },
28
- [h('div', { attrs: { style: 'text-align: left; display: inline-block;' } }, [this.$slots.default])]
29
- )
30
- }
31
- }
32
-
33
- export default {
34
- name: 'AStepItem',
35
- Group: Group,
36
- // eslint-disable-next-line vue/require-prop-types
37
- props: ['title', 'icon', 'link', 'titleStyle', 'iconStyle'],
38
- methods: {
39
- go () {
40
- const link = this.link
41
- if (link) {
42
- this.$router.push(link)
43
- }
44
- }
45
- }
46
- }
47
- </script>
48
-
49
- <style lang="less" scoped>
50
- .step-item{
51
- cursor: pointer;
52
- }
53
- :global{
54
- .ant-steps-item-process{
55
- .linkable{
56
- //color: @primary-color;
57
- }
58
- }
59
- }
60
- </style>
1
+ <template>
2
+ <div
3
+ :class="['step-item', link ? 'linkable' : null]"
4
+ @click="go"
5
+ >
6
+ <span :style="titleStyle">{{ title }}</span>
7
+ <a-icon v-if="icon" :style="iconStyle" :type="icon" />
8
+ <slot></slot>
9
+ </div>
10
+ </template>
11
+
12
+ <script>
13
+ const Group = {
14
+ name: 'AStepItemGroup',
15
+ props: {
16
+ align: {
17
+ type: String,
18
+ default: 'center',
19
+ validator (value) {
20
+ return ['left', 'center', 'right'].indexOf(value) !== -1
21
+ }
22
+ }
23
+ },
24
+ render (h) {
25
+ return h(
26
+ 'div',
27
+ { attrs: { style: `text-align: ${this.align}; margin-top: 8px` } },
28
+ [h('div', { attrs: { style: 'text-align: left; display: inline-block;' } }, [this.$slots.default])]
29
+ )
30
+ }
31
+ }
32
+
33
+ export default {
34
+ name: 'AStepItem',
35
+ Group: Group,
36
+ // eslint-disable-next-line vue/require-prop-types
37
+ props: ['title', 'icon', 'link', 'titleStyle', 'iconStyle'],
38
+ methods: {
39
+ go () {
40
+ const link = this.link
41
+ if (link) {
42
+ this.$router.push(link)
43
+ }
44
+ }
45
+ }
46
+ }
47
+ </script>
48
+
49
+ <style lang="less" scoped>
50
+ .step-item{
51
+ cursor: pointer;
52
+ }
53
+ :global{
54
+ .ant-steps-item-process{
55
+ .linkable{
56
+ //color: @primary-color;
57
+ }
58
+ }
59
+ }
60
+ </style>