"use client"; import React, { useState, useEffect } from "react"; import { DotLoading, Popup, Toast, TextArea, Switch } from "antd-mobile"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleLeft } from "@fortawesome/free-solid-svg-icons"; import requireAPI from "@/utils/requireAPI"; import { useRouter, useSearchParams } from "next/navigation"; import { multiUploadImage } from "@/utils/upload"; import UploadImgs from "@/components/UploadImgs"; import OwnInput from "@/components/OwnInput"; export default function EditSpacePost() { const searchParams = useSearchParams(); const [data, setData] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const [priceEdit, setPriceEdit] = useState(false); //价格 const [formData, setFormData] = useState({ price: 0, content: "", paidText: "", imageAssets: [], imageVisibleRange: 0, isCreatingPaidText: false, isFreeForIronfan: false, }); const [priceEditData, setPriceEditData] = useState({ price: 0, imageVisibleRange: 1, isCreatingPaidText: false, isFreeForIronfan: false, blurCover: true, }); const router = useRouter(); useEffect(() => { const dataStr = searchParams.get("data"); const data = JSON.parse(decodeURIComponent(dataStr)); setData(data); const publicData = { price: data?.price ? data?.price / 100 : 0, imageVisibleRange: data?.media_visible_range, isCreatingPaidText: data?.is_creating_paid_text, isFreeForIronfan: data?.is_ironfan_visible, blurCover: data?.is_blurring_cover == 1, }; setFormData({ content: data?.paid_text ? data?.text.slice(0, data?.text.length - data?.paid_text.length) : data?.text, paidText: data?.paid_text, imageAssets: [], ...publicData, }); setPriceEditData(publicData); }, []); //发布内容 const handleSubmit = async () => { if (formData.content == "") { Toast.show({ icon: "fail", content: "动态内容不能为空", position: "top", }); return; } if (formData.imageAssets.length === 0) { Toast.show({ icon: "fail", content: "请上传至少一张图片", position: "top", }); return; } if (data?.m_type == 1) { if ( parseFloat(formData.price) && formData.imageAssets.length <= parseInt(formData.imageVisibleRange, 10) ) { Toast.show({ icon: "fail", content: "预览图片数不得大于等于上传图片数", position: "top", }); return; } } if ( formData.isCreatingPaidText && formData.price > 0 && formData.paidText == "" ) { Toast.show({ icon: "fail", content: "请填写付费文案", position: "top", }); return; } //提交数据 if (isSubmitting) return; setIsSubmitting(true); const { price, isFreeForIronfan, content, imageAssets, textVisibleRange, imageVisibleRange, isCreatingPaidText, paidText, blurCover, } = formData; const mType = data?.m_type; const newMedia = imageAssets.filter((it) => it.id == undefined); const media = await multiUploadImage(newMedia, mType); if (mType == 1) { media.image_ids = [ ...imageAssets.filter((it) => it.id != undefined).map((it) => it.id), ...media.image_ids, ]; } else { media.video_ids = [ ...imageAssets.filter((it) => it.id != undefined).map((it) => it.id), ...media.video_ids, ]; } try { const body = { id: data.id, c_type: parseInt(price) ? 1 : 0, is_ironfan_visible: isFreeForIronfan ? 1 : 0, m_type: mType, text: content, media_component: media, text_visible_range: textVisibleRange ? parseInt(textVisibleRange, 10) : 999, media_visible_range: imageVisibleRange ? parseInt(imageVisibleRange, 10) : 1, is_blurring_cover: blurCover ? 1 : 0, price: parseFloat(price) ? parseInt(parseFloat(price) * 100, 10) : null, is_creating_paid_text: isCreatingPaidText && price > 0 ? 1 : 0, paid_text: isCreatingPaidText && price > 0 ? paidText : null, }; const _data = await requireAPI("POST", "/api/zone_moment/update", { body, }); if (_data.ret === -1) { Toast.show({ icon: "fail", content: _data.msg, position: "top", }); return; } //提交成功后显示Toast并返回上一页 Toast.show({ icon: "success", content: "提交成功,等耐心等待审核", position: "top", }); router.back(); } catch (error) { console.error(error); } finally { setIsSubmitting(false); } }; return (
重新编辑
{isSubmitting ? (动态内容
{ setPriceEdit(false); setFormData((old) => ({ ...old, ...priceEditData })); }} > 保存