tiefen_space_h5/app/streamerPosts/editPost/[zid]/page.jsx

263 lines
7.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"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, useParams } from "next/navigation";
import { multiUploadImage } from "@/utils/upload";
import UploadImgs from "@/components/UploadImgs";
export default function EditPost() {
const params = useParams();
const [isSubmitting, setIsSubmitting] = useState(false);
const [oldPhotos, setOldPhotos] = useState([]);
const [data, setData] = useState(null);
//价格
const [formData, setFormData] = useState({
content: "",
imageAssets: [],
videoAssets: [],
});
const router = useRouter();
useEffect(() => {
getData();
}, []);
const getData = async () => {
const ids = [parseInt(params.zid, 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;
}
setData(_data.data.list[0]);
const { text, media_component } = _data.data.list[0];
setFormData({
content: text,
imageAssets: media_component.images.map((it) => ({
url: it.urls[0],
id: it.id,
})),
videoAssets: media_component.videos.map((it) => ({
url: it.cover_urls[0],
id: it.id,
})),
});
} catch (error) {
console.error(error);
} finally {
setIsSubmitting(false);
}
};
//发布内容
const handleSubmit = async () => {
if (formData.content == "") {
Toast.show({
icon: "fail",
content: "动态内容不能为空",
position: "top",
});
return;
}
if (
formData.imageAssets.length === 0 &&
formData.videoAssets.length === 0
) {
Toast.show({
icon: "fail",
content: "请上传图片或视频",
position: "top",
});
return;
}
//提交数据
if (isSubmitting) return;
setIsSubmitting(true);
const { content, imageAssets, videoAssets } = formData;
const type = formData.imageAssets.length > 0 ? 1 : 2;
const newMedia = [...(type == 1 ? imageAssets : videoAssets)].filter(
(it) => it.id == undefined
);
const media = await multiUploadImage(newMedia, type);
// const media = await multiUploadImage(imageAssets);
if (type == 1) {
media.image_ids = [
...imageAssets.filter((it) => it.id != undefined).map((it) => it.id),
...media.image_ids,
];
} else {
media.video_ids = [
...videoAssets.filter((it) => it.id != undefined).map((it) => it.id),
...media.video_ids,
];
}
try {
const body = {
id: parseInt(params.zid, 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({
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 (
<div className="flex-1">
{/* 头部标题 */}
<div className="p-4 fixed top-0 z-10 w-full flex justify-between items-center bg-black">
<div className="w-9 h-9 flex items-center justify-center bg-[#FFFFFF1A] rounded-full">
<FontAwesomeIcon
icon={faAngleLeft}
style={{ maxWidth: "12px" }}
size="xl"
onClick={() => {
router.back();
}}
/>
</div>
<p className="text-base text-center leading-9">广场动态</p>
{isSubmitting ? (
<DotLoading />
) : (
<span className="text-primary text-lg" onClick={handleSubmit}>
发布
</span>
)}
</div>
{/* 内容 */}
<div className="pt-16 p-4">
{data?.status === 6 &&
(data.text_audit_opinion ||
data.image_audit_opinion ||
data.manually_review_opinion) && (
<div className="mb-4">
<span className="text-base font-medium text-[#F53030] mb-2">
违规详情
</span>
<div className="mt-2 p-4 rounded-2xl bg-[#FFFFFF1A]">
{data.text_audit_opinion && (
<p className="text-sm font-medium text-white">
<span className="text-[#F53030]">文案违规原因</span>
{data.text_audit_opinion}
</p>
)}
{data.image_audit_opinion && (
<p className="text-sm font-medium text-white">
<span className="text-[#F53030]">图片/视频违规原因</span>
{data.image_audit_opinion}
</p>
)}
{data.manually_review_opinion && (
<p className="text-sm font-medium text-white">
<span className="text-[#F53030]">运营追加</span>
{data.manually_review_opinion}
</p>
)}
</div>
</div>
)}
<div className="mt-2">
<p className="text-base font-medium text-white">动态内容</p>
<div className="h-32">
<TextArea
placeholder="请遵守平台准则,严禁发布违规内容"
value={formData.content}
autoSize={{ minRows: 6, maxRows: 15 }}
onChange={(value) =>
setFormData((old) => ({ ...old, content: value }))
}
style={{ "--font-size": "16px" }}
className="h-full bg-[#FFFFFF1A] rounded-2xl mt-2 mb-4 p-2"
/>
</div>
</div>
<div className="mt-4">
<p className="text-base font-medium mt-4 mb-1">
图片
<span className="text-[#FFFFFF80] text-sm">
添加图片后不可添加视频
</span>
</p>
<UploadImgs
type={1}
id="uploadAvatarBtn1"
existImages={oldPhotos}
assets={formData.imageAssets}
getImgs={(imgs) => {
setFormData((old) => ({
...old,
imageAssets: imgs,
videoAssets: [],
}));
}}
/>
</div>
<div className="mt-4">
<p className="text-base font-medium mt-4 mb-1">
视频
<span className="text-[#FFFFFF80] text-sm">
添加视频后不可添加图片
</span>
</p>
<UploadImgs
type={2}
accept="video/*"
id="uploadAvatarBtn2"
assets={formData.videoAssets}
videoSrc={data?.media_component?.videos[0]?.urls[0]}
maxLength={1}
getImgs={(imgs) => {
setFormData((old) => ({
...old,
videoAssets: imgs,
imageAssets: [],
}));
}}
/>
</div>
</div>
</div>
);
}