eoss-ui 0.6.41 → 0.6.42

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 (234) hide show
  1. package/lib/eoss-ui.common.js +1158 -1047
  2. package/lib/flow-list.js +123 -112
  3. package/lib/flow.js +882 -782
  4. package/lib/index.js +1 -1
  5. package/lib/main.js +132 -132
  6. package/lib/qr-code.js +13 -13
  7. package/lib/theme-chalk/flow.css +1 -1
  8. package/lib/theme-chalk/index.css +1 -1
  9. package/package.json +159 -159
  10. package/packages/button/index.js +5 -5
  11. package/packages/button/src/main.vue +418 -418
  12. package/packages/button-group/index.js +5 -5
  13. package/packages/button-group/src/main.vue +298 -298
  14. package/packages/calendar/index.js +5 -5
  15. package/packages/card/index.js +5 -5
  16. package/packages/card/src/main.vue +156 -156
  17. package/packages/cascader/index.js +5 -5
  18. package/packages/cascader/src/main.vue +168 -168
  19. package/packages/checkbox-group/index.js +5 -5
  20. package/packages/checkbox-group/src/main.vue +333 -333
  21. package/packages/clients/index.js +5 -5
  22. package/packages/clients/src/main.vue +144 -144
  23. package/packages/data-table/index.js +5 -5
  24. package/packages/data-table/src/children.vue +39 -39
  25. package/packages/data-table/src/column.vue +989 -989
  26. package/packages/data-table/src/main.vue +1822 -1822
  27. package/packages/data-table/src/sizer.vue +195 -195
  28. package/packages/data-table-form/index.js +5 -5
  29. package/packages/data-table-form/src/checkbox.vue +101 -101
  30. package/packages/data-table-form/src/colgroup.vue +17 -17
  31. package/packages/data-table-form/src/main.vue +181 -181
  32. package/packages/data-table-form/src/radio.vue +65 -65
  33. package/packages/data-table-form/src/table.vue +233 -233
  34. package/packages/data-table-form/src/tbody.vue +336 -336
  35. package/packages/data-table-form/src/thead.vue +68 -68
  36. package/packages/date-picker/index.js +5 -5
  37. package/packages/date-picker/src/main.vue +236 -236
  38. package/packages/dialog/index.js +5 -5
  39. package/packages/enterprise/index.js +5 -5
  40. package/packages/enterprise/src/main.vue +66 -66
  41. package/packages/error-page/index.js +5 -5
  42. package/packages/error-page/src/main.vue +44 -44
  43. package/packages/flow/index.js +5 -5
  44. package/packages/flow/src/component/CommonOpinions.vue +345 -345
  45. package/packages/flow/src/component/CustomPreset.vue +322 -322
  46. package/packages/flow/src/component/FileList.vue +99 -99
  47. package/packages/flow/src/component/Preset.vue +255 -255
  48. package/packages/flow/src/component/SendMsg.vue +229 -229
  49. package/packages/flow/src/component/TimeLimit.vue +190 -190
  50. package/packages/flow/src/component/taskUnionExamine.vue +611 -611
  51. package/packages/flow/src/form.vue +121 -121
  52. package/packages/flow/src/freeStartFlow.vue +2843 -2843
  53. package/packages/flow/src/main.vue +2952 -2862
  54. package/packages/flow/src/processForm.vue +1018 -1018
  55. package/packages/flow/src/processReject.vue +293 -293
  56. package/packages/flow/src/reset.vue +899 -899
  57. package/packages/flow/src/startTaskRead.vue +596 -596
  58. package/packages/flow/src/table.vue +58 -58
  59. package/packages/flow-group/index.js +5 -5
  60. package/packages/flow-group/src/main.vue +688 -688
  61. package/packages/flow-list/index.js +5 -5
  62. package/packages/flow-list/src/main.vue +1183 -1172
  63. package/packages/form/index.js +5 -5
  64. package/packages/form/src/main.vue +3584 -3584
  65. package/packages/form/src/table.vue +1420 -1420
  66. package/packages/handle-user/index.js +5 -5
  67. package/packages/handle-user/src/main.vue +138 -138
  68. package/packages/handler/index.js +5 -5
  69. package/packages/handler/src/main.vue +474 -474
  70. package/packages/icon/index.js +5 -5
  71. package/packages/icon/src/main.vue +101 -101
  72. package/packages/icons/index.js +5 -5
  73. package/packages/icons/src/main.vue +81 -81
  74. package/packages/input/index.js +5 -5
  75. package/packages/input/src/main.vue +356 -356
  76. package/packages/input-number/index.js +5 -5
  77. package/packages/input-number/src/main.vue +106 -106
  78. package/packages/label/index.js +5 -5
  79. package/packages/label/src/main.vue +457 -457
  80. package/packages/layout/index.js +5 -5
  81. package/packages/layout/src/item.vue +152 -152
  82. package/packages/layout/src/main.vue +31 -31
  83. package/packages/login/index.js +5 -5
  84. package/packages/login/src/main.vue +1935 -1935
  85. package/packages/login/src/resetPassword.vue +562 -562
  86. package/packages/main/index.js +5 -5
  87. package/packages/main/src/default/message.vue +249 -249
  88. package/packages/main/src/default/notice.vue +157 -157
  89. package/packages/main/src/default/userinfo.vue +505 -505
  90. package/packages/main/src/public/online.vue +89 -89
  91. package/packages/main/src/public/search.vue +461 -461
  92. package/packages/main/src/public/settings.vue +221 -221
  93. package/packages/main/src/simplicity/apps.vue +388 -388
  94. package/packages/main/src/simplicity/avatar.vue +82 -82
  95. package/packages/main/src/simplicity/handler.vue +259 -259
  96. package/packages/main/src/simplicity/index.vue +2047 -2047
  97. package/packages/main/src/simplicity/lists.vue +84 -84
  98. package/packages/main/src/simplicity/menu-list.vue +128 -128
  99. package/packages/main/src/simplicity/message.vue +259 -259
  100. package/packages/main/src/simplicity/notice.vue +190 -190
  101. package/packages/main/src/simplicity/router-page.vue +45 -45
  102. package/packages/main/src/simplicity/sub-menu.vue +241 -241
  103. package/packages/main/src/simplicity/user.vue +257 -257
  104. package/packages/main/src/simplicity/userinfo.vue +312 -312
  105. package/packages/menu/index.js +5 -5
  106. package/packages/menu/src/main.vue +536 -536
  107. package/packages/nav/index.js +5 -5
  108. package/packages/nav/src/main.vue +402 -402
  109. package/packages/notify/index.js +5 -5
  110. package/packages/notify/src/main.vue +538 -538
  111. package/packages/page/index.js +5 -5
  112. package/packages/page/src/main.vue +167 -167
  113. package/packages/pagination/index.js +5 -5
  114. package/packages/pagination/src/main.vue +96 -96
  115. package/packages/player/index.js +5 -5
  116. package/packages/player/src/main.vue +194 -194
  117. package/packages/qr-code/index.js +5 -5
  118. package/packages/qr-code/src/main.vue +170 -170
  119. package/packages/radio-group/index.js +6 -6
  120. package/packages/radio-group/src/main.vue +319 -319
  121. package/packages/retrial-auth/index.js +5 -5
  122. package/packages/retrial-auth/src/main.vue +280 -280
  123. package/packages/select/index.js +5 -5
  124. package/packages/select/src/main.vue +775 -775
  125. package/packages/select-ganged/index.js +5 -5
  126. package/packages/select-ganged/src/main.vue +724 -724
  127. package/packages/selector/index.js +5 -5
  128. package/packages/selector/src/main.vue +689 -689
  129. package/packages/selector-panel/index.js +5 -5
  130. package/packages/selector-panel/src/main.vue +1027 -1027
  131. package/packages/selector-panel/src/selection.vue +177 -177
  132. package/packages/selector-panel/src/tree.vue +129 -129
  133. package/packages/sizer/index.js +5 -5
  134. package/packages/sizer/src/main.vue +254 -254
  135. package/packages/steps/index.js +5 -5
  136. package/packages/steps/src/main.vue +181 -181
  137. package/packages/switch/index.js +5 -5
  138. package/packages/switch/src/main.vue +154 -154
  139. package/packages/table-form/index.js +5 -5
  140. package/packages/tabs/index.js +5 -5
  141. package/packages/tabs/src/main.vue +788 -788
  142. package/packages/tabs-panel/index.js +5 -5
  143. package/packages/tabs-panel/src/main.vue +29 -29
  144. package/packages/theme-chalk/lib/flow.css +1 -1
  145. package/packages/theme-chalk/lib/index.css +1 -1
  146. package/packages/theme-chalk/src/base.scss +260 -260
  147. package/packages/theme-chalk/src/button-group.scss +175 -175
  148. package/packages/theme-chalk/src/button.scss +24 -24
  149. package/packages/theme-chalk/src/calendar.scss +113 -113
  150. package/packages/theme-chalk/src/card.scss +99 -99
  151. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  152. package/packages/theme-chalk/src/clients.scss +87 -87
  153. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  154. package/packages/theme-chalk/src/data-table.scss +293 -293
  155. package/packages/theme-chalk/src/date-picker.scss +7 -7
  156. package/packages/theme-chalk/src/dialog.scss +77 -77
  157. package/packages/theme-chalk/src/enterprise.scss +5 -5
  158. package/packages/theme-chalk/src/error-page.scss +18 -18
  159. package/packages/theme-chalk/src/flow-group.scss +110 -110
  160. package/packages/theme-chalk/src/flow-list.scss +36 -36
  161. package/packages/theme-chalk/src/flow.scss +318 -310
  162. package/packages/theme-chalk/src/form.scss +496 -496
  163. package/packages/theme-chalk/src/handle-user.scss +40 -40
  164. package/packages/theme-chalk/src/handler.scss +143 -143
  165. package/packages/theme-chalk/src/icon.scss +1789 -1789
  166. package/packages/theme-chalk/src/icons.scss +99 -99
  167. package/packages/theme-chalk/src/input.scss +9 -9
  168. package/packages/theme-chalk/src/label.scss +24 -24
  169. package/packages/theme-chalk/src/layout.scss +46 -46
  170. package/packages/theme-chalk/src/login.scss +947 -947
  171. package/packages/theme-chalk/src/main.scss +639 -639
  172. package/packages/theme-chalk/src/menu.scss +222 -222
  173. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  174. package/packages/theme-chalk/src/nav.scss +125 -125
  175. package/packages/theme-chalk/src/page.scss +3 -3
  176. package/packages/theme-chalk/src/pagination.scss +29 -29
  177. package/packages/theme-chalk/src/player.scss +9 -9
  178. package/packages/theme-chalk/src/qr-code.scss +17 -17
  179. package/packages/theme-chalk/src/radio-group.scss +9 -9
  180. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  181. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  182. package/packages/theme-chalk/src/select.scss +8 -8
  183. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  184. package/packages/theme-chalk/src/selector.scss +91 -91
  185. package/packages/theme-chalk/src/simplicity.scss +1262 -1262
  186. package/packages/theme-chalk/src/sizer.scss +36 -36
  187. package/packages/theme-chalk/src/steps.scss +88 -88
  188. package/packages/theme-chalk/src/switch.scss +3 -3
  189. package/packages/theme-chalk/src/table-form.scss +1 -1
  190. package/packages/theme-chalk/src/tabs.scss +87 -87
  191. package/packages/theme-chalk/src/tips.scss +7 -7
  192. package/packages/theme-chalk/src/toolbar.scss +179 -179
  193. package/packages/theme-chalk/src/tree-group.scss +72 -72
  194. package/packages/theme-chalk/src/tree.scss +165 -165
  195. package/packages/theme-chalk/src/upload.scss +167 -167
  196. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  197. package/packages/tips/index.js +5 -5
  198. package/packages/tips/src/main.vue +141 -141
  199. package/packages/toolbar/index.js +5 -5
  200. package/packages/toolbar/src/main.vue +430 -430
  201. package/packages/tree/index.js +5 -5
  202. package/packages/tree-group/index.js +5 -5
  203. package/packages/upload/index.js +5 -5
  204. package/packages/upload/src/main.vue +1334 -1334
  205. package/packages/upload/src/picture.js +15 -15
  206. package/packages/wujie/index.js +5 -5
  207. package/packages/wujie/src/main.vue +145 -145
  208. package/packages/wxlogin/index.js +5 -5
  209. package/packages/wxlogin/src/main.vue +128 -128
  210. package/src/config/api.js +248 -248
  211. package/src/config/image.js +2 -2
  212. package/src/index.js +157 -157
  213. package/src/utils/bus.js +3 -3
  214. package/src/utils/date-util.js +312 -312
  215. package/src/utils/http.js +50 -50
  216. package/src/utils/rules.js +18 -18
  217. package/src/utils/store.js +21 -21
  218. package/src/utils/webSocket.js +107 -107
  219. package/packages/.DS_Store +0 -0
  220. package/packages/data-table/.DS_Store +0 -0
  221. package/packages/data-table-form/.DS_Store +0 -0
  222. package/packages/error-page/.DS_Store +0 -0
  223. package/packages/flow/.DS_Store +0 -0
  224. package/packages/form/.DS_Store +0 -0
  225. package/packages/login/.DS_Store +0 -0
  226. package/packages/main/.DS_Store +0 -0
  227. package/packages/main/src/.DS_Store +0 -0
  228. package/packages/selector/.DS_Store +0 -0
  229. package/packages/selector-panel/.DS_Store +0 -0
  230. package/packages/sizer/.DS_Store +0 -0
  231. package/packages/tabs/.DS_Store +0 -0
  232. package/packages/theme-chalk/src/.DS_Store +0 -0
  233. package/packages/upload/.DS_Store +0 -0
  234. package/src/.DS_Store +0 -0
@@ -1,536 +1,536 @@
1
- <script>
2
- import { debounce } from 'throttle-debounce';
3
- export default {
4
- name: 'EsMenu',
5
- inheritAttrs: false,
6
- props: {
7
- data: {
8
- type: Array,
9
- default() {
10
- return [];
11
- }
12
- },
13
- titleIcons: {
14
- type: Boolean,
15
- default: true
16
- },
17
- deep: {
18
- type: Boolean,
19
- default: true
20
- },
21
- subNav: {
22
- type: Boolean,
23
- default: false
24
- },
25
- width: String,
26
- height: String,
27
- mode: {
28
- type: String,
29
- default: 'vertical'
30
- },
31
- collapse: Boolean,
32
- defaultActive: String,
33
- uniqueOpened: {
34
- type: Boolean,
35
- default: true
36
- },
37
- popperClass: String,
38
- biserial: Boolean,
39
- paddingLeft: {
40
- type: Number,
41
- default: 14
42
- },
43
- menuIcon: {
44
- type: String,
45
- default: 'es-icon-application'
46
- },
47
- icons: Object,
48
- subIcon: {
49
- type: Boolean,
50
- default: true
51
- }
52
- },
53
- computed: {
54
- maxHeight() {
55
- return this.height === undefined ? this.maxH : this.height;
56
- },
57
- maxWidth() {
58
- return this.maxW;
59
- }
60
- },
61
- watch: {
62
- data: {
63
- deep: true,
64
- handler() {
65
- this.getMaxWidth();
66
- }
67
- },
68
- width() {
69
- this.getMaxWidth();
70
- },
71
- height() {
72
- this.$refs.esMenu.update();
73
- }
74
- },
75
- data() {
76
- return {
77
- maxH: '',
78
- maxW: '',
79
- menuId: null,
80
- defaultOpeneds: [],
81
- isChange: false
82
- };
83
- },
84
- beforeCreate() {
85
- this.getMaxWidth = debounce(500, () => {
86
- this.getWidth();
87
- });
88
- },
89
- created() {},
90
- mounted() {
91
- this.getMaxWidth();
92
- },
93
- methods: {
94
- getWidth() {
95
- if (this.mode === 'vertical') {
96
- this.$nextTick(() => {
97
- this.maxH =
98
- this.$refs.esMenu.$el.getBoundingClientRect().height + 'px';
99
- const styles = window.getComputedStyle(
100
- this.$refs.menu.$el.parentNode
101
- );
102
- this.maxW = this.width
103
- ? parseInt(this.width, 10) -
104
- parseInt(styles.marginLeft, 10) -
105
- parseInt(styles.marginRight, 10) +
106
- 'px'
107
- : '';
108
- });
109
- } else {
110
- this.$nextTick(() => {
111
- let w = 0;
112
- this.$refs.menu &&
113
- Array.from(this.$refs.menu.$el.children).forEach((item) => {
114
- w += item.getBoundingClientRect().width;
115
- });
116
- const styles = window.getComputedStyle(this.$refs.menu.$el);
117
- w += parseFloat(styles.paddingLeft) + parseFloat(styles.paddingRight);
118
- if (w > this.$refs.esMenu.$el.getBoundingClientRect().width) {
119
- this.maxW = w + 'px';
120
- }
121
- });
122
- }
123
- },
124
- handleReady() {
125
- if (this.mode === 'horizontal') {
126
- this.$refs.esMenu.wrap.onmouseover = (e) => {
127
- this.$refs.esMenu.wrap.addEventListener(
128
- 'mousewheel',
129
- this.handleWheel,
130
- { passive: false }
131
- ) ||
132
- this.$refs.esMenu.wrap.addEventListener(
133
- 'DOMMouseScroll',
134
- this.handleWheel,
135
- false
136
- );
137
- e.preventDefault();
138
- };
139
- this.$refs.esMenu.wrap.onmouseout = (e) => {
140
- this.$refs.esMenu.wrap.removeEventListener(
141
- 'mousewheel',
142
- this.handleWheel,
143
- { passive: false }
144
- ) ||
145
- this.$refs.esMenu.wrap.removeEventListener(
146
- 'DOMMouseScroll',
147
- this.handleWheel,
148
- false
149
- );
150
- e.preventDefault();
151
- };
152
- }
153
- // const { scrollHeight, clientHeight } =
154
- // this.bodyWrapper.wrap || this.bodyWrapper;
155
- // if (scrollHeight === clientHeight && this.$refs.fixedWrapper) {
156
- // this.$refs.fixedWrapper.onmouseover = (e) => {
157
- // this.$refs.fixedWrapper.addEventListener(
158
- // 'mousewheel',
159
- // this.handleWheel,
160
- // { passive: false }
161
- // ) ||
162
- // this.$refs.fixedWrapper.addEventListener(
163
- // 'DOMMouseScroll',
164
- // this.handleWheel,
165
- // false
166
- // );
167
- // e.preventDefault();
168
- // };
169
- // this.$refs.fixedWrapper.onmouseout = (e) => {
170
- // this.$refs.fixedWrapper.removeEventListener(
171
- // 'mousewheel',
172
- // this.handleWheel,
173
- // { passive: false }
174
- // ) ||
175
- // this.$refs.fixedWrapper.removeEventListener(
176
- // 'DOMMouseScroll',
177
- // this.handleWheel,
178
- // false
179
- // );
180
- // e.preventDefault();
181
- // };
182
- // }
183
- },
184
- handleWheel(e) {
185
- if (!this.sizeHeight) {
186
- const eventDelta = -e.wheelDelta || e.deltaY * 40;
187
- this.$refs.esMenu.$refs.wrap.scrollLeft =
188
- this.$refs.esMenu.$refs.wrap.scrollLeft + eventDelta / 4;
189
- if (
190
- this.$refs.esMenu.$refs.wrap.scrollLeft > 0 &&
191
- this.$refs.esMenu.$refs.wrap.scrollLeft <
192
- this.$refs.esMenu.$refs.wrap.scrollWidth -
193
- this.$refs.esMenu.$refs.wrap.clientWidth
194
- ) {
195
- e.preventDefault();
196
- }
197
- }
198
- },
199
- getFirst(arry) {
200
- let item = arry[0];
201
- if (
202
- Object.prototype.hasOwnProperty.call(item, 'children') &&
203
- item.children.length
204
- ) {
205
- return this.getFirst(item.children);
206
- } else {
207
- this.$emit('select', {
208
- node: item,
209
- mode: this.mode,
210
- auto: true
211
- });
212
- return item.id;
213
- }
214
- },
215
- handleSelect(key, keyPath, item) {
216
- this.isChange = true;
217
- if (this.menuId !== null && keyPath.indexOf(this.menuId) == -1) {
218
- this.$refs.menu.close(this.menuId);
219
- } else {
220
- let openedMenus = item.rootMenu.openedMenus;
221
- openedMenus.forEach((item) => {
222
- if (keyPath.indexOf(item) == -1) {
223
- this.$refs.menu.close(item);
224
- }
225
- });
226
- }
227
- this.$emit('select', {
228
- key: key,
229
- path: keyPath,
230
- node: item.$attrs.data,
231
- fourthTabs: item.$attrs.fourthTabs,
232
- item: item,
233
- mode: this.mode
234
- });
235
- },
236
- handleOpen(key, keyPath, item) {
237
- this.menuId = key;
238
- this.$emit('open', {
239
- key: key,
240
- path: keyPath,
241
- node: item.$attrs.data,
242
- item: item,
243
- mode: this.mode
244
- });
245
- },
246
- handleClose(key, keyPath, item) {
247
- this.menuId = null;
248
- this.$emit('close', {
249
- key: key,
250
- path: keyPath,
251
- node: item.$attrs.data,
252
- item: item,
253
- mode: this.mode
254
- });
255
- },
256
- getSub(item, h, popper, fourthTabs, subIcon) {
257
- if (popper) {
258
- popper +=
259
- this.popperClass !== undefined
260
- ? ' ' + this.popperClass
261
- : ` es-menu-popper-${this.mode}`;
262
- } else {
263
- popper =
264
- this.popperClass !== undefined
265
- ? this.popperClass
266
- : ` es-menu-popper-${this.mode}`;
267
- }
268
- let title = [];
269
- if (subIcon) {
270
- title.push(
271
- h('es-icon', {
272
- props: {
273
- contents: item.icons || this.menuIcon
274
- },
275
- class: ['es-menu-item-icon']
276
- })
277
- );
278
- }
279
- title.push(
280
- h(
281
- 'div',
282
- {
283
- class: [`es-menu-title-text es-menu-title-${this.mode}`]
284
- },
285
- [
286
- h(
287
- 'el-badge',
288
- {
289
- class: [
290
- 'es-badge',
291
- {
292
- 'es-badge-right':
293
- item.tips && typeof item.tips !== 'boolean',
294
- 'es-dot-right': item.tips && typeof item.tips === 'boolean'
295
- }
296
- ],
297
- attrs: {
298
- title: item.text.length > 18 ? item.text : undefined
299
- },
300
- props:
301
- typeof item.tips === 'boolean' && item.tips
302
- ? {
303
- isDot: true
304
- //hidden: item.tips
305
- }
306
- : {
307
- value: item.tips,
308
- max: 99,
309
- hidden: !item.tips
310
- }
311
- },
312
- [item.text]
313
- )
314
- ]
315
- )
316
- );
317
- let doms = [
318
- h('template', { slot: 'title' }, this.titleIcons ? title : [title[1]])
319
- ];
320
- if (
321
- this.deep &&
322
- item.children &&
323
- item.children.length &&
324
- (!item.extendData || item.extendData.businessStatus != 0)
325
- ) {
326
- doms = doms.concat(
327
- item.children.map((ele, index) => {
328
- if (!ele) {
329
- console.error(`对象子数据中第[${index}]条数据错误`, item);
330
- } else {
331
- return this.getSub(ele, h, popper, false, this.subIcon);
332
- }
333
- })
334
- );
335
- return [
336
- h(
337
- 'el-submenu',
338
- {
339
- class: [
340
- 'es-submenu',
341
- `es-submenu-${this.mode}`,
342
- item.id === this.active && !this.isChange
343
- ? 'es-menu-item-focus'
344
- : ''
345
- ],
346
- props: {
347
- popperClass: popper,
348
- popperAppendToBody: true,
349
- maxHeight: this.maxHeight,
350
- paddingLeft: this.paddingLeft
351
- },
352
- attrs: { data: item, index: item.id, key: item.id }
353
- },
354
- doms
355
- )
356
- ];
357
- } else if (
358
- this.deep &&
359
- this.mode === 'horizontal' &&
360
- item.fourthTabs &&
361
- item.fourthTabs.length &&
362
- (!item.extendData || item.extendData.businessStatus != 0)
363
- ) {
364
- doms = doms.concat(
365
- item.fourthTabs.map((ele, index) => {
366
- if (!ele) {
367
- console.error(`对象子数据中第[${index}]条数据错误`, item);
368
- } else {
369
- return this.getSub(ele, h, popper, true, this.subIcon);
370
- }
371
- })
372
- );
373
- return [
374
- h(
375
- 'el-submenu',
376
- {
377
- class: [
378
- 'es-submenu',
379
- `es-submenu-${this.mode}`,
380
- item.id === this.active && !this.isChange
381
- ? 'es-menu-item-focus'
382
- : ''
383
- ],
384
- props: {
385
- popperClass: popper,
386
- popperAppendToBody: true,
387
- maxHeight: this.maxHeight,
388
- paddingLeft: this.paddingLeft
389
- },
390
- attrs: { data: item, index: item.id, key: item.id }
391
- },
392
- doms
393
- )
394
- ];
395
- } else {
396
- return [
397
- h(
398
- 'el-menu-item',
399
- {
400
- class: [
401
- 'es-menu-item ' + (this.deep ? '' : `es-item-${this.mode}`)
402
- ],
403
- props: {
404
- paddingLeft: this.paddingLeft,
405
- disabled: item.extendData && item.extendData.businessStatus == 0
406
- },
407
- attrs: {
408
- data: item,
409
- index: item.id,
410
- key: item.id,
411
- fourthTabs: fourthTabs
412
- }
413
- },
414
- this.titleIcons ? title : [title[1]]
415
- )
416
- ];
417
- }
418
- }
419
- },
420
- render(h) {
421
- let doms = [];
422
- this.data.forEach((item) => {
423
- if (
424
- item.children &&
425
- item.children.length &&
426
- (!item.extendData || item.extendData.businessStatus != 0)
427
- ) {
428
- doms = doms.concat(this.getSub(item, h, 'es-sub-menu', false, true));
429
- } else {
430
- const title = [
431
- h('es-icon', {
432
- props: {
433
- contents: item.icons || this.menuIcon
434
- },
435
- class: ['es-menu-item-icon']
436
- }),
437
- h(
438
- 'div',
439
- {
440
- class: [`es-menu-title-text es-menu-title-${this.mode}`]
441
- },
442
- [
443
- h(
444
- 'el-badge',
445
- {
446
- class: [
447
- 'es-badge',
448
- {
449
- 'es-badge-right':
450
- item.tips && typeof item.tips !== 'boolean',
451
- 'es-dot-right':
452
- item.tips && typeof item.tips === 'boolean'
453
- }
454
- ],
455
- props:
456
- typeof item.tips === 'boolean' && item.tips
457
- ? {
458
- isDot: true
459
- //hidden: item.tips
460
- }
461
- : {
462
- value: item.tips,
463
- max: 99,
464
- hidden: !item.tips
465
- }
466
- },
467
- [item.text]
468
- )
469
- ]
470
- )
471
- ];
472
- doms.push(
473
- h(
474
- 'el-menu-item',
475
- {
476
- class: [`es-menu-item-${this.mode}`],
477
- props: {
478
- paddingLeft: this.paddingLeft,
479
- disabled: item.extendData && item.extendData.businessStatus == 0
480
- },
481
- attrs: {
482
- data: item,
483
- index: item.id,
484
- key: item.id
485
- }
486
- },
487
- this.titleIcons ? title : [title[1]]
488
- )
489
- );
490
- }
491
- });
492
- return h(
493
- 'el-scrollbar',
494
- {
495
- ref: 'esMenu',
496
- props: {
497
- horizontal: this.mode === 'horizontal',
498
- onReady: this.handleReady
499
- },
500
- class: `es-menu-${this.mode}-scrollbar`
501
- },
502
- [
503
- h(
504
- 'el-menu',
505
- {
506
- class: [
507
- 'es-menu',
508
- `es-menu-${this.mode}`,
509
- { 'es-menu-collapse': this.collapse },
510
- { 'es-menu-nav': this.subNav }
511
- ],
512
- ref: 'menu',
513
- props: {
514
- defaultOpeneds: this.defaultOpeneds,
515
- defaultActive: this.defaultActive,
516
- collapse: this.collapse,
517
- mode: this.mode,
518
- uniqueOpened: this.uniqueOpened,
519
- icons: this.icons
520
- },
521
- style: { width: this.maxWidth },
522
- attrs: { ...this.$attrs },
523
- on: {
524
- ...this.$listeners,
525
- open: this.handleOpen,
526
- close: this.handleClose,
527
- select: this.handleSelect
528
- }
529
- },
530
- doms
531
- )
532
- ]
533
- );
534
- }
535
- };
536
- </script>
1
+ <script>
2
+ import { debounce } from 'throttle-debounce';
3
+ export default {
4
+ name: 'EsMenu',
5
+ inheritAttrs: false,
6
+ props: {
7
+ data: {
8
+ type: Array,
9
+ default() {
10
+ return [];
11
+ }
12
+ },
13
+ titleIcons: {
14
+ type: Boolean,
15
+ default: true
16
+ },
17
+ deep: {
18
+ type: Boolean,
19
+ default: true
20
+ },
21
+ subNav: {
22
+ type: Boolean,
23
+ default: false
24
+ },
25
+ width: String,
26
+ height: String,
27
+ mode: {
28
+ type: String,
29
+ default: 'vertical'
30
+ },
31
+ collapse: Boolean,
32
+ defaultActive: String,
33
+ uniqueOpened: {
34
+ type: Boolean,
35
+ default: true
36
+ },
37
+ popperClass: String,
38
+ biserial: Boolean,
39
+ paddingLeft: {
40
+ type: Number,
41
+ default: 14
42
+ },
43
+ menuIcon: {
44
+ type: String,
45
+ default: 'es-icon-application'
46
+ },
47
+ icons: Object,
48
+ subIcon: {
49
+ type: Boolean,
50
+ default: true
51
+ }
52
+ },
53
+ computed: {
54
+ maxHeight() {
55
+ return this.height === undefined ? this.maxH : this.height;
56
+ },
57
+ maxWidth() {
58
+ return this.maxW;
59
+ }
60
+ },
61
+ watch: {
62
+ data: {
63
+ deep: true,
64
+ handler() {
65
+ this.getMaxWidth();
66
+ }
67
+ },
68
+ width() {
69
+ this.getMaxWidth();
70
+ },
71
+ height() {
72
+ this.$refs.esMenu.update();
73
+ }
74
+ },
75
+ data() {
76
+ return {
77
+ maxH: '',
78
+ maxW: '',
79
+ menuId: null,
80
+ defaultOpeneds: [],
81
+ isChange: false
82
+ };
83
+ },
84
+ beforeCreate() {
85
+ this.getMaxWidth = debounce(500, () => {
86
+ this.getWidth();
87
+ });
88
+ },
89
+ created() {},
90
+ mounted() {
91
+ this.getMaxWidth();
92
+ },
93
+ methods: {
94
+ getWidth() {
95
+ if (this.mode === 'vertical') {
96
+ this.$nextTick(() => {
97
+ this.maxH =
98
+ this.$refs.esMenu.$el.getBoundingClientRect().height + 'px';
99
+ const styles = window.getComputedStyle(
100
+ this.$refs.menu.$el.parentNode
101
+ );
102
+ this.maxW = this.width
103
+ ? parseInt(this.width, 10) -
104
+ parseInt(styles.marginLeft, 10) -
105
+ parseInt(styles.marginRight, 10) +
106
+ 'px'
107
+ : '';
108
+ });
109
+ } else {
110
+ this.$nextTick(() => {
111
+ let w = 0;
112
+ this.$refs.menu &&
113
+ Array.from(this.$refs.menu.$el.children).forEach((item) => {
114
+ w += item.getBoundingClientRect().width;
115
+ });
116
+ const styles = window.getComputedStyle(this.$refs.menu.$el);
117
+ w += parseFloat(styles.paddingLeft) + parseFloat(styles.paddingRight);
118
+ if (w > this.$refs.esMenu.$el.getBoundingClientRect().width) {
119
+ this.maxW = w + 'px';
120
+ }
121
+ });
122
+ }
123
+ },
124
+ handleReady() {
125
+ if (this.mode === 'horizontal') {
126
+ this.$refs.esMenu.wrap.onmouseover = (e) => {
127
+ this.$refs.esMenu.wrap.addEventListener(
128
+ 'mousewheel',
129
+ this.handleWheel,
130
+ { passive: false }
131
+ ) ||
132
+ this.$refs.esMenu.wrap.addEventListener(
133
+ 'DOMMouseScroll',
134
+ this.handleWheel,
135
+ false
136
+ );
137
+ e.preventDefault();
138
+ };
139
+ this.$refs.esMenu.wrap.onmouseout = (e) => {
140
+ this.$refs.esMenu.wrap.removeEventListener(
141
+ 'mousewheel',
142
+ this.handleWheel,
143
+ { passive: false }
144
+ ) ||
145
+ this.$refs.esMenu.wrap.removeEventListener(
146
+ 'DOMMouseScroll',
147
+ this.handleWheel,
148
+ false
149
+ );
150
+ e.preventDefault();
151
+ };
152
+ }
153
+ // const { scrollHeight, clientHeight } =
154
+ // this.bodyWrapper.wrap || this.bodyWrapper;
155
+ // if (scrollHeight === clientHeight && this.$refs.fixedWrapper) {
156
+ // this.$refs.fixedWrapper.onmouseover = (e) => {
157
+ // this.$refs.fixedWrapper.addEventListener(
158
+ // 'mousewheel',
159
+ // this.handleWheel,
160
+ // { passive: false }
161
+ // ) ||
162
+ // this.$refs.fixedWrapper.addEventListener(
163
+ // 'DOMMouseScroll',
164
+ // this.handleWheel,
165
+ // false
166
+ // );
167
+ // e.preventDefault();
168
+ // };
169
+ // this.$refs.fixedWrapper.onmouseout = (e) => {
170
+ // this.$refs.fixedWrapper.removeEventListener(
171
+ // 'mousewheel',
172
+ // this.handleWheel,
173
+ // { passive: false }
174
+ // ) ||
175
+ // this.$refs.fixedWrapper.removeEventListener(
176
+ // 'DOMMouseScroll',
177
+ // this.handleWheel,
178
+ // false
179
+ // );
180
+ // e.preventDefault();
181
+ // };
182
+ // }
183
+ },
184
+ handleWheel(e) {
185
+ if (!this.sizeHeight) {
186
+ const eventDelta = -e.wheelDelta || e.deltaY * 40;
187
+ this.$refs.esMenu.$refs.wrap.scrollLeft =
188
+ this.$refs.esMenu.$refs.wrap.scrollLeft + eventDelta / 4;
189
+ if (
190
+ this.$refs.esMenu.$refs.wrap.scrollLeft > 0 &&
191
+ this.$refs.esMenu.$refs.wrap.scrollLeft <
192
+ this.$refs.esMenu.$refs.wrap.scrollWidth -
193
+ this.$refs.esMenu.$refs.wrap.clientWidth
194
+ ) {
195
+ e.preventDefault();
196
+ }
197
+ }
198
+ },
199
+ getFirst(arry) {
200
+ let item = arry[0];
201
+ if (
202
+ Object.prototype.hasOwnProperty.call(item, 'children') &&
203
+ item.children.length
204
+ ) {
205
+ return this.getFirst(item.children);
206
+ } else {
207
+ this.$emit('select', {
208
+ node: item,
209
+ mode: this.mode,
210
+ auto: true
211
+ });
212
+ return item.id;
213
+ }
214
+ },
215
+ handleSelect(key, keyPath, item) {
216
+ this.isChange = true;
217
+ if (this.menuId !== null && keyPath.indexOf(this.menuId) == -1) {
218
+ this.$refs.menu.close(this.menuId);
219
+ } else {
220
+ let openedMenus = item.rootMenu.openedMenus;
221
+ openedMenus.forEach((item) => {
222
+ if (keyPath.indexOf(item) == -1) {
223
+ this.$refs.menu.close(item);
224
+ }
225
+ });
226
+ }
227
+ this.$emit('select', {
228
+ key: key,
229
+ path: keyPath,
230
+ node: item.$attrs.data,
231
+ fourthTabs: item.$attrs.fourthTabs,
232
+ item: item,
233
+ mode: this.mode
234
+ });
235
+ },
236
+ handleOpen(key, keyPath, item) {
237
+ this.menuId = key;
238
+ this.$emit('open', {
239
+ key: key,
240
+ path: keyPath,
241
+ node: item.$attrs.data,
242
+ item: item,
243
+ mode: this.mode
244
+ });
245
+ },
246
+ handleClose(key, keyPath, item) {
247
+ this.menuId = null;
248
+ this.$emit('close', {
249
+ key: key,
250
+ path: keyPath,
251
+ node: item.$attrs.data,
252
+ item: item,
253
+ mode: this.mode
254
+ });
255
+ },
256
+ getSub(item, h, popper, fourthTabs, subIcon) {
257
+ if (popper) {
258
+ popper +=
259
+ this.popperClass !== undefined
260
+ ? ' ' + this.popperClass
261
+ : ` es-menu-popper-${this.mode}`;
262
+ } else {
263
+ popper =
264
+ this.popperClass !== undefined
265
+ ? this.popperClass
266
+ : ` es-menu-popper-${this.mode}`;
267
+ }
268
+ let title = [];
269
+ if (subIcon) {
270
+ title.push(
271
+ h('es-icon', {
272
+ props: {
273
+ contents: item.icons || this.menuIcon
274
+ },
275
+ class: ['es-menu-item-icon']
276
+ })
277
+ );
278
+ }
279
+ title.push(
280
+ h(
281
+ 'div',
282
+ {
283
+ class: [`es-menu-title-text es-menu-title-${this.mode}`]
284
+ },
285
+ [
286
+ h(
287
+ 'el-badge',
288
+ {
289
+ class: [
290
+ 'es-badge',
291
+ {
292
+ 'es-badge-right':
293
+ item.tips && typeof item.tips !== 'boolean',
294
+ 'es-dot-right': item.tips && typeof item.tips === 'boolean'
295
+ }
296
+ ],
297
+ attrs: {
298
+ title: item.text.length > 18 ? item.text : undefined
299
+ },
300
+ props:
301
+ typeof item.tips === 'boolean' && item.tips
302
+ ? {
303
+ isDot: true
304
+ //hidden: item.tips
305
+ }
306
+ : {
307
+ value: item.tips,
308
+ max: 99,
309
+ hidden: !item.tips
310
+ }
311
+ },
312
+ [item.text]
313
+ )
314
+ ]
315
+ )
316
+ );
317
+ let doms = [
318
+ h('template', { slot: 'title' }, this.titleIcons ? title : [title[1]])
319
+ ];
320
+ if (
321
+ this.deep &&
322
+ item.children &&
323
+ item.children.length &&
324
+ (!item.extendData || item.extendData.businessStatus != 0)
325
+ ) {
326
+ doms = doms.concat(
327
+ item.children.map((ele, index) => {
328
+ if (!ele) {
329
+ console.error(`对象子数据中第[${index}]条数据错误`, item);
330
+ } else {
331
+ return this.getSub(ele, h, popper, false, this.subIcon);
332
+ }
333
+ })
334
+ );
335
+ return [
336
+ h(
337
+ 'el-submenu',
338
+ {
339
+ class: [
340
+ 'es-submenu',
341
+ `es-submenu-${this.mode}`,
342
+ item.id === this.active && !this.isChange
343
+ ? 'es-menu-item-focus'
344
+ : ''
345
+ ],
346
+ props: {
347
+ popperClass: popper,
348
+ popperAppendToBody: true,
349
+ maxHeight: this.maxHeight,
350
+ paddingLeft: this.paddingLeft
351
+ },
352
+ attrs: { data: item, index: item.id, key: item.id }
353
+ },
354
+ doms
355
+ )
356
+ ];
357
+ } else if (
358
+ this.deep &&
359
+ this.mode === 'horizontal' &&
360
+ item.fourthTabs &&
361
+ item.fourthTabs.length &&
362
+ (!item.extendData || item.extendData.businessStatus != 0)
363
+ ) {
364
+ doms = doms.concat(
365
+ item.fourthTabs.map((ele, index) => {
366
+ if (!ele) {
367
+ console.error(`对象子数据中第[${index}]条数据错误`, item);
368
+ } else {
369
+ return this.getSub(ele, h, popper, true, this.subIcon);
370
+ }
371
+ })
372
+ );
373
+ return [
374
+ h(
375
+ 'el-submenu',
376
+ {
377
+ class: [
378
+ 'es-submenu',
379
+ `es-submenu-${this.mode}`,
380
+ item.id === this.active && !this.isChange
381
+ ? 'es-menu-item-focus'
382
+ : ''
383
+ ],
384
+ props: {
385
+ popperClass: popper,
386
+ popperAppendToBody: true,
387
+ maxHeight: this.maxHeight,
388
+ paddingLeft: this.paddingLeft
389
+ },
390
+ attrs: { data: item, index: item.id, key: item.id }
391
+ },
392
+ doms
393
+ )
394
+ ];
395
+ } else {
396
+ return [
397
+ h(
398
+ 'el-menu-item',
399
+ {
400
+ class: [
401
+ 'es-menu-item ' + (this.deep ? '' : `es-item-${this.mode}`)
402
+ ],
403
+ props: {
404
+ paddingLeft: this.paddingLeft,
405
+ disabled: item.extendData && item.extendData.businessStatus == 0
406
+ },
407
+ attrs: {
408
+ data: item,
409
+ index: item.id,
410
+ key: item.id,
411
+ fourthTabs: fourthTabs
412
+ }
413
+ },
414
+ this.titleIcons ? title : [title[1]]
415
+ )
416
+ ];
417
+ }
418
+ }
419
+ },
420
+ render(h) {
421
+ let doms = [];
422
+ this.data.forEach((item) => {
423
+ if (
424
+ item.children &&
425
+ item.children.length &&
426
+ (!item.extendData || item.extendData.businessStatus != 0)
427
+ ) {
428
+ doms = doms.concat(this.getSub(item, h, 'es-sub-menu', false, true));
429
+ } else {
430
+ const title = [
431
+ h('es-icon', {
432
+ props: {
433
+ contents: item.icons || this.menuIcon
434
+ },
435
+ class: ['es-menu-item-icon']
436
+ }),
437
+ h(
438
+ 'div',
439
+ {
440
+ class: [`es-menu-title-text es-menu-title-${this.mode}`]
441
+ },
442
+ [
443
+ h(
444
+ 'el-badge',
445
+ {
446
+ class: [
447
+ 'es-badge',
448
+ {
449
+ 'es-badge-right':
450
+ item.tips && typeof item.tips !== 'boolean',
451
+ 'es-dot-right':
452
+ item.tips && typeof item.tips === 'boolean'
453
+ }
454
+ ],
455
+ props:
456
+ typeof item.tips === 'boolean' && item.tips
457
+ ? {
458
+ isDot: true
459
+ //hidden: item.tips
460
+ }
461
+ : {
462
+ value: item.tips,
463
+ max: 99,
464
+ hidden: !item.tips
465
+ }
466
+ },
467
+ [item.text]
468
+ )
469
+ ]
470
+ )
471
+ ];
472
+ doms.push(
473
+ h(
474
+ 'el-menu-item',
475
+ {
476
+ class: [`es-menu-item-${this.mode}`],
477
+ props: {
478
+ paddingLeft: this.paddingLeft,
479
+ disabled: item.extendData && item.extendData.businessStatus == 0
480
+ },
481
+ attrs: {
482
+ data: item,
483
+ index: item.id,
484
+ key: item.id
485
+ }
486
+ },
487
+ this.titleIcons ? title : [title[1]]
488
+ )
489
+ );
490
+ }
491
+ });
492
+ return h(
493
+ 'el-scrollbar',
494
+ {
495
+ ref: 'esMenu',
496
+ props: {
497
+ horizontal: this.mode === 'horizontal',
498
+ onReady: this.handleReady
499
+ },
500
+ class: `es-menu-${this.mode}-scrollbar`
501
+ },
502
+ [
503
+ h(
504
+ 'el-menu',
505
+ {
506
+ class: [
507
+ 'es-menu',
508
+ `es-menu-${this.mode}`,
509
+ { 'es-menu-collapse': this.collapse },
510
+ { 'es-menu-nav': this.subNav }
511
+ ],
512
+ ref: 'menu',
513
+ props: {
514
+ defaultOpeneds: this.defaultOpeneds,
515
+ defaultActive: this.defaultActive,
516
+ collapse: this.collapse,
517
+ mode: this.mode,
518
+ uniqueOpened: this.uniqueOpened,
519
+ icons: this.icons
520
+ },
521
+ style: { width: this.maxWidth },
522
+ attrs: { ...this.$attrs },
523
+ on: {
524
+ ...this.$listeners,
525
+ open: this.handleOpen,
526
+ close: this.handleClose,
527
+ select: this.handleSelect
528
+ }
529
+ },
530
+ doms
531
+ )
532
+ ]
533
+ );
534
+ }
535
+ };
536
+ </script>