Coupon.js 11.8 KB
import React, { Component } from 'react';
import {Image, View, Text, StyleSheet,ScrollView,TouchableOpacity, Dimensions } from 'react-native';
import CouponeItem from '../CouponItem'
import StampItem from '../StampItem'
import Modal from 'react-native-modal'
import DropDownPicker from 'react-native-dropdown-picker';
import Setting from '../../assets/setting.svg'
import Bin from '../../assets/bin.svg'
import Search from '../../assets/search_yellow.svg'
import AsyncStorage from '@react-native-community/async-storage';
import {get, delete as remove} from 'axios'
import { SERVER } from '../../common/servername';
import moment from 'moment'
import Loading from '../Pages/Loading'
export default class AddTab extends Component {
    static navigationOptions = {
        
        headerShown: false
        
    }
    state = {
        isModalVisible:false,
        current:1,
        select:'',
        dropdownVisible:false,
        store:[],
        selectId:0,
        menu:[],
        user:{},
        loading:true
    }
    constructor(props) {
        super(props)
    }
    componentDidMount() {
        this.onLoad()
        
        AsyncStorage.getItem("user",(err,res) => {
            if(res) {
                this.setState({
                    user:JSON.parse(res)
                })
                get(`http://${SERVER}/stores/managerRead/${JSON.parse(res).id}`).then(res => {
                    if(res.data.success) {
                        this.setState({
                            store:res.data.data,
                            select:res.data.data[0].name,
                            selectId:res.data.data[0].id
                        })
                        
                        get(`http://${SERVER}/coupons/${res.data.data[0].id}`).then(res => {
                            if(res.data.success) {
                            this.setState({
                                menu:res.data.data,
                                loading:false
                            })
                            console.log(res.data.data)
                            }
                        })
                    }
                })
            }
        })

    }
    
    onLoad = () => {
        this.props.navigation.addListener('willFocus', () => {
            this.onRefresh();
        });
    };
    onRefresh = () => {
        get(`http://${SERVER}/stores/managerRead/${this.state.user.id}`).then(res => {
            if(res.data.success) {
                this.setState({
                    store:res.data.data,
                    select:res.data.data[0].name,
                    selectId:res.data.data[0].id
                })
                
                get(`http://${SERVER}/coupons/${res.data.data[0].id}`).then(res => {
                    if(res.data.success) {
                    this.setState({
                        menu:res.data.data,
                    })
                    console.log(res.data.data)
                    }
                })
            }
        })

    }
    handleDropdown = (e) => {
        this.setState({dropdownVisible:false,select:e.name,selectId:e.id})
        get(`http://${SERVER}/coupons/${e.id}`).then(res => {
            if(res.data.success) {
                this.setState({
                    menu:res.data.data,
                })
            }
        })
    }
    render() {
        return (
            <View>
                <View style={{width:"100%",flexDirection:"row",paddingTop:16,paddingBottom:16,paddingLeft:16,backgroundColor:"#615F5F"}}>
                    <TouchableOpacity onPress={() => this.props.navigation.goBack(null)}>
                        <Image source={require('../../assets/back.png')}/>
                    </TouchableOpacity>
                    <Text style={{color:"white",fontSize:16,marginLeft:16}}>
                        쿠폰
                    </Text>
                </View>
                {this.state.loading?<View style={{height:"90%"}}><Loading/></View>:
                <ScrollView style={{backgroundColor:"white",paddingLeft:16,paddingRight:16,paddingTop:16,height:"100%"}}>
                    <View style={{flexDirection:"row"}}>
                        <View style={{width:"75%",}}>
                            <TouchableOpacity onPress={() => this.setState({dropdownVisible:true})} style={{paddingLeft:16,paddingTop:11,paddingBottom:9,backgroundColor:"white",borderColor:"#FFD63A",borderWidth:1}}>
                                <Text style={{fontSize:14,fontWeight:"bold",color:"#615F5F"}}>
                                    {this.state.select}
                                </Text>
                            </TouchableOpacity>
                        
                        </View>
                        <TouchableOpacity onPress={() => {
                            if(this.state.selectId>0) {
                                this.props.navigation.navigate('Add_Coupon',{id:this.state.selectId,name:this.state.select})
                            }
                            else {
                                alert("매장이 선택되지 않았습니다.")
                            }
                    }} style={{width:"25%",justifyContent:"center"}}>
                            <Text style={{textAlign:"center"}}>
                                추가 +
                            </Text>
                        </TouchableOpacity>
                    </View>
                    {this.state.dropdownVisible? 
                        
                        <View style={{width:"75%",height:"100%",position:"absolute",backgroundColor:"transparent",zIndex:10}}>
                            <View>
                                {this.state.store.map((e,i,arr) => {
                                    return (
                                        
                                        <TouchableOpacity onPress={() => this.handleDropdown(e)
                                        } 
                                        style={[{position:"relative",width:"100%",backgroundColor:"white",paddingLeft:16,paddingTop:11,paddingBottom:9,backgroundColor:"white",borderColor:"#FFD63A",borderWidth:1,borderBottomWidth:0,borderTopWidth:0},i==0?{borderTopWidth:1}:i==arr.length-1?{borderBottomWidth:1}:{}]}>
                                            <Text style={{fontSize:14,fontWeight:"bold",color:"#615F5F"}}>
                                                {e.name}
                                            </Text>
                                        </TouchableOpacity>
                                    )
                                })}
                            </View>
                        </View>:undefined}
                        
                    <View style={{height:"100%",paddingLeft:16,paddingRight:16,paddingTop:16,paddingBottom:16}}>
                        
                        <View style={{minHeight:Dimensions.get('screen').height}}>
                                {this.state.menu.map((e,i) => {
                                    return (
                                        <View style={{paddingBottom:17,borderBottomColor:'#BDBCBC',borderBottomWidth:1,marginTop:17,flexDirection:"row"}}>
                                        <View style={{width:"75%"}}>
                                            <View style={{flexDirection:"row",justifyContent:"space-between"}}>
                                            <Text style={{color:"#615F5F",fontSize:14}}>
                                                {moment( e.use_time_min).format("YY.M.D")}
                                            </Text>
                                            <Text style={{color:"#615F5F",fontSize:14}}>
                                                {e.name} (~{moment( e.use_time_max).format("YY.M.D")})
                                            </Text>
                                            </View>
                                            <View style={{flexDirection:"row",justifyContent:"space-between",marginTop:14}}>
                                            <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                발행 {e.set_stock_count}
                                            </Text>
                                            <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                등록 {e.set_stock_count-e.stock_count}
                                            </Text>
                                            <Text style={{width:"33%",fontSize:15,fontWeight:"bold",color:"#615F5F"}}>
                                                사용 {e.Users.filter((el,i) => el.Coupon_user.status=="used").length}
                                            </Text>
                                            </View>
                                        </View>
                                        <View style={{width:"25%",justifyContent:"space-around"}}>
                                            <TouchableOpacity onPress={() => {
                                            remove(`http://${SERVER}/coupons/${e.id}`).then(res => {
                                                if(res.data.success) {
                                                    this.onRefresh()
                                                    alert("메뉴가 삭제되었습니다.")
                                                }
                                            })
                                        }}>
                                            <Bin style={{alignSelf:"center",marginLeft:"auto",marginRight:"auto"}}/>
                                            </TouchableOpacity>
                                            <Search style={{alignSelf:"center",marginLeft:"auto",marginRight:"auto"}}/>
                                        </View>
                                        </View>
                                    )
                                })}
                        </View>
                    </View>
                </ScrollView>}

                 
      <Modal onBackButtonPress={() => this.setState({isModalVisible:false})} onBackdropPress={() => this.setState({isModalVisible:false})} isVisible={this.state.isModalVisible}>
        <View style={{ width:"80%",backgroundColor:"white",alignSelf:"center"}}>
          <TouchableOpacity onPress={() => { 
              this.setState({isModalVisible:false})
              this.props.navigation.navigate("Store")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center",marginTop:10}}>스토어</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false}) 
          this.props.navigation.navigate("Coupon")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>쿠폰</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false})
          this.props.navigation.navigate("Stamp")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>스탬프</Text>
          </TouchableOpacity>
          <TouchableOpacity onPress={() => { this.setState({isModalVisible:false})
          this.props.navigation.navigate("Menu")}}>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>메뉴</Text>
          </TouchableOpacity>
          <TouchableOpacity>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center"}}>리뷰게시판</Text>
          </TouchableOpacity>
          <TouchableOpacity>
          <Text style={{color:"#979292",fontSize:16,lineHeight:50,textAlign:"center",marginBottom:10}}>알림발송</Text>
          </TouchableOpacity>
        </View>
      </Modal>
            </View>
        );
    }
}
 
const style = StyleSheet.create({
    container: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center',
    }
});