mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	
		
			
	
	
		
			271 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			271 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
|   | <template> | |||
|  | 	<view class="uni-swipe"> | |||
|  | 		<!-- 在微信小程序 app vue端 h5 使用wxs 实现--> | |||
|  | 		<!-- #ifdef APP-VUE || MP-WEIXIN || H5 --> | |||
|  | 		<view class="uni-swipe_content"> | |||
|  | 			<view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock" | |||
|  | 			 @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change"> | |||
|  | 				<view class="uni-swipe_box"> | |||
|  | 					<slot /> | |||
|  | 				</view> | |||
|  | 				<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock"> | |||
|  | 					<!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题--> | |||
|  | 					<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ | |||
|  | 		          backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', | |||
|  | 		          fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' | |||
|  | 		        }" | |||
|  | 					 class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<!-- #endif --> | |||
|  | 
 | |||
|  | 		<!--  app nvue端 使用 bindingx --> | |||
|  | 		<!-- #ifdef APP-NVUE --> | |||
|  | 		<view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend"> | |||
|  | 			<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}"> | |||
|  | 				<view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{ | |||
|  | 		  backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}" | |||
|  | 				 class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view> | |||
|  | 			</view> | |||
|  | 			<view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock"> | |||
|  | 				<view class="uni-swipe_box"> | |||
|  | 					<slot /> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<!-- #endif --> | |||
|  | 
 | |||
|  | 		<!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js --> | |||
|  | 		<!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 --> | |||
|  | 		<view class="uni-swipe_content"> | |||
|  | 			<view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock"> | |||
|  | 				<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ | |||
|  | 		    backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', | |||
|  | 		    fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' | |||
|  | 		  }" | |||
|  | 				 class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> | |||
|  | 			</view> | |||
|  | 			<view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
 | |||
|  | 			 @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}"> | |||
|  | 				<view class="uni-swipe_move-box"  > | |||
|  | 					<view class="uni-swipe_box"> | |||
|  | 						<slot /> | |||
|  | 					</view> | |||
|  | 				</view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<!-- #endif --> | |||
|  | 		<!-- #ifdef MP-ALIPAY --> | |||
|  | 		<view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"> | |||
|  | 			<view class="viewWidth-hook"> | |||
|  | 				<movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}"> | |||
|  | 					<movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}" | |||
|  | 					 :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange"> | |||
|  | 						<view class="movable-view-box"> | |||
|  | 							<slot></slot> | |||
|  | 						</view> | |||
|  | 					</movable-view> | |||
|  | 				</movable-area> | |||
|  | 			</view> | |||
|  | 			<view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook"> | |||
|  | 				<view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ | |||
|  | 				  backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', | |||
|  | 				  fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' | |||
|  | 				}" | |||
|  | 				 class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> | |||
|  | 			</view> | |||
|  | 		</view> | |||
|  | 		<!-- #endif --> | |||
|  | 	</view> | |||
|  | </template> | |||
|  | <script src="./index.wxs" module="swipe" lang="wxs"></script> | |||
|  | <script> | |||
|  | 	// #ifdef APP-VUE|| MP-WEIXIN || H5
 | |||
|  | 	import mpwxs from './mpwxs' | |||
|  | 	// #endif
 | |||
|  | 
 | |||
|  | 	// #ifdef APP-NVUE
 | |||
|  | 	import bindingx from './bindingx.js' | |||
|  | 	// #endif
 | |||
|  | 
 | |||
|  | 	// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
 | |||
|  | 	import mixins from './mpother' | |||
|  | 	// #endif
 | |||
|  | 
 | |||
|  | 	// #ifdef MP-ALIPAY
 | |||
|  | 	import mpalipay from './mpalipay' | |||
|  | 	// #endif
 | |||
|  | 
 | |||
|  | 	/** | |||
|  | 	 * SwipeActionItem 滑动操作子组件 | |||
|  | 	 * @description 通过滑动触发选项的容器 | |||
|  | 	 * @tutorial https://ext.dcloud.net.cn/plugin?id=181
 | |||
|  | 	 * @property {Boolean} show = [true|false] 开启关闭组件,auto-close = false 时生效 | |||
|  | 	 * @property {Boolean} disabled = [true|false] 是否禁止滑动 | |||
|  | 	 * @property {Boolean} autoClose = [true|false] 其他组件开启的时候,当前组件是否自动关闭 | |||
|  | 	 * @property {Array} options 组件选项内容及样式 | |||
|  | 	 * @event {Function} click 点击选项按钮时触发事件,e = {content,index} ,content(点击内容)、index(下标) | |||
|  | 	 * @event {Function} change 组件打开或关闭时触发,true:开启状态;false:关闭状态 | |||
|  | 	 */ | |||
|  | 
 | |||
|  | 	export default { | |||
|  | 		// #ifdef APP-VUE|| MP-WEIXIN||H5
 | |||
|  | 		mixins: [mpwxs], | |||
|  | 		// #endif
 | |||
|  | 
 | |||
|  | 		// #ifdef APP-NVUE
 | |||
|  | 		mixins: [bindingx], | |||
|  | 		// #endif
 | |||
|  | 
 | |||
|  | 		// #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY ||  H5
 | |||
|  | 		mixins: [mixins], | |||
|  | 		// #endif
 | |||
|  | 
 | |||
|  | 		// #ifdef MP-ALIPAY
 | |||
|  | 		mixins: [mpalipay], | |||
|  | 		// #endif
 | |||
|  | 
 | |||
|  | 		props: { | |||
|  | 			/** | |||
|  | 			 * 按钮内容 | |||
|  | 			 */ | |||
|  | 			options: { | |||
|  | 				type: Array, | |||
|  | 				default () { | |||
|  | 					return [] | |||
|  | 				} | |||
|  | 			}, | |||
|  | 			/** | |||
|  | 			 * 禁用 | |||
|  | 			 */ | |||
|  | 			disabled: { | |||
|  | 				type: Boolean, | |||
|  | 				default: false | |||
|  | 			}, | |||
|  | 			/** | |||
|  | 			 * 变量控制开关 | |||
|  | 			 */ | |||
|  | 			show: { | |||
|  | 				type: Boolean, | |||
|  | 				default: false | |||
|  | 			}, | |||
|  | 			/** | |||
|  | 			 * 是否自动关闭 | |||
|  | 			 */ | |||
|  | 			autoClose: { | |||
|  | 				type: Boolean, | |||
|  | 				default: true | |||
|  | 			} | |||
|  | 		}, | |||
|  | 		inject: ['swipeaction'] | |||
|  | 
 | |||
|  | 
 | |||
|  | 	} | |||
|  | </script> | |||
|  | <style lang="scss" scoped> | |||
|  | 	.uni-swipe { | |||
|  | 		overflow: hidden; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe-box { | |||
|  | 		position: relative; | |||
|  | 		width: 100%; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_content { | |||
|  | 		flex: 1; | |||
|  | 		position: relative; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_move-box { | |||
|  | 		/* #ifndef APP-NVUE */ | |||
|  | 		display: flex; | |||
|  | 		/* #endif */ | |||
|  | 		position: relative; | |||
|  | 		flex-direction: row; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_box { | |||
|  | 		/* #ifndef APP-NVUE */ | |||
|  | 		display: flex; | |||
|  | 		flex-direction: row; | |||
|  | 		width: 100%; | |||
|  | 		flex-shrink: 0; | |||
|  | 		/* #endif */ | |||
|  | 		/* #ifdef APP-NVUE */ | |||
|  | 		flex: 1; | |||
|  | 		/* #endif */ | |||
|  | 		font-size: 14px; | |||
|  | 		background-color: #fff; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_button-group { | |||
|  | 		/* #ifndef APP-VUE|| MP-WEIXIN||H5 */ | |||
|  | 		position: absolute; | |||
|  | 		top: 0; | |||
|  | 		right: 0; | |||
|  | 		bottom: 0; | |||
|  | 		z-index: 0; | |||
|  | 		/* #endif */ | |||
|  | 		/* #ifndef APP-NVUE */ | |||
|  | 		display: flex; | |||
|  | 		flex-shrink: 0; | |||
|  | 		/* #endif */ | |||
|  | 		flex-direction: row; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_button { | |||
|  | 		/* #ifdef APP-NVUE */ | |||
|  | 		position: absolute; | |||
|  | 		left: 0; | |||
|  | 		top: 0; | |||
|  | 		bottom: 0; | |||
|  | 		/* #endif */ | |||
|  | 		/* #ifndef APP-NVUE */ | |||
|  | 		display: flex; | |||
|  | 		/* #endif */ | |||
|  | 		flex-direction: row; | |||
|  | 		justify-content: center; | |||
|  | 		align-items: center; | |||
|  | 		padding: 0 20px; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.uni-swipe_button-text { | |||
|  | 		/* #ifndef APP-NVUE */ | |||
|  | 		flex-shrink: 0; | |||
|  | 		/* #endif */ | |||
|  | 		font-size: 14px; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.ani { | |||
|  | 		transition-property: transform; | |||
|  | 		transition-duration: 0.3s; | |||
|  | 		transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); | |||
|  | 	} | |||
|  | 
 | |||
|  | 	/* #ifdef MP-ALIPAY */ | |||
|  | 	.movable-area { | |||
|  | 		width: 300px; | |||
|  | 		height: 100%; | |||
|  | 		height: 45px; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.movable-view { | |||
|  | 		position: relative; | |||
|  | 		width: 160%; | |||
|  | 		height: 45px; | |||
|  | 		z-index: 2; | |||
|  | 	} | |||
|  | 	.transition { | |||
|  | 		transition: all 0.3s; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	.movable-view-box { | |||
|  | 		width: 100%; | |||
|  | 		height: 100%; | |||
|  | 		background-color: #fff; | |||
|  | 	} | |||
|  | 	/* #endif */ | |||
|  | </style> |