import AccountCircleOutlined from "@mui/icons-material/AccountCircleOutlined";
import CheckCircleOutlineOutlined from "@mui/icons-material/CheckCircleOutlineOutlined";
import FactCheckOutlined from "@mui/icons-material/FactCheckOutlined";
import PaymentsOutlined from "@mui/icons-material/PaymentsOutlined";
import ReceiptLongOutlined from "@mui/icons-material/ReceiptLongOutlined";
import Alert from "@mui/material/Alert";
import Autocomplete from "@mui/material/Autocomplete";
import Button from "@mui/material/Button";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogTitle from "@mui/material/DialogTitle";
import InputAdornment from "@mui/material/InputAdornment";
import MenuItem from "@mui/material/MenuItem";
import TextField from "@mui/material/TextField";
import { DateTimePicker } from "@/shared/ui/DateTimePicker.jsx";
import {
COIN_SELLER_RECHARGE_CHAINS,
COIN_SELLER_RECHARGE_PROVIDER_CURRENCIES,
COIN_SELLER_RECHARGE_PROVIDERS,
} from "../constants.js";
import { formatAmount, formatTime, formatUsdMinor } from "../format.js";
export function FinanceCoinSellerRechargeCreateDialog({
apps,
form,
formError,
loading,
onChange,
onClose,
onSubmit,
onVerifyReceipt,
open,
quote,
quoteError,
quoteLoading,
receiptLoading,
receiptVerification,
}) {
const disabled = loading || receiptLoading;
// 财务录单的主按钮只在“金额结果已确定 + 三方凭证已校验”时开放,避免界面优化后弱化原有风控门槛。
const canCreate = receiptVerification?.verified === true && (form.isMakeup || Boolean(quote?.coinAmount)) && !disabled;
const selectedAppName = apps.find((app) => app.appCode === form.appCode)?.appName || form.appCode || "待选择";
return (
);
}
function FormSection({ children, icon, index, title }) {
return (
);
}
function CoinQuoteResult({ form, quote, quoteError, quoteLoading }) {
const coinAmount = form.isMakeup ? 0 : quote?.coinAmount;
return (
{form.isMakeup ? "本次不发放" : "预计到账"}
金币
{quoteHelperText(quote, quoteError, quoteLoading, form.isMakeup)}
);
}
function OrderPreview({ appName, form, quote, quoteLoading, receiptVerification }) {
const usdAmount = Number(form.usdAmount || 0);
const coinAmount = form.isMakeup ? 0 : Number(quote?.coinAmount || 0);
const providerLabel = COIN_SELLER_RECHARGE_PROVIDERS.find(([value]) => value === form.providerCode)?.[1] || "待选择";
return (
);
}
function quoteHelperText(quote, error, loading, isMakeup) {
if (isMakeup) return "补单不发放金币,充值金额仍正常计入统计";
if (loading) return "正在计算兑换比例与金币数量";
if (error) return error;
if (!quote) return "填写 APP、用户 ID 和 USD 金额后自动计算";
const source = quote.rateSource === "whitelist"
? `用户白名单 ${quote.matchedUserId || ""}`.trim()
: `${quote.minUsdAmount}-${quote.maxUsdAmount} USD 区间`;
return `${source} · 1 USD = ${formatAmount(quote.coinsPerUsd)} 金币`;
}
function ReceiptVerificationBanner({ verification }) {
const detail = [
verification.status && `状态 ${verification.status}`,
verification.providerOrderId && `三方单 ${verification.providerOrderId}`,
verification.currencyCode && verification.providerAmountMinor !== undefined
? formatUsdMinor(verification.providerAmountMinor, verification.currencyCode)
: "",
verification.failureReason,
].filter(Boolean).join(" / ");
return (
{verification.verified ? "校验通过" : "校验未通过"}{detail ? `:${detail}` : ""}
);
}