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