/*
*
*/
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
}
});