teamList.js 6.18 KB
/**
 * Created by Cassie on 2018/05/14
 */
import React, { Component } from 'react';
import {
    StyleSheet,
    View,
    Text,
    TouchableOpacity,
    Image,
    TextInput,
    Platform,
    FlatList,
    InteractionManager
} from 'react-native';

import {width,zoomW,zoomH} from '../../utils/getSize';

const back = require('../../img/returnB.png');
const search = require('../../img/search.png');
const addTarget = require('../../img/addTarget.png');
const allDel = require('../../img/allDel.png');
const avatar = require('../../img/avatar.png');

export default class TeamList extends Component {
    static navigationOptions = ({ navigation, screenProps }) => ({
        title:'任务组',
        headerLeft:(<View style={{display:'flex',flexDirection:'row'}}>
            <TouchableOpacity style={styles.topIcon} onPress={navigation.state.params?navigation.state.params.back:null}>
                <Image source={back} style={{width:(16/zoomH),height:(16/zoomH)}} resizeMode="contain" />
            </TouchableOpacity>
        </View>),
        headerRight:(<View style={{display:'flex',flexDirection:'row'}}>
            <TouchableOpacity style={styles.topIcon} onPress={navigation.state.params?navigation.state.params.toAddTeam:null}>
                <Image source={addTarget} style={{width:(26/zoomH),height:(26/zoomH)}} resizeMode="contain" />
            </TouchableOpacity>
        </View>)
    });

    constructor(props){
        super(props);
        this.state = {
            sheetList:['0','0','0','0','0','0','0','0','0','0'],
            name:''
        };
    };

    componentDidMount(){
        this.props.navigation.setParams({
            back:()=>{
                InteractionManager.runAfterInteractions(() => {this.props.navigation.goBack();})
            },
            toAddTeam:()=>{
                InteractionManager.runAfterInteractions(() => {this.props.navigation.navigate('CreateTeam',{from:'create'});})
            }
        });
    };
    /*一键删除功能*/
    showDel(type,content){
        if(Platform.OS == 'android'){
            if(content.length != 0){
                this.setState({
                    type:type
                })
            }else{
                this.setState({
                    type:''
                })
            }
        }
    };
    /*渲染列表*/
    keyExtractor = (item,index) => index;
    renderItem = ({item,index}) => (
        <TouchableOpacity activeOpacity={0.8} style={styles.listItem} onPress={() => InteractionManager.runAfterInteractions(() => {this.props.navigation.navigate('Home',{from:'teamList'});})}>
            <View style={{borderRadius:(30/zoomH),display:'flex',justifyContent:'center',alignItems:'center',borderStyle:'solid',borderColor:'#ddd',borderWidth:StyleSheet.hairlineWidth}}>
                <Image source={avatar} style={{width:(60/zoomH),height:(60/zoomH),borderRadius:(30/zoomH)}} resizeMode="contain" />
                <View style={styles.cornerMark}>
                    <Text style={{fontSize:12,color:'#fff'}}>3</Text>
                </View>
            </View>
            <View style={styles.taskDetail}>
                <Text style={{fontSize:17,color:'#000'}} numberOfLines={1}>办公协同团队任务</Text>
                <Text style={{fontSize:14,color:'#666'}} numberOfLines={1}>结束时间:04-30 16:00</Text>
                <Text style={{fontSize:14,color:'#666'}} numberOfLines={1}>报销金额:共308,餐饮200,路费108</Text>
            </View>
        </TouchableOpacity>
    );


    render(){
        return(
            <View style={styles.background}>
                <View style={styles.searchBox}>
                    <Image source={search} style={{width:(13/zoomH),height:(13/zoomH)}} resizeMode="contain" />
                    <TextInput returnKeyType="search" placeholder='搜索' placeholderTextColor='#8e8e93' style={styles.searchText} underlineColorAndroid="transparent"  clearButtonMode="while-editing" onChangeText={(value) => this.setState({name:value},function(){this.showDel('name',this.state.name)})} onFocus={() => this.showDel('name',this.state.name)} onBlur={() => {this.setState({type:''})}} defaultValue={this.state.name} />
                    {this.state.type == 'name' && <TouchableOpacity style={{height:'100%',position:'absolute',right:0,display:'flex',justifyContent:'center'}} onPress={() => this.setState({name:'',type:''})}>
                        <Image source={allDel} style={{width:(16/zoomH),height:(48/zoomH),marginLeft:(10/zoomW),marginRight:(10/zoomW)}} resizeMode="center" />
                    </TouchableOpacity>}
                </View>
                <FlatList refreshing={false} onRefresh={() => {this.setState({sheetList:[]},function(){this.setState({sheetList:['0','0','0','0','0','0','0','0','0','0','0','0']})})}} keyExtractor={this.keyExtractor} showsVerticalScrollIndicator={false} data={this.state.sheetList} renderItem={this.renderItem} />
            </View>
        );
    }
}

const styles = StyleSheet.create({
    topIcon:{
        paddingLeft:(10/zoomW),
        paddingRight:(10/zoomW),
        height:'100%',
        display:'flex',
        alignItems:'center'
    },
    background:{
        flex:1,
        backgroundColor:'#fff',
        display:'flex',
        alignItems:'center'
    },
    searchBox:{
        width:(345/zoomW),
        height:(34/zoomH),
        borderRadius:3,
        backgroundColor:'#eeeff3',
        display:'flex',
        flexDirection:'row',
        alignItems:'center',
        paddingLeft:(12/zoomW)
    },
    searchText:{
        flex:1,
        fontSize:14,
        color:'#000',
        padding:0,
        paddingLeft:(8/zoomW)
    },
    listItem:{
        width:width,
        display:'flex',
        flexDirection:'row',
        alignItems:'center',
        borderStyle:'solid',
        borderBottomWidth:StyleSheet.hairlineWidth,
        borderBottomColor:'#fff',
        padding:(15/zoomW)
    },
    cornerMark:{
        width:(18/zoomH),
        height:(18/zoomH),
        borderRadius:(9/zoomH),
        backgroundColor:'#f43530',
        display:'flex',
        justifyContent:'center',
        alignItems:'center',
        position:'absolute',
        top:0,
        right:0
    },
    taskDetail:{
        flex:1,
        paddingLeft:(10/zoomW)
    }
});