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 (
)
}
export default function GovernancePanel({ ccCode }) {
return (
},
{ key: 'account', label: '⚖️ 追责取证', children: },
{ key: 'evidence', label: '📜 确权举证', children: },
{ key: 'auth', label: '🔑 授权管理', children: },
]} />
)
}