eoss-mobiles 0.3.95 → 0.3.97

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 (249) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/lib/action-sheet.js +4 -4
  3. package/lib/button-group.js +4 -4
  4. package/lib/button.js +4 -4
  5. package/lib/calendar.js +4 -4
  6. package/lib/cascader.js +4 -4
  7. package/lib/cell.js +4 -4
  8. package/lib/checkbox.js +200 -173
  9. package/lib/circle.js +4 -4
  10. package/lib/config/api.js +16 -2
  11. package/lib/count-down.js +4 -4
  12. package/lib/date.js +108 -108
  13. package/lib/empty.js +4 -4
  14. package/lib/eoss-mobile.common.js +651 -83
  15. package/lib/esign.js +4 -4
  16. package/lib/field.js +4 -4
  17. package/lib/flow-btn.js +194 -167
  18. package/lib/flow-list.js +196 -167
  19. package/lib/flow.js +241 -212
  20. package/lib/form.js +93 -6
  21. package/lib/grid-item.js +4 -4
  22. package/lib/grid.js +12 -12
  23. package/lib/image-preview.js +15 -7
  24. package/lib/image.js +4 -4
  25. package/lib/index.js +1 -1
  26. package/lib/list.js +4 -4
  27. package/lib/loading.js +86 -86
  28. package/lib/nav-bar.js +4 -4
  29. package/lib/notice-bar.js +4 -4
  30. package/lib/pagination.js +4 -4
  31. package/lib/picker.js +200 -171
  32. package/lib/popover.js +4 -4
  33. package/lib/popup.js +4 -4
  34. package/lib/pull-refresh.js +4 -4
  35. package/lib/radio.js +199 -170
  36. package/lib/rate.js +4 -4
  37. package/lib/retrial-auth.js +194 -167
  38. package/lib/search.js +4 -4
  39. package/lib/selector.js +240 -211
  40. package/lib/skeleton.js +4 -4
  41. package/lib/stepper.js +4 -4
  42. package/lib/swipe.js +4 -4
  43. package/lib/switch.js +4 -4
  44. package/lib/tab.js +4 -4
  45. package/lib/table-column.js +194 -165
  46. package/lib/table.js +16 -16
  47. package/lib/tabs.js +4 -4
  48. package/lib/tag.js +4 -4
  49. package/lib/theme-chalk/fonts/iconfont.scss +98 -98
  50. package/lib/theme-chalk/fonts/iconfont1.scss +90 -90
  51. package/lib/uploader.js +2472 -13
  52. package/package.json +3 -1
  53. package/packages/action-sheet/index.js +5 -5
  54. package/packages/action-sheet/src/main.vue +32 -32
  55. package/packages/button/index.js +5 -5
  56. package/packages/button/src/main.vue +15 -15
  57. package/packages/button-group/index.js +5 -5
  58. package/packages/button-group/src/main.vue +80 -80
  59. package/packages/calendar/index.js +5 -5
  60. package/packages/calendar/src/main.vue +34 -34
  61. package/packages/cascader/index.js +5 -5
  62. package/packages/cascader/src/main.vue +39 -39
  63. package/packages/cell/index.js +5 -5
  64. package/packages/cell/src/main.vue +77 -77
  65. package/packages/checkbox/index.js +5 -5
  66. package/packages/checkbox/src/main.vue +232 -232
  67. package/packages/circle/index.js +5 -5
  68. package/packages/circle/src/main.vue +27 -27
  69. package/packages/count-down/index.js +5 -5
  70. package/packages/count-down/src/main.vue +27 -27
  71. package/packages/date/index.js +5 -5
  72. package/packages/date/src/date-time.vue +290 -290
  73. package/packages/date/src/main.vue +401 -401
  74. package/packages/empty/index.js +5 -5
  75. package/packages/empty/src/main.vue +16 -16
  76. package/packages/esign/index.js +5 -5
  77. package/packages/esign/src/main.vue +144 -144
  78. package/packages/field/index.js +5 -5
  79. package/packages/field/src/main.vue +235 -235
  80. package/packages/flow/index.js +5 -5
  81. package/packages/flow/src/components/Circulate.vue +595 -595
  82. package/packages/flow/src/components/Handle.vue +2404 -2404
  83. package/packages/flow/src/components/Message.vue +208 -208
  84. package/packages/flow/src/components/ProcessSettings.vue +342 -342
  85. package/packages/flow/src/components/supervise.vue +139 -139
  86. package/packages/flow/src/flowMix.js +288 -288
  87. package/packages/flow/src/main.vue +116 -116
  88. package/packages/flow-btn/index.js +5 -5
  89. package/packages/flow-btn/src/main.vue +494 -494
  90. package/packages/flow-list/index.js +5 -5
  91. package/packages/flow-list/src/main.vue +248 -248
  92. package/packages/form/index.js +5 -5
  93. package/packages/form/src/main.vue +548 -523
  94. package/packages/grid/index.js +5 -5
  95. package/packages/grid/src/main.vue +486 -486
  96. package/packages/grid-item/index.js +5 -5
  97. package/packages/grid-item/src/main.vue +16 -16
  98. package/packages/image/index.js +5 -5
  99. package/packages/image/src/main.vue +12 -12
  100. package/packages/image-preview/index.js +5 -5
  101. package/packages/image-preview/src/main.vue +41 -34
  102. package/packages/list/index.js +5 -5
  103. package/packages/list/src/main.vue +32 -32
  104. package/packages/loading/index.js +5 -5
  105. package/packages/loading/src/main.vue +19 -19
  106. package/packages/nav-bar/index.js +5 -5
  107. package/packages/nav-bar/src/main.vue +24 -24
  108. package/packages/notice-bar/index.js +5 -5
  109. package/packages/notice-bar/src/main.vue +15 -15
  110. package/packages/pagination/index.js +5 -5
  111. package/packages/pagination/src/main.vue +73 -73
  112. package/packages/picker/index.js +5 -5
  113. package/packages/picker/src/main.vue +604 -604
  114. package/packages/popover/index.js +5 -5
  115. package/packages/popover/src/main.vue +32 -32
  116. package/packages/popup/index.js +5 -5
  117. package/packages/popup/src/main.vue +27 -27
  118. package/packages/pull-refresh/index.js +5 -5
  119. package/packages/pull-refresh/src/main.vue +31 -31
  120. package/packages/radio/index.js +5 -5
  121. package/packages/radio/src/main.vue +179 -179
  122. package/packages/rate/index.js +5 -5
  123. package/packages/rate/src/main.vue +26 -26
  124. package/packages/retrial-auth/index.js +5 -5
  125. package/packages/retrial-auth/src/main.vue +257 -257
  126. package/packages/search/index.js +5 -5
  127. package/packages/search/src/main.vue +39 -39
  128. package/packages/selector/index.js +5 -5
  129. package/packages/selector/src/main.vue +186 -186
  130. package/packages/selector/src/selector-tree.vue +1117 -1117
  131. package/packages/selector/src/tree.vue +405 -405
  132. package/packages/skeleton/index.js +5 -5
  133. package/packages/skeleton/src/main.vue +17 -17
  134. package/packages/stepper/index.js +5 -5
  135. package/packages/stepper/src/main.vue +25 -25
  136. package/packages/swipe/index.js +5 -5
  137. package/packages/swipe/src/main.vue +42 -42
  138. package/packages/switch/index.js +5 -5
  139. package/packages/switch/src/main.vue +38 -38
  140. package/packages/tab/index.js +5 -5
  141. package/packages/tab/src/main.vue +16 -16
  142. package/packages/table/index.js +5 -5
  143. package/packages/table/src/main.vue +1006 -1006
  144. package/packages/table-column/index.js +5 -5
  145. package/packages/table-column/src/main.vue +931 -931
  146. package/packages/table-column/src/mixins/table.js +12 -12
  147. package/packages/tabs/index.js +5 -5
  148. package/packages/tabs/src/main.vue +34 -34
  149. package/packages/tag/index.js +5 -5
  150. package/packages/tag/src/main.vue +16 -16
  151. package/packages/theme-chalk/lib/action-sheet.css +0 -0
  152. package/packages/theme-chalk/lib/base.css +1 -0
  153. package/packages/theme-chalk/lib/button-group.css +1 -0
  154. package/packages/theme-chalk/lib/button.css +1 -0
  155. package/packages/theme-chalk/lib/calendar.css +1 -0
  156. package/packages/theme-chalk/lib/cascader.css +1 -0
  157. package/packages/theme-chalk/lib/cell.css +1 -0
  158. package/packages/theme-chalk/lib/checkbox.css +1 -0
  159. package/packages/theme-chalk/lib/circle.css +1 -0
  160. package/packages/theme-chalk/lib/count-down.css +0 -0
  161. package/packages/theme-chalk/lib/date.css +0 -0
  162. package/packages/theme-chalk/lib/empty.css +0 -0
  163. package/packages/theme-chalk/lib/esign.css +1 -0
  164. package/packages/theme-chalk/lib/field.css +1 -0
  165. package/packages/theme-chalk/lib/flow-btn.css +1 -0
  166. package/packages/theme-chalk/lib/flow-list-task-read.css +1 -0
  167. package/packages/theme-chalk/lib/flow-list.css +1 -0
  168. package/packages/theme-chalk/lib/flow.css +1 -0
  169. package/packages/theme-chalk/lib/fonts/iconfont.scss +98 -0
  170. package/packages/theme-chalk/lib/fonts/iconfont.ttf +0 -0
  171. package/packages/theme-chalk/lib/fonts/iconfont.woff +0 -0
  172. package/packages/theme-chalk/lib/fonts/iconfont1.scss +90 -0
  173. package/packages/theme-chalk/lib/form.css +1 -0
  174. package/packages/theme-chalk/lib/grid-item.css +1 -0
  175. package/packages/theme-chalk/lib/grid.css +1 -0
  176. package/packages/theme-chalk/lib/icon.css +1 -0
  177. package/packages/theme-chalk/lib/image-preview.css +0 -0
  178. package/packages/theme-chalk/lib/image.css +0 -0
  179. package/packages/theme-chalk/lib/index.css +1 -0
  180. package/packages/theme-chalk/lib/list.css +0 -0
  181. package/packages/theme-chalk/lib/loading.css +0 -0
  182. package/packages/theme-chalk/lib/nav-bar.css +0 -0
  183. package/packages/theme-chalk/lib/navbar.css +1 -0
  184. package/packages/theme-chalk/lib/notice-bar.css +0 -0
  185. package/packages/theme-chalk/lib/pagination.css +1 -0
  186. package/packages/theme-chalk/lib/picker.css +1 -0
  187. package/packages/theme-chalk/lib/popover.css +0 -0
  188. package/packages/theme-chalk/lib/popup.css +0 -0
  189. package/packages/theme-chalk/lib/pull-refresh.css +0 -0
  190. package/packages/theme-chalk/lib/radio.css +1 -0
  191. package/packages/theme-chalk/lib/rate.css +0 -0
  192. package/packages/theme-chalk/lib/retrial-auth.css +1 -0
  193. package/packages/theme-chalk/lib/search.css +0 -0
  194. package/packages/theme-chalk/lib/selector.css +1 -0
  195. package/packages/theme-chalk/lib/skeleton.css +0 -0
  196. package/packages/theme-chalk/lib/stepper.css +1 -0
  197. package/packages/theme-chalk/lib/swipe.css +0 -0
  198. package/packages/theme-chalk/lib/switch.css +1 -0
  199. package/packages/theme-chalk/lib/tab.css +0 -0
  200. package/packages/theme-chalk/lib/table-column.css +0 -0
  201. package/packages/theme-chalk/lib/table.css +1 -0
  202. package/packages/theme-chalk/lib/tabs.css +1 -0
  203. package/packages/theme-chalk/lib/tag.css +1 -0
  204. package/packages/theme-chalk/lib/theme.css +0 -0
  205. package/packages/theme-chalk/lib/tree.css +1 -0
  206. package/packages/theme-chalk/lib/uploader.css +0 -0
  207. package/packages/theme-chalk/src/base.scss +195 -195
  208. package/packages/theme-chalk/src/button-group.scss +25 -25
  209. package/packages/theme-chalk/src/button.scss +2 -2
  210. package/packages/theme-chalk/src/calendar.scss +11 -11
  211. package/packages/theme-chalk/src/cascader.scss +11 -11
  212. package/packages/theme-chalk/src/cell.scss +14 -14
  213. package/packages/theme-chalk/src/checkbox.scss +9 -9
  214. package/packages/theme-chalk/src/circle.scss +6 -6
  215. package/packages/theme-chalk/src/common/var.scss +1525 -1525
  216. package/packages/theme-chalk/src/esign.scss +51 -51
  217. package/packages/theme-chalk/src/field.scss +98 -98
  218. package/packages/theme-chalk/src/flow-btn.scss +99 -99
  219. package/packages/theme-chalk/src/flow-list.scss +122 -122
  220. package/packages/theme-chalk/src/fonts/iconfont.scss +98 -98
  221. package/packages/theme-chalk/src/fonts/iconfont1.scss +90 -90
  222. package/packages/theme-chalk/src/form.scss +33 -33
  223. package/packages/theme-chalk/src/grid-item.scss +16 -16
  224. package/packages/theme-chalk/src/grid.scss +46 -46
  225. package/packages/theme-chalk/src/icon.scss +1661 -1661
  226. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  227. package/packages/theme-chalk/src/navbar.scss +5 -5
  228. package/packages/theme-chalk/src/pagination.scss +12 -12
  229. package/packages/theme-chalk/src/picker.scss +31 -31
  230. package/packages/theme-chalk/src/radio.scss +6 -6
  231. package/packages/theme-chalk/src/retrial-auth.scss +28 -28
  232. package/packages/theme-chalk/src/selector.scss +247 -247
  233. package/packages/theme-chalk/src/stepper.scss +9 -9
  234. package/packages/theme-chalk/src/switch.scss +5 -5
  235. package/packages/theme-chalk/src/table.scss +86 -86
  236. package/packages/theme-chalk/src/tabs.scss +31 -31
  237. package/packages/theme-chalk/src/tag.scss +12 -12
  238. package/packages/theme-chalk/src/theme.scss +1 -1
  239. package/packages/theme-chalk/src/tree.scss +127 -127
  240. package/packages/uploader/index.js +5 -5
  241. package/packages/uploader/src/main.vue +586 -31
  242. package/src/config/api.js +18 -0
  243. package/src/index.js +1 -1
  244. package/src/utils/axios.js +217 -217
  245. package/src/utils/date-util.js +312 -312
  246. package/src/utils/http.js +106 -106
  247. package/src/utils/rules.js +18 -18
  248. package/src/utils/store.js +21 -21
  249. package/packages/theme-chalk/gulpfile.js +0 -25
@@ -1,486 +1,486 @@
1
- <template>
2
- <div class="em-grid" @click="showHide = false">
3
- <van-grid
4
- v-bind="$attrs"
5
- v-on="$listeners"
6
- :border="border"
7
- :column-num="columnNum"
8
- >
9
- <draggable
10
- v-if="draggable"
11
- v-model="newData"
12
- style="width: 100%;"
13
- class="menu-list-draggable"
14
- >
15
- <transition-group class="menu-list-draggable-item" style="width: 100%;">
16
- <div
17
- :style="`display: inline-block;width:${100 / columnNum}%`"
18
- class="van-grid-item"
19
- v-for="item of newData"
20
- @mousedown.stop="onMouseDown(item)"
21
- @mouseup.stop="onMouseUp($event, item)"
22
- :key="item.id"
23
- >
24
- <div
25
- class="van-grid-item__content van-grid-item__content--center van-hairline"
26
- >
27
- <i
28
- class="van-icon van-grid-item__icon"
29
- :class="
30
- item.icon.startsWith('http') && item.icon.indexOf('/') != -1
31
- ? ''
32
- : `van-icon-${item.icon}`
33
- "
34
- :style="{
35
- fontSize:
36
- item.iconSize || $attrs['icon-size']
37
- ? item.iconSize || $attrs['icon-size']
38
- : ''
39
- }"
40
- >
41
- <img
42
- v-if="
43
- item.icon.startsWith('http') || item.icon.indexOf('/') != -1
44
- "
45
- class="van-icon__image"
46
- :src="item.icon"
47
- :style="{
48
- width:
49
- item.iconSize || $attrs['icon-size']
50
- ? item.iconSize || $attrs['icon-size']
51
- : '',
52
- height:
53
- item.iconSize || $attrs['icon-size']
54
- ? item.iconSize || $attrs['icon-size']
55
- : ''
56
- }"
57
- />
58
- <div
59
- v-show="item.dot"
60
- :style="{ background: item.dotColor || '' }"
61
- class="van-info van-info--dot"
62
- ></div>
63
- <div
64
- class="van-info"
65
- :style="{ background: badgeColor || '' }"
66
- v-show="item.badge"
67
- >
68
- {{
69
- maxBadge &&
70
- !isNaN(item.badge) &&
71
- Number(maxBadge) < Number(item.badge)
72
- ? maxBadge + '+'
73
- : item.badge
74
- }}
75
- </div>
76
- </i>
77
- <em-popover
78
- v-model="item.showPopover"
79
- :placement="placement"
80
- :theme="popoverTheme"
81
- @select="popoverSelect"
82
- :actions="popoverActions"
83
- ></em-popover>
84
- <span class="van-grid-item__text">{{ item.text }}</span>
85
- <van-icon
86
- v-if="showHide && item.menuType != 'add'"
87
- @click.stop="handleHide(item)"
88
- name="clear"
89
- size="20px"
90
- class="em-grid-del"
91
- />
92
- <div v-if="item.showMenu" class="em-grid-select-box">
93
- <van-icon size="30px" color="#fff" name="success" />
94
- </div>
95
- </div>
96
- </div>
97
- </transition-group>
98
- </draggable>
99
- <van-grid-item
100
- v-bind="item"
101
- v-for="(item, index) of newData"
102
- :key="index"
103
- :class="{ 'em-grid-ellipsis': textEllipsis }"
104
- :style="`width:${100 / columnNum}%;`"
105
- @click.stop="goView($event, item)"
106
- v-show="newData && newData.length > 0 && !draggable"
107
- >
108
- <!-- @mousedown.stop="onMouseDown(item)"
109
- @mouseup.stop="onMouseUp($event, item)" -->
110
- <!-- <div
111
- :style="`display: inline-block;width:${100 / columnNum}%`"
112
- class="van-grid-item"
113
- :class="{'border-none':!border}"
114
- v-for="item of newData"
115
- @click.stop="goView($event, item)"
116
- v-show="newData && newData.length > 0 && !draggable"
117
- :key="item.id"
118
- >
119
- <div
120
- class="van-grid-item__content van-grid-item__content--center van-hairline"
121
- > -->
122
- <i
123
- class="van-icon van-grid-item__icon"
124
- :class="
125
- item.icon.startsWith('http') && item.icon.indexOf('/') != -1
126
- ? ''
127
- : `van-icon-${item.icon}`
128
- "
129
- :style="{
130
- fontSize:
131
- item.iconSize || $attrs['icon-size']
132
- ? item.iconSize || $attrs['icon-size']
133
- : ''
134
- }"
135
- >
136
- <em-image
137
- v-if="item.icon.startsWith('http') || item.icon.indexOf('/') != -1"
138
- class="van-icon__image"
139
- :src="item.icon"
140
- :error-icon="errorIcon"
141
- :style="{
142
- width:
143
- item.iconSize || $attrs['icon-size']
144
- ? item.iconSize || $attrs['icon-size']
145
- : '',
146
- height:
147
- item.iconSize || $attrs['icon-size']
148
- ? item.iconSize || $attrs['icon-size']
149
- : ''
150
- }"
151
- />
152
- <div
153
- v-show="item.dot"
154
- :style="{ background: item.dotColor || '' }"
155
- class="van-info van-info--dot"
156
- ></div>
157
- <div
158
- class="van-info"
159
- :style="{ background: badgeColor || '' }"
160
- v-show="item.badge"
161
- >
162
- {{
163
- maxBadge &&
164
- !isNaN(item.badge) &&
165
- Number(maxBadge) < Number(item.badge)
166
- ? maxBadge + '+'
167
- : item.badge
168
- }}
169
- </div>
170
- </i>
171
- <em-popover
172
- v-model="item.showPopover"
173
- :placement="placement"
174
- @select="popoverSelect($event, item)"
175
- :theme="popoverTheme"
176
- :actions="popoverActions"
177
- ></em-popover>
178
- <span class="van-grid-item__text">{{ item.text }}</span>
179
- <van-icon
180
- v-if="showHide && item.menuType != 'add'"
181
- @click.stop="handleHide(item)"
182
- name="clear"
183
- size="20px"
184
- class="em-grid-del"
185
- />
186
- <div v-if="item.showMenu" class="em-grid-select-box">
187
- <van-icon size="30px" color="#fff" name="success" />
188
- </div>
189
- <!-- </div>
190
- </div> -->
191
- </van-grid-item>
192
- <slot v-show="newData && newData.length == 0" />
193
- </van-grid>
194
- <em-popup style="width:80%;height:50%" v-if="show" v-model="show">
195
- <div class="em-grid-popup">
196
- <p class="em-grid-popup-label">添加菜单</p>
197
- <em-grid
198
- class="em-grid-popup-content"
199
- :data="hideMenuList"
200
- v-bind="$attrs"
201
- :border="false"
202
- :column-num="columnNum"
203
- @click="selectMenu"
204
- />
205
- <div class="em-grid-popup-button">
206
- <em-button round style="width:49%" @click="show = false"
207
- >取消</em-button
208
- >
209
- <em-button
210
- round
211
- style="width:49%"
212
- type="primary"
213
- @click="handleShowMenu"
214
- >确认</em-button
215
- >
216
- </div>
217
- </div>
218
- </em-popup>
219
- </div>
220
- </template>
221
-
222
- <script>
223
- import draggable from 'vuedraggable';
224
- export default {
225
- name: 'EmGrid',
226
- inheritAttrs: false,
227
- components: { draggable },
228
- props: {
229
- data: {
230
- type: Array,
231
- default: () => []
232
- },
233
- columnNum: {
234
- type: [Number, String],
235
- default: 4
236
- },
237
- textEllipsis: {
238
- type: Boolean,
239
- default: false
240
- },
241
- targetStop: {
242
- type: Boolean,
243
- default: true
244
- },
245
- badgeColor: {
246
- type: String,
247
- default: ''
248
- },
249
- maxBadge: {
250
- type: String,
251
- default: ''
252
- },
253
- isHideMenu: {
254
- type: Boolean,
255
- default: false
256
- },
257
- hideMenuKey: {
258
- type: String,
259
- default: 'id'
260
- },
261
- hideMenu: {
262
- type: [String, Array],
263
- default: () => []
264
- },
265
- addMenuIcon: {
266
- type: String,
267
- default: 'plus'
268
- },
269
- addMenuIconSize: {
270
- type: String,
271
- default: '40px'
272
- },
273
- draggable: {
274
- type: Boolean,
275
- default: false
276
- },
277
- popoverActions: {
278
- type: Array,
279
- default: () => [{ text: '隐藏菜单', type: 'hideMenu' }]
280
- },
281
- isTouch: {
282
- type: Boolean,
283
- default: false
284
- },
285
- placement: {
286
- type: String,
287
- default: 'top'
288
- },
289
- popoverTheme: {
290
- type: String,
291
- default: 'dark'
292
- },
293
- border: {
294
- type: Boolean,
295
- default: true
296
- },
297
- errorIcon: {
298
- type: String,
299
- default: ''
300
- }
301
- },
302
- data() {
303
- return {
304
- timer: null,
305
- showHide: false,
306
- isLongPress: false,
307
- newData: [],
308
- show: false,
309
- showPopover: false,
310
- selectMenuArr: [],
311
- hideMenuList: []
312
- };
313
- },
314
- watch: {
315
- hideMenu: {
316
- handler(val) {
317
- this.defaultHide(val);
318
- },
319
- deep: true,
320
- immediate: true
321
- },
322
- data: {
323
- handler(val) {
324
- this.newData = JSON.parse(JSON.stringify(val));
325
- this.defaultHide(this.hideMenu);
326
- },
327
- deep: true,
328
- immediate: true
329
- }
330
- },
331
- methods: {
332
- popoverSelect(val, item) {
333
- if (val.type == 'hideMenu') {
334
- this.handleHide(item);
335
- } else {
336
- this.$emit('touchSelect', { action: val, data: item });
337
- }
338
- },
339
- onMouseDown(item) {
340
- // this.showPopover = true
341
- if (this.draggable || !this.isTouch) return;
342
- this.isLongPress = false;
343
- this.timer = setTimeout(() => {
344
- if (this.isLongPress === false) {
345
- this.isLongPress = true;
346
- this.lastTapTime = new Date().getTime();
347
- this.$set(item, 'showPopover', true);
348
- }
349
- }, 500);
350
- },
351
- onMouseUp($event, item) {
352
- if (this.isLongPress === false) {
353
- this.lastTapTime = new Date().getTime();
354
- this.$set(item, 'showPopover', false);
355
- this.goView($event, item);
356
- // 执行相应的操作
357
- }
358
- this.isLongPress = false;
359
- clearTimeout(this.timer);
360
- },
361
- hideDelIcon() {
362
- this.showHide = false;
363
- },
364
- handleShowMenu() {
365
- let str = this.selectMenuArr;
366
- // let str = this.selectMenuArr.join(',');
367
- if (Array.isArray(this.hideMenu)) {
368
- let hideArr = this.hideMenuList.filter(
369
- x => str.indexOf(x[this.hideMenuKey]) == -1
370
- );
371
- this.$emit('hide', hideArr);
372
- } else {
373
- let hide = this.hideMenuList.filter(
374
- x => str.indexOf(x[this.hideMenuKey]) == -1
375
- );
376
- hide = hide.map(x => x[this.hideMenuKey]);
377
- this.$emit('hide', hide.join(','));
378
- }
379
- this.selectMenuArr = [];
380
- this.show = false;
381
- },
382
- selectMenu(val) {
383
- if (val.showMenu) {
384
- this.selectMenuArr = this.selectMenuArr.filter(
385
- x => x != val[this.hideMenuKey]
386
- );
387
- } else {
388
- this.selectMenuArr.push(val[this.hideMenuKey]);
389
- }
390
- this.$set(val, 'showMenu', !val.showMenu);
391
- },
392
- defaultHide(val) {
393
- if (this.isHideMenu && val != undefined) {
394
- if (Array.isArray(val)) {
395
- let menuKey = val.map(x => x.id);
396
- // let menuKey = val.map(x => x.id).join(',');
397
- this.newData = this.data.filter(
398
- x => menuKey.indexOf(x[this.hideMenuKey]) == -1
399
- );
400
- this.hideMenuList = this.data.filter(
401
- x => menuKey.indexOf(x[this.hideMenuKey]) != -1
402
- );
403
- } else {
404
- val = val + '';
405
- this.newData = this.data.filter(
406
- x => val.indexOf(x[this.hideMenuKey]) == -1
407
- );
408
- this.hideMenuList = this.data.filter(
409
- x => val.indexOf(x[this.hideMenuKey]) != -1
410
- );
411
- }
412
- }
413
- if (
414
- this.isHideMenu != undefined &&
415
- (this.newData.length > 0 &&
416
- this.newData[this.newData.length - 1].menuType === 'add'
417
- ? this.newData.length - 1 < this.data.length
418
- : this.newData.length < this.data.length)
419
- ) {
420
- this.newData.push({
421
- icon: this.addMenuIcon || 'plus',
422
- iconSize: this.addMenuIconSize,
423
- menuType: 'add'
424
- });
425
- }
426
- },
427
- handleHide(item) {
428
- this.$dialog
429
- .confirm({
430
- message: `确定要隐藏<span style="color:red;font-weight:bold;margin:0px 5px">${
431
- item.text
432
- }</span>菜单吗?`
433
- })
434
- .then(() => {
435
- if (Array.isArray(this.hideMenu)) {
436
- let hideArr = [...this.hideMenu, item];
437
- this.$emit('hide', hideArr);
438
- } else {
439
- let hideStr = this.hideMenu
440
- ? this.hideMenu + ',' + item[this.hideMenuKey]
441
- : item[this.hideMenuKey];
442
- this.$emit('hide', hideStr);
443
- }
444
- });
445
- },
446
- goView(event, val) {
447
- if (val.menuType === 'add') {
448
- this.show = true;
449
- return;
450
- }
451
- const currentTime = new Date().getTime();
452
- const tapLength = currentTime - this.lastTapTime;
453
- this.lastTapTime = currentTime;
454
- // if (tapLength > 300) {
455
- // return;
456
- // }
457
- if (this.isHideMenu) {
458
- if (tapLength < 300) {
459
- this.handleDoubleClick(val);
460
- clearTimeout(this.timer);
461
- return;
462
- }
463
- if (this.showHide) {
464
- this.showHide = false;
465
- return;
466
- }
467
- this.timer = setTimeout(() => {
468
- this.$emit('click', val, event);
469
- this.targetStop && event.stopPropagation();
470
- }, 300);
471
- } else {
472
- this.$emit('click', val, event);
473
- this.targetStop && event.stopPropagation();
474
- }
475
- },
476
- handleDoubleClick(val) {
477
- if (this.isHideMenu) {
478
- this.showHide = true;
479
- }
480
- this.$emit('dbclick', val);
481
- }
482
- }
483
- };
484
- </script>
485
-
486
- <style></style>
1
+ <template>
2
+ <div class="em-grid" @click="showHide = false">
3
+ <van-grid
4
+ v-bind="$attrs"
5
+ v-on="$listeners"
6
+ :border="border"
7
+ :column-num="columnNum"
8
+ >
9
+ <draggable
10
+ v-if="draggable"
11
+ v-model="newData"
12
+ style="width: 100%;"
13
+ class="menu-list-draggable"
14
+ >
15
+ <transition-group class="menu-list-draggable-item" style="width: 100%;">
16
+ <div
17
+ :style="`display: inline-block;width:${100 / columnNum}%`"
18
+ class="van-grid-item"
19
+ v-for="item of newData"
20
+ @mousedown.stop="onMouseDown(item)"
21
+ @mouseup.stop="onMouseUp($event, item)"
22
+ :key="item.id"
23
+ >
24
+ <div
25
+ class="van-grid-item__content van-grid-item__content--center van-hairline"
26
+ >
27
+ <i
28
+ class="van-icon van-grid-item__icon"
29
+ :class="
30
+ item.icon.startsWith('http') && item.icon.indexOf('/') != -1
31
+ ? ''
32
+ : `van-icon-${item.icon}`
33
+ "
34
+ :style="{
35
+ fontSize:
36
+ item.iconSize || $attrs['icon-size']
37
+ ? item.iconSize || $attrs['icon-size']
38
+ : ''
39
+ }"
40
+ >
41
+ <img
42
+ v-if="
43
+ item.icon.startsWith('http') || item.icon.indexOf('/') != -1
44
+ "
45
+ class="van-icon__image"
46
+ :src="item.icon"
47
+ :style="{
48
+ width:
49
+ item.iconSize || $attrs['icon-size']
50
+ ? item.iconSize || $attrs['icon-size']
51
+ : '',
52
+ height:
53
+ item.iconSize || $attrs['icon-size']
54
+ ? item.iconSize || $attrs['icon-size']
55
+ : ''
56
+ }"
57
+ />
58
+ <div
59
+ v-show="item.dot"
60
+ :style="{ background: item.dotColor || '' }"
61
+ class="van-info van-info--dot"
62
+ ></div>
63
+ <div
64
+ class="van-info"
65
+ :style="{ background: badgeColor || '' }"
66
+ v-show="item.badge"
67
+ >
68
+ {{
69
+ maxBadge &&
70
+ !isNaN(item.badge) &&
71
+ Number(maxBadge) < Number(item.badge)
72
+ ? maxBadge + '+'
73
+ : item.badge
74
+ }}
75
+ </div>
76
+ </i>
77
+ <em-popover
78
+ v-model="item.showPopover"
79
+ :placement="placement"
80
+ :theme="popoverTheme"
81
+ @select="popoverSelect"
82
+ :actions="popoverActions"
83
+ ></em-popover>
84
+ <span class="van-grid-item__text">{{ item.text }}</span>
85
+ <van-icon
86
+ v-if="showHide && item.menuType != 'add'"
87
+ @click.stop="handleHide(item)"
88
+ name="clear"
89
+ size="20px"
90
+ class="em-grid-del"
91
+ />
92
+ <div v-if="item.showMenu" class="em-grid-select-box">
93
+ <van-icon size="30px" color="#fff" name="success" />
94
+ </div>
95
+ </div>
96
+ </div>
97
+ </transition-group>
98
+ </draggable>
99
+ <van-grid-item
100
+ v-bind="item"
101
+ v-for="(item, index) of newData"
102
+ :key="index"
103
+ :class="{ 'em-grid-ellipsis': textEllipsis }"
104
+ :style="`width:${100 / columnNum}%;`"
105
+ @click.stop="goView($event, item)"
106
+ v-show="newData && newData.length > 0 && !draggable"
107
+ >
108
+ <!-- @mousedown.stop="onMouseDown(item)"
109
+ @mouseup.stop="onMouseUp($event, item)" -->
110
+ <!-- <div
111
+ :style="`display: inline-block;width:${100 / columnNum}%`"
112
+ class="van-grid-item"
113
+ :class="{'border-none':!border}"
114
+ v-for="item of newData"
115
+ @click.stop="goView($event, item)"
116
+ v-show="newData && newData.length > 0 && !draggable"
117
+ :key="item.id"
118
+ >
119
+ <div
120
+ class="van-grid-item__content van-grid-item__content--center van-hairline"
121
+ > -->
122
+ <i
123
+ class="van-icon van-grid-item__icon"
124
+ :class="
125
+ item.icon.startsWith('http') && item.icon.indexOf('/') != -1
126
+ ? ''
127
+ : `van-icon-${item.icon}`
128
+ "
129
+ :style="{
130
+ fontSize:
131
+ item.iconSize || $attrs['icon-size']
132
+ ? item.iconSize || $attrs['icon-size']
133
+ : ''
134
+ }"
135
+ >
136
+ <em-image
137
+ v-if="item.icon.startsWith('http') || item.icon.indexOf('/') != -1"
138
+ class="van-icon__image"
139
+ :src="item.icon"
140
+ :error-icon="errorIcon"
141
+ :style="{
142
+ width:
143
+ item.iconSize || $attrs['icon-size']
144
+ ? item.iconSize || $attrs['icon-size']
145
+ : '',
146
+ height:
147
+ item.iconSize || $attrs['icon-size']
148
+ ? item.iconSize || $attrs['icon-size']
149
+ : ''
150
+ }"
151
+ />
152
+ <div
153
+ v-show="item.dot"
154
+ :style="{ background: item.dotColor || '' }"
155
+ class="van-info van-info--dot"
156
+ ></div>
157
+ <div
158
+ class="van-info"
159
+ :style="{ background: badgeColor || '' }"
160
+ v-show="item.badge"
161
+ >
162
+ {{
163
+ maxBadge &&
164
+ !isNaN(item.badge) &&
165
+ Number(maxBadge) < Number(item.badge)
166
+ ? maxBadge + '+'
167
+ : item.badge
168
+ }}
169
+ </div>
170
+ </i>
171
+ <em-popover
172
+ v-model="item.showPopover"
173
+ :placement="placement"
174
+ @select="popoverSelect($event, item)"
175
+ :theme="popoverTheme"
176
+ :actions="popoverActions"
177
+ ></em-popover>
178
+ <span class="van-grid-item__text">{{ item.text }}</span>
179
+ <van-icon
180
+ v-if="showHide && item.menuType != 'add'"
181
+ @click.stop="handleHide(item)"
182
+ name="clear"
183
+ size="20px"
184
+ class="em-grid-del"
185
+ />
186
+ <div v-if="item.showMenu" class="em-grid-select-box">
187
+ <van-icon size="30px" color="#fff" name="success" />
188
+ </div>
189
+ <!-- </div>
190
+ </div> -->
191
+ </van-grid-item>
192
+ <slot v-show="newData && newData.length == 0" />
193
+ </van-grid>
194
+ <em-popup style="width:80%;height:50%" v-if="show" v-model="show">
195
+ <div class="em-grid-popup">
196
+ <p class="em-grid-popup-label">添加菜单</p>
197
+ <em-grid
198
+ class="em-grid-popup-content"
199
+ :data="hideMenuList"
200
+ v-bind="$attrs"
201
+ :border="false"
202
+ :column-num="columnNum"
203
+ @click="selectMenu"
204
+ />
205
+ <div class="em-grid-popup-button">
206
+ <em-button round style="width:49%" @click="show = false"
207
+ >取消</em-button
208
+ >
209
+ <em-button
210
+ round
211
+ style="width:49%"
212
+ type="primary"
213
+ @click="handleShowMenu"
214
+ >确认</em-button
215
+ >
216
+ </div>
217
+ </div>
218
+ </em-popup>
219
+ </div>
220
+ </template>
221
+
222
+ <script>
223
+ import draggable from 'vuedraggable';
224
+ export default {
225
+ name: 'EmGrid',
226
+ inheritAttrs: false,
227
+ components: { draggable },
228
+ props: {
229
+ data: {
230
+ type: Array,
231
+ default: () => []
232
+ },
233
+ columnNum: {
234
+ type: [Number, String],
235
+ default: 4
236
+ },
237
+ textEllipsis: {
238
+ type: Boolean,
239
+ default: false
240
+ },
241
+ targetStop: {
242
+ type: Boolean,
243
+ default: true
244
+ },
245
+ badgeColor: {
246
+ type: String,
247
+ default: ''
248
+ },
249
+ maxBadge: {
250
+ type: String,
251
+ default: ''
252
+ },
253
+ isHideMenu: {
254
+ type: Boolean,
255
+ default: false
256
+ },
257
+ hideMenuKey: {
258
+ type: String,
259
+ default: 'id'
260
+ },
261
+ hideMenu: {
262
+ type: [String, Array],
263
+ default: () => []
264
+ },
265
+ addMenuIcon: {
266
+ type: String,
267
+ default: 'plus'
268
+ },
269
+ addMenuIconSize: {
270
+ type: String,
271
+ default: '40px'
272
+ },
273
+ draggable: {
274
+ type: Boolean,
275
+ default: false
276
+ },
277
+ popoverActions: {
278
+ type: Array,
279
+ default: () => [{ text: '隐藏菜单', type: 'hideMenu' }]
280
+ },
281
+ isTouch: {
282
+ type: Boolean,
283
+ default: false
284
+ },
285
+ placement: {
286
+ type: String,
287
+ default: 'top'
288
+ },
289
+ popoverTheme: {
290
+ type: String,
291
+ default: 'dark'
292
+ },
293
+ border: {
294
+ type: Boolean,
295
+ default: true
296
+ },
297
+ errorIcon: {
298
+ type: String,
299
+ default: ''
300
+ }
301
+ },
302
+ data() {
303
+ return {
304
+ timer: null,
305
+ showHide: false,
306
+ isLongPress: false,
307
+ newData: [],
308
+ show: false,
309
+ showPopover: false,
310
+ selectMenuArr: [],
311
+ hideMenuList: []
312
+ };
313
+ },
314
+ watch: {
315
+ hideMenu: {
316
+ handler(val) {
317
+ this.defaultHide(val);
318
+ },
319
+ deep: true,
320
+ immediate: true
321
+ },
322
+ data: {
323
+ handler(val) {
324
+ this.newData = JSON.parse(JSON.stringify(val));
325
+ this.defaultHide(this.hideMenu);
326
+ },
327
+ deep: true,
328
+ immediate: true
329
+ }
330
+ },
331
+ methods: {
332
+ popoverSelect(val, item) {
333
+ if (val.type == 'hideMenu') {
334
+ this.handleHide(item);
335
+ } else {
336
+ this.$emit('touchSelect', { action: val, data: item });
337
+ }
338
+ },
339
+ onMouseDown(item) {
340
+ // this.showPopover = true
341
+ if (this.draggable || !this.isTouch) return;
342
+ this.isLongPress = false;
343
+ this.timer = setTimeout(() => {
344
+ if (this.isLongPress === false) {
345
+ this.isLongPress = true;
346
+ this.lastTapTime = new Date().getTime();
347
+ this.$set(item, 'showPopover', true);
348
+ }
349
+ }, 500);
350
+ },
351
+ onMouseUp($event, item) {
352
+ if (this.isLongPress === false) {
353
+ this.lastTapTime = new Date().getTime();
354
+ this.$set(item, 'showPopover', false);
355
+ this.goView($event, item);
356
+ // 执行相应的操作
357
+ }
358
+ this.isLongPress = false;
359
+ clearTimeout(this.timer);
360
+ },
361
+ hideDelIcon() {
362
+ this.showHide = false;
363
+ },
364
+ handleShowMenu() {
365
+ let str = this.selectMenuArr;
366
+ // let str = this.selectMenuArr.join(',');
367
+ if (Array.isArray(this.hideMenu)) {
368
+ let hideArr = this.hideMenuList.filter(
369
+ x => str.indexOf(x[this.hideMenuKey]) == -1
370
+ );
371
+ this.$emit('hide', hideArr);
372
+ } else {
373
+ let hide = this.hideMenuList.filter(
374
+ x => str.indexOf(x[this.hideMenuKey]) == -1
375
+ );
376
+ hide = hide.map(x => x[this.hideMenuKey]);
377
+ this.$emit('hide', hide.join(','));
378
+ }
379
+ this.selectMenuArr = [];
380
+ this.show = false;
381
+ },
382
+ selectMenu(val) {
383
+ if (val.showMenu) {
384
+ this.selectMenuArr = this.selectMenuArr.filter(
385
+ x => x != val[this.hideMenuKey]
386
+ );
387
+ } else {
388
+ this.selectMenuArr.push(val[this.hideMenuKey]);
389
+ }
390
+ this.$set(val, 'showMenu', !val.showMenu);
391
+ },
392
+ defaultHide(val) {
393
+ if (this.isHideMenu && val != undefined) {
394
+ if (Array.isArray(val)) {
395
+ let menuKey = val.map(x => x.id);
396
+ // let menuKey = val.map(x => x.id).join(',');
397
+ this.newData = this.data.filter(
398
+ x => menuKey.indexOf(x[this.hideMenuKey]) == -1
399
+ );
400
+ this.hideMenuList = this.data.filter(
401
+ x => menuKey.indexOf(x[this.hideMenuKey]) != -1
402
+ );
403
+ } else {
404
+ val = val + '';
405
+ this.newData = this.data.filter(
406
+ x => val.indexOf(x[this.hideMenuKey]) == -1
407
+ );
408
+ this.hideMenuList = this.data.filter(
409
+ x => val.indexOf(x[this.hideMenuKey]) != -1
410
+ );
411
+ }
412
+ }
413
+ if (
414
+ this.isHideMenu != undefined &&
415
+ (this.newData.length > 0 &&
416
+ this.newData[this.newData.length - 1].menuType === 'add'
417
+ ? this.newData.length - 1 < this.data.length
418
+ : this.newData.length < this.data.length)
419
+ ) {
420
+ this.newData.push({
421
+ icon: this.addMenuIcon || 'plus',
422
+ iconSize: this.addMenuIconSize,
423
+ menuType: 'add'
424
+ });
425
+ }
426
+ },
427
+ handleHide(item) {
428
+ this.$dialog
429
+ .confirm({
430
+ message: `确定要隐藏<span style="color:red;font-weight:bold;margin:0px 5px">${
431
+ item.text
432
+ }</span>菜单吗?`
433
+ })
434
+ .then(() => {
435
+ if (Array.isArray(this.hideMenu)) {
436
+ let hideArr = [...this.hideMenu, item];
437
+ this.$emit('hide', hideArr);
438
+ } else {
439
+ let hideStr = this.hideMenu
440
+ ? this.hideMenu + ',' + item[this.hideMenuKey]
441
+ : item[this.hideMenuKey];
442
+ this.$emit('hide', hideStr);
443
+ }
444
+ });
445
+ },
446
+ goView(event, val) {
447
+ if (val.menuType === 'add') {
448
+ this.show = true;
449
+ return;
450
+ }
451
+ const currentTime = new Date().getTime();
452
+ const tapLength = currentTime - this.lastTapTime;
453
+ this.lastTapTime = currentTime;
454
+ // if (tapLength > 300) {
455
+ // return;
456
+ // }
457
+ if (this.isHideMenu) {
458
+ if (tapLength < 300) {
459
+ this.handleDoubleClick(val);
460
+ clearTimeout(this.timer);
461
+ return;
462
+ }
463
+ if (this.showHide) {
464
+ this.showHide = false;
465
+ return;
466
+ }
467
+ this.timer = setTimeout(() => {
468
+ this.$emit('click', val, event);
469
+ this.targetStop && event.stopPropagation();
470
+ }, 300);
471
+ } else {
472
+ this.$emit('click', val, event);
473
+ this.targetStop && event.stopPropagation();
474
+ }
475
+ },
476
+ handleDoubleClick(val) {
477
+ if (this.isHideMenu) {
478
+ this.showHide = true;
479
+ }
480
+ this.$emit('dbclick', val);
481
+ }
482
+ }
483
+ };
484
+ </script>
485
+
486
+ <style></style>