distinctui-uni 0.2.0 → 0.2.1

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.
@@ -1,396 +1,419 @@
1
- <template>
2
- <view v-if="wrapperShow">
3
- <view
4
- class="d-popup__mask"
5
- :class="{ 'animate-fade-in': innerShow, 'animate-fade-out': !innerShow }"
6
- v-if="mask"
7
- :style="{ background: maskBackground }"
8
- @tap.stop="clickMask"
9
- @touchmove.stop.prevent="stop"
10
- />
11
- <view
12
- class="d-popup__popup"
13
- :class="{ 'animate-slide-up': innerShow, 'animate-slide-down': !innerShow }"
14
- :style="{ borderTopLeftRadius: radius, borderTopRightRadius: radius, background: background, maxHeight: maxHeight }"
15
- @tap.stop="stop"
16
- >
17
- <view class="d-popup__popup__top" v-if="showSlideIcon" @touchmove.stop="handleClose" @tap.stop="handleClose">
18
- <view class="d-popup__slide-icon" />
19
- </view>
20
- <view class="d-popup__popup__hd">
21
- <view class="d-popup__popup__hd__left">
22
- <view v-if="showMoreBtn" class="d-popup__popup__more" hover-class="d-active" @tap.stop="clickMore">
23
- <image
24
- mode="widthFix"
25
- class="d-popup__popup__more-icon"
26
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAFDUlEQVR4nO3b0W1URxiG4bM0gFMBpAKMgOtsCaYCSAV2KsBUgKkgUAHuIMk1IEwHUEGM4BrnXwVLZLV8MvbZmQl6Hmk0g2+s/0jv7C4Liwn4JoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAYPpB79+7tnp2dPajjbq2dOq/2abFYnNR2Wuukzs9fvnx5Uuf/FbONP9uQgSyXy51Pnz7t10M9qD/u1LqI03rgR69evXpc52EtzbZu6NkWtYZy586dvdqe1Lo5Xc67aZp+e/369XHtQzFb9G4acLZFrWHcvXv3yZfb58rqVjoc6VYy28WMNtui1hDqBvq9tofTvJ7VjfRr7V2Z7bsNMdvKolZ39ZCPatuvNbu6kR7XjXQ4dWK2y+k927nugdRD3qvtRa1tul830nHtTZntyrrM9rWugSzrbz0+fvz4po43p+16Vw/659qbWZptDs1nW7eo1U19uDusD3eP6rh1rV+yzTaP1rOt6xpIvUz/XdtOrRZO6zb6qfYmzDabprOt6xZI3ULLuoX+qGMz165du93im1uzzavVbJt0C6RuoaPa9mu19LRuo4Pat8pss2sy2ybdAqmb6M+6iX6pYzP1fvavej+7nLbMbPNqNdsmPQN5Uw96t47N1IM+qQd9u45bZbZ5tZptk26B1Ev1WW3N1Uv11mc22/xazLZJl1+68iM/aLPNr8Vsm3T5pSv1oE9qu1Wrpbf1oHdr3yqzza7JbJt0C6Tey/6wH/bMNq9Ws23SLZC6iY5q26/V0tO6iQ5q3yqzza7JbJt0C2T1XzI/f/78po7NtPrCyWzzajXbJt0CWanb6LS267Va+FC30E7tTZhtNk1nW9c1kHo/e1jvZx/Vcevqfezjeh97ODVitnm0nm1d10CW//6z6ZM63qi1Te/rFro5NbQ02xyaz7auayAr9XK9V9uLWtt0vx70ce1Nme3Kusz2te6BrGzzJbv3S7TZLqf3bOeGCGSlbqRn0zQ9qDWn53UDPZw6M9t3G2K2lWECWZnzRhrlBjpntosZbbahAlmpG2mvtqNaN2pdxvtaB3UDHdc+FLNFQ862qDWkL7fSQR2v17qID3X7HI10+3yL2f5j6NmGDeTcl29uH9ZD3K0Hv1M/ulVr5W397LR+dlLftD7r9U3rVZht/NmGDwR6EggEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBIJ/AEZQjudcAs0hAAAAAElFTkSuQmCC"
27
- />
28
- </view>
29
- <slot v-else name="header-left"></slot>
30
- </view>
31
- <view class="d-popup__popup__hd__middle">
32
- <span v-if="title" class="d-popup__popup__hd__title ellipse-one-line">{{ title }}</span>
33
- <slot v-else name="header-middle"></slot>
34
- </view>
35
- <view class="d-popup__popup__hd__right">
36
- <view v-if="closabled" class="d-popup__popup__close" @tap.stop="handleClose" hover-class="d-active">
37
- <image
38
- mode="widthFix"
39
- class="d-popup__popup__close-icon"
40
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAADZQTFRFAAAAAAAAQEBAMzMzMzMzMzMzNDQ0MjIyNDQ0MzMzNDQ0NDQ0MzMzMzMzMzMzMzMzNDQ0NTU1nbBS4wAAAA90Uk5TAAIEBQ8UWXBxpKyys/b+RAoM/gAAAMRJREFUSMftlUsOwyAMRMMfAqnh/petqqpqBBgYKdnFSw/Yj2Am2/bEjSGsN7yqnRVVyh6UJLdeRjpslXNEZWd2yL0Q+bppLK+SdJcnfSTTLdOjkolpzghsoV9rvZAcFGN5GHnA0wUY8nRKTniaRVOeCmOB50yl1ArPiSqEJZ4/Vc5rPN9QIRPloLa7NqBI6KHRz4peHDoa6PCh440+IPSJoiaA2gxqZCaNrTLWkp+ZsWvtPo78qrF7Yd3ggoxvfihPXBpv888R1ZroG5MAAAAASUVORK5CYII="
41
- />
42
- </view>
43
- <slot v-else name="header-right"></slot>
44
- </view>
45
- </view>
46
- <view class="d-popup__popup__bd" scroll-y scroll-with-animation>
47
- <slot name="body">
48
- <view class="d-popup__popup__bd__desc">{{ desc }}</view>
49
- <view class="d-popup__popup__bd__tips">{{ tips }}</view>
50
- </slot>
51
- <view style="width: 100%; height: 100rpx" v-if="!hiddenFooter" />
52
- </view>
53
- <view class="d-popup__popup__ft d-popup__popup__ft__tool" v-if="!hiddenFooter">
54
- <slot name="footer">
55
- <view class="d-popup__popup__ft__buttons">
56
- <d-button width="272rpx" type="secondary" margin="0 15rpx">次要按钮</d-button>
57
- <d-button width="272rpx" type="primary" margin="0 15rpx">主按钮</d-button>
58
- </view>
59
- </slot>
60
- </view>
61
- <view class="d-popup__safe-bottom"></view>
62
- </view>
63
- </view>
64
- </template>
65
-
66
- <script>
67
- /*如果底部有自定义导航栏,可适当设置内容padding-bottom值*/
68
- export default {
69
- name: "d-popup",
70
- emits: [],
71
- props: {
72
- // 是否显示
73
- show: {
74
- type: Boolean,
75
- default: false
76
- },
77
- // 是否展示更多按钮
78
- showMoreBtn: {
79
- type: Boolean,
80
- default: false
81
- },
82
- // 是否展示关闭按钮
83
- closabled: {
84
- type: Boolean,
85
- default: true
86
- },
87
- // 标题
88
- title: {
89
- type: String,
90
- default: ""
91
- },
92
- // 辅助操作描述内容
93
- desc: {
94
- type: String,
95
- default: ""
96
- },
97
- // 辅助操作提示内容
98
- tips: {
99
- type: String,
100
- default: ""
101
- },
102
- //背景颜色
103
- background: {
104
- type: String,
105
- default: "#fff"
106
- },
107
- // Popup圆角
108
- radius: {
109
- type: String,
110
- default: "24rpx"
111
- },
112
- // 是否显示遮罩
113
- mask: {
114
- type: Boolean,
115
- default: true
116
- },
117
- // 点击遮罩 是否可关闭
118
- maskClosable: {
119
- type: Boolean,
120
- default: true
121
- },
122
- // 遮罩背景色
123
- maskBackground: {
124
- type: String,
125
- default: "rgba(0,0,0,.6)"
126
- },
127
- // 弹窗最大高度
128
- maxHeight: {
129
- type: String,
130
- default: "75%"
131
- },
132
- // 顶部是否显示下滑Icon
133
- showSlideIcon: {
134
- type: Boolean,
135
- default: false
136
- },
137
- // 隐藏底部(同时最大高度底部遮罩也会消失)
138
- hiddenFooter: {
139
- type: Boolean,
140
- default: false
141
- }
142
- },
143
- data() {
144
- return {
145
- wrapperShow: false,
146
- innerShow: false
147
- };
148
- },
149
- watch: {
150
- show(nv) {
151
- if (nv) {
152
- this.wrapperShow = true;
153
- this.innerShow = true;
154
- } else {
155
- this.innerShow = false;
156
- setTimeout(() => {
157
- this.wrapperShow = false;
158
- }, 300);
159
- }
160
- }
161
- },
162
- methods: {
163
- clickMask() {
164
- if (!this.maskClosable) return;
165
- this.handleClose();
166
- },
167
-
168
- handleClose() {
169
- this.$emit("update:show", false);
170
- },
171
-
172
- clickMore() {
173
- this.$emit("clickMore");
174
- },
175
-
176
- stop() {
177
- // do nothing
178
- }
179
- }
180
- };
181
- </script>
182
-
183
- <style scoped>
184
- @keyframes fadeIn {
185
- from {
186
- opacity: 0;
187
- }
188
- to {
189
- opacity: 1;
190
- }
191
- }
192
-
193
- @keyframes fadeOut {
194
- from {
195
- opacity: 1;
196
- }
197
- to {
198
- opacity: 0;
199
- }
200
- }
201
-
202
- @keyframes slideUp {
203
- from {
204
- transform: translate3d(0, 100%, 0);
205
- }
206
-
207
- to {
208
- transform: translate3d(0, 0, 0);
209
- }
210
- }
211
-
212
- @keyframes slideDown {
213
- from {
214
- transform: translate3d(0, 0, 0);
215
- }
216
-
217
- to {
218
- transform: translate3d(0, 100%, 0);
219
- }
220
- }
221
-
222
- .animate_fade-in {
223
- animation: fadeIn ease 0.3s forwards;
224
- }
225
-
226
- .animate_fade-out {
227
- animation: fadeOut ease 0.3s forwards;
228
- }
229
-
230
- .animate-slide-up {
231
- animation: slideUp ease 0.3s forwards;
232
- }
233
-
234
- .animate-slide-down {
235
- animation: slideDown ease 0.3s forwards;
236
- }
237
-
238
- .d-active {
239
- opacity: 0.6;
240
- }
241
-
242
- .d-popup__mask {
243
- position: fixed;
244
- left: 0;
245
- right: 0;
246
- top: 0;
247
- bottom: 0;
248
- z-index: 1000;
249
- }
250
-
251
- .d-popup__popup {
252
- position: fixed;
253
- left: 0;
254
- right: 0;
255
- bottom: 0;
256
- min-height: 255rpx;
257
- max-height: 75%;
258
- z-index: 5000;
259
- overflow: hidden;
260
- box-sizing: border-box;
261
- display: flex;
262
- flex-direction: column;
263
- outline: 0;
264
- }
265
- .d-popup__popup__more-icon {
266
- width: 42rpx;
267
- height: 42rpx;
268
- }
269
-
270
- .d-popup__slide-icon {
271
- width: 100rpx;
272
- height: 8rpx;
273
- border-radius: 30rpx;
274
- background: #d8d8d8;
275
- }
276
-
277
- .d-popup__popup__close-icon {
278
- width: 32rpx;
279
- height: 32rpx;
280
- }
281
-
282
- .d-popup__popup-show {
283
- transform: translate3d(0, 0, 0);
284
- }
285
-
286
- .d-popup__popup__top {
287
- width: 100%;
288
- display: flex;
289
- flex-direction: column;
290
- align-items: center;
291
- padding: 20rpx 0 10rpx;
292
- }
293
-
294
- .d-popup__popup__hd {
295
- display: grid;
296
- grid-template-columns: auto 1fr auto;
297
- padding: 30rpx 30rpx 40rpx 30rpx;
298
- }
299
-
300
- .d-popup__popup__hd__left {
301
- min-width: 30rpx;
302
- padding-right: 10rpx;
303
- }
304
-
305
- .d-popup__popup__hd__middle {
306
- text-align: center;
307
- flex: 1;
308
- margin: 0 10rpx;
309
- }
310
-
311
- .d-popup__popup__hd__right {
312
- min-width: 30rpx;
313
- padding-left: 10rpx;
314
- }
315
-
316
- .d-popup__popup__hd__title {
317
- line-height: 48rpx;
318
- font-size: 34rpx;
319
- color: #3d3d3d;
320
- font-weight: bold;
321
- }
322
-
323
- .d-popup__popup__bd {
324
- padding: 0 30rpx;
325
- box-sizing: border-box;
326
- width: 100%;
327
- overflow-y: auto;
328
- }
329
-
330
- .d-popup__popup__bd__desc {
331
- font-size: 32rpx;
332
- font-weight: bold;
333
- color: #333;
334
- line-height: 42rpx;
335
- }
336
-
337
- .d-popup__popup__bd__tips {
338
- font-size: 30rpx;
339
- color: #666;
340
- line-height: 40rpx;
341
- margin-top: 20rpx;
342
- }
343
-
344
- .d-popup__popup__ft {
345
- position: relative;
346
- z-index: 9;
347
- }
348
-
349
- .d-popup__safe-bottom {
350
- height: env(safe-area-inset-bottom);
351
- }
352
-
353
- .d-popup__popup__ft__tool {
354
- position: relative;
355
- z-index: 50;
356
- }
357
-
358
- .d-popup__popup__ft__tool::before {
359
- content: "";
360
- height: 100rpx;
361
- background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffffff 100%);
362
- position: absolute;
363
- bottom: calc(100% - 1px);
364
- left: 0;
365
- right: 0;
366
- transform: translateZ(0);
367
- pointer-events: none;
368
- background-image: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffffff 100%);
369
- }
370
-
371
- .d-popup__popup__ft__mask {
372
- position: absolute;
373
- bottom: 0;
374
- left: 0;
375
- width: 100%;
376
- height: 100rpx;
377
- opacity: 1;
378
- }
379
-
380
- .d-popup__popup__ft__buttons {
381
- display: flex;
382
- align-items: center;
383
- justify-content: center;
384
- padding-bottom: 60rpx;
385
- }
386
-
387
- .ellipse-one-line {
388
- word-break: break-all;
389
- text-overflow: ellipsis;
390
- display: -webkit-box;
391
- /*! autoprefixer: off */
392
- -webkit-box-orient: vertical;
393
- -webkit-line-clamp: 1;
394
- overflow: hidden;
395
- }
396
- </style>
1
+ <template>
2
+ <view v-if="wrapperShow">
3
+ <view
4
+ class="d-popup__mask"
5
+ :class="{ 'animate-fade-in': innerShow, 'animate-fade-out': !innerShow }"
6
+ v-if="mask"
7
+ :style="{ background: maskBackground }"
8
+ @tap.stop="onClickMask"
9
+ @touchmove.stop.prevent="stop"
10
+ />
11
+ <view
12
+ class="d-popup__popup"
13
+ :class="{ 'animate-slide-up': innerShow, 'animate-slide-down': !innerShow }"
14
+ :style="[popupStyle]"
15
+ @tap.stop="stop"
16
+ >
17
+ <view class="d-popup__popup__top" v-if="showSlideIcon" @touchmove.stop="handleClose" @tap.stop="handleClose">
18
+ <view class="d-popup__slide-icon" />
19
+ </view>
20
+ <view class="d-popup__popup__hd">
21
+ <view class="d-popup__popup__hd__left">
22
+ <view v-if="showMoreBtn" class="d-popup__popup__more" hover-class="d-active" @tap.stop="clickMore">
23
+ <image
24
+ mode="widthFix"
25
+ class="d-popup__popup__more-icon"
26
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAFDUlEQVR4nO3b0W1URxiG4bM0gFMBpAKMgOtsCaYCSAV2KsBUgKkgUAHuIMk1IEwHUEGM4BrnXwVLZLV8MvbZmQl6Hmk0g2+s/0jv7C4Liwn4JoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAYPpB79+7tnp2dPajjbq2dOq/2abFYnNR2Wuukzs9fvnx5Uuf/FbONP9uQgSyXy51Pnz7t10M9qD/u1LqI03rgR69evXpc52EtzbZu6NkWtYZy586dvdqe1Lo5Xc67aZp+e/369XHtQzFb9G4acLZFrWHcvXv3yZfb58rqVjoc6VYy28WMNtui1hDqBvq9tofTvJ7VjfRr7V2Z7bsNMdvKolZ39ZCPatuvNbu6kR7XjXQ4dWK2y+k927nugdRD3qvtRa1tul830nHtTZntyrrM9rWugSzrbz0+fvz4po43p+16Vw/659qbWZptDs1nW7eo1U19uDusD3eP6rh1rV+yzTaP1rOt6xpIvUz/XdtOrRZO6zb6qfYmzDabprOt6xZI3ULLuoX+qGMz165du93im1uzzavVbJt0C6RuoaPa9mu19LRuo4Pat8pss2sy2ybdAqmb6M+6iX6pYzP1fvavej+7nLbMbPNqNdsmPQN5Uw96t47N1IM+qQd9u45bZbZ5tZptk26B1Ev1WW3N1Uv11mc22/xazLZJl1+68iM/aLPNr8Vsm3T5pSv1oE9qu1Wrpbf1oHdr3yqzza7JbJt0C6Tey/6wH/bMNq9Ws23SLZC6iY5q26/V0tO6iQ5q3yqzza7JbJt0C2T1XzI/f/78po7NtPrCyWzzajXbJt0CWanb6LS267Va+FC30E7tTZhtNk1nW9c1kHo/e1jvZx/Vcevqfezjeh97ODVitnm0nm1d10CW//6z6ZM63qi1Te/rFro5NbQ02xyaz7auayAr9XK9V9uLWtt0vx70ce1Nme3Kusz2te6BrGzzJbv3S7TZLqf3bOeGCGSlbqRn0zQ9qDWn53UDPZw6M9t3G2K2lWECWZnzRhrlBjpntosZbbahAlmpG2mvtqNaN2pdxvtaB3UDHdc+FLNFQ862qDWkL7fSQR2v17qID3X7HI10+3yL2f5j6NmGDeTcl29uH9ZD3K0Hv1M/ulVr5W397LR+dlLftD7r9U3rVZht/NmGDwR6EggEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBIJ/AEZQjudcAs0hAAAAAElFTkSuQmCC"
27
+ />
28
+ </view>
29
+ <slot v-else name="header-left"></slot>
30
+ </view>
31
+ <view class="d-popup__popup__hd__middle">
32
+ <span v-if="title" class="d-popup__popup__hd__title ellipse-one-line">{{ title }}</span>
33
+ <slot v-else name="header-middle"></slot>
34
+ </view>
35
+ <view class="d-popup__popup__hd__right">
36
+ <view v-if="closabled" class="d-popup__popup__close" @tap.stop="handleClose" hover-class="d-active">
37
+ <image
38
+ mode="widthFix"
39
+ class="d-popup__popup__close-icon"
40
+ src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAADZQTFRFAAAAAAAAQEBAMzMzMzMzMzMzNDQ0MjIyNDQ0MzMzNDQ0NDQ0MzMzMzMzMzMzMzMzNDQ0NTU1nbBS4wAAAA90Uk5TAAIEBQ8UWXBxpKyys/b+RAoM/gAAAMRJREFUSMftlUsOwyAMRMMfAqnh/petqqpqBBgYKdnFSw/Yj2Am2/bEjSGsN7yqnRVVyh6UJLdeRjpslXNEZWd2yL0Q+bppLK+SdJcnfSTTLdOjkolpzghsoV9rvZAcFGN5GHnA0wUY8nRKTniaRVOeCmOB50yl1ArPiSqEJZ4/Vc5rPN9QIRPloLa7NqBI6KHRz4peHDoa6PCh440+IPSJoiaA2gxqZCaNrTLWkp+ZsWvtPo78qrF7Yd3ggoxvfihPXBpv888R1ZroG5MAAAAASUVORK5CYII="
41
+ />
42
+ </view>
43
+ <slot v-else name="header-right"></slot>
44
+ </view>
45
+ </view>
46
+ <view class="d-popup__popup__bd" scroll-y scroll-with-animation>
47
+ <slot name="body">
48
+ <view class="d-popup__popup__bd__desc">{{ desc }}</view>
49
+ <view class="d-popup__popup__bd__tips">{{ tips }}</view>
50
+ </slot>
51
+ <view style="width: 100%; height: 100rpx" v-if="!hiddenFooter" />
52
+ </view>
53
+ <view class="d-popup__popup__ft d-popup__popup__ft__tool" v-if="!hiddenFooter">
54
+ <slot name="footer">
55
+ <view class="d-popup__popup__ft__buttons">
56
+ <d-button width="272rpx" type="secondary" margin="0 15rpx">次要按钮</d-button>
57
+ <d-button width="272rpx" type="primary" margin="0 15rpx">主按钮</d-button>
58
+ </view>
59
+ </slot>
60
+ </view>
61
+ <view class="d-popup__safe-bottom"></view>
62
+ </view>
63
+ </view>
64
+ </template>
65
+
66
+ <script>
67
+ /*如果底部有自定义导航栏,可适当设置内容padding-bottom值*/
68
+ export default {
69
+ name: "d-popup",
70
+ emits: ['update:show', 'clickMore', 'close', 'open', 'clickMask'],
71
+ props: {
72
+ // 是否显示
73
+ show: {
74
+ type: Boolean,
75
+ default: false
76
+ },
77
+ // 是否展示更多按钮
78
+ showMoreBtn: {
79
+ type: Boolean,
80
+ default: false
81
+ },
82
+ // 是否展示关闭按钮
83
+ closabled: {
84
+ type: Boolean,
85
+ default: true
86
+ },
87
+ // 标题
88
+ title: {
89
+ type: String,
90
+ default: ""
91
+ },
92
+ // 辅助操作描述内容
93
+ desc: {
94
+ type: String,
95
+ default: ""
96
+ },
97
+ // 辅助操作提示内容
98
+ tips: {
99
+ type: String,
100
+ default: ""
101
+ },
102
+ //背景颜色
103
+ background: {
104
+ type: String,
105
+ default: "#fff"
106
+ },
107
+ // Popup圆角
108
+ radius: {
109
+ type: String,
110
+ default: "24rpx"
111
+ },
112
+ // 是否显示遮罩
113
+ mask: {
114
+ type: Boolean,
115
+ default: true
116
+ },
117
+ // 点击遮罩 是否可关闭
118
+ maskClosable: {
119
+ type: Boolean,
120
+ default: true
121
+ },
122
+ // 遮罩背景色
123
+ maskBackground: {
124
+ type: String,
125
+ default: "rgba(0,0,0,.6)"
126
+ },
127
+ // 弹窗固定高度
128
+ height: {
129
+ type: String,
130
+ default: ""
131
+ },
132
+ // 弹窗最大高度
133
+ maxHeight: {
134
+ type: String,
135
+ default: "75%"
136
+ },
137
+ // 顶部是否显示下滑Icon
138
+ showSlideIcon: {
139
+ type: Boolean,
140
+ default: false
141
+ },
142
+ // 隐藏底部(同时最大高度底部遮罩也会消失)
143
+ hiddenFooter: {
144
+ type: Boolean,
145
+ default: false
146
+ }
147
+ },
148
+ data() {
149
+ return {
150
+ wrapperShow: false,
151
+ innerShow: false
152
+ };
153
+ },
154
+ computed: {
155
+ popupStyle() {
156
+ const style = {
157
+ borderTopLeftRadius: this.radius,
158
+ borderTopRightRadius: this.radius,
159
+ background: this.background,
160
+ maxHeight: this.maxHeight
161
+ };
162
+ // 只有当 height 有值时才设置 height 属性,避免影响现有组件
163
+ if (this.height) {
164
+ style.height = this.height;
165
+ }
166
+ return style;
167
+ }
168
+ },
169
+ watch: {
170
+ show(nv) {
171
+ if (nv) {
172
+ this.wrapperShow = true;
173
+ this.innerShow = true;
174
+ this.$emit('open');
175
+ } else {
176
+ this.innerShow = false;
177
+ setTimeout(() => {
178
+ this.wrapperShow = false;
179
+ }, 300);
180
+ }
181
+ }
182
+ },
183
+ methods: {
184
+ onClickMask() {
185
+ this.$emit('clickMask');
186
+ if (!this.maskClosable) return;
187
+ this.handleClose();
188
+ },
189
+
190
+ handleClose() {
191
+ this.$emit("update:show", false);
192
+ this.$emit("close");
193
+ },
194
+
195
+ clickMore() {
196
+ this.$emit("clickMore");
197
+ },
198
+
199
+ stop() {
200
+ // do nothing
201
+ }
202
+ }
203
+ };
204
+ </script>
205
+
206
+ <style scoped>
207
+ @keyframes fadeIn {
208
+ from {
209
+ opacity: 0;
210
+ }
211
+ to {
212
+ opacity: 1;
213
+ }
214
+ }
215
+
216
+ @keyframes fadeOut {
217
+ from {
218
+ opacity: 1;
219
+ }
220
+ to {
221
+ opacity: 0;
222
+ }
223
+ }
224
+
225
+ @keyframes slideUp {
226
+ from {
227
+ transform: translate3d(0, 100%, 0);
228
+ }
229
+
230
+ to {
231
+ transform: translate3d(0, 0, 0);
232
+ }
233
+ }
234
+
235
+ @keyframes slideDown {
236
+ from {
237
+ transform: translate3d(0, 0, 0);
238
+ }
239
+
240
+ to {
241
+ transform: translate3d(0, 100%, 0);
242
+ }
243
+ }
244
+
245
+ .animate_fade-in {
246
+ animation: fadeIn ease 0.3s forwards;
247
+ }
248
+
249
+ .animate_fade-out {
250
+ animation: fadeOut ease 0.3s forwards;
251
+ }
252
+
253
+ .animate-slide-up {
254
+ animation: slideUp ease 0.3s forwards;
255
+ }
256
+
257
+ .animate-slide-down {
258
+ animation: slideDown ease 0.3s forwards;
259
+ }
260
+
261
+ .d-active {
262
+ opacity: 0.6;
263
+ }
264
+
265
+ .d-popup__mask {
266
+ position: fixed;
267
+ left: 0;
268
+ right: 0;
269
+ top: 0;
270
+ bottom: 0;
271
+ z-index: 1000;
272
+ }
273
+
274
+ .d-popup__popup {
275
+ position: fixed;
276
+ left: 0;
277
+ right: 0;
278
+ bottom: 0;
279
+ min-height: 255rpx;
280
+ max-height: 75%;
281
+ z-index: 5000;
282
+ overflow: hidden;
283
+ box-sizing: border-box;
284
+ display: flex;
285
+ flex-direction: column;
286
+ outline: 0;
287
+ }
288
+ .d-popup__popup__more-icon {
289
+ width: 42rpx;
290
+ height: 42rpx;
291
+ }
292
+
293
+ .d-popup__slide-icon {
294
+ width: 100rpx;
295
+ height: 8rpx;
296
+ border-radius: 30rpx;
297
+ background: #d8d8d8;
298
+ }
299
+
300
+ .d-popup__popup__close-icon {
301
+ width: 32rpx;
302
+ height: 32rpx;
303
+ }
304
+
305
+ .d-popup__popup-show {
306
+ transform: translate3d(0, 0, 0);
307
+ }
308
+
309
+ .d-popup__popup__top {
310
+ width: 100%;
311
+ display: flex;
312
+ flex-direction: column;
313
+ align-items: center;
314
+ padding: 20rpx 0 10rpx;
315
+ }
316
+
317
+ .d-popup__popup__hd {
318
+ display: grid;
319
+ grid-template-columns: auto 1fr auto;
320
+ padding: 30rpx 30rpx 40rpx 30rpx;
321
+ }
322
+
323
+ .d-popup__popup__hd__left {
324
+ min-width: 30rpx;
325
+ padding-right: 10rpx;
326
+ }
327
+
328
+ .d-popup__popup__hd__middle {
329
+ text-align: center;
330
+ flex: 1;
331
+ margin: 0 10rpx;
332
+ }
333
+
334
+ .d-popup__popup__hd__right {
335
+ min-width: 30rpx;
336
+ padding-left: 10rpx;
337
+ }
338
+
339
+ .d-popup__popup__hd__title {
340
+ line-height: 48rpx;
341
+ font-size: 34rpx;
342
+ color: #3d3d3d;
343
+ font-weight: bold;
344
+ }
345
+
346
+ .d-popup__popup__bd {
347
+ padding: 0 30rpx;
348
+ box-sizing: border-box;
349
+ width: 100%;
350
+ overflow-y: auto;
351
+ }
352
+
353
+ .d-popup__popup__bd__desc {
354
+ font-size: 32rpx;
355
+ font-weight: bold;
356
+ color: #333;
357
+ line-height: 42rpx;
358
+ }
359
+
360
+ .d-popup__popup__bd__tips {
361
+ font-size: 30rpx;
362
+ color: #666;
363
+ line-height: 40rpx;
364
+ margin-top: 20rpx;
365
+ }
366
+
367
+ .d-popup__popup__ft {
368
+ position: relative;
369
+ z-index: 9;
370
+ }
371
+
372
+ .d-popup__safe-bottom {
373
+ height: env(safe-area-inset-bottom);
374
+ }
375
+
376
+ .d-popup__popup__ft__tool {
377
+ position: relative;
378
+ z-index: 50;
379
+ }
380
+
381
+ .d-popup__popup__ft__tool::before {
382
+ content: "";
383
+ height: 100rpx;
384
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffffff 100%);
385
+ position: absolute;
386
+ bottom: calc(100% - 1px);
387
+ left: 0;
388
+ right: 0;
389
+ transform: translateZ(0);
390
+ pointer-events: none;
391
+ background-image: linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, #ffffff 100%);
392
+ }
393
+
394
+ .d-popup__popup__ft__mask {
395
+ position: absolute;
396
+ bottom: 0;
397
+ left: 0;
398
+ width: 100%;
399
+ height: 100rpx;
400
+ opacity: 1;
401
+ }
402
+
403
+ .d-popup__popup__ft__buttons {
404
+ display: flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ padding-bottom: 60rpx;
408
+ }
409
+
410
+ .ellipse-one-line {
411
+ word-break: break-all;
412
+ text-overflow: ellipsis;
413
+ display: -webkit-box;
414
+ /*! autoprefixer: off */
415
+ -webkit-box-orient: vertical;
416
+ -webkit-line-clamp: 1;
417
+ overflow: hidden;
418
+ }
419
+ </style>
package/lib/index.js CHANGED
@@ -13,7 +13,7 @@ import DTabs from './components/d-tabs/d-tabs.vue';
13
13
  }
14
14
  });
15
15
  }
16
- const version = '0.1.5';
16
+ const version = '0.2.1';
17
17
  export { install, version };
18
18
 
19
19
  export default { install, version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "distinctui-uni",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Distinct MiniProgram UI",
5
5
  "author": "benzheng <benzheng@distinctclinic.com>",
6
6
  "scripts": {
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "publishConfig": {
19
19
  "access": "public",
20
- "registry": "https://registry.npmjs.com/"
20
+ "registry": "https://registry.npmjs.org/"
21
21
  },
22
22
  "keywords": [
23
23
  "MiniProgram",