@10yun/cv-mobile-ui 0.3.26 → 0.4.2

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 (235) hide show
  1. package/build/parse-pages.js +2 -2
  2. package/package.json +1 -1
  3. package/ui-cv/README.md +3 -0
  4. package/ui-cv/cv-badge/cv-badge.vue +249 -0
  5. package/ui-cv/cv-banner/cv-banner.vue +1 -1
  6. package/ui-cv/cv-banner-card/cv-banner-card.vue +1 -1
  7. package/ui-cv/cv-block/cv-block.vue +1 -1
  8. package/ui-cv/cv-box/cv-box.vue +1 -1
  9. package/ui-cv/cv-calendar/calendar.js +963 -0
  10. package/ui-cv/cv-calendar/cv-calendar-item.vue +198 -0
  11. package/ui-cv/cv-calendar/cv-calendar.vue +508 -0
  12. package/{ui-uni/uni-calendar → ui-cv/cv-calendar}/util.js +0 -0
  13. package/ui-cv/cv-card/cv-card.vue +427 -0
  14. package/ui-cv/cv-cell/cv-cell.vue +1 -1
  15. package/ui-cv/cv-checkbox-group/cv-checkbox-group.vue +227 -0
  16. package/ui-cv/cv-checkbox-opt-base/cv-checkbox-opt-base.vue +57 -0
  17. package/ui-cv/cv-checkbox-opt-tag/cv-checkbox-opt-tag.vue +107 -0
  18. package/ui-cv/cv-code-sms/cv-code-sms.vue +23 -42
  19. package/ui-cv/cv-col/cv-col.vue +2965 -0
  20. package/ui-cv/cv-collapse/cv-collapse.vue +146 -0
  21. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +395 -0
  22. package/ui-cv/cv-combox/cv-combox.vue +250 -0
  23. package/ui-cv/cv-countdown/cv-countdown.vue +245 -0
  24. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +841 -0
  25. package/{ui-uni/uni-data-indexed-list → ui-cv/cv-data-indexed-list}/clientdb.js +0 -0
  26. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +154 -0
  27. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +376 -0
  28. package/ui-cv/cv-data-picker/cv-data-picker.vue +486 -0
  29. package/{ui-uni/uni-data-picker → ui-cv/cv-data-picker}/keypress.js +0 -0
  30. package/{ui-uni/uni-data-pickerview/uni-data-picker.js → ui-cv/cv-data-pickerview/cv-data-picker.js} +0 -0
  31. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +304 -0
  32. package/ui-cv/cv-dateformat/cv-dateformat.vue +86 -0
  33. package/{ui-uni/uni-dateformat → ui-cv/cv-dateformat}/date-format.js +0 -0
  34. package/{ui-uni/uni-datetime-picker → ui-cv/cv-datetime-picker}/calendar-item.vue +0 -0
  35. package/{ui-uni/uni-datetime-picker → ui-cv/cv-datetime-picker}/calendar.js +0 -0
  36. package/ui-cv/cv-datetime-picker/calendar.vue +761 -0
  37. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +958 -0
  38. package/{ui-uni/uni-datetime-picker → ui-cv/cv-datetime-picker}/keypress.js +0 -0
  39. package/ui-cv/cv-datetime-picker/time-picker.vue +907 -0
  40. package/{ui-uni/uni-datetime-picker → ui-cv/cv-datetime-picker}/util.js +0 -0
  41. package/ui-cv/cv-dialog-bottom/cv-dialog-bottom.vue +1 -1
  42. package/ui-cv/cv-dialog-full/cv-dialog-full.vue +1 -1
  43. package/ui-cv/cv-dialog-loading/cv-dialog-loading.vue +3 -3
  44. package/ui-cv/cv-drawer/cv-drawer.vue +185 -0
  45. package/{ui-uni/uni-drawer → ui-cv/cv-drawer}/keypress.js +14 -14
  46. package/{ui-uni/uni-easyinput → ui-cv/cv-easyinput}/common.js +0 -0
  47. package/ui-cv/cv-easyinput/cv-easyinput.vue +514 -0
  48. package/ui-cv/cv-editor-parse/readme.md +2 -3
  49. package/ui-cv/{cv-editor → cv-editor-quill}/compressImage.vue +0 -0
  50. package/ui-cv/{cv-editor/cv-editor.vue → cv-editor-quill/cv-editor-quill.vue} +3 -23
  51. package/ui-cv/{cv-editor → cv-editor-quill}/editor-icon.css +0 -0
  52. package/ui-cv/{cv-editor → cv-editor-quill}/editor-icon.ttf +0 -0
  53. package/ui-cv/{cv-editor → cv-editor-quill}/index.js +0 -0
  54. package/ui-cv/cv-fab/cv-fab.vue +465 -0
  55. package/{ui-uni/uni-fab/uni-fab.vue.bak → ui-cv/cv-fab/cv-fab.vue.bak} +2 -2
  56. package/ui-cv/cv-fav/cv-fav.vue +150 -0
  57. package/{ui-uni/uni-file-picker → ui-cv/cv-file-picker}/choose-and-upload-file.js +0 -0
  58. package/ui-cv/cv-file-picker/cv-file-picker.vue +619 -0
  59. package/{ui-uni/uni-file-picker → ui-cv/cv-file-picker}/upload-file.vue +0 -0
  60. package/{ui-uni/uni-file-picker → ui-cv/cv-file-picker}/upload-image.vue +0 -0
  61. package/{ui-uni/uni-file-picker → ui-cv/cv-file-picker}/utils.js +0 -0
  62. package/ui-cv/cv-form-base/cv-form-base.vue +470 -0
  63. package/ui-cv/cv-form-base/validate.js +477 -0
  64. package/ui-cv/cv-form-group/cv-form-group.vue +123 -80
  65. package/ui-cv/cv-form-group/cv-form-group2.vue +80 -0
  66. package/ui-cv/cv-form-item/cv-form-item.vue +482 -174
  67. package/ui-cv/cv-form-item/cv-form-item2.vue +215 -0
  68. package/ui-cv/cv-form-merge/cv-form-merge.vue +1 -1
  69. package/ui-cv/cv-geo-local/cv-geo-local.vue +14 -26
  70. package/{ui-uni/uni-goods-nav/uni-goods-nav.vue → ui-cv/cv-goods-nav/cv-goods-nav.vue} +1 -1
  71. package/ui-cv/cv-grid-group/cv-grid-group.vue +148 -0
  72. package/ui-cv/cv-grid-item/cv-grid-item.vue +132 -0
  73. package/ui-cv/cv-icon2/cv-icon2.vue +78 -0
  74. package/ui-cv/cv-icon2/icons.js +132 -0
  75. package/{ui-uni/uni-icons → ui-cv/cv-icon2}/uni.ttf +0 -0
  76. package/ui-cv/cv-icons/cv-icons.vue +1 -1
  77. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +154 -0
  78. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +371 -0
  79. package/ui-cv/cv-info/cv-info.vue +5 -20
  80. package/ui-cv/cv-input-btn/cv-input-btn.vue +25 -43
  81. package/ui-cv/cv-input-digit/cv-input-digit.vue +61 -28
  82. package/ui-cv/cv-input-idcard/cv-input-idcard.vue +47 -29
  83. package/ui-cv/cv-input-number/cv-input-number.vue +60 -28
  84. package/ui-cv/cv-input-password/cv-input-password.vue +80 -30
  85. package/ui-cv/cv-input-text/cv-input-text.vue +55 -37
  86. package/ui-cv/cv-link2/cv-link2.vue +130 -0
  87. package/ui-cv/cv-list/cv-list.vue +107 -0
  88. package/ui-cv/cv-list/cv-refresh.vue +65 -0
  89. package/{ui-uni/uni-list → ui-cv/cv-list}/uni-refresh.wxs +0 -0
  90. package/ui-cv/cv-list-ad/cv-list-ad.vue +113 -0
  91. package/{ui-uni/uni-list-chat/uni-list-chat.scss → ui-cv/cv-list-chat/cv-list-chat.scss} +0 -0
  92. package/{ui-uni/uni-list-chat/uni-list-chat.vue → ui-cv/cv-list-chat/cv-list-chat.vue} +0 -0
  93. package/ui-cv/cv-list-item/cv-list-item.vue +449 -0
  94. package/ui-cv/cv-load-more/config.json +9 -9
  95. package/ui-cv/cv-load-more/cv-load-more.vue +34 -5
  96. package/ui-cv/cv-message/cv-message.vue +1 -1
  97. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +256 -0
  98. package/{ui-uni/uni-nav-bar/uni-status-bar.vue → ui-cv/cv-nav-bar/cv-status-bar.vue} +0 -0
  99. package/ui-cv/cv-nav-col/cv-nav-col.vue +1 -1
  100. package/ui-cv/cv-nav-row/cv-nav-row.vue +1 -1
  101. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +453 -0
  102. package/ui-cv/cv-number-box/cv-number-box.vue +223 -0
  103. package/ui-cv/cv-pagination/cv-pagination.vue +397 -0
  104. package/ui-cv/cv-picker-date/cv-picker-date.vue +17 -27
  105. package/ui-cv/cv-picker-datetime/cv-picker-datetime.vue +31 -41
  106. package/ui-cv/cv-picker-datetime5/cv-picker-datetime5.vue +19 -29
  107. package/ui-cv/cv-picker-region/cv-picker-region.vue +23 -33
  108. package/ui-cv/cv-picker-time/cv-picker-time.vue +16 -26
  109. package/ui-cv/cv-picker1/cv-picker1.vue +16 -28
  110. package/ui-cv/cv-picker2/cv-picker2.vue +22 -32
  111. package/ui-cv/cv-picker3/cv-picker3.vue +34 -44
  112. package/ui-cv/cv-popup/cv-popup.vue +429 -0
  113. package/{ui-uni/uni-popup → ui-cv/cv-popup}/keypress.js +0 -0
  114. package/{ui-uni/uni-popup → ui-cv/cv-popup}/popup.js +0 -0
  115. package/{ui-uni/uni-popup-dialog/uni-popup-dialog.vue → ui-cv/cv-popup-dialog/cv-popup-dialog.vue} +0 -0
  116. package/{ui-uni/uni-popup-dialog → ui-cv/cv-popup-dialog}/keypress.js +0 -0
  117. package/ui-cv/cv-popup-message/cv-popup-message.vue +143 -0
  118. package/{ui-uni/uni-popup-share/uni-popup-share.vue → ui-cv/cv-popup-share/cv-popup-share.vue} +0 -0
  119. package/ui-cv/cv-radio-group/cv-radio-group.vue +185 -0
  120. package/ui-cv/cv-radio-opt-base/cv-radio-opt-base.vue +57 -0
  121. package/ui-cv/cv-radio-opt-tag/cv-radio-opt-tag.vue +107 -0
  122. package/ui-cv/cv-rate/cv-rate.vue +13 -17
  123. package/ui-cv/cv-rate/uni-rate.vue +358 -0
  124. package/ui-cv/cv-row/cv-row.vue +157 -0
  125. package/ui-cv/cv-search/cv-search.vue +4 -4
  126. package/ui-cv/cv-search-bar/cv-search-bar.vue +280 -0
  127. package/{ui-uni/uni-section/uni-section.vue → ui-cv/cv-section/cv-section.vue} +0 -0
  128. package/{ui-uni/uni-segmented-control/uni-segmented-control.vue → ui-cv/cv-segmented-control/cv-segmented-control.vue} +0 -0
  129. package/ui-cv/cv-skeleton/cv-skeleton2.vue +5 -5
  130. package/ui-cv/cv-specs/cv-specs.vue +1 -1
  131. package/{ui-uni/uni-status-bar/uni-status-bar.vue → ui-cv/cv-status-bar/cv-status-bar.vue} +0 -0
  132. package/ui-cv/cv-steps/cv-steps.vue +293 -0
  133. package/{ui-uni/uni-swipe-action/uni-swipe-action.vue → ui-cv/cv-swipe-action/cv-swipe-action.vue} +0 -0
  134. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/bindingx.js +0 -0
  135. package/{ui-uni/uni-swipe-action-item/uni-swipe-action-item.vue → ui-cv/cv-swipe-action-item/cv-swipe-action-item.vue} +0 -0
  136. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/index.wxs +0 -0
  137. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/isPC.js +0 -0
  138. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/mpalipay.js +0 -0
  139. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/mpother.js +0 -0
  140. package/{ui-uni/uni-swipe-action-item → ui-cv/cv-swipe-action-item}/mpwxs.js +0 -0
  141. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +255 -0
  142. package/ui-cv/cv-switch/cv-switch.vue +5 -9
  143. package/ui-cv/cv-table/cv-table.vue +460 -0
  144. package/ui-cv/cv-tag/cv-tag.vue +276 -0
  145. package/ui-cv/cv-tbody/cv-tbody.vue +28 -0
  146. package/ui-cv/cv-td/cv-td.vue +93 -0
  147. package/{ui-uni/uni-test/uni-test.vue → ui-cv/cv-test/cv-test.vue} +0 -0
  148. package/ui-cv/cv-textarea/cv-textarea.vue +56 -41
  149. package/ui-cv/cv-th/cv-th.vue +270 -0
  150. package/{ui-uni/uni-th → ui-cv/cv-th}/filter-dropdown.vue +0 -0
  151. package/ui-cv/cv-thead/cv-thead.vue +114 -0
  152. package/ui-cv/cv-title/cv-title.vue +168 -0
  153. package/ui-cv/cv-tr/cv-tr.vue +166 -0
  154. package/{ui-uni/uni-tr → ui-cv/cv-tr}/table-checkbox.vue +0 -0
  155. package/{ui-uni/uni-transition → ui-cv/cv-transition}/createAnimation.js +0 -0
  156. package/ui-cv/cv-transition/cv-transition.vue +279 -0
  157. package/ui-cv/cv-upload-avatar/cv-upload-avatar.vue +24 -22
  158. package/ui-cv/cv-upload-img/cv-upload-img.vue +1 -1
  159. package/ui-cv/mixins/mixins-input.js +20 -29
  160. package/ui-cv/mixins/mixins-picker.js +1 -13
  161. package/ui-uni/amap-wx/js/util.js +158 -166
  162. package/ui-uni/product.vue +52 -52
  163. package/ui-uni/u-charts/u-charts.js +1092 -743
  164. package/ui-cv/cv-checkbox/cv-checkbox.vue +0 -140
  165. package/ui-cv/cv-checkbox-tag/cv-checkbox-tag.vue +0 -164
  166. package/ui-cv/cv-nav-group/cv-nav-group.vue +0 -33
  167. package/ui-cv/cv-radio/cv-radio.vue +0 -111
  168. package/ui-cv/cv-radio-sex/cv-radio-sex.vue +0 -80
  169. package/ui-cv/cv-radio-tag/cv-radio-tag.vue +0 -133
  170. package/ui-cv/mixins/mixins-checkbox.js +0 -71
  171. package/ui-cv/mixins/mixins-common.js +0 -53
  172. package/ui-cv/mixins/mixins-radio.js +0 -84
  173. package/ui-uni/page-foot/page-foot.vue +0 -38
  174. package/ui-uni/page-head/page-head.vue +0 -16
  175. package/ui-uni/u-link/u-link.vue +0 -59
  176. package/ui-uni/uni-badge/uni-badge.vue +0 -250
  177. package/ui-uni/uni-calendar/calendar.js +0 -546
  178. package/ui-uni/uni-calendar/uni-calendar-item.vue +0 -171
  179. package/ui-uni/uni-calendar/uni-calendar.vue +0 -504
  180. package/ui-uni/uni-card/uni-card.vue +0 -420
  181. package/ui-uni/uni-col/uni-col.vue +0 -2968
  182. package/ui-uni/uni-collapse/uni-collapse.vue +0 -146
  183. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +0 -378
  184. package/ui-uni/uni-combox/uni-combox.vue +0 -237
  185. package/ui-uni/uni-countdown/uni-countdown.vue +0 -234
  186. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +0 -792
  187. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +0 -142
  188. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +0 -364
  189. package/ui-uni/uni-data-picker/uni-data-picker.vue +0 -468
  190. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +0 -298
  191. package/ui-uni/uni-dateformat/uni-dateformat.vue +0 -88
  192. package/ui-uni/uni-datetime-picker/calendar.vue +0 -747
  193. package/ui-uni/uni-datetime-picker/time-picker.vue +0 -899
  194. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +0 -874
  195. package/ui-uni/uni-drawer/uni-drawer.vue +0 -178
  196. package/ui-uni/uni-easyinput/uni-easyinput.vue +0 -438
  197. package/ui-uni/uni-fab/uni-fab.vue +0 -443
  198. package/ui-uni/uni-fav/uni-fav.vue +0 -136
  199. package/ui-uni/uni-file-picker/uni-file-picker.vue +0 -614
  200. package/ui-uni/uni-forms/uni-forms.vue +0 -467
  201. package/ui-uni/uni-forms/validate.js +0 -486
  202. package/ui-uni/uni-forms-item/uni-forms-item.vue +0 -500
  203. package/ui-uni/uni-grid/uni-grid.vue +0 -141
  204. package/ui-uni/uni-grid-item/uni-grid-item.vue +0 -123
  205. package/ui-uni/uni-group/uni-group.vue +0 -123
  206. package/ui-uni/uni-icons/icons.js +0 -132
  207. package/ui-uni/uni-icons/uni-icons.vue +0 -72
  208. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +0 -142
  209. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +0 -357
  210. package/ui-uni/uni-link/uni-link.vue +0 -117
  211. package/ui-uni/uni-list/uni-list.vue +0 -107
  212. package/ui-uni/uni-list/uni-refresh.vue +0 -65
  213. package/ui-uni/uni-list-ad/uni-list-ad.vue +0 -106
  214. package/ui-uni/uni-list-item/uni-list-item.vue +0 -428
  215. package/ui-uni/uni-load-more/uni-load-more.vue +0 -366
  216. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +0 -244
  217. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +0 -394
  218. package/ui-uni/uni-number-box/uni-number-box.vue +0 -224
  219. package/ui-uni/uni-pagination/uni-pagination.vue +0 -376
  220. package/ui-uni/uni-popup/uni-popup.vue +0 -412
  221. package/ui-uni/uni-popup-message/uni-popup-message.vue +0 -143
  222. package/ui-uni/uni-rate/uni-rate.vue +0 -357
  223. package/ui-uni/uni-row/uni-row.vue +0 -155
  224. package/ui-uni/uni-search-bar/uni-search-bar.vue +0 -262
  225. package/ui-uni/uni-steps/uni-steps.vue +0 -250
  226. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +0 -205
  227. package/ui-uni/uni-table/uni-table.vue +0 -455
  228. package/ui-uni/uni-tag/uni-tag.vue +0 -283
  229. package/ui-uni/uni-tbody/uni-tbody.vue +0 -30
  230. package/ui-uni/uni-td/uni-td.vue +0 -88
  231. package/ui-uni/uni-th/uni-th.vue +0 -259
  232. package/ui-uni/uni-thead/uni-thead.vue +0 -114
  233. package/ui-uni/uni-title/uni-title.vue +0 -171
  234. package/ui-uni/uni-tr/uni-tr.vue +0 -156
  235. package/ui-uni/uni-transition/uni-transition.vue +0 -287
@@ -0,0 +1,358 @@
1
+ <template>
2
+ <view>
3
+ <view ref="cv-rate" class="cv-rate">
4
+ <view
5
+ class="cv-rate__icon"
6
+ :class="{ 'cv-cursor-not-allowed': disabled }"
7
+ :style="{ 'margin-right': marginNumber + 'px' }"
8
+ v-for="(star, index) in stars"
9
+ :key="index"
10
+ @touchstart.stop="touchstart"
11
+ @touchmove.stop="touchmove"
12
+ @mousedown.stop="mousedown"
13
+ @mousemove.stop="mousemove"
14
+ @mouseleave="mouseleave"
15
+ >
16
+ <cv-icons :color="color" :size="size" :type="isFill ? 'star-filled' : 'star'" />
17
+ <!-- #ifdef APP-NVUE -->
18
+ <view :style="{ width: (star.activeWitch.replace('%', '') * size) / 100 + 'px' }" class="cv-rate__icon-on">
19
+ <cv-icons style="text-align: left" :color="disabled ? '#ccc' : activeColor" :size="size" type="star-filled" />
20
+ </view>
21
+ <!-- #endif -->
22
+ <!-- #ifndef APP-NVUE -->
23
+ <view :style="{ width: star.activeWitch }" class="cv-rate__icon-on">
24
+ <cv-icons :color="disabled ? disabledColor : activeColor" :size="size" type="star-filled" />
25
+ </view>
26
+ <!-- #endif -->
27
+ </view>
28
+ </view>
29
+ </view>
30
+ </template>
31
+
32
+ <script>
33
+ // #ifdef APP-NVUE
34
+ const dom = uni.requireNativePlugin('dom');
35
+ // #endif
36
+ /**
37
+ * Rate 评分
38
+ * @description 评分组件
39
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=33
40
+ * @property {Boolean} isFill = [true|false] 星星的类型,是否为实心类型, 默认为实心
41
+ * @property {String} color 未选中状态的星星颜色,默认为 "#ececec"
42
+ * @property {String} activeColor 选中状态的星星颜色,默认为 "#ffca3e"
43
+ * @property {String} disabledColor 禁用状态的星星颜色,默认为 "#c0c0c0"
44
+ * @property {Number} size 星星的大小
45
+ * @property {Number} value/v-model 当前评分
46
+ * @property {Number} max 最大评分评分数量,目前一分一颗星
47
+ * @property {Number} margin 星星的间距,单位 px
48
+ * @property {Boolean} disabled = [true|false] 是否为禁用状态,默认为 false
49
+ * @property {Boolean} readonly = [true|false] 是否为只读状态,默认为 false
50
+ * @property {Boolean} allowHalf = [true|false] 是否实现半星,默认为 false
51
+ * @property {Boolean} touchable = [true|false] 是否支持滑动手势,默认为 true
52
+ * @event {Function} change uniRate 的 value 改变时触发事件,e={value:Number}
53
+ */
54
+
55
+ export default {
56
+ name: 'UniRate',
57
+ props: {
58
+ isFill: {
59
+ // 星星的类型,是否镂空
60
+ type: [Boolean, String],
61
+ default: true
62
+ },
63
+ color: {
64
+ // 星星未选中的颜色
65
+ type: String,
66
+ default: '#ececec'
67
+ },
68
+ activeColor: {
69
+ // 星星选中状态颜色
70
+ type: String,
71
+ default: '#ffca3e'
72
+ },
73
+ disabledColor: {
74
+ // 星星禁用状态颜色
75
+ type: String,
76
+ default: '#c0c0c0'
77
+ },
78
+ size: {
79
+ // 星星的大小
80
+ type: [Number, String],
81
+ default: 24
82
+ },
83
+ value: {
84
+ // 当前评分
85
+ type: [Number, String],
86
+ default: 1
87
+ },
88
+ modelValue: {
89
+ // 当前评分
90
+ type: [Number, String],
91
+ default: 1
92
+ },
93
+ max: {
94
+ // 最大评分
95
+ type: [Number, String],
96
+ default: 5
97
+ },
98
+ margin: {
99
+ // 星星的间距
100
+ type: [Number, String],
101
+ default: 0
102
+ },
103
+ disabled: {
104
+ // 是否可点击
105
+ type: [Boolean, String],
106
+ default: false
107
+ },
108
+ readonly: {
109
+ // 是否只读
110
+ type: [Boolean, String],
111
+ default: false
112
+ },
113
+ allowHalf: {
114
+ // 是否显示半星
115
+ type: [Boolean, String],
116
+ default: false
117
+ },
118
+ touchable: {
119
+ // 是否支持滑动手势
120
+ type: [Boolean, String],
121
+ default: true
122
+ }
123
+ },
124
+ data() {
125
+ return {
126
+ valueSync: '',
127
+ userMouseFristMove: true,
128
+ userRated: false,
129
+ userLastRate: 1
130
+ };
131
+ },
132
+ watch: {
133
+ value(newVal) {
134
+ this.valueSync = Number(newVal);
135
+ },
136
+ modelValue(newVal) {
137
+ this.valueSync = Number(newVal);
138
+ }
139
+ },
140
+ computed: {
141
+ stars() {
142
+ const value = this.valueSync ? this.valueSync : 0;
143
+ const starList = [];
144
+ const floorValue = Math.floor(value);
145
+ const ceilValue = Math.ceil(value);
146
+ for (let i = 0; i < this.max; i++) {
147
+ if (floorValue > i) {
148
+ starList.push({
149
+ activeWitch: '100%'
150
+ });
151
+ } else if (ceilValue - 1 === i) {
152
+ starList.push({
153
+ activeWitch: (value - floorValue) * 100 + '%'
154
+ });
155
+ } else {
156
+ starList.push({
157
+ activeWitch: '0'
158
+ });
159
+ }
160
+ }
161
+ return starList;
162
+ },
163
+
164
+ marginNumber() {
165
+ return Number(this.margin);
166
+ }
167
+ },
168
+ created() {
169
+ this.valueSync = Number(this.value || this.modelValue);
170
+ this._rateBoxLeft = 0;
171
+ this._oldValue = null;
172
+ },
173
+ mounted() {
174
+ setTimeout(() => {
175
+ this._getSize();
176
+ }, 100);
177
+ // #ifdef H5
178
+ this.PC = this.IsPC();
179
+ // #endif
180
+ },
181
+ methods: {
182
+ touchstart(e) {
183
+ // #ifdef H5
184
+ if (this.IsPC()) return;
185
+ // #endif
186
+ if (this.readonly || this.disabled) return;
187
+ const { clientX, screenX } = e.changedTouches[0];
188
+ // TODO 做一下兼容,只有 Nvue 下才有 screenX,其他平台式 clientX
189
+ this._getRateCount(clientX || screenX);
190
+ },
191
+ touchmove(e) {
192
+ // #ifdef H5
193
+ if (this.IsPC()) return;
194
+ // #endif
195
+ if (this.readonly || this.disabled || !this.touchable) return;
196
+ const { clientX, screenX } = e.changedTouches[0];
197
+ this._getRateCount(clientX || screenX);
198
+ },
199
+
200
+ /**
201
+ * 兼容 PC @tian
202
+ */
203
+
204
+ mousedown(e) {
205
+ // #ifdef H5
206
+ if (!this.IsPC()) return;
207
+ if (this.readonly || this.disabled) return;
208
+ const { clientX } = e;
209
+ this.userLastRate = this.valueSync;
210
+ this._getRateCount(clientX);
211
+ this.userRated = true;
212
+ // #endif
213
+ },
214
+ mousemove(e) {
215
+ // #ifdef H5
216
+ if (!this.IsPC()) return;
217
+ if (this.userRated) return;
218
+ if (this.userMouseFristMove) {
219
+ console.log('---mousemove----', this.valueSync);
220
+ this.userLastRate = this.valueSync;
221
+ this.userMouseFristMove = false;
222
+ }
223
+ if (this.readonly || this.disabled || !this.touchable) return;
224
+ const { clientX } = e;
225
+ this._getRateCount(clientX);
226
+ // #endif
227
+ },
228
+ mouseleave(e) {
229
+ // #ifdef H5
230
+ if (!this.IsPC()) return;
231
+ if (this.readonly || this.disabled || !this.touchable) return;
232
+ if (this.userRated) {
233
+ this.userRated = false;
234
+ return;
235
+ }
236
+ this.valueSync = this.userLastRate;
237
+ // #endif
238
+ },
239
+ // #ifdef H5
240
+ IsPC() {
241
+ var userAgentInfo = navigator.userAgent;
242
+ var Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod'];
243
+ var flag = true;
244
+ for (let v = 0; v < Agents.length - 1; v++) {
245
+ if (userAgentInfo.indexOf(Agents[v]) > 0) {
246
+ flag = false;
247
+ break;
248
+ }
249
+ }
250
+ return flag;
251
+ },
252
+ // #endif
253
+
254
+ /**
255
+ * 获取星星个数
256
+ */
257
+ _getRateCount(clientX) {
258
+ this._getSize();
259
+ const size = Number(this.size);
260
+ if (size === NaN) {
261
+ return new Error('size 属性只能设置为数字');
262
+ }
263
+ const rateMoveRange = clientX - this._rateBoxLeft;
264
+ let index = parseInt(rateMoveRange / (size + this.marginNumber));
265
+ index = index < 0 ? 0 : index;
266
+ index = index > this.max ? this.max : index;
267
+ const range = parseInt(rateMoveRange - (size + this.marginNumber) * index);
268
+ let value = 0;
269
+ if (this._oldValue === index && !this.PC) return;
270
+ this._oldValue = index;
271
+ if (this.allowHalf) {
272
+ if (range > size / 2) {
273
+ value = index + 1;
274
+ } else {
275
+ value = index + 0.5;
276
+ }
277
+ } else {
278
+ value = index + 1;
279
+ }
280
+
281
+ value = Math.max(0.5, Math.min(value, this.max));
282
+ this.valueSync = value;
283
+ this._onChange();
284
+ },
285
+
286
+ /**
287
+ * 触发动态修改
288
+ */
289
+ _onChange() {
290
+ this.$emit('input', this.valueSync);
291
+ this.$emit('update:modelValue', this.valueSync);
292
+ this.$emit('change', {
293
+ value: this.valueSync
294
+ });
295
+ },
296
+ /**
297
+ * 获取星星距离屏幕左侧距离
298
+ */
299
+ _getSize() {
300
+ // #ifndef APP-NVUE
301
+ uni
302
+ .createSelectorQuery()
303
+ .in(this)
304
+ .select('.cv-rate')
305
+ .boundingClientRect()
306
+ .exec((ret) => {
307
+ if (ret) {
308
+ this._rateBoxLeft = ret[0].left;
309
+ }
310
+ });
311
+ // #endif
312
+ // #ifdef APP-NVUE
313
+ dom.getComponentRect(this.$refs['cv-rate'], (ret) => {
314
+ const size = ret.size;
315
+ if (size) {
316
+ this._rateBoxLeft = size.left;
317
+ }
318
+ });
319
+ // #endif
320
+ }
321
+ }
322
+ };
323
+ </script>
324
+
325
+ <style scoped>
326
+ .cv-rate {
327
+ /* #ifndef APP-NVUE */
328
+ display: flex;
329
+ /* #endif */
330
+ line-height: 1;
331
+ font-size: 0;
332
+ flex-direction: row;
333
+ /* #ifdef H5 */
334
+ cursor: pointer;
335
+ /* #endif */
336
+ }
337
+
338
+ .cv-rate__icon {
339
+ position: relative;
340
+ line-height: 1;
341
+ font-size: 0;
342
+ }
343
+
344
+ .cv-rate__icon-on {
345
+ overflow: hidden;
346
+ position: absolute;
347
+ top: 0;
348
+ left: 0;
349
+ line-height: 1;
350
+ text-align: left;
351
+ }
352
+
353
+ .cv-cursor-not-allowed {
354
+ /* #ifdef H5 */
355
+ cursor: not-allowed !important;
356
+ /* #endif */
357
+ }
358
+ </style>
@@ -0,0 +1,157 @@
1
+ <template>
2
+ <view
3
+ :class="['uni-row', typeClass, justifyClass, alignClass]"
4
+ :style="{
5
+ marginLeft: `${Number(marginValue)}rpx`,
6
+ marginRight: `${Number(marginValue)}rpx`
7
+ }"
8
+ >
9
+ <slot></slot>
10
+ </view>
11
+ </template>
12
+
13
+ <script>
14
+ const ComponentClass = 'uni-row';
15
+ const modifierSeparator = '--';
16
+ /**
17
+ * Row 布局-行
18
+ * @description 流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。
19
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=3958
20
+ *
21
+ * @property {gutter} type = Number 栅格间隔
22
+ * @property {justify} type = String flex 布局下的水平排列方式
23
+ * 可选 start/end/center/space-around/space-between start
24
+ * 默认值 start
25
+ * @property {align} type = String flex 布局下的垂直排列方式
26
+ * 可选 top/middle/bottom
27
+ * 默认值 top
28
+ * @property {width} type = String|Number nvue下需要自行配置宽度用于计算
29
+ * 默认值 750
30
+ */
31
+
32
+ export default {
33
+ name: 'cvRow',
34
+ componentName: 'uniRow',
35
+ // #ifdef MP-WEIXIN
36
+ options: {
37
+ virtualHost: true // 在微信小程序中将组件节点渲染为虚拟节点,更加接近Vue组件的表现,可使用flex布局
38
+ },
39
+ // #endif
40
+ props: {
41
+ type: String,
42
+ gutter: Number,
43
+ justify: {
44
+ type: String,
45
+ default: 'start'
46
+ },
47
+ align: {
48
+ type: String,
49
+ default: 'top'
50
+ },
51
+ // nvue如果使用span等属性,需要配置宽度
52
+ width: {
53
+ type: [String, Number],
54
+ default: 750
55
+ }
56
+ },
57
+ created() {
58
+ // #ifdef APP-NVUE
59
+ this.type = 'flex';
60
+ // #endif
61
+ },
62
+ computed: {
63
+ marginValue() {
64
+ // #ifndef APP-NVUE
65
+ if (this.gutter) {
66
+ return -(this.gutter / 2);
67
+ }
68
+ // #endif
69
+ return 0;
70
+ },
71
+ typeClass() {
72
+ return this.type === 'flex' ? `${ComponentClass + modifierSeparator}flex` : '';
73
+ },
74
+ justifyClass() {
75
+ return this.justify !== 'start' ? `${ComponentClass + modifierSeparator}flex-justify-${this.justify}` : '';
76
+ },
77
+ alignClass() {
78
+ return this.align !== 'top' ? `${ComponentClass + modifierSeparator}flex-align-${this.align}` : '';
79
+ }
80
+ }
81
+ };
82
+ </script>
83
+
84
+ <style scoped>
85
+ .uni-row {
86
+ position: relative;
87
+ flex-direction: row;
88
+ /* #ifdef APP-NVUE */
89
+ flex: 1;
90
+ /* #endif */
91
+ /* #ifndef APP-NVUE */
92
+ box-sizing: border-box;
93
+ /* #endif */
94
+ }
95
+
96
+ /* #ifndef APP-NVUE */
97
+ .uni-row::before,
98
+ .uni-row::after {
99
+ display: table;
100
+ content: '';
101
+ }
102
+
103
+ .uni-row::after {
104
+ clear: both;
105
+ }
106
+
107
+ /* #endif */
108
+ /* #ifndef MP-QQ || MP-TOUTIAO || MP-BAIDU */
109
+ .uni-row--flex {
110
+ /* #ifndef APP-NVUE */
111
+ display: flex;
112
+ /* #endif */
113
+ flex-direction: row;
114
+ flex-wrap: wrap;
115
+ flex: 1;
116
+ }
117
+
118
+ .uni-row--flex:before,
119
+ .uni-row--flex:after {
120
+ /* #ifndef APP-NVUE */
121
+ display: none;
122
+ /* #endif */
123
+ }
124
+
125
+ .uni-row--flex-justify-center {
126
+ justify-content: center;
127
+ }
128
+
129
+ .uni-row--flex-justify-end {
130
+ justify-content: flex-end;
131
+ }
132
+
133
+ .uni-row--flex-justify-space-between {
134
+ justify-content: space-between;
135
+ }
136
+
137
+ .uni-row--flex-justify-space-around {
138
+ justify-content: space-around;
139
+ }
140
+
141
+ .uni-row--flex-align-middle {
142
+ align-items: center;
143
+ }
144
+
145
+ .uni-row--flex-align-bottom {
146
+ align-items: flex-end;
147
+ }
148
+
149
+ /* #endif */
150
+
151
+ /* #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ */
152
+ :host {
153
+ display: block;
154
+ }
155
+
156
+ /* #endif */
157
+ </style>
@@ -17,7 +17,7 @@
17
17
  placeholder-class="cv-search-center-input-item-placeholder"
18
18
  type="text"
19
19
  :placeholder="placeholder"
20
- @input="updateInput"
20
+ @input="funcOnInput"
21
21
  @confirm="onSearch"
22
22
  />
23
23
  </view>
@@ -62,13 +62,13 @@ export default {
62
62
  isSlotDefaule: false
63
63
  };
64
64
  },
65
- created: function () {
65
+ created() {
66
66
  this.localVal = this.value;
67
67
  this.isSlotDefaule = this.$slots.default ? true : false;
68
68
  // console.log(this.disableRealTime);
69
69
  },
70
70
  methods: {
71
- updateInput(e) {
71
+ funcOnInput(e) {
72
72
  /* 判断是否禁止实时更新父级数据 */
73
73
  if (this.disableRealTime === false) {
74
74
  this.$emit('input', this.localVal);
@@ -76,7 +76,7 @@ export default {
76
76
  },
77
77
  onEmpty() {
78
78
  this.localVal = '';
79
- this.updateInput();
79
+ this.funcOnInput();
80
80
  },
81
81
  onSearch() {
82
82
  this.$emit('search', this.localVal);