uview-plus 3.0.3

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 (366) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/changelog.md +8 -0
  4. package/components/u--form/u--form.vue +78 -0
  5. package/components/u--image/u--image.vue +47 -0
  6. package/components/u--input/u--input.vue +73 -0
  7. package/components/u--text/u--text.vue +44 -0
  8. package/components/u--textarea/u--textarea.vue +48 -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 +172 -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 +490 -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 +580 -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 +116 -0
  62. package/components/u-datetime-picker/u-datetime-picker.vue +362 -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 +146 -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 +43 -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 +234 -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 +354 -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 +84 -0
  113. package/components/u-modal/u-modal.vue +227 -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 +283 -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 +337 -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 +304 -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 +354 -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/props.js +59 -0
  216. package/components/u-tooltip/u-tooltip.vue +366 -0
  217. package/components/u-tr/props.js +5 -0
  218. package/components/u-tr/u-tr.vue +31 -0
  219. package/components/u-transition/nvue.ani-map.js +68 -0
  220. package/components/u-transition/props.js +24 -0
  221. package/components/u-transition/transition.js +157 -0
  222. package/components/u-transition/u-transition.vue +92 -0
  223. package/components/u-transition/vue.ani-style.scss +113 -0
  224. package/components/u-upload/mixin.js +21 -0
  225. package/components/u-upload/props.js +124 -0
  226. package/components/u-upload/u-upload.vue +558 -0
  227. package/components/u-upload/utils.js +151 -0
  228. package/components/uview-plus/uview-plus.vue +15 -0
  229. package/index.js +77 -0
  230. package/index.scss +23 -0
  231. package/libs/config/color.js +17 -0
  232. package/libs/config/config.js +34 -0
  233. package/libs/config/props/actionSheet.js +25 -0
  234. package/libs/config/props/album.js +25 -0
  235. package/libs/config/props/alert.js +22 -0
  236. package/libs/config/props/avatar.js +28 -0
  237. package/libs/config/props/avatarGroup.js +23 -0
  238. package/libs/config/props/backtop.js +27 -0
  239. package/libs/config/props/badge.js +27 -0
  240. package/libs/config/props/button.js +42 -0
  241. package/libs/config/props/calendar.js +42 -0
  242. package/libs/config/props/carKeyboard.js +15 -0
  243. package/libs/config/props/cell.js +35 -0
  244. package/libs/config/props/cellGroup.js +17 -0
  245. package/libs/config/props/checkbox.js +27 -0
  246. package/libs/config/props/checkboxGroup.js +29 -0
  247. package/libs/config/props/circleProgress.js +15 -0
  248. package/libs/config/props/code.js +21 -0
  249. package/libs/config/props/codeInput.js +29 -0
  250. package/libs/config/props/col.js +19 -0
  251. package/libs/config/props/collapse.js +17 -0
  252. package/libs/config/props/collapseItem.js +25 -0
  253. package/libs/config/props/columnNotice.js +24 -0
  254. package/libs/config/props/countDown.js +18 -0
  255. package/libs/config/props/countTo.js +25 -0
  256. package/libs/config/props/datetimePicker.js +36 -0
  257. package/libs/config/props/divider.js +23 -0
  258. package/libs/config/props/empty.js +26 -0
  259. package/libs/config/props/form.js +22 -0
  260. package/libs/config/props/formItem.js +22 -0
  261. package/libs/config/props/gap.js +19 -0
  262. package/libs/config/props/grid.js +17 -0
  263. package/libs/config/props/gridItem.js +16 -0
  264. package/libs/config/props/icon.js +36 -0
  265. package/libs/config/props/image.js +30 -0
  266. package/libs/config/props/indexAnchor.js +19 -0
  267. package/libs/config/props/indexList.js +19 -0
  268. package/libs/config/props/input.js +48 -0
  269. package/libs/config/props/keyboard.js +30 -0
  270. package/libs/config/props/line.js +20 -0
  271. package/libs/config/props/lineProgress.js +19 -0
  272. package/libs/config/props/link.js +26 -0
  273. package/libs/config/props/list.js +28 -0
  274. package/libs/config/props/listItem.js +15 -0
  275. package/libs/config/props/loadingIcon.js +30 -0
  276. package/libs/config/props/loadingPage.js +23 -0
  277. package/libs/config/props/loadmore.js +32 -0
  278. package/libs/config/props/modal.js +30 -0
  279. package/libs/config/props/navbar.js +32 -0
  280. package/libs/config/props/noNetwork.js +18 -0
  281. package/libs/config/props/noticeBar.js +27 -0
  282. package/libs/config/props/notify.js +22 -0
  283. package/libs/config/props/numberBox.js +35 -0
  284. package/libs/config/props/numberKeyboard.js +17 -0
  285. package/libs/config/props/overlay.js +18 -0
  286. package/libs/config/props/parse.js +22 -0
  287. package/libs/config/props/picker.js +29 -0
  288. package/libs/config/props/popup.js +29 -0
  289. package/libs/config/props/radio.js +27 -0
  290. package/libs/config/props/radioGroup.js +30 -0
  291. package/libs/config/props/rate.js +26 -0
  292. package/libs/config/props/readMore.js +22 -0
  293. package/libs/config/props/row.js +17 -0
  294. package/libs/config/props/rowNotice.js +21 -0
  295. package/libs/config/props/scrollList.js +20 -0
  296. package/libs/config/props/search.js +37 -0
  297. package/libs/config/props/section.js +24 -0
  298. package/libs/config/props/skeleton.js +25 -0
  299. package/libs/config/props/slider.js +25 -0
  300. package/libs/config/props/statusBar.js +15 -0
  301. package/libs/config/props/steps.js +21 -0
  302. package/libs/config/props/stepsItem.js +18 -0
  303. package/libs/config/props/sticky.js +20 -0
  304. package/libs/config/props/subsection.js +23 -0
  305. package/libs/config/props/swipeAction.js +15 -0
  306. package/libs/config/props/swipeActionItem.js +21 -0
  307. package/libs/config/props/swiper.js +39 -0
  308. package/libs/config/props/swipterIndicator.js +19 -0
  309. package/libs/config/props/switch.js +24 -0
  310. package/libs/config/props/tabbar.js +22 -0
  311. package/libs/config/props/tabbarItem.js +20 -0
  312. package/libs/config/props/tabs.js +32 -0
  313. package/libs/config/props/tag.js +29 -0
  314. package/libs/config/props/text.js +38 -0
  315. package/libs/config/props/textarea.js +36 -0
  316. package/libs/config/props/toast.js +30 -0
  317. package/libs/config/props/toolbar.js +21 -0
  318. package/libs/config/props/tooltip.js +25 -0
  319. package/libs/config/props/transition.js +18 -0
  320. package/libs/config/props/upload.js +36 -0
  321. package/libs/config/props.js +190 -0
  322. package/libs/config/zIndex.js +20 -0
  323. package/libs/css/color.scss +155 -0
  324. package/libs/css/common.scss +97 -0
  325. package/libs/css/components.scss +15 -0
  326. package/libs/css/flex.scss +257 -0
  327. package/libs/css/h5.scss +0 -0
  328. package/libs/css/mixin.scss +8 -0
  329. package/libs/css/mp.scss +0 -0
  330. package/libs/css/nvue.scss +0 -0
  331. package/libs/css/vue.scss +27 -0
  332. package/libs/function/colorGradient.js +134 -0
  333. package/libs/function/debounce.js +29 -0
  334. package/libs/function/digit.js +167 -0
  335. package/libs/function/index.js +708 -0
  336. package/libs/function/platform.js +75 -0
  337. package/libs/function/test.js +288 -0
  338. package/libs/function/throttle.js +30 -0
  339. package/libs/luch-request/adapters/index.js +97 -0
  340. package/libs/luch-request/core/InterceptorManager.js +50 -0
  341. package/libs/luch-request/core/Request.js +198 -0
  342. package/libs/luch-request/core/buildFullPath.js +20 -0
  343. package/libs/luch-request/core/defaults.js +29 -0
  344. package/libs/luch-request/core/dispatchRequest.js +3 -0
  345. package/libs/luch-request/core/mergeConfig.js +103 -0
  346. package/libs/luch-request/core/settle.js +16 -0
  347. package/libs/luch-request/helpers/buildURL.js +69 -0
  348. package/libs/luch-request/helpers/combineURLs.js +14 -0
  349. package/libs/luch-request/helpers/isAbsoluteURL.js +14 -0
  350. package/libs/luch-request/index.d.ts +116 -0
  351. package/libs/luch-request/index.js +3 -0
  352. package/libs/luch-request/utils/clone.js +264 -0
  353. package/libs/luch-request/utils.js +131 -0
  354. package/libs/mixin/button.js +13 -0
  355. package/libs/mixin/mixin.js +160 -0
  356. package/libs/mixin/mpMixin.js +8 -0
  357. package/libs/mixin/mpShare.js +13 -0
  358. package/libs/mixin/openType.js +25 -0
  359. package/libs/mixin/style.js +228 -0
  360. package/libs/mixin/touch.js +59 -0
  361. package/libs/util/async-validator.js +1343 -0
  362. package/libs/util/calendar.js +546 -0
  363. package/libs/util/emitter.js +51 -0
  364. package/libs/util/route.js +124 -0
  365. package/package.json +91 -0
  366. package/theme.scss +44 -0
@@ -0,0 +1,187 @@
1
+ export default {
2
+ props: {
3
+ // 输入的值
4
+ value: {
5
+ type: [String, Number],
6
+ default: uni.$u.props.input.value
7
+ },
8
+ // 输入框类型
9
+ // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数
10
+ // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序
11
+ // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序
12
+ // text-文本输入键盘
13
+ type: {
14
+ type: String,
15
+ default: uni.$u.props.input.type
16
+ },
17
+ // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,
18
+ // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序
19
+ fixed: {
20
+ type: Boolean,
21
+ default: uni.$u.props.input.fixed
22
+ },
23
+ // 是否禁用输入框
24
+ disabled: {
25
+ type: Boolean,
26
+ default: uni.$u.props.input.disabled
27
+ },
28
+ // 禁用状态时的背景色
29
+ disabledColor: {
30
+ type: String,
31
+ default: uni.$u.props.input.disabledColor
32
+ },
33
+ // 是否显示清除控件
34
+ clearable: {
35
+ type: Boolean,
36
+ default: uni.$u.props.input.clearable
37
+ },
38
+ // 是否密码类型
39
+ password: {
40
+ type: Boolean,
41
+ default: uni.$u.props.input.password
42
+ },
43
+ // 最大输入长度,设置为 -1 的时候不限制最大长度
44
+ maxlength: {
45
+ type: [String, Number],
46
+ default: uni.$u.props.input.maxlength
47
+ },
48
+ // 输入框为空时的占位符
49
+ placeholder: {
50
+ type: String,
51
+ default: uni.$u.props.input.placeholder
52
+ },
53
+ // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/
54
+ placeholderClass: {
55
+ type: String,
56
+ default: uni.$u.props.input.placeholderClass
57
+ },
58
+ // 指定placeholder的样式
59
+ placeholderStyle: {
60
+ type: [String, Object],
61
+ default: uni.$u.props.input.placeholderStyle
62
+ },
63
+ // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效
64
+ showWordLimit: {
65
+ type: Boolean,
66
+ default: uni.$u.props.input.showWordLimit
67
+ },
68
+ // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档
69
+ // https://uniapp.dcloud.io/component/input
70
+ // https://uniapp.dcloud.io/component/textarea
71
+ confirmType: {
72
+ type: String,
73
+ default: uni.$u.props.input.confirmType
74
+ },
75
+ // 点击键盘右下角按钮时是否保持键盘不收起,H5无效
76
+ confirmHold: {
77
+ type: Boolean,
78
+ default: uni.$u.props.input.confirmHold
79
+ },
80
+ // focus时,点击页面的时候不收起键盘,微信小程序有效
81
+ holdKeyboard: {
82
+ type: Boolean,
83
+ default: uni.$u.props.input.holdKeyboard
84
+ },
85
+ // 自动获取焦点
86
+ // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点
87
+ focus: {
88
+ type: Boolean,
89
+ default: uni.$u.props.input.focus
90
+ },
91
+ // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效
92
+ autoBlur: {
93
+ type: Boolean,
94
+ default: uni.$u.props.input.autoBlur
95
+ },
96
+ // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效
97
+ disableDefaultPadding: {
98
+ type: Boolean,
99
+ default: uni.$u.props.input.disableDefaultPadding
100
+ },
101
+ // 指定focus时光标的位置
102
+ cursor: {
103
+ type: [String, Number],
104
+ default: uni.$u.props.input.cursor
105
+ },
106
+ // 输入框聚焦时底部与键盘的距离
107
+ cursorSpacing: {
108
+ type: [String, Number],
109
+ default: uni.$u.props.input.cursorSpacing
110
+ },
111
+ // 光标起始位置,自动聚集时有效,需与selection-end搭配使用
112
+ selectionStart: {
113
+ type: [String, Number],
114
+ default: uni.$u.props.input.selectionStart
115
+ },
116
+ // 光标结束位置,自动聚集时有效,需与selection-start搭配使用
117
+ selectionEnd: {
118
+ type: [String, Number],
119
+ default: uni.$u.props.input.selectionEnd
120
+ },
121
+ // 键盘弹起时,是否自动上推页面
122
+ adjustPosition: {
123
+ type: Boolean,
124
+ default: uni.$u.props.input.adjustPosition
125
+ },
126
+ // 输入框内容对齐方式,可选值为:left|center|right
127
+ inputAlign: {
128
+ type: String,
129
+ default: uni.$u.props.input.inputAlign
130
+ },
131
+ // 输入框字体的大小
132
+ fontSize: {
133
+ type: [String, Number],
134
+ default: uni.$u.props.input.fontSize
135
+ },
136
+ // 输入框字体颜色
137
+ color: {
138
+ type: String,
139
+ default: uni.$u.props.input.color
140
+ },
141
+ // 输入框前置图标
142
+ prefixIcon: {
143
+ type: String,
144
+ default: uni.$u.props.input.prefixIcon
145
+ },
146
+ // 前置图标样式,对象或字符串
147
+ prefixIconStyle: {
148
+ type: [String, Object],
149
+ default: uni.$u.props.input.prefixIconStyle
150
+ },
151
+ // 输入框后置图标
152
+ suffixIcon: {
153
+ type: String,
154
+ default: uni.$u.props.input.suffixIcon
155
+ },
156
+ // 后置图标样式,对象或字符串
157
+ suffixIconStyle: {
158
+ type: [String, Object],
159
+ default: uni.$u.props.input.suffixIconStyle
160
+ },
161
+ // 边框类型,surround-四周边框,bottom-底部边框,none-无边框
162
+ border: {
163
+ type: String,
164
+ default: uni.$u.props.input.border
165
+ },
166
+ // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会
167
+ readonly: {
168
+ type: Boolean,
169
+ default: uni.$u.props.input.readonly
170
+ },
171
+ // 输入框形状,circle-圆形,square-方形
172
+ shape: {
173
+ type: String,
174
+ default: uni.$u.props.input.shape
175
+ },
176
+ // 用于处理或者过滤输入框内容的方法
177
+ formatter: {
178
+ type: [Function, null],
179
+ default: uni.$u.props.input.formatter
180
+ },
181
+ // 是否忽略组件内对文本合成系统事件的处理
182
+ ignoreCompositionEvent: {
183
+ type: Boolean,
184
+ default: true
185
+ }
186
+ }
187
+ }
@@ -0,0 +1,354 @@
1
+ <template>
2
+ <view class="u-input" :class="inputClass" :style="[wrapperStyle]">
3
+ <view class="u-input__content">
4
+ <view
5
+ class="u-input__content__prefix-icon"
6
+ v-if="prefixIcon || $slots.prefix"
7
+ >
8
+ <slot name="prefix">
9
+ <u-icon
10
+ :name="prefixIcon"
11
+ size="18"
12
+ :customStyle="prefixIconStyle"
13
+ ></u-icon>
14
+ </slot>
15
+ </view>
16
+ <view class="u-input__content__field-wrapper" @tap="clickHandler">
17
+ <!-- 根据uni-app的input组件文档,H5和APP中只要声明了password参数(无论true还是false),type均失效,此时
18
+ 为了防止type=number时,又存在password属性,type无效,此时需要设置password为undefined
19
+ -->
20
+ <input
21
+ class="u-input__content__field-wrapper__field"
22
+ :style="[inputStyle]"
23
+ :type="type"
24
+ :focus="focus"
25
+ :cursor="cursor"
26
+ :value="innerValue"
27
+ :auto-blur="autoBlur"
28
+ :disabled="disabled || readonly"
29
+ :maxlength="maxlength"
30
+ :placeholder="placeholder"
31
+ :placeholder-style="placeholderStyle"
32
+ :placeholder-class="placeholderClass"
33
+ :confirm-type="confirmType"
34
+ :confirm-hold="confirmHold"
35
+ :hold-keyboard="holdKeyboard"
36
+ :cursor-spacing="cursorSpacing"
37
+ :adjust-position="adjustPosition"
38
+ :selection-end="selectionEnd"
39
+ :selection-start="selectionStart"
40
+ :password="password || type === 'password' || undefined"
41
+ :ignoreCompositionEvent="ignoreCompositionEvent"
42
+ @input="onInput"
43
+ @blur="onBlur"
44
+ @focus="onFocus"
45
+ @confirm="onConfirm"
46
+ @keyboardheightchange="onkeyboardheightchange"
47
+ />
48
+ </view>
49
+ <view
50
+ class="u-input__content__clear"
51
+ v-if="isShowClear"
52
+ @tap="onClear"
53
+ >
54
+ <u-icon
55
+ name="close"
56
+ size="11"
57
+ color="#ffffff"
58
+ customStyle="line-height: 12px"
59
+ ></u-icon>
60
+ </view>
61
+ <view
62
+ class="u-input__content__subfix-icon"
63
+ v-if="suffixIcon || $slots.suffix"
64
+ >
65
+ <slot name="suffix">
66
+ <u-icon
67
+ :name="suffixIcon"
68
+ size="18"
69
+ :customStyle="suffixIconStyle"
70
+ ></u-icon>
71
+ </slot>
72
+ </view>
73
+ </view>
74
+ </view>
75
+ </template>
76
+
77
+ <script>
78
+ import props from "./props.js";
79
+ /**
80
+ * Input 输入框
81
+ * @description 此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件u-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。
82
+ * @tutorial https://uviewui.com/components/input.html
83
+ * @property {String | Number} value 输入的值
84
+ * @property {String} type 输入框类型,见上方说明 ( 默认 'text' )
85
+ * @property {Boolean} fixed 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true,兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 ( 默认 false )
86
+ * @property {Boolean} disabled 是否禁用输入框 ( 默认 false )
87
+ * @property {String} disabledColor 禁用状态时的背景色( 默认 '#f5f7fa' )
88
+ * @property {Boolean} clearable 是否显示清除控件 ( 默认 false )
89
+ * @property {Boolean} password 是否密码类型 ( 默认 false )
90
+ * @property {String | Number} maxlength 最大输入长度,设置为 -1 的时候不限制最大长度 ( 默认 -1 )
91
+ * @property {String} placeholder 输入框为空时的占位符
92
+ * @property {String} placeholderClass 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ ( 默认 'input-placeholder' )
93
+ * @property {String | Object} placeholderStyle 指定placeholder的样式,字符串/对象形式,如"color: red;"
94
+ * @property {Boolean} showWordLimit 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 ( 默认 false )
95
+ * @property {String} confirmType 设置右下角按钮的文字,兼容性详见uni-app文档 ( 默认 'done' )
96
+ * @property {Boolean} confirmHold 点击键盘右下角按钮时是否保持键盘不收起,H5无效 ( 默认 false )
97
+ * @property {Boolean} holdKeyboard focus时,点击页面的时候不收起键盘,微信小程序有效 ( 默认 false )
98
+ * @property {Boolean} focus 自动获取焦点,在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 ( 默认 false )
99
+ * @property {Boolean} autoBlur 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 ( 默认 false )
100
+ * @property {Boolean} disableDefaultPadding 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 ( 默认 false )
101
+ * @property {String | Number} cursor 指定focus时光标的位置( 默认 -1 )
102
+ * @property {String | Number} cursorSpacing 输入框聚焦时底部与键盘的距离 ( 默认 30 )
103
+ * @property {String | Number} selectionStart 光标起始位置,自动聚集时有效,需与selection-end搭配使用 ( 默认 -1 )
104
+ * @property {String | Number} selectionEnd 光标结束位置,自动聚集时有效,需与selection-start搭配使用 ( 默认 -1 )
105
+ * @property {Boolean} adjustPosition 键盘弹起时,是否自动上推页面 ( 默认 true )
106
+ * @property {String} inputAlign 输入框内容对齐方式( 默认 'left' )
107
+ * @property {String | Number} fontSize 输入框字体的大小 ( 默认 '15px' )
108
+ * @property {String} color 输入框字体颜色 ( 默认 '#303133' )
109
+ * @property {Function} formatter 内容式化函数
110
+ * @property {String} prefixIcon 输入框前置图标
111
+ * @property {String | Object} prefixIconStyle 前置图标样式,对象或字符串
112
+ * @property {String} suffixIcon 输入框后置图标
113
+ * @property {String | Object} suffixIconStyle 后置图标样式,对象或字符串
114
+ * @property {String} border 边框类型,surround-四周边框,bottom-底部边框,none-无边框 ( 默认 'surround' )
115
+ * @property {Boolean} readonly 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 ( 默认 false )
116
+ * @property {String} shape 输入框形状,circle-圆形,square-方形 ( 默认 'square' )
117
+ * @property {Object} customStyle 定义需要用到的外部样式
118
+ * @property {Boolean} ignoreCompositionEvent 是否忽略组件内对文本合成系统事件的处理。
119
+ * @example <u-input v-model="value" :password="true" suffix-icon="lock-fill" />
120
+ */
121
+ export default {
122
+ name: "u-input",
123
+ mixins: [uni.$u.mpMixin, uni.$u.mixin, props],
124
+ data() {
125
+ return {
126
+ // 输入框的值
127
+ innerValue: "",
128
+ // 是否处于获得焦点状态
129
+ focused: false,
130
+ // value是否第一次变化,在watch中,由于加入immediate属性,会在第一次触发,此时不应该认为value发生了变化
131
+ firstChange: true,
132
+ // value绑定值的变化是由内部还是外部引起的
133
+ changeFromInner: false,
134
+ // 过滤处理方法
135
+ innerFormatter: value => value
136
+ };
137
+ },
138
+ watch: {
139
+ value: {
140
+ immediate: true,
141
+ handler(newVal, oldVal) {
142
+ this.innerValue = newVal;
143
+ /* #ifdef H5 */
144
+ // 在H5中,外部value变化后,修改input中的值,不会触发@input事件,此时手动调用值变化方法
145
+ if (
146
+ this.firstChange === false &&
147
+ this.changeFromInner === false
148
+ ) {
149
+ this.valueChange();
150
+ }
151
+ /* #endif */
152
+ this.firstChange = false;
153
+ // 重置changeFromInner的值为false,标识下一次引起默认为外部引起的
154
+ this.changeFromInner = false;
155
+ },
156
+ },
157
+ },
158
+ computed: {
159
+ // 是否显示清除控件
160
+ isShowClear() {
161
+ const { clearable, readonly, focused, innerValue } = this;
162
+ return !!clearable && !readonly && !!focused && innerValue !== "";
163
+ },
164
+ // 组件的类名
165
+ inputClass() {
166
+ let classes = [],
167
+ { border, disabled, shape } = this;
168
+ border === "surround" &&
169
+ (classes = classes.concat(["u-border", "u-input--radius"]));
170
+ classes.push(`u-input--${shape}`);
171
+ border === "bottom" &&
172
+ (classes = classes.concat([
173
+ "u-border-bottom",
174
+ "u-input--no-radius",
175
+ ]));
176
+ return classes.join(" ");
177
+ },
178
+ // 组件的样式
179
+ wrapperStyle() {
180
+ const style = {};
181
+ // 禁用状态下,被背景色加上对应的样式
182
+ if (this.disabled) {
183
+ style.backgroundColor = this.disabledColor;
184
+ }
185
+ // 无边框时,去除内边距
186
+ if (this.border === "none") {
187
+ style.padding = "0";
188
+ } else {
189
+ // 由于uni-app的iOS开发者能力有限,导致需要分开写才有效
190
+ style.paddingTop = "6px";
191
+ style.paddingBottom = "6px";
192
+ style.paddingLeft = "9px";
193
+ style.paddingRight = "9px";
194
+ }
195
+ return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle));
196
+ },
197
+ // 输入框的样式
198
+ inputStyle() {
199
+ const style = {
200
+ color: this.color,
201
+ fontSize: uni.$u.addUnit(this.fontSize),
202
+ textAlign: this.inputAlign
203
+ };
204
+ return style;
205
+ },
206
+ },
207
+ methods: {
208
+ // 在微信小程序中,不支持将函数当做props参数,故只能通过ref形式调用
209
+ setFormatter(e) {
210
+ this.innerFormatter = e
211
+ },
212
+ // 当键盘输入时,触发input事件
213
+ onInput(e) {
214
+ let { value = "" } = e.detail || {};
215
+ // 格式化过滤方法
216
+ const formatter = this.formatter || this.innerFormatter
217
+ const formatValue = formatter(value)
218
+ // 为了避免props的单向数据流特性,需要先将innerValue值设置为当前值,再在$nextTick中重新赋予设置后的值才有效
219
+ this.innerValue = value
220
+ this.$nextTick(() => {
221
+ this.innerValue = formatValue;
222
+ this.valueChange();
223
+ })
224
+ },
225
+ // 输入框失去焦点时触发
226
+ onBlur(event) {
227
+ this.$emit("blur", event.detail.value);
228
+ // H5端的blur会先于点击清除控件的点击click事件触发,导致focused
229
+ // 瞬间为false,从而隐藏了清除控件而无法被点击到
230
+ uni.$u.sleep(50).then(() => {
231
+ this.focused = false;
232
+ });
233
+ // 尝试调用u-form的验证方法
234
+ uni.$u.formValidate(this, "blur");
235
+ },
236
+ // 输入框聚焦时触发
237
+ onFocus(event) {
238
+ this.focused = true;
239
+ this.$emit("focus");
240
+ },
241
+ // 点击完成按钮时触发
242
+ onConfirm(event) {
243
+ this.$emit("confirm", this.innerValue);
244
+ },
245
+ // 键盘高度发生变化的时候触发此事件
246
+ // 兼容性:微信小程序2.7.0+、App 3.1.0+
247
+ onkeyboardheightchange() {
248
+ this.$emit("keyboardheightchange");
249
+ },
250
+ // 内容发生变化,进行处理
251
+ valueChange() {
252
+ const value = this.innerValue;
253
+ this.$nextTick(() => {
254
+ this.$emit("input", value);
255
+ // 标识value值的变化是由内部引起的
256
+ this.changeFromInner = true;
257
+ this.$emit("change", value);
258
+ // 尝试调用u-form的验证方法
259
+ uni.$u.formValidate(this, "change");
260
+ });
261
+ },
262
+ // 点击清除控件
263
+ onClear() {
264
+ this.innerValue = "";
265
+ this.$nextTick(() => {
266
+ this.valueChange();
267
+ this.$emit("clear");
268
+ });
269
+ },
270
+ /**
271
+ * 在安卓nvue上,事件无法冒泡
272
+ * 在某些时间,我们希望监听u-from-item的点击事件,此时会导致点击u-form-item内的u-input后
273
+ * 无法触发u-form-item的点击事件,这里通过手动调用u-form-item的方法进行触发
274
+ */
275
+ clickHandler() {
276
+ // #ifdef APP-NVUE
277
+ if (uni.$u.os() === "android") {
278
+ const formItem = uni.$u.$parent.call(this, "u-form-item");
279
+ if (formItem) {
280
+ formItem.clickHandler();
281
+ }
282
+ }
283
+ // #endif
284
+ },
285
+ },
286
+ };
287
+ </script>
288
+
289
+ <style lang="scss" scoped>
290
+ @import "../../libs/css/components.scss";
291
+
292
+ .u-input {
293
+ @include flex(row);
294
+ align-items: center;
295
+ justify-content: space-between;
296
+ flex: 1;
297
+
298
+ &--radius,
299
+ &--square {
300
+ border-radius: 4px;
301
+ }
302
+
303
+ &--no-radius {
304
+ border-radius: 0;
305
+ }
306
+
307
+ &--circle {
308
+ border-radius: 100px;
309
+ }
310
+
311
+ &__content {
312
+ flex: 1;
313
+ @include flex(row);
314
+ align-items: center;
315
+ justify-content: space-between;
316
+
317
+ &__field-wrapper {
318
+ position: relative;
319
+ @include flex(row);
320
+ margin: 0;
321
+ flex: 1;
322
+
323
+ &__field {
324
+ line-height: 26px;
325
+ text-align: left;
326
+ color: $u-main-color;
327
+ height: 24px;
328
+ font-size: 15px;
329
+ flex: 1;
330
+ }
331
+ }
332
+
333
+ &__clear {
334
+ width: 20px;
335
+ height: 20px;
336
+ border-radius: 100px;
337
+ background-color: #c6c7cb;
338
+ @include flex(row);
339
+ align-items: center;
340
+ justify-content: center;
341
+ transform: scale(0.82);
342
+ margin-left: 4px;
343
+ }
344
+
345
+ &__subfix-icon {
346
+ margin-left: 4px;
347
+ }
348
+
349
+ &__prefix-icon {
350
+ margin-right: 4px;
351
+ }
352
+ }
353
+ }
354
+ </style>
@@ -0,0 +1,84 @@
1
+ export default {
2
+ props: {
3
+ // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘
4
+ mode: {
5
+ type: String,
6
+ default: uni.$u.props.keyboard.mode
7
+ },
8
+ // 是否显示键盘的"."符号
9
+ dotDisabled: {
10
+ type: Boolean,
11
+ default: uni.$u.props.keyboard.dotDisabled
12
+ },
13
+ // 是否显示顶部工具条
14
+ tooltip: {
15
+ type: Boolean,
16
+ default: uni.$u.props.keyboard.tooltip
17
+ },
18
+ // 是否显示工具条中间的提示
19
+ showTips: {
20
+ type: Boolean,
21
+ default: uni.$u.props.keyboard.showTips
22
+ },
23
+ // 工具条中间的提示文字
24
+ tips: {
25
+ type: String,
26
+ default: uni.$u.props.keyboard.tips
27
+ },
28
+ // 是否显示工具条左边的"取消"按钮
29
+ showCancel: {
30
+ type: Boolean,
31
+ default: uni.$u.props.keyboard.showCancel
32
+ },
33
+ // 是否显示工具条右边的"完成"按钮
34
+ showConfirm: {
35
+ type: Boolean,
36
+ default: uni.$u.props.keyboard.showConfirm
37
+ },
38
+ // 是否打乱键盘按键的顺序
39
+ random: {
40
+ type: Boolean,
41
+ default: uni.$u.props.keyboard.random
42
+ },
43
+ // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距
44
+ safeAreaInsetBottom: {
45
+ type: Boolean,
46
+ default: uni.$u.props.keyboard.safeAreaInsetBottom
47
+ },
48
+ // 是否允许通过点击遮罩关闭键盘
49
+ closeOnClickOverlay: {
50
+ type: Boolean,
51
+ default: uni.$u.props.keyboard.closeOnClickOverlay
52
+ },
53
+ // 控制键盘的弹出与收起
54
+ show: {
55
+ type: Boolean,
56
+ default: uni.$u.props.keyboard.show
57
+ },
58
+ // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩
59
+ overlay: {
60
+ type: Boolean,
61
+ default: uni.$u.props.keyboard.overlay
62
+ },
63
+ // z-index值
64
+ zIndex: {
65
+ type: [String, Number],
66
+ default: uni.$u.props.keyboard.zIndex
67
+ },
68
+ // 取消按钮的文字
69
+ cancelText: {
70
+ type: String,
71
+ default: uni.$u.props.keyboard.cancelText
72
+ },
73
+ // 确认按钮的文字
74
+ confirmText: {
75
+ type: String,
76
+ default: uni.$u.props.keyboard.confirmText
77
+ },
78
+ // 输入一个中文后,是否自动切换到英文
79
+ autoChange: {
80
+ type: Boolean,
81
+ default: uni.$u.props.keyboard.autoChange
82
+ }
83
+ }
84
+ }