<template>
	<view class="ss-modal-body" :class="{'ss-modal-active' : animation, 'ss-modal-H5Top': _H5Top, 'ss-modal-H5Bottom': _H5Bottom}" :data-platform="platform">
		<view class="ss-modal" :class="'ss-modal-' + position +' ' + 'ss-modal-' + mode">
			<slot></slot>
		</view>
		<view v-if="_mask" class="uni-mask" @touchmove.stop.prevent="moveHandle" catchtouchmove="true" @click.stop="hide()"></view>
	</view>
</template>

<script>
	const systemInfo = uni.getSystemInfoSync();
	export default {
		data () {
			return {
				animation: false,
				platform: systemInfo.platform
			}
		},
		props: {
			/*
			* 参数说明(定位)
			*/
			position: {//可能值  top  left  right bottom middle
				type: String,
				default: 'middle'
			},
			/*
			* 参数说明
			* full 宽度100%
			* insert 80%宽度内联小框
			* cover 宽度高度100%
			*/
			mode: {
				type: String,
				default: 'full'
			},
			mask: {
				type: [Boolean, String],
				default: true
			},
			/*
			* H5置顶
			*/
			H5Top: {
				type: [Boolean, String],
				default: true
			},
			/*
			* H5置底
			*/
			H5Bottom: {
				type: [Boolean, String],
				default: true
			},
		},
		computed: {
			_mask() {
				return String(this.mask) === 'false' ? false : true;
			},
			_H5Top() {
				return String(this.H5Top) === 'false' ? false : true;
			},
			_H5Bottom() {
				return String(this.H5Bottom) === 'false' ? false : true;
			}
		},
		watch: {
			animation(val) {
				this.$emit('change', val);
			}
		},
		methods: {
			moveHandle() {
				return ;
			},
			show () {
				this.animation = true;
				return true;
			},
			hide () {
				this.animation = false;
				return false;
			},
			toggle () {
				return !this.animation ? this.show() : this.hide()
			}
		}
	}
</script>

<style lang="scss">
	// 弹窗公用样式
	.ss-modal-body{
		box-sizing: border-box;
		opacity: 0;
		position: fixed;
		top: 0px;
		bottom: 0px;
		left: 0;
		width: 100%;
		pointer-events: none;
		transform: translateX(0);
		transition: all .2s linear;
		z-index: 98;
		&.ss-modal-active{
			pointer-events: auto;
			opacity: 1;
		}
	}
	
	/* #ifdef H5 */
		.ss-modal-body.ss-modal-H5Top{
			top: 0;
			z-index: 999;
		}
		.ss-modal-body.ss-modal-H5Bottom{
			bottom: 0;
			z-index: 999;
		}
	/* #endif */
	
	.ss-modal-body .uni-mask{
		z-index: 1;
		position: fixed;
		top: 0;
		right: 0;
		left: 0;
		bottom: 0;
		background: rgba(0,0,0,.6);
	}
	.ss-modal{
		position: fixed;
		z-index: 2;
		transition: inherit;
		/deep/ .gmy-float-touch{
			display: none;
		}
	}
	.ss-modal-middle{
		top: 50%;
		left: 50%;
		transform: translate(-50%, -50%);
	}
	.ss-modal-cover{
		width: 100%;
		// width: 100vw;
		width: calc(100% + 3px);
		// width: calc(100vw + 2px);//清除translate带来了计算误差
		height: 100%;
		// height: 100vw;
		height: calc(100% + 3px);
		// height: calc(100vh + 2px);//清除translate带来了计算误差
		left: 0;
		top: 0;
		transform: translate(100%, 0);
	}
	.ss-modal-top{
		left: 50%;
		z-index: 98;
		width: 100%;
		height: auto;
		transform: translate(-50%, -100%);
		& + .uni-mask{
			z-index: 97;
		}
	}
	.ss-modal-full{
		width: 100%;
		width: calc(100% + 3px);//清除translate带来了计算误差
		left: 0;
		transform: translate(0, -100%);
	}
	.ss-modal-full.ss-modal-top{
		transform: translate(0, -200%);
	}
	.ss-modal-full.ss-modal-bottom{
		transform: translate(0, 100%);
		transition: inherit;
	}
	.ss-modal-right{
		right: 0;
		max-width: 80%;
	}
	.ss-modal-left{
		left: 0;
		max-width: 80%;
	}
	.ss-modal-middle.ss-modal-insert {
		min-width: 380rpx;
		min-height: 380rpx;
		max-width: 102%;
		max-height: 80%;
		transform: translate(-50%, -50%);
		background: none;
		box-shadow: none;
	}
	.ss-modal-body{
		opacity: 0;
		pointer-events: none;
	}
	.ss-modal-active{
		opacity: 1;
		pointer-events: auto;
		.ss-modal-top{
			top: 44px;
			transform: translate(-50%, 0);
		}
		.ss-modal-full{
			transform: translate(0, -50%);
		}
		.ss-modal-full.ss-modal-top{
			transform: translate(0, 0);
		}
		.ss-modal-bottom{
			transform: translate(0, 0);
		}
		.ss-modal-cover{
			transform: translate(0, 0);
		}
	}
	.ss-modal-bottom{
		bottom: 0;
	}
</style>