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,64 @@
1
+ export default {
2
+ props: {
3
+ // radio的名称
4
+ name: {
5
+ type: [String, Number, Boolean],
6
+ default: uni.$u.props.radio.name
7
+ },
8
+ // 形状,square为方形,circle为圆型
9
+ shape: {
10
+ type: String,
11
+ default: uni.$u.props.radio.shape
12
+ },
13
+ // 是否禁用
14
+ disabled: {
15
+ type: [String, Boolean],
16
+ default: uni.$u.props.radio.disabled
17
+ },
18
+ // 是否禁止点击提示语选中单选框
19
+ labelDisabled: {
20
+ type: [String, Boolean],
21
+ default: uni.$u.props.radio.labelDisabled
22
+ },
23
+ // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
24
+ activeColor: {
25
+ type: String,
26
+ default: uni.$u.props.radio.activeColor
27
+ },
28
+ // 未选中的颜色
29
+ inactiveColor: {
30
+ type: String,
31
+ default: uni.$u.props.radio.inactiveColor
32
+ },
33
+ // 图标的大小,单位px
34
+ iconSize: {
35
+ type: [String, Number],
36
+ default: uni.$u.props.radio.iconSize
37
+ },
38
+ // label的字体大小,px单位
39
+ labelSize: {
40
+ type: [String, Number],
41
+ default: uni.$u.props.radio.labelSize
42
+ },
43
+ // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
44
+ label: {
45
+ type: [String, Number],
46
+ default: uni.$u.props.radio.label
47
+ },
48
+ // 整体的大小
49
+ size: {
50
+ type: [String, Number],
51
+ default: uni.$u.props.radio.size
52
+ },
53
+ // 图标颜色
54
+ iconColor: {
55
+ type: String,
56
+ default: uni.$u.props.radio.color
57
+ },
58
+ // label的颜色
59
+ labelColor: {
60
+ type: String,
61
+ default: uni.$u.props.radio.labelColor
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,339 @@
1
+ <template>
2
+ <view
3
+ class="u-radio"
4
+ @tap.stop="wrapperClickHandler"
5
+ :style="[radioStyle]"
6
+ :class="[`u-radio-label--${parentData.iconPlacement}`, parentData.borderBottom && parentData.placement === 'column' && 'u-border-bottom']"
7
+ >
8
+ <view
9
+ class="u-radio__icon-wrap"
10
+ @tap.stop="iconClickHandler"
11
+ :class="iconClasses"
12
+ :style="[iconWrapStyle]"
13
+ >
14
+ <slot name="icon">
15
+ <u-icon
16
+ class="u-radio__icon-wrap__icon"
17
+ name="checkbox-mark"
18
+ :size="elIconSize"
19
+ :color="elIconColor"
20
+ />
21
+ </slot>
22
+ </view>
23
+ <slot>
24
+ <text
25
+ class="u-radio__text"
26
+ @tap.stop="labelClickHandler"
27
+ :style="{
28
+ color: elDisabled ? elInactiveColor : elLabelColor,
29
+ fontSize: elLabelSize,
30
+ lineHeight: elLabelSize
31
+ }"
32
+ >{{label}}</text>
33
+ </slot>
34
+ </view>
35
+ </template>
36
+
37
+ <script>
38
+ import props from './props.js';
39
+ /**
40
+ * radio 单选框
41
+ * @description 单选框用于有一个选择,用户只能选择其中一个的场景。搭配u-radio-group使用
42
+ * @tutorial https://www.uviewui.com/components/radio.html
43
+ * @property {String | Number} name radio的名称
44
+ * @property {String} shape 形状,square为方形,circle为圆型
45
+ * @property {Boolean} disabled 是否禁用
46
+ * @property {String | Boolean} labelDisabled 是否禁止点击提示语选中单选框
47
+ * @property {String} activeColor 选中时的颜色,如设置parent的active-color将失效
48
+ * @property {String} inactiveColor 未选中的颜色
49
+ * @property {String | Number} iconSize 图标大小,单位px
50
+ * @property {String | Number} labelSize label字体大小,单位px
51
+ * @property {String | Number} label label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式
52
+ * @property {String | Number} size 整体的大小
53
+ * @property {String} iconColor 图标颜色
54
+ * @property {String} labelColor label的颜色
55
+ * @property {Object} customStyle 组件的样式,对象形式
56
+ *
57
+ * @event {Function} change 某个radio状态发生变化时触发(选中状态)
58
+ * @example <u-radio :labelDisabled="false">门掩黄昏,无计留春住</u-radio>
59
+ */
60
+ export default {
61
+ name: "u-radio",
62
+
63
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
64
+ data() {
65
+ return {
66
+ checked: false,
67
+ // 当你看到这段代码的时候,
68
+ // 父组件的默认值,因为头条小程序不支持在computed中使用this.parent.shape的形式
69
+ // 故只能使用如此方法
70
+ parentData: {
71
+ iconSize: 12,
72
+ labelDisabled: null,
73
+ disabled: null,
74
+ shape: null,
75
+ activeColor: null,
76
+ inactiveColor: null,
77
+ size: 18,
78
+ value: null,
79
+ iconColor: null,
80
+ placement: 'row',
81
+ borderBottom: false,
82
+ iconPlacement: 'left'
83
+ }
84
+ }
85
+ },
86
+ computed: {
87
+ // 是否禁用,如果父组件u-raios-group禁用的话,将会忽略子组件的配置
88
+ elDisabled() {
89
+ return this.disabled !== '' ? this.disabled : this.parentData.disabled !== null ? this.parentData.disabled : false;
90
+ },
91
+ // 是否禁用label点击
92
+ elLabelDisabled() {
93
+ return this.labelDisabled !== '' ? this.labelDisabled : this.parentData.labelDisabled !== null ? this.parentData.labelDisabled :
94
+ false;
95
+ },
96
+ // 组件尺寸,对应size的值,默认值为21px
97
+ elSize() {
98
+ return this.size ? this.size : (this.parentData.size ? this.parentData.size : 21);
99
+ },
100
+ // 组件的勾选图标的尺寸,默认12px
101
+ elIconSize() {
102
+ return this.iconSize ? this.iconSize : (this.parentData.iconSize ? this.parentData.iconSize : 12);
103
+ },
104
+ // 组件选中激活时的颜色
105
+ elActiveColor() {
106
+ return this.activeColor ? this.activeColor : (this.parentData.activeColor ? this.parentData.activeColor : '#2979ff');
107
+ },
108
+ // 组件选未中激活时的颜色
109
+ elInactiveColor() {
110
+ return this.inactiveColor ? this.inactiveColor : (this.parentData.inactiveColor ? this.parentData.inactiveColor :
111
+ '#c8c9cc');
112
+ },
113
+ // label的颜色
114
+ elLabelColor() {
115
+ return this.labelColor ? this.labelColor : (this.parentData.labelColor ? this.parentData.labelColor : '#606266')
116
+ },
117
+ // 组件的形状
118
+ elShape() {
119
+ return this.shape ? this.shape : (this.parentData.shape ? this.parentData.shape : 'circle');
120
+ },
121
+ // label大小
122
+ elLabelSize() {
123
+ return uni.$u.addUnit(this.labelSize ? this.labelSize : (this.parentData.labelSize ? this.parentData.labelSize :
124
+ '15'))
125
+ },
126
+ elIconColor() {
127
+ const iconColor = this.iconColor ? this.iconColor : (this.parentData.iconColor ? this.parentData.iconColor :
128
+ '#ffffff');
129
+ // 图标的颜色
130
+ if (this.elDisabled) {
131
+ // disabled状态下,已勾选的radio图标改为elInactiveColor
132
+ return this.checked ? this.elInactiveColor : 'transparent'
133
+ } else {
134
+ return this.checked ? iconColor : 'transparent'
135
+ }
136
+ },
137
+ iconClasses() {
138
+ let classes = []
139
+ // 组件的形状
140
+ classes.push('u-radio__icon-wrap--' + this.elShape)
141
+ if (this.elDisabled) {
142
+ classes.push('u-radio__icon-wrap--disabled')
143
+ }
144
+ if (this.checked && this.elDisabled) {
145
+ classes.push('u-radio__icon-wrap--disabled--checked')
146
+ }
147
+ // 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效
148
+ // #ifdef MP-ALIPAY || MP-TOUTIAO
149
+ classes = classes.join(' ')
150
+ // #endif
151
+ return classes
152
+ },
153
+ iconWrapStyle() {
154
+ // radio的整体样式
155
+ const style = {}
156
+ style.backgroundColor = this.checked && !this.elDisabled ? this.elActiveColor : '#ffffff'
157
+ style.borderColor = this.checked && !this.elDisabled ? this.elActiveColor : this.elInactiveColor
158
+ style.width = uni.$u.addUnit(this.elSize)
159
+ style.height = uni.$u.addUnit(this.elSize)
160
+ // 如果是图标在右边的话,移除它的右边距
161
+ if (this.parentData.iconPlacement === 'right') {
162
+ style.marginRight = 0
163
+ }
164
+ return style
165
+ },
166
+ radioStyle() {
167
+ const style = {}
168
+ if(this.parentData.borderBottom && this.parentData.placement === 'row') {
169
+ uni.$u.error('检测到您将borderBottom设置为true,需要同时将u-radio-group的placement设置为column才有效')
170
+ }
171
+ // 当父组件设置了显示下边框并且排列形式为纵向时,给内容和边框之间加上一定间隔
172
+ if(this.parentData.borderBottom && this.parentData.placement === 'column') {
173
+ // ios像素密度高,需要多一点的距离
174
+ style.paddingBottom = uni.$u.os() === 'ios' ? '12px' : '8px'
175
+ }
176
+ return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
177
+ }
178
+ },
179
+ mounted() {
180
+ this.init()
181
+ },
182
+ methods: {
183
+ init() {
184
+ // 支付宝小程序不支持provide/inject,所以使用这个方法获取整个父组件,在created定义,避免循环引用
185
+ this.updateParentData()
186
+ if (!this.parent) {
187
+ uni.$u.error('u-radio必须搭配u-radio-group组件使用')
188
+ }
189
+ // 设置初始化时,是否默认选中的状态
190
+ this.checked = this.name === this.parentData.value
191
+ },
192
+ updateParentData() {
193
+ this.getParentData('u-radio-group')
194
+ },
195
+ // 点击图标
196
+ iconClickHandler(e) {
197
+ this.preventEvent(e)
198
+ // 如果整体被禁用,不允许被点击
199
+ if (!this.elDisabled) {
200
+ this.setRadioCheckedStatus()
201
+ }
202
+ },
203
+ // 横向两端排列时,点击组件即可触发选中事件
204
+ wrapperClickHandler(e) {
205
+ this.parentData.iconPlacement === 'right' && this.iconClickHandler(e)
206
+ },
207
+ // 点击label
208
+ labelClickHandler(e) {
209
+ this.preventEvent(e)
210
+ // 如果按钮整体被禁用或者label被禁用,则不允许点击文字修改状态
211
+ if (!this.elLabelDisabled && !this.elDisabled) {
212
+ this.setRadioCheckedStatus()
213
+ }
214
+ },
215
+ emitEvent() {
216
+ // u-radio的checked不为true时(意味着未选中),才发出事件,避免多次点击触发事件
217
+ if (!this.checked) {
218
+ this.$emit('change', this.name)
219
+ // 尝试调用u-form的验证方法,进行一定延迟,否则微信小程序更新可能会不及时
220
+ this.$nextTick(() => {
221
+ uni.$u.formValidate(this, 'change')
222
+ })
223
+ }
224
+ },
225
+ // 改变组件选中状态
226
+ // 这里的改变的依据是,更改本组件的checked值为true,同时通过父组件遍历所有u-radio实例
227
+ // 将本组件外的其他u-radio的checked都设置为false(都被取消选中状态),因而只剩下一个为选中状态
228
+ setRadioCheckedStatus() {
229
+ this.emitEvent()
230
+ // 将本组件标记为选中状态
231
+ this.checked = true
232
+ typeof this.parent.unCheckedOther === 'function' && this.parent.unCheckedOther(this)
233
+ }
234
+ }
235
+ }
236
+ </script>
237
+
238
+ <style lang="scss" scoped>
239
+ @import "../../libs/css/components.scss";
240
+ $u-radio-wrap-margin-right:6px !default;
241
+ $u-radio-wrap-font-size:20px !default;
242
+ $u-radio-wrap-border-width:1px !default;
243
+ $u-radio-wrap-border-color: #c8c9cc !default;
244
+ $u-radio-line-height:0 !default;
245
+ $u-radio-circle-border-radius:100% !default;
246
+ $u-radio-square-border-radius:3px !default;
247
+ $u-radio-checked-color:#fff !default;
248
+ $u-radio-checked-background-color:red !default;
249
+ $u-radio-checked-border-color: #2979ff !default;
250
+ $u-radio-disabled-background-color:#ebedf0 !default;
251
+ $u-radio-disabled--checked-color:#c8c9cc !default;
252
+ $u-radio-label-margin-left: 5px !default;
253
+ $u-radio-label-margin-right:12px !default;
254
+ $u-radio-label-color:$u-content-color !default;
255
+ $u-radio-label-font-size:15px !default;
256
+ $u-radio-label-disabled-color:#c8c9cc !default;
257
+
258
+ .u-radio {
259
+ /* #ifndef APP-NVUE */
260
+ @include flex(row);
261
+ /* #endif */
262
+ overflow: hidden;
263
+ flex-direction: row;
264
+ align-items: center;
265
+
266
+ &-label--left {
267
+ flex-direction: row
268
+ }
269
+
270
+ &-label--right {
271
+ flex-direction: row-reverse;
272
+ justify-content: space-between
273
+ }
274
+
275
+ &__icon-wrap {
276
+ /* #ifndef APP-NVUE */
277
+ box-sizing: border-box;
278
+ // nvue下,border-color过渡有问题
279
+ transition-property: border-color, background-color, color;
280
+ transition-duration: 0.2s;
281
+ /* #endif */
282
+ color: $u-content-color;
283
+ @include flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ color: transparent;
287
+ text-align: center;
288
+ margin-right: $u-radio-wrap-margin-right;
289
+ font-size: $u-radio-wrap-font-size;
290
+ border-width: $u-radio-wrap-border-width;
291
+ border-color: $u-radio-wrap-border-color;
292
+ border-style: solid;
293
+
294
+ /* #ifdef MP-TOUTIAO */
295
+ // 头条小程序兼容性问题,需要设置行高为0,否则图标偏下
296
+ &__icon {
297
+ line-height: $u-radio-line-height;
298
+ }
299
+
300
+ /* #endif */
301
+
302
+ &--circle {
303
+ border-radius: $u-radio-circle-border-radius;
304
+ }
305
+
306
+ &--square {
307
+ border-radius: $u-radio-square-border-radius;
308
+ }
309
+
310
+ &--checked {
311
+ color: $u-radio-checked-color;
312
+ background-color: $u-radio-checked-background-color;
313
+ border-color: $u-radio-checked-border-color;
314
+ }
315
+
316
+ &--disabled {
317
+ background-color: $u-radio-disabled-background-color !important;
318
+ }
319
+
320
+ &--disabled--checked {
321
+ color: $u-radio-disabled--checked-color !important;
322
+ }
323
+ }
324
+
325
+ &__label {
326
+ /* #ifndef APP-NVUE */
327
+ word-wrap: break-word;
328
+ /* #endif */
329
+ margin-left: $u-radio-label-margin-left;
330
+ margin-right: $u-radio-label-margin-right;
331
+ color: $u-radio-label-color;
332
+ font-size: $u-radio-label-font-size;
333
+
334
+ &--disabled {
335
+ color: $u-radio-label-disabled-color;
336
+ }
337
+ }
338
+ }
339
+ </style>
@@ -0,0 +1,85 @@
1
+ export default {
2
+ props: {
3
+ // 绑定的值
4
+ value: {
5
+ type: [String, Number, Boolean],
6
+ default: uni.$u.props.radioGroup.value
7
+ },
8
+
9
+ // 是否禁用全部radio
10
+ disabled: {
11
+ type: Boolean,
12
+ default: uni.$u.props.radioGroup.disabled
13
+ },
14
+ // 形状,circle-圆形,square-方形
15
+ shape: {
16
+ type: String,
17
+ default: uni.$u.props.radioGroup.shape
18
+ },
19
+ // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值
20
+ activeColor: {
21
+ type: String,
22
+ default: uni.$u.props.radioGroup.activeColor
23
+ },
24
+ // 未选中的颜色
25
+ inactiveColor: {
26
+ type: String,
27
+ default: uni.$u.props.radioGroup.inactiveColor
28
+ },
29
+ // 标识符
30
+ name: {
31
+ type: String,
32
+ default: uni.$u.props.radioGroup.name
33
+ },
34
+ // 整个组件的尺寸,默认px
35
+ size: {
36
+ type: [String, Number],
37
+ default: uni.$u.props.radioGroup.size
38
+ },
39
+ // 布局方式,row-横向,column-纵向
40
+ placement: {
41
+ type: String,
42
+ default: uni.$u.props.radioGroup.placement
43
+ },
44
+ // label的文本
45
+ label: {
46
+ type: [String],
47
+ default: uni.$u.props.radioGroup.label
48
+ },
49
+ // label的颜色 (默认 '#303133' )
50
+ labelColor: {
51
+ type: [String],
52
+ default: uni.$u.props.radioGroup.labelColor
53
+ },
54
+ // label的字体大小,px单位
55
+ labelSize: {
56
+ type: [String, Number],
57
+ default: uni.$u.props.radioGroup.labelSize
58
+ },
59
+ // 是否禁止点击文本操作checkbox(默认 false )
60
+ labelDisabled: {
61
+ type: Boolean,
62
+ default: uni.$u.props.radioGroup.labelDisabled
63
+ },
64
+ // 图标颜色
65
+ iconColor: {
66
+ type: String,
67
+ default: uni.$u.props.radioGroup.iconColor
68
+ },
69
+ // 图标的大小,单位px
70
+ iconSize: {
71
+ type: [String, Number],
72
+ default: uni.$u.props.radioGroup.iconSize
73
+ },
74
+ // 竖向配列时,是否显示下划线
75
+ borderBottom: {
76
+ type: Boolean,
77
+ default: uni.$u.props.radioGroup.borderBottom
78
+ },
79
+ // 图标与文字的对齐方式
80
+ iconPlacement: {
81
+ type: String,
82
+ default: uni.$u.props.radio.iconPlacement
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <view
3
+ class="u-radio-group"
4
+ :class="bemClass"
5
+ >
6
+ <slot></slot>
7
+ </view>
8
+ </template>
9
+
10
+ <script>
11
+ import props from './props.js';
12
+
13
+ /**
14
+ * radioRroup 单选框父组件
15
+ * @description 单选框用于有一个选择,用户只能选择其中一个的场景。搭配u-radio使用
16
+ * @tutorial https://www.uviewui.com/components/radio.html
17
+ * @property {String | Number | Boolean} value 绑定的值
18
+ * @property {Boolean} disabled 是否禁用所有radio(默认 false )
19
+ * @property {String} shape 外观形状,shape-方形,circle-圆形(默认 circle )
20
+ * @property {String} activeColor 选中时的颜色,应用到所有子Radio组件(默认 '#2979ff' )
21
+ * @property {String} inactiveColor 未选中的颜色 (默认 '#c8c9cc' )
22
+ * @property {String} name 标识符
23
+ * @property {String | Number} size 组件整体的大小,单位px(默认 18 )
24
+ * @property {String} placement 布局方式,row-横向,column-纵向 (默认 'row' )
25
+ * @property {String} label 文本
26
+ * @property {String} labelColor label的颜色 (默认 '#303133' )
27
+ * @property {String | Number} labelSize label的字体大小,px单位 (默认 14 )
28
+ * @property {Boolean} labelDisabled 是否禁止点击文本操作checkbox(默认 false )
29
+ * @property {String} iconColor 图标颜色 (默认 '#ffffff' )
30
+ * @property {String | Number} iconSize 图标的大小,单位px (默认 12 )
31
+ * @property {Boolean} borderBottom placement为row时,是否显示下边框 (默认 false )
32
+ * @property {String} iconPlacement 图标与文字的对齐方式 (默认 'left' )
33
+ * @property {Object} customStyle 组件的样式,对象形式
34
+ * @event {Function} change 任一个radio状态发生变化时触发
35
+ * @example <u-radio-group v-model="value"></u-radio-group>
36
+ */
37
+ export default {
38
+ name: 'u-radio-group',
39
+ mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
40
+ computed: {
41
+ // 这里computed的变量,都是子组件u-radio需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化
42
+ // 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-radio-group)
43
+ // 拉取父组件新的变化后的参数
44
+ parentData() {
45
+ return [this.value, this.disabled, this.inactiveColor, this.activeColor, this.size, this.labelDisabled, this.shape,
46
+ this.iconSize, this.borderBottom, this.placement
47
+ ]
48
+ },
49
+ bemClass() {
50
+ // this.bem为一个computed变量,在mixin中
51
+ return this.bem('radio-group', ['placement'])
52
+ },
53
+ },
54
+ watch: {
55
+ // 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
56
+ parentData() {
57
+ if (this.children.length) {
58
+ this.children.map(child => {
59
+ // 判断子组件(u-radio)如果有init方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
60
+ typeof(child.init) === 'function' && child.init()
61
+ })
62
+ }
63
+ },
64
+ },
65
+ data() {
66
+ return {
67
+
68
+ }
69
+ },
70
+ created() {
71
+ this.children = []
72
+ },
73
+ methods: {
74
+ // 将其他的radio设置为未选中的状态
75
+ unCheckedOther(childInstance) {
76
+ this.children.map(child => {
77
+ // 所有子radio中,被操作组件实例的checked的值无需修改
78
+ if (childInstance !== child) {
79
+ child.checked = false
80
+ }
81
+ })
82
+ const {
83
+ name
84
+ } = childInstance
85
+ // 通过emit事件,设置父组件通过v-model双向绑定的值
86
+ this.$emit('input', name)
87
+ // 发出事件
88
+ this.$emit('change', name)
89
+ },
90
+ }
91
+ }
92
+ </script>
93
+
94
+ <style lang="scss" scoped>
95
+ @import "../../libs/css/components.scss";
96
+
97
+ .u-radio-group {
98
+ flex: 1;
99
+
100
+ &--row {
101
+ @include flex;
102
+ }
103
+
104
+ &--column {
105
+ @include flex(column);
106
+ }
107
+ }
108
+ </style>
@@ -0,0 +1,69 @@
1
+ export default {
2
+ props: {
3
+ // 用于v-model双向绑定选中的星星数量
4
+ value: {
5
+ type: [String, Number],
6
+ default: uni.$u.props.rate.value
7
+ },
8
+ // 要显示的星星数量
9
+ count: {
10
+ type: [String, Number],
11
+ default: uni.$u.props.rate.count
12
+ },
13
+ // 是否不可选中
14
+ disabled: {
15
+ type: Boolean,
16
+ default: uni.$u.props.rate.disabled
17
+ },
18
+ // 是否只读
19
+ readonly: {
20
+ type: Boolean,
21
+ default: uni.$u.props.rate.readonly
22
+ },
23
+ // 星星的大小,单位px
24
+ size: {
25
+ type: [String, Number],
26
+ default: uni.$u.props.rate.size
27
+ },
28
+ // 未选中时的颜色
29
+ inactiveColor: {
30
+ type: String,
31
+ default: uni.$u.props.rate.inactiveColor
32
+ },
33
+ // 选中的颜色
34
+ activeColor: {
35
+ type: String,
36
+ default: uni.$u.props.rate.activeColor
37
+ },
38
+ // 星星之间的间距,单位px
39
+ gutter: {
40
+ type: [String, Number],
41
+ default: uni.$u.props.rate.gutter
42
+ },
43
+ // 最少能选择的星星个数
44
+ minCount: {
45
+ type: [String, Number],
46
+ default: uni.$u.props.rate.minCount
47
+ },
48
+ // 是否允许半星
49
+ allowHalf: {
50
+ type: Boolean,
51
+ default: uni.$u.props.rate.allowHalf
52
+ },
53
+ // 选中时的图标(星星)
54
+ activeIcon: {
55
+ type: String,
56
+ default: uni.$u.props.rate.activeIcon
57
+ },
58
+ // 未选中时的图标(星星)
59
+ inactiveIcon: {
60
+ type: String,
61
+ default: uni.$u.props.rate.inactiveIcon
62
+ },
63
+ // 是否可以通过滑动手势选择评分
64
+ touchable: {
65
+ type: Boolean,
66
+ default: uni.$u.props.rate.touchable
67
+ }
68
+ }
69
+ }