import { View, Text, TextInput, ScrollView, ActivityIndicator, KeyboardAvoidingView, Platform, } from "react-native"; import React, { useState, useEffect } from "react"; import { useTailwind } from "tailwind-rn"; import { useSafeAreaInsets } from "react-native-safe-area-context"; import MediaPicker from "../../components/MediaPicker"; import Toast from "react-native-toast-message"; import { multiUpload } from "../../utils/upload"; import MediaGrid from "../../components/MediaGrid"; import requireAPI from "../../utils/requireAPI"; export default function EditStreamerPost({ navigation, route }) { const tailwind = useTailwind(); const insets = useSafeAreaInsets(); const [isSubmitting, setIsSubmitting] = useState(false); const [oldMediaAssets, setOldMediaAssets] = useState([]); const [mediaAssets, setMediaAssets] = useState([]); const [mType, setMType] = useState(1); const [initalData, setInitalData] = useState({}); //价格 const [formData, setFormData] = useState({ content: "", }); useEffect(() => { getData(); }, []); const getData = async () => { const ids = [parseInt(route.params.id, 10)]; try { const body = { ids, }; const _data = await requireAPI( "POST", "/api/moment/list_by_ids_from_creater", { body, }, true ); if (_data.ret === -1) { Toast.show({ icon: "fail", content: _data.msg, position: "top", }); return; } setInitalData(_data.data.list[0]); const { text, media_component } = _data.data.list[0]; setFormData({ content: text, }); setMType(media_component.images.length > 0 ? 1 : 2); setOldMediaAssets( media_component.images.length > 0 ? media_component.images : media_component.videos ); } catch (error) { console.error(error); } finally { setIsSubmitting(false); } }; //发布按钮 useEffect(() => { navigation.setOptions({ headerRight: () => ( {isSubmitting ? "" : "发布"} {isSubmitting && } ), }); }, [isSubmitting, handleSubmit, formData, mediaAssets, oldMediaAssets]); //是否正在拖动图片,用于禁用ScrollView的滚动 const [dragging, setDragging] = useState(false); const handleSubmit = async () => { if (formData.content == "") { Toast.show({ type: "error", text1: "动态内容不能为空", topOffset: 60, }); return; } if (oldMediaAssets.length === 0 && mediaAssets.length === 0) { Toast.show({ type: "error", text1: "请上传图片或视频", topOffset: 60, }); return; } //提交数据 if (isSubmitting) return; setIsSubmitting(true); const { content } = formData; const newMedia = await multiUpload(mediaAssets); const oldMedia = oldMediaAssets.map((item) => item.id); const media = mType === 1 ? { ...newMedia, image_ids: [...oldMedia, ...newMedia.image_ids], } : { ...newMedia, video_ids: [...oldMedia, ...newMedia.video_ids], }; try { const body = { id: parseInt(route.params.id, 10), text: content, media_component: media, status: 2, }; const data = await requireAPI( "POST", "/api/moment/update", { body, }, true, 100000 ); if (data.ret === -1) { Toast.show({ type: "error", text1: data.msg, topOffset: 60, }); return; } //提交成功后显示Toast并返回上一页 Toast.show({ type: "success", text1: "提交成功,等耐心等待审核", topOffset: 60, }); navigation.goBack(); } catch (error) { console.error(error); } finally { setIsSubmitting(false); } }; return ( {/* 内容 */} {initalData?.status === 6 && ( 违规详情 {initalData.text_audit_opinion && ( 文案违规原因: {initalData.text_audit_opinion} )} {initalData.image_audit_opinion && ( 图片/视频违规原因: {initalData.image_audit_opinion} )} {initalData.manually_review_opinion && ( 运营追加: {initalData.manually_review_opinion} )} )} 动态内容 setFormData({ content: e.nativeEvent.text })} style={tailwind( "h-32 bg-[#FFFFFF1A] text-white rounded-2xl mt-2 mb-4 p-2" )} /> {oldMediaAssets.length > 0 && ( )} ); }