ContainerView.js 13 KB
import React, {Component} from 'react';
import {
    View,
    Text,
    TouchableOpacity,
    Image,
    Platform,
} from "react-native";
import TextSingleEditView from "./TextSingleEditView";
import TextMultiEditView from "./TextMultiEditView";
import PhoneEditView from "./PhoneEditView";
import SliderView from "./SliderView";
import NumberEditView from "./NumberEditView";
import PickerView from "./PickerView";
import FiveStarView from "./FiveStarView";
import CalculatorView from "./CalculatorView";
import TabDetailView from "./TabDetailView";
import LabelLinkView from "./LabelLinkView";
import CheckboxView from "./CheckboxView";
import BooleanCheckView from "./BooleanCheckView";
import {getTextAlignVerticalStyle} from "../utils/Common";
const defaultHeight = (30);
const HPading = (16);
const VPading = (6);
/**
 * 布局容器
 */
export default class ContainerView extends Component {

    constructor(props) {
        super(props);
        this.state = {}
        this.attrData = this.props.attrData;
        this.onDeleterListener = this.props.onDeleterListener;
    }

    renderItem(item, index){
        switch (item.type) {
            case 'OPERATING_UNIT':
                return <TouchableOpacity style={styles.detialRow} onPress={() => {
                    this.choosePicker(item);
                }}>
                    {item.isRequired&&<Text style={{ color: "#FF3030" }}>* {" "}</Text>}
                    {!item.isRequired&&<Text style={{ color: "#fff" }}>* {" "}</Text>}
                    <Text style={{ fontSize: 17, color: "#000", }}>{item.name}:</Text>
                    <View style={{ flex: 1, justifyContent: "flex-end", marginRight: 15, flexDirection: "row", alignItems: "center" }}>
                        <Text style={{marginRight: 10, fontSize: 15, color: "#333",}}>{this.state.selectOperatingunit.name?this.state.selectOperatingunit.name:''}</Text>
                        <Image style={{width:7,height:12}}  source={require('../img/list-pic.png')} resizeMode="contain" />
                    </View>
                </TouchableOpacity>
                break;
            case 'TEXT':
                return (
                    <TextSingleEditView
                        attrData={item}
                        onChangeText={(text)=>{
                            console.log("text", text)
                        }}
                    />
                )
                break;
            case 'LONG_TEXT':// 多行输入框
                return (
                    <TextMultiEditView
                        attrData={item}
                        onChangeText={(text)=>{
                            console.log("long_text", text)
                        }}
                    />
                )
                break;
            case 'PHONE':// 电话输入
                return (
                    <PhoneEditView
                        attrData={item}
                        onChangeText={(phone)=>{
                            item.value = phone
                        }}
                    />
                )
                break;
            case 'SLIDE':// 滑块
                return (
                    <SliderView
                        attrDat={item}
                    />
                )
                break;
            case 'MONEY':// 金额
                return (
                    <NumberEditView
                        attrDat={item}
                        onChangeText={(text)=>{
                            item.value = text
                        }}
                    />
                )
                break;
            case 'DATE':// 日期
                return (
                    <PickerView
                        attrData={item}
                        onChangeText={(text)=>{
                            item.value = text
                        }}
                    />
                )
                break;
            case 'PERIOD':// 日期区间
                return (
                    <PickerView
                        attrData={item}
                        onChangeBeginText={(text)=>{
                            item.value = text
                        }}
                        onChangeEndText={(text)=>{
                            item.value = text
                        }}
                    />
                )
                break;
            case 'SCORE':// 评分
                return (
                    <FiveStarView
                        attrData={item}
                    />
                )
                break;
            case 'NUMBER':// 数字输入框
                return (
                    <NumberEditView
                        attrData={item}
                        onChangeText={(text)=>{
                            item.value = text
                        }}
                    />
                )
                return null;
                break;
            case 'CALCULATOR':
                return (
                    <CalculatorView
                        attrData={item}
                    />
                )
                break;
            case 'TABLE':// 表格
                return (
                    <TabDetailView
                        attrData={item}
                    />
                )
                break;
            case 'LABEL':// 提示标签
                return (
                    <LabelLinkView
                        attrData={item}
                    />
                )
                break;
            case 'SELECT':// 单选框
                return (
                    <CheckboxView
                        attrData={item}
                    />
                )
                break;
            case "CHECKBOX":// 多选框
                return (
                    <CheckboxView
                        attrData={item}
                    />
                )
                break;
            case 'BOOLEAN':// 是否
                return (
                    <BooleanCheckView
                        attrData={item}
                    />
                )
                break;
            case 'ATTACHMENT':
                return (
                    <View style={{height:130,paddingLeft:15,backgroundColor:'#fff',paddingTop:10,justifyContent:'space-between'}}>
                        <View style={{flexDirection:'row'}}>
                            {item.isRequired&&<Text style={{ color: "#FF3030" }}>* {" "}</Text>}
                            {!item.isRequired&&<Text style={{ color: "#fff" }}>* {" "}</Text>}
                            <Text style={{ fontSize: 17, color: "#000", }}>{item.name}:</Text>
                        </View>
                        <View style={{flexDirection: "row", flexWrap: "wrap"}}>
                            {item.value&&item.value!=''&&JSON.parse(item.value).map((v, i) => this._renderAttachmentList(v, i))}
                            <View style={styles.attachmentsItemLayout}>
                                <TouchableOpacity style={styles.attachmentsItemBox} activeOpacity={1} onPress={() => {

                                    this.state.attachmentList = JSON.parse(item.value?item.value:'[]')||[];
                                    this.state.item = item;
                                    Platform.OS === 'android' ? this.upLoadFile() : this.openSelectModal();
                                }}>
                                    <View style={styles.attachmentsItemBoxImg}>
                                        <Image style={styles.attachmentsItemImageAdd} source={require('../img/add-icon.png')}
                                               resizeMode="contain"></Image>
                                    </View>
                                </TouchableOpacity>
                            </View>
                        </View>
                    </View>
                )
                break;
            case 'PICTURE':
                return (
                    <View style={{height:130,paddingLeft:15,backgroundColor:'#fff',paddingTop:10,justifyContent:'space-between'}}>
                        <View style={{flexDirection:'row'}}>
                            {item.isRequired&&<Text style={{ color: "#FF3030" }}>* {" "}</Text>}
                            {!item.isRequired&&<Text style={{ color: "#fff" }}>* {" "}</Text>}
                            <Text style={{ fontSize: 17, color: "#000", }}>{item.name}:</Text>
                        </View>
                        <View style={{flexDirection: "row", flexWrap: "wrap"}}>
                            {item.value&&item.value!=''&&JSON.parse(item.value).map((v, i) => this._renderAttachmentList(v, i))}
                            <View style={styles.attachmentsItemLayout}>
                                <TouchableOpacity style={styles.attachmentsItemBox} activeOpacity={1} onPress={() => {

                                    this.state.attachmentList = JSON.parse(item.value?item.value:'[]')||[];
                                    this.state.item = item;
                                    Platform.OS === 'android' ? this.upLoadFile() : this.openSelectModal();
                                }}>
                                    <View style={styles.attachmentsItemBoxImg}>
                                        <Image style={styles.attachmentsItemImageAdd} source={require('../img/add-icon.png')}
                                               resizeMode="contain"></Image>
                                    </View>
                                </TouchableOpacity>
                            </View>
                        </View>
                    </View>
                )
                break;
            case "POSITION":// 岗位
                return (
                    <TouchableOpacity style={styles.detialRow} onPress={() => {
                        this.props.navigation.navigate('SearchPosition',{callBack:(data)=>{
                                item.value = JSON.stringify(data);
                                this.setState({});
                            }
                        });
                    }}>
                        {item.isRequired&&<Text style={{ color: "#FF3030" }}>* {" "}</Text>}
                        {!item.isRequired&&<Text style={{ color: "#fff" }}>* {" "}</Text>}
                        <Text style={{ fontSize: 17, color: "#000", }}>{item.name}:</Text>
                        <View style={{ flex: 1, justifyContent: "flex-end", marginRight: 15, flexDirection: "row", alignItems: "center" }}>
                            <Text style={{marginRight: 10, fontSize: 15, color: "#333",}}>{item.value?JSON.parse(item.value).showName:''}</Text>
                            <Image style={{width:7,height:12}}  source={require('../img/list-pic.png')} resizeMode="contain" />
                        </View>
                    </TouchableOpacity>
                )
                break;
            case "USER":
                return (
                    <View style={{height:130,paddingLeft:15,backgroundColor:'#fff',paddingTop:10,justifyContent:'space-between'}}>
                        <View style={{flexDirection:'row'}}>
                            {item.isRequired&&<Text style={{ color: "#FF3030" }}>* {" "}</Text>}
                            {!item.isRequired&&<Text style={{ color: "#fff" }}>* {" "}</Text>}
                            <Text style={{ fontSize: 17, color: "#000", }}>{item.name}:</Text>
                        </View>
                        <View style={[styles.addList,{}]}>
                            { item.value&&item.value!=''&&JSON.parse(item.value).map((v, i) => this._renderUser(v, i))}
                            <View style={styles.addItem}>
                                <TouchableOpacity style={styles.addItemLayout} onPress={()=>{
                                    this.state.usersList = JSON.parse(item.value?item.value:'[]')||[];
                                    this.state.item = item;
                                    this.addUser()
                                }}>
                                    <View style={[styles.addItemImg,styles.addItemImgOp]}><Image style={{  width:12,height:12}}  source={require('../img/add-icon.png')}  resizeMode="contain"/></View>
                                    <View style={styles.addItemName}><Text style={[styles.addItemNameText,styles.addItemNameTextOp]}>添加</Text></View>
                                </TouchableOpacity>
                            </View>

                        </View>

                    </View>

                )
                break;

            default:
                return <View></View>
                break
        }
    }

    render() {
        let {name, code, type, description, isRequired, isPreview} = this.attrData;
        return (
            <View style={{width: '100%',paddingHorizontal:HPading,height:defaultHeight, backgroundColor: 'rgba(245, 245, 245, 1)'}}>
                <View style={{flexDirection: 'row', justifyContent:'flex-start',alignItems: 'center'}}>
                    <Text style={[{fontSize: 14, color: 'rgb(51,51,51)'},getTextAlignVerticalStyle(defaultHeight)]}>{name}</Text>
                </View>
            </View>
        );
    }
}