import React, { useState, forwardRef, useImperativeHandle, useRef, } from "react"; import Taro from "@tarojs/taro"; import { View } from "@tarojs/components"; import CommonPopup from "../CommonPopup"; import styles from "./index.module.scss"; import detailService from "@/services/detailService"; import { useUserInfo } from "@/store/userStore"; const CancelPopup = forwardRef((props, ref) => { const [visible, setVisible] = useState(false); const onFinish = useRef(null); useImperativeHandle(ref, () => ({ show: (onAct) => { onFinish.current = onAct; setVisible(true); }, })); function onClose() { setVisible(false); } return ( <> ); }); export default forwardRef(function GameManagePopup(props, ref) { const [visible, setVisible] = useState(false); const [detail, setDetail] = useState({}); const onStatusChange = useRef(null); const cancelRef = useRef(null); const userInfo = useUserInfo(); useImperativeHandle(ref, () => ({ show: (gameDetail, onChange) => { onStatusChange.current = onChange; setDetail(gameDetail); setVisible(true); }, })); function handleEditGame() { Taro.navigateTo({ url: `/publish_pages/publishBall/index?gameId=${detail.id}`, }); onClose() } const handleRepubGame = handleEditGame; async function handleCancelGame() { cancelRef.current.show(async (result) => { if (result) { try { const res = await detailService.disbandGame({ game_id: detail.id, settle_reason: result, }); if (res.code === 0) { Taro.showToast({ title: "活动取消成功" }); onStatusChange.current?.(true); } } catch (e) { Taro.showToast({ title: e.message, icon: "error" }); } finally { onClose(); } } }); } async function handleQuitGame() { try { const res = await detailService.organizerQuit({ game_id: detail.id, quit_reason: "组织者主动退出", }); if (res.code === 0) { Taro.showToast({ title: "活动退出成功" }); onStatusChange.current?.(true); } } catch (e) { Taro.showToast({ title: e.message, icon: "error" }); } finally { onClose(); } } function onClose() { setVisible(false); } const hasJoin = (detail.participants || []).some(item => item.user.id === userInfo.id) return ( <> 编辑活动 重新发布 取消活动 {hasJoin && ( 退出活动 )} 取消 ); });