uview-ui-wjf 1.0.0

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 (368) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/changelog.md +388 -0
  4. package/components/u--form/u--form.vue +92 -0
  5. package/components/u--image/u--image.vue +73 -0
  6. package/components/u--input/u--input.vue +115 -0
  7. package/components/u--text/u--text.vue +72 -0
  8. package/components/u--textarea/u--textarea.vue +85 -0
  9. package/components/u-action-sheet/props.js +54 -0
  10. package/components/u-action-sheet/u-action-sheet.vue +278 -0
  11. package/components/u-album/props.js +59 -0
  12. package/components/u-album/u-album.vue +259 -0
  13. package/components/u-alert/props.js +44 -0
  14. package/components/u-alert/u-alert.vue +243 -0
  15. package/components/u-avatar/props.js +78 -0
  16. package/components/u-avatar/u-avatar.vue +173 -0
  17. package/components/u-avatar-group/props.js +52 -0
  18. package/components/u-avatar-group/u-avatar-group.vue +103 -0
  19. package/components/u-back-top/props.js +54 -0
  20. package/components/u-back-top/u-back-top.vue +129 -0
  21. package/components/u-badge/props.js +72 -0
  22. package/components/u-badge/u-badge.vue +171 -0
  23. package/components/u-button/nvue.scss +46 -0
  24. package/components/u-button/props.js +161 -0
  25. package/components/u-button/u-button.vue +495 -0
  26. package/components/u-button/vue.scss +80 -0
  27. package/components/u-calendar/header.vue +99 -0
  28. package/components/u-calendar/month.vue +579 -0
  29. package/components/u-calendar/props.js +144 -0
  30. package/components/u-calendar/u-calendar.vue +384 -0
  31. package/components/u-calendar/util.js +85 -0
  32. package/components/u-car-keyboard/props.js +14 -0
  33. package/components/u-car-keyboard/u-car-keyboard.vue +311 -0
  34. package/components/u-cell/props.js +110 -0
  35. package/components/u-cell/u-cell.vue +229 -0
  36. package/components/u-cell-group/props.js +14 -0
  37. package/components/u-cell-group/u-cell-group.vue +61 -0
  38. package/components/u-checkbox/props.js +69 -0
  39. package/components/u-checkbox/u-checkbox.vue +344 -0
  40. package/components/u-checkbox-group/props.js +82 -0
  41. package/components/u-checkbox-group/u-checkbox-group.vue +103 -0
  42. package/components/u-circle-progress/props.js +8 -0
  43. package/components/u-circle-progress/u-circle-progress.vue +198 -0
  44. package/components/u-code/props.js +34 -0
  45. package/components/u-code/u-code.vue +129 -0
  46. package/components/u-code-input/props.js +79 -0
  47. package/components/u-code-input/u-code-input.vue +252 -0
  48. package/components/u-col/props.js +29 -0
  49. package/components/u-col/u-col.vue +162 -0
  50. package/components/u-collapse/props.js +19 -0
  51. package/components/u-collapse/u-collapse.vue +90 -0
  52. package/components/u-collapse-item/props.js +59 -0
  53. package/components/u-collapse-item/u-collapse-item.vue +225 -0
  54. package/components/u-column-notice/props.js +55 -0
  55. package/components/u-column-notice/u-column-notice.vue +160 -0
  56. package/components/u-count-down/props.js +24 -0
  57. package/components/u-count-down/u-count-down.vue +163 -0
  58. package/components/u-count-down/utils.js +62 -0
  59. package/components/u-count-to/props.js +59 -0
  60. package/components/u-count-to/u-count-to.vue +184 -0
  61. package/components/u-datetime-picker/props.js +120 -0
  62. package/components/u-datetime-picker/u-datetime-picker.vue +361 -0
  63. package/components/u-divider/props.js +44 -0
  64. package/components/u-divider/u-divider.vue +116 -0
  65. package/components/u-dropdown/props.js +65 -0
  66. package/components/u-dropdown/u-dropdown.vue +127 -0
  67. package/components/u-dropdown-item/props.js +36 -0
  68. package/components/u-dropdown-item/u-dropdown-item.vue +127 -0
  69. package/components/u-empty/props.js +59 -0
  70. package/components/u-empty/u-empty.vue +128 -0
  71. package/components/u-form/props.js +45 -0
  72. package/components/u-form/u-form.vue +214 -0
  73. package/components/u-form-item/props.js +48 -0
  74. package/components/u-form-item/u-form-item.vue +235 -0
  75. package/components/u-gap/props.js +24 -0
  76. package/components/u-gap/u-gap.vue +38 -0
  77. package/components/u-grid/props.js +19 -0
  78. package/components/u-grid/u-grid.vue +97 -0
  79. package/components/u-grid-item/props.js +14 -0
  80. package/components/u-grid-item/u-grid-item.vue +209 -0
  81. package/components/u-icon/icons.js +214 -0
  82. package/components/u-icon/props.js +89 -0
  83. package/components/u-icon/u-icon.vue +237 -0
  84. package/components/u-image/props.js +84 -0
  85. package/components/u-image/u-image.vue +232 -0
  86. package/components/u-index-anchor/props.js +29 -0
  87. package/components/u-index-anchor/u-index-anchor.vue +91 -0
  88. package/components/u-index-item/props.js +5 -0
  89. package/components/u-index-item/u-index-item.vue +87 -0
  90. package/components/u-index-list/props.js +29 -0
  91. package/components/u-index-list/u-index-list.vue +440 -0
  92. package/components/u-input/props.js +187 -0
  93. package/components/u-input/u-input.vue +369 -0
  94. package/components/u-keyboard/props.js +84 -0
  95. package/components/u-keyboard/u-keyboard.vue +164 -0
  96. package/components/u-line/props.js +33 -0
  97. package/components/u-line/u-line.vue +62 -0
  98. package/components/u-line-progress/props.js +28 -0
  99. package/components/u-line-progress/u-line-progress.vue +144 -0
  100. package/components/u-link/props.js +39 -0
  101. package/components/u-link/u-link.vue +83 -0
  102. package/components/u-list/props.js +76 -0
  103. package/components/u-list/u-list.vue +157 -0
  104. package/components/u-list-item/props.js +9 -0
  105. package/components/u-list-item/u-list-item.vue +116 -0
  106. package/components/u-loading-icon/props.js +59 -0
  107. package/components/u-loading-icon/u-loading-icon.vue +343 -0
  108. package/components/u-loading-page/props.js +49 -0
  109. package/components/u-loading-page/u-loading-page.vue +115 -0
  110. package/components/u-loadmore/props.js +94 -0
  111. package/components/u-loadmore/u-loadmore.vue +150 -0
  112. package/components/u-modal/props.js +89 -0
  113. package/components/u-modal/u-modal.vue +228 -0
  114. package/components/u-navbar/props.js +84 -0
  115. package/components/u-navbar/u-navbar.vue +186 -0
  116. package/components/u-no-network/props.js +19 -0
  117. package/components/u-no-network/u-no-network.vue +220 -0
  118. package/components/u-notice-bar/props.js +70 -0
  119. package/components/u-notice-bar/u-notice-bar.vue +101 -0
  120. package/components/u-notify/props.js +49 -0
  121. package/components/u-notify/u-notify.vue +211 -0
  122. package/components/u-number-box/props.js +109 -0
  123. package/components/u-number-box/u-number-box.vue +416 -0
  124. package/components/u-number-keyboard/props.js +19 -0
  125. package/components/u-number-keyboard/u-number-keyboard.vue +196 -0
  126. package/components/u-overlay/props.js +24 -0
  127. package/components/u-overlay/u-overlay.vue +68 -0
  128. package/components/u-parse/node/node.vue +499 -0
  129. package/components/u-parse/parser.js +1075 -0
  130. package/components/u-parse/props.js +45 -0
  131. package/components/u-parse/u-parse.vue +366 -0
  132. package/components/u-picker/props.js +79 -0
  133. package/components/u-picker/u-picker.vue +286 -0
  134. package/components/u-picker-column/props.js +5 -0
  135. package/components/u-picker-column/u-picker-column.vue +27 -0
  136. package/components/u-popup/props.js +79 -0
  137. package/components/u-popup/u-popup.vue +304 -0
  138. package/components/u-radio/props.js +64 -0
  139. package/components/u-radio/u-radio.vue +339 -0
  140. package/components/u-radio-group/props.js +85 -0
  141. package/components/u-radio-group/u-radio-group.vue +108 -0
  142. package/components/u-rate/props.js +69 -0
  143. package/components/u-rate/u-rate.vue +306 -0
  144. package/components/u-read-more/props.js +61 -0
  145. package/components/u-read-more/u-read-more.vue +157 -0
  146. package/components/u-row/props.js +19 -0
  147. package/components/u-row/u-row.vue +93 -0
  148. package/components/u-row-notice/props.js +39 -0
  149. package/components/u-row-notice/u-row-notice.vue +330 -0
  150. package/components/u-safe-bottom/props.js +5 -0
  151. package/components/u-safe-bottom/u-safe-bottom.vue +56 -0
  152. package/components/u-scroll-list/nvue.js +28 -0
  153. package/components/u-scroll-list/other.js +0 -0
  154. package/components/u-scroll-list/props.js +34 -0
  155. package/components/u-scroll-list/scrollWxs.wxs +50 -0
  156. package/components/u-scroll-list/u-scroll-list.vue +224 -0
  157. package/components/u-search/props.js +118 -0
  158. package/components/u-search/u-search.vue +303 -0
  159. package/components/u-skeleton/props.js +59 -0
  160. package/components/u-skeleton/u-skeleton.vue +244 -0
  161. package/components/u-slider/mpother.js +113 -0
  162. package/components/u-slider/mpwxs.js +42 -0
  163. package/components/u-slider/mpwxs.wxs +121 -0
  164. package/components/u-slider/nvue - /345/211/257/346/234/254.js" +180 -0
  165. package/components/u-slider/nvue.js +193 -0
  166. package/components/u-slider/props.js +54 -0
  167. package/components/u-slider/u-slider.vue +55 -0
  168. package/components/u-status-bar/props.js +8 -0
  169. package/components/u-status-bar/u-status-bar.vue +46 -0
  170. package/components/u-steps/props.js +39 -0
  171. package/components/u-steps/u-steps.vue +80 -0
  172. package/components/u-steps-item/props.js +24 -0
  173. package/components/u-steps-item/u-steps-item.vue +316 -0
  174. package/components/u-sticky/props.js +40 -0
  175. package/components/u-sticky/u-sticky.vue +212 -0
  176. package/components/u-subsection/props.js +49 -0
  177. package/components/u-subsection/u-subsection.vue +299 -0
  178. package/components/u-swipe-action/props.js +9 -0
  179. package/components/u-swipe-action/u-swipe-action.vue +67 -0
  180. package/components/u-swipe-action-item/index - backup.wxs +256 -0
  181. package/components/u-swipe-action-item/index.wxs +225 -0
  182. package/components/u-swipe-action-item/nvue - backup.js +270 -0
  183. package/components/u-swipe-action-item/nvue.js +174 -0
  184. package/components/u-swipe-action-item/props.js +41 -0
  185. package/components/u-swipe-action-item/u-swipe-action-item.vue +190 -0
  186. package/components/u-swipe-action-item/wxs.js +15 -0
  187. package/components/u-swiper/props.js +125 -0
  188. package/components/u-swiper/u-swiper.vue +255 -0
  189. package/components/u-swiper-indicator/props.js +29 -0
  190. package/components/u-swiper-indicator/u-swiper-indicator.vue +110 -0
  191. package/components/u-switch/props.js +54 -0
  192. package/components/u-switch/u-switch.vue +177 -0
  193. package/components/u-tabbar/props.js +44 -0
  194. package/components/u-tabbar/u-tabbar.vue +141 -0
  195. package/components/u-tabbar-item/props.js +35 -0
  196. package/components/u-tabbar-item/u-tabbar-item.vue +142 -0
  197. package/components/u-table/props.js +5 -0
  198. package/components/u-table/u-table.vue +29 -0
  199. package/components/u-tabs/props.js +64 -0
  200. package/components/u-tabs/u-tabs.vue +363 -0
  201. package/components/u-tabs-item/props.js +5 -0
  202. package/components/u-tabs-item/u-tabs-item.vue +29 -0
  203. package/components/u-tag/props.js +84 -0
  204. package/components/u-tag/u-tag.vue +358 -0
  205. package/components/u-td/props.js +5 -0
  206. package/components/u-td/u-td.vue +31 -0
  207. package/components/u-text/props.js +110 -0
  208. package/components/u-text/u-text.vue +223 -0
  209. package/components/u-text/value.js +85 -0
  210. package/components/u-textarea/props.js +119 -0
  211. package/components/u-textarea/u-textarea.vue +239 -0
  212. package/components/u-toast/u-toast.vue +291 -0
  213. package/components/u-toolbar/props.js +34 -0
  214. package/components/u-toolbar/u-toolbar.vue +102 -0
  215. package/components/u-tooltip/clipboard.min.js +58 -0
  216. package/components/u-tooltip/props.js +59 -0
  217. package/components/u-tooltip/u-tooltip.vue +366 -0
  218. package/components/u-tr/props.js +5 -0
  219. package/components/u-tr/u-tr.vue +31 -0
  220. package/components/u-transition/nvue.ani-map.js +68 -0
  221. package/components/u-transition/props.js +24 -0
  222. package/components/u-transition/transition.js +157 -0
  223. package/components/u-transition/u-transition.vue +92 -0
  224. package/components/u-transition/vue.ani-style.scss +113 -0
  225. package/components/u-upload/mixin.js +21 -0
  226. package/components/u-upload/props.js +124 -0
  227. package/components/u-upload/u-upload.vue +566 -0
  228. package/components/u-upload/utils.js +151 -0
  229. package/components/uview-ui/uview-ui.vue +15 -0
  230. package/index.js +79 -0
  231. package/index.scss +23 -0
  232. package/libs/config/color.js +17 -0
  233. package/libs/config/config.js +34 -0
  234. package/libs/config/props/actionSheet.js +25 -0
  235. package/libs/config/props/album.js +25 -0
  236. package/libs/config/props/alert.js +22 -0
  237. package/libs/config/props/avatar.js +28 -0
  238. package/libs/config/props/avatarGroup.js +23 -0
  239. package/libs/config/props/backtop.js +27 -0
  240. package/libs/config/props/badge.js +27 -0
  241. package/libs/config/props/button.js +42 -0
  242. package/libs/config/props/calendar.js +42 -0
  243. package/libs/config/props/carKeyboard.js +15 -0
  244. package/libs/config/props/cell.js +35 -0
  245. package/libs/config/props/cellGroup.js +17 -0
  246. package/libs/config/props/checkbox.js +27 -0
  247. package/libs/config/props/checkboxGroup.js +29 -0
  248. package/libs/config/props/circleProgress.js +15 -0
  249. package/libs/config/props/code.js +21 -0
  250. package/libs/config/props/codeInput.js +29 -0
  251. package/libs/config/props/col.js +19 -0
  252. package/libs/config/props/collapse.js +17 -0
  253. package/libs/config/props/collapseItem.js +25 -0
  254. package/libs/config/props/columnNotice.js +24 -0
  255. package/libs/config/props/countDown.js +18 -0
  256. package/libs/config/props/countTo.js +25 -0
  257. package/libs/config/props/datetimePicker.js +37 -0
  258. package/libs/config/props/divider.js +23 -0
  259. package/libs/config/props/empty.js +26 -0
  260. package/libs/config/props/form.js +22 -0
  261. package/libs/config/props/formItem.js +23 -0
  262. package/libs/config/props/gap.js +19 -0
  263. package/libs/config/props/grid.js +17 -0
  264. package/libs/config/props/gridItem.js +16 -0
  265. package/libs/config/props/icon.js +36 -0
  266. package/libs/config/props/image.js +30 -0
  267. package/libs/config/props/indexAnchor.js +19 -0
  268. package/libs/config/props/indexList.js +19 -0
  269. package/libs/config/props/input.js +48 -0
  270. package/libs/config/props/keyboard.js +30 -0
  271. package/libs/config/props/line.js +20 -0
  272. package/libs/config/props/lineProgress.js +19 -0
  273. package/libs/config/props/link.js +26 -0
  274. package/libs/config/props/list.js +28 -0
  275. package/libs/config/props/listItem.js +15 -0
  276. package/libs/config/props/loadingIcon.js +30 -0
  277. package/libs/config/props/loadingPage.js +23 -0
  278. package/libs/config/props/loadmore.js +32 -0
  279. package/libs/config/props/modal.js +31 -0
  280. package/libs/config/props/navbar.js +32 -0
  281. package/libs/config/props/noNetwork.js +18 -0
  282. package/libs/config/props/noticeBar.js +27 -0
  283. package/libs/config/props/notify.js +22 -0
  284. package/libs/config/props/numberBox.js +35 -0
  285. package/libs/config/props/numberKeyboard.js +17 -0
  286. package/libs/config/props/overlay.js +18 -0
  287. package/libs/config/props/parse.js +22 -0
  288. package/libs/config/props/picker.js +29 -0
  289. package/libs/config/props/popup.js +29 -0
  290. package/libs/config/props/radio.js +27 -0
  291. package/libs/config/props/radioGroup.js +30 -0
  292. package/libs/config/props/rate.js +26 -0
  293. package/libs/config/props/readMore.js +22 -0
  294. package/libs/config/props/row.js +17 -0
  295. package/libs/config/props/rowNotice.js +21 -0
  296. package/libs/config/props/scrollList.js +20 -0
  297. package/libs/config/props/search.js +37 -0
  298. package/libs/config/props/section.js +24 -0
  299. package/libs/config/props/skeleton.js +25 -0
  300. package/libs/config/props/slider.js +25 -0
  301. package/libs/config/props/statusBar.js +15 -0
  302. package/libs/config/props/steps.js +21 -0
  303. package/libs/config/props/stepsItem.js +18 -0
  304. package/libs/config/props/sticky.js +20 -0
  305. package/libs/config/props/subsection.js +23 -0
  306. package/libs/config/props/swipeAction.js +15 -0
  307. package/libs/config/props/swipeActionItem.js +21 -0
  308. package/libs/config/props/swiper.js +39 -0
  309. package/libs/config/props/swipterIndicator.js +19 -0
  310. package/libs/config/props/switch.js +24 -0
  311. package/libs/config/props/tabbar.js +22 -0
  312. package/libs/config/props/tabbarItem.js +20 -0
  313. package/libs/config/props/tabs.js +32 -0
  314. package/libs/config/props/tag.js +29 -0
  315. package/libs/config/props/text.js +38 -0
  316. package/libs/config/props/textarea.js +36 -0
  317. package/libs/config/props/toast.js +30 -0
  318. package/libs/config/props/toolbar.js +21 -0
  319. package/libs/config/props/tooltip.js +25 -0
  320. package/libs/config/props/transition.js +18 -0
  321. package/libs/config/props/upload.js +36 -0
  322. package/libs/config/props.js +190 -0
  323. package/libs/config/zIndex.js +20 -0
  324. package/libs/css/color.scss +155 -0
  325. package/libs/css/common.scss +97 -0
  326. package/libs/css/components.scss +15 -0
  327. package/libs/css/flex.scss +257 -0
  328. package/libs/css/h5.scss +0 -0
  329. package/libs/css/mixin.scss +8 -0
  330. package/libs/css/mp.scss +0 -0
  331. package/libs/css/nvue.scss +0 -0
  332. package/libs/css/vue.scss +27 -0
  333. package/libs/function/colorGradient.js +134 -0
  334. package/libs/function/debounce.js +29 -0
  335. package/libs/function/digit.js +167 -0
  336. package/libs/function/index.js +731 -0
  337. package/libs/function/platform.js +75 -0
  338. package/libs/function/test.js +288 -0
  339. package/libs/function/throttle.js +30 -0
  340. package/libs/luch-request/adapters/index.js +97 -0
  341. package/libs/luch-request/core/InterceptorManager.js +50 -0
  342. package/libs/luch-request/core/Request.js +198 -0
  343. package/libs/luch-request/core/buildFullPath.js +20 -0
  344. package/libs/luch-request/core/defaults.js +29 -0
  345. package/libs/luch-request/core/dispatchRequest.js +3 -0
  346. package/libs/luch-request/core/mergeConfig.js +103 -0
  347. package/libs/luch-request/core/settle.js +16 -0
  348. package/libs/luch-request/helpers/buildURL.js +69 -0
  349. package/libs/luch-request/helpers/combineURLs.js +14 -0
  350. package/libs/luch-request/helpers/isAbsoluteURL.js +14 -0
  351. package/libs/luch-request/index.d.ts +116 -0
  352. package/libs/luch-request/index.js +3 -0
  353. package/libs/luch-request/utils/clone.js +264 -0
  354. package/libs/luch-request/utils.js +131 -0
  355. package/libs/mixin/button.js +13 -0
  356. package/libs/mixin/mixin.js +160 -0
  357. package/libs/mixin/mpMixin.js +8 -0
  358. package/libs/mixin/mpShare.js +13 -0
  359. package/libs/mixin/openType.js +25 -0
  360. package/libs/mixin/style.js +228 -0
  361. package/libs/mixin/touch.js +59 -0
  362. package/libs/util/async-validator.js +1343 -0
  363. package/libs/util/calendar.js +546 -0
  364. package/libs/util/dayjs.js +308 -0
  365. package/libs/util/emitter.js +51 -0
  366. package/libs/util/route.js +124 -0
  367. package/package.json +83 -0
  368. package/theme.scss +44 -0
@@ -0,0 +1,110 @@
1
+ <template>
2
+ <view class="u-swiper-indicator">
3
+ <view
4
+ class="u-swiper-indicator__wrapper"
5
+ v-if="indicatorMode === 'line'"
6
+ :class="[`u-swiper-indicator__wrapper--${indicatorMode}`]"
7
+ :style="{
8
+ width: $u.addUnit(lineWidth * length),
9
+ backgroundColor: indicatorInactiveColor
10
+ }"
11
+ >
12
+ <view
13
+ class="u-swiper-indicator__wrapper--line__bar"
14
+ :style="[lineStyle]"
15
+ ></view>
16
+ </view>
17
+ <view
18
+ class="u-swiper-indicator__wrapper"
19
+ v-if="indicatorMode === 'dot'"
20
+ >
21
+ <view
22
+ class="u-swiper-indicator__wrapper__dot"
23
+ v-for="(item, index) in length"
24
+ :key="index"
25
+ :class="[index === current && 'u-swiper-indicator__wrapper__dot--active']"
26
+ :style="[dotStyle(index)]"
27
+ >
28
+
29
+ </view>
30
+ </view>
31
+ </view>
32
+ </template>
33
+
34
+ <script>
35
+ import props from './props.js';
36
+ /**
37
+ * SwiperIndicator 轮播图指示器
38
+ * @description 该组件一般用于导航轮播,广告展示等场景,可开箱即用,
39
+ * @tutorial https://www.uviewui.com/components/swiper.html
40
+ * @property {String | Number} length 轮播的长度(默认 0 )
41
+ * @property {String | Number} current 当前处于活动状态的轮播的索引(默认 0 )
42
+ * @property {String} indicatorActiveColor 指示器非激活颜色
43
+ * @property {String} indicatorInactiveColor 指示器的激活颜色
44
+ * @property {String} indicatorMode 指示器模式(默认 'line' )
45
+ * @example <u-swiper :list="list4" indicator keyName="url" :autoplay="false"></u-swiper>
46
+ */
47
+ export default {
48
+ name: 'u-swiper-indicator',
49
+ mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
50
+ data() {
51
+ return {
52
+ lineWidth: 22
53
+ }
54
+ },
55
+ computed: {
56
+ // 指示器为线型的样式
57
+ lineStyle() {
58
+ let style = {}
59
+ style.width = uni.$u.addUnit(this.lineWidth)
60
+ style.transform = `translateX(${ uni.$u.addUnit(this.current * this.lineWidth) })`
61
+ style.backgroundColor = this.indicatorActiveColor
62
+ return style
63
+ },
64
+ // 指示器为点型的样式
65
+ dotStyle() {
66
+ return index => {
67
+ let style = {}
68
+ style.backgroundColor = index === this.current ? this.indicatorActiveColor : this.indicatorInactiveColor
69
+ return style
70
+ }
71
+ }
72
+ },
73
+ }
74
+ </script>
75
+
76
+ <style lang="scss" scoped>
77
+ @import "../../libs/css/components.scss";
78
+
79
+ .u-swiper-indicator {
80
+
81
+ &__wrapper {
82
+ @include flex;
83
+
84
+ &--line {
85
+ border-radius: 100px;
86
+ height: 4px;
87
+
88
+ &__bar {
89
+ width: 22px;
90
+ height: 4px;
91
+ border-radius: 100px;
92
+ background-color: #FFFFFF;
93
+ transition: transform 0.3s;
94
+ }
95
+ }
96
+
97
+ &__dot {
98
+ width: 5px;
99
+ height: 5px;
100
+ border-radius: 100px;
101
+ margin: 0 4px;
102
+
103
+ &--active {
104
+ width: 12px;
105
+ }
106
+ }
107
+
108
+ }
109
+ }
110
+ </style>
@@ -0,0 +1,54 @@
1
+ export default {
2
+ props: {
3
+ // 是否为加载中状态
4
+ loading: {
5
+ type: Boolean,
6
+ default: uni.$u.props.switch.loading
7
+ },
8
+ // 是否为禁用装填
9
+ disabled: {
10
+ type: Boolean,
11
+ default: uni.$u.props.switch.disabled
12
+ },
13
+ // 开关尺寸,单位px
14
+ size: {
15
+ type: [String, Number],
16
+ default: uni.$u.props.switch.size
17
+ },
18
+ // 打开时的背景颜色
19
+ activeColor: {
20
+ type: String,
21
+ default: uni.$u.props.switch.activeColor
22
+ },
23
+ // 关闭时的背景颜色
24
+ inactiveColor: {
25
+ type: String,
26
+ default: uni.$u.props.switch.inactiveColor
27
+ },
28
+ // 通过v-model双向绑定的值
29
+ value: {
30
+ type: [Boolean, String, Number],
31
+ default: uni.$u.props.switch.value
32
+ },
33
+ // switch打开时的值
34
+ activeValue: {
35
+ type: [String, Number, Boolean],
36
+ default: uni.$u.props.switch.activeValue
37
+ },
38
+ // switch关闭时的值
39
+ inactiveValue: {
40
+ type: [String, Number, Boolean],
41
+ default: uni.$u.props.switch.inactiveValue
42
+ },
43
+ // 是否开启异步变更,开启后需要手动控制输入值
44
+ asyncChange: {
45
+ type: Boolean,
46
+ default: uni.$u.props.switch.asyncChange
47
+ },
48
+ // 圆点与外边框的距离
49
+ space: {
50
+ type: [String, Number],
51
+ default: uni.$u.props.switch.space
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,177 @@
1
+ <template>
2
+ <view
3
+ class="u-switch"
4
+ :class="[disabled && 'u-switch--disabled']"
5
+ :style="[switchStyle, $u.addStyle(customStyle)]"
6
+ @tap="clickHandler"
7
+ >
8
+ <view
9
+ class="u-switch__bg"
10
+ :style="[bgStyle]"
11
+ >
12
+ </view>
13
+ <view
14
+ class="u-switch__node"
15
+ :class="[value && 'u-switch__node--on']"
16
+ :style="[nodeStyle]"
17
+ ref="u-switch__node"
18
+ >
19
+ <u-loading-icon
20
+ :show="loading"
21
+ mode="circle"
22
+ timingFunction='linear'
23
+ :color="value ? activeColor : '#AAABAD'"
24
+ :size="size * 0.6"
25
+ />
26
+ </view>
27
+ </view>
28
+ </template>
29
+
30
+ <script>
31
+ import props from './props.js';
32
+ /**
33
+ * switch 开关选择器
34
+ * @description 选择开关一般用于只有两个选择,且只能选其一的场景。
35
+ * @tutorial https://www.uviewui.com/components/switch.html
36
+ * @property {Boolean} loading 是否处于加载中(默认 false )
37
+ * @property {Boolean} disabled 是否禁用(默认 false )
38
+ * @property {String | Number} size 开关尺寸,单位px (默认 25 )
39
+ * @property {String} activeColor 打开时的背景色 (默认 '#2979ff' )
40
+ * @property {String} inactiveColor 关闭时的背景色 (默认 '#ffffff' )
41
+ * @property {Boolean | String | Number} value 通过v-model双向绑定的值 (默认 false )
42
+ * @property {Boolean | String | Number} activeValue 打开选择器时通过change事件发出的值 (默认 true )
43
+ * @property {Boolean | String | Number} inactiveValue 关闭选择器时通过change事件发出的值 (默认 false )
44
+ * @property {Boolean} asyncChange 是否开启异步变更,开启后需要手动控制输入值 (默认 false )
45
+ * @property {String | Number} space 圆点与外边框的距离 (默认 0 )
46
+ * @property {Object} customStyle 定义需要用到的外部样式
47
+ *
48
+ * @event {Function} change 在switch打开或关闭时触发
49
+ * @example <u-switch v-model="checked" active-color="red" inactive-color="#eee"></u-switch>
50
+ */
51
+ export default {
52
+ name: "u-switch",
53
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
54
+ watch: {
55
+ value: {
56
+ immediate: true,
57
+ handler(n) {
58
+ if(n !== this.inactiveValue && n !== this.activeValue) {
59
+ uni.$u.error('v-model绑定的值必须为inactiveValue、activeValue二者之一')
60
+ }
61
+ }
62
+ }
63
+ },
64
+ data() {
65
+ return {
66
+ bgColor: '#ffffff'
67
+ }
68
+ },
69
+ computed: {
70
+ isActive(){
71
+ return this.value === this.activeValue;
72
+ },
73
+ switchStyle() {
74
+ let style = {}
75
+ // 这里需要加2,是为了腾出边框的距离,否则圆点node会和外边框紧贴在一起
76
+ style.width = uni.$u.addUnit(this.size * 2 + 2)
77
+ style.height = uni.$u.addUnit(Number(this.size) + 2)
78
+ // style.borderColor = this.value ? 'rgba(0, 0, 0, 0)' : 'rgba(0, 0, 0, 0.12)'
79
+ // 如果自定义了“非激活”演示,name边框颜色设置为透明(跟非激活颜色一致)
80
+ // 这里不能简单的设置为非激活的颜色,否则打开状态时,会有边框,所以需要透明
81
+ if(this.customInactiveColor) {
82
+ style.borderColor = 'rgba(0, 0, 0, 0)'
83
+ }
84
+ style.backgroundColor = this.isActive ? this.activeColor : this.inactiveColor
85
+ return style;
86
+ },
87
+ nodeStyle() {
88
+ let style = {}
89
+ // 如果自定义非激活颜色,将node圆点的尺寸减少两个像素,让其与外边框距离更大一点
90
+ style.width = uni.$u.addUnit(this.size - this.space)
91
+ style.height = uni.$u.addUnit(this.size - this.space)
92
+ const translateX = this.isActive ? uni.$u.addUnit(this.space) : uni.$u.addUnit(this.size);
93
+ style.transform = `translateX(-${translateX})`
94
+ return style
95
+ },
96
+ bgStyle() {
97
+ let style = {}
98
+ // 这里配置一个多余的元素在HTML中,是为了让switch切换时,有更良好的背景色扩充体验(见实际效果)
99
+ style.width = uni.$u.addUnit(Number(this.size) * 2 - this.size / 2)
100
+ style.height = uni.$u.addUnit(this.size)
101
+ style.backgroundColor = this.inactiveColor
102
+ // 打开时,让此元素收缩,否则反之
103
+ style.transform = `scale(${this.isActive ? 0 : 1})`
104
+ return style
105
+ },
106
+ customInactiveColor() {
107
+ // 之所以需要判断是否自定义了“非激活”颜色,是为了让node圆点离外边框更宽一点的距离
108
+ return this.inactiveColor !== '#fff' && this.inactiveColor !== '#ffffff'
109
+ }
110
+ },
111
+ methods: {
112
+ clickHandler() {
113
+ if (!this.disabled && !this.loading) {
114
+ const oldValue = this.isActive ? this.inactiveValue : this.activeValue
115
+ if(!this.asyncChange) {
116
+ this.$emit('input', oldValue)
117
+ }
118
+ // 放到下一个生命周期,因为双向绑定的value修改父组件状态需要时间,且是异步的
119
+ this.$nextTick(() => {
120
+ this.$emit('change', oldValue)
121
+ })
122
+ }
123
+ }
124
+ }
125
+ };
126
+ </script>
127
+
128
+ <style lang="scss" scoped>
129
+ @import "../../libs/css/components.scss";
130
+
131
+ .u-switch {
132
+ @include flex(row);
133
+ /* #ifndef APP-NVUE */
134
+ box-sizing: border-box;
135
+ /* #endif */
136
+ position: relative;
137
+ background-color: #fff;
138
+ border-width: 1px;
139
+ border-radius: 100px;
140
+ transition: background-color 0.4s;
141
+ border-color: rgba(0, 0, 0, 0.12);
142
+ border-style: solid;
143
+ justify-content: flex-end;
144
+ align-items: center;
145
+ // 由于weex为阿里逗着玩的KPI项目,导致bug奇多,这必须要写这一行,
146
+ // 否则在iOS上,点击页面任意地方,都会触发switch的点击事件
147
+ overflow: hidden;
148
+
149
+ &__node {
150
+ @include flex(row);
151
+ align-items: center;
152
+ justify-content: center;
153
+ border-radius: 100px;
154
+ background-color: #fff;
155
+ border-radius: 100px;
156
+ box-shadow: 1px 1px 1px 0 rgba(0, 0, 0, 0.25);
157
+ transition-property: transform;
158
+ transition-duration: 0.4s;
159
+ transition-timing-function: cubic-bezier(0.3, 1.05, 0.4, 1.05);
160
+ }
161
+
162
+ &__bg {
163
+ position: absolute;
164
+ border-radius: 100px;
165
+ background-color: #FFFFFF;
166
+ transition-property: transform;
167
+ transition-duration: 0.4s;
168
+ border-top-left-radius: 0;
169
+ border-bottom-left-radius: 0;
170
+ transition-timing-function: ease;
171
+ }
172
+
173
+ &--disabled {
174
+ opacity: 0.6;
175
+ }
176
+ }
177
+ </style>
@@ -0,0 +1,44 @@
1
+ export default {
2
+ props: {
3
+ // 当前匹配项的name
4
+ value: {
5
+ type: [String, Number, null],
6
+ default: uni.$u.props.tabbar.value
7
+ },
8
+ // 是否为iPhoneX留出底部安全距离
9
+ safeAreaInsetBottom: {
10
+ type: Boolean,
11
+ default: uni.$u.props.tabbar.safeAreaInsetBottom
12
+ },
13
+ // 是否显示上方边框
14
+ border: {
15
+ type: Boolean,
16
+ default: uni.$u.props.tabbar.border
17
+ },
18
+ // 元素层级z-index
19
+ zIndex: {
20
+ type: [String, Number],
21
+ default: uni.$u.props.tabbar.zIndex
22
+ },
23
+ // 选中标签的颜色
24
+ activeColor: {
25
+ type: String,
26
+ default: uni.$u.props.tabbar.activeColor
27
+ },
28
+ // 未选中标签的颜色
29
+ inactiveColor: {
30
+ type: String,
31
+ default: uni.$u.props.tabbar.inactiveColor
32
+ },
33
+ // 是否固定在底部
34
+ fixed: {
35
+ type: Boolean,
36
+ default: uni.$u.props.tabbar.fixed
37
+ },
38
+ // fixed定位固定在底部时,是否生成一个等高元素防止塌陷
39
+ placeholder: {
40
+ type: Boolean,
41
+ default: uni.$u.props.tabbar.placeholder
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,141 @@
1
+ <template>
2
+ <view class="u-tabbar">
3
+ <view
4
+ class="u-tabbar__content"
5
+ ref="u-tabbar__content"
6
+ @touchmove.stop.prevent="noop"
7
+ :class="[border && 'u-border-top', fixed && 'u-tabbar--fixed']"
8
+ :style="[tabbarStyle]"
9
+ >
10
+ <view class="u-tabbar__content__item-wrapper">
11
+ <slot />
12
+ </view>
13
+ <u-safe-bottom v-if="safeAreaInsetBottom"></u-safe-bottom>
14
+ </view>
15
+ <view
16
+ class="u-tabbar__placeholder"
17
+ v-if="placeholder"
18
+ :style="{
19
+ height: placeholderHeight + 'px',
20
+ }"
21
+ ></view>
22
+ </view>
23
+ </template>
24
+
25
+ <script>
26
+ import props from './props.js';
27
+ // #ifdef APP-NVUE
28
+ const dom = uni.requireNativePlugin('dom')
29
+ // #endif
30
+ /**
31
+ * Tabbar 底部导航栏
32
+ * @description 此组件提供了自定义tabbar的能力。
33
+ * @tutorial https://www.uviewui.com/components/tabbar.html
34
+ * @property {String | Number} value 当前匹配项的name
35
+ * @property {Boolean} safeAreaInsetBottom 是否为iPhoneX留出底部安全距离(默认 true )
36
+ * @property {Boolean} border 是否显示上方边框(默认 true )
37
+ * @property {String | Number} zIndex 元素层级z-index(默认 1 )
38
+ * @property {String} activeColor 选中标签的颜色(默认 '#1989fa' )
39
+ * @property {String} inactiveColor 未选中标签的颜色(默认 '#7d7e80' )
40
+ * @property {Boolean} fixed 是否固定在底部(默认 true )
41
+ * @property {Boolean} placeholder fixed定位固定在底部时,是否生成一个等高元素防止塌陷(默认 true )
42
+ * @property {Object} customStyle 定义需要用到的外部样式
43
+ *
44
+ * @example <u-tabbar :value="value2" :placeholder="false" @change="name => value2 = name" :fixed="false" :safeAreaInsetBottom="false"><u-tabbar-item text="首页" icon="home" dot ></u-tabbar-item></u-tabbar>
45
+ */
46
+ export default {
47
+ name: 'u-tabbar',
48
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
49
+ data() {
50
+ return {
51
+ placeholderHeight: 0
52
+ }
53
+ },
54
+ computed: {
55
+ tabbarStyle() {
56
+ const style = {
57
+ zIndex: this.zIndex
58
+ }
59
+ // 合并来自父组件的customStyle样式
60
+ return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
61
+ },
62
+ // 监听多个参数的变化,通过在computed执行对应的操作
63
+ updateChild() {
64
+ return [this.value, this.activeColor, this.inactiveColor]
65
+ },
66
+ updatePlaceholder() {
67
+ return [this.fixed, this.placeholder]
68
+ }
69
+ },
70
+ watch: {
71
+ updateChild() {
72
+ // 如果updateChildren中的元素发生了变化,则执行子元素初始化操作
73
+ this.updateChildren()
74
+ },
75
+ updatePlaceholder() {
76
+ // 如果fixed,placeholder等参数发生变化,重新计算占位元素的高度
77
+ this.setPlaceholderHeight()
78
+ }
79
+ },
80
+ created() {
81
+ this.children = []
82
+ },
83
+ mounted() {
84
+ this.setPlaceholderHeight()
85
+ },
86
+ methods: {
87
+ updateChildren() {
88
+ // 如果存在子元素,则执行子元素的updateFromParent进行更新数据
89
+ this.children.length && this.children.map(child => child.updateFromParent())
90
+ },
91
+ // 设置用于防止塌陷元素的高度
92
+ async setPlaceholderHeight() {
93
+ if (!this.fixed || !this.placeholder) return
94
+ // 延时一定时间
95
+ await uni.$u.sleep(20)
96
+ // #ifndef APP-NVUE
97
+ this.$uGetRect('.u-tabbar__content').then(({height = 50}) => {
98
+ // 修复IOS safearea bottom 未填充高度
99
+ this.placeholderHeight = height
100
+ })
101
+ // #endif
102
+
103
+ // #ifdef APP-NVUE
104
+ dom.getComponentRect(this.$refs['u-tabbar__content'], (res) => {
105
+ const {
106
+ size
107
+ } = res
108
+ this.placeholderHeight = size.height
109
+ })
110
+ // #endif
111
+ }
112
+ }
113
+ }
114
+ </script>
115
+
116
+ <style lang="scss" scoped>
117
+ @import "../../libs/css/components.scss";
118
+
119
+ .u-tabbar {
120
+ @include flex(column);
121
+ flex: 1;
122
+ justify-content: center;
123
+
124
+ &__content {
125
+ @include flex(column);
126
+ background-color: #fff;
127
+
128
+ &__item-wrapper {
129
+ height: 50px;
130
+ @include flex(row);
131
+ }
132
+ }
133
+
134
+ &--fixed {
135
+ position: fixed;
136
+ bottom: 0;
137
+ left: 0;
138
+ right: 0;
139
+ }
140
+ }
141
+ </style>
@@ -0,0 +1,35 @@
1
+ export default {
2
+ props: {
3
+ // item标签的名称,作为与u-tabbar的value参数匹配的标识符
4
+ name: {
5
+ type: [String, Number, null],
6
+ default: uni.$u.props.tabbarItem.name
7
+ },
8
+ // uView内置图标或者绝对路径的图片
9
+ icon: {
10
+ icon: String,
11
+ default: uni.$u.props.tabbarItem.icon
12
+ },
13
+ // 右上角的角标提示信息
14
+ badge: {
15
+ type: [String, Number, null],
16
+ default: uni.$u.props.tabbarItem.badge
17
+ },
18
+ // 是否显示圆点,将会覆盖badge参数
19
+ dot: {
20
+ type: Boolean,
21
+ default: uni.$u.props.tabbarItem.dot
22
+ },
23
+ // 描述文本
24
+ text: {
25
+ type: String,
26
+ default: uni.$u.props.tabbarItem.text
27
+ },
28
+ // 控制徽标的位置,对象或者字符串形式,可以设置top和right属性
29
+ badgeStyle: {
30
+ type: [Object, String],
31
+ default: uni.$u.props.tabbarItem.badgeStyle
32
+ }
33
+
34
+ }
35
+ }
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <view
3
+ class="u-tabbar-item"
4
+ :style="[$u.addStyle(customStyle)]"
5
+ @tap="clickHandler"
6
+ >
7
+ <view class="u-tabbar-item__icon">
8
+ <u-icon
9
+ v-if="icon"
10
+ :name="icon"
11
+ :color="isActive? parentData.activeColor : parentData.inactiveColor"
12
+ :size="20"
13
+ ></u-icon>
14
+ <template v-else>
15
+ <slot
16
+ v-if="isActive"
17
+ name="active-icon"
18
+ />
19
+ <slot
20
+ v-else
21
+ name="inactive-icon"
22
+ />
23
+ </template>
24
+ <u-badge
25
+ absolute
26
+ :offset="[0, dot ? '34rpx' : badge > 9 ? '14rpx' : '20rpx']"
27
+ :customStyle="badgeStyle"
28
+ :isDot="dot"
29
+ :value="badge || (dot ? 1 : null)"
30
+ :show="dot || badge > 0"
31
+ ></u-badge>
32
+ </view>
33
+
34
+ <slot name="text">
35
+ <text
36
+ class="u-tabbar-item__text"
37
+ :style="{
38
+ color: isActive? parentData.activeColor : parentData.inactiveColor
39
+ }"
40
+ >{{ text }}</text>
41
+ </slot>
42
+ </view>
43
+ </template>
44
+
45
+ <script>
46
+ import props from './props.js';
47
+ /**
48
+ * TabbarItem 底部导航栏子组件
49
+ * @description 此组件提供了自定义tabbar的能力。
50
+ * @tutorial https://www.uviewui.com/components/tabbar.html
51
+ * @property {String | Number} name item标签的名称,作为与u-tabbar的value参数匹配的标识符
52
+ * @property {String} icon uView内置图标或者绝对路径的图片
53
+ * @property {String | Number} badge 右上角的角标提示信息
54
+ * @property {Boolean} dot 是否显示圆点,将会覆盖badge参数(默认 false )
55
+ * @property {String} text 描述文本
56
+ * @property {Object | String} badgeStyle 控制徽标的位置,对象或者字符串形式,可以设置top和right属性(默认 'top: 6px;right:2px;' )
57
+ * @property {Object} customStyle 定义需要用到的外部样式
58
+ *
59
+ * @example <u-tabbar :value="value2" :placeholder="false" @change="name => value2 = name" :fixed="false" :safeAreaInsetBottom="false"><u-tabbar-item text="首页" icon="home" dot ></u-tabbar-item></u-tabbar>
60
+ */
61
+ export default {
62
+ name: 'u-tabbar-item',
63
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
64
+ data() {
65
+ return {
66
+ isActive: false, // 是否处于激活状态
67
+ parentData: {
68
+ value: null,
69
+ activeColor: '',
70
+ inactiveColor: ''
71
+ }
72
+ }
73
+ },
74
+ created() {
75
+ this.init()
76
+ },
77
+ methods: {
78
+ init() {
79
+ // 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
80
+ this.updateParentData()
81
+ if (!this.parent) {
82
+ uni.$u.error('u-tabbar-item必须搭配u-tabbar组件使用')
83
+ }
84
+ // 本子组件在u-tabbar的children数组中的索引
85
+ const index = this.parent.children.indexOf(this)
86
+ // 判断本组件的name(如果没有定义name,就用index索引)是否等于父组件的value参数
87
+ this.isActive = (this.name || index) === this.parentData.value
88
+ },
89
+ updateParentData() {
90
+ // 此方法在mixin中
91
+ this.getParentData('u-tabbar')
92
+ },
93
+ // 此方法将会被父组件u-tabbar调用
94
+ updateFromParent() {
95
+ // 重新初始化
96
+ this.init()
97
+ },
98
+ clickHandler() {
99
+ this.$nextTick(() => {
100
+ const index = this.parent.children.indexOf(this)
101
+ const name = this.name || index
102
+ // 点击的item为非激活的item才发出change事件
103
+ if (name !== this.parent.value) {
104
+ this.parent.$emit('change', name)
105
+ }
106
+ this.$emit('click', name)
107
+ })
108
+ }
109
+ },
110
+ }
111
+ </script>
112
+
113
+ <style lang="scss" scoped>
114
+ @import "../../libs/css/components.scss";
115
+
116
+ .u-tabbar-item {
117
+ @include flex(column);
118
+ align-items: center;
119
+ justify-content: center;
120
+ flex: 1;
121
+
122
+ &__icon {
123
+ @include flex;
124
+ position: relative;
125
+ width: 150rpx;
126
+ justify-content: center;
127
+ }
128
+
129
+ &__text {
130
+ margin-top: 2px;
131
+ font-size: 12px;
132
+ color: $u-content-color;
133
+ }
134
+ }
135
+
136
+ /* #ifdef MP */
137
+ // 由于小程序都使用shadow DOM形式实现,需要给影子宿主设置flex: 1才能让其撑开
138
+ :host {
139
+ flex: 1
140
+ }
141
+ /* #endif */
142
+ </style>