123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- /*
- * 个人中心页面
- */
- import React, { Component } from 'react';
- import {
- Platform,
- StyleSheet,
- Text,
- View,
- Image,
- TouchableOpacity,
- ImageBackground,
- Button,
- StatusBar,
- Modal,
- TouchableHighlight,
- DeviceEventEmitter,
- ScrollView,
- BackHandler
- } from 'react-native';
- import BasePage from './BasePage';
- import Dimensions from './utils/dimensions';
- import ShopBox from './components/ShopBox';
- import TopicTitle from './components/TopicTitle';
- import ScrollRow from './components/ScrollRow';
- import CourseTitle from './components/CourseTitle';
- import user from './services/user';
- import commonUtil from './utils/commonutil';
- import http_showcase from '../pages/services/showcase';
- export default class userCenter extends BasePage {
- componentDidMount() {
- this.getUCENTER_RECOMMEND();
- //触发更新
- this.refreshSubScription = DeviceEventEmitter.addListener('infoback',() =>{
- user.userMember().then((res) => {
- console.log('个人列表', res);
- // 收藏
- const favoritesList = res.data.favoritesList;
- //观看记录
- const playLogList = res.data.playLogList;
- // 用户消息
- const user = res.data.user;
- // VIP
- const vip = res.data.vip;
- this.setState({
- favoritesList,
- playLogList,
- user,
- vip
- });
- });
- });
- BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);
- DeviceEventEmitter.emit('infoback');
- }
- componentWillUnmount() {
- this.refreshSubScription.remove();
- BackHandler.removeEventListener('hardwareBackPress', this.onBackAndroid);
- }
- state = {
- nickName: '初始昵称',
- user: {},
- ifDiscount: true,
- isVIP: false,
- btnArr: [
- {
- title: '订单',
- icon: require('./images/userCenter/order.png'),
- goTo: 'Order'
- },
- {
- title: '抵用券',
- icon: require('./images/userCenter/discount.png'),
- goTo: 'Ticket'
- },
- {
- title: '客服',
- icon: require('./images/userCenter/service.png'),
- goTo: 'Phone'
- }
- ],
- shopData: [
- {
- title: '1个月',
- originPrice: '199',
- price: '49',
- background: require('./images/shopBox/left.png')
- },
- {
- title: '12个月',
- originPrice: '499',
- price: '199',
- background: require('./images/shopBox/right.png')
- }
- ],
- discount: {
- title: '限时秒杀',
- icon: { uri: 'null' }
- },
- favoritesList: [],
- playLogList: [],
- vip: false
- };
- renderBtn = (item, index) => {
- return (
- <TouchableOpacity
- key={index}
- onPress={() => this.goTo(`${item.goTo}`)}
- style={{ display: 'flex', justifyContent: 'space-between' }}
- >
- <View style={styles.btnItem}>
- <Image source={item.icon} style={styles.btnIcon} />
- <Text style={styles.btnTitle}>{item.title}</Text>
- </View>
- </TouchableOpacity>
- );
- };
- goBack() {
- DeviceEventEmitter.emit('indexInfo');
- //返回上一页
- this.props.navigation.goBack();
- }
- getUCENTER_RECOMMEND() {
- http_showcase.getUCENTER_RECOMMEND().then((res) => {
- console.log('====================================');
- console.log('res', res.data[0].boothContent);
- console.log('====================================');
- this.setState({
- discount: {
- title: res.data[0].title,
- icon: { uri: res.data[0].boothContent }
- }
- });
- });
- }
- render() {
- return (
- <ScrollView style={{ height: 1100, overflow: 'scroll', backgroundColor: '#fff' }}>
- <View style={styles.topSection}>
- <ImageBackground
- source={require('./images/userCenter/top-bg.png')}
- style={{ width: '100%', height: 203 }}
- >
- <StatusBar
- backgroundColor={'transparent'}
- barStyle={'dark-content'}
- // backgroundColor={"white"}
- translucent={true}
- hidden={false}
- />
- <View
- style={{
- height: 30,
- // backgroundColor: "white"
- marginTop: 20
- }}
- >
- <CourseTitle
- width={this.getWindowWidth()}
- title="个人中心"
- lefttype={2}
- righttype={2}
- textcolor={'#fff'}
- backPress={() => this.goBack()}
- // backgroundColor={"transparent"}
- rightPress={() => this.toNextPage('PersonalInfo')}
- />
- </View>
- <View style={styles.userInfo}>
- <TouchableOpacity onPress={() => this.goTo(`PersonalInfo`)}>
- <Image style={styles.userAvatar} source={{ uri: this.state.user.avatar }} />
- </TouchableOpacity>
- <View style={styles.userRight}>
- <View style={styles.userName}>
- <Text style={styles.userNameText}>{this.state.user.nickName}</Text>
- {this.state.vip ? (
- <Image style={styles.vipTag} source={require('./images/common/vip.png')} />
- ) : null}
- </View>
- {this.state.vip ? null : (
- <View style={styles.userName}>
- <Text style={styles.vipSologan}>开通vip</Text>
- </View>
- )}
- </View>
- </View>
- <View style={styles.btnBoxWrapper}>
- <View style={styles.btnBox}>
- {this.state.btnArr.map((item, index) => this.renderBtn(item, index))}
- </View>
- </View>
- </ImageBackground>
- </View>
- <View style={styles.discountSection}>
- <ShopBox
- data={this.state.shopData}
- discount={this.state.discount}
- nav={this.props.navigation.navigate}
- />
- </View>
- <View style={styles.recordSection}>
- <TopicTitle title={'观看记录'} ifTubeShow={true} />
- <ScrollRow itemWidth={106} itemHeight={153} data={this.state.playLogList} />
- </View>
- <View style={styles.collectSection}>
- <TopicTitle title={'我的收藏'} ifTubeShow={true} />
- <ScrollRow itemWidth={106} itemHeight={150} data={this.state.favoritesList} />
- </View>
- </ScrollView>
- );
- }
- goTo(index) {
- if (index === 'Phone') {
- commonUtil.callPhone('.......');
- } else {
- this.toNextPage(index);
- }
- }
- onBackAndroid = () => {
- this.goBack();
- return true;
- };
- }
- const styles = StyleSheet.create({
- topSection: {
- height: 250,
- width: Dimensions.width
- // backgroundColor: 'red'
- },
- userInfo: {
- width: Dimensions.width,
- height: 70,
- flexDirection: 'row',
- justifyContent: 'flex-start',
- alignItems: 'center'
- },
- userAvatar: {
- width: 67,
- height: 67,
- borderRadius: 55,
- marginHorizontal: 12
- },
- userRight: {
- flexDirection: 'column'
- },
- userName: {
- flexDirection: 'row',
- alignItems: 'center'
- },
- userNameText: {
- fontSize: 18,
- color: '#fff',
- fontWeight: '500',
- marginRight: 9
- },
- vipSologan: {
- fontSize: 14,
- color: '#fff'
- },
- btnBoxWrapper: {
- width: Dimensions.width,
- alignItems: 'center',
- marginTop: 16
- },
- btnBox: {
- width: Dimensions.width * 343 / 375,
- height: 100,
- borderRadius: 10,
- shadowColor: '#000',
- // shadowOffset: 1,
- shadowOpacity: 2,
- shadowRadius: 5,
- elevation: 4,
- backgroundColor: '#fff',
- justifyContent: 'space-around',
- flexDirection: 'row'
- },
- btnItem: {
- height: '100%',
- flexDirection: 'column',
- justifyContent: 'center',
- alignItems: 'center'
- },
- btnIcon: {
- width: 36,
- height: 24,
- marginBottom: 7
- },
- btnTitle: {
- color: '#3f3f3f',
- fontSize: 16
- },
- discountSection: {
- width: Dimensions.width
- // height: 242,
- // backgroundColor: 'green'
- },
- recordSection: {
- width: Dimensions.width,
- height: 235
- // backgroundColor: 'blue'
- },
- collectSection: {
- width: Dimensions.width,
- height: 255,
- marginBottom: 20
- // backgroundColor: 'yellow'
- }
- });
|