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

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 (168) hide show
  1. package/package.json +1 -1
  2. package/ui-cv/cv-form-item/cv-form-item.vue +1 -1
  3. package/ui-cv/cv-input-password/cv-input-password.vue +2 -2
  4. package/ui-uni/amap-wx/js/util.js +166 -158
  5. package/ui-uni/page-foot/page-foot.vue +38 -0
  6. package/ui-uni/page-head/page-head.vue +16 -0
  7. package/ui-uni/product.vue +52 -52
  8. package/ui-uni/u-charts/u-charts.js +743 -1092
  9. package/ui-uni/u-link/u-link.vue +59 -0
  10. package/ui-uni/uni-badge/uni-badge.vue +250 -0
  11. package/ui-uni/uni-calendar/calendar.js +546 -0
  12. package/ui-uni/uni-calendar/uni-calendar-item.vue +171 -0
  13. package/ui-uni/uni-calendar/uni-calendar.vue +504 -0
  14. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  15. package/ui-uni/uni-card/uni-card.vue +420 -0
  16. package/ui-uni/uni-col/uni-col.vue +2968 -0
  17. package/ui-uni/uni-collapse/uni-collapse.vue +146 -0
  18. package/ui-uni/uni-collapse-item/uni-collapse-item.vue +378 -0
  19. package/ui-uni/uni-combox/uni-combox.vue +237 -0
  20. package/ui-uni/uni-countdown/uni-countdown.vue +234 -0
  21. package/ui-uni/uni-data-checkbox/uni-data-checkbox.vue +792 -0
  22. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  23. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list-item.vue +142 -0
  24. package/ui-uni/uni-data-indexed-list/uni-data-indexed-list.vue +364 -0
  25. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  26. package/ui-uni/uni-data-picker/uni-data-picker.vue +468 -0
  27. package/{ui-cv/cv-data-pickerview/cv-data-picker.js → ui-uni/uni-data-pickerview/uni-data-picker.js} +0 -0
  28. package/ui-uni/uni-data-pickerview/uni-data-pickerview.vue +298 -0
  29. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  30. package/ui-uni/uni-dateformat/uni-dateformat.vue +88 -0
  31. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar-item.vue +0 -0
  32. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.js +0 -0
  33. package/ui-uni/uni-datetime-picker/calendar.vue +747 -0
  34. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  35. package/ui-uni/uni-datetime-picker/time-picker.vue +899 -0
  36. package/ui-uni/uni-datetime-picker/uni-datetime-picker.vue +874 -0
  37. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/util.js +0 -0
  38. package/ui-uni/uni-drawer/keypress.js +45 -0
  39. package/ui-uni/uni-drawer/uni-drawer.vue +178 -0
  40. package/{ui-cv/cv-easyinput → ui-uni/uni-easyinput}/common.js +0 -0
  41. package/ui-uni/uni-easyinput/uni-easyinput.vue +438 -0
  42. package/ui-uni/uni-fab/uni-fab.vue +443 -0
  43. package/{ui-cv/cv-fab/cv-fab.vue.bak → ui-uni/uni-fab/uni-fab.vue.bak} +2 -2
  44. package/ui-uni/uni-fav/uni-fav.vue +136 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  46. package/ui-uni/uni-file-picker/uni-file-picker.vue +614 -0
  47. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-file.vue +0 -0
  48. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/upload-image.vue +0 -0
  49. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/utils.js +0 -0
  50. package/ui-uni/uni-forms/uni-forms.vue +467 -0
  51. package/ui-uni/uni-forms/validate.js +486 -0
  52. package/ui-uni/uni-forms-item/uni-forms-item.vue +500 -0
  53. package/{ui-cv/cv-goods-nav/cv-goods-nav.vue → ui-uni/uni-goods-nav/uni-goods-nav.vue} +1 -1
  54. package/ui-uni/uni-grid/uni-grid.vue +141 -0
  55. package/ui-uni/uni-grid-item/uni-grid-item.vue +123 -0
  56. package/ui-uni/uni-group/uni-group.vue +123 -0
  57. package/ui-uni/uni-icons/icons.js +132 -0
  58. package/ui-uni/uni-icons/uni-icons.vue +72 -0
  59. package/{ui-cv/cv-icon2 → ui-uni/uni-icons}/uni.ttf +0 -0
  60. package/ui-uni/uni-indexed-list/uni-indexed-list-item.vue +142 -0
  61. package/ui-uni/uni-indexed-list/uni-indexed-list.vue +357 -0
  62. package/ui-uni/uni-link/uni-link.vue +117 -0
  63. package/ui-uni/uni-list/uni-list.vue +107 -0
  64. package/ui-uni/uni-list/uni-refresh.vue +65 -0
  65. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  66. package/ui-uni/uni-list-ad/uni-list-ad.vue +106 -0
  67. package/{ui-cv/cv-list-chat/cv-list-chat.scss → ui-uni/uni-list-chat/uni-list-chat.scss} +0 -0
  68. package/{ui-cv/cv-list-chat/cv-list-chat.vue → ui-uni/uni-list-chat/uni-list-chat.vue} +0 -0
  69. package/ui-uni/uni-list-item/uni-list-item.vue +428 -0
  70. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  71. package/ui-uni/uni-nav-bar/uni-nav-bar.vue +244 -0
  72. package/{ui-cv/cv-nav-bar/cv-status-bar.vue → ui-uni/uni-nav-bar/uni-status-bar.vue} +0 -0
  73. package/ui-uni/uni-notice-bar/uni-notice-bar.vue +394 -0
  74. package/ui-uni/uni-number-box/uni-number-box.vue +224 -0
  75. package/ui-uni/uni-pagination/uni-pagination.vue +376 -0
  76. package/{ui-cv/cv-popup → ui-uni/uni-popup}/keypress.js +0 -0
  77. package/{ui-cv/cv-popup → ui-uni/uni-popup}/popup.js +0 -0
  78. package/ui-uni/uni-popup/uni-popup.vue +412 -0
  79. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  80. package/{ui-cv/cv-popup-dialog/cv-popup-dialog.vue → ui-uni/uni-popup-dialog/uni-popup-dialog.vue} +0 -0
  81. package/ui-uni/uni-popup-message/uni-popup-message.vue +143 -0
  82. package/{ui-cv/cv-popup-share/cv-popup-share.vue → ui-uni/uni-popup-share/uni-popup-share.vue} +0 -0
  83. package/ui-uni/uni-rate/uni-rate.vue +357 -0
  84. package/ui-uni/uni-row/uni-row.vue +155 -0
  85. package/ui-uni/uni-search-bar/uni-search-bar.vue +262 -0
  86. package/{ui-cv/cv-section/cv-section.vue → ui-uni/uni-section/uni-section.vue} +0 -0
  87. package/{ui-cv/cv-segmented-control/cv-segmented-control.vue → ui-uni/uni-segmented-control/uni-segmented-control.vue} +0 -0
  88. package/{ui-cv/cv-status-bar/cv-status-bar.vue → ui-uni/uni-status-bar/uni-status-bar.vue} +0 -0
  89. package/ui-uni/uni-steps/uni-steps.vue +250 -0
  90. package/{ui-cv/cv-swipe-action/cv-swipe-action.vue → ui-uni/uni-swipe-action/uni-swipe-action.vue} +0 -0
  91. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/bindingx.js +0 -0
  92. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/index.wxs +0 -0
  93. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/isPC.js +0 -0
  94. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpalipay.js +0 -0
  95. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpother.js +0 -0
  96. package/{ui-cv/cv-swipe-action-item → ui-uni/uni-swipe-action-item}/mpwxs.js +0 -0
  97. 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
  98. package/ui-uni/uni-swiper-dot/uni-swiper-dot.vue +205 -0
  99. package/ui-uni/uni-table/uni-table.vue +455 -0
  100. package/ui-uni/uni-tag/uni-tag.vue +283 -0
  101. package/ui-uni/uni-tbody/uni-tbody.vue +30 -0
  102. package/ui-uni/uni-td/uni-td.vue +88 -0
  103. package/{ui-cv/cv-test/cv-test.vue → ui-uni/uni-test/uni-test.vue} +0 -0
  104. package/{ui-cv/cv-th → ui-uni/uni-th}/filter-dropdown.vue +0 -0
  105. package/ui-uni/uni-th/uni-th.vue +259 -0
  106. package/ui-uni/uni-thead/uni-thead.vue +114 -0
  107. package/ui-uni/uni-title/uni-title.vue +171 -0
  108. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  109. package/ui-uni/uni-tr/uni-tr.vue +156 -0
  110. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  111. package/ui-uni/uni-transition/uni-transition.vue +287 -0
  112. package/ui-cv/cv-badge/cv-badge.vue +0 -249
  113. package/ui-cv/cv-calendar/calendar.js +0 -963
  114. package/ui-cv/cv-calendar/cv-calendar-item.vue +0 -198
  115. package/ui-cv/cv-calendar/cv-calendar.vue +0 -508
  116. package/ui-cv/cv-card/cv-card.vue +0 -427
  117. package/ui-cv/cv-col/cv-col.vue +0 -2965
  118. package/ui-cv/cv-collapse/cv-collapse.vue +0 -146
  119. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +0 -395
  120. package/ui-cv/cv-combox/cv-combox.vue +0 -250
  121. package/ui-cv/cv-countdown/cv-countdown.vue +0 -245
  122. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +0 -841
  123. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +0 -154
  124. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +0 -376
  125. package/ui-cv/cv-data-picker/cv-data-picker.vue +0 -486
  126. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +0 -304
  127. package/ui-cv/cv-dateformat/cv-dateformat.vue +0 -86
  128. package/ui-cv/cv-datetime-picker/calendar.vue +0 -761
  129. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +0 -958
  130. package/ui-cv/cv-datetime-picker/time-picker.vue +0 -907
  131. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  132. package/ui-cv/cv-drawer/keypress.js +0 -45
  133. package/ui-cv/cv-easyinput/cv-easyinput.vue +0 -514
  134. package/ui-cv/cv-fab/cv-fab.vue +0 -465
  135. package/ui-cv/cv-fav/cv-fav.vue +0 -150
  136. package/ui-cv/cv-file-picker/cv-file-picker.vue +0 -619
  137. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  138. package/ui-cv/cv-form-base/validate.js +0 -477
  139. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  140. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  141. package/ui-cv/cv-icon2/cv-icon2.vue +0 -78
  142. package/ui-cv/cv-icon2/icons.js +0 -132
  143. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +0 -154
  144. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +0 -371
  145. package/ui-cv/cv-link2/cv-link2.vue +0 -130
  146. package/ui-cv/cv-list/cv-list.vue +0 -107
  147. package/ui-cv/cv-list/cv-refresh.vue +0 -65
  148. package/ui-cv/cv-list-ad/cv-list-ad.vue +0 -113
  149. package/ui-cv/cv-list-item/cv-list-item.vue +0 -449
  150. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +0 -256
  151. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +0 -453
  152. package/ui-cv/cv-number-box/cv-number-box.vue +0 -223
  153. package/ui-cv/cv-pagination/cv-pagination.vue +0 -397
  154. package/ui-cv/cv-popup/cv-popup.vue +0 -429
  155. package/ui-cv/cv-popup-message/cv-popup-message.vue +0 -143
  156. package/ui-cv/cv-row/cv-row.vue +0 -157
  157. package/ui-cv/cv-search-bar/cv-search-bar.vue +0 -280
  158. package/ui-cv/cv-steps/cv-steps.vue +0 -293
  159. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +0 -255
  160. package/ui-cv/cv-table/cv-table.vue +0 -460
  161. package/ui-cv/cv-tag/cv-tag.vue +0 -276
  162. package/ui-cv/cv-tbody/cv-tbody.vue +0 -28
  163. package/ui-cv/cv-td/cv-td.vue +0 -93
  164. package/ui-cv/cv-th/cv-th.vue +0 -270
  165. package/ui-cv/cv-thead/cv-thead.vue +0 -114
  166. package/ui-cv/cv-title/cv-title.vue +0 -168
  167. package/ui-cv/cv-tr/cv-tr.vue +0 -166
  168. package/ui-cv/cv-transition/cv-transition.vue +0 -279
@@ -0,0 +1,443 @@
1
+ <template>
2
+ <view class="uni-cursor-point">
3
+ <view v-if="popMenu && (leftBottom||rightBottom||leftTop||rightTop) && content.length > 0" :class="{
4
+ 'uni-fab--leftBottom': leftBottom,
5
+ 'uni-fab--rightBottom': rightBottom,
6
+ 'uni-fab--leftTop': leftTop,
7
+ 'uni-fab--rightTop': rightTop
8
+ }" class="uni-fab">
9
+ <view :class="{
10
+ 'uni-fab__content--left': horizontal === 'left',
11
+ 'uni-fab__content--right': horizontal === 'right',
12
+ 'uni-fab__content--flexDirection': direction === 'vertical',
13
+ 'uni-fab__content--flexDirectionStart': flexDirectionStart,
14
+ 'uni-fab__content--flexDirectionEnd': flexDirectionEnd,
15
+ 'uni-fab__content--other-platform': !isAndroidNvue
16
+ }" :style="{ width: boxWidth, height: boxHeight, backgroundColor: styles.backgroundColor }" class="uni-fab__content" elevation="5">
17
+ <view v-if="flexDirectionStart || horizontalLeft" class="uni-fab__item uni-fab__item--first" />
18
+ <view v-for="(item, index) in content" :key="index" :class="{ 'uni-fab__item--active': isShow }" class="uni-fab__item" @click="_onItemClick(index, item)">
19
+ <image :src="item.active ? item.selectedIconPath : item.iconPath" class="uni-fab__item-image" mode="widthFix" />
20
+ <text class="uni-fab__item-text" :style="{ color: item.active ? styles.selectedColor : styles.color }">{{ item.text }}</text>
21
+ </view>
22
+ <view v-if="flexDirectionEnd || horizontalRight" class="uni-fab__item uni-fab__item--first" />
23
+ </view>
24
+ </view>
25
+ <view :class="{
26
+ 'uni-fab__circle--leftBottom': leftBottom,
27
+ 'uni-fab__circle--rightBottom': rightBottom,
28
+ 'uni-fab__circle--leftTop': leftTop,
29
+ 'uni-fab__circle--rightTop': rightTop,
30
+ 'uni-fab__content--other-platform': !isAndroidNvue
31
+ }" class="uni-fab__circle uni-fab__plus" :style="{ 'background-color': styles.buttonColor }" @click="_onClick">
32
+ <view class="fab-circle-v" :class="{'uni-fab__plus--active': isShow && content.length > 0}"></view>
33
+ <view class="fab-circle-h" :class="{'uni-fab__plus--active': isShow && content.length > 0}"></view>
34
+ </view>
35
+ </view>
36
+ </template>
37
+
38
+ <script>
39
+ let platform = 'other'
40
+ // #ifdef APP-NVUE
41
+ platform = uni.getSystemInfoSync().platform
42
+ // #endif
43
+
44
+ /**
45
+ * Fab 悬浮按钮
46
+ * @description 点击可展开一个图形按钮菜单
47
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=144
48
+ * @property {Object} pattern 可选样式配置项
49
+ * @property {Object} horizontal = [left | right] 水平对齐方式
50
+ * @value left 左对齐
51
+ * @value right 右对齐
52
+ * @property {Object} vertical = [bottom | top] 垂直对齐方式
53
+ * @value bottom 下对齐
54
+ * @value top 上对齐
55
+ * @property {Object} direction = [horizontal | vertical] 展开菜单显示方式
56
+ * @value horizontal 水平显示
57
+ * @value vertical 垂直显示
58
+ * @property {Array} content 展开菜单内容配置项
59
+ * @property {Boolean} popMenu 是否使用弹出菜单
60
+ * @event {Function} trigger 展开菜单点击事件,返回点击信息
61
+ * @event {Function} fabClick 悬浮按钮点击事件
62
+ */
63
+ export default {
64
+ name: 'UniFab',
65
+ emits: ['fabClick', 'trigger'],
66
+ props: {
67
+ pattern: {
68
+ type: Object,
69
+ default () {
70
+ return {}
71
+ }
72
+ },
73
+ horizontal: {
74
+ type: String,
75
+ default: 'left'
76
+ },
77
+ vertical: {
78
+ type: String,
79
+ default: 'bottom'
80
+ },
81
+ direction: {
82
+ type: String,
83
+ default: 'horizontal'
84
+ },
85
+ content: {
86
+ type: Array,
87
+ default () {
88
+ return []
89
+ }
90
+ },
91
+ show: {
92
+ type: Boolean,
93
+ default: false
94
+ },
95
+ popMenu: {
96
+ type: Boolean,
97
+ default: true
98
+ }
99
+ },
100
+ data() {
101
+ return {
102
+ fabShow: false,
103
+ isShow: false,
104
+ isAndroidNvue: platform === 'android',
105
+ styles: {
106
+ color: '#3c3e49',
107
+ selectedColor: '#007AFF',
108
+ backgroundColor: '#fff',
109
+ buttonColor: '#007AFF'
110
+ }
111
+ }
112
+ },
113
+ computed: {
114
+ contentWidth(e) {
115
+ return (this.content.length + 1) * 55 + 10 + 'px'
116
+ },
117
+ contentWidthMin() {
118
+ return 55 + 'px'
119
+ },
120
+ // 动态计算宽度
121
+ boxWidth() {
122
+ return this.getPosition(3, 'horizontal')
123
+ },
124
+ // 动态计算高度
125
+ boxHeight() {
126
+ return this.getPosition(3, 'vertical')
127
+ },
128
+ // 计算左下位置
129
+ leftBottom() {
130
+ return this.getPosition(0, 'left', 'bottom')
131
+ },
132
+ // 计算右下位置
133
+ rightBottom() {
134
+ return this.getPosition(0, 'right', 'bottom')
135
+ },
136
+ // 计算左上位置
137
+ leftTop() {
138
+ return this.getPosition(0, 'left', 'top')
139
+ },
140
+ rightTop() {
141
+ return this.getPosition(0, 'right', 'top')
142
+ },
143
+ flexDirectionStart() {
144
+ return this.getPosition(1, 'vertical', 'top')
145
+ },
146
+ flexDirectionEnd() {
147
+ return this.getPosition(1, 'vertical', 'bottom')
148
+ },
149
+ horizontalLeft() {
150
+ return this.getPosition(2, 'horizontal', 'left')
151
+ },
152
+ horizontalRight() {
153
+ return this.getPosition(2, 'horizontal', 'right')
154
+ }
155
+ },
156
+ watch: {
157
+ pattern(newValue, oldValue) {
158
+ //console.log(JSON.stringify(newValue))
159
+ this.styles = Object.assign({}, this.styles, newValue)
160
+ }
161
+ },
162
+ created() {
163
+ this.isShow = this.show
164
+ if (this.top === 0) {
165
+ this.fabShow = true
166
+ }
167
+ // 初始化样式
168
+ this.styles = Object.assign({}, this.styles, this.pattern)
169
+ },
170
+ methods: {
171
+ _onClick() {
172
+ this.$emit('fabClick')
173
+ if (!this.popMenu) {
174
+ return
175
+ }
176
+ this.isShow = !this.isShow
177
+ },
178
+ open() {
179
+ this.isShow = true
180
+ },
181
+ close() {
182
+ this.isShow = false
183
+ },
184
+ /**
185
+ * 按钮点击事件
186
+ */
187
+ _onItemClick(index, item) {
188
+ this.$emit('trigger', {
189
+ index,
190
+ item
191
+ })
192
+ },
193
+ /**
194
+ * 获取 位置信息
195
+ */
196
+ getPosition(types, paramA, paramB) {
197
+ if (types === 0) {
198
+ return this.horizontal === paramA && this.vertical === paramB
199
+ } else if (types === 1) {
200
+ return this.direction === paramA && this.vertical === paramB
201
+ } else if (types === 2) {
202
+ return this.direction === paramA && this.horizontal === paramB
203
+ } else {
204
+ return this.isShow && this.direction === paramA ? this.contentWidth : this.contentWidthMin
205
+ }
206
+ }
207
+ }
208
+ }
209
+ </script>
210
+
211
+ <style scoped>
212
+ .uni-fab {
213
+ position: fixed;
214
+ /* #ifndef APP-NVUE */
215
+ display: flex;
216
+ /* #endif */
217
+ justify-content: center;
218
+ align-items: center;
219
+ z-index: 10;
220
+ }
221
+
222
+ .uni-cursor-point {
223
+ /* #ifdef H5 */
224
+ cursor: pointer;
225
+ /* #endif */
226
+ }
227
+
228
+ .uni-fab--active {
229
+ opacity: 1;
230
+ }
231
+
232
+ .uni-fab--leftBottom {
233
+ left: 5px;
234
+ bottom: 20px;
235
+ /* #ifdef H5 */
236
+ left: calc(5px + var(--window-left));
237
+ bottom: calc(20px + var(--window-bottom));
238
+ /* #endif */
239
+ padding: 10px;
240
+ }
241
+
242
+ .uni-fab--leftTop {
243
+ left: 5px;
244
+ top: 30px;
245
+ /* #ifdef H5 */
246
+ left: calc(5px + var(--window-left));
247
+ top: calc(30px + var(--window-top));
248
+ /* #endif */
249
+ padding: 10px;
250
+ }
251
+
252
+ .uni-fab--rightBottom {
253
+ right: 5px;
254
+ bottom: 20px;
255
+ /* #ifdef H5 */
256
+ right: calc(5px + var(--window-right));
257
+ bottom: calc(20px + var(--window-bottom));
258
+ /* #endif */
259
+ padding: 10px;
260
+ }
261
+
262
+ .uni-fab--rightTop {
263
+ right: 5px;
264
+ top: 30px;
265
+ /* #ifdef H5 */
266
+ right: calc(5px + var(--window-right));
267
+ top: calc(30px + var(--window-top));
268
+ /* #endif */
269
+ padding: 10px;
270
+ }
271
+
272
+ .uni-fab__circle {
273
+ position: fixed;
274
+ /* #ifndef APP-NVUE */
275
+ display: flex;
276
+ /* #endif */
277
+ justify-content: center;
278
+ align-items: center;
279
+ width: 55px;
280
+ height: 55px;
281
+ background-color: #3c3e49;
282
+ border-radius: 55px;
283
+ z-index: 11;
284
+ }
285
+
286
+ .uni-fab__circle--leftBottom {
287
+ left: 15px;
288
+ bottom: 30px;
289
+ /* #ifdef H5 */
290
+ left: calc(15px + var(--window-left));
291
+ bottom: calc(30px + var(--window-bottom));
292
+ /* #endif */
293
+ }
294
+
295
+ .uni-fab__circle--leftTop {
296
+ left: 15px;
297
+ top: 40px;
298
+ /* #ifdef H5 */
299
+ left: calc(15px + var(--window-left));
300
+ top: calc(40px + var(--window-top));
301
+ /* #endif */
302
+ }
303
+
304
+ .uni-fab__circle--rightBottom {
305
+ right: 15px;
306
+ bottom: 30px;
307
+ /* #ifdef H5 */
308
+ right: calc(15px + var(--window-right));
309
+ bottom: calc(30px + var(--window-bottom));
310
+ /* #endif */
311
+ }
312
+
313
+ .uni-fab__circle--rightTop {
314
+ right: 15px;
315
+ top: 40px;
316
+ /* #ifdef H5 */
317
+ right: calc(15px + var(--window-right));
318
+ top: calc(40px + var(--window-top));
319
+ /* #endif */
320
+ }
321
+
322
+ .uni-fab__circle--left {
323
+ left: 0;
324
+ }
325
+
326
+ .uni-fab__circle--right {
327
+ right: 0;
328
+ }
329
+
330
+ .uni-fab__circle--top {
331
+ top: 0;
332
+ }
333
+
334
+ .uni-fab__circle--bottom {
335
+ bottom: 0;
336
+ }
337
+
338
+ .uni-fab__plus {
339
+ font-weight: bold;
340
+ }
341
+
342
+ .fab-circle-v {
343
+ position: absolute;
344
+ width: 3px;
345
+ height: 31px;
346
+ left: 26px;
347
+ top: 12px;
348
+ background-color: white;
349
+ transform: rotate(0deg);
350
+ transition: transform 0.3s;
351
+ }
352
+
353
+ .fab-circle-h {
354
+ position: absolute;
355
+ width: 31px;
356
+ height: 3px;
357
+ left: 12px;
358
+ top: 26px;
359
+ background-color: white;
360
+ transform: rotate(0deg);
361
+ transition: transform 0.3s;
362
+ }
363
+
364
+ .uni-fab__plus--active {
365
+ transform: rotate(135deg);
366
+ }
367
+
368
+ .uni-fab__content {
369
+ /* #ifndef APP-NVUE */
370
+ box-sizing: border-box;
371
+ display: flex;
372
+ /* #endif */
373
+ flex-direction: row;
374
+ border-radius: 55px;
375
+ overflow: hidden;
376
+ transition-property: width, height;
377
+ transition-duration: 0.2s;
378
+ width: 55px;
379
+ border-color: #DDDDDD;
380
+ border-width: 1rpx;
381
+ border-style: solid;
382
+ }
383
+
384
+ .uni-fab__content--other-platform {
385
+ border-width: 0px;
386
+ box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.2);
387
+ }
388
+
389
+ .uni-fab__content--left {
390
+ justify-content: flex-start;
391
+ }
392
+
393
+ .uni-fab__content--right {
394
+ justify-content: flex-end;
395
+ }
396
+
397
+ .uni-fab__content--flexDirection {
398
+ flex-direction: column;
399
+ justify-content: flex-end;
400
+ }
401
+
402
+ .uni-fab__content--flexDirectionStart {
403
+ flex-direction: column;
404
+ justify-content: flex-start;
405
+ }
406
+
407
+ .uni-fab__content--flexDirectionEnd {
408
+ flex-direction: column;
409
+ justify-content: flex-end;
410
+ }
411
+
412
+ .uni-fab__item {
413
+ /* #ifndef APP-NVUE */
414
+ display: flex;
415
+ /* #endif */
416
+ flex-direction: column;
417
+ justify-content: center;
418
+ align-items: center;
419
+ width: 55px;
420
+ height: 55px;
421
+ opacity: 0;
422
+ transition: opacity 0.2s;
423
+ }
424
+
425
+ .uni-fab__item--active {
426
+ opacity: 1;
427
+ }
428
+
429
+ .uni-fab__item-image {
430
+ width: 25px;
431
+ height: 25px;
432
+ margin-bottom: 3px;
433
+ }
434
+
435
+ .uni-fab__item-text {
436
+ color: #FFFFFF;
437
+ font-size: 12px;
438
+ }
439
+
440
+ .uni-fab__item--first {
441
+ width: 55px;
442
+ }
443
+ </style>
@@ -38,11 +38,11 @@
38
38
  </template>
39
39
 
40
40
  <script>
41
- import cvIcon2 from "../cv-icon2/cv-icon2.vue";
41
+ import uniIcons from "../uni-icons/uni-icons.vue";
42
42
  export default {
43
43
  name: 'UniFab',
44
44
  components: {
45
- cvIcon2
45
+ uniIcons
46
46
  },
47
47
  props: {
48
48
  pattern: {
@@ -0,0 +1,136 @@
1
+ <template>
2
+ <view :class="[circle === true || circle === 'true' ? 'uni-fav--circle' : '']" :style="[{ backgroundColor: checked ? bgColorChecked : bgColor }]" @click="onClick" class="uni-fav">
3
+ <!-- #ifdef MP-ALIPAY -->
4
+ <view class="uni-fav-star" v-if="!checked && (star === true || star === 'true')">
5
+ <uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" size="14" type="star-filled" />
6
+ </view>
7
+ <!-- #endif -->
8
+ <!-- #ifndef MP-ALIPAY -->
9
+ <uni-icons :color="fgColor" :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-star" size="14" type="star-filled" v-if="!checked && (star === true || star === 'true')" />
10
+ <!-- #endif -->
11
+ <text :style="{color: checked ? fgColorChecked : fgColor}" class="uni-fav-text">{{ checked ? contentText.contentFav : contentText.contentDefault }}</text>
12
+ </view>
13
+ </template>
14
+
15
+ <script>
16
+ /**
17
+ * Fav 收藏按钮
18
+ * @description 用于收藏功能,可点击切换选中、不选中的状态
19
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=864
20
+ * @property {Boolean} star = [true|false] 按钮是否带星星
21
+ * @property {String} bgColor 未收藏时的背景色
22
+ * @property {String} bgColorChecked 已收藏时的背景色
23
+ * @property {String} fgColor 未收藏时的文字颜色
24
+ * @property {String} fgColorChecked 已收藏时的文字颜色
25
+ * @property {Boolean} circle = [true|false] 是否为圆角
26
+ * @property {Boolean} checked = [true|false] 是否为已收藏
27
+ * @property {Object} contentText = [true|false] 收藏按钮文字
28
+ * @event {Function} click 点击 fav按钮触发事件
29
+ * @example <uni-fav :checked="true"/>
30
+ */
31
+ export default {
32
+ name: "UniFav",
33
+ // TODO 兼容 vue3,需要注册事件
34
+ emits: ['click'],
35
+ props: {
36
+ star: {
37
+ type: [Boolean, String],
38
+ default: true
39
+ },
40
+ bgColor: {
41
+ type: String,
42
+ default: "#eeeeee"
43
+ },
44
+ fgColor: {
45
+ type: String,
46
+ default: "#666666"
47
+ },
48
+ bgColorChecked: {
49
+ type: String,
50
+ default: "#007aff"
51
+ },
52
+ fgColorChecked: {
53
+ type: String,
54
+ default: "#FFFFFF"
55
+ },
56
+ circle: {
57
+ type: [Boolean, String],
58
+ default: false
59
+ },
60
+ checked: {
61
+ type: Boolean,
62
+ default: false
63
+ },
64
+ contentText: {
65
+ type: Object,
66
+ default () {
67
+ return {
68
+ contentDefault: "收藏",
69
+ contentFav: "已收藏"
70
+ };
71
+ }
72
+ }
73
+ },
74
+ watch: {
75
+ checked() {
76
+ if (uni.report) {
77
+ if (this.checked) {
78
+ uni.report("收藏", "收藏");
79
+ } else {
80
+ uni.report("取消收藏", "取消收藏");
81
+ }
82
+ }
83
+ }
84
+ },
85
+ methods: {
86
+ onClick() {
87
+ this.$emit("click");
88
+ }
89
+ }
90
+ };
91
+ </script>
92
+
93
+ <style scoped>
94
+ .uni-fav {
95
+ /* #ifndef APP-NVUE */
96
+ display: flex;
97
+ /* #endif */
98
+ flex-direction: row;
99
+ align-items: center;
100
+ justify-content: center;
101
+ width: 60px;
102
+ height: 25px;
103
+ line-height: 25px;
104
+ text-align: center;
105
+ border-radius: 3px;
106
+ /* #ifdef H5 */
107
+ cursor: pointer;
108
+ /* #endif */
109
+ }
110
+
111
+ .uni-fav--circle {
112
+ border-radius: 30px;
113
+ }
114
+
115
+ .uni-fav-star {
116
+ /* #ifndef APP-NVUE */
117
+ display: flex;
118
+ /* #endif */
119
+ height: 25px;
120
+ line-height: 24px;
121
+ margin-right: 3px;
122
+ align-items: center;
123
+ justify-content: center;
124
+ }
125
+
126
+ .uni-fav-text {
127
+ /* #ifndef APP-NVUE */
128
+ display: flex;
129
+ /* #endif */
130
+ height: 25px;
131
+ line-height: 25px;
132
+ align-items: center;
133
+ justify-content: center;
134
+ font-size: 14px;
135
+ }
136
+ </style>