"use client"; import React, { useState, useEffect } from "react"; import { redirect, useRouter, useSearchParams } from "next/navigation"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faAngleLeft } from "@fortawesome/free-solid-svg-icons"; import { TextArea, Divider, Button, Toast } from "antd-mobile"; import requireAPI from "@/utils/requireAPI"; import { getSpaceData } from "@/api/space"; export default function SpaceRefund() { //页面数据 const [data, setData] = useState(); //联系人 const [name, setName] = useState(); //联系方式 const [contact, setContact] = useState(); //备注 const [remark, setRemark] = useState(); //提交中 const [isSubmitting, setIsSubmitting] = useState(false); const router = useRouter(); const searchParams = useSearchParams(); useEffect(() => { getSpaceData(Number(id)).then((res) => { if (res) { const { isRefunding, noRole } = res; isRefunding && router.push("/"); noRole && router.replace("person_space_introduce/" + id); } }); getData(); }, []); //提交退款 const handleSubmit = async () => { if (!name || !contact || !remark) { Toast.show({ type: "error", text1: "请完善信息后提交", topOffset: 60, }); return; } if (remark.length < 15) { Toast.show({ type: "error", text1: "请填写15字以上退款原因", topOffset: 60, }); return; } //提交数据 if (isSubmitting) return; setIsSubmitting(true); try { const _data = await requireAPI("POST", "/api/zone/refund", { body: { zid: Number(searchParams.get("id")), contact_name: name, contact_phone: contact, note: remark, }, }); if (_data.ret === -1) { Toast.show({ type: "error", text1: _data.msg, topOffset: 60, }); return; } Toast.show({ icon: "success", content: "提交成功,请关注原支付渠道通知", position: "top", }); redirect("/"); } catch (error) { console.error(error); } finally { setIsSubmitting(false); } }; //获取页面数据 const getData = async () => { try { const _data = await requireAPI("POST", "/api/zone/refund_page", { body: { zid: Number(searchParams.get("id")) }, }); if (_data.ret === -1) { Toast.show({ icon: "fail", content: _data.msg, position: "top", }); return; } setData(_data.data); } catch (error) { console.error(error); } }; return ( <div> <div className="p-4 fixed top-0 z-10 w-full"> <div className="w-9 h-9 flex items-center justify-center bg-[#FFFFFF1A] rounded-full float-left absolute"> <FontAwesomeIcon icon={faAngleLeft} size="xl" onClick={() => { router.back(); }} /> </div> <p className="text-base text-center leading-9">申请退款</p> </div> <div className="mt-14 p-4"> <div className="flex-row justify-between items-center"> <p className="text-base text-white font-medium"> <span className="text-[#F53030]">*</span> 退款商品 </p> <p className="text-base text-white font-medium">{data?.name}</p> </div> <Divider className="my-2" /> <div className="flex-row justify-between items-center"> <p className="text-base text-white font-medium"> <span className="text-[#F53030]">*</span> 退款价格 </p> <p className="text-base text-white font-medium"> ¥{data?.price / 100} </p> </div> <Divider className="my-2" /> <div className="flex-row justify-between items-center"> <p className="text-base text-white font-medium"> <span className="text-[#F53030]">*</span> 联系人 </p> <TextArea placeholder="请输入联系人姓名" onChange={(value) => setName(value)} value={name} maxLength={20} className="h-32 bg-[#FFFFFF1A] text-white rounded-2xl mt-2 p-2" style={{ "--placeholder-color": "#FFFFFF80", "--font-size": "14px", }} /> </div> <Divider className="my-2" /> <div className="flex-row justify-between items-center"> <p className="text-base text-white font-medium"> <span className="text-[#F53030]">*</span> 联系方式 </p> <TextArea placeholder="请输入联系方式" onChange={(value) => setContact(value)} value={contact} maxLength={20} className="h-32 bg-[#FFFFFF1A] text-white rounded-2xl mt-2 p-2" style={{ "--placeholder-color": "#FFFFFF80", "--font-size": "14px", }} /> </div> <Divider className="my-2" /> <div className="flex flex-col"> <p className="text-base text-white font-medium"> <span className="text-[#F53030]">*</span> 退款原因 </p> <div className="flex flex-row items-center"> <TextArea placeholder="请输入退款原因" onChange={(value) => setRemark(value)} value={remark} className="h-32 bg-[#FFFFFF1A] text-white rounded-2xl mt-2 p-2" style={{ "--placeholder-color": "#FFFFFF80", "--font-size": "14px", }} /> </div> </div> <Divider className="my-2" /> <p className="text-[#F53030] text-base font-medium">退款须知</p> <div className="text-[#FFFFFF80] text-sm font-medium"> <p> 1、当前退款内容为本空间的成员身份,退款后您将无法再次加入本空间; </p> <p> 2、平台将在24小时内处理您的退款申请,为了退款进程的顺利,请您详细填写您的退款原因; </p> <p> 3、一旦退款成功,退款金额将原路返回您的支付账户,请确保您的支付账户可正常接受款项; </p> <p>4、您在12小时内只能进行一次自助退款,请合理利用权利;</p> <p>5、本条款最终解释权归平台所有。</p> </div> <Button shape="rounded" size="middle" block onClick={() => handleSubmit()} style={{ "--background-color": "#FF669E", color: "#FFFFFF" }} className="mt-2" > {isSubmitting && <ActivityIndicator size="small" color="white" />} {isSubmitting ? "正在提交..." : "提交退款"} </Button> </div> </div> ); }