@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
@@ -0,0 +1,33 @@
1
+ export function getClosestNodes (node, nodesMap) {
2
+ const rs = []
3
+ if (!node || !nodesMap) {
4
+ return rs
5
+ }
6
+ const loop = (node) => {
7
+ if (!node) {
8
+ return
9
+ }
10
+ rs.push(node)
11
+ loop(node.parent)
12
+ }
13
+ loop(node)
14
+ return rs
15
+ }
16
+
17
+ export function newNode (data, idKey) {
18
+ data = data || {}
19
+ if (data[idKey] === null || data[idKey] === undefined || data[idKey] === '') {
20
+ throw new Error('节点唯一标识必须')
21
+ }
22
+ const node = {
23
+ id: data[idKey],
24
+ level: 1,
25
+ height: 0,
26
+ expanded: false,
27
+ removed: false,
28
+ parent: null,
29
+ loaded: false,
30
+ data
31
+ }
32
+ return node
33
+ }
@@ -0,0 +1,3 @@
1
+ import Video from './video.vue'
2
+
3
+ export default Video
@@ -0,0 +1,29 @@
1
+ <template>
2
+ <video class="ui-video" mode="widthFix" :src="innerSrc" @click="handleClick"></video>
3
+ </template>
4
+
5
+ <script>
6
+ import { formatOssPath } from '../../utils/oss'
7
+
8
+ export default {
9
+ name: 'UiVideo',
10
+ props: {
11
+ src: {
12
+ type: String
13
+ }
14
+ },
15
+ computed: {
16
+ innerSrc () {
17
+ return formatOssPath(this.src)
18
+ }
19
+ },
20
+ methods: {
21
+ handleClick (evt) {
22
+ this.$emit('click', evt)
23
+ }
24
+ }
25
+ }
26
+ </script>
27
+
28
+ <style>
29
+ </style>
@@ -0,0 +1,3 @@
1
+ import Voice from './voice.vue'
2
+
3
+ export default Voice
@@ -0,0 +1,24 @@
1
+ <template>
2
+ <audio class="ui-voice" :src="innerSrc" controls></audio>
3
+ </template>
4
+
5
+ <script>
6
+ import { formatOssPath } from '../../utils/oss'
7
+
8
+ export default {
9
+ name: 'UiVoice',
10
+ props: {
11
+ src: {
12
+ type: String
13
+ }
14
+ },
15
+ computed: {
16
+ innerSrc () {
17
+ return formatOssPath(this.src)
18
+ }
19
+ }
20
+ }
21
+ </script>
22
+
23
+ <style>
24
+ </style>
@@ -0,0 +1,3 @@
1
+ import Waterfall from './waterfall.vue'
2
+
3
+ export default Waterfall
@@ -0,0 +1,72 @@
1
+ /**
2
+ * 验证十进制数字
3
+ */
4
+ function number(value) {
5
+ return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
6
+ }
7
+
8
+ /**
9
+ * @description 用于获取用户传递值的px值 如果用户传递了"xxpx"或者"xxrpx",取出其数值部分,如果是"xxxrpx"还需要用过uni.upx2px进行转换
10
+ * @param {number|string} value 用户传递值的px值
11
+ * @param {boolean} unit
12
+ * @returns {number|string}
13
+ */
14
+ function getPx(value, unit = false) {
15
+ if (number(value)) {
16
+ return unit ? `${value}px` : Number(value)
17
+ }
18
+ // 如果带有rpx,先取出其数值部分,再转为px值
19
+ if (/(rpx|upx)$/.test(value)) {
20
+ return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)))
21
+ }
22
+ return unit ? `${parseInt(value)}px` : parseInt(value)
23
+ }
24
+
25
+ /**
26
+ * @description 获取系统信息同步接口
27
+ * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync
28
+ */
29
+ function sys() {
30
+ return uni.getSystemInfoSync()
31
+ }
32
+
33
+
34
+ /**
35
+ * @param {Number} len uuid的长度
36
+ * @param {Boolean} firstU 将返回的首字母置为"u"
37
+ * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
38
+ */
39
+ function guid(len = 32, firstU = true, radix = null) {
40
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
41
+ const uuid = []
42
+ radix = radix || chars.length
43
+
44
+ if (len) {
45
+ // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
46
+ for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
47
+ } else {
48
+ let r
49
+ // rfc4122标准要求返回的uuid中,某些位为固定的字符
50
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
51
+ uuid[14] = '4'
52
+
53
+ for (let i = 0; i < 36; i++) {
54
+ if (!uuid[i]) {
55
+ r = 0 | Math.random() * 16
56
+ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]
57
+ }
58
+ }
59
+ }
60
+ // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
61
+ if (firstU) {
62
+ uuid.shift()
63
+ return `u${uuid.join('')}`
64
+ }
65
+ return uuid.join('')
66
+ }
67
+
68
+ export {
69
+ getPx,
70
+ sys,
71
+ guid
72
+ }
@@ -0,0 +1,147 @@
1
+ <template>
2
+ <view class="ui-waterfall" :class="[{'is-single-column': column === 1}]">
3
+ <template v-if="column === 1">
4
+ <view
5
+ v-for="(item, index) in list"
6
+ :key="item.id"
7
+ class="ui-waterfall__item"
8
+ >
9
+ <slot name="item" :data="item" :scope="scope"></slot>
10
+ </view>
11
+ </template>
12
+ <template v-else>
13
+ <!-- #ifndef APP-NVUE -->
14
+ <uv-waterfall
15
+ ref="waterfall"
16
+ v-model="list"
17
+ :key="key"
18
+ :add-time="10"
19
+ :left-gap="leftGap"
20
+ :right-gap="rightGap"
21
+ :column-gap="columnGap"
22
+ @changeList="handleChangeList"
23
+ >
24
+ <template v-slot:list1>
25
+ <!-- 为了磨平部分平台的BUG,必须套一层view -->
26
+ <view>
27
+ <view
28
+ v-for="(item, index) in list1"
29
+ :key="item.id"
30
+ class="ui-waterfall__item item1"
31
+ >
32
+ <slot name="item" :data="item" :scope="scope"></slot>
33
+ </view>
34
+ </view>
35
+ </template>
36
+ <template v-slot:list2>
37
+ <!-- 为了磨平部分平台的BUG,必须套一层view -->
38
+ <view>
39
+ <view
40
+ v-for="(item, index) in list2"
41
+ :key="item.id"
42
+ class="ui-waterfall__item item2"
43
+ >
44
+ <slot name="item" :data="item" :scope="scope"></slot>
45
+ </view>
46
+ </view>
47
+ </template>
48
+ </uv-waterfall>
49
+ <!-- #endif -->
50
+ <!-- #ifdef APP-NVUE -->
51
+ <uv-waterfall
52
+ :key="key"
53
+ column-count="2"
54
+ left-gap="10"
55
+ right-gap="10"
56
+ column-gap="8"
57
+ :height="waterfallHeight"
58
+ @scrolltolower="handleWaterfallInit"
59
+ >
60
+ <view
61
+ v-for="(item, index) in list"
62
+ :key="item.id"
63
+ class="ui-waterfall__item"
64
+ >
65
+ <slot name="item" :data="item" :scope="scope"></slot>
66
+ </view>
67
+ </uv-waterfall>
68
+ <!-- #endif -->
69
+ </template>
70
+ </view>
71
+ </template>
72
+ <script>
73
+ import { guid, sys, getPx } from './util.js'
74
+
75
+ export default {
76
+ name: 'UiWaterfall',
77
+ model: {
78
+ prop: 'data'
79
+ },
80
+ props: {
81
+ data: {
82
+ type: Array
83
+ },
84
+ column: {
85
+ type: Number,
86
+ default: 2,
87
+ validator (value) {
88
+ return [1, 2].includes(value)
89
+ }
90
+ },
91
+ scope: {
92
+ type: Object
93
+ }
94
+ },
95
+ data () {
96
+ return {
97
+ key: guid(),
98
+ list: [], // 瀑布流全部数据
99
+ list1: [], // 瀑布流第一列数据
100
+ list2: [], // 瀑布流第二列数据
101
+ leftGap: 12,
102
+ rightGap: 12,
103
+ columnGap: 12
104
+ }
105
+ },
106
+ computed: {
107
+ waterfallHeight() {
108
+ return sys().windowHeight - getPx('120rpx');
109
+ }
110
+ },
111
+ watch: {
112
+ data () {
113
+ this.key = guid()
114
+ this.list1 = []
115
+ this.list2 = []
116
+ this.list = this.data
117
+ }
118
+ },
119
+ created () {
120
+ this.list = this.data
121
+ },
122
+ methods: {
123
+ // 这点非常重要:e.name在这里返回是list1或list2,要手动将数据追加到相应列
124
+ handleChangeList (e) {
125
+ this[e.name].push(e.value);
126
+ },
127
+ handleWaterfallInit () {
128
+
129
+ }
130
+ }
131
+ }
132
+ </script>
133
+ <style lang="less">
134
+ .ui-waterfall.is-single-column{
135
+ .ui-waterfall__item{
136
+ margin: 12px;
137
+ }
138
+ }
139
+ .ui-waterfall:not(.is-single-column){
140
+ .ui-waterfall__item{
141
+ margin-bottom: 12px;
142
+ }
143
+ /deep/ .uv-waterfall__column{
144
+ min-width: 0;
145
+ }
146
+ }
147
+ </style>
package/utils/data.js ADDED
@@ -0,0 +1,128 @@
1
+ /**
2
+ * 将平面数据转为树行结构数据
3
+ * @param { Array } data - 数据源
4
+ * @param { String } idField - 唯一标识字符
5
+ * @param { String } parentIdField - 父级标识字符
6
+ * @param { String } nodesField - 生成的子级集合属性字符
7
+ */
8
+ export function arrayToTree (data, idField = 'id', parentIdField = 'parent', nodesField = 'children') {
9
+ const nodes = []
10
+ const idHash = {}
11
+ for (let i = 0, l = data.length; i < l; i++) {
12
+ const o = data[i]
13
+ if (!o) {
14
+ continue
15
+ }
16
+ const id = o[idField]
17
+ if (id !== null && id !== undefined) {
18
+ idHash[id] = o
19
+ }
20
+ delete o[nodesField]
21
+ }
22
+
23
+ for (var i = 0, l = data.length; i < l; i++) {
24
+ const o = data[i]
25
+ var p = idHash[o[parentIdField]]
26
+ if (!p) {
27
+ nodes.push(o)
28
+ continue
29
+ }
30
+ if (!p[nodesField]) {
31
+ p[nodesField] = []
32
+ }
33
+ p[nodesField].push(o)
34
+ }
35
+ return nodes
36
+ }
37
+
38
+ export function findNode (data, fn) {
39
+ let result = null
40
+ const loop = (data) => {
41
+ if (!data) {
42
+ return
43
+ }
44
+ return data.some(v => {
45
+ if (fn(v)) {
46
+ result = v
47
+ return true
48
+ }
49
+ return loop(v.children)
50
+ })
51
+ }
52
+ loop(data)
53
+ return result
54
+ }
55
+
56
+ export function getClosestNodes (treeData, nodeId, idField = 'id', childrenField = 'children') {
57
+ const nodes = []
58
+ if (!nodeId || !treeData) {
59
+ return nodes
60
+ }
61
+ const loop = (data) => {
62
+ let rs
63
+ if (!data || !data.length) {
64
+ return rs
65
+ }
66
+ data.some(node => {
67
+ if (node[idField] === nodeId) {
68
+ rs = node
69
+ return true
70
+ }
71
+ if (loop(node[childrenField])) {
72
+ rs = node
73
+ return true
74
+ }
75
+ })
76
+ if (rs) {
77
+ nodes.push(rs)
78
+ }
79
+ return rs
80
+ }
81
+ loop(treeData)
82
+ return nodes
83
+ }
84
+
85
+ /**
86
+ * 将层级数据转为平行结构数据
87
+ * @param { Array } data - 数据源
88
+ * @param { String } nodesField - 生成的子级集合属性字符
89
+ */
90
+ export function treeToArray (data, nodesField = 'children', iterator) {
91
+ const nodes = []
92
+ const loop = (data, parent) => {
93
+ if (!Array.isArray(data)) {
94
+ return
95
+ }
96
+ data.forEach(v => {
97
+ nodes.push(v)
98
+ if (v[nodesField]) {
99
+ loop(v[nodesField], v)
100
+ }
101
+ iterator && iterator(v, parent)
102
+ })
103
+ }
104
+ loop(data, null)
105
+ return nodes
106
+ }
107
+
108
+ export function loopTreeData (treeData, iteration, childrenField = 'children') {
109
+ const loop = (data, level) => {
110
+ if (!data || !data.length) {
111
+ return
112
+ }
113
+ return data.map(v => {
114
+ const nextItem = iteration({
115
+ item: v,
116
+ level
117
+ })
118
+ const children = loop(nextItem[childrenField], level + 1)
119
+ if (!children || !children.length) {
120
+ delete nextItem[childrenField]
121
+ } else {
122
+ nextItem[childrenField] = children
123
+ }
124
+ return nextItem
125
+ })
126
+ }
127
+ return loop(treeData, 0) || []
128
+ }