import React, {Component} from 'react'; import Toast from '@remobile/react-native-toast'; import CommonTitleBar from '../views/CommonTitleBar'; import ImagePicker from 'react-native-image-crop-picker'; import StorageUtil from '../utils/StorageUtil'; import LoadingView from '../views/LoadingView'; import CountEmitter from '../event/CountEmitter'; import Utils from '../utils/Utils'; import Base64Utils from '../utils/Base64'; import {Dimensions, Image, StyleSheet, Text, TextInput, TouchableOpacity, View} from 'react-native'; const {width} = Dimensions.get('window'); export default class PublishMomentScreen extends Component { constructor(props) { super(props); this.state = { selectedImages: [], content: '', username: '', showProgress: false }; StorageUtil.get('username', (error, object) => { if (!error && object != null) { this.setState({username: object.username}); } }) } render() { return ( { this.sendMoment() }}/> { this.state.showProgress ? ( this.setState({showProgress: false})}/> ) : (null) } { this.setState({content: text}) }}/> {this.renderSelectedImages()} 所在位置 谁可以看 提醒谁看 ); } showLoading() { this.setState({showProgress: true}); } hideLoading() { this.setState({showProgress: false}); } sendMoment() { if (Utils.isEmpty(this.state.username)) { Toast.showShortCenter('用户未登录'); return; } let content = this.state.content; if (Utils.isEmpty(content)) { Toast.showShortCenter('请输入内容'); return; } this.showLoading(); content = Base64Utils.encoder(content); let images = this.state.selectedImages; let formData = new FormData(); if (images.length > 0) { for (let i = 0; i < images.length; i++) { let path = images[i]; let filename = path.substring(path.lastIndexOf('/') + 1, path.length); let file = {uri: path, type: 'multipart/form-data', name: filename}; formData.append('file', file); } } formData.append('username', this.state.username); formData.append('content', content); let url = 'http://app.yubo725.top/publishMoment'; fetch(url, {method: 'POST', body: formData}).then((res) => res.json()) .then((json) => { this.hideLoading(); if (json != null) { if (json.code == 1) { // 发送成功 Toast.showShortCenter('发表成功'); // 通知朋友圈列表刷新 CountEmitter.emit('updateMomentList'); // 退出当前页面 this.props.navigation.goBack(); } else { // 发送失败 let msg = json.msg; Toast.showShortCenter(msg); } } }).catch((e) => { this.hideLoading(); Toast.showShortCenter(e.toString()); }) } renderImageItem(item, index) { let imageURI = {uri: item}; return ( { }}> ); } renderAddBtn() { return ( { this.pickImage() }}> ); } renderImageRow(arr, start, end, isSecondRow) { let images = []; for (let i = start; i < end; i++) { if (i == -1) { images.push(this.renderAddBtn()); } else { images.push(this.renderImageItem(arr[i], i)); } } let style = {}; if (!isSecondRow) { style = {flexDirection: 'row'}; } else { style = {flexDirection: 'row', marginTop: 10}; } return ( {images} ); } renderSelectedImages() { let row1 = []; let row2 = []; let images = this.state.selectedImages; let len = images.length; if (len >= 0 && len <= 4) { row1.push(this.renderImageRow(images, -1, len, false)); } else if (len > 4) { row1.push(this.renderImageRow(images, -1, 4, false)); row2.push(this.renderImageRow(images, 4, len, true)); } return ( {row1} {row2} ); } pickImage() { if (this.state.selectedImages.length >= 9) { Toast.showShortCenter('最多只能添加9张图片'); return; } ImagePicker.openPicker({ width: 300, height: 300, cropping: false }).then(image => { let arr = this.state.selectedImages; arr.push(image.path); this.setState({selectedImages: arr}); }); } } const styles = StyleSheet.create({ container: { flex: 1, flexDirection: 'column', }, content: { backgroundColor: '#FFFFFF', flexDirection: 'column', paddingLeft: 10, paddingRight: 10, }, input: { width: width - 20, height: 120, textAlignVertical: 'top', fontSize: 15, }, selectedImageContainer: { width: width, flexDirection: 'column', }, addPicImgBtn: { width: 60, height: 60, marginLeft: 10, }, bottomContent: { marginTop: 25, backgroundColor: '#FFFFFF', paddingLeft: 10, paddingRight: 10, }, bottomItem: { flexDirection: 'row', paddingTop: 12, paddingBottom: 12, alignItems: 'center' }, bottomItemIcon: { width: 25, height: 25, } })