import React, { useState, useEffect } from 'react' import { Tabs, Card, Button, Space, Tag, Table, Descriptions, Statistic, Row, Col, Form, Input, DatePicker, message, Timeline, Typography, Alert, Result, } from 'antd' import { api } from './api.js' const { Text, Paragraph } = Typography const yuan = (cent) => '¥' + (cent / 100).toFixed(2) const nodeLabel = { cp_submit: 'CP送审', csps_review: 'CSPS审核', ma_issue: '发码签发', transcode: '转码', media_ingest: '媒资入库', cdn_inject: 'CDN注入', } // 分账面板 function SettlementPanel({ ccCode }) { const [sum, setSum] = useState(null) const [st, setSt] = useState(null) async function load() { const s = await api.playbackSummary(ccCode) setSum(s.data?.data) const r = await api.settlement(ccCode, '2026-06') if (r.ok) setSt(r.data.data) } useEffect(() => { load() }, [ccCode]) if (!sum) return null return (
{st ? ( {yuan(st.total_revenue_cent)} {st.period} {yuan(st.cp_share_cent)} {yuan(st.platform_share_cent)} {yuan(st.hub_fee_cent)} {st.data_source} ) : }
) } // 追责取证面板 function AccountabilityPanel({ ccCode }) { const [rep, setRep] = useState(null) useEffect(() => { api.accountability(ccCode).then((r) => setRep(r.data?.data)) }, [ccCode]) if (!rep) return null return (
{rep.consistent ? : } ({ color: rep.first_change && e.node === rep.first_change.node && e.hash_value === rep.first_change.hash_value ? 'red' : 'green', children: ( {nodeLabel[e.node] || e.node}{e.operator} {e.detail} {e.hash_value ? '· hash=' + e.hash_value : ''} ), }))} />
) } // 确权举证面板 function EvidencePanel({ ccCode }) { const [ev, setEv] = useState(null) useEffect(() => { api.evidence(ccCode).then((r) => setEv(r.data?.data)) }, [ccCode]) if (!ev) return null return ( {ev.title} {ev.ma_code} {ev.content_hash || '-'} {ev.issuer} {ev.chain_anchor} {ev.first_seen_at} ) } // 授权管理面板 function AuthPanel({ ccCode }) { const [form] = Form.useForm() const [checkResult, setCheckResult] = useState(null) async function grant() { const v = await form.validateFields() const regions = v.regions ? v.regions.split(',').map((s) => s.trim()).filter(Boolean) : [] const platforms = v.platforms ? v.platforms.split(',').map((s) => s.trim()).filter(Boolean) : [] const expiry = v.expiry ? v.expiry.toISOString() : '' const res = await api.authorize(ccCode, regions, platforms, expiry) if (res.ok) message.success('授权已登记') else message.error(res.data.message) } async function check() { const v = form.getFieldsValue() const res = await api.authCheck(ccCode, v.checkRegion || '', v.checkPlatform || '') setCheckResult(res.data?.data) } return (
{checkResult && ( )}
) } export default function GovernancePanel({ ccCode }) { return ( }, { key: 'account', label: '⚖️ 追责取证', children: }, { key: 'evidence', label: '📜 确权举证', children: }, { key: 'auth', label: '🔑 授权管理', children: }, ]} /> ) }