eoss-ui 0.6.54 → 0.6.56

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