@hlw-uni/mp-vue 1.1.1 → 1.1.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.
- package/README.md +82 -0
- package/dist/index.js +185 -172
- package/dist/index.mjs +186 -173
- package/dist/style.css +87 -59
- package/package.json +1 -1
- package/src/components/hlw-modal/index.vue +14 -34
- package/src/components/hlw-page/index.vue +5 -1
- package/src/components/hlw-popup/index.vue +40 -17
- package/src/components/hlw-tag/index.vue +27 -3
package/dist/style.css
CHANGED
|
@@ -594,7 +594,7 @@ from {
|
|
|
594
594
|
to {
|
|
595
595
|
transform: rotate(360deg);
|
|
596
596
|
}
|
|
597
|
-
}.hlw-modal-mask[data-v-
|
|
597
|
+
}.hlw-modal-mask[data-v-91d9e108] {
|
|
598
598
|
position: fixed;
|
|
599
599
|
inset: 0;
|
|
600
600
|
display: flex;
|
|
@@ -602,52 +602,52 @@ to {
|
|
|
602
602
|
justify-content: center;
|
|
603
603
|
background: rgba(0, 0, 0, 0.5);
|
|
604
604
|
z-index: 1000;
|
|
605
|
-
animation: hlw-fade-in-
|
|
605
|
+
animation: hlw-fade-in-91d9e108 0.2s;
|
|
606
606
|
}
|
|
607
|
-
.hlw-modal[data-v-
|
|
607
|
+
.hlw-modal[data-v-91d9e108] {
|
|
608
608
|
width: 80%;
|
|
609
609
|
max-width: 600rpx;
|
|
610
610
|
background: #fff;
|
|
611
611
|
border-radius: var(--radius-xl, 32rpx);
|
|
612
612
|
overflow: hidden;
|
|
613
|
-
animation: hlw-scale-in-
|
|
613
|
+
animation: hlw-scale-in-91d9e108 0.25s ease;
|
|
614
614
|
}
|
|
615
|
-
.hlw-modal-title[data-v-
|
|
615
|
+
.hlw-modal-title[data-v-91d9e108] {
|
|
616
616
|
padding: 40rpx 32rpx 0;
|
|
617
617
|
text-align: center;
|
|
618
618
|
font-size: var(--font-md, 32rpx);
|
|
619
619
|
font-weight: 600;
|
|
620
620
|
color: #1e293b;
|
|
621
621
|
}
|
|
622
|
-
.hlw-modal-body[data-v-
|
|
622
|
+
.hlw-modal-body[data-v-91d9e108] {
|
|
623
623
|
padding: 32rpx;
|
|
624
624
|
font-size: var(--font-base, 28rpx);
|
|
625
625
|
color: #475569;
|
|
626
626
|
text-align: center;
|
|
627
627
|
line-height: 1.6;
|
|
628
628
|
}
|
|
629
|
-
.hlw-modal-footer[data-v-
|
|
629
|
+
.hlw-modal-footer[data-v-91d9e108] {
|
|
630
630
|
display: flex;
|
|
631
631
|
border-top: 1rpx solid var(--border-color-light, #f1f5f9);
|
|
632
632
|
}
|
|
633
|
-
.hlw-modal-btn[data-v-
|
|
633
|
+
.hlw-modal-btn[data-v-91d9e108] {
|
|
634
634
|
flex: 1;
|
|
635
635
|
padding: 24rpx 0;
|
|
636
636
|
text-align: center;
|
|
637
637
|
font-size: var(--font-base, 28rpx);
|
|
638
638
|
font-weight: 500;
|
|
639
639
|
}
|
|
640
|
-
.hlw-modal-btn[data-v-
|
|
640
|
+
.hlw-modal-btn[data-v-91d9e108]:active {
|
|
641
641
|
background: #f8fafc;
|
|
642
642
|
}
|
|
643
|
-
.hlw-modal-btn--cancel[data-v-
|
|
643
|
+
.hlw-modal-btn--cancel[data-v-91d9e108] {
|
|
644
644
|
color: #64748b;
|
|
645
645
|
border-right: 1rpx solid var(--border-color-light, #f1f5f9);
|
|
646
646
|
}
|
|
647
|
-
.hlw-modal-btn--confirm[data-v-
|
|
647
|
+
.hlw-modal-btn--confirm[data-v-91d9e108] {
|
|
648
648
|
color: var(--primary-color, #3b82f6);
|
|
649
649
|
}
|
|
650
|
-
@keyframes hlw-fade-in-
|
|
650
|
+
@keyframes hlw-fade-in-91d9e108 {
|
|
651
651
|
from {
|
|
652
652
|
opacity: 0;
|
|
653
653
|
}
|
|
@@ -655,7 +655,7 @@ to {
|
|
|
655
655
|
opacity: 1;
|
|
656
656
|
}
|
|
657
657
|
}
|
|
658
|
-
@keyframes hlw-scale-in-
|
|
658
|
+
@keyframes hlw-scale-in-91d9e108 {
|
|
659
659
|
from {
|
|
660
660
|
transform: scale(0.9);
|
|
661
661
|
opacity: 0;
|
|
@@ -709,97 +709,112 @@ to {
|
|
|
709
709
|
100% {
|
|
710
710
|
transform: translateX(-100%);
|
|
711
711
|
}
|
|
712
|
-
}.hlw-page[data-v-
|
|
712
|
+
}.hlw-page[data-v-01bb7796] {
|
|
713
713
|
width: 100%;
|
|
714
714
|
height: 100vh;
|
|
715
715
|
display: flex;
|
|
716
716
|
flex-direction: column;
|
|
717
717
|
overflow: hidden;
|
|
718
718
|
}
|
|
719
|
-
.hlw-page-header[data-v-
|
|
719
|
+
.hlw-page-header[data-v-01bb7796] {
|
|
720
720
|
flex-shrink: 0;
|
|
721
721
|
}
|
|
722
|
-
.hlw-page-content[data-v-
|
|
722
|
+
.hlw-page-content[data-v-01bb7796] {
|
|
723
723
|
flex: 1;
|
|
724
724
|
height: 0;
|
|
725
725
|
width: 100%;
|
|
726
726
|
}
|
|
727
|
-
.hlw-page-footer[data-v-
|
|
727
|
+
.hlw-page-footer[data-v-01bb7796] {
|
|
728
728
|
flex-shrink: 0;
|
|
729
|
-
}.hlw-popup-mask[data-v-
|
|
729
|
+
}.hlw-popup-mask[data-v-be12aee0] {
|
|
730
730
|
position: fixed;
|
|
731
731
|
inset: 0;
|
|
732
732
|
background: rgba(0, 0, 0, 0.5);
|
|
733
733
|
z-index: 1000;
|
|
734
|
-
animation: hlw-fade-in-
|
|
734
|
+
animation: hlw-fade-in-be12aee0 0.25s;
|
|
735
735
|
}
|
|
736
|
-
.hlw-popup[data-v-
|
|
736
|
+
.hlw-popup[data-v-be12aee0] {
|
|
737
737
|
position: fixed;
|
|
738
738
|
z-index: 1001;
|
|
739
739
|
background: #fff;
|
|
740
|
-
transition: transform 0.3s ease, opacity 0.3s ease;
|
|
741
740
|
}
|
|
742
|
-
.hlw-popup--bottom[data-v-
|
|
741
|
+
.hlw-popup--bottom[data-v-be12aee0] {
|
|
743
742
|
left: 0;
|
|
744
743
|
right: 0;
|
|
745
744
|
bottom: 0;
|
|
746
745
|
max-height: 80vh;
|
|
747
|
-
|
|
746
|
+
animation: hlw-popup-slide-up-be12aee0 0.25s ease;
|
|
748
747
|
}
|
|
749
|
-
.hlw-popup--bottom.hlw-popup--
|
|
750
|
-
transform: translateY(0);
|
|
751
|
-
}
|
|
752
|
-
.hlw-popup--bottom.hlw-popup--round[data-v-2d71ef9b] {
|
|
748
|
+
.hlw-popup--bottom.hlw-popup--round[data-v-be12aee0] {
|
|
753
749
|
border-radius: var(--radius-xl, 32rpx) var(--radius-xl, 32rpx) 0 0;
|
|
754
750
|
}
|
|
755
|
-
.hlw-popup--top[data-v-
|
|
751
|
+
.hlw-popup--top[data-v-be12aee0] {
|
|
756
752
|
left: 0;
|
|
757
753
|
right: 0;
|
|
758
754
|
top: 0;
|
|
759
755
|
max-height: 80vh;
|
|
760
|
-
|
|
761
|
-
}
|
|
762
|
-
.hlw-popup--top.hlw-popup--show[data-v-2d71ef9b] {
|
|
763
|
-
transform: translateY(0);
|
|
756
|
+
animation: hlw-popup-slide-down-be12aee0 0.25s ease;
|
|
764
757
|
}
|
|
765
|
-
.hlw-popup--top.hlw-popup--round[data-v-
|
|
758
|
+
.hlw-popup--top.hlw-popup--round[data-v-be12aee0] {
|
|
766
759
|
border-radius: 0 0 var(--radius-xl, 32rpx) var(--radius-xl, 32rpx);
|
|
767
760
|
}
|
|
768
|
-
.hlw-popup--center[data-v-
|
|
761
|
+
.hlw-popup--center[data-v-be12aee0] {
|
|
769
762
|
left: 50%;
|
|
770
763
|
top: 50%;
|
|
771
764
|
width: 80%;
|
|
772
|
-
transform: translate(-50%, -50%)
|
|
773
|
-
opacity: 0;
|
|
765
|
+
transform: translate(-50%, -50%);
|
|
774
766
|
border-radius: var(--radius-xl, 32rpx);
|
|
767
|
+
animation: hlw-popup-scale-in-be12aee0 0.22s ease;
|
|
775
768
|
}
|
|
776
|
-
.hlw-popup
|
|
777
|
-
transform: translate(-50%, -50%) scale(1);
|
|
778
|
-
opacity: 1;
|
|
779
|
-
}
|
|
780
|
-
.hlw-popup-header[data-v-2d71ef9b] {
|
|
769
|
+
.hlw-popup-header[data-v-be12aee0] {
|
|
781
770
|
display: flex;
|
|
782
771
|
align-items: center;
|
|
783
772
|
justify-content: space-between;
|
|
784
773
|
padding: 28rpx 32rpx;
|
|
785
774
|
border-bottom: 1rpx solid var(--border-color-light, #f1f5f9);
|
|
786
775
|
}
|
|
787
|
-
.hlw-popup-title[data-v-
|
|
776
|
+
.hlw-popup-title[data-v-be12aee0] {
|
|
788
777
|
font-size: var(--font-md, 32rpx);
|
|
789
778
|
font-weight: 600;
|
|
790
779
|
color: #1e293b;
|
|
791
780
|
}
|
|
792
|
-
.hlw-popup-close[data-v-
|
|
781
|
+
.hlw-popup-close[data-v-be12aee0] {
|
|
793
782
|
font-size: 32rpx;
|
|
794
783
|
color: #94a3b8;
|
|
795
784
|
line-height: 1;
|
|
796
785
|
padding: 4rpx;
|
|
797
786
|
}
|
|
798
|
-
@keyframes hlw-fade-in-
|
|
787
|
+
@keyframes hlw-fade-in-be12aee0 {
|
|
788
|
+
from {
|
|
789
|
+
opacity: 0;
|
|
790
|
+
}
|
|
791
|
+
to {
|
|
792
|
+
opacity: 1;
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
@keyframes hlw-popup-slide-up-be12aee0 {
|
|
796
|
+
from {
|
|
797
|
+
transform: translateY(100%);
|
|
798
|
+
}
|
|
799
|
+
to {
|
|
800
|
+
transform: translateY(0);
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
@keyframes hlw-popup-slide-down-be12aee0 {
|
|
804
|
+
from {
|
|
805
|
+
transform: translateY(-100%);
|
|
806
|
+
}
|
|
807
|
+
to {
|
|
808
|
+
transform: translateY(0);
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
@keyframes hlw-popup-scale-in-be12aee0 {
|
|
799
812
|
from {
|
|
813
|
+
transform: translate(-50%, -50%) scale(0.92);
|
|
800
814
|
opacity: 0;
|
|
801
815
|
}
|
|
802
816
|
to {
|
|
817
|
+
transform: translate(-50%, -50%) scale(1);
|
|
803
818
|
opacity: 1;
|
|
804
819
|
}
|
|
805
820
|
}.hlw-search[data-v-4fe1bfab] {
|
|
@@ -933,74 +948,87 @@ to {
|
|
|
933
948
|
border-radius: 6rpx;
|
|
934
949
|
background: var(--primary-color, #3b82f6);
|
|
935
950
|
transition: width 0.2s;
|
|
936
|
-
}.hlw-tag[data-v-
|
|
951
|
+
}.hlw-tag[data-v-a407a3ce] {
|
|
937
952
|
display: inline-flex;
|
|
938
953
|
align-items: center;
|
|
954
|
+
justify-content: center;
|
|
955
|
+
vertical-align: middle;
|
|
939
956
|
gap: 4rpx;
|
|
940
957
|
font-weight: 500;
|
|
958
|
+
line-height: 1.2;
|
|
941
959
|
border: 2rpx solid transparent;
|
|
960
|
+
box-sizing: border-box;
|
|
942
961
|
}
|
|
943
|
-
.hlw-tag--medium[data-v-
|
|
962
|
+
.hlw-tag--medium[data-v-a407a3ce] {
|
|
963
|
+
min-height: 36rpx;
|
|
944
964
|
padding: 4rpx 16rpx;
|
|
945
965
|
font-size: var(--font-xs, 20rpx);
|
|
946
966
|
border-radius: var(--radius-sm, 8rpx);
|
|
947
967
|
}
|
|
948
|
-
.hlw-tag--small[data-v-
|
|
968
|
+
.hlw-tag--small[data-v-a407a3ce] {
|
|
969
|
+
min-height: 28rpx;
|
|
949
970
|
padding: 2rpx 10rpx;
|
|
950
971
|
font-size: 18rpx;
|
|
951
972
|
border-radius: 6rpx;
|
|
952
973
|
}
|
|
953
|
-
.hlw-tag--round[data-v-
|
|
974
|
+
.hlw-tag--round[data-v-a407a3ce] {
|
|
954
975
|
border-radius: 999rpx;
|
|
955
976
|
}
|
|
956
|
-
.hlw-tag--primary[data-v-
|
|
977
|
+
.hlw-tag--primary[data-v-a407a3ce] {
|
|
957
978
|
background: var(--primary-color, #3b82f6);
|
|
958
979
|
color: #fff;
|
|
959
980
|
border-color: var(--primary-color, #3b82f6);
|
|
960
981
|
}
|
|
961
|
-
.hlw-tag--primary.hlw-tag--plain[data-v-
|
|
982
|
+
.hlw-tag--primary.hlw-tag--plain[data-v-a407a3ce] {
|
|
962
983
|
background: transparent;
|
|
963
984
|
color: var(--primary-color, #3b82f6);
|
|
964
985
|
}
|
|
965
|
-
.hlw-tag--success[data-v-
|
|
986
|
+
.hlw-tag--success[data-v-a407a3ce] {
|
|
966
987
|
background: #10b981;
|
|
967
988
|
color: #fff;
|
|
968
989
|
border-color: #10b981;
|
|
969
990
|
}
|
|
970
|
-
.hlw-tag--success.hlw-tag--plain[data-v-
|
|
991
|
+
.hlw-tag--success.hlw-tag--plain[data-v-a407a3ce] {
|
|
971
992
|
background: transparent;
|
|
972
993
|
color: #10b981;
|
|
973
994
|
}
|
|
974
|
-
.hlw-tag--warning[data-v-
|
|
995
|
+
.hlw-tag--warning[data-v-a407a3ce] {
|
|
975
996
|
background: #f59e0b;
|
|
976
997
|
color: #fff;
|
|
977
998
|
border-color: #f59e0b;
|
|
978
999
|
}
|
|
979
|
-
.hlw-tag--warning.hlw-tag--plain[data-v-
|
|
1000
|
+
.hlw-tag--warning.hlw-tag--plain[data-v-a407a3ce] {
|
|
980
1001
|
background: transparent;
|
|
981
1002
|
color: #f59e0b;
|
|
982
1003
|
}
|
|
983
|
-
.hlw-tag--danger[data-v-
|
|
1004
|
+
.hlw-tag--danger[data-v-a407a3ce] {
|
|
984
1005
|
background: #ef4444;
|
|
985
1006
|
color: #fff;
|
|
986
1007
|
border-color: #ef4444;
|
|
987
1008
|
}
|
|
988
|
-
.hlw-tag--danger.hlw-tag--plain[data-v-
|
|
1009
|
+
.hlw-tag--danger.hlw-tag--plain[data-v-a407a3ce] {
|
|
989
1010
|
background: transparent;
|
|
990
1011
|
color: #ef4444;
|
|
991
1012
|
}
|
|
992
|
-
.hlw-tag--info[data-v-
|
|
1013
|
+
.hlw-tag--info[data-v-a407a3ce] {
|
|
993
1014
|
background: #64748b;
|
|
994
1015
|
color: #fff;
|
|
995
1016
|
border-color: #64748b;
|
|
996
1017
|
}
|
|
997
|
-
.hlw-tag--info.hlw-tag--plain[data-v-
|
|
1018
|
+
.hlw-tag--info.hlw-tag--plain[data-v-a407a3ce] {
|
|
998
1019
|
background: transparent;
|
|
999
1020
|
color: #64748b;
|
|
1000
1021
|
}
|
|
1001
|
-
.hlw-tag-
|
|
1022
|
+
.hlw-tag-text[data-v-a407a3ce] {
|
|
1023
|
+
display: block;
|
|
1024
|
+
line-height: 1.2;
|
|
1025
|
+
}
|
|
1026
|
+
.hlw-tag-close[data-v-a407a3ce] {
|
|
1002
1027
|
font-size: 1em;
|
|
1003
1028
|
line-height: 1;
|
|
1029
|
+
display: inline-flex;
|
|
1030
|
+
align-items: center;
|
|
1031
|
+
justify-content: center;
|
|
1004
1032
|
margin-left: 2rpx;
|
|
1005
1033
|
opacity: 0.8;
|
|
1006
1034
|
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<view v-if="show" class="hlw-modal-mask" @tap.self="onMask">
|
|
3
|
-
<view class="hlw-modal" :class="{ 'hlw-modal--show': show }">
|
|
3
|
+
<view class="hlw-modal" :class="{ 'hlw-modal--show': show }" @tap.stop>
|
|
4
4
|
<view v-if="title" class="hlw-modal-title">{{ title }}</view>
|
|
5
5
|
<view class="hlw-modal-body">
|
|
6
6
|
<slot />
|
|
7
7
|
</view>
|
|
8
8
|
<slot name="footer">
|
|
9
9
|
<view class="hlw-modal-footer">
|
|
10
|
-
<view
|
|
11
|
-
|
|
10
|
+
<view
|
|
11
|
+
v-if="showCancel"
|
|
12
|
+
class="hlw-modal-btn hlw-modal-btn--cancel"
|
|
13
|
+
@tap.stop="onCancel"
|
|
14
|
+
>
|
|
15
|
+
{{ cancelText }}
|
|
16
|
+
</view>
|
|
17
|
+
<view class="hlw-modal-btn hlw-modal-btn--confirm" @tap.stop="onConfirm">
|
|
18
|
+
{{ confirmText }}
|
|
19
|
+
</view>
|
|
12
20
|
</view>
|
|
13
21
|
</slot>
|
|
14
22
|
</view>
|
|
@@ -16,36 +24,6 @@
|
|
|
16
24
|
</template>
|
|
17
25
|
|
|
18
26
|
<script setup lang="ts">
|
|
19
|
-
/**
|
|
20
|
-
* HlwModal — 模态弹窗
|
|
21
|
-
*
|
|
22
|
-
* 比 uni.showModal 更灵活:支持插槽自定义内容和底部按钮。
|
|
23
|
-
* 使用 v-model:show 控制显隐。
|
|
24
|
-
*
|
|
25
|
-
* @props
|
|
26
|
-
* show - 是否显示,支持 v-model:show
|
|
27
|
-
* title - 标题文字
|
|
28
|
-
* showCancel - 是否显示取消按钮,默认 true
|
|
29
|
-
* confirmText - 确认按钮文字,默认 "确定"
|
|
30
|
-
* cancelText - 取消按钮文字,默认 "取消"
|
|
31
|
-
* closeOnMask - 点击蒙层是否关闭,默认 true
|
|
32
|
-
*
|
|
33
|
-
* @events
|
|
34
|
-
* update:show - 显隐状态变更
|
|
35
|
-
* confirm - 点击确认
|
|
36
|
-
* cancel - 点击取消
|
|
37
|
-
*
|
|
38
|
-
* @slots
|
|
39
|
-
* default - 弹窗内容
|
|
40
|
-
* footer - 自定义底部按钮区域(覆盖默认确认/取消)
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```vue
|
|
44
|
-
* <HlwModal v-model:show="visible" title="提示" @confirm="onOk">
|
|
45
|
-
* <text>确定要删除吗?</text>
|
|
46
|
-
* </HlwModal>
|
|
47
|
-
* ```
|
|
48
|
-
*/
|
|
49
27
|
interface Props {
|
|
50
28
|
show?: boolean;
|
|
51
29
|
title?: string;
|
|
@@ -55,7 +33,7 @@ interface Props {
|
|
|
55
33
|
closeOnMask?: boolean;
|
|
56
34
|
}
|
|
57
35
|
|
|
58
|
-
withDefaults(defineProps<Props>(), {
|
|
36
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
59
37
|
show: false,
|
|
60
38
|
title: "",
|
|
61
39
|
showCancel: true,
|
|
@@ -71,6 +49,7 @@ function close() {
|
|
|
71
49
|
}
|
|
72
50
|
|
|
73
51
|
function onMask() {
|
|
52
|
+
if (!props.closeOnMask) return;
|
|
74
53
|
close();
|
|
75
54
|
}
|
|
76
55
|
|
|
@@ -140,6 +119,7 @@ function onCancel() {
|
|
|
140
119
|
color: #64748b;
|
|
141
120
|
border-right: 1rpx solid var(--border-color-light, #f1f5f9);
|
|
142
121
|
}
|
|
122
|
+
|
|
143
123
|
&--confirm {
|
|
144
124
|
color: var(--primary-color, #3b82f6);
|
|
145
125
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<view class="hlw-page">
|
|
2
|
+
<view class="hlw-page" :style="themePageStyle">
|
|
3
3
|
<view class="hlw-page-header">
|
|
4
4
|
<slot name="header">
|
|
5
5
|
<hlw-header
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
:enable-flex="true"
|
|
17
17
|
:enhanced="true"
|
|
18
18
|
:show-scrollbar="false"
|
|
19
|
+
:style="themePageStyle"
|
|
19
20
|
>
|
|
20
21
|
<slot></slot>
|
|
21
22
|
</scroll-view>
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
</template>
|
|
27
28
|
|
|
28
29
|
<script setup lang="ts">
|
|
30
|
+
import { useThemePageStyle } from "../../composables/theme";
|
|
29
31
|
/**
|
|
30
32
|
* HlwPage — 页面布局容器
|
|
31
33
|
*
|
|
@@ -61,6 +63,8 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
61
63
|
isBack: false,
|
|
62
64
|
bgClass: "",
|
|
63
65
|
});
|
|
66
|
+
|
|
67
|
+
const { themePageStyle } = useThemePageStyle();
|
|
64
68
|
</script>
|
|
65
69
|
|
|
66
70
|
<style lang="scss" scoped>
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
<view
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
<template v-if="show">
|
|
3
|
+
<view class="hlw-popup-mask" @tap.self="onClose" />
|
|
4
|
+
<view
|
|
5
|
+
class="hlw-popup"
|
|
6
|
+
:class="[`hlw-popup--${position}`, { 'hlw-popup--round': round }]"
|
|
7
|
+
@tap.stop
|
|
8
|
+
>
|
|
9
|
+
<view v-if="title || closable" class="hlw-popup-header">
|
|
10
|
+
<text class="hlw-popup-title">{{ title }}</text>
|
|
11
|
+
<view v-if="closable" class="hlw-popup-close i-fa6-solid-xmark" @tap="onClose" />
|
|
12
|
+
</view>
|
|
13
|
+
<slot />
|
|
7
14
|
</view>
|
|
8
|
-
|
|
9
|
-
</view>
|
|
15
|
+
</template>
|
|
10
16
|
</template>
|
|
11
17
|
|
|
12
18
|
<script setup lang="ts">
|
|
@@ -47,16 +53,17 @@ function onClose() {
|
|
|
47
53
|
position: fixed;
|
|
48
54
|
z-index: 1001;
|
|
49
55
|
background: #fff;
|
|
50
|
-
transition: transform 0.3s ease, opacity 0.3s ease;
|
|
51
56
|
|
|
52
57
|
&--bottom {
|
|
53
58
|
left: 0;
|
|
54
59
|
right: 0;
|
|
55
60
|
bottom: 0;
|
|
56
61
|
max-height: 80vh;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
&.hlw-popup--round {
|
|
62
|
+
animation: hlw-popup-slide-up 0.25s ease;
|
|
63
|
+
|
|
64
|
+
&.hlw-popup--round {
|
|
65
|
+
border-radius: var(--radius-xl, 32rpx) var(--radius-xl, 32rpx) 0 0;
|
|
66
|
+
}
|
|
60
67
|
}
|
|
61
68
|
|
|
62
69
|
&--top {
|
|
@@ -64,19 +71,20 @@ function onClose() {
|
|
|
64
71
|
right: 0;
|
|
65
72
|
top: 0;
|
|
66
73
|
max-height: 80vh;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
&.hlw-popup--round {
|
|
74
|
+
animation: hlw-popup-slide-down 0.25s ease;
|
|
75
|
+
|
|
76
|
+
&.hlw-popup--round {
|
|
77
|
+
border-radius: 0 0 var(--radius-xl, 32rpx) var(--radius-xl, 32rpx);
|
|
78
|
+
}
|
|
70
79
|
}
|
|
71
80
|
|
|
72
81
|
&--center {
|
|
73
82
|
left: 50%;
|
|
74
83
|
top: 50%;
|
|
75
84
|
width: 80%;
|
|
76
|
-
transform: translate(-50%, -50%)
|
|
77
|
-
opacity: 0;
|
|
85
|
+
transform: translate(-50%, -50%);
|
|
78
86
|
border-radius: var(--radius-xl, 32rpx);
|
|
79
|
-
|
|
87
|
+
animation: hlw-popup-scale-in 0.22s ease;
|
|
80
88
|
}
|
|
81
89
|
}
|
|
82
90
|
|
|
@@ -105,4 +113,19 @@ function onClose() {
|
|
|
105
113
|
from { opacity: 0; }
|
|
106
114
|
to { opacity: 1; }
|
|
107
115
|
}
|
|
116
|
+
|
|
117
|
+
@keyframes hlw-popup-slide-up {
|
|
118
|
+
from { transform: translateY(100%); }
|
|
119
|
+
to { transform: translateY(0); }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@keyframes hlw-popup-slide-down {
|
|
123
|
+
from { transform: translateY(-100%); }
|
|
124
|
+
to { transform: translateY(0); }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@keyframes hlw-popup-scale-in {
|
|
128
|
+
from { transform: translate(-50%, -50%) scale(0.92); opacity: 0; }
|
|
129
|
+
to { transform: translate(-50%, -50%) scale(1); opacity: 1; }
|
|
130
|
+
}
|
|
108
131
|
</style>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
:style="customStyle"
|
|
6
6
|
@tap="$emit('click')"
|
|
7
7
|
>
|
|
8
|
-
<slot
|
|
8
|
+
<text class="hlw-tag-text"><slot /></text>
|
|
9
9
|
<view v-if="closable" class="hlw-tag-close i-fa6-solid-xmark" @tap.stop="$emit('close')" />
|
|
10
10
|
</view>
|
|
11
11
|
</template>
|
|
@@ -53,12 +53,28 @@ $colors: (
|
|
|
53
53
|
.hlw-tag {
|
|
54
54
|
display: inline-flex;
|
|
55
55
|
align-items: center;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
vertical-align: middle;
|
|
56
58
|
gap: 4rpx;
|
|
57
59
|
font-weight: 500;
|
|
60
|
+
line-height: 1.2;
|
|
58
61
|
border: 2rpx solid transparent;
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
|
|
64
|
+
&--medium {
|
|
65
|
+
min-height: 36rpx;
|
|
66
|
+
padding: 4rpx 16rpx;
|
|
67
|
+
font-size: var(--font-xs, 20rpx);
|
|
68
|
+
border-radius: var(--radius-sm, 8rpx);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
&--small {
|
|
72
|
+
min-height: 28rpx;
|
|
73
|
+
padding: 2rpx 10rpx;
|
|
74
|
+
font-size: 18rpx;
|
|
75
|
+
border-radius: 6rpx;
|
|
76
|
+
}
|
|
59
77
|
|
|
60
|
-
&--medium { padding: 4rpx 16rpx; font-size: var(--font-xs, 20rpx); border-radius: var(--radius-sm, 8rpx); }
|
|
61
|
-
&--small { padding: 2rpx 10rpx; font-size: 18rpx; border-radius: 6rpx; }
|
|
62
78
|
&--round { border-radius: 999rpx; }
|
|
63
79
|
|
|
64
80
|
@each $name, $c in $colors {
|
|
@@ -67,9 +83,17 @@ $colors: (
|
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
85
|
|
|
86
|
+
.hlw-tag-text {
|
|
87
|
+
display: block;
|
|
88
|
+
line-height: 1.2;
|
|
89
|
+
}
|
|
90
|
+
|
|
70
91
|
.hlw-tag-close {
|
|
71
92
|
font-size: 1em;
|
|
72
93
|
line-height: 1;
|
|
94
|
+
display: inline-flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: center;
|
|
73
97
|
margin-left: 2rpx;
|
|
74
98
|
opacity: 0.8;
|
|
75
99
|
}
|