@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,607 @@
1
+ <template>
2
+ <div class="ac-viewer">
3
+ <div class="ac-viewer__inner" ref="inner" v-show="show" :style="{'z-index': zIndex}">
4
+ <div class="ac-viewer__toolbar">
5
+ <div class="ac-viewer__toolbar-left">
6
+ <div class="ac-viewer__toolbar-item">
7
+ <div class="ac-viewer__title"><ui-icon name="image-line" :size="20"></ui-icon>{{currentImageName}}</div>
8
+ </div>
9
+ </div>
10
+ <div class="ac-viewer__toolbar-right">
11
+ <div class="ac-viewer__toolbar-item">
12
+ <div class="ac-viewer__toolbar-group">
13
+ <div class="ac-viewer__toolbar-btn" :class="{'is-loading': downloading}" @click="handleDownloadClick">
14
+ <ui-icon :name="downloading ? 'loading' : 'download-line'" :size="20"></ui-icon>
15
+ </div>
16
+ </div>
17
+ </div>
18
+ <div class="ac-viewer__toolbar-line"></div>
19
+ <div class="ac-viewer__toolbar-item">
20
+ <div class="ac-viewer__toolbar-btn is-compact" @click="handleCloseClick">
21
+ <ui-icon name="error" :size="24"></ui-icon>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <div class="ac-viewer__main" ref="main" @click="handleMainClick">
27
+ <div class="ac-viewer__operate" @click.stop>
28
+ <div class="ac-viewer__operate-item" title="旋转" @click="handleRotateClick">
29
+ <ui-icon name="anticlockwise-2-line" :size="20"></ui-icon>
30
+ </div>
31
+ <div class="ac-viewer__operate-item" title="缩小" @click="handleZoomOutClick">
32
+ <ui-icon name="zoom-out-line" :size="20"></ui-icon>
33
+ </div>
34
+ <div class="ac-viewer__operate-item" title="放大" @click="handleZoomInClick">
35
+ <ui-icon name="zoom-in-line" :size="20"></ui-icon>
36
+ </div>
37
+ <div class="ac-viewer__operate-item" title="复位" @click="handleResetClick">
38
+ <ui-icon name="refresh-line" :size="20"></ui-icon>
39
+ </div>
40
+ <slot name="addon"></slot>
41
+ </div>
42
+ <div class="ac-viewer__arrow">
43
+ <div class="ac-viewer__arrow-prev" :class="{'is-disabled': disabledPrevBtn}" title="前一张" @click.stop="handlePrevClick">
44
+ <ui-icon name="arrow-left" :size="42"></ui-icon>
45
+ </div>
46
+ <div class="ac-viewer__arrow-next" :class="{'is-disabled': disabledNextBtn}" title="后一张" @click.stop="handleNextClick">
47
+ <ui-icon name="arrow-right" :size="42"></ui-icon>
48
+ </div>
49
+ </div>
50
+ <ul class="ac-viewer__hidden" ref="images">
51
+ <li
52
+ v-for="(item, index) in data"
53
+ :key="index"
54
+ >
55
+ <img :src="handleFormatSrc(item.thumbSrc || item.src)" :data-original="handleFormatSrc(item.src)" :alt="item.alt" @error="handleThumbImageError(item, $event)" />
56
+ </li>
57
+ </ul>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </template>
62
+ <script>
63
+ import Viewer from 'viewerjs'
64
+ import 'viewerjs/dist/viewer.css'
65
+ import { downloadFile, getNameByFileUrl } from '../../utils/file'
66
+ import { closest } from '../../utils/dom'
67
+ import { setViewerImageData, setViewerCurrentImage, getDownloadMethod, getFormatterNameMethod } from './util'
68
+ import { formatOssPath } from '@aochuang/common/utils/oss'
69
+ import { PopupManager } from 'element-ui/lib/utils/popup';
70
+
71
+ export default {
72
+ name: 'AcViewer',
73
+ props: {
74
+ value: {
75
+ type: [Number, String]
76
+ },
77
+ data: {
78
+ type: Array,
79
+ default: () => []
80
+ },
81
+ downloadMethod: {
82
+ type: Function
83
+ }
84
+ },
85
+ computed: {
86
+ show () {
87
+ return !!this.value
88
+ },
89
+ zIndex () {
90
+ return PopupManager.nextZIndex() || 2000
91
+ },
92
+ lastIndex () {
93
+ return this.data.length - 1
94
+ },
95
+ currentIndex () {
96
+ let index = -1
97
+ this.data.some((v, i) => {
98
+ if (v.id === this.value) {
99
+ index = i
100
+ return true
101
+ }
102
+ })
103
+ return index
104
+ },
105
+ currentItem () {
106
+ const item = this.data[this.currentIndex]
107
+ if (!item) {
108
+ return
109
+ }
110
+ return item
111
+ },
112
+ currentImageName () {
113
+ if (!this.currentItem) {
114
+ return
115
+ }
116
+ if (this.currentItem.alt) {
117
+ return this.currentItem.alt
118
+ }
119
+ const mask = this.currentItem.id || this.currentItem.src || ''
120
+ const formatterNameMethod = getFormatterNameMethod()
121
+ if (formatterNameMethod) {
122
+ return formatterNameMethod(mask)
123
+ } else {
124
+ const ns = mask.substr(mask.lastIndexOf('/') + 1)
125
+ if (ns.lastIndexOf('?') >= 0) {
126
+ return ns.substr(0, ns.lastIndexOf('?'))
127
+ } else {
128
+ return ns
129
+ }
130
+ }
131
+ },
132
+ disabledPrevBtn () {
133
+ return this.currentIndex <= 0
134
+ },
135
+ disabledNextBtn () {
136
+ return this.currentIndex >= this.lastIndex
137
+ }
138
+ },
139
+ data () {
140
+ return {
141
+ downloading: false,
142
+ changing: false,
143
+ thumbImageErrorMap: Object.create(null)
144
+ }
145
+ },
146
+ watch: {
147
+ data () {
148
+ this.thumbImageErrorMap = Object.create(null)
149
+ this.update().then(() => {
150
+ this.view(this.value)
151
+ })
152
+ },
153
+ value (value) {
154
+ let index = -1
155
+ this.data.some((v, i) => {
156
+ if (v.src === this.value) {
157
+ index = i
158
+ }
159
+ })
160
+ this.currentIndex = index
161
+ this.view(value)
162
+ }
163
+ },
164
+ mounted () {
165
+ window.document.body.appendChild(this.$refs.inner)
166
+ this.getViewer()
167
+ this.update().then(() => {
168
+ this.view(this.value)
169
+ })
170
+ },
171
+ methods: {
172
+ getViewer (options) {
173
+ if (this.viewer) {
174
+ return this.viewer
175
+ }
176
+ this.viewer = new Viewer(this.$refs.images, Object.assign({
177
+ url: 'data-original',
178
+ inline: true,
179
+ button: false,
180
+ container: this.$refs.main,
181
+ title: false,
182
+ minZoomRatio: 0.02,
183
+ maxZoomRatio: 10,
184
+ backdrop: false,
185
+ transition: true,
186
+ toolbar: {
187
+ zoomIn: true,
188
+ zoomOut: false,
189
+ oneToOne: false,
190
+ reset: false,
191
+ prev: false,
192
+ play: false,
193
+ next: false,
194
+ rotateLeft: false,
195
+ rotateRight: false,
196
+ flipHorizontal: false,
197
+ flipVertical: false
198
+ },
199
+ zIndex: 99999,
200
+ hidden: () => {
201
+ this.hide()
202
+ },
203
+ view: (event) => {
204
+ if (!this.viewReady) {
205
+ return
206
+ }
207
+ const { index } = event.detail
208
+ const nextValue = this.data[index] ? this.data[index].id : null
209
+ if (nextValue === this.value) {
210
+ return
211
+ }
212
+ this.changing = true
213
+ this.$emit('input', nextValue)
214
+ this.$nextTick(() => {
215
+ this.changing = false
216
+ })
217
+ }
218
+ }, options))
219
+ window.document.addEventListener('keydown', this.handleDocumentKeydown)
220
+ this.$emit('open', {
221
+ value: this.value
222
+ })
223
+ return this.viewer
224
+ },
225
+ view (id) {
226
+ return new Promise((resolve, reject) => {
227
+ this.$nextTick(() => {
228
+ if (!id) {
229
+ reject('[Viewer]不合法的查看id')
230
+ return
231
+ }
232
+ let index = -1
233
+ this.data.some((v, i) => {
234
+ if (v.id === id) {
235
+ index = i
236
+ return true
237
+ }
238
+ })
239
+ if (index >= 0) {
240
+ this.getViewer().view(index)
241
+ resolve()
242
+ } else {
243
+ reject('[Viewer]id不存在此图片')
244
+ }
245
+ })
246
+ })
247
+ },
248
+ update () {
249
+ return new Promise((resolve, reject) => {
250
+ this.$nextTick(() => {
251
+ if (!this.viewer) {
252
+ return reject('[Viewer] 缺少viewer实例')
253
+ }
254
+ this.viewReady = false
255
+ this.viewer.update()
256
+ this.$nextTick(() => {
257
+ this.viewReady = true
258
+ resolve()
259
+ })
260
+ })
261
+ })
262
+ },
263
+ bindKeyboard (event) {
264
+ if (!this.viewer) {
265
+ return
266
+ }
267
+ var options = this.viewer.options
268
+ switch (event.keyCode || event.which || event.charCode) {
269
+ case 27:
270
+ if (this.viewer.played) {
271
+ this.viewer.stop()
272
+ } else {
273
+ this.hide()
274
+ }
275
+ break
276
+ case 32:
277
+ if (this.viewer.played) {
278
+ this.viewer.stop()
279
+ }
280
+ break
281
+ case 37:
282
+ this.viewer.prev(options.loop)
283
+ break
284
+ case 38:
285
+ event.preventDefault() // Zoom in
286
+ this.viewer.zoom(options.zoomRatio, true)
287
+ break
288
+ case 39:
289
+ this.viewer.next(options.loop)
290
+ break
291
+ case 40:
292
+ event.preventDefault() // Zoom out
293
+ this.viewer.zoom(-options.zoomRatio, true)
294
+ break
295
+ case 48:
296
+ case 49:
297
+ if (event.ctrlKey) {
298
+ event.preventDefault()
299
+ this.viewer.toggle()
300
+ }
301
+ break
302
+ }
303
+ },
304
+ handleMainClick (evt) {
305
+ if (!this.viewer) {
306
+ return
307
+ }
308
+ if (closest(evt.target, this.viewer.navbar) || closest(evt.target, this.viewer.image)) {
309
+ return
310
+ }
311
+ this.hide()
312
+ },
313
+ handleRotateClick () {
314
+ if (!this.viewer) {
315
+ return
316
+ }
317
+ this.viewer.rotate(-90)
318
+ },
319
+ handleZoomOutClick () {
320
+ if (!this.viewer) {
321
+ return
322
+ }
323
+ this.viewer.zoom(-0.2)
324
+ },
325
+ handleZoomInClick () {
326
+ if (!this.viewer) {
327
+ return
328
+ }
329
+ this.viewer.zoom(0.2)
330
+ },
331
+ handleResetClick () {
332
+ if (!this.viewer) {
333
+ return
334
+ }
335
+ this.viewer.reset()
336
+ },
337
+ handleNextClick () {
338
+ if (!this.viewer || this.disabledNextBtn) {
339
+ return
340
+ }
341
+ this.viewer.next()
342
+ },
343
+ handlePrevClick () {
344
+ if (!this.viewer || this.disabledPrevBtn) {
345
+ return
346
+ }
347
+ this.viewer.prev()
348
+ },
349
+ handleCloseClick () {
350
+ if (!this.viewer) {
351
+ return
352
+ }
353
+ this.viewer.hidden()
354
+ },
355
+ handleDocumentKeydown (event) {
356
+ this.bindKeyboard(event)
357
+ },
358
+ handleDownloadClick () {
359
+ if (this.downloading) {
360
+ return
361
+ }
362
+ if (!this.currentItem) {
363
+ return
364
+ }
365
+ const downloadMethod = this.downloadMethod || getDownloadMethod()
366
+ if (!downloadMethod) {
367
+ return
368
+ }
369
+ const rs = downloadMethod(this.currentItem.src, this.currentItem)
370
+ if (rs && rs.then) {
371
+ this.downloading = true
372
+ rs.then(rs => {
373
+ if (rs && rs.data) {
374
+ downloadFile(rs.data, getNameByFileUrl(this.currentItem.src, true))
375
+ }
376
+ }).finally(() => {
377
+ this.downloading = false
378
+ })
379
+ }
380
+ },
381
+ handleThumbImageError (item, evt) {
382
+ const target = evt && evt.target
383
+ if (!target) {
384
+ return
385
+ }
386
+ const errorSrc = target.getAttribute('src') || target.currentSrc || target.src
387
+ if (this.thumbImageErrorMap[errorSrc]) {
388
+ return
389
+ }
390
+ this.thumbImageErrorMap[errorSrc] = true
391
+
392
+ const fallbackSrc = this.handleFormatSrc(item.src)
393
+ if (!fallbackSrc || fallbackSrc === errorSrc) {
394
+ return
395
+ }
396
+ target.src = fallbackSrc
397
+ this.update()
398
+ },
399
+ hide () {
400
+ this.changing = true
401
+ this.downloading = false
402
+ setViewerImageData([])
403
+ setViewerCurrentImage(null)
404
+ this.$emit('input', null)
405
+ this.$nextTick(() => {
406
+ this.changing = false
407
+ })
408
+ if (!this.viewer) {
409
+ return
410
+ }
411
+ this.viewer.destroy()
412
+ this.viewer = null
413
+ window.document.removeEventListener('keydown', this.handleDocumentKeydown)
414
+ this.$emit('close')
415
+ },
416
+ handleFormatSrc (src) {
417
+ if (!src) {
418
+ return
419
+ }
420
+ return formatOssPath(src)
421
+ }
422
+ },
423
+ beforeDestroy () {
424
+ this.$el.appendChild(this.$refs.inner)
425
+ this.viewer && this.viewer.destroy()
426
+ window.document.removeEventListener('keydown', this.handleDocumentKeydown)
427
+ }
428
+ }
429
+ </script>
430
+ <style lang="less">
431
+ .ac-viewer__title{
432
+ font-size: 16px;
433
+ white-space: nowrap;
434
+ overflow: hidden;
435
+ text-overflow: ellipsis;
436
+ .ui-icon{
437
+ vertical-align: top;
438
+ display: inline-block;
439
+ margin-right: 6px;
440
+ margin-top: 1px;
441
+ }
442
+ }
443
+ .ac-viewer__hidden{
444
+ display: none;
445
+ }
446
+ .ac-viewer__toolbar{
447
+ background-color: #181818;
448
+ display: flex;
449
+ flex-direction: row;
450
+ justify-content: space-between;
451
+ align-items: center;
452
+ height: 32px;
453
+ line-height: 32px;
454
+ box-sizing: content-box;
455
+ padding: 14px 16px;
456
+ }
457
+ .ac-viewer__toolbar-left,
458
+ .ac-viewer__toolbar-right{
459
+ display: flex;
460
+ flex-direction: row;
461
+ align-items: center;
462
+ min-width: 0;
463
+ }
464
+ .ac-viewer__toolbar-item{
465
+ min-width: 0;
466
+ }
467
+ .ac-viewer__toolbar-line{
468
+ height: 24px;
469
+ width: 1px;
470
+ background-color: rgba(255,255,255,.2);
471
+ margin: 0 15px;
472
+ }
473
+ .ac-viewer__toolbar-group{
474
+ display: flex;
475
+ flex-direction: row;
476
+ .ac-viewer__toolbar-btn{
477
+ border: 1px solid rgba(255,255,255,.2);
478
+ border-radius: 0;
479
+ &:first-child{
480
+ border-top-left-radius: 3px;
481
+ border-bottom-left-radius: 3px;
482
+ }
483
+ &:last-child{
484
+ border-top-right-radius: 3px;
485
+ border-bottom-right-radius: 3px;
486
+ }
487
+ }
488
+ }
489
+ .ac-viewer__toolbar-btn{
490
+ border: 1px solid transparent;
491
+ margin-left: -1px;
492
+ padding: 0 12px;
493
+ text-align: center;
494
+ cursor: pointer;
495
+ border-radius: 3px;
496
+ height: 32px;
497
+ line-height: 32px;
498
+ box-sizing: content-box;
499
+ transition: background-color .3s;
500
+ &:hover{
501
+ background-color: rgba(255,255,255,.1);
502
+ }
503
+ &.is-compact{
504
+ padding-left: 4px;
505
+ padding-right: 4px;
506
+ }
507
+ &.is-loading {
508
+ cursor: not-allowed;
509
+ opacity: .7;
510
+ }
511
+ }
512
+ .ac-viewer__inner{
513
+ display: flex;
514
+ position: fixed;
515
+ left: 0;
516
+ top: 0;
517
+ bottom: 0;
518
+ right: 0;
519
+ z-index: 2000;
520
+ flex-direction: column;
521
+ color: #fff;
522
+ background-color: rgba(0,0,0,.85);
523
+ }
524
+ .ac-viewer__main{
525
+ flex: 1;
526
+ position: relative;
527
+ .viewer-backdrop{
528
+ background-color: rgba(0,0,0,.85);
529
+ }
530
+ .viewer-toolbar{
531
+ height: 80px;
532
+ box-sizing: content-box;
533
+ ul {
534
+ display: none;
535
+ }
536
+ }
537
+ .viewer-navbar{
538
+ background-color: rgba(0,0,0,.85);
539
+ padding: 12px 0;
540
+ }
541
+ .viewer-list{
542
+ height: 42px;
543
+ box-sizing: content-box;
544
+ }
545
+ .viewer-list > li{
546
+ width: 42px;
547
+ height: 42px;
548
+ box-sizing: content-box;
549
+ margin-left: 0;;
550
+ padding-left: 4px;
551
+ border-left: 3px solid transparent;
552
+ border-right: 3px solid transparent;
553
+ }
554
+ }
555
+ .ac-viewer__arrow-next,
556
+ .ac-viewer__arrow-prev{
557
+ position: absolute;
558
+ top: 50%;
559
+ transform: translateY(-50%);
560
+ z-index: 40;
561
+ margin-top: -80px;
562
+ padding: 12px 6px;
563
+ transition: background-color .3s;
564
+ border-radius: 3px;
565
+ cursor: pointer;
566
+ &:hover:not(.is-disabled){
567
+ background-color: rgba(0,0,0,.85);
568
+ }
569
+ &.is-disabled{
570
+ cursor: not-allowed;
571
+ opacity: .2;
572
+ }
573
+ }
574
+ .ac-viewer__arrow-prev{
575
+ left: 60px;
576
+ }
577
+ .ac-viewer__arrow-next{
578
+ right: 60px;
579
+ }
580
+ .ac-viewer__operate{
581
+ position: absolute;
582
+ bottom: 100px;
583
+ left: 50%;
584
+ transform: translateX(-50%);
585
+ display: flex;
586
+ flex-direction: row;
587
+ z-index: 10;
588
+ padding: 6px 3px;
589
+ background-color: rgba(0,0,0,.85);
590
+ border-radius: 3px;
591
+ }
592
+ .ac-viewer__operate-item{
593
+ min-width: 24px;
594
+ height: 24px;
595
+ line-height: 24px;
596
+ box-sizing: content-box;
597
+ text-align: center;
598
+ padding: 8px;
599
+ transition: all .3s;
600
+ border-radius: 2px;
601
+ margin: 0 3px;
602
+ cursor: pointer;
603
+ &:hover{
604
+ background-color: rgba(255,255,255,.1);
605
+ }
606
+ }
607
+ </style>
@@ -0,0 +1,3 @@
1
+ import ViewerPedestal from './viewer-pedestal'
2
+
3
+ export default ViewerPedestal
@@ -0,0 +1,70 @@
1
+ <template>
2
+ <ac-viewer
3
+ v-if="viewerImageData && viewerImageData.length"
4
+ :download-method="innerDownloadMethod"
5
+ :data="viewerImageData"
6
+ :value="viewerCurrentImage"
7
+ @input="handleViewerCurrentChange"
8
+ @close="handleClose"
9
+ @open="handleOpen"
10
+ >
11
+ <template slot="addon">
12
+ <slot name="addon" :image-data="viewerImageData" :current-image-item="viewerCurrentImageItem"></slot>
13
+ </template>
14
+ </ac-viewer>
15
+ </template>
16
+ <script>
17
+ import AcViewer, { getViewerImageData, getViewerCurrentImage, setViewerCurrentImage } from '../viewer'
18
+
19
+ export default {
20
+ name: 'BiViewerPedestal',
21
+ components: {
22
+ AcViewer
23
+ },
24
+ props: {
25
+ downloadMethod: {
26
+ type: Function
27
+ }
28
+ },
29
+ computed: {
30
+ viewerImageData () {
31
+ return getViewerImageData()
32
+ },
33
+ viewerCurrentImage () {
34
+ return getViewerCurrentImage()
35
+ },
36
+ viewerCurrentImageItem () {
37
+ return (this.viewerImageData || []).find(v => v.id === this.viewerCurrentImage)
38
+ },
39
+ innerDownloadMethod () {
40
+ if (!this.downloadMethod) {
41
+ return
42
+ }
43
+ return (src, imageItem) => {
44
+ return this.downloadMethod({
45
+ src,
46
+ imageItem
47
+ })
48
+ }
49
+ }
50
+ },
51
+ methods: {
52
+ handleViewerCurrentChange (id) {
53
+ setViewerCurrentImage(id)
54
+ this.$emit('change', {
55
+ imageData: this.viewerImageData,
56
+ imageItem: this.viewerImageData.find(v => v.id === id)
57
+ })
58
+ },
59
+ handleClose () {
60
+ this.$emit('close')
61
+ },
62
+ handleOpen (evt) {
63
+ this.$emit('open', {
64
+ value: evt.value,
65
+ imageItem: (this.viewerImageData || []).find(v => v.id === evt.value)
66
+ })
67
+ }
68
+ }
69
+ }
70
+ </script>
@@ -0,0 +1,21 @@
1
+ import Voice from './voice'
2
+
3
+ export { setAacCodecParserLibPath, getAacCodecParserLibPath, setBenzAMRRecorderLibPath, getBenzAMRRecorderLibPath } from './util'
4
+
5
+ export function getRateOptions () {
6
+ return [{
7
+ value: 1,
8
+ showText: '1倍',
9
+ text: '1倍(默认)'
10
+ }, {
11
+ value: 1.25,
12
+ showText: '1.5倍',
13
+ text: '1.5倍'
14
+ }, {
15
+ value: 1.5,
16
+ showText: '2倍',
17
+ text: '2倍'
18
+ }]
19
+ }
20
+
21
+ export default Voice
@@ -0,0 +1,18 @@
1
+ let aacCodecParserLibPath = './lib/aac-codec-parser/aac-codec-parser.js'
2
+ let benzAMRRecorderLibPath = '/lib/ac-amr-recorder/BenzAMRRecorder.js'
3
+
4
+ export function setAacCodecParserLibPath (libPath) {
5
+ aacCodecParserLibPath = libPath
6
+ }
7
+
8
+ export function getAacCodecParserLibPath () {
9
+ return aacCodecParserLibPath
10
+ }
11
+
12
+ export function setBenzAMRRecorderLibPath (libPath) {
13
+ benzAMRRecorderLibPath = libPath
14
+ }
15
+
16
+ export function getBenzAMRRecorderLibPath () {
17
+ return benzAMRRecorderLibPath
18
+ }