@aochuang/common 1.0.1 → 1.0.126

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 (283) hide show
  1. package/common/index.js +13 -0
  2. package/common/resizable/index.js +3 -0
  3. package/common/resizable/resizable.vue +260 -0
  4. package/common/scroll-load-more/index.js +3 -0
  5. package/common/scroll-load-more/scroll-load-more.vue +397 -0
  6. package/common/static-map/index.js +3 -0
  7. package/common/static-map/static-map.vue +87 -0
  8. package/common/tooltip/tooltip.vue +27 -7
  9. package/common/viewer/index.js +4 -0
  10. package/common/viewer/util.js +40 -0
  11. package/common/viewer/viewer.vue +607 -0
  12. package/common/viewer-pedestal/index.js +3 -0
  13. package/common/viewer-pedestal/viewer-pedestal.vue +70 -0
  14. package/common/voice/index.js +21 -0
  15. package/common/voice/util.js +18 -0
  16. package/common/voice/voice-player-aac.js +584 -0
  17. package/common/voice/voice-player-audio.js +159 -0
  18. package/common/voice/voice-player.js +309 -0
  19. package/common/voice/voice.vue +274 -0
  20. package/common/voice-player/index.js +3 -0
  21. package/common/voice-player/voice-player.vue +785 -0
  22. package/common/waterfall/index.js +3 -0
  23. package/common/waterfall/waterfall.vue +169 -0
  24. package/common/wechat-emoji/emoji/666.png +0 -0
  25. package/common/wechat-emoji/emoji/Emm.png +0 -0
  26. package/common/wechat-emoji/emoji/OK.png +0 -0
  27. package/common/wechat-emoji/emoji//344/272/262/344/272/262.png +0 -0
  28. package/common/wechat-emoji/emoji//344/276/277/344/276/277.png +0 -0
  29. package/common/wechat-emoji/emoji//345/201/267/347/254/221.png +0 -0
  30. package/common/wechat-emoji/emoji//345/202/262/346/205/242.png +0 -0
  31. package/common/wechat-emoji/emoji//345/206/215/350/247/201.png +0 -0
  32. package/common/wechat-emoji/emoji//345/207/213/350/260/242.png +0 -0
  33. package/common/wechat-emoji/emoji//345/210/240/351/231/244.png +0 -0
  34. package/common/wechat-emoji/emoji//345/212/240/346/262/271.png +0 -0
  35. package/common/wechat-emoji/emoji//345/213/276/345/274/225.png +0 -0
  36. package/common/wechat-emoji/emoji//345/217/221/345/221/206.png +0 -0
  37. package/common/wechat-emoji/emoji//345/217/221/346/200/222.png +0 -0
  38. package/common/wechat-emoji/emoji//345/217/221/346/212/226.png +0 -0
  39. package/common/wechat-emoji/emoji//345/217/257/346/200/234.png +0 -0
  40. package/common/wechat-emoji/emoji//345/217/263/345/223/274/345/223/274.png +0 -0
  41. package/common/wechat-emoji/emoji//345/217/271/346/260/224.png +0 -0
  42. package/common/wechat-emoji/emoji//345/220/203/347/223/234.png +0 -0
  43. package/common/wechat-emoji/emoji//345/220/210/345/215/201.png +0 -0
  44. package/common/wechat-emoji/emoji//345/220/220.png +0 -0
  45. package/common/wechat-emoji/emoji//345/220/220/350/210/214/345/244/264.png +0 -0
  46. package/common/wechat-emoji/emoji//345/221/262/347/211/231.png +0 -0
  47. package/common/wechat-emoji/emoji//345/222/222/351/252/202.png +0 -0
  48. package/common/wechat-emoji/emoji//345/222/226/345/225/241.png +0 -0
  49. package/common/wechat-emoji/emoji//345/223/207.png +0 -0
  50. package/common/wechat-emoji/emoji//345/223/210/346/254/240.png +0 -0
  51. package/common/wechat-emoji/emoji//345/225/244/351/205/222.png +0 -0
  52. package/common/wechat-emoji/emoji//345/230/230.png +0 -0
  53. package/common/wechat-emoji/emoji//345/230/264/345/224/207.png +0 -0
  54. package/common/wechat-emoji/emoji//345/230/277/345/223/210.png +0 -0
  55. package/common/wechat-emoji/emoji//345/233/247.png +0 -0
  56. package/common/wechat-emoji/emoji//345/233/260.png +0 -0
  57. package/common/wechat-emoji/emoji//345/235/217/347/254/221.png +0 -0
  58. package/common/wechat-emoji/emoji//345/244/247/345/223/255.png +0 -0
  59. package/common/wechat-emoji/emoji//345/244/251/345/225/212.png +0 -0
  60. package/common/wechat-emoji/emoji//345/244/252/351/230/263.png +0 -0
  61. package/common/wechat-emoji/emoji//345/244/261/346/234/233.png +0 -0
  62. package/common/wechat-emoji/emoji//345/245/213/346/226/227.png +0 -0
  63. package/common/wechat-emoji/emoji//345/245/270/347/254/221.png +0 -0
  64. package/common/wechat-emoji/emoji//345/245/275/347/232/204.png +0 -0
  65. package/common/wechat-emoji/emoji//345/247/224/345/261/210.png +0 -0
  66. package/common/wechat-emoji/emoji//345/256/263/347/276/236.png +0 -0
  67. package/common/wechat-emoji/emoji//345/260/264/345/260/254.png +0 -0
  68. package/common/wechat-emoji/emoji//345/267/246/345/223/274/345/223/274.png +0 -0
  69. package/common/wechat-emoji/emoji//345/272/206/347/245/235.png +0 -0
  70. package/common/wechat-emoji/emoji//345/274/261.png +0 -0
  71. package/common/wechat-emoji/emoji//345/274/272.png +0 -0
  72. package/common/wechat-emoji/emoji//345/276/227/346/204/217.png +0 -0
  73. package/common/wechat-emoji/emoji//345/276/256/347/254/221.png +0 -0
  74. package/common/wechat-emoji/emoji//345/277/203/347/242/216.png +0 -0
  75. package/common/wechat-emoji/emoji//345/277/253/345/223/255/344/272/206.png +0 -0
  76. package/common/wechat-emoji/emoji//346/200/204/347/201/253.png +0 -0
  77. package/common/wechat-emoji/emoji//346/201/220/346/203/247.png +0 -0
  78. package/common/wechat-emoji/emoji//346/202/240/351/227/262.png +0 -0
  79. package/common/wechat-emoji/emoji//346/203/212/346/201/220.png +0 -0
  80. package/common/wechat-emoji/emoji//346/203/212/350/256/266.png +0 -0
  81. package/common/wechat-emoji/emoji//346/204/211/345/277/253.png +0 -0
  82. package/common/wechat-emoji/emoji//346/206/250/347/254/221.png +0 -0
  83. package/common/wechat-emoji/emoji//346/211/223/350/204/270.png +0 -0
  84. package/common/wechat-emoji/emoji//346/212/223/347/213/202.png +0 -0
  85. package/common/wechat-emoji/emoji//346/212/240/351/274/273.png +0 -0
  86. package/common/wechat-emoji/emoji//346/212/261/346/213/263.png +0 -0
  87. package/common/wechat-emoji/emoji//346/213/245/346/212/261.png +0 -0
  88. package/common/wechat-emoji/emoji//346/213/263/345/244/264.png +0 -0
  89. package/common/wechat-emoji/emoji//346/215/202/350/204/270.png +0 -0
  90. package/common/wechat-emoji/emoji//346/217/241/346/211/213.png +0 -0
  91. package/common/wechat-emoji/emoji//346/222/207/345/230/264.png +0 -0
  92. package/common/wechat-emoji/emoji//346/223/246/346/261/227.png +0 -0
  93. package/common/wechat-emoji/emoji//346/225/262/346/211/223.png +0 -0
  94. package/common/wechat-emoji/emoji//346/227/240/350/257/255.png +0 -0
  95. package/common/wechat-emoji/emoji//346/227/272/346/237/264.png +0 -0
  96. package/common/wechat-emoji/emoji//346/231/225.png +0 -0
  97. package/common/wechat-emoji/emoji//346/234/210/344/272/256.png +0 -0
  98. package/common/wechat-emoji/emoji//346/234/272/346/231/272.png +0 -0
  99. package/common/wechat-emoji/emoji//346/261/227.png +0 -0
  100. package/common/wechat-emoji/emoji//346/265/201/346/261/227.png +0 -0
  101. package/common/wechat-emoji/emoji//346/265/201/346/263/252.png +0 -0
  102. package/common/wechat-emoji/emoji//347/202/270/345/274/271.png +0 -0
  103. package/common/wechat-emoji/emoji//347/203/237/350/212/261.png +0 -0
  104. package/common/wechat-emoji/emoji//347/210/206/347/253/271.png +0 -0
  105. package/common/wechat-emoji/emoji//347/210/261/345/277/203.png +0 -0
  106. package/common/wechat-emoji/emoji//347/214/252/345/244/264.png +0 -0
  107. package/common/wechat-emoji/emoji//347/216/253/347/221/260.png +0 -0
  108. package/common/wechat-emoji/emoji//347/224/237/347/227/205.png +0 -0
  109. package/common/wechat-emoji/emoji//347/226/221/351/227/256.png +0 -0
  110. package/common/wechat-emoji/emoji//347/231/274.png +0 -0
  111. package/common/wechat-emoji/emoji//347/231/275/347/234/274.png +0 -0
  112. package/common/wechat-emoji/emoji//347/232/261/347/234/211.png +0 -0
  113. package/common/wechat-emoji/emoji//347/235/241.png +0 -0
  114. package/common/wechat-emoji/emoji//347/240/264/346/266/225/344/270/272/347/254/221.png +0 -0
  115. package/common/wechat-emoji/emoji//347/244/274/347/211/251.png +0 -0
  116. package/common/wechat-emoji/emoji//347/244/276/344/274/232/347/244/276/344/274/232.png +0 -0
  117. package/common/wechat-emoji/emoji//347/246/217.png +0 -0
  118. package/common/wechat-emoji/emoji//347/254/221/350/204/270.png +0 -0
  119. package/common/wechat-emoji/emoji//347/272/242/345/214/205.png +0 -0
  120. package/common/wechat-emoji/emoji//347/277/273/347/231/275/347/234/274.png +0 -0
  121. package/common/wechat-emoji/emoji//350/200/266.png +0 -0
  122. package/common/wechat-emoji/emoji//350/203/234/345/210/251.png +0 -0
  123. package/common/wechat-emoji/emoji//350/204/270/347/272/242.png +0 -0
  124. package/common/wechat-emoji/emoji//350/211/262.png +0 -0
  125. package/common/wechat-emoji/emoji//350/213/246/346/266/251.png +0 -0
  126. package/common/wechat-emoji/emoji//350/217/234/345/210/200.png +0 -0
  127. package/common/wechat-emoji/emoji//350/233/213/347/263/225.png +0 -0
  128. package/common/wechat-emoji/emoji//350/241/260.png +0 -0
  129. package/common/wechat-emoji/emoji//350/243/202/345/274/200.png +0 -0
  130. package/common/wechat-emoji/emoji//350/245/277/347/223/234.png +0 -0
  131. package/common/wechat-emoji/emoji//350/256/251/346/210/221/347/234/213/347/234/213.png +0 -0
  132. package/common/wechat-emoji/emoji//350/260/203/347/232/256.png +0 -0
  133. package/common/wechat-emoji/emoji//350/267/263/350/267/263.png +0 -0
  134. package/common/wechat-emoji/emoji//350/275/254/345/234/210.png +0 -0
  135. package/common/wechat-emoji/emoji//351/204/231/350/247/206.png +0 -0
  136. package/common/wechat-emoji/emoji//351/227/255/345/230/264.png +0 -0
  137. package/common/wechat-emoji/emoji//351/230/264/351/231/251.png +0 -0
  138. package/common/wechat-emoji/emoji//351/232/276/350/277/207.png +0 -0
  139. package/common/wechat-emoji/emoji//351/252/267/351/253/205.png +0 -0
  140. package/common/wechat-emoji/emoji//351/254/274/350/204/270.png +0 -0
  141. package/common/wechat-emoji/emoji//351/270/241.png +0 -0
  142. package/common/wechat-emoji/emoji//351/274/223/346/216/214.png +0 -0
  143. package/common/wechat-emoji/index.js +14 -0
  144. package/common/wechat-emoji/order.json +111 -0
  145. package/common/wechat-emoji/utils.js +52 -0
  146. package/common/wechat-emoji/wechat-emoji.vue +74 -0
  147. package/common/wechat-emoji-select/index.js +3 -0
  148. package/common/wechat-emoji-select/wechat-emoji-select.vue +67 -0
  149. package/components/advanced-filter/advanced-filter-condition.vue +1 -1
  150. package/components/advanced-filter/advanced-filter.vue +6 -1
  151. package/components/advanced-filter/index.js +11 -12
  152. package/components/avatar/avatar.vue +9 -5
  153. package/components/button/button.vue +15 -2
  154. package/components/date-picker/date-picker.vue +9 -2
  155. package/components/dialog/dialog.vue +6 -1
  156. package/components/dropdown/dropdown-item.vue +10 -2
  157. package/components/dropdown/dropdown.vue +45 -5
  158. package/components/dropdown/index.js +8 -8
  159. package/components/empty/empty.vue +29 -2
  160. package/components/filter/filter.vue +1 -1
  161. package/components/filter/index.js +10 -10
  162. package/components/form/form.vue +33 -2
  163. package/components/form/index.js +11 -0
  164. package/components/grid/grid-column.vue +1 -0
  165. package/components/grid/grid-table.vue +6 -4
  166. package/components/grid/grid.vue +15 -3
  167. package/components/grid/index.js +31 -32
  168. package/components/icon/demo_index.html +2752 -1073
  169. package/components/icon/iconfont.css +299 -7
  170. package/components/icon/iconfont.js +1 -1
  171. package/components/icon/iconfont.json +518 -7
  172. package/components/icon/iconfont.ttf +0 -0
  173. package/components/icon/iconfont.woff +0 -0
  174. package/components/icon/iconfont.woff2 +0 -0
  175. package/components/image/image.vue +91 -13
  176. package/components/image/index.js +3 -1
  177. package/components/image/util.js +82 -1
  178. package/components/index.js +6 -2
  179. package/components/menu/index.js +13 -7
  180. package/components/menu/menu-group.vue +6 -1
  181. package/components/menu/menu-item.vue +57 -3
  182. package/components/menu/menu.vue +1 -1
  183. package/components/message/message.js +12 -9
  184. package/components/message-box/index.js +4 -0
  185. package/components/pagination/pagination.vue +11 -7
  186. package/components/popover/popover.vue +24 -1
  187. package/components/searchbox/searchbox.vue +15 -3
  188. package/components/select/index.js +2 -0
  189. package/components/select/select.vue +7 -1
  190. package/components/skeleton/index.js +2 -0
  191. package/components/sortable/index.js +7 -5
  192. package/components/sortable/sortable.vue +5 -0
  193. package/components/tabbar/index.js +9 -0
  194. package/components/tabbar/tabbar-item.vue +162 -0
  195. package/components/tabbar/tabbar.vue +49 -0
  196. package/components/tabs/index.js +2 -0
  197. package/components/tabs/tabs.vue +5 -0
  198. package/components/tag/index.js +4 -4
  199. package/components/tag/tag.less +12 -3
  200. package/components/textarea/textarea.vue +19 -3
  201. package/components/time-picker/time-picker.vue +7 -0
  202. package/components/toolbar/index.js +2 -0
  203. package/components/transfer/index.js +4 -4
  204. package/components/transfer/transfer-element.vue +109 -0
  205. package/components/transfer/transfer.vue +22 -7
  206. package/components/tree/tree.vue +175 -16
  207. package/components/video/video.vue +50 -2
  208. package/package.json +12 -1
  209. package/uni-common/more-button/more-button.vue +23 -0
  210. package/uni-common/popup-select/popup-select.vue +217 -0
  211. package/uni-common/portray/portray.vue +54 -0
  212. package/uni-common/refresh-view/refresh-view.vue +94 -0
  213. package/uni-common/scroll-load-more/scroll-load-more.vue +201 -0
  214. package/uni-common/tree-popup-select/index.js +3 -0
  215. package/uni-common/tree-popup-select/tree-popup-select-panel.vue +92 -0
  216. package/uni-common/tree-popup-select/tree-popup-select.vue +124 -0
  217. package/uni-common/tree-popup-select/util.js +19 -0
  218. package/uni-common/wechat-emoji/index.js +13 -0
  219. package/uni-common/wechat-emoji/order.json +438 -0
  220. package/uni-common/wechat-emoji/utils.js +52 -0
  221. package/uni-common/wechat-emoji/wechat-emoji.vue +74 -0
  222. package/uni-components/avatar/avatar.vue +81 -0
  223. package/uni-components/badge/badge.vue +57 -0
  224. package/uni-components/empty/empty.vue +27 -0
  225. package/uni-components/exception/exception.vue +47 -0
  226. package/uni-components/icon/demo.css +539 -0
  227. package/uni-components/icon/demo_index.html +1591 -0
  228. package/uni-components/icon/icon.vue +48 -0
  229. package/uni-components/icon/iconfont.css +259 -0
  230. package/uni-components/icon/iconfont.js +1 -0
  231. package/uni-components/icon/iconfont.json +436 -0
  232. package/uni-components/icon/iconfont.ttf +0 -0
  233. package/uni-components/icon/iconfont.woff +0 -0
  234. package/uni-components/icon/iconfont.woff2 +0 -0
  235. package/uni-components/icon/index.js +3 -0
  236. package/uni-components/image/image.vue +38 -0
  237. package/uni-components/image/index.js +3 -0
  238. package/uni-components/loading/index.js +3 -0
  239. package/uni-components/loading/loading.vue +30 -0
  240. package/uni-components/message/message-item.vue +29 -0
  241. package/uni-components/message/message.js +80 -0
  242. package/uni-components/message/message.vue +30 -0
  243. package/uni-components/message-box/message-box-item.vue +54 -0
  244. package/uni-components/message-box/message-box.js +91 -0
  245. package/uni-components/message-box/message-box.vue +52 -0
  246. package/uni-components/picker/picker.vue +270 -0
  247. package/uni-components/popup/index.js +3 -0
  248. package/uni-components/popup/popup.vue +143 -0
  249. package/uni-components/search/index.js +3 -0
  250. package/uni-components/search/search.vue +86 -0
  251. package/uni-components/skeleton/skeleton-chat.vue +85 -0
  252. package/uni-components/skeleton/skeleton-contact.vue +84 -0
  253. package/uni-components/skeleton/skeleton-detail.vue +84 -0
  254. package/uni-components/skeleton/skeleton.vue +32 -0
  255. package/uni-components/tabbar/tabbar-item.vue +33 -0
  256. package/uni-components/tabbar/tabbar.vue +87 -0
  257. package/uni-components/tree/index.js +3 -0
  258. package/uni-components/tree/tree-select-loading.vue +48 -0
  259. package/uni-components/tree/tree-select-node.vue +202 -0
  260. package/uni-components/tree/tree-select-store.js +520 -0
  261. package/uni-components/tree/tree-select.vue +210 -0
  262. package/uni-components/tree/utils.js +33 -0
  263. package/uni-components/video/index.js +3 -0
  264. package/uni-components/video/video.vue +29 -0
  265. package/uni-components/voice/index.js +3 -0
  266. package/uni-components/voice/voice.vue +24 -0
  267. package/uni-components/waterfall/index.js +3 -0
  268. package/uni-components/waterfall/util.js +72 -0
  269. package/uni-components/waterfall/waterfall.vue +147 -0
  270. package/utils/data.js +128 -0
  271. package/utils/date.js +484 -44
  272. package/utils/dom.js +37 -0
  273. package/utils/event.js +92 -0
  274. package/utils/file.js +76 -0
  275. package/utils/json.js +22 -1
  276. package/utils/network-detector.js +258 -0
  277. package/utils/oss.js +11 -0
  278. package/utils/share-message.js +81 -0
  279. package/utils/share-websocket.js +127 -0
  280. package/utils/string.js +59 -0
  281. package/utils/time-task.js +60 -0
  282. package/utils/url.js +46 -0
  283. package/utils/util.js +416 -1
package/utils/date.js CHANGED
@@ -2,54 +2,494 @@
2
2
  * 格式化日期
3
3
  */
4
4
  export function formatDate (date, fmt = 'YYYY-mm-dd HH:MM:SS') {
5
- if (!date) {
6
- return
7
- }
8
- if (typeof date === 'string' && /^[0-9]+$/.test(date)) {
9
- date = Number(date)
10
- }
11
- if (typeof date === 'string' || typeof date === 'number') {
12
- date = new Date(date)
13
- }
14
- if (isNaN(date.getTime())) {
15
- return
5
+ if (!date) {
6
+ return
7
+ }
8
+ if (typeof date === 'string' && /^[0-9]+$/.test(date)) {
9
+ date = Number(date)
10
+ }
11
+ if (typeof date === 'string' || typeof date === 'number') {
12
+ date = new Date(date)
13
+ }
14
+ if (isNaN(date.getTime())) {
15
+ return
16
+ }
17
+ let ret
18
+ const opt = {
19
+ 'Y+': date.getFullYear().toString(),
20
+ 'm+': (date.getMonth() + 1).toString(),
21
+ 'd+': date.getDate().toString(),
22
+ 'H+': date.getHours().toString(),
23
+ 'M+': date.getMinutes().toString(),
24
+ 'S+': date.getSeconds().toString()
25
+ }
26
+ for (const k in opt) {
27
+ ret = new RegExp('(' + k + ')').exec(fmt)
28
+ if (ret) {
29
+ fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
16
30
  }
17
- let ret
18
- const opt = {
19
- 'Y+': date.getFullYear().toString(),
20
- 'm+': (date.getMonth() + 1).toString(),
21
- 'd+': date.getDate().toString(),
22
- 'H+': date.getHours().toString(),
23
- 'M+': date.getMinutes().toString(),
24
- 'S+': date.getSeconds().toString()
31
+ }
32
+ return fmt
33
+ }
34
+
35
+ /**
36
+ * 将时间戳或者日期字符串转为日期对象
37
+ */
38
+ export function parseDate (date) {
39
+ if (!date) {
40
+ return
41
+ }
42
+ if (date.getTime) {
43
+ return date
44
+ }
45
+ if (typeof date === 'number') {
46
+ return new Date(date)
47
+ }
48
+ if (typeof date === 'string') {
49
+ const ds = date.split(/\D+/)
50
+ if (ds.length > 0) {
51
+ return new Date(ds[0], ds[1] ? (ds[1] - 1) : 0, ds[2] || 1, ds[3] || 0, ds[4] || 0, ds[5] || 0)
25
52
  }
26
- for (const k in opt) {
27
- ret = new RegExp('(' + k + ')').exec(fmt)
28
- if (ret) {
29
- fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
53
+ }
54
+ }
55
+
56
+ /**
57
+ * 获取最近1天
58
+ * 从今天开始算起
59
+ */
60
+ export function getLast1days () {
61
+ let start = new Date()
62
+ start = start.setDate(start.getDate() - 0)
63
+ const end = new Date()
64
+ return [formatDate(start, 'YYYY-mm-dd 00:00:00'), formatDate(end, 'YYYY-mm-dd 23:59:59')]
65
+ }
66
+
67
+ /**
68
+ * 获取上一年
69
+ */
70
+ export function getLastYear () {
71
+ const date = new Date()
72
+ const startOfYear = new Date(date.getFullYear() - 1, 0, 1)
73
+ const endOfYear = new Date(date.getFullYear(), 0, 0)
74
+ return [formatDate(startOfYear, 'YYYY-mm-dd'), formatDate(endOfYear, 'YYYY-mm-dd')]
75
+ }
76
+
77
+ /**
78
+ * 获取本年
79
+ */
80
+ export function getYear () {
81
+ const date = new Date()
82
+ const startOfYear = new Date(date.getFullYear(), 0, 1)
83
+ const endOfYear = new Date(date.getFullYear() + 1, 0, 0)
84
+ return [formatDate(startOfYear, 'YYYY-mm-dd'), formatDate(endOfYear, 'YYYY-mm-dd')]
85
+ }
86
+
87
+ /**
88
+ * 获取本季度
89
+ */
90
+ export function getQuarter () {
91
+ const date = new Date()
92
+ const quarterStart = new Date(date.getFullYear(), Math.floor(date.getMonth() / 3) * 3, 1)
93
+ const quarterEnd = new Date(date.getFullYear(), Math.floor(date.getMonth() / 3) * 3 + 3, 0)
94
+ return [formatDate(quarterStart, 'YYYY-mm-dd'), formatDate(quarterEnd, 'YYYY-mm-dd')]
95
+ }
96
+
97
+ /**
98
+ * 获取上季度
99
+ */
100
+ export function getLastQuarter () {
101
+ const date = new Date()
102
+ const thisYear = date.getFullYear()
103
+ const thisQuarter = Math.floor(date.getMonth() / 3) + 1
104
+ const startOfQuarter = new Date(thisYear, thisQuarter, 1)
105
+ const endOfQuarter = new Date(thisYear, thisQuarter + 3, 0)
106
+ return [formatDate(startOfQuarter, 'YYYY-mm-dd'), formatDate(endOfQuarter, 'YYYY-mm-dd')]
107
+ }
108
+
109
+ /**
110
+ * 获取上月
111
+ */
112
+ export function getLastMonth () {
113
+ const date = new Date()
114
+ const firstDayOfCurrentMonth = new Date(date.getFullYear(), date.getMonth(), 1)
115
+ const lastDayOfLastMonth = new Date(date.getFullYear(), date.getMonth(), 0)
116
+ const startOfLastMonth = new Date(lastDayOfLastMonth)
117
+ startOfLastMonth.setDate(1)
118
+ const endOfLastMonth = new Date(firstDayOfCurrentMonth - 1)
119
+ return [formatDate(startOfLastMonth, 'YYYY-mm-dd'), formatDate(endOfLastMonth, 'YYYY-mm-dd')]
120
+ }
121
+
122
+ /**
123
+ * 获取本月
124
+ */
125
+ export function getMonth () {
126
+ const date = new Date()
127
+ const startOfMonth = new Date(date.getFullYear(), date.getMonth(), 1)
128
+ const endOfMonth = new Date(date.getFullYear(), date.getMonth() + 1, 0)
129
+ return [formatDate(startOfMonth, 'YYYY-mm-dd'), formatDate(endOfMonth, 'YYYY-mm-dd')]
130
+ }
131
+
132
+ /**
133
+ * 获取上周
134
+ */
135
+ export function getLastWeek () {
136
+ const date = new Date()
137
+ const startOfWeek = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() - 7)
138
+ const endOfWeek = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() - 1)
139
+ return [formatDate(startOfWeek, 'YYYY-mm-dd'), formatDate(endOfWeek, 'YYYY-mm-dd')]
140
+ }
141
+
142
+ /**
143
+ * 获取本周
144
+ */
145
+ export function getWeek () {
146
+ const date = new Date()
147
+ const dateTime = date.getTime()
148
+ const startOfWeek = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 1)
149
+ const endOfWeek = new Date(date.getFullYear(), date.getMonth(), date.getDate() - date.getDay() + 7)
150
+ if (dateTime < endOfWeek.getTime()) {
151
+ return [formatDate(startOfWeek, 'YYYY-mm-dd'), formatDate(dateTime, 'YYYY-mm-dd')]
152
+ }
153
+ return [formatDate(startOfWeek, 'YYYY-mm-dd'), formatDate(endOfWeek, 'YYYY-mm-dd')]
154
+ }
155
+
156
+ /**
157
+ * 获取未来1天
158
+ * 从今天开始算起
159
+ */
160
+ export function getFuture10days () {
161
+ let start = new Date()
162
+ const end = new Date()
163
+ end.setDate(end.getDate() + 9)
164
+ return [formatDate(start, 'YYYY-mm-dd 00:00:00'), formatDate(end, 'YYYY-mm-dd 23:59:59')]
165
+ }
166
+
167
+ /**
168
+ * 获取最近7天
169
+ */
170
+ export function getLast7days (keepTime) {
171
+ let start = new Date()
172
+ start = start.setDate(start.getDate() - 6)
173
+ const end = new Date()
174
+ if (keepTime) {
175
+ return [formatDate(start, 'YYYY-mm-dd 00:00:00'), formatDate(end, 'YYYY-mm-dd 23:59:59')]
176
+ } else {
177
+ return [formatDate(start, 'YYYY-mm-dd'), formatDate(end, 'YYYY-mm-dd')]
178
+ }
179
+ }
180
+
181
+ /**
182
+ * 获取今天过滤范围
183
+ * 主要用于报表穿透场景
184
+ */
185
+ export function getTodayFilterParams () {
186
+ const today = new Date()
187
+ return [formatDate(today, 'YYYY-mm-dd'), formatDate(today, 'YYYY-mm-dd')]
188
+ }
189
+
190
+ /**
191
+ * 获取昨天时间范围
192
+ */
193
+ export function getYesterdayFilterParams () {
194
+ const startDate = new Date()
195
+ const endDate = new Date()
196
+ startDate.setDate(startDate.getDate() - 1)
197
+ endDate.setDate(endDate.getDate() - 1)
198
+ return [
199
+ formatDate(startDate, 'YYYY-mm-dd'),
200
+ formatDate(endDate, 'YYYY-mm-dd')
201
+ ]
202
+ }
203
+
204
+ /**
205
+ * 获取一周过滤范围
206
+ * 主要用于报表穿透场景
207
+ */
208
+ export function getThisWeekFilterParams () {
209
+ const currentDate = new Date()
210
+ const currentDay = currentDate.getDay()
211
+ const startDate = new Date()
212
+ const endDate = new Date()
213
+ startDate.setDate(startDate.getDate() - currentDay + 1)
214
+ endDate.setDate(startDate.getDate() + 6)
215
+ return [
216
+ formatDate(startDate, 'YYYY-mm-dd'),
217
+ formatDate(endDate, 'YYYY-mm-dd')
218
+ ]
219
+ }
220
+
221
+ /**
222
+ * 获取最近15天
223
+ */
224
+ export function getLast15days () {
225
+ let start = new Date()
226
+ start = start.setDate(start.getDate() - 14)
227
+ const end = new Date()
228
+ return [formatDate(start, 'YYYY-mm-dd'), formatDate(end, 'YYYY-mm-dd')]
229
+ }
230
+
231
+ /**
232
+ * 获取最近30天
233
+ */
234
+ export function getLast30days (keepTime) {
235
+ let start = new Date()
236
+ start = start.setDate(start.getDate() - 29)
237
+ const end = new Date()
238
+ end.setDate(end.getDate())
239
+ if (keepTime) {
240
+ return [formatDate(start, 'YYYY-mm-dd 00:00:00'), formatDate(end, 'YYYY-mm-dd 23:59:59')]
241
+ } else {
242
+ return [formatDate(start, 'YYYY-mm-dd'), formatDate(end, 'YYYY-mm-dd')]
243
+ }
244
+ }
245
+
246
+ /**
247
+ * 获取最近90天
248
+ */
249
+ export function getLast90days () {
250
+ let start = new Date()
251
+ start = start.setDate(start.getDate() - 90)
252
+ const end = new Date()
253
+ end.setDate(end.getDate())
254
+ return [formatDate(start, 'YYYY-mm-dd'), formatDate(end, 'YYYY-mm-dd')]
255
+ }
256
+
257
+ /**
258
+ * 获取最近35天
259
+ */
260
+ export function getLast35days () {
261
+ let start = new Date()
262
+ start = start.setDate(start.getDate() - 35)
263
+ const end = new Date()
264
+ end.setDate(end.getDate())
265
+ return [formatDate(start, 'YYYY-mm-dd'), formatDate(end, 'YYYY-mm-dd')]
266
+ }
267
+
268
+ /**
269
+ * 毫秒转换友好的显示格式
270
+ * 输出格式:21小时28分钟15秒
271
+ * @param {[type]} time [description]
272
+ * @return {[type]} [description]
273
+ */
274
+ export function timeToDate (time) {
275
+ var diffTime = time
276
+ if (diffTime && diffTime !== '0') {
277
+ diffTime = diffTime / 1000
278
+ if (diffTime >= 60 && diffTime < 60 * 60) {
279
+ diffTime = parseInt(diffTime / 60.0) + '分' + Math.round((parseFloat(diffTime / 60.0) - parseInt(diffTime / 60.0)) * 60) + '秒'
280
+ } else if (diffTime >= 60 * 60) {
281
+ diffTime = parseInt(diffTime / 3600.0) + '时' + parseInt((parseFloat(diffTime / 3600.0) - parseInt(diffTime / 3600.0)) * 60) + '分' + Math.round((parseFloat((parseFloat(diffTime / 3600.0) - parseInt(diffTime / 3600.0)) * 60) - parseInt((parseFloat(diffTime / 3600.0) - parseInt(diffTime / 3600.0)) * 60)) * 60) + '秒'
282
+ } else if (diffTime < 60) {
283
+ if (diffTime < 0.01) {
284
+ return '0秒'
285
+ } else {
286
+ return diffTime.toFixed(2) + '秒'
30
287
  }
31
288
  }
32
- return fmt
33
- }
34
-
35
- /**
36
- * 将时间戳或者日期字符串转为日期对象
37
- */
38
- export function parseDate (date) {
39
- if (!date) {
40
- return
41
- }
42
- if (date.getTime) {
43
- return date
44
- }
45
- if (typeof date === 'number') {
46
- return new Date(date)
289
+ } else {
290
+ diffTime = '0秒'
291
+ }
292
+ return diffTime
293
+ }
294
+
295
+ function parseIntZerofill (number) {
296
+ number = parseInt(number)
297
+ return number < 10 ? '0' + number : number
298
+ }
299
+
300
+ /**
301
+ * 格式化时间戳到时分秒
302
+ */
303
+ export function timeToHHmmss (time) {
304
+ var diffTime = time
305
+ if (diffTime) {
306
+ diffTime = diffTime / 1000
307
+ if (diffTime >= 60 && diffTime < 60 * 60) {
308
+ diffTime = '00' + ':' + parseIntZerofill(diffTime / 60.0) + ':' + parseIntZerofill((parseFloat(diffTime / 60.0) - parseIntZerofill(diffTime / 60.0)) * 60)
309
+ } else if (diffTime >= 60 * 60) {
310
+ diffTime = parseIntZerofill(diffTime / 3600.0) + ':' + parseIntZerofill((parseFloat(diffTime / 3600.0) -
311
+ parseIntZerofill(diffTime / 3600.0)) * 60) + ':' +
312
+ parseIntZerofill((parseFloat((parseFloat(diffTime / 3600.0) - parseIntZerofill(diffTime / 3600.0)) * 60) -
313
+ parseIntZerofill((parseFloat(diffTime / 3600.0) - parseIntZerofill(diffTime / 3600.0)) * 60)) * 60)
314
+ } else if (diffTime < 60) {
315
+ return '00:00:' + parseIntZerofill(Math.ceil(diffTime))
47
316
  }
48
- if (typeof date === 'string') {
49
- const ds = date.split(/\D+/)
50
- if (ds.length > 0) {
51
- return new Date(ds[0], ds[1] ? (ds[1] - 1) : 0, ds[2] || 1, ds[3] || 0, ds[4] || 0, ds[5] || 0)
317
+ } else {
318
+ diffTime = '00:00:00'
319
+ }
320
+ return diffTime
321
+ }
322
+
323
+ /**
324
+ * 获取友好的周文本
325
+ */
326
+ export function getDayText (date) {
327
+ const nextDate = parseDate(date)
328
+ if (!nextDate) {
329
+ return
330
+ }
331
+ const dayMap = {
332
+ 0: '星期天',
333
+ 1: '星期一',
334
+ 2: '星期二',
335
+ 3: '星期三',
336
+ 4: '星期四',
337
+ 5: '星期五',
338
+ 6: '星期六'
339
+ }
340
+ return dayMap[nextDate.getDay()]
341
+ }
342
+
343
+ /**
344
+ * 获取当前时间戳
345
+ */
346
+ export function now () {
347
+ return Date.now ? Date.now() : (new Date()).getTime()
348
+ }
349
+
350
+ /**
351
+ * 将时间转为补零字符串
352
+ * 如0转为00:00, 1转为01:00
353
+ */
354
+ export function formatNumerToTime (number) {
355
+ if (number === null || isNaN(number)) {
356
+ return
357
+ }
358
+ const prefix = number < 10 ? '0' + number : number
359
+ const suffix = '00'
360
+ return [prefix, suffix].join(':')
361
+ }
362
+
363
+ /**
364
+ * 判断是否为今天
365
+ */
366
+ export function isToday (date) {
367
+ if (!date) {
368
+ return false
369
+ }
370
+ return formatDate(new Date(), 'YYYY-mm-dd') === formatDate(parseDate(date), 'YYYY-mm-dd')
371
+ }
372
+
373
+ /**
374
+ * 口语化时间
375
+ */
376
+ export function formatDateToSpoken (date) {
377
+ date = parseDate(date)
378
+ if (!date) {
379
+ return
380
+ }
381
+ let time = new Date().getTime()
382
+ time = parseInt((time - date.getTime()) / 1000)
383
+ let s
384
+ if (time < 60 * 10) {
385
+ return '刚刚'
386
+ } else if ((time < 60 * 60) && (time >= 60 * 10)) {
387
+ s = Math.floor(time / 60)
388
+ return s + '分钟前'
389
+ } else if ((time < 60 * 60 * 24) && (time >= 60 * 60)) {
390
+ s = Math.floor(time / 60 / 60)
391
+ return s + '小时前'
392
+ } else if ((time < 60 * 60 * 24 * 16) && (time >= 60 * 60 * 24)) {
393
+ s = Math.floor(time / 60 / 60 / 24)
394
+ return s + '天前'
395
+ } else if ((time < 60 * 60 * 24 * 30) && (time >= 60 * 60 * 24 * 16)) {
396
+ return '大半月前'
397
+ } else if ((time < 60 * 60 * 24 * 30 * 12) && (time >= 60 * 60 * 24 * 30)) {
398
+ s = Math.floor(time / (60 * 60 * 24 * 30))
399
+ return s + '个月前'
400
+ } else if (time >= 60 * 60 * 24 * 30 * 12) {
401
+ s = Math.floor(time / (60 * 60 * 24 * 30 * 12))
402
+ return s + '年前'
403
+ } else {
404
+ return formatDate(date, 'YYYY-mm-dd')
405
+ }
406
+ }
407
+
408
+ /**
409
+ * 日期范围是筛选快捷键配置
410
+ * */
411
+
412
+ export function optionShortcuts() {
413
+ return [
414
+ {
415
+ text: '今天',
416
+ value: 'today',
417
+ onClick(picker) {
418
+ const dateRange = getTodayFilterParams()
419
+ picker.$emit('pick', dateRange)
420
+ }
421
+ },
422
+ {
423
+ text: '昨天',
424
+ value: 'yesterday',
425
+ onClick(picker) {
426
+ const dateRange = getYesterdayFilterParams()
427
+ picker.$emit('pick', dateRange)
428
+ }
429
+ },
430
+ {
431
+ text: '本周',
432
+ value: 'week',
433
+ onClick(picker) {
434
+ const dateRange = getWeek()
435
+ picker.$emit('pick', dateRange)
436
+ }
437
+ },
438
+ {
439
+ text: '上周',
440
+ value: 'lastWeek',
441
+ onClick(picker) {
442
+ const dateRange = getLastWeek()
443
+ picker.$emit('pick', dateRange)
444
+ }
445
+ },
446
+ {
447
+ text: '本月',
448
+ value: 'month',
449
+ onClick(picker) {
450
+ const dateRange = getMonth()
451
+ picker.$emit('pick', dateRange)
452
+ }
453
+ },
454
+ {
455
+ text: '上月',
456
+ value: 'lastMonth',
457
+ onClick(picker) {
458
+ const dateRange = getLastMonth()
459
+ picker.$emit('pick', dateRange)
460
+ }
461
+ },
462
+ {
463
+ text: '本季度',
464
+ value: 'quarter',
465
+ onClick(picker) {
466
+ const dateRange = getQuarter()
467
+ picker.$emit('pick', dateRange)
468
+ }
469
+ },
470
+ {
471
+ text: '上季度',
472
+ value: 'lastQuarter',
473
+ onClick(picker) {
474
+ const dateRange = getLastQuarter()
475
+ picker.$emit('pick', dateRange)
476
+ }
477
+ },
478
+ {
479
+ text: '本年',
480
+ value: 'year',
481
+ onClick(picker) {
482
+ const dateRange = getYear()
483
+ picker.$emit('pick', dateRange)
484
+ }
485
+ },
486
+ {
487
+ text: '去年',
488
+ value: 'lastYear',
489
+ onClick(picker) {
490
+ const dateRange = getLastYear()
491
+ picker.$emit('pick', dateRange)
52
492
  }
53
493
  }
54
- }
55
-
494
+ ]
495
+ }
package/utils/dom.js ADDED
@@ -0,0 +1,37 @@
1
+ export function closest (source, target) {
2
+ if (!source || !target) {
3
+ return null
4
+ }
5
+ let element = source
6
+ while (element && element.nodeType === 1) {
7
+ if (typeof target === 'string') {
8
+ // 先只支持target为className的场景
9
+ if (element.classList.contains(target)) {
10
+ return element
11
+ }
12
+ } else {
13
+ if (element === target) {
14
+ return element
15
+ }
16
+ }
17
+ element = element.parentNode
18
+ }
19
+ return null
20
+ }
21
+
22
+ function isElement (node) {
23
+ const ELEMENT_NODE_TYPE = 1
24
+ return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === ELEMENT_NODE_TYPE
25
+ }
26
+
27
+ export function getScrollParent (el, root = window) {
28
+ let node = el
29
+ while (node && node !== root && isElement(node)) {
30
+ const { overflowY } = window.getComputedStyle(node)
31
+ if (/scroll|auto/i.test(overflowY)) {
32
+ return node
33
+ }
34
+ node = node.parentNode
35
+ }
36
+ return root
37
+ }
package/utils/event.js ADDED
@@ -0,0 +1,92 @@
1
+ export default class Event {
2
+ _events = {}
3
+
4
+ constructor (options) {
5
+ options = Object.assign({
6
+ /**
7
+ * 检查on事件的时候要不要立即触发,比如有些ready场景,如果已经准备完毕就立马触发
8
+ */
9
+ checkOnMethod: null
10
+ }, options)
11
+ this.checkOnMethod = options.checkOnMethod
12
+ }
13
+
14
+ on (name, fn) {
15
+ if (!name || !fn) {
16
+ throw new Error('[Event] 回调名称和函数必须')
17
+ }
18
+ if (!this._events[name]) {
19
+ this._events[name] = []
20
+ }
21
+ this._events[name].push(fn)
22
+ if (this.checkOnMethod) {
23
+ this.checkOnMethod(name)
24
+ }
25
+ }
26
+
27
+ off (name, fn) {
28
+ if (!this._events[name]) {
29
+ return
30
+ }
31
+ if (fn) {
32
+ let index = -1
33
+ this._events[name].some((v, i) => {
34
+ if (v === fn) {
35
+ index = i
36
+ return true
37
+ }
38
+ })
39
+ if (index < 0) {
40
+ return
41
+ }
42
+ this._events[name].splice(index, 1)
43
+ } else {
44
+ this._events[name] = []
45
+ }
46
+ }
47
+
48
+ emit (name, data) {
49
+ if (!this._events[name]) {
50
+ return
51
+ }
52
+ return !this._events[name].some(fn => {
53
+ if (fn(data) === false) {
54
+ return true
55
+ }
56
+ })
57
+ }
58
+
59
+ one (name, fn) {
60
+ const fnWrap = (evt) => {
61
+ this.off(name, fnWrap)
62
+ if (fn) {
63
+ return fn(evt)
64
+ }
65
+ }
66
+ this.on(name, fnWrap)
67
+ }
68
+
69
+ }
70
+
71
+ export function asyncEmit (vm, eventName, eventFn, callbackMethodName = 'setCallback') {
72
+ if (!vm || !eventName || !eventFn) {
73
+ throw new Error('缺少必须参数')
74
+ }
75
+ return new Promise((resolve, reject) => {
76
+ let isTry = false
77
+ vm.$emit(eventName, {
78
+ [callbackMethodName] (fn) {
79
+ isTry = true
80
+ const rs = eventFn(fn)
81
+ if (rs && rs.then) {
82
+ rs.then(resolve, reject)
83
+ } else {
84
+ resolve()
85
+ }
86
+ }
87
+ })
88
+ if (!isTry) {
89
+ resolve()
90
+ }
91
+ })
92
+ }