1
1
<template >
2
- <div class =" nut-address-list-general" >
3
- <item-contents
4
- :item =" item"
5
- @delIcon =" delShellClick"
6
- @editIcon =" editShellClick"
7
- @itemClick =" itemShellClick"
8
- @touchstart =" holddownstart"
9
- @touchend =" holddownend"
10
- @touchmove =" holddownmove"
11
- >
2
+ <div class =" nut-address-list-general" v-if =" !swipeEdition" >
3
+ <component :is =" renderCompontent()" @touchstart =" holddownstart" @touchend =" holddownend" @touchmove =" holddownmove" >
12
4
<template v-slot :contentTop >
13
5
<slot name =" contentInfo" ></slot >
14
6
</template >
18
10
<template v-slot :contentAddr >
19
11
<slot name =" contentAddrs" ></slot >
20
12
</template >
21
- </item-contents >
13
+ </component >
22
14
<div class =" nut-address-list-general__mask" v-if =" longPress && showMaskRef" @click =" maskClick" >
23
15
<slot name =" longpressAll" >
24
16
<div class =" nut-address-list-general__mask-copy" @click =" copyCLick" >
27
19
<div class =" nut-address-list-general__mask-set" @click =" setDefault" >
28
20
<div class =" nut-address-list-mask-contain" > 设置<br />默认 </div >
29
21
</div >
30
- <div class =" nut-address-list-general__mask-del" @click =" delClick " >
22
+ <div class =" nut-address-list-general__mask-del" @click =" delLongClick " >
31
23
<div class =" nut-address-list-mask-contain" > 删除<br />地址 </div >
32
24
</div >
33
25
</slot >
34
26
</div >
35
27
<div class =" nut-address-list__mask-bottom" v-if =" showMaskRef" @click =" hideMaskClick" ></div >
36
28
</div >
29
+ <nut-swipe v-else >
30
+ <div class =" nut-address-list-swipe" >
31
+ <component :is =" renderCompontent()" @touchmove =" swipemove" @touchstart =" swipestart" >
32
+ <template v-slot :contentTop >
33
+ <slot name =" contentInfo" ></slot >
34
+ </template >
35
+ <template v-slot :contentIcon >
36
+ <slot name =" contentIcons" ></slot >
37
+ </template >
38
+ <template v-slot :contentAddr >
39
+ <slot name =" contentAddrs" ></slot >
40
+ </template >
41
+ </component >
42
+ </div >
43
+ <template #right >
44
+ <slot name =" swiperightbtn" >
45
+ <nut-button shape =" square" style =" height : 100% " type =" danger" @click =" swipeDelClick" >删除</nut-button >
46
+ </slot >
47
+ </template >
48
+ </nut-swipe >
37
49
</template >
38
50
<script lang="ts">
39
- import { ref } from ' vue' ;
51
+ import { ref , h } from ' vue' ;
40
52
import { createComponent } from ' @/packages/utils/create' ;
41
53
const { create } = createComponent (' addresslist-general' );
42
54
import ItemContents from ' ./ItemContents.vue' ;
@@ -50,29 +62,53 @@ export default create({
50
62
longPress: {
51
63
type: Boolean ,
52
64
default: false
65
+ },
66
+ swipeEdition: {
67
+ type: Boolean ,
68
+ default: false
53
69
}
54
70
},
55
- emits: [' delIcon' , ' editIcon' , ' itemClick' , ' longDown' , ' longCopy' , ' longSet' , ' longDel' ],
71
+ emits: [' delIcon' , ' editIcon' , ' itemClick' , ' longDown' , ' longCopy' , ' longSet' , ' longDel' , ' swipeDel ' ],
56
72
components: {
57
73
ItemContents
58
74
},
59
75
60
76
setup(props , { emit }) {
77
+ const renderCompontent = () => {
78
+ return h (ItemContents , {
79
+ item: props .item ,
80
+ onDelIcon(event : Event ) {
81
+ delClick (event );
82
+ },
83
+ onEditIcon(event : Event ) {
84
+ editClick (event );
85
+ },
86
+ onItemClick(event : Event ) {
87
+ itemClick (event );
88
+ }
89
+ });
90
+ };
61
91
let loop: any = null ;
92
+ const moveRef = ref (false );
62
93
const showMaskRef = ref (false );
63
94
64
- const delShellClick = (event : Event ) => {
95
+ const delClick = (event : Event ) => {
65
96
emit (' delIcon' , event , props .item );
66
97
event .stopPropagation ();
67
98
};
68
- const editShellClick = (event : Event ) => {
99
+ const editClick = (event : Event ) => {
69
100
emit (' editIcon' , event , props .item );
70
101
event .stopPropagation ();
71
102
};
72
- const itemShellClick = (event : Event ) => {
103
+ const itemClick = (event : Event ) => {
104
+ if (moveRef .value ) return ;
73
105
emit (' itemClick' , event , props .item );
74
106
event .stopPropagation ();
75
107
};
108
+ const delLongClick = (event : Event ) => {
109
+ emit (' longDel' , event , props .item );
110
+ event .stopPropagation ();
111
+ };
76
112
const holdingFunc = (event : Event ) => {
77
113
loop = 0 ;
78
114
showMaskRef .value = true ;
@@ -103,10 +139,6 @@ export default create({
103
139
emit (' longSet' , event , props .item );
104
140
event .stopPropagation ();
105
141
};
106
- const delClick = (event : Event ) => {
107
- emit (' longDel' , event , props .item );
108
- event .stopPropagation ();
109
- };
110
142
const maskClick = (event : Event ) => {
111
143
if (loop != 0 ) {
112
144
// 排除长按时触发点击的情况
@@ -115,20 +147,34 @@ export default create({
115
147
event .stopPropagation ();
116
148
event .preventDefault ();
117
149
};
150
+ const swipeDelClick = (event : Event ) => {
151
+ emit (' swipeDel' , event , props .item );
152
+ event .stopPropagation ();
153
+ };
154
+ const swipestart = () => {
155
+ moveRef .value = false ;
156
+ };
157
+ const swipemove = () => {
158
+ moveRef .value = true ;
159
+ };
118
160
119
161
return {
120
- delShellClick ,
121
- editShellClick ,
122
- itemShellClick ,
162
+ renderCompontent ,
163
+ showMaskRef ,
164
+ itemClick ,
165
+ editClick ,
166
+ delClick ,
167
+ delLongClick ,
123
168
holddownstart ,
124
169
holddownmove ,
125
170
holddownend ,
126
- showMaskRef ,
127
- delClick ,
128
171
copyCLick ,
129
172
hideMaskClick ,
130
173
setDefault ,
131
- maskClick
174
+ maskClick ,
175
+ swipeDelClick ,
176
+ swipestart ,
177
+ swipemove
132
178
};
133
179
}
134
180
});
0 commit comments