CourseListItem.js 5.23 KB
import React, { Component } from "react";
import { Image, StyleSheet, Text, TouchableOpacity, View, DeviceEventEmitter } from "react-native";

import _ from "lodash";
import { width, zoomH, zoomW } from "../../utils/getSize";
import StashHead from "../../widget/StashHead";
import { NoDoublePress } from "../../utils/utils";

export default class CourseListItem extends Component {
    constructor(props) {
        super(props);
        this.state = {
            data: ""
        };
    }

    componentDidMount() {

        this.dataHandle(this.props.item);
    }

    compnentWillUnmount() {

    }

    /**
     * 接口返回数据处理
     * @param {*} data
     */
    dataHandle(data) {
        console.log('-------data-------',data);
        if (!!!data) {
            // xnToast("暂无数据!!!");
            return;
        }
        let attachmentList = [];
        let singleItem = {
            id: "",
            name: "",
            pictureUrl: [],
            description: ""
        };
        let urls = {
            url: ""
        };
        urls.url = data.pictureUrl;
        attachmentList.push(urls);

        singleItem.id = data.id;
        singleItem.name = data.name;
        singleItem.pictureUrl = attachmentList;
        singleItem.description = data.description;
        this.setState({
            data: singleItem
        });
    }

    _detailClick = id => {
        //详情
        // this.props.nav.navigate("QuestionList", {
        //   id: id,
        //   userId: this.state.data.userId
        // });
        this.props.nav.navigate("ClassGrade", {id: id});
    };

    renderView() {
        return (
            <TouchableOpacity
                style={styles.itemBackground}
                activeOpacity={0.8}
                onPress={() => {
                    NoDoublePress.onPress(() => {
                        this._detailClick(this.state.data.id);
                    });
                }}
            >
                <View>
                    {/*文字*/}
                    <Text
                        style={{
                            marginTop: 14 / zoomH,
                            marginLeft: 15 / zoomW,
                            marginRight:15/zoomW,
                            fontSize: 18,
                            flex:1,
                            color: "rgba(0,0,0,0.85)" ,
                            fontWeight: "bold"
                        }}
                        numberOfLines={2}
                    >
                        {this.state.data.name}
                    </Text>

                    {/*图片*/}
                    {!!this.state.data.pictureUrl &&
                    this.state.data.pictureUrl.length > 0 && (
                        <View
                            style={{
                                flexDirection: "row",
                                alignItems: "center",
                                flexWrap: "wrap",
                                paddingLeft:15/zoomW,
                                paddingRight:15/zoomW,
                                marginTop: 14
                            }}
                        >
                            {this.state.data.pictureUrl
                                ? this.state.data.pictureUrl.map((v, i) =>
                                    this.renderImageItem(v, i)
                                )
                                : null}
                        </View>
                    )}
                </View>
                <TouchableOpacity activeOpacity={0.8} style={styles.starItem}>
                    <Text
                        style={{
                            fontSize: 12,
                            color: "#000000",
                            marginTop: 12 / zoomH,
                            marginBottom: 14 / zoomH,
                            marginLeft: 15 / zoomW,
                            opacity: 0.45
                        }}
                    >
                        {this.state.data.description}
                    </Text>
                </TouchableOpacity>
            </TouchableOpacity>
        );
    }

    //渲染图片列表item
    renderImageItem(item, i) {
        let itemWidth = (width - 10-2*15/zoomW) / 3;
        return (
            <View
                key={i}
                style={[
                    i < 2 ? { marginRight: 5 } : null,
                    {
                        width: itemWidth,
                        height: itemWidth,

                        backgroundColor: "#FFFFFF"
                    }
                ]}
            >
                <Image
                    style={{ width: "100%", height: "100%" }}
                    source={{
                        uri: item.url,
                        cache: "force-cache"
                    }}
                    resizeMode="cover"
                />
            </View>
        );
    }

    render() {
        return (
            <View>
                {_.isEmpty(this.state.data) ? null : <View>{this.renderView()}</View>}
            </View>
        );
    }
}

const styles = StyleSheet.create({
    itemBackground: {
        backgroundColor: "#FFFFFF"
    },
    starItem: {
        flex: 1,
        justifyContent: "flex-start",
        alignItems:'center',
        flexDirection: "row"
    }
});