/* * */ import React, { Component } from 'react'; import { Platform, StyleSheet, Text, View, Image, TouchableOpacity, FlatList, TouchableHighlight, DeviceEventEmitter, ScrollView, BackHandler, ToastAndroid, StatusBar, Modal, Animated, TextInput } from 'react-native'; import BasePage from '../BasePage'; import Dimensions from '../utils/dimensions'; import TopicTitle from '../components/TopicTitle'; import CourseTitle from '../components/CourseTitle'; import wechat from '../utils/wechat'; import PayServer from '../services/Pay'; import Alipay from 'react-native-yunpeng-alipay'; import ModalView from '../utils/ModalUtil'; export default class Buy extends BasePage { state = { shopData: [ { appCode: '', days: 0, gmtCreated: 0, gmtModified: 0, id: 0, title: '', originalPrice: '', payType: 1, price: '', sort: 0 } ], currentTapindex: 0, ifDialogShow: false, payType: 1, ticketPrice: 0, useTicket: false, modalVisible: false }; itemTap = (index) => { this.setState({ currentTapindex: index }); }; renderItem = (item, index) => { return ( { this.itemTap(index); }} key={index} > {item.title} ¥{item.price}元 原价:¥{item.originalPrice} ); }; dialogComeout = () => { if (this.state.modalVisible) { this.setState({ modalVisible: false }); } else { this.setState({ modalVisible: true }); } }; setPayMethod = (type) => { this.setState( { payType: type }, () => { setTimeout(() => { this.dialogComeout(false); }, 100); } ); }; componentWillMount() { //获取订购数据信息 this.getMember(); if (this.props.navigation.state.params != undefined) { this.choseTicketCallBack(this.props.navigation.state.params.to_ticket); } BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid); } componentWillUnmount() { BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid); } onBackAndroid = () => { if (this.state.ifDialogShow) { this.dialogComeout(false); } else { this.goBack(); } return true; }; async getMember() { await PayServer.getMember().then((result) => { this.setState({ shopData: result.data }); }); } choseTicket = () => { this.toNextPage('Ticket', { choseTicketCallBack: this.choseTicketCallBack.bind(this) }); }; choseTicketCallBack(item) { this.setState({ ticketPrice: item.amount, useTicket: true }); } getPrice(old_price) { return parseInt(old_price) - parseInt(this.state.ticketPrice) < 0 ? 0 : parseInt(old_price) - parseInt(this.state.ticketPrice); } pay = () => { let data = this.state.shopData[this.state.currentTapindex]; switch (this.state.payType) { case 1: let params = { productCode: data.id, type: '0', preferentialIds: '', useVoucher: this.state.useTicket }; PayServer.payByWechat(params).then((result) => { wechat.pay( result.data.partnerid, result.data.prepayid, result.data.noncestr, result.data.timestamp, result.data.package, result.data.sign, (result) => { ToastAndroid.show('支付成功', ToastAndroid.SHORT); // console.log('wechat result', result); } ); }); break; case 2: //阿里支付 let params_ali = { productCode: data.id, type: '0', preferentialIds: '', useVoucher: this.state.useTicket }; //先请求后台给支付数据 PayServer.payByAli(params_ali).then((result) => { Alipay.pay(result.data.response).then( function(data) { //成功 console.log(data); }, function(err) { //失败 console.log(err); } ); }); break; } }; render() { return ( this.goBack()} // backPress={() => alert("左侧按钮")} /> 套餐选择 {this.state.shopData.map((item, index) => this.renderItem(item, index))} 使用抵用券 -¥{this.state.ticketPrice}元 this.dialogComeout()}> 支付方式 {this.state.payType === 1 ? ( 微信支付 ) : ( 支付宝支付 )} 开通会员即时生效,有任何问题请联系我们。 {this.state.ticketPrice > 0 ? ( (price = ( ¥{this.getPrice(this.state.shopData[this.state.currentTapindex].price)}元 )) ) : ( ¥{this.state.shopData[this.state.currentTapindex].price}元 )} 支付 {this.getModal()} ); } getModal() { return ( { this.setState({ modalVisible: false }); }} visible={this.state.modalVisible} customerlayout={{ flex: 1, justifyContent: 'flex-end' }} contentView={this.getView} /> ); } getView = () => { return ( { this.setState({ modalVisible: false }); }} > { this.dialogComeout(false); }} style={{ ...styles.dialog }} underlayColor={0.1} activeOpacity={1} > {}}> 选择支付方式 this.setPayMethod(1)} > 微信支付 {this.state.payType === 1 ? : null} this.setPayMethod(2)} > 支付宝支付 {this.state.payType === 2 ? : null} {/* */} ); }; } const styles = StyleSheet.create({ top: { width: Dimensions.width, flexDirection: 'column', alignItems: 'center', paddingBottom: 20 }, title: { fontSize: 20, color: '#a8674d', marginTop: 22 }, itemWrapperNormal: { borderWidth: 1, borderColor: '#a8674d', borderRadius: 27, backgroundColor: '#fff', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', width: '86%', height: Dimensions.getHeight(53), marginTop: 20 }, itemWrapperTap: { // borderWidth: 1, // borderColor: '#a8674d', borderRadius: 27, backgroundColor: '#ff7525', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', width: '86%', height: Dimensions.getHeight(53), marginTop: 20 }, originPriceTap: { fontSize: 14, color: '#fff', textDecorationLine: 'line-through' }, originPrice: { fontSize: 14, color: '#a8674d', textDecorationLine: 'line-through' }, priceTap: { fontSize: 20, color: '#fff' }, price: { fontSize: 20, color: '#a8674d' }, timeLengthTap: { fontSize: 18, color: '#fff' }, timeLength: { fontSize: 18, color: '#a8674d' }, payment: { flexDirection: 'row', alignItems: 'center', width: Dimensions.width, height: 60, justifyContent: 'space-between', alignItems: 'center', borderColor: '#f3f2f7', borderTopWidth: 6, borderBottomWidth: 6, paddingHorizontal: 33 }, left: { fontSize: 16 }, right: { flexDirection: 'row', alignItems: 'center' }, method: { color: '#a8674d', fontSize: 16, marginRight: 7 }, bottom: { width: Dimensions.width, height: 60, flexDirection: 'row', position: 'absolute', bottom: 0 }, bottomLeft: { width: '58%', textAlign: 'center', lineHeight: 60, color: '#a8674d', fontSize: 20 }, bottomRight: { width: '42%', fontSize: 16, color: '#fff', backgroundColor: '#f5880d', alignItems: 'center' }, bottomRightText: { fontSize: 20, color: '#fff', textAlign: 'center', lineHeight: 60 }, dialog: { width: Dimensions.width, height: Dimensions.height, position: 'absolute' }, payMethod: { width: Dimensions.width, height: 150, position: 'absolute', // bottom: 0, backgroundColor: '#fff', flexDirection: 'column', alignItems: 'center', justifyContent: 'flex-start' }, payDialog: { width: '90%', borderTopWidth: 1, borderColor: '#e4e4e4', flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', flex: 1 }, dialogRow: { flex: 1, flexDirection: 'row', alignItems: 'center' }, payIcon: { marginRight: 17 }, payText: { fontSize: 16, color: '#191919', alignContent: 'center', flex: 1, lineHeight: 50 } });