checkstand.vue 12.3 KB
<template>
	<view class="stand_content">
		<TopBar title="谛宝收银台"/>
		<view class="stand_title">分期定金</view>
		<view class="stand_price">
			<text class="symbol">¥</text>{{data.advance_payment}}
		</view>
		<view class="flex">
			<image :src="data.img_url"></image>
			<view>
				<view class="stand_goods_name">{{data.equipment_name}}</view>
				<view class="stand_goods_price">¥{{data.equipment_price}}</view>
			</view>
		</view>
		<view class="stand_title" style="margin-top:60rpx">分期定金</view>
		<view class="stand_tips">方案内详细信息</view>
		<view class="stand_nper">{{data.periods_num}}</view>
		<view class="poupp_deposit">
			<text>定金</text>
			<text>¥ {{data.advance_payment}}</text>
		</view>
		<view class="poupp_nper_detail">
			<view>
				<text>第1期 支付</text>
				<text>¥ {{(Number(data.first_payment)+(Number(data.equipment_price)-Number(data.advance_payment))*Number(data.count)).toFixed(2)}}</text>
			</view>
			<view>
				<text>剩余{{data.periods_num-1}}期 每期支付</text>
				<text>¥ {{(Number(data.remaining_payment)+(Number(data.equipment_price)-Number(data.advance_payment))*Number(data.count)).toFixed(2)}}</text>
			</view>
		</view>
		<view class="pay_btn" @click="open()">确认支付</view>
		<uni-popup ref="popup" type="bottom">
			<view class="popup_content">
				<view class="popup_top_bar">选择支付方式<text @click="close()"></text></view>
				<view class="flex">
					<text class="pay_title">支付定金</text>
					<text class="pay_num">¥{{data.order_price}}</text>
				</view>
				<view class="flex pay_item" @click="handleSelect(1)">
					<view class="flex">
						<text class="pay_methods_icon yue"></text>
						<view>
							<view class="pay_methods_name">余额支付</view>
							<view class="pay_methods_num">剩余余额:{{data.money}}</view>
						</view>
					</view>
					<text :class="type ===1 ? 'check' : 'uncheck'"></text>
				</view>
				<view v-if="isWx" class="flex pay_item pay_item_other" @click="handleSelect(2)">
					<view class="flex">
						<text class="pay_methods_icon weixin"></text>
						<view>
							<view class="pay_methods_name">微信支付</view>
						</view>
					</view>
					<text :class="type === 2 ? 'check' : 'uncheck'"></text>
				</view>
				<view v-if="!isWx" class="flex pay_item pay_item_other" @click="handleSelect(3)">
					<view class="flex">
						<text class="pay_methods_icon alipay"></text>
						<view>
							<view class="pay_methods_name">支付宝支付</view>
						</view>
					</view>
					<text :class="type === 3 ? 'check' : 'uncheck'"></text>
				</view>
				<view class="pay_methods_btn" @click="handleSubmit">确认支付</view>
			</view>
		</uni-popup>
	</view>
</template>

<script>
	import TopBar from '@/components/TopBar/TopBar.vue';
	import uniPopup from "@/components/uni-popup/uni-popup.vue";
	import { isWeixin } from '../../common/util.js';
	export default {
		data() {
			return {
				data: {},
				type: 1,
				order_price: '',
				money: '',
				isWx: false,
				contract_no: ''
			}
		},
		onLoad(options){
			this.contract_no = options.contract_no || '';
			this.loadData();
			this.isWx = isWeixin();
		},
		methods: {
			loadData(){
				const install = uni.getStorageSync('installment');
				const { equipment_id, property_id} = install;
				uni.request({
					url: `/uni/api/repayment/PayDetails?contract_no=${this.contract_no || install.contract_no}`,
					method: 'GET',
					dataType: 'json',
					success: (res) => {
						const {data} = res;
						if(data.data){
							this.data = data.data;
							this.order_price = data.data.order_price;
							this.money = data.data.money;
						}
					}
				})
			},
			// 选择支付方式
			handleSelect(type){
				this.type = type;
			},
			// 确认支付
			handleSubmit(){
				const {origin} = location;
				const install = uni.getStorageSync('installment');
				// 清除存储合同信息
				// uni.removeStorageSync('temporary');
				const {equipment_id, property_id} = install;
				if(!this.order_price || !this.contract_no){
					uni.showToast({
						title: '参数错误,无法发起支付',
						icon: 'none'
					})
				}
				// 余额支付
				if(this.type === 1){
					uni.navigateTo({
						url: `/pages/yuepay/yuepay?amount=${this.order_price}&money=${this.money}&order_id=${this.contract_no}`
					})
				}
				// 微信支付
				if(this.type === 2){
					this.$jump(`${origin}/uni/api/repayment/RedirectAuth?amount=${this.order_price}&order_id=${this.contract_no}`);
				}
				// 支付宝支付
				if(this.type === 3){
					uni.showLoading({
						title: '提交中。。。'
					})
					uni.request({
						url: `/uni/api/repayment/GoPay`,
						method: 'post',
						dataType: 'json',
						data: {
							amount: parseFloat(this.order_price),
							order_id: this.contract_no,
							payment_code: "epayalipaywap",
							payment_name: "手机支付宝支付"
						},
						success: (res) => {
							const {data} = res;
							uni.hideLoading();
							if(data.code === 0){
								this.$jump(data.data);
							}else{
								uni.showToast({
									title: '发起支付失败',
									icon: 'none'
								})
							}
						}
					})
				}
			},
			open()  {
				this.$refs.popup.open();
			},
			close() {
				this.$refs.popup.close();
			}
		},
		components: {
			TopBar,
			uniPopup
		}
	}
</script>

<style lang="less" scoped>
	.stand_content {
		padding: 80rpx 32rpx 32rpx;
		.stand_title {
			height:56rpx;
			font-size:40rpx;
			line-height: 56rpx;
			font-family:PingFangSC-Medium,PingFang SC;
			font-weight:500;
			color: #212121;
			margin-top: 40rpx;
		}
		.stand_price {
			height:80rpx;
			font-size:56rpx;
			line-height: 80rpx;
			font-family:PingFangSC-Medium,PingFang SC;
			font-weight:500;
			color: #212121;
			margin-top: 10rpx;
			.symbol {
				height:60rpx;
				font-size:44rpx;
				line-height: 60rpx;
				margin-right: 10rpx;
				font-family:PingFangSC-Regular,PingFang SC;
				font-weight:400;
			}
		}
		.flex {
			display: flex;
			align-items: center;
			margin-top: 60rpx;
			image {
				width: 120rpx;
				height: 120rpx;
				border-radius: 8rpx;
				margin-right: 16rpx;
			}
			.stand_goods_name {
				color: #7C7C7C;
				font-size: 28rpx;
				line-height: 40rpx;
				margin-bottom: 38rpx;
			}
			.stand_goods_price {
				color: #7C7C7C;
				font-size: 30rpx;
				line-height: 42rpx;
			}
		}
		.stand_tips {
			margin-top: 4rpx;
			color: #979797;
			font-size: 24rpx;
			line-height: 34rpx;
		}
		.stand_nper {
			width: 122rpx;
			height: 56rpx;
			line-height: 56rpx;
			border-radius: 28rpx;
			text-align: center;
			border: 1px solid #000;
			margin-top: 32rpx;
			color: #000;
			font-size: 28rpx;
		}
		.poupp_deposit {
			height: 80rpx;
			background-color: #F8F8F8;
			padding: 22rpx 32rpx;
			box-sizing: border-box;
			display: flex;
			justify-content: space-between;
			font-size: 28rpx;
			color: #464646;
			border-radius: 16rpx;
			margin-top: 36rpx;
		}
		.poupp_nper_detail {
			padding: 36rpx 32rpx;
			background-color: #F8F8F8;
			border-radius: 16rpx;
			margin-top: 24rpx;
			view {
				display: flex;
				justify-content: space-between;
				color: #464646;
				font-size: 26rpx;
			}
			view:nth-of-type(2) {
				margin-top: 26rpx;
			}
		}
		.pay_btn {
			width: 686rpx;
			height: 76rpx;
			line-height: 76rpx;
			border-radius: 16rpx;
			background-color: #FFCD00;
			margin: 100rpx auto 22rpx;
			color: #212121;
			font-size: 28rpx;
			text-align: center;
		}
	}
	.popup_content {
		border-radius:24rpx 24rpx 0px 0px;
		background-color: #fff;
		padding: 42rpx 32rpx 22rpx;
		.popup_top_bar {
			position: relative;
			text-align: center;
			color: #7C7C7C;
			font-size: 30rpx;
			line-height: 42rpx;
			margin-bottom: 56rpx;
			text {
				position: absolute;
				width: 56rpx;
				height: 56rpx;
				right: 0;
				top: -6rpx;
				background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAMAAACfWMssAAAAnFBMVEUAAAD////////////4+Pj5+fn5+fn4+Pj4+Pj4+Pj5+fn5+fn4+Pj39/f5+fn5+fn5+fmNjY2SkpKTk5OWlpacnJydnZ2enp6np6epqamrq6u5ubm6urq7u7u9vb3KysrLy8vU1NTV1dXW1tbc3Nzh4eHn5+fo6Ojq6urs7Ozt7e3v7+/w8PDx8fHy8vLz8/P09PT19fX39/f4+Pi1Oh3/AAAAEXRSTlMABwwYJC1XiZmbx8ji6vT4+TH0AcAAAAFMSURBVEjHndfncsIwEATgswFXXBRCGklIj0kjcO//bjFucZMs7f7UzDeybA23EDWxHS+MEpYkiULPsWmYuR/zZGJ/3mOWm7JWUtdqu1nA2glm/26xZIMsF81+Ri6X1Z5WwIYJynO6bBy3+A6pOUxPX8VnIH5+X2IExjY5DMUhD4MehRgMKcJgRAkGE2IwQ3h4yvorj5kOvBGr187C/kqs3qfhtxBdmTshHjR2vOvKwq0/NeBx05al+9A5Y0dK3RhsSbkbhY1UuHFYyReFk8BSCoWTwVpKnRTy/vwEn9kUFu9F9G/fNCzcmUqS3K13G4UkhevdvmlYO1ZJUjmVJKVTyAE8XrddLd+m4U/XVXKr8aj34mLXfYZbcfml83Ky38HKYeSM8A8yPALgoQOPOXiwwqMcLg94XYELEl7J4BKI10686OLVGi/z5n8f/gDdHCF1hcxGRAAAAABJRU5ErkJggg==') no-repeat;
				background-size: 100% 100%;
			}
		}
		.flex {
			display: flex;
			justify-content: space-between;
			align-items: center;
			.pay_title {
				height:44rpx;
				line-height: 44rpx;
				font-size:32rpx;
				color: #212121;
			}
			.pay_num {
				color: #212121;
				height:50rpx;
				font-size:36rpx;
				font-family:PingFangSC-Semibold,PingFang SC;
				font-weight:600
			}
			.pay_methods_icon {
				width: 60rpx;
				height: 60rpx;
				background-size: 100% 100%;
				background-repeat: no-repeat;
				margin-right: 16rpx;
				&.yue{
					background-image: url(../../static/paytype/yue.png);
				}
				&.weixin{
					background-image: url(../../static/paytype/weixin.png);
				}
				&.alipay{
					background-image: url(../../static/paytype/alipay.png);
				}
			}
			.pay_methods_name {
				font-size: 26rpx;
				color: #212121;
				line-height: 36rpx;
				margin-bottom: 4rpx;
			}
			.pay_methods_num {
				font-size: 24rpx;
				color: #8D8D8D;
				line-height: 34rpx;
			}
			.uncheck {
				width: 40rpx;
				height: 40rpx;
				background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAAAAADEa8dEAAAA4ElEQVQ4y73UuwqDMBSA4b7/K/06RBwEBxGcI0jIJOggdvGYDrW2thFOhzZb4MvtXHIJinH5FZLBO+cHOUerKxMASEq3xpE3QF41TZUDxkeQ1JDZ6T6ZbAa1vKNrQWqX5+LFphTXI5ICMx5vOxoKOaAaM78/fDbUr8iTjp/hGVP8E60GGwuixaw7cmRLDC0ZbkdlfKMQLOUDScIURxOJbKgnP0ttTr+hjuoMVXQbamnOUEP7DVIdp7q4KgSqYOrSokqwqlR0RacrX1Uj6FpK15zKNg8hBOm7tu16+dP/FB83GSPcKcU7y9kAAAAASUVORK5CYII=') no-repeat;
				background-size: 100% 100%;
			}
			.check {
				width: 40rpx;
				height: 40rpx;
				background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAMAAADW3miqAAACoFBMVEUhISEkIyArKR84Mx49Nh1cThhgURdiUxdqWRZwXhVzYBV+aROAahOihQ61kwu4lQu6lwq9mQrKpAjasAXwwQL3xgH9ywD/zQD/zQH/zQL/zgf/zgn/zwr/zxD/0BD/0BL/0BP/0RP/0RT/0RX/0h7/0x7/0x//0yP/1CT/1Cj/1Sf/1Sj/1Sr/1Sz/1jH/1zP/1zT/1zX/2Dn/2Dr/2T//2UD/2UL/2kH/2kT/2kX/20X/3E3/3E//3VL/3VT/3lT/3lf/3lj/31v/313/31//32H/4GH/4Gb/4Wb/4Wr/4Wz/4mn/4mv/4m3/43H/43L/43T/43X/5HP/5HT/5HX/5Hb/5Hf/5Hj/5Hn/5Hr/5Xn/5Xv/5X3/5oD/5oH/5oP/5oT/54P/54X/54b/54f/54n/6In/6Iv/6I7/6Y7/6Y//6ZL/6ZP/6ZT/6pf/6pj/6pn/65f/65n/65r/65v/657/65//7KD/7KP/7KT/7aP/7ab/7af/7aj/7an/7qr/7qv/7qz/7q3/763/767/76//77H/77P/8LT/8LX/8Lb/8Lf/8br/8bv/8b3/8r7/8sD/8sH/8sL/88L/88T/88X/88b/88n/9Mj/9Mn/9Mr/9Mv/9Mz/9M3/9c3/9c7/9dD/9dH/9tH/9tL/9tP/9tT/99b/99f/99j/99n/99r/99z/+Nv/+Nz/+N3/+N7/+N//+d7/+d//+eH/+eL/+eP/+eX/+uL/+uT/+uX/+ub/+uf/+uj/+un/+uv/++r/++v/++z/++3/++7/++//+/D//O7//O///PD//PH//PL//PP//PT//PX//fT//fX//fb//ff//fj//fn//fv//vb//vj//vn//vr//vv//vz//v3///z///3///7////If3C4AAACf0lEQVQ4y2O4TwRgQBe4BwR4FN27dfPyxfPnTp8+c+Hi5Zu372FRdO/m9bMn922ujg8Pj6/efujUhcu37qEpunfr+vljW1P0JcXBQNIgbcdxhDKIors3LxzdlSkvjgTks/acunbzHkLR7RvnD660EEcDlmuPXbhyF6bo7o3z+6doi2MA7RkHL1y5B1F07+b5/Yu1xLEAzeUHL4BsZAC6+cLBVabiWIHZ+uPXboMU3b58ZH2cOA6QtOXU5XtARTfPbZsli0uR3KK9F27dZ7h3/dCKYHGcIGzjicv3GG6d3zlLB1NSmFcETOsu2HvhNsONE2u6JTHUCDExcELCvm/z6TsMlw4sjsOmhoEbwkxecfgGw4VdM10hXAEWHjGEGlZRCNtjwf5rDGc2T3KAcNkYGLjE0NWIO03fdYHh9Lo+ewhXkBGiCkWNuOOUrVcZTq7ucYTy+cCqUNWIO0/ecgakyFccSRU7qhrxIJAioHXZEsiqUNVIFIOsAzq8RFUcWRWyGnG1KpDDgUFQYYMQ5GfmQFYjbtcACgJgYLamSOOKOpmMLlBgAqOlN88alyLb0kmgaAFFcE2COnY1Gukt4AgGJZWe/ABFbGqUIksngJMKKNHNbcn0UMBUo+iT27lkDyjRgZPv1JpUHxV0NWp+GU2zockXnBEmVqb5mUghK5EyD8monwbLCOAstWJSTUaUu5ESNOwllI29Y3Iap62DZSlI5lw1taUoKdTTxcJQT8/Qys0rIrW0fdZGROaEZPMN83vr8tNjI0L8/QOjEzNKmics3IKczaEFxso5fW01ZQWFhcXltR0T569GKzCgRc+2dUvnTJ3Q3z9x2rxlm3afQBQ9AO0gCIzNUhSlAAAAAElFTkSuQmCC') no-repeat;
				background-size: 100% 100%;
			}
		}
		.pay_item {
			height: 120rpx;
			align-items: center;
			border-bottom: 1px solid #ECECEC;
			.flex {
				margin-top: 0;
			}
		}
		.pay_methods_btn {
			width: 100%;
			height: 76rpx;
			line-height: 76rpx;
			border-radius: 16rpx;
			background-color: #FFCD00;
			text-align: center;
			font-size: 28rpx;
			margin-top: 22rpx;
		}
		.pay_item_other{
			margin-top: 0;
		}
	}
</style>