@10yun/cv-mobile-ui 0.4.1 → 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 (112) hide show
  1. package/package.json +1 -1
  2. package/ui-cv/cv-badge/{uni-badge.vue → cv-badge.vue} +2 -2
  3. package/ui-cv/cv-calendar/calendar.js +762 -345
  4. package/ui-cv/cv-calendar/cv-calendar-item.vue +198 -0
  5. package/ui-cv/cv-calendar/cv-calendar.vue +508 -0
  6. package/ui-cv/cv-card/cv-card.vue +427 -0
  7. package/ui-cv/cv-col/cv-col.vue +2965 -0
  8. package/ui-cv/cv-collapse/cv-collapse.vue +146 -0
  9. package/ui-cv/cv-collapse-item/cv-collapse-item.vue +395 -0
  10. package/ui-cv/cv-combox/cv-combox.vue +250 -0
  11. package/ui-cv/cv-countdown/cv-countdown.vue +245 -0
  12. package/ui-cv/cv-data-checkbox/cv-data-checkbox.vue +841 -0
  13. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list-item.vue +154 -0
  14. package/ui-cv/cv-data-indexed-list/cv-data-indexed-list.vue +376 -0
  15. package/ui-cv/cv-data-picker/cv-data-picker.vue +486 -0
  16. package/ui-cv/cv-data-pickerview/{uni-data-picker.js → cv-data-picker.js} +0 -0
  17. package/ui-cv/cv-data-pickerview/cv-data-pickerview.vue +304 -0
  18. package/ui-cv/cv-dateformat/cv-dateformat.vue +86 -0
  19. package/ui-cv/cv-datetime-picker/calendar.vue +752 -738
  20. package/ui-cv/cv-datetime-picker/cv-datetime-picker.vue +958 -0
  21. package/ui-cv/cv-datetime-picker/time-picker.vue +900 -892
  22. package/ui-cv/cv-easyinput/cv-easyinput.vue +514 -0
  23. package/ui-cv/cv-fab/cv-fab.vue +465 -0
  24. package/ui-cv/cv-fab/{uni-fab.vue.bak → cv-fab.vue.bak} +2 -2
  25. package/ui-cv/cv-fav/cv-fav.vue +150 -0
  26. package/ui-cv/cv-file-picker/cv-file-picker.vue +619 -0
  27. package/ui-cv/cv-form-item/cv-form-item.vue +1 -1
  28. package/ui-cv/cv-goods-nav/{uni-goods-nav.vue → cv-goods-nav.vue} +1 -1
  29. package/ui-cv/{cv-icons2/cv-icons2.vue → cv-icon2/cv-icon2.vue} +3 -3
  30. package/ui-cv/{cv-icons2 → cv-icon2}/icons.js +0 -0
  31. package/ui-cv/{cv-icons2 → cv-icon2}/uni.ttf +0 -0
  32. package/ui-cv/cv-indexed-list/cv-indexed-list-item.vue +154 -0
  33. package/ui-cv/cv-indexed-list/cv-indexed-list.vue +371 -0
  34. package/ui-cv/cv-input-password/cv-input-password.vue +2 -2
  35. package/ui-cv/{cv-link/uni-link.vue → cv-link2/cv-link2.vue} +1 -1
  36. package/ui-cv/cv-list/cv-list.vue +107 -0
  37. package/ui-cv/cv-list/cv-refresh.vue +65 -0
  38. package/ui-cv/cv-list-ad/cv-list-ad.vue +113 -0
  39. package/ui-cv/cv-list-chat/{uni-list-chat.scss → cv-list-chat.scss} +0 -0
  40. package/ui-cv/cv-list-chat/{uni-list-chat.vue → cv-list-chat.vue} +0 -0
  41. package/ui-cv/cv-list-item/cv-list-item.vue +449 -0
  42. package/ui-cv/cv-nav-bar/cv-nav-bar.vue +256 -0
  43. package/ui-cv/cv-nav-bar/{uni-status-bar.vue → cv-status-bar.vue} +0 -0
  44. package/ui-cv/cv-notice-bar/cv-notice-bar.vue +453 -0
  45. package/ui-cv/cv-number-box/cv-number-box.vue +223 -0
  46. package/ui-cv/cv-pagination/cv-pagination.vue +397 -0
  47. package/ui-cv/cv-popup/cv-popup.vue +429 -0
  48. package/ui-cv/cv-popup-dialog/{uni-popup-dialog.vue → cv-popup-dialog.vue} +0 -0
  49. package/ui-cv/cv-popup-message/cv-popup-message.vue +143 -0
  50. package/ui-cv/cv-popup-share/{uni-popup-share.vue → cv-popup-share.vue} +0 -0
  51. package/ui-cv/cv-row/{uni-row.vue → cv-row.vue} +1 -1
  52. package/ui-cv/cv-search-bar/cv-search-bar.vue +280 -0
  53. package/ui-cv/cv-section/{uni-section.vue → cv-section.vue} +0 -0
  54. package/ui-cv/cv-segmented-control/{uni-segmented-control.vue → cv-segmented-control.vue} +0 -0
  55. package/ui-cv/cv-status-bar/{uni-status-bar.vue → cv-status-bar.vue} +0 -0
  56. package/ui-cv/cv-steps/cv-steps.vue +293 -0
  57. package/ui-cv/cv-swipe-action/{uni-swipe-action.vue → cv-swipe-action.vue} +0 -0
  58. package/ui-cv/cv-swipe-action-item/{uni-swipe-action-item.vue → cv-swipe-action-item.vue} +0 -0
  59. package/ui-cv/cv-swiper-dot/cv-swiper-dot.vue +255 -0
  60. package/ui-cv/cv-table/cv-table.vue +460 -0
  61. package/ui-cv/cv-tag/cv-tag.vue +276 -0
  62. package/ui-cv/cv-tbody/cv-tbody.vue +28 -0
  63. package/ui-cv/cv-td/cv-td.vue +93 -0
  64. package/ui-cv/cv-test/{uni-test.vue → cv-test.vue} +0 -0
  65. package/ui-cv/cv-th/cv-th.vue +270 -0
  66. package/ui-cv/cv-thead/cv-thead.vue +114 -0
  67. package/ui-cv/cv-title/cv-title.vue +168 -0
  68. package/ui-cv/cv-tr/cv-tr.vue +166 -0
  69. package/ui-cv/cv-transition/cv-transition.vue +279 -0
  70. package/ui-cv/cv-calendar/uni-calendar-item.vue +0 -171
  71. package/ui-cv/cv-calendar/uni-calendar.vue +0 -504
  72. package/ui-cv/cv-card/uni-card.vue +0 -420
  73. package/ui-cv/cv-col/uni-col.vue +0 -2968
  74. package/ui-cv/cv-collapse/uni-collapse.vue +0 -146
  75. package/ui-cv/cv-collapse-item/uni-collapse-item.vue +0 -378
  76. package/ui-cv/cv-combox/uni-combox.vue +0 -237
  77. package/ui-cv/cv-countdown/uni-countdown.vue +0 -234
  78. package/ui-cv/cv-data-checkbox/uni-data-checkbox.vue +0 -792
  79. package/ui-cv/cv-data-indexed-list/uni-data-indexed-list-item.vue +0 -142
  80. package/ui-cv/cv-data-indexed-list/uni-data-indexed-list.vue +0 -364
  81. package/ui-cv/cv-data-picker/uni-data-picker.vue +0 -468
  82. package/ui-cv/cv-data-pickerview/uni-data-pickerview.vue +0 -298
  83. package/ui-cv/cv-dateformat/uni-dateformat.vue +0 -88
  84. package/ui-cv/cv-datetime-picker/uni-datetime-picker.vue +0 -874
  85. package/ui-cv/cv-easyinput/uni-easyinput.vue +0 -438
  86. package/ui-cv/cv-fab/uni-fab.vue +0 -443
  87. package/ui-cv/cv-fav/uni-fav.vue +0 -136
  88. package/ui-cv/cv-file-picker/uni-file-picker.vue +0 -614
  89. package/ui-cv/cv-indexed-list/uni-indexed-list-item.vue +0 -142
  90. package/ui-cv/cv-indexed-list/uni-indexed-list.vue +0 -357
  91. package/ui-cv/cv-list/uni-list.vue +0 -107
  92. package/ui-cv/cv-list/uni-refresh.vue +0 -65
  93. package/ui-cv/cv-list-ad/uni-list-ad.vue +0 -106
  94. package/ui-cv/cv-list-item/uni-list-item.vue +0 -428
  95. package/ui-cv/cv-nav-bar/uni-nav-bar.vue +0 -244
  96. package/ui-cv/cv-notice-bar/uni-notice-bar.vue +0 -394
  97. package/ui-cv/cv-number-box/uni-number-box.vue +0 -224
  98. package/ui-cv/cv-pagination/uni-pagination.vue +0 -376
  99. package/ui-cv/cv-popup/uni-popup.vue +0 -412
  100. package/ui-cv/cv-popup-message/uni-popup-message.vue +0 -143
  101. package/ui-cv/cv-search-bar/uni-search-bar.vue +0 -262
  102. package/ui-cv/cv-steps/uni-steps.vue +0 -250
  103. package/ui-cv/cv-swiper-dot/uni-swiper-dot.vue +0 -205
  104. package/ui-cv/cv-table/uni-table.vue +0 -455
  105. package/ui-cv/cv-tag/uni-tag.vue +0 -283
  106. package/ui-cv/cv-tbody/uni-tbody.vue +0 -30
  107. package/ui-cv/cv-td/uni-td.vue +0 -88
  108. package/ui-cv/cv-th/uni-th.vue +0 -259
  109. package/ui-cv/cv-thead/uni-thead.vue +0 -114
  110. package/ui-cv/cv-title/uni-title.vue +0 -171
  111. package/ui-cv/cv-tr/uni-tr.vue +0 -156
  112. package/ui-cv/cv-transition/uni-transition.vue +0 -287
@@ -0,0 +1,256 @@
1
+ <template>
2
+ <view class="uni-navbar">
3
+ <view
4
+ :class="{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }"
5
+ :style="{ 'background-color': backgroundColor }"
6
+ class="uni-navbar__content"
7
+ >
8
+ <status-bar v-if="statusBar" />
9
+ <view :style="{ color: color, backgroundColor: backgroundColor }" class="uni-navbar__header uni-navbar__content_view">
10
+ <view @tap="onClickLeft" class="uni-navbar__header-btns uni-navbar__header-btns-left uni-navbar__content_view">
11
+ <view class="uni-navbar__content_view" v-if="leftIcon.length">
12
+ <cv-icon2 :color="color" :type="leftIcon" size="24" />
13
+ </view>
14
+ <view
15
+ :class="{ 'uni-navbar-btn-icon-left': !leftIcon.length }"
16
+ class="uni-navbar-btn-text uni-navbar__content_view"
17
+ v-if="leftText.length"
18
+ >
19
+ <text :style="{ color: color, fontSize: '14px' }">{{ leftText }}</text>
20
+ </view>
21
+ <slot name="left" />
22
+ </view>
23
+ <view class="uni-navbar__header-container uni-navbar__content_view" @tap="onClickTitle">
24
+ <view class="uni-navbar__header-container-inner uni-navbar__content_view" v-if="title.length">
25
+ <text class="uni-nav-bar-text" :style="{ color: color }">{{ title }}</text>
26
+ </view>
27
+ <!-- 标题插槽 -->
28
+ <slot />
29
+ </view>
30
+ <view
31
+ :class="title.length ? 'uni-navbar__header-btns-right' : ''"
32
+ @tap="onClickRight"
33
+ class="uni-navbar__header-btns uni-navbar__content_view"
34
+ >
35
+ <view class="uni-navbar__content_view" v-if="rightIcon.length">
36
+ <cv-icon2 :color="color" :type="rightIcon" size="24" />
37
+ </view>
38
+ <!-- 优先显示图标 -->
39
+ <view class="uni-navbar-btn-text uni-navbar__content_view" v-if="rightText.length && !rightIcon.length">
40
+ <text class="uni-nav-bar-right-text">{{ rightText }}</text>
41
+ </view>
42
+ <slot name="right" />
43
+ </view>
44
+ </view>
45
+ </view>
46
+ <view class="uni-navbar__placeholder" v-if="fixed">
47
+ <status-bar v-if="statusBar" />
48
+ <view class="uni-navbar__placeholder-view" />
49
+ </view>
50
+ </view>
51
+ </template>
52
+
53
+ <script>
54
+ import statusBar from './cv-status-bar.vue';
55
+
56
+ /**
57
+ * NavBar 自定义导航栏
58
+ * @description 导航栏组件,主要用于头部导航
59
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=52
60
+ * @property {String} title 标题文字
61
+ * @property {String} leftText 左侧按钮文本
62
+ * @property {String} rightText 右侧按钮文本
63
+ * @property {String} leftIcon 左侧按钮图标(图标类型参考 [Icon 图标](http://ext.dcloud.net.cn/plugin?id=28) type 属性)
64
+ * @property {String} rightIcon 右侧按钮图标(图标类型参考 [Icon 图标](http://ext.dcloud.net.cn/plugin?id=28) type 属性)
65
+ * @property {String} color 图标和文字颜色
66
+ * @property {String} backgroundColor 导航栏背景颜色
67
+ * @property {Boolean} fixed = [true|false] 是否固定顶部
68
+ * @property {Boolean} statusBar = [true|false] 是否包含状态栏
69
+ * @property {Boolean} shadow = [true|false] 导航栏下是否有阴影
70
+ * @event {Function} clickLeft 左侧按钮点击时触发
71
+ * @event {Function} clickRight 右侧按钮点击时触发
72
+ * @event {Function} clickTitle 中间标题点击时触发
73
+ */
74
+ export default {
75
+ name: 'cvNavBar',
76
+ components: {
77
+ statusBar
78
+ },
79
+ emits: ['clickLeft', 'clickRight', 'clickTitle'],
80
+ props: {
81
+ title: {
82
+ type: String,
83
+ default: ''
84
+ },
85
+ leftText: {
86
+ type: String,
87
+ default: ''
88
+ },
89
+ rightText: {
90
+ type: String,
91
+ default: ''
92
+ },
93
+ leftIcon: {
94
+ type: String,
95
+ default: ''
96
+ },
97
+ rightIcon: {
98
+ type: String,
99
+ default: ''
100
+ },
101
+ fixed: {
102
+ type: [Boolean, String],
103
+ default: false
104
+ },
105
+ color: {
106
+ type: String,
107
+ default: '#000000'
108
+ },
109
+ backgroundColor: {
110
+ type: String,
111
+ default: '#FFFFFF'
112
+ },
113
+ statusBar: {
114
+ type: [Boolean, String],
115
+ default: false
116
+ },
117
+ shadow: {
118
+ type: [Boolean, String],
119
+ default: false
120
+ },
121
+ border: {
122
+ type: [Boolean, String],
123
+ default: true
124
+ }
125
+ },
126
+ mounted() {
127
+ if (uni.report && this.title !== '') {
128
+ uni.report('title', this.title);
129
+ }
130
+ },
131
+ methods: {
132
+ onClickLeft() {
133
+ this.$emit('clickLeft');
134
+ },
135
+ onClickRight() {
136
+ this.$emit('clickRight');
137
+ },
138
+ onClickTitle() {
139
+ this.$emit('clickTitle');
140
+ }
141
+ }
142
+ };
143
+ </script>
144
+
145
+ <style scoped>
146
+ .uni-nav-bar-text {
147
+ /* #ifdef APP-PLUS */
148
+ font-size: 34rpx;
149
+ /* #endif */
150
+ /* #ifndef APP-PLUS */
151
+ font-size: 16px;
152
+ /* #endif */
153
+ }
154
+
155
+ .uni-nav-bar-right-text {
156
+ font-size: 14px;
157
+ }
158
+
159
+ .uni-navbar__content {
160
+ position: relative;
161
+ background-color: #ffffff;
162
+ overflow: hidden;
163
+ }
164
+
165
+ .uni-navbar__content_view {
166
+ /* #ifndef APP-NVUE */
167
+ display: flex;
168
+ /* #endif */
169
+ align-items: center;
170
+ flex-direction: row;
171
+ }
172
+
173
+ .uni-navbar__header {
174
+ /* #ifndef APP-NVUE */
175
+ display: flex;
176
+ /* #endif */
177
+ flex-direction: row;
178
+ height: 44px;
179
+ line-height: 44px;
180
+ font-size: 16px;
181
+ }
182
+
183
+ .uni-navbar__header-btns {
184
+ /* #ifndef APP-NVUE */
185
+ display: flex;
186
+ /* #endif */
187
+ flex-wrap: nowrap;
188
+ width: 120rpx;
189
+ padding: 0 6px;
190
+ justify-content: center;
191
+ align-items: center;
192
+ /* #ifdef H5 */
193
+ cursor: pointer;
194
+ /* #endif */
195
+ }
196
+
197
+ .uni-navbar__header-btns-left {
198
+ /* #ifndef APP-NVUE */
199
+ display: flex;
200
+ /* #endif */
201
+ width: 150rpx;
202
+ justify-content: flex-start;
203
+ }
204
+
205
+ .uni-navbar__header-btns-right {
206
+ /* #ifndef APP-NVUE */
207
+ display: flex;
208
+ /* #endif */
209
+ width: 150rpx;
210
+ padding-right: 30rpx;
211
+ justify-content: flex-end;
212
+ }
213
+
214
+ .uni-navbar__header-container {
215
+ flex: 1;
216
+ }
217
+
218
+ .uni-navbar__header-container-inner {
219
+ /* #ifndef APP-NVUE */
220
+ display: flex;
221
+ /* #endif */
222
+ flex: 1;
223
+ align-items: center;
224
+ justify-content: center;
225
+ font-size: 14px;
226
+ }
227
+
228
+ .uni-navbar__placeholder-view {
229
+ height: 44px;
230
+ }
231
+
232
+ .uni-navbar--fixed {
233
+ position: fixed;
234
+ z-index: 998;
235
+ /* #ifdef H5 */
236
+ left: var(--window-left);
237
+ right: var(--window-right);
238
+ /* #endif */
239
+ /* #ifndef H5 */
240
+ left: 0;
241
+ right: 0;
242
+ /* #endif */
243
+ }
244
+
245
+ .uni-navbar--shadow {
246
+ /* #ifndef APP-NVUE */
247
+ box-shadow: 0 1px 6px #ccc;
248
+ /* #endif */
249
+ }
250
+
251
+ .uni-navbar--border {
252
+ border-bottom-width: 1rpx;
253
+ border-bottom-style: solid;
254
+ border-bottom-color: #e5e5e5;
255
+ }
256
+ </style>
@@ -0,0 +1,453 @@
1
+ <template>
2
+ <view v-if="show" class="uni-noticebar" :style="{ backgroundColor: backgroundColor }" @click="onClick">
3
+ <!-- #ifdef MP-ALIPAY -->
4
+ <view v-if="showClose === true || showClose === 'true'" class="uni-noticebar-close uni-cursor-point" @click="close">
5
+ <cv-icon2 type="closeempty" :color="color" size="12" />
6
+ </view>
7
+ <view v-if="showIcon === true || showIcon === 'true'" class="uni-noticebar-icon">
8
+ <cv-icon2 type="sound" :color="color" size="14" />
9
+ </view>
10
+ <!-- #endif -->
11
+ <!-- #ifndef MP-ALIPAY -->
12
+ <cv-icon2
13
+ v-if="showClose === true || showClose === 'true'"
14
+ class="uni-noticebar-close uni-cursor-point"
15
+ type="closeempty"
16
+ :color="color"
17
+ size="12"
18
+ @click="close"
19
+ />
20
+ <cv-icon2 v-if="showIcon === true || showIcon === 'true'" class="uni-noticebar-icon" type="sound" :color="color" size="14" />
21
+ <!-- #endif -->
22
+ <view
23
+ ref="textBox"
24
+ class="uni-noticebar__content-wrapper"
25
+ :class="{
26
+ 'uni-noticebar__content-wrapper--scrollable': scrollable,
27
+ 'uni-noticebar__content-wrapper--single': !scrollable && (single || moreText)
28
+ }"
29
+ >
30
+ <view
31
+ :id="elIdBox"
32
+ class="uni-noticebar__content"
33
+ :class="{
34
+ 'uni-noticebar__content--scrollable': scrollable,
35
+ 'uni-noticebar__content--single': !scrollable && (single || moreText)
36
+ }"
37
+ >
38
+ <text
39
+ :id="elId"
40
+ ref="animationEle"
41
+ class="uni-noticebar__content-text"
42
+ :class="{
43
+ 'uni-noticebar__content-text--scrollable': scrollable,
44
+ 'uni-noticebar__content-text--single': !scrollable && (single || moreText)
45
+ }"
46
+ :style="{
47
+ color: color,
48
+ width: wrapWidth + 'px',
49
+ animationDuration: animationDuration,
50
+ '-webkit-animationDuration': animationDuration,
51
+ animationPlayState: webviewHide ? 'paused' : animationPlayState,
52
+ '-webkit-animationPlayState': webviewHide ? 'paused' : animationPlayState,
53
+ animationDelay: animationDelay,
54
+ '-webkit-animationDelay': animationDelay
55
+ }"
56
+ >
57
+ {{ text }}
58
+ </text>
59
+ </view>
60
+ </view>
61
+ <view v-if="showGetMore === true || showGetMore === 'true'" class="uni-noticebar__more uni-cursor-point" @click="clickMore">
62
+ <text v-if="moreText" :style="{ color: moreColor }" class="uni-noticebar__more-text">{{ moreText }}</text>
63
+ <cv-icon2 type="arrowright" :color="moreColor" size="14" />
64
+ </view>
65
+ </view>
66
+ </template>
67
+
68
+ <script>
69
+ // #ifdef APP-NVUE
70
+ const dom = weex.requireModule('dom');
71
+ const animation = weex.requireModule('animation');
72
+ // #endif
73
+
74
+ /**
75
+ * NoticeBar 自定义导航栏
76
+ * @description 通告栏组件
77
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=30
78
+ * @property {Number} speed 文字滚动的速度,默认100px/秒
79
+ * @property {String} text 显示文字
80
+ * @property {String} backgroundColor 背景颜色
81
+ * @property {String} color 文字颜色
82
+ * @property {String} moreColor 查看更多文字的颜色
83
+ * @property {String} moreText 设置“查看更多”的文本
84
+ * @property {Boolean} single = [true|false] 是否单行
85
+ * @property {Boolean} scrollable = [true|false] 是否滚动,为true时,NoticeBar为单行
86
+ * @property {Boolean} showIcon = [true|false] 是否显示左侧喇叭图标
87
+ * @property {Boolean} showClose = [true|false] 是否显示左侧关闭按钮
88
+ * @property {Boolean} showGetMore = [true|false] 是否显示右侧查看更多图标,为true时,NoticeBar为单行
89
+ * @event {Function} click 点击 NoticeBar 触发事件
90
+ * @event {Function} close 关闭 NoticeBar 触发事件
91
+ * @event {Function} getmore 点击”查看更多“时触发事件
92
+ */
93
+
94
+ export default {
95
+ name: 'UniNoticeBar',
96
+ emits: ['click', 'getmore', 'close'],
97
+ props: {
98
+ text: {
99
+ type: String,
100
+ default: ''
101
+ },
102
+ moreText: {
103
+ type: String,
104
+ default: ''
105
+ },
106
+ backgroundColor: {
107
+ type: String,
108
+ default: '#fffbe8'
109
+ },
110
+ speed: {
111
+ // 默认1s滚动100px
112
+ type: Number,
113
+ default: 100
114
+ },
115
+ color: {
116
+ type: String,
117
+ default: '#de8c17'
118
+ },
119
+ moreColor: {
120
+ type: String,
121
+ default: '#999999'
122
+ },
123
+ single: {
124
+ // 是否单行
125
+ type: [Boolean, String],
126
+ default: false
127
+ },
128
+ scrollable: {
129
+ // 是否滚动,添加后控制单行效果取消
130
+ type: [Boolean, String],
131
+ default: false
132
+ },
133
+ showIcon: {
134
+ // 是否显示左侧icon
135
+ type: [Boolean, String],
136
+ default: false
137
+ },
138
+ showGetMore: {
139
+ // 是否显示右侧查看更多
140
+ type: [Boolean, String],
141
+ default: false
142
+ },
143
+ showClose: {
144
+ // 是否显示左侧关闭按钮
145
+ type: [Boolean, String],
146
+ default: false
147
+ }
148
+ },
149
+ data() {
150
+ const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`;
151
+ const elIdBox = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`;
152
+ return {
153
+ textWidth: 0,
154
+ boxWidth: 0,
155
+ wrapWidth: '',
156
+ webviewHide: false,
157
+ // #ifdef APP-NVUE
158
+ stopAnimation: false,
159
+ // #endif
160
+ elId: elId,
161
+ elIdBox: elIdBox,
162
+ show: true,
163
+ animationDuration: 'none',
164
+ animationPlayState: 'paused',
165
+ animationDelay: '0s'
166
+ };
167
+ },
168
+ mounted() {
169
+ // #ifdef APP-PLUS
170
+ var pages = getCurrentPages();
171
+ var page = pages[pages.length - 1];
172
+ var currentWebview = page.$getAppWebview();
173
+ currentWebview.addEventListener('hide', () => {
174
+ this.webviewHide = true;
175
+ });
176
+ currentWebview.addEventListener('show', () => {
177
+ this.webviewHide = false;
178
+ });
179
+ // #endif
180
+ this.$nextTick(() => {
181
+ this.initSize();
182
+ });
183
+ },
184
+ // #ifdef APP-NVUE
185
+ beforeDestroy() {
186
+ this.stopAnimation = true;
187
+ },
188
+ // #endif
189
+ methods: {
190
+ initSize() {
191
+ if (this.scrollable) {
192
+ // #ifndef APP-NVUE
193
+ let query = [],
194
+ boxWidth = 0,
195
+ textWidth = 0;
196
+ let textQuery = new Promise((resolve, reject) => {
197
+ uni
198
+ .createSelectorQuery()
199
+ // #ifndef MP-ALIPAY
200
+ .in(this)
201
+ // #endif
202
+ .select(`#${this.elId}`)
203
+ .boundingClientRect()
204
+ .exec((ret) => {
205
+ this.textWidth = ret[0].width;
206
+ resolve();
207
+ });
208
+ });
209
+ let boxQuery = new Promise((resolve, reject) => {
210
+ uni
211
+ .createSelectorQuery()
212
+ // #ifndef MP-ALIPAY
213
+ .in(this)
214
+ // #endif
215
+ .select(`#${this.elIdBox}`)
216
+ .boundingClientRect()
217
+ .exec((ret) => {
218
+ this.boxWidth = ret[0].width;
219
+ resolve();
220
+ });
221
+ });
222
+ query.push(textQuery);
223
+ query.push(boxQuery);
224
+ Promise.all(query).then(() => {
225
+ this.animationDuration = `${this.textWidth / this.speed}s`;
226
+ this.animationDelay = `-${this.boxWidth / this.speed}s`;
227
+ setTimeout(() => {
228
+ this.animationPlayState = 'running';
229
+ }, 1000);
230
+ });
231
+ // #endif
232
+ // #ifdef APP-NVUE
233
+ dom.getComponentRect(this.$refs['animationEle'], (res) => {
234
+ let winWidth = uni.getSystemInfoSync().windowWidth;
235
+ this.textWidth = res.size.width;
236
+ animation.transition(
237
+ this.$refs['animationEle'],
238
+ {
239
+ styles: {
240
+ transform: `translateX(-${winWidth}px)`
241
+ },
242
+ duration: 0,
243
+ timingFunction: 'linear',
244
+ delay: 0
245
+ },
246
+ () => {
247
+ if (!this.stopAnimation) {
248
+ animation.transition(
249
+ this.$refs['animationEle'],
250
+ {
251
+ styles: {
252
+ transform: `translateX(-${this.textWidth}px)`
253
+ },
254
+ timingFunction: 'linear',
255
+ duration: ((this.textWidth - winWidth) / this.speed) * 1000,
256
+ delay: 1000
257
+ },
258
+ () => {
259
+ if (!this.stopAnimation) {
260
+ this.loopAnimation();
261
+ }
262
+ }
263
+ );
264
+ }
265
+ }
266
+ );
267
+ });
268
+ // #endif
269
+ }
270
+ // #ifdef APP-NVUE
271
+ if (!this.scrollable && (this.single || this.moreText)) {
272
+ dom.getComponentRect(this.$refs['textBox'], (res) => {
273
+ this.wrapWidth = res.size.width;
274
+ });
275
+ }
276
+ // #endif
277
+ },
278
+ loopAnimation() {
279
+ // #ifdef APP-NVUE
280
+ animation.transition(
281
+ this.$refs['animationEle'],
282
+ {
283
+ styles: {
284
+ transform: `translateX(0px)`
285
+ },
286
+ duration: 0
287
+ },
288
+ () => {
289
+ if (!this.stopAnimation) {
290
+ animation.transition(
291
+ this.$refs['animationEle'],
292
+ {
293
+ styles: {
294
+ transform: `translateX(-${this.textWidth}px)`
295
+ },
296
+ duration: (this.textWidth / this.speed) * 1000,
297
+ timingFunction: 'linear',
298
+ delay: 0
299
+ },
300
+ () => {
301
+ if (!this.stopAnimation) {
302
+ this.loopAnimation();
303
+ }
304
+ }
305
+ );
306
+ }
307
+ }
308
+ );
309
+ // #endif
310
+ },
311
+ clickMore() {
312
+ this.$emit('getmore');
313
+ },
314
+ close() {
315
+ this.show = false;
316
+ this.$emit('close');
317
+ },
318
+ onClick() {
319
+ this.$emit('click');
320
+ }
321
+ }
322
+ };
323
+ </script>
324
+
325
+ <style scoped>
326
+ .uni-noticebar {
327
+ /* #ifndef APP-NVUE */
328
+ display: flex;
329
+ width: 100%;
330
+ box-sizing: border-box;
331
+ /* #endif */
332
+ flex-direction: row;
333
+ align-items: center;
334
+ padding: 6px 12px;
335
+ margin-bottom: 10px;
336
+ }
337
+
338
+ .uni-cursor-point {
339
+ /* #ifdef H5 */
340
+ cursor: pointer;
341
+ /* #endif */
342
+ }
343
+
344
+ .uni-noticebar-close {
345
+ margin-right: 5px;
346
+ }
347
+
348
+ .uni-noticebar-icon {
349
+ margin-right: 5px;
350
+ }
351
+
352
+ .uni-noticebar__content-wrapper {
353
+ flex: 1;
354
+ flex-direction: column;
355
+ overflow: hidden;
356
+ }
357
+
358
+ .uni-noticebar__content-wrapper--single {
359
+ /* #ifndef APP-NVUE */
360
+ line-height: 18px;
361
+ /* #endif */
362
+ }
363
+
364
+ .uni-noticebar__content-wrapper--single,
365
+ .uni-noticebar__content-wrapper--scrollable {
366
+ flex-direction: row;
367
+ }
368
+
369
+ /* #ifndef APP-NVUE */
370
+ .uni-noticebar__content-wrapper--scrollable {
371
+ position: relative;
372
+ height: 18px;
373
+ }
374
+
375
+ /* #endif */
376
+ .uni-noticebar__content--scrollable {
377
+ /* #ifdef APP-NVUE */
378
+ flex: 0;
379
+ /* #endif */
380
+ /* #ifndef APP-NVUE */
381
+ flex: 1;
382
+ display: block;
383
+ overflow: hidden;
384
+ /* #endif */
385
+ }
386
+
387
+ .uni-noticebar__content--single {
388
+ /* #ifndef APP-NVUE */
389
+ display: flex;
390
+ flex: none;
391
+ width: 100%;
392
+ justify-content: center;
393
+ /* #endif */
394
+ }
395
+
396
+ .uni-noticebar__content-text {
397
+ font-size: 14px;
398
+ line-height: 18px;
399
+ /* #ifndef APP-NVUE */
400
+ word-break: break-all;
401
+ /* #endif */
402
+ }
403
+
404
+ .uni-noticebar__content-text--single {
405
+ /* #ifdef APP-NVUE */
406
+ lines: 1;
407
+ /* #endif */
408
+ /* #ifndef APP-NVUE */
409
+ display: block;
410
+ width: 100%;
411
+ white-space: nowrap;
412
+ /* #endif */
413
+ overflow: hidden;
414
+ text-overflow: ellipsis;
415
+ }
416
+
417
+ .uni-noticebar__content-text--scrollable {
418
+ /* #ifdef APP-NVUE */
419
+ lines: 1;
420
+ padding-left: 750rpx;
421
+ /* #endif */
422
+ /* #ifndef APP-NVUE */
423
+ position: absolute;
424
+ display: block;
425
+ height: 18px;
426
+ line-height: 18px;
427
+ white-space: nowrap;
428
+ padding-left: 100%;
429
+ animation: notice 10s 0s linear infinite both;
430
+ animation-play-state: paused;
431
+ /* #endif */
432
+ }
433
+
434
+ .uni-noticebar__more {
435
+ /* #ifndef APP-NVUE */
436
+ display: inline-flex;
437
+ /* #endif */
438
+ flex-direction: row;
439
+ flex-wrap: nowrap;
440
+ align-items: center;
441
+ padding-left: 5px;
442
+ }
443
+
444
+ .uni-noticebar__more-text {
445
+ font-size: 14px;
446
+ }
447
+
448
+ @keyframes notice {
449
+ 100% {
450
+ transform: translate3d(-100%, 0, 0);
451
+ }
452
+ }
453
+ </style>