oxy-uni-ui 1.0.1

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 (355) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/attributes.json +1 -0
  4. package/components/common/AbortablePromise.ts +28 -0
  5. package/components/common/abstracts/_config.scss +7 -0
  6. package/components/common/abstracts/_function.scss +89 -0
  7. package/components/common/abstracts/_mixin.scss +385 -0
  8. package/components/common/abstracts/variable.scss +974 -0
  9. package/components/common/base64.ts +29 -0
  10. package/components/common/canvasHelper.ts +49 -0
  11. package/components/common/clickoutside.ts +25 -0
  12. package/components/common/event.ts +8 -0
  13. package/components/common/interceptor.ts +43 -0
  14. package/components/common/props.ts +51 -0
  15. package/components/common/util.ts +778 -0
  16. package/components/composables/index.ts +11 -0
  17. package/components/composables/useCell.ts +13 -0
  18. package/components/composables/useChildren.ts +113 -0
  19. package/components/composables/useCountDown.ts +138 -0
  20. package/components/composables/useLockScroll.ts +37 -0
  21. package/components/composables/useParent.ts +41 -0
  22. package/components/composables/usePopover.ts +176 -0
  23. package/components/composables/useQueue.ts +52 -0
  24. package/components/composables/useRaf.ts +37 -0
  25. package/components/composables/useTouch.ts +43 -0
  26. package/components/composables/useTranslate.ts +12 -0
  27. package/components/composables/useUpload.ts +364 -0
  28. package/components/oxy-action-sheet/index.scss +204 -0
  29. package/components/oxy-action-sheet/oxy-action-sheet.vue +155 -0
  30. package/components/oxy-action-sheet/types.ts +118 -0
  31. package/components/oxy-backtop/index.scss +25 -0
  32. package/components/oxy-backtop/oxy-backtop.vue +45 -0
  33. package/components/oxy-backtop/types.ts +37 -0
  34. package/components/oxy-badge/index.scss +63 -0
  35. package/components/oxy-badge/oxy-badge.vue +61 -0
  36. package/components/oxy-badge/types.ts +41 -0
  37. package/components/oxy-button/index.scss +336 -0
  38. package/components/oxy-button/oxy-button.vue +195 -0
  39. package/components/oxy-button/types.ts +133 -0
  40. package/components/oxy-calendar/index.scss +158 -0
  41. package/components/oxy-calendar/oxy-calendar.vue +451 -0
  42. package/components/oxy-calendar/types.ts +217 -0
  43. package/components/oxy-calendar-view/index.scss +0 -0
  44. package/components/oxy-calendar-view/month/index.scss +162 -0
  45. package/components/oxy-calendar-view/month/month.vue +389 -0
  46. package/components/oxy-calendar-view/month/types.ts +20 -0
  47. package/components/oxy-calendar-view/monthPanel/index.scss +89 -0
  48. package/components/oxy-calendar-view/monthPanel/month-panel.vue +374 -0
  49. package/components/oxy-calendar-view/monthPanel/types.ts +48 -0
  50. package/components/oxy-calendar-view/oxy-calendar-view.vue +111 -0
  51. package/components/oxy-calendar-view/types.ts +109 -0
  52. package/components/oxy-calendar-view/utils.ts +429 -0
  53. package/components/oxy-calendar-view/year/index.scss +153 -0
  54. package/components/oxy-calendar-view/year/types.ts +20 -0
  55. package/components/oxy-calendar-view/year/year.vue +202 -0
  56. package/components/oxy-calendar-view/yearPanel/index.scss +24 -0
  57. package/components/oxy-calendar-view/yearPanel/types.ts +38 -0
  58. package/components/oxy-calendar-view/yearPanel/year-panel.vue +135 -0
  59. package/components/oxy-card/index.scss +71 -0
  60. package/components/oxy-card/oxy-card.vue +37 -0
  61. package/components/oxy-card/types.ts +30 -0
  62. package/components/oxy-cell/index.scss +206 -0
  63. package/components/oxy-cell/oxy-cell.vue +140 -0
  64. package/components/oxy-cell/types.ts +111 -0
  65. package/components/oxy-cell-group/index.scss +56 -0
  66. package/components/oxy-cell-group/oxy-cell-group.vue +45 -0
  67. package/components/oxy-cell-group/types.ts +32 -0
  68. package/components/oxy-checkbox/index.scss +285 -0
  69. package/components/oxy-checkbox/oxy-checkbox.vue +177 -0
  70. package/components/oxy-checkbox/types.ts +68 -0
  71. package/components/oxy-checkbox-group/index.scss +20 -0
  72. package/components/oxy-checkbox-group/oxy-checkbox-group.vue +100 -0
  73. package/components/oxy-checkbox-group/types.ts +59 -0
  74. package/components/oxy-circle/index.scss +18 -0
  75. package/components/oxy-circle/oxy-circle.vue +296 -0
  76. package/components/oxy-circle/types.ts +54 -0
  77. package/components/oxy-col/index.scss +19 -0
  78. package/components/oxy-col/oxy-col.vue +49 -0
  79. package/components/oxy-col/types.ts +15 -0
  80. package/components/oxy-col-picker/index.scss +168 -0
  81. package/components/oxy-col-picker/oxy-col-picker.vue +498 -0
  82. package/components/oxy-col-picker/types.ts +166 -0
  83. package/components/oxy-collapse/index.scss +55 -0
  84. package/components/oxy-collapse/oxy-collapse.vue +151 -0
  85. package/components/oxy-collapse/types.ts +58 -0
  86. package/components/oxy-collapse-item/index.scss +90 -0
  87. package/components/oxy-collapse-item/oxy-collapse-item.vue +171 -0
  88. package/components/oxy-collapse-item/types.ts +48 -0
  89. package/components/oxy-config-provider/oxy-config-provider.vue +73 -0
  90. package/components/oxy-config-provider/types.ts +1052 -0
  91. package/components/oxy-count-down/index.scss +15 -0
  92. package/components/oxy-count-down/oxy-count-down.vue +60 -0
  93. package/components/oxy-count-down/types.ts +41 -0
  94. package/components/oxy-count-down/utils.ts +52 -0
  95. package/components/oxy-count-to/index.scss +7 -0
  96. package/components/oxy-count-to/oxy-count-to.vue +125 -0
  97. package/components/oxy-count-to/types.ts +117 -0
  98. package/components/oxy-curtain/index.scss +85 -0
  99. package/components/oxy-curtain/oxy-curtain.vue +172 -0
  100. package/components/oxy-curtain/types.ts +73 -0
  101. package/components/oxy-datetime-picker/index.scss +164 -0
  102. package/components/oxy-datetime-picker/oxy-datetime-picker.vue +801 -0
  103. package/components/oxy-datetime-picker/types.ts +231 -0
  104. package/components/oxy-datetime-picker-view/oxy-datetime-picker-view.vue +499 -0
  105. package/components/oxy-datetime-picker-view/types.ts +120 -0
  106. package/components/oxy-datetime-picker-view/util.ts +30 -0
  107. package/components/oxy-design-uni/oxy-design-uni.vue +5 -0
  108. package/components/oxy-divider/index.scss +100 -0
  109. package/components/oxy-divider/oxy-divider.vue +52 -0
  110. package/components/oxy-divider/types.ts +35 -0
  111. package/components/oxy-drop-menu/index.scss +86 -0
  112. package/components/oxy-drop-menu/oxy-drop-menu.vue +166 -0
  113. package/components/oxy-drop-menu/types.ts +38 -0
  114. package/components/oxy-drop-menu-item/index.scss +66 -0
  115. package/components/oxy-drop-menu-item/oxy-drop-menu-item.vue +221 -0
  116. package/components/oxy-drop-menu-item/types.ts +94 -0
  117. package/components/oxy-fab/index.scss +116 -0
  118. package/components/oxy-fab/oxy-fab.vue +276 -0
  119. package/components/oxy-fab/types.ts +66 -0
  120. package/components/oxy-floating-panel/index.scss +64 -0
  121. package/components/oxy-floating-panel/oxy-floating-panel.vue +140 -0
  122. package/components/oxy-floating-panel/type.ts +32 -0
  123. package/components/oxy-form/oxy-form.vue +207 -0
  124. package/components/oxy-form/types.ts +76 -0
  125. package/components/oxy-form-item/index.scss +18 -0
  126. package/components/oxy-form-item/oxy-form-item.vue +56 -0
  127. package/components/oxy-form-item/types.ts +16 -0
  128. package/components/oxy-gap/index.scss +9 -0
  129. package/components/oxy-gap/oxy-gap.vue +36 -0
  130. package/components/oxy-gap/types.ts +17 -0
  131. package/components/oxy-grid/index.scss +9 -0
  132. package/components/oxy-grid/oxy-grid.vue +106 -0
  133. package/components/oxy-grid/types.ts +50 -0
  134. package/components/oxy-grid-item/index.scss +148 -0
  135. package/components/oxy-grid-item/oxy-grid-item.vue +176 -0
  136. package/components/oxy-grid-item/types.ts +77 -0
  137. package/components/oxy-icon/index.scss +1230 -0
  138. package/components/oxy-icon/oxy-icon.vue +53 -0
  139. package/components/oxy-icon/oxy-icons.ttf +0 -0
  140. package/components/oxy-icon/types.ts +21 -0
  141. package/components/oxy-img/index.scss +19 -0
  142. package/components/oxy-img/oxy-img.vue +81 -0
  143. package/components/oxy-img/types.ts +61 -0
  144. package/components/oxy-img-cropper/index.scss +231 -0
  145. package/components/oxy-img-cropper/oxy-img-cropper.vue +664 -0
  146. package/components/oxy-img-cropper/types.ts +76 -0
  147. package/components/oxy-index-anchor/index.scss +35 -0
  148. package/components/oxy-index-anchor/oxy-index-anchor.vue +55 -0
  149. package/components/oxy-index-anchor/type.ts +9 -0
  150. package/components/oxy-index-bar/index.scss +39 -0
  151. package/components/oxy-index-bar/oxy-index-bar.vue +156 -0
  152. package/components/oxy-index-bar/type.ts +23 -0
  153. package/components/oxy-input/index.scss +323 -0
  154. package/components/oxy-input/oxy-input.vue +300 -0
  155. package/components/oxy-input/placeholder.scss +21 -0
  156. package/components/oxy-input/types.ts +189 -0
  157. package/components/oxy-input-number/index.scss +132 -0
  158. package/components/oxy-input-number/oxy-input-number.vue +464 -0
  159. package/components/oxy-input-number/types.ts +101 -0
  160. package/components/oxy-keyboard/constants.ts +81 -0
  161. package/components/oxy-keyboard/index.scss +102 -0
  162. package/components/oxy-keyboard/key/index.scss +79 -0
  163. package/components/oxy-keyboard/key/index.vue +76 -0
  164. package/components/oxy-keyboard/key/types.ts +11 -0
  165. package/components/oxy-keyboard/oxy-keyboard.vue +206 -0
  166. package/components/oxy-keyboard/types.ts +92 -0
  167. package/components/oxy-loading/index.scss +37 -0
  168. package/components/oxy-loading/oxy-loading.vue +90 -0
  169. package/components/oxy-loading/types.ts +22 -0
  170. package/components/oxy-loadmore/index.scss +39 -0
  171. package/components/oxy-loadmore/oxy-loadmore.vue +59 -0
  172. package/components/oxy-loadmore/types.ts +30 -0
  173. package/components/oxy-message-box/index.scss +108 -0
  174. package/components/oxy-message-box/index.ts +87 -0
  175. package/components/oxy-message-box/oxy-message-box.vue +291 -0
  176. package/components/oxy-message-box/types.ts +132 -0
  177. package/components/oxy-navbar/index.scss +93 -0
  178. package/components/oxy-navbar/oxy-navbar.vue +111 -0
  179. package/components/oxy-navbar/types.ts +52 -0
  180. package/components/oxy-navbar-capsule/index.scss +66 -0
  181. package/components/oxy-navbar-capsule/oxy-navbar-capsule.vue +35 -0
  182. package/components/oxy-navbar-capsule/types.ts +8 -0
  183. package/components/oxy-notice-bar/index.scss +68 -0
  184. package/components/oxy-notice-bar/oxy-notice-bar.vue +266 -0
  185. package/components/oxy-notice-bar/types.ts +67 -0
  186. package/components/oxy-notify/index.scss +34 -0
  187. package/components/oxy-notify/index.ts +61 -0
  188. package/components/oxy-notify/oxy-notify.vue +85 -0
  189. package/components/oxy-notify/types.ts +66 -0
  190. package/components/oxy-number-keyboard/index.scss +78 -0
  191. package/components/oxy-number-keyboard/key/index.scss +81 -0
  192. package/components/oxy-number-keyboard/key/index.vue +78 -0
  193. package/components/oxy-number-keyboard/key/types.ts +11 -0
  194. package/components/oxy-number-keyboard/oxy-number-keyboard.vue +151 -0
  195. package/components/oxy-number-keyboard/types.ts +83 -0
  196. package/components/oxy-overlay/index.scss +17 -0
  197. package/components/oxy-overlay/oxy-overlay.vue +47 -0
  198. package/components/oxy-overlay/types.ts +25 -0
  199. package/components/oxy-pagination/index.scss +57 -0
  200. package/components/oxy-pagination/oxy-pagination.vue +110 -0
  201. package/components/oxy-pagination/types.ts +41 -0
  202. package/components/oxy-password-input/index.scss +124 -0
  203. package/components/oxy-password-input/oxy-password-input.vue +49 -0
  204. package/components/oxy-password-input/types.ts +33 -0
  205. package/components/oxy-picker/index.scss +110 -0
  206. package/components/oxy-picker/oxy-picker.vue +412 -0
  207. package/components/oxy-picker/types.ts +189 -0
  208. package/components/oxy-picker-view/index.scss +92 -0
  209. package/components/oxy-picker-view/oxy-picker-view.vue +369 -0
  210. package/components/oxy-picker-view/types.ts +152 -0
  211. package/components/oxy-popover/index.scss +116 -0
  212. package/components/oxy-popover/oxy-popover.vue +180 -0
  213. package/components/oxy-popover/types.ts +69 -0
  214. package/components/oxy-popup/index.scss +84 -0
  215. package/components/oxy-popup/oxy-popup.vue +169 -0
  216. package/components/oxy-popup/types.ts +95 -0
  217. package/components/oxy-progress/index.scss +68 -0
  218. package/components/oxy-progress/oxy-progress.vue +197 -0
  219. package/components/oxy-progress/types.ts +35 -0
  220. package/components/oxy-radio/index.scss +301 -0
  221. package/components/oxy-radio/oxy-radio.vue +118 -0
  222. package/components/oxy-radio/types.ts +42 -0
  223. package/components/oxy-radio-group/index.scss +23 -0
  224. package/components/oxy-radio-group/oxy-radio-group.vue +51 -0
  225. package/components/oxy-radio-group/types.ts +39 -0
  226. package/components/oxy-rate/index.scss +25 -0
  227. package/components/oxy-rate/oxy-rate.vue +178 -0
  228. package/components/oxy-rate/types.ts +103 -0
  229. package/components/oxy-resize/index.scss +27 -0
  230. package/components/oxy-resize/oxy-resize.vue +144 -0
  231. package/components/oxy-resize/types.ts +6 -0
  232. package/components/oxy-root-portal/oxy-root-portal.vue +50 -0
  233. package/components/oxy-row/index.scss +10 -0
  234. package/components/oxy-row/oxy-row.vue +42 -0
  235. package/components/oxy-row/types.ts +16 -0
  236. package/components/oxy-search/index.scss +148 -0
  237. package/components/oxy-search/oxy-search.vue +187 -0
  238. package/components/oxy-search/types.ts +93 -0
  239. package/components/oxy-segmented/index.scss +101 -0
  240. package/components/oxy-segmented/oxy-segmented.vue +143 -0
  241. package/components/oxy-segmented/types.ts +71 -0
  242. package/components/oxy-select-picker/index.scss +102 -0
  243. package/components/oxy-select-picker/oxy-select-picker.vue +432 -0
  244. package/components/oxy-select-picker/types.ts +123 -0
  245. package/components/oxy-sidebar/index.scss +25 -0
  246. package/components/oxy-sidebar/oxy-sidebar.vue +63 -0
  247. package/components/oxy-sidebar/types.ts +38 -0
  248. package/components/oxy-sidebar-item/index.scss +97 -0
  249. package/components/oxy-sidebar-item/oxy-sidebar-item.vue +116 -0
  250. package/components/oxy-sidebar-item/types.ts +31 -0
  251. package/components/oxy-signature/index.scss +31 -0
  252. package/components/oxy-signature/oxy-signature.vue +630 -0
  253. package/components/oxy-signature/types.ts +108 -0
  254. package/components/oxy-skeleton/index.scss +96 -0
  255. package/components/oxy-skeleton/index.ts +1 -0
  256. package/components/oxy-skeleton/oxy-skeleton.vue +110 -0
  257. package/components/oxy-skeleton/types.ts +69 -0
  258. package/components/oxy-slider/index.scss +98 -0
  259. package/components/oxy-slider/oxy-slider.vue +356 -0
  260. package/components/oxy-slider/types.ts +138 -0
  261. package/components/oxy-sort-button/index.scss +89 -0
  262. package/components/oxy-sort-button/oxy-sort-button.vue +69 -0
  263. package/components/oxy-sort-button/types.ts +43 -0
  264. package/components/oxy-status-tip/images/collect.png +0 -0
  265. package/components/oxy-status-tip/images/content.png +0 -0
  266. package/components/oxy-status-tip/images/network.png +0 -0
  267. package/components/oxy-status-tip/images/search.png +0 -0
  268. package/components/oxy-status-tip/index.scss +37 -0
  269. package/components/oxy-status-tip/oxy-status-tip.vue +71 -0
  270. package/components/oxy-status-tip/types.ts +50 -0
  271. package/components/oxy-step/index.scss +235 -0
  272. package/components/oxy-step/oxy-step.vue +150 -0
  273. package/components/oxy-step/types.ts +33 -0
  274. package/components/oxy-steps/index.scss +10 -0
  275. package/components/oxy-steps/oxy-steps.vue +28 -0
  276. package/components/oxy-steps/types.ts +50 -0
  277. package/components/oxy-sticky/index.scss +9 -0
  278. package/components/oxy-sticky/oxy-sticky.vue +190 -0
  279. package/components/oxy-sticky/types.ts +13 -0
  280. package/components/oxy-sticky-box/index.scss +6 -0
  281. package/components/oxy-sticky-box/oxy-sticky-box.vue +155 -0
  282. package/components/oxy-sticky-box/types.ts +11 -0
  283. package/components/oxy-swipe-action/index.scss +22 -0
  284. package/components/oxy-swipe-action/oxy-swipe-action.vue +294 -0
  285. package/components/oxy-swipe-action/types.ts +40 -0
  286. package/components/oxy-swiper/index.scss +53 -0
  287. package/components/oxy-swiper/oxy-swiper.vue +318 -0
  288. package/components/oxy-swiper/types.ts +264 -0
  289. package/components/oxy-swiper-nav/index.scss +159 -0
  290. package/components/oxy-swiper-nav/oxy-swiper-nav.vue +37 -0
  291. package/components/oxy-swiper-nav/types.ts +42 -0
  292. package/components/oxy-switch/index.scss +58 -0
  293. package/components/oxy-switch/oxy-switch.vue +83 -0
  294. package/components/oxy-switch/types.ts +58 -0
  295. package/components/oxy-tab/index.scss +16 -0
  296. package/components/oxy-tab/oxy-tab.vue +88 -0
  297. package/components/oxy-tab/types.ts +30 -0
  298. package/components/oxy-tabbar/index.scss +62 -0
  299. package/components/oxy-tabbar/oxy-tabbar.vue +91 -0
  300. package/components/oxy-tabbar/types.ts +73 -0
  301. package/components/oxy-tabbar-item/index.scss +55 -0
  302. package/components/oxy-tabbar-item/oxy-tabbar-item.vue +99 -0
  303. package/components/oxy-tabbar-item/types.ts +51 -0
  304. package/components/oxy-table/index.scss +163 -0
  305. package/components/oxy-table/oxy-table.vue +283 -0
  306. package/components/oxy-table/types.ts +58 -0
  307. package/components/oxy-table-col/index.scss +46 -0
  308. package/components/oxy-table-col/oxy-table-col.vue +149 -0
  309. package/components/oxy-table-col/types.ts +54 -0
  310. package/components/oxy-tabs/index.scss +299 -0
  311. package/components/oxy-tabs/oxy-tabs.vue +443 -0
  312. package/components/oxy-tabs/types.ts +107 -0
  313. package/components/oxy-tag/index.scss +115 -0
  314. package/components/oxy-tag/oxy-tag.vue +148 -0
  315. package/components/oxy-tag/types.ts +81 -0
  316. package/components/oxy-text/index.scss +37 -0
  317. package/components/oxy-text/oxy-text.vue +139 -0
  318. package/components/oxy-text/types.ts +98 -0
  319. package/components/oxy-textarea/index.scss +340 -0
  320. package/components/oxy-textarea/oxy-textarea.vue +296 -0
  321. package/components/oxy-textarea/placeholder.scss +20 -0
  322. package/components/oxy-textarea/types.ts +288 -0
  323. package/components/oxy-toast/index.scss +75 -0
  324. package/components/oxy-toast/index.ts +92 -0
  325. package/components/oxy-toast/oxy-toast.vue +198 -0
  326. package/components/oxy-toast/types.ts +181 -0
  327. package/components/oxy-tooltip/index.scss +66 -0
  328. package/components/oxy-tooltip/oxy-tooltip.vue +141 -0
  329. package/components/oxy-tooltip/types.ts +107 -0
  330. package/components/oxy-transition/index.scss +95 -0
  331. package/components/oxy-transition/oxy-transition.vue +232 -0
  332. package/components/oxy-transition/types.ts +98 -0
  333. package/components/oxy-upload/index.scss +175 -0
  334. package/components/oxy-upload/oxy-upload.vue +673 -0
  335. package/components/oxy-upload/types.ts +391 -0
  336. package/components/oxy-video-preview/index.scss +34 -0
  337. package/components/oxy-video-preview/oxy-video-preview.vue +72 -0
  338. package/components/oxy-video-preview/types.ts +23 -0
  339. package/components/oxy-watermark/index.scss +18 -0
  340. package/components/oxy-watermark/oxy-watermark.vue +486 -0
  341. package/components/oxy-watermark/types.ts +76 -0
  342. package/dayjs/constant.js +26 -0
  343. package/dayjs/index.d.ts +430 -0
  344. package/dayjs/index.js +542 -0
  345. package/dayjs/locale/en.js +13 -0
  346. package/dayjs/utils.js +59 -0
  347. package/global.d.ts +101 -0
  348. package/index.ts +12 -0
  349. package/locale/index.ts +32 -0
  350. package/locale/lang/ar-SA.ts +133 -0
  351. package/locale/lang/en-US.ts +133 -0
  352. package/locale/lang/zh-CN.ts +137 -0
  353. package/package.json +1 -0
  354. package/tags.json +1 -0
  355. package/web-types.json +1 -0
@@ -0,0 +1,391 @@
1
+ import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
2
+ import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props'
3
+ import type { LoadingType } from '../oxy-loading/types'
4
+ import type { ImageMode } from '../oxy-img/types'
5
+
6
+ export interface ChooseFileOption {
7
+ // 是否支持多选文件
8
+ multiple?: boolean
9
+ // 所选的图片的尺寸
10
+ sizeType?: UploadSizeType[]
11
+ // 选择文件的来源
12
+ sourceType?: UploadSourceType[]
13
+ // 最大允许上传个数
14
+ maxCount?: number
15
+ // 接受文件类型
16
+ accept?: UploadFileType
17
+ /**
18
+ * 是否压缩视频,当 accept 为 video 时生效。
19
+ */
20
+ compressed?: boolean
21
+ /**
22
+ * 拍摄视频最长拍摄时间,当 accept 为 video | media 时生效,单位秒。
23
+ */
24
+ maxDuration?: number
25
+ /**
26
+ * 使用前置或者后置相机,当 accept 为 video | media 时生效,可选值为:back|front。
27
+ */
28
+ camera?: UploadCameraType
29
+ /**
30
+ * 根据文件拓展名过滤,H5、微信小程序支持
31
+ * 每一项都不能是空字符串, 默认不过滤
32
+ * 例如: ['.jpg'] 表示只选择.jpg文件
33
+ */
34
+ extension?: string[]
35
+ }
36
+
37
+ export type UploadFileItem = {
38
+ [key: string]: any
39
+ // 当前上传文件在列表中的唯一标识
40
+ uid: number
41
+ // 缩略图地址
42
+ thumb?: string
43
+ // 当前文件名称,仅h5支持
44
+ name?: string
45
+ // 上传状态。若自定义了status-key,应取对应字段
46
+ status?: UploadStatusType
47
+ // 文件大小
48
+ size?: number
49
+ // 上传图片/视频的本地地址
50
+ url: string
51
+ // 上传进度
52
+ percent?: number
53
+ // 后端返回的内容,可能是对象,也可能是字符串
54
+ response?: string | Record<string, any>
55
+ }
56
+
57
+ export interface ChooseFile {
58
+ path: string // 上传临时地址
59
+ size?: number // 上传大小
60
+ name?: string // 当前文件名称,仅h5支持
61
+ type: 'image' | 'video' | 'file' // 上传类型
62
+ duration?: number // 上传时间
63
+ thumb?: string // 缩略图地址
64
+ }
65
+
66
+ export type UploadSourceType = 'album' | 'camera'
67
+ export type UploadSizeType = 'original' | 'compressed'
68
+ export type UploadFileType = 'image' | 'video' | 'media' | 'all' | 'file'
69
+ export type UploadCameraType = 'front' | 'back'
70
+ export type UploadStatusType = 'pending' | 'loading' | 'success' | 'fail'
71
+
72
+ export type UploadBeforePreviewOption = {
73
+ file: UploadFileItem
74
+ index: number
75
+ imgList: string[]
76
+ fileList: UploadFileItem[]
77
+ resolve: (isPass: boolean) => void
78
+ }
79
+ export type UploadBeforePreview = (option: UploadBeforePreviewOption) => void
80
+
81
+ export type UploadOnPreviewFailOption = {
82
+ index: number
83
+ imgList: string[]
84
+ }
85
+ export type UploadOnPreviewFail = (option: UploadOnPreviewFailOption) => void
86
+
87
+ export type UploadBeforeRemoveOption = {
88
+ file: UploadFileItem
89
+ index: number
90
+ fileList: UploadFileItem[]
91
+ resolve: (isPass: boolean) => void
92
+ }
93
+ export type UploadBeforeRemove = (option: UploadBeforeRemoveOption) => void
94
+
95
+ export type UploadBeforeChooseOption = {
96
+ fileList: UploadFileItem[]
97
+ resolve: (isPass: boolean) => void
98
+ }
99
+ export type UploadBeforeChoose = (option: UploadBeforeChooseOption) => void
100
+
101
+ export type UploadBeforeUploadOption = {
102
+ files: Record<string, any>[]
103
+ fileList: UploadFileItem[]
104
+ resolve: (isPass: boolean) => void
105
+ }
106
+ export type UploadBeforeUpload = (options: UploadBeforeUploadOption) => void
107
+
108
+ export type UploadFormData = Record<string, any>
109
+
110
+ export type UploadBuildFormDataOption = {
111
+ file: UploadFileItem
112
+ formData: UploadFormData
113
+ resolve: (formData: Record<string, any>) => void
114
+ }
115
+ export type UploadBuildFormData = (options: UploadBuildFormDataOption) => void
116
+
117
+ export type UploadFile = Partial<UploadFileItem> & { url: string }
118
+
119
+ export type UploadMethod = (
120
+ uploadFile: UploadFileItem,
121
+ formData: UploadFormData,
122
+ options: {
123
+ action: string
124
+ header: Record<string, any>
125
+ name: string
126
+ fileName: string
127
+ fileType: 'image' | 'video' | 'audio'
128
+ statusCode: number
129
+ // 添加是否自动中断之前上传的选项
130
+ abortPrevious?: boolean
131
+ onSuccess: (res: UniApp.UploadFileSuccessCallbackResult, file: UploadFileItem, formData: UploadFormData) => void
132
+ onError: (res: UniApp.GeneralCallbackResult, file: UploadFileItem, formData: UploadFormData) => void
133
+ onProgress: (res: UniApp.OnProgressUpdateResult, file: UploadFileItem) => void
134
+ }
135
+ ) => UniApp.UploadTask | void | Promise<void> // 修改这里,支持返回 UploadTask 类型
136
+
137
+ export const uploadProps = {
138
+ ...baseProps,
139
+ /**
140
+ * 上传的文件列表,例如:[{name:'food.jpg',url:'https://xxx.cdn.com/xxx.jpg'}]
141
+ * 类型:array
142
+ * 默认值:[]
143
+ */
144
+ fileList: makeArrayProp<UploadFile>(),
145
+ /**
146
+ * 必选参数,上传的地址
147
+ * 类型:string
148
+ * 默认值:''
149
+ */
150
+ action: makeStringProp(''),
151
+ /**
152
+ * 设置上传的请求头部
153
+ * 类型:object
154
+ * 默认值:{}
155
+ */
156
+ header: { type: Object as PropType<Record<string, any>>, default: () => ({}) },
157
+ /**
158
+ * 是否支持多选文件
159
+ * 类型:boolean
160
+ * 默认值:false
161
+ */
162
+ multiple: makeBooleanProp(false),
163
+ /**
164
+ * 是否禁用
165
+ * 类型:boolean
166
+ * 默认值:false
167
+ */
168
+ disabled: makeBooleanProp(false),
169
+ /**
170
+ * 最大允许上传个数
171
+ * 类型:number
172
+ * 默认值:无
173
+ */
174
+ limit: Number,
175
+ /**
176
+ * 限制上传个数的情况下,是否展示当前上传的个数
177
+ * 类型:boolean
178
+ * 默认值:true
179
+ */
180
+ showLimitNum: makeBooleanProp(true),
181
+ /**
182
+ * 文件大小限制,单位为byte
183
+ * 类型:number
184
+ * 默认值:Number.MAX_VALUE
185
+ */
186
+ maxSize: makeNumberProp(Number.MAX_VALUE),
187
+ /**
188
+ * 选择图片的来源,chooseImage接口详细参数,查看官方手册
189
+ * 类型:array
190
+ * 默认值:['album','camera']
191
+ */
192
+ sourceType: {
193
+ type: Array as PropType<UploadSourceType[]>,
194
+ default: () => ['album', 'camera']
195
+ },
196
+ /**
197
+ * 所选的图片的尺寸,chooseImage接口详细参数,查看官方手册
198
+ * 类型:array
199
+ * 默认值:['original','compressed']
200
+ */
201
+ sizeType: {
202
+ type: Array as PropType<UploadSizeType[]>,
203
+ // #ifndef MP-DINGTALK
204
+ default: () => ['original', 'compressed']
205
+ // #endif
206
+ },
207
+ /**
208
+ * 文件对应的key,开发者在服务端可以通过这个key获取文件的二进制内容,uploadFile接口详细参数,查看官方手册
209
+ * 类型:string
210
+ * 默认值:'file'
211
+ */
212
+ name: makeStringProp('file'),
213
+ /**
214
+ * HTTP请求中其他额外的formdata,uploadFile接口详细参数,查看官方手册
215
+ * 类型:object
216
+ * 默认值:{}
217
+ */
218
+ formData: { type: Object as PropType<UploadFormData>, default: () => ({}) },
219
+ /**
220
+ * 预览失败执行操作
221
+ * 类型:function({index,imgList})
222
+ * 默认值:-
223
+ */
224
+ onPreviewFail: Function as PropType<UploadOnPreviewFail>,
225
+ /**
226
+ * 上传文件之前的钩子,参数为上传的文件和文件列表,若返回false或者返回Promise且被reject,则停止上传。
227
+ * 类型:function({files,fileList,resolve})
228
+ * 默认值:-
229
+ */
230
+ beforeUpload: Function as PropType<UploadBeforeUpload>,
231
+ /**
232
+ * 选择图片之前的钩子,参数为文件列表,若返回false或者返回Promise且被reject,则停止上传。
233
+ * 类型:function({fileList,resolve})
234
+ * 默认值:-
235
+ */
236
+ beforeChoose: Function as PropType<UploadBeforeChoose>,
237
+ /**
238
+ * 删除文件之前的钩子,参数为要删除的文件和文件列表,若返回false或者返回Promise且被reject,则停止上传。
239
+ * 类型:function({file,fileList,resolve})
240
+ * 默认值:-
241
+ */
242
+ beforeRemove: Function as PropType<UploadBeforeRemove>,
243
+ /**
244
+ * 图片预览前的钩子,参数为预览的图片下标和图片列表,若返回false或者返回Promise且被reject,则停止上传。
245
+ * 类型:function({index,imgList,resolve})
246
+ * 默认值:-
247
+ */
248
+ beforePreview: Function as PropType<UploadBeforePreview>,
249
+ /**
250
+ * 构建上传formData的钩子,参数为上传的文件、待处理的formData,返回值为处理后的formData,若返回false或者返回Promise且被reject,则停止上传。
251
+ * 类型:function({file,formData,resolve})
252
+ * 默认值:-
253
+ * 最低版本:0.1.61
254
+ */
255
+ buildFormData: Function as PropType<UploadBuildFormData>,
256
+ /**
257
+ * 加载中图标类型
258
+ * 类型:string
259
+ * 默认值:'ring'
260
+ */
261
+ loadingType: makeStringProp<LoadingType>('ring'),
262
+ /**
263
+ * 加载中图标颜色
264
+ * 类型:string
265
+ * 默认值:'#ffffff'
266
+ */
267
+ loadingColor: makeStringProp('#ffffff'),
268
+ /**
269
+ * 文件类型,可选值:'image' | 'video' | 'media' | 'all' | 'file'
270
+ * 默认值:image
271
+ * 描述:'media'表示同时支持'image'和'video','file'表示支持除'image'和'video'外的所有文件类型,'all'标识支持全部类型文件
272
+ * 'media'和'file'仅微信支持,'all'仅微信和H5支持
273
+ */
274
+ accept: makeStringProp<UploadFileType>('image'),
275
+ /**
276
+ * file 数据结构中,status 对应的 key
277
+ * 类型:string
278
+ * 默认值:'status'
279
+ */
280
+ statusKey: makeStringProp('status'),
281
+ /**
282
+ * 加载中图标尺寸
283
+ * 类型:string
284
+ * 默认值:'24px'
285
+ */
286
+ loadingSize: makeStringProp('24px'),
287
+ /**
288
+ * 是否压缩视频,当 accept 为 video 时生效。
289
+ * 类型:boolean
290
+ * 默认值:true
291
+ */
292
+ compressed: makeBooleanProp(true),
293
+ /**
294
+ * 拍摄视频最长拍摄时间,当 accept 为 video | media 时生效,单位秒。
295
+ * 类型:number
296
+ * 默认值:60
297
+ */
298
+ maxDuration: makeNumberProp(60),
299
+ /**
300
+ * 使用前置或者后置相机,当 accept 为 video | media 时生效,可选值为:back|front。
301
+ * 类型:UploadCameraType
302
+ * 默认值:'back'
303
+ */
304
+ camera: makeStringProp<UploadCameraType>('back'),
305
+ /**
306
+ * 预览图片的mode属性
307
+ */
308
+ imageMode: makeStringProp<ImageMode>('aspectFit'),
309
+ /**
310
+ * 接口响应的成功状态(statusCode)值
311
+ */
312
+ successStatus: makeNumberProp(200),
313
+ /**
314
+ * 自定义上传按钮样式
315
+ * 类型:string
316
+ */
317
+ customEvokeClass: makeStringProp(''),
318
+ /**
319
+ * 自定义预览图片列表样式
320
+ * 类型:string
321
+ */
322
+ customPreviewClass: makeStringProp(''),
323
+ /**
324
+ * 是否选择文件后自动上传
325
+ * 类型:boolean
326
+ */
327
+ autoUpload: makeBooleanProp(true),
328
+ /**
329
+ * 点击已上传时是否可以重新上传
330
+ * 类型:boolean
331
+ * 默认值:false
332
+ */
333
+ reupload: makeBooleanProp(false),
334
+ /**
335
+ * 自定义上传文件的请求方法
336
+ * 类型:UploadMethod
337
+ * 默认值:-
338
+ */
339
+ uploadMethod: Function as PropType<UploadMethod>,
340
+ /**
341
+ * 根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。
342
+ * H5支持全部类型过滤。
343
+ * 微信小程序支持all和file时过滤,其余平台不支持。
344
+ */
345
+ extension: Array as PropType<string[]>
346
+ }
347
+
348
+ export type UploadProps = ExtractPropTypes<typeof uploadProps>
349
+
350
+ export type UploadExpose = {
351
+ /**
352
+ * 手动触发上传
353
+ */
354
+ submit: () => void
355
+ /**
356
+ * 取消上传
357
+ * @param task 上传任务
358
+ */
359
+ abort: (task?: UniApp.UploadTask) => void
360
+ }
361
+
362
+ export type UploadErrorEvent = {
363
+ error: any
364
+ file: UploadFileItem
365
+ formData: UploadFormData
366
+ }
367
+
368
+ export type UploadChangeEvent = {
369
+ fileList: UploadFileItem[]
370
+ }
371
+
372
+ export type UploadSuccessEvent = {
373
+ file: UploadFileItem
374
+ fileList: UploadFileItem[]
375
+ formData: UploadFormData
376
+ }
377
+
378
+ export type UploadProgressEvent = {
379
+ response: UniApp.OnProgressUpdateResult
380
+ file: UploadFileItem
381
+ }
382
+
383
+ export type UploadOversizeEvent = {
384
+ file: ChooseFile
385
+ }
386
+
387
+ export type UploadRemoveEvent = {
388
+ file: UploadFileItem
389
+ }
390
+
391
+ export type UploadInstance = ComponentPublicInstance<UploadProps, UploadExpose>
@@ -0,0 +1,34 @@
1
+ @import "../common/abstracts/variable.scss";
2
+ @import "../common/abstracts/_mixin.scss";
3
+
4
+ @include b(video-preview) {
5
+ position: fixed;
6
+ top: 0;
7
+ left: 0;
8
+ z-index: 999;
9
+ width: 100%;
10
+ height: 100%;
11
+ display: flex;
12
+ flex-direction: column;
13
+ justify-content: center;
14
+ align-items: center;
15
+ background: $-video-preview-bg;
16
+
17
+ @include e(video) {
18
+ width: 100%;
19
+ height: 242px;
20
+ transition: all 0.3s ease;
21
+ }
22
+
23
+ @include edeep(close) {
24
+ position: absolute;
25
+ box-sizing: border-box;
26
+ top: 0px;
27
+ right: 0px;
28
+ padding: 12px;
29
+ text-align: center;
30
+ cursor: pointer;
31
+ font-size: $-video-preview-close-font-size;
32
+ color: $-video-preview-close-color;
33
+ }
34
+ }
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <view :class="`oxy-video-preview ${customClass}`" :style="customStyle" v-if="showPopup" @click="close">
3
+ <view class="oxy-video-preview__video" @click.stop="">
4
+ <video
5
+ class="oxy-video-preview__video"
6
+ v-if="previdewVideo.url"
7
+ :controls="true"
8
+ :poster="previdewVideo.poster"
9
+ :title="previdewVideo.title"
10
+ play-btn-position="center"
11
+ :enableNative="true"
12
+ :src="previdewVideo.url"
13
+ :enable-progress-gesture="false"
14
+ ></video>
15
+ </view>
16
+ <oxy-icon name="close" :custom-class="`oxy-video-preview__close`" @click="close" />
17
+ </view>
18
+ </template>
19
+
20
+ <script lang="ts">
21
+ export default {
22
+ name: 'oxy-video-preview',
23
+ options: {
24
+ addGlobalClass: true,
25
+ virtualHost: true,
26
+ styleIsolation: 'shared'
27
+ }
28
+ }
29
+ </script>
30
+
31
+ <script lang="ts" setup>
32
+ import OxyIcon from '../oxy-icon/oxy-icon.vue'
33
+ import { nextTick, reactive, ref } from 'vue'
34
+ import { videoPreviewProps, type PreviewVideo, type VideoPreviewExpose } from './types'
35
+ import { useLockScroll } from '../composables/useLockScroll'
36
+ defineProps(videoPreviewProps)
37
+
38
+ const showPopup = ref<boolean>(false)
39
+ const previdewVideo = reactive<PreviewVideo>({ url: '', poster: '', title: '' })
40
+
41
+ function open(video: PreviewVideo) {
42
+ showPopup.value = true
43
+ previdewVideo.url = video.url
44
+ previdewVideo.poster = video.poster
45
+ previdewVideo.title = video.title
46
+ }
47
+
48
+ function close() {
49
+ showPopup.value = false
50
+ nextTick(() => {
51
+ handleClosed()
52
+ })
53
+ }
54
+
55
+ function handleClosed() {
56
+ previdewVideo.url = ''
57
+ previdewVideo.poster = ''
58
+ previdewVideo.title = ''
59
+ }
60
+
61
+ // #ifdef H5
62
+ useLockScroll(() => showPopup.value)
63
+ // #endif
64
+
65
+ defineExpose<VideoPreviewExpose>({
66
+ open,
67
+ close
68
+ })
69
+ </script>
70
+ <style lang="scss" scoped>
71
+ @import './index.scss';
72
+ </style>
@@ -0,0 +1,23 @@
1
+ import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue'
2
+ import { baseProps } from '../common/props'
3
+
4
+ export const videoPreviewProps = {
5
+ ...baseProps
6
+ }
7
+
8
+ export type PreviewVideo = {
9
+ url: string // 视频资源地址
10
+ poster?: string // 视频封面
11
+ title?: string // 视频标题
12
+ }
13
+
14
+ export type VideoPreviewProps = ExtractPropTypes<typeof videoPreviewProps>
15
+
16
+ export type VideoPreviewExpose = {
17
+ // 打开弹框
18
+ open: (video: PreviewVideo) => void
19
+ // 关闭弹框
20
+ close: () => void
21
+ }
22
+
23
+ export type VideoPreviewInstance = ComponentPublicInstance<VideoPreviewExpose, VideoPreviewProps>
@@ -0,0 +1,18 @@
1
+ @import "../common/abstracts/variable.scss";
2
+ @import "../common/abstracts/_mixin.scss";
3
+
4
+ @include b(watermark) {
5
+ position: absolute;
6
+ z-index: 1100;
7
+ opacity: 0.5;
8
+ left: 0;
9
+ right: 0;
10
+ top: 0;
11
+ bottom: 0;
12
+ pointer-events: none;
13
+ background-repeat: repeat;
14
+
15
+ @include when(fullscreen) {
16
+ position: fixed;
17
+ }
18
+ }