index.js 10.8 KB
/**
 * Created by Cassie on 2018/03/06
 */
import React, { Component } from 'react';
import {
    StyleSheet,
    View,
    Text,
    NativeModules,
    NetInfo,
    Platform,
    ActivityIndicator,
    DeviceEventEmitter,
    AsyncStorage,
    BackHandler,
    Keyboard,
    InteractionManager,
    Alert,
} from 'react-native';
import Picker from 'react-native-picker';

import {Navigator} from 'xn-react-native-general-head';

import {zoomW,zoomH} from "./utils/getSize";
import {xnToast} from "./utils/utils";
import AppService from "./service/AppService";

import Home from './pages/home';
import AddTarget from './pages/addTarget/addTarget';

import EditTarget from './pages/addTarget/editTarget';
import AddPeople from './pages/addTarget/addPeople';
import AddApprovePeople from './pages/addTarget/addApprovePeople';

import AddVoice from './pages/addTarget/addVoice';
import LinkTarget from './pages/addTarget/linkTarget';
import TeamList from './pages/targetTeam/teamList';
import CreateTeam from './pages/targetTeam/createTeam';
import SelectTarget from './pages/targetTeam/selectTarget';
import TargetDetail from './pages/targetItem/targetDetail';
import TargetAbout from './pages/targetItem/targetAbout';
import TargetProgress from './pages/targetItem/targetProgress';
import RemindPeople from './pages/targetItem/remindPeople';
import RemindSetting from './pages/targetItem/remindSetting';
import AddProgress from './pages/targetItem/addProgress';
import TargetHistory from './pages/targetItem/targetHistory';
import AddEmployee from './pages/public/addEmployee';
import SetReport from './pages/addTarget/setReport';
import Search from './pages/public/search';
import MyInfo from './pages/targetItem/myInfo';
import SearchPeople from './pages/public/searchPeople';
import ItemProgress from './pages/targetItem/itemProgress';
import TeamHome from './pages/targetTeam/teamHome';

const NavigatorNav = Navigator(
    {
        Home:{screen:Home},
        AddTarget:{screen:AddTarget},
        EditTarget:{screen:EditTarget},
        AddPeople:{screen:AddPeople},
        AddVoice:{screen:AddVoice},
        LinkTarget:{screen:LinkTarget},
        TeamList:{screen:TeamList},
        CreateTeam:{screen:CreateTeam},
        SelectTarget:{screen:SelectTarget},
        TargetProgress:{screen:TargetProgress},
        AddEmployee:{screen:AddEmployee},
        TargetDetail:{screen:TargetDetail},
        TargetAbout:{screen:TargetAbout},
        SetReport:{screen:SetReport},
        RemindPeople:{screen:RemindPeople},
        RemindSetting:{screen:RemindSetting},
        Search:{screen:Search},
        AddProgress:{screen:AddProgress},
        TargetHistory:{screen:TargetHistory},
        MyInfo:{screen:MyInfo},
        SearchPeople:{screen:SearchPeople},
        ItemProgress:{screen:ItemProgress},
        TeamHome:{screen:TeamHome},
        AddApprovePeople:{screen:AddApprovePeople}
    },
    {
        defaultBack:'',
        title:'任务中心',      //必填项,标明小程序名称
        code:'kpiTarget',         //必填项,标明小程序code
        config:''
    }
);

// const defaultGetStateForAction = Header.router.getStateForAction;
// Header.router.getStateForAction = (action,state) => {
//     Keyboard.dismiss();
//     Picker.hide();
//     return defaultGetStateForAction(action,state);
// };

const defaultGetStateForAction = NavigatorNav.props.children[0].type.router.getStateForAction;
NavigatorNav.props.children[0].type.router.getStateForAction = (action,state) => {
    Keyboard.dismiss();
    Picker.hide();
    return defaultGetStateForAction(action,state);
};

class App extends Component{
    constructor(props){
        super(props);
        this.state = {
            loading:true,
            error:false
        };
        if(Object.getOwnPropertyNames(props).length > 0)
        {
            global.initParam = {};
            for(key in props)
            {
                global.initParam[key] = props[key];
            }
        }
    }

    componentWillMount(){
        /*执行人列表*/
        global.doEmployee = [];
        global.ccEmployee = [];
        global.approveEmployee = [];//审批人员
        global.linkDoEmployee = [];
        global.linkCcEmployee = [];
        global.readyDoEmployee = [];
        global.readyCcEmployee = [];
        global.readApproveEmployee = [];//审批人员


        let _this = this;
        this.reloadCanCreate = DeviceEventEmitter.addListener('reloadCanCreate',function(){
            _this.checkCanCreate();
        });


        NetInfo.addEventListener('change',function(isConnected){
            if(isConnected.toLocaleLowerCase() != 'none'){
                global.isConnected = true;
                if (!!global.initParam && !!global.initParam.passport){
                    global.tenantId = __IOS__ ?JSON.parse(global.initParam.passport).passport.tenantId:JSON.parse(global.initParam.passport).tenantId;
                    global.userId = __IOS__ ?JSON.parse(global.initParam.passport).passport.userId:JSON.parse(global.initParam.passport).userId;
                    DeviceEventEmitter.emit('reloadCanCreate');
                    AsyncStorage.getItem('draft', function (errs, result) {
                        if(!errs){
                            if(result){
                                let params = JSON.parse(result);
                                if(global.userId != params.userId){
                                    AsyncStorage.clear(function(){
                                        _this.setState({
                                            loading:false
                                        });
                                    })
                                }else{
                                    _this.setState({
                                        loading:false
                                    });
                                }
                            }else{
                                _this.setState({
                                    loading:false
                                });
                            }
                        }
                    });
                }else {
                    NativeModules.security.getPassport().then((json)=>{

                        if (json.length>0){
                            if (Platform.OS === 'ios'){
                                global.tenantId = JSON.parse(json).passport.tenantId;
                                global.userId = JSON.parse(json).passport.userId;
                            }else {
                                global.tenantId = JSON.parse(json).tenantId;
                                global.userId = JSON.parse(json).userId;
                            }
                            DeviceEventEmitter.emit('reloadCanCreate');
                            AsyncStorage.getItem('draft', function (errs, result) {
                                if(!errs){
                                    if(result){
                                        let params = JSON.parse(result);
                                        if(global.userId != params.userId){
                                            AsyncStorage.clear(function(){
                                                _this.setState({
                                                    loading:false
                                                });
                                            })
                                        }else{
                                            _this.setState({
                                                loading:false
                                            });
                                        }
                                    }else{
                                        _this.setState({
                                            loading:false
                                        });
                                    }
                                }
                            });
                        }else {
                            _this.error('额,程序出现了点小问题,请退出重新打开!');
                        }

                    }).catch((error)=>{
                        _this.error(error);
                    });
                }
            }else{
                _this.setState({
                    loading:false
                });
                global.isConnected = false;
                xnToast('暂无网络连接,请稍后重试!')
            }
        });

    };

    componentWillUnmount(){
        NetInfo.removeEventListener('change');
    }

    /*错误*/
    error(info){

        global.tenantId = '';
        global.userId = '';
        // xnToast('额,程序出现了点小问题,请退出重新打开!');
        if (!this.state.error){
            this.state.error = true;
        }else{
            return;
        }

        Alert.alert(
            '', //提示标题
            info, //提示内容
            [
                {
                    text: '确定', onPress:  () =>  {
                    InteractionManager.runAfterInteractions(() => {
                        NativeModules.system.navTo("BACK");
                    })
                }
                }
            ] //按钮集合
        );
        this.setState({
            loading:false
        });
        return;
    }

    /*判断是否可创建任务组*/
    checkCanCreate(){
        AppService.canCreateTeam({userId:global.userId}).then(data=>{
            if(data.message){
                xnToast(data.message);
                return
            }
            if(data.errors == null || data.errors.length > 0){
                xnToast(data.errors[0].message);
            }else{
                global.enableCreate = data.enableCreate;
            }
        }).catch((error) => {
            this.setState({
                loading:false
            });
            xnToast(error)
        });
    };

    render() {
        return (
            <View style={styles.root}>
                {!this.state.loading && <View style={{flex:1}}>{NavigatorNav}</View> }
                {this.state.loading && <View style={styles.loadingBg}>
                    <View style={styles.loadingBox}>
                        <ActivityIndicator size='large' color='#fff' />
                        <Text style={{fontSize:16,color:'#fff',marginTop:(6/zoomH)}}>加载中...</Text>
                    </View>
                </View>}
            </View>
        );
    }
}
const styles = StyleSheet.create({
    root:{
        flex:1
    },
    loadingBg:{
        position:'absolute',
        top:0,
        width:'100%',
        height:'100%',
        display:'flex',
        justifyContent:'center',
        alignItems:'center'
    },
    loadingBox:{
        width:(100/zoomW),
        height:(120/zoomH),
        backgroundColor:'rgba(0,0,0,.5)',
        borderRadius:8,
        display:'flex',
        alignItems:'center',
        justifyContent:'center'
    }
});

export default App;