@10yun/cv-mobile-ui 0.4.1 → 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 (122) 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-cv/cv-calendar → ui-uni/uni-calendar}/calendar.js +0 -0
  12. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/uni-calendar-item.vue +0 -0
  13. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/uni-calendar.vue +0 -0
  14. package/{ui-cv/cv-calendar → ui-uni/uni-calendar}/util.js +0 -0
  15. package/{ui-cv/cv-card → ui-uni/uni-card}/uni-card.vue +0 -0
  16. package/{ui-cv/cv-col → ui-uni/uni-col}/uni-col.vue +0 -0
  17. package/{ui-cv/cv-collapse → ui-uni/uni-collapse}/uni-collapse.vue +0 -0
  18. package/{ui-cv/cv-collapse-item → ui-uni/uni-collapse-item}/uni-collapse-item.vue +0 -0
  19. package/{ui-cv/cv-combox → ui-uni/uni-combox}/uni-combox.vue +0 -0
  20. package/{ui-cv/cv-countdown → ui-uni/uni-countdown}/uni-countdown.vue +0 -0
  21. package/{ui-cv/cv-data-checkbox → ui-uni/uni-data-checkbox}/uni-data-checkbox.vue +0 -0
  22. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/clientdb.js +0 -0
  23. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/uni-data-indexed-list-item.vue +0 -0
  24. package/{ui-cv/cv-data-indexed-list → ui-uni/uni-data-indexed-list}/uni-data-indexed-list.vue +0 -0
  25. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/keypress.js +0 -0
  26. package/{ui-cv/cv-data-picker → ui-uni/uni-data-picker}/uni-data-picker.vue +0 -0
  27. package/{ui-cv/cv-data-pickerview → ui-uni/uni-data-pickerview}/uni-data-picker.js +0 -0
  28. package/{ui-cv/cv-data-pickerview → ui-uni/uni-data-pickerview}/uni-data-pickerview.vue +0 -0
  29. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/date-format.js +0 -0
  30. package/{ui-cv/cv-dateformat → ui-uni/uni-dateformat}/uni-dateformat.vue +0 -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-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/calendar.vue +0 -0
  34. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/keypress.js +0 -0
  35. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/time-picker.vue +0 -0
  36. package/{ui-cv/cv-datetime-picker → ui-uni/uni-datetime-picker}/uni-datetime-picker.vue +0 -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-cv/cv-easyinput → ui-uni/uni-easyinput}/uni-easyinput.vue +0 -0
  42. package/{ui-cv/cv-fab → ui-uni/uni-fab}/uni-fab.vue +0 -0
  43. package/{ui-cv/cv-fab → ui-uni/uni-fab}/uni-fab.vue.bak +0 -0
  44. package/{ui-cv/cv-fav → ui-uni/uni-fav}/uni-fav.vue +0 -0
  45. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/choose-and-upload-file.js +0 -0
  46. package/{ui-cv/cv-file-picker → ui-uni/uni-file-picker}/uni-file-picker.vue +0 -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 → ui-uni/uni-goods-nav}/uni-goods-nav.vue +0 -0
  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-icons2 → ui-uni/uni-icons}/uni.ttf +0 -0
  60. package/{ui-cv/cv-indexed-list → ui-uni/uni-indexed-list}/uni-indexed-list-item.vue +0 -0
  61. package/{ui-cv/cv-indexed-list → ui-uni/uni-indexed-list}/uni-indexed-list.vue +0 -0
  62. package/ui-uni/uni-link/uni-link.vue +117 -0
  63. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-list.vue +0 -0
  64. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.vue +0 -0
  65. package/{ui-cv/cv-list → ui-uni/uni-list}/uni-refresh.wxs +0 -0
  66. package/{ui-cv/cv-list-ad → ui-uni/uni-list-ad}/uni-list-ad.vue +0 -0
  67. package/{ui-cv/cv-list-chat → ui-uni/uni-list-chat}/uni-list-chat.scss +0 -0
  68. package/{ui-cv/cv-list-chat → ui-uni/uni-list-chat}/uni-list-chat.vue +0 -0
  69. package/{ui-cv/cv-list-item → ui-uni/uni-list-item}/uni-list-item.vue +0 -0
  70. package/ui-uni/uni-load-more/uni-load-more.vue +366 -0
  71. package/{ui-cv/cv-nav-bar → ui-uni/uni-nav-bar}/uni-nav-bar.vue +0 -0
  72. package/{ui-cv/cv-nav-bar → ui-uni/uni-nav-bar}/uni-status-bar.vue +0 -0
  73. package/{ui-cv/cv-notice-bar → ui-uni/uni-notice-bar}/uni-notice-bar.vue +0 -0
  74. package/{ui-cv/cv-number-box → ui-uni/uni-number-box}/uni-number-box.vue +0 -0
  75. package/{ui-cv/cv-pagination → ui-uni/uni-pagination}/uni-pagination.vue +0 -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-cv/cv-popup → ui-uni/uni-popup}/uni-popup.vue +0 -0
  79. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/keypress.js +0 -0
  80. package/{ui-cv/cv-popup-dialog → ui-uni/uni-popup-dialog}/uni-popup-dialog.vue +0 -0
  81. package/{ui-cv/cv-popup-message → ui-uni/uni-popup-message}/uni-popup-message.vue +0 -0
  82. package/{ui-cv/cv-popup-share → 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-cv/cv-search-bar → ui-uni/uni-search-bar}/uni-search-bar.vue +0 -0
  86. package/{ui-cv/cv-section → ui-uni/uni-section}/uni-section.vue +0 -0
  87. package/{ui-cv/cv-segmented-control → ui-uni/uni-segmented-control}/uni-segmented-control.vue +0 -0
  88. package/{ui-cv/cv-status-bar → ui-uni/uni-status-bar}/uni-status-bar.vue +0 -0
  89. package/{ui-cv/cv-steps → ui-uni/uni-steps}/uni-steps.vue +0 -0
  90. package/{ui-cv/cv-swipe-action → 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 → ui-uni/uni-swipe-action-item}/uni-swipe-action-item.vue +0 -0
  98. package/{ui-cv/cv-swiper-dot → ui-uni/uni-swiper-dot}/uni-swiper-dot.vue +0 -0
  99. package/{ui-cv/cv-table → ui-uni/uni-table}/uni-table.vue +0 -0
  100. package/{ui-cv/cv-tag → ui-uni/uni-tag}/uni-tag.vue +0 -0
  101. package/{ui-cv/cv-tbody → ui-uni/uni-tbody}/uni-tbody.vue +0 -0
  102. package/{ui-cv/cv-td → ui-uni/uni-td}/uni-td.vue +0 -0
  103. package/{ui-cv/cv-test → 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-cv/cv-th → ui-uni/uni-th}/uni-th.vue +0 -0
  106. package/{ui-cv/cv-thead → ui-uni/uni-thead}/uni-thead.vue +0 -0
  107. package/{ui-cv/cv-title → ui-uni/uni-title}/uni-title.vue +0 -0
  108. package/{ui-cv/cv-tr → ui-uni/uni-tr}/table-checkbox.vue +0 -0
  109. package/{ui-cv/cv-tr → ui-uni/uni-tr}/uni-tr.vue +0 -0
  110. package/{ui-cv/cv-transition → ui-uni/uni-transition}/createAnimation.js +0 -0
  111. package/{ui-cv/cv-transition → ui-uni/uni-transition}/uni-transition.vue +0 -0
  112. package/ui-cv/cv-badge/uni-badge.vue +0 -249
  113. package/ui-cv/cv-drawer/cv-drawer.vue +0 -185
  114. package/ui-cv/cv-drawer/keypress.js +0 -45
  115. package/ui-cv/cv-form-base/cv-form-base.vue +0 -470
  116. package/ui-cv/cv-form-base/validate.js +0 -477
  117. package/ui-cv/cv-grid-group/cv-grid-group.vue +0 -148
  118. package/ui-cv/cv-grid-item/cv-grid-item.vue +0 -132
  119. package/ui-cv/cv-icons2/cv-icons2.vue +0 -78
  120. package/ui-cv/cv-icons2/icons.js +0 -132
  121. package/ui-cv/cv-link/uni-link.vue +0 -130
  122. package/ui-cv/cv-row/uni-row.vue +0 -157
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <text style="text-decoration:underline" :href="href" @click="openURL" :inWhiteList="inWhiteList">{{text}}</text>
3
+ </template>
4
+
5
+ <script>
6
+ /**
7
+ * @description u-link是一个外部网页超链接组件,在小程序内打开内部web-view组件或复制url,在app内打开外部浏览器,在h5端打开新网页
8
+ * @property {String} href 点击后打开的外部网页url,小程序中必须以https://开头
9
+ * @property {String} text 显示的文字
10
+ * @property {Boolean} inWhiteList 是否在小程序白名单中,如果在的话,在小程序端会直接打开内置web-view,否则会只会复制url,提示在外部打开
11
+ * @example * <u-link href="https://ext.dcloud.net.cn" text="https://ext.dcloud.net.cn" :inWhiteList="true"></u-link>
12
+ */
13
+ export default {
14
+ name: 'u-link',
15
+ props: {
16
+ href: {
17
+ type: String,
18
+ default: ''
19
+ },
20
+ text: {
21
+ type: String,
22
+ default: ''
23
+ },
24
+ inWhiteList: {
25
+ type: Boolean,
26
+ default: false
27
+ }
28
+ },
29
+ methods: {
30
+ openURL() {
31
+ // #ifdef APP-PLUS
32
+ plus.runtime.openURL(this.href) //这里默认使用外部浏览器打开而不是内部web-view组件打开
33
+ // #endif
34
+ // #ifdef H5
35
+ window.open(this.href)
36
+ // #endif
37
+ // #ifdef MP
38
+ if (this.inWhiteList) { //如果在小程序的网址白名单中,会走内置webview打开,否则会复制网址提示在外部浏览器打开
39
+ uni.navigateTo({
40
+ url: '/pages/component/web-view/web-view?url=' + this.href
41
+ });
42
+ } else {
43
+ uni.setClipboardData({
44
+ data: this.href
45
+ });
46
+ uni.showModal({
47
+ content: '本网址无法直接在小程序内打开。已自动复制网址,请在手机浏览器里粘贴该网址',
48
+ showCancel: false
49
+ });
50
+ }
51
+ // #endif
52
+ }
53
+ }
54
+ }
55
+ </script>
56
+
57
+ <style>
58
+
59
+ </style>
@@ -0,0 +1,250 @@
1
+ <template>
2
+ <view class="uni-badge--x">
3
+ <slot />
4
+ <text v-if="text" :class="classNames" :style="[badgeWidth, positionStyle, customStyle, dotStyle]" class="uni-badge" @click="onClick()">{{displayValue}}</text>
5
+ </view>
6
+ </template>
7
+
8
+ <script>
9
+ /**
10
+ * Badge 数字角标
11
+ * @description 数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景
12
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=21
13
+ * @property {String} text 角标内容
14
+ * @property {String} type = [default|primary|success|warning|error] 颜色类型
15
+ * @value default 灰色
16
+ * @value primary 蓝色
17
+ * @value success 绿色
18
+ * @value warning 黄色
19
+ * @value error 红色
20
+ * @property {String} size = [normal|small] Badge 大小
21
+ * @value normal 一般尺寸
22
+ * @value small 小尺寸
23
+ * @property {String} inverted = [true|false] 是否无需背景颜色
24
+ * @event {Function} click 点击 Badge 触发事件
25
+ * @example <uni-badge text="1"></uni-badge>
26
+ */
27
+ export default {
28
+ name: 'UniBadge',
29
+ emits: ['click'],
30
+ props: {
31
+ type: {
32
+ type: String,
33
+ default: 'default'
34
+ },
35
+ inverted: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ isDot: {
40
+ type: Boolean,
41
+ default: false
42
+ },
43
+ maxNum: {
44
+ type: Number,
45
+ default: 99
46
+ },
47
+ absolute: {
48
+ type: String,
49
+ default: ''
50
+ },
51
+ offset: {
52
+ type: Array,
53
+ default () {
54
+ return [0, 0]
55
+ }
56
+ },
57
+ text: {
58
+ type: [String, Number],
59
+ default: ''
60
+ },
61
+ size: {
62
+ type: String,
63
+ default: 'normal'
64
+ },
65
+ customStyle: {
66
+ type: Object,
67
+ default () {
68
+ return {}
69
+ }
70
+ }
71
+ },
72
+ data() {
73
+ return {};
74
+ },
75
+ computed: {
76
+ width() {
77
+ return String(this.text).length * 8 + 12
78
+ },
79
+ classNames() {
80
+ const {
81
+ inverted,
82
+ type,
83
+ size,
84
+ absolute
85
+ } = this
86
+ return [
87
+ inverted ? 'uni-badge--' + type + '-inverted' : '',
88
+ 'uni-badge--' + type,
89
+ 'uni-badge--' + size,
90
+ absolute ? 'uni-badge--absolute' : ''
91
+ ]
92
+ },
93
+ positionStyle() {
94
+ if (!this.absolute) return {}
95
+ let w = this.width / 2,
96
+ h = 10
97
+ if (this.isDot) {
98
+ w = 5
99
+ h = 5
100
+ }
101
+ const x = `${- w + this.offset[0]}px`
102
+ const y = `${- h + this.offset[1]}px`
103
+
104
+ const whiteList = {
105
+ rightTop: {
106
+ right: x,
107
+ top: y
108
+ },
109
+ rightBottom: {
110
+ right: x,
111
+ bottom: y
112
+ },
113
+ leftBottom: {
114
+ left: x,
115
+ bottom: y
116
+ },
117
+ leftTop: {
118
+ left: x,
119
+ top: y
120
+ }
121
+ }
122
+ const match = whiteList[this.absolute]
123
+ return match ? match : whiteList['rightTop']
124
+ },
125
+ badgeWidth() {
126
+ return {
127
+ width: `${this.width}px`
128
+ }
129
+ },
130
+ dotStyle() {
131
+ if (!this.isDot) return {}
132
+ return {
133
+ width: '10px',
134
+ height: '10px',
135
+ borderRadius: '10px'
136
+ }
137
+ },
138
+ displayValue() {
139
+ const {
140
+ isDot,
141
+ text,
142
+ maxNum
143
+ } = this
144
+ return isDot ? '' : (Number(text) > maxNum ? `${maxNum}+` : text)
145
+ }
146
+ },
147
+ methods: {
148
+ onClick() {
149
+ this.$emit('click');
150
+ }
151
+ }
152
+ };
153
+ </script>
154
+
155
+ <style scoped>
156
+ .uni-badge--x {
157
+ /* #ifdef APP-NVUE */
158
+ /* #endif */
159
+ /* #ifndef APP-NVUE */
160
+ display: inline-block;
161
+ /* #endif */
162
+ position: relative;
163
+ }
164
+
165
+ .uni-badge--absolute {
166
+ position: absolute;
167
+ }
168
+
169
+ .uni-badge {
170
+ /* #ifndef APP-NVUE */
171
+ display: flex;
172
+ overflow: hidden;
173
+ box-sizing: border-box;
174
+ /* #endif */
175
+ justify-content: center;
176
+ flex-direction: row;
177
+ height: 20px;
178
+ line-height: 20px;
179
+ color: #333;
180
+ border-radius: 100px;
181
+ background-color: #f1f1f1;
182
+ background-color: transparent;
183
+ text-align: center;
184
+ font-family: "Helvetica Neue", Helvetica, sans-serif;
185
+ font-size: 12px;
186
+ /* #ifdef H5 */
187
+ cursor: pointer;
188
+ /* #endif */
189
+ }
190
+
191
+ .uni-badge--inverted {
192
+ padding: 0 5px 0 0;
193
+ color: #f1f1f1;
194
+ }
195
+
196
+ .uni-badge--default {
197
+ color: #333;
198
+ background-color: #f1f1f1;
199
+ }
200
+
201
+ .uni-badge--default-inverted {
202
+ color: #999;
203
+ background-color: transparent;
204
+ }
205
+
206
+ .uni-badge--primary {
207
+ color: #fff;
208
+ background-color: #007aff;
209
+ }
210
+
211
+ .uni-badge--primary-inverted {
212
+ color: #007aff;
213
+ background-color: transparent;
214
+ }
215
+
216
+ .uni-badge--success {
217
+ color: #fff;
218
+ background-color: #4cd964;
219
+ }
220
+
221
+ .uni-badge--success-inverted {
222
+ color: #4cd964;
223
+ background-color: transparent;
224
+ }
225
+
226
+ .uni-badge--warning {
227
+ color: #fff;
228
+ background-color: #f0ad4e;
229
+ }
230
+
231
+ .uni-badge--warning-inverted {
232
+ color: #f0ad4e;
233
+ background-color: transparent;
234
+ }
235
+
236
+ .uni-badge--error {
237
+ color: #fff;
238
+ background-color: #dd524d;
239
+ }
240
+
241
+ .uni-badge--error-inverted {
242
+ color: #dd524d;
243
+ background-color: transparent;
244
+ }
245
+
246
+ .uni-badge--small {
247
+ transform: scale(0.8);
248
+ transform-origin: center center;
249
+ }
250
+ </style>
File without changes
File without changes
@@ -0,0 +1,45 @@
1
+ // #ifdef H5
2
+ export default {
3
+ name: 'Keypress',
4
+ props: {
5
+ disable: {
6
+ type: Boolean,
7
+ default: false
8
+ }
9
+ },
10
+ mounted () {
11
+ const keyNames = {
12
+ esc: ['Esc', 'Escape'],
13
+ tab: 'Tab',
14
+ enter: 'Enter',
15
+ space: [' ', 'Spacebar'],
16
+ up: ['Up', 'ArrowUp'],
17
+ left: ['Left', 'ArrowLeft'],
18
+ right: ['Right', 'ArrowRight'],
19
+ down: ['Down', 'ArrowDown'],
20
+ delete: ['Backspace', 'Delete', 'Del']
21
+ }
22
+ const listener = ($event) => {
23
+ if (this.disable) {
24
+ return
25
+ }
26
+ const keyName = Object.keys(keyNames).find(key => {
27
+ const keyName = $event.key
28
+ const value = keyNames[key]
29
+ return value === keyName || (Array.isArray(value) && value.includes(keyName))
30
+ })
31
+ if (keyName) {
32
+ // 避免和其他按键事件冲突
33
+ setTimeout(() => {
34
+ this.$emit(keyName, {})
35
+ }, 0)
36
+ }
37
+ }
38
+ document.addEventListener('keyup', listener)
39
+ // this.$once('hook:beforeDestroy', () => {
40
+ // document.removeEventListener('keyup', listener)
41
+ // })
42
+ },
43
+ render: () => {}
44
+ }
45
+ // #endif
@@ -0,0 +1,178 @@
1
+ <template>
2
+ <view v-if="visibleSync" :class="{ 'uni-drawer--visible': showDrawer }" class="uni-drawer" @touchmove.stop.prevent="clear">
3
+ <view class="uni-drawer__mask" :class="{ 'uni-drawer__mask--visible': showDrawer && mask }" @tap="close('mask')" />
4
+ <view class="uni-drawer__content" :class="{'uni-drawer--right': rightMode,'uni-drawer--left': !rightMode, 'uni-drawer__content--visible': showDrawer}" :style="{width:drawerWidth+'px'}">
5
+ <slot />
6
+ </view>
7
+ <!-- #ifdef H5 -->
8
+ <keypress @esc="close('mask')" />
9
+ <!-- #endif -->
10
+ </view>
11
+ </template>
12
+
13
+ <script>
14
+ // #ifdef H5
15
+ import keypress from './keypress.js'
16
+ // #endif
17
+ /**
18
+ * Drawer 抽屉
19
+ * @description 抽屉侧滑菜单
20
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=26
21
+ * @property {Boolean} mask = [true | false] 是否显示遮罩
22
+ * @property {Boolean} maskClick = [true | false] 点击遮罩是否关闭
23
+ * @property {Boolean} mode = [left | right] Drawer 滑出位置
24
+ * @value left 从左侧滑出
25
+ * @value right 从右侧侧滑出
26
+ * @property {Number} width 抽屉的宽度 ,仅 vue 页面生效
27
+ * @event {Function} close 组件关闭时触发事件
28
+ */
29
+ export default {
30
+ name: 'UniDrawer',
31
+ components: {
32
+ // #ifdef H5
33
+ keypress
34
+ // #endif
35
+ },
36
+ emits: ['change'],
37
+ props: {
38
+ /**
39
+ * 显示模式(左、右),只在初始化生效
40
+ */
41
+ mode: {
42
+ type: String,
43
+ default: ''
44
+ },
45
+ /**
46
+ * 蒙层显示状态
47
+ */
48
+ mask: {
49
+ type: Boolean,
50
+ default: true
51
+ },
52
+ /**
53
+ * 遮罩是否可点击关闭
54
+ */
55
+ maskClick: {
56
+ type: Boolean,
57
+ default: true
58
+ },
59
+ /**
60
+ * 抽屉宽度
61
+ */
62
+ width: {
63
+ type: Number,
64
+ default: 220
65
+ }
66
+ },
67
+ data() {
68
+ return {
69
+ visibleSync: false,
70
+ showDrawer: false,
71
+ rightMode: false,
72
+ watchTimer: null,
73
+ drawerWidth: 220
74
+ }
75
+ },
76
+ created() {
77
+ // #ifndef APP-NVUE
78
+ this.drawerWidth = this.width
79
+ // #endif
80
+ this.rightMode = this.mode === 'right'
81
+ },
82
+ methods: {
83
+ clear() {},
84
+ close(type) {
85
+ // fixed by mehaotian 抽屉尚未完全关闭或遮罩禁止点击时不触发以下逻辑
86
+ if ((type === 'mask' && !this.maskClick) || !this.visibleSync) return
87
+ this._change('showDrawer', 'visibleSync', false)
88
+ },
89
+ open() {
90
+ // fixed by mehaotian 处理重复点击打开的事件
91
+ if (this.visibleSync) return
92
+ this._change('visibleSync', 'showDrawer', true)
93
+ },
94
+ _change(param1, param2, status) {
95
+ this[param1] = status
96
+ if (this.watchTimer) {
97
+ clearTimeout(this.watchTimer)
98
+ }
99
+ this.watchTimer = setTimeout(() => {
100
+ this[param2] = status
101
+ this.$emit('change', status)
102
+ }, status ? 50 : 300)
103
+ }
104
+ }
105
+ }
106
+ </script>
107
+
108
+ <style scoped>
109
+ .uni-drawer {
110
+ /* #ifndef APP-NVUE */
111
+ display: block;
112
+ /* #endif */
113
+ position: fixed;
114
+ top: 0;
115
+ left: 0;
116
+ right: 0;
117
+ bottom: 0;
118
+ overflow: hidden;
119
+ z-index: 999;
120
+ }
121
+
122
+ .uni-drawer__content {
123
+ /* #ifndef APP-NVUE */
124
+ display: block;
125
+ /* #endif */
126
+ position: absolute;
127
+ top: 0;
128
+ width: 220px;
129
+ bottom: 0;
130
+ background-color: #ffffff;
131
+ transition: transform 0.3s ease;
132
+ }
133
+
134
+ .uni-drawer--left {
135
+ left: 0;
136
+ /* #ifdef APP-NVUE */
137
+ transform: translateX(-220px);
138
+ /* #endif */
139
+ /* #ifndef APP-NVUE */
140
+ transform: translateX(-100%);
141
+ /* #endif */
142
+ }
143
+
144
+ .uni-drawer--right {
145
+ right: 0;
146
+ /* #ifdef APP-NVUE */
147
+ transform: translateX(220px);
148
+ /* #endif */
149
+ /* #ifndef APP-NVUE */
150
+ transform: translateX(100%);
151
+ /* #endif */
152
+ }
153
+
154
+ .uni-drawer__content--visible {
155
+ transform: translateX(0px);
156
+ }
157
+
158
+ .uni-drawer__mask {
159
+ /* #ifndef APP-NVUE */
160
+ display: block;
161
+ /* #endif */
162
+ opacity: 0;
163
+ position: absolute;
164
+ top: 0;
165
+ left: 0;
166
+ bottom: 0;
167
+ right: 0;
168
+ background-color: rgba(0, 0, 0, 0.4);
169
+ transition: opacity 0.3s;
170
+ }
171
+
172
+ .uni-drawer__mask--visible {
173
+ /* #ifndef APP-NVUE */
174
+ display: block;
175
+ /* #endif */
176
+ opacity: 1;
177
+ }
178
+ </style>
File without changes
File without changes
File without changes