gcx/docs/guides/03-Web管理前端开发指南.md

27 KiB
Raw Permalink Blame History

Genex Web 管理前端开发指南

平台管理后台Admin Dashboard — React + TypeScript + Next.js


1. 技术栈

技术 版本 用途
React 18.x UI框架
TypeScript 5.x 类型安全
Next.js 14.x SSR/SSG + App Router
Zustand 4.x 轻量状态管理UI状态
Redux Toolkit 2.x 复杂业务状态(交易、审核流程)
RTK Query 内置 API数据获取与缓存
Ant Design 5.x 企业级UI组件库
ECharts / Recharts 最新 数据可视化
TanStack Table 8.x 高性能数据表格
React Hook Form 7.x 表单管理
Zod 3.x 运行时类型校验

2. 项目结构

genex-admin/
├── src/
│   ├── app/                          # Next.js App Router
│   │   ├── layout.tsx                # 根布局
│   │   ├── page.tsx                  # Dashboard首页
│   │   ├── (auth)/                   # 认证路由组
│   │   │   ├── login/page.tsx
│   │   │   └── layout.tsx
│   │   ├── (dashboard)/              # 管理面板路由组
│   │   │   ├── layout.tsx            # 侧边栏+顶栏布局
│   │   │   ├── users/                # 用户管理
│   │   │   ├── issuers/              # 发行方管理
│   │   │   ├── coupons/              # 券管理
│   │   │   ├── trading/              # 交易监控
│   │   │   ├── compliance/           # 合规管理
│   │   │   ├── risk/                 # 风控中心
│   │   │   ├── finance/              # 财务管理
│   │   │   ├── chain/                # 链上监控
│   │   │   └── system/               # 系统管理
│   ├── components/
│   │   ├── ui/                       # 基础UI组件
│   │   ├── business/                 # 业务组件
│   │   └── ai-agent/                 # AI Agent组件
│   ├── features/                     # 功能模块Redux slices
│   │   ├── auth/
│   │   ├── users/
│   │   ├── issuers/
│   │   ├── coupons/
│   │   ├── trading/
│   │   ├── compliance/
│   │   └── risk/
│   ├── services/                     # API服务层
│   │   ├── api.ts                    # RTK Query base API
│   │   └── endpoints/                # 按模块分的API端点
│   ├── stores/                       # Zustand stores
│   │   ├── ui-store.ts               # UI状态侧边栏、主题
│   │   └── ai-agent-store.ts         # AI Agent状态
│   ├── hooks/                        # 自定义Hooks
│   ├── lib/                          # 工具函数
│   │   ├── constants.ts
│   │   ├── utils.ts
│   │   └── types.ts
│   └── styles/                       # 全局样式
├── public/
├── tests/
├── next.config.js
├── tailwind.config.ts
└── package.json

3. 状态管理策略

Zustand vs Redux Toolkit 分工

类型 工具 场景
UI状态 Zustand 侧边栏折叠、主题切换、弹窗控制
服务端数据 RTK Query API数据获取、缓存、自动刷新
复杂业务流 Redux Toolkit 审核流程、交易状态机、多步骤表单
AI Agent Zustand 对话历史、Agent面板状态

3.1 RTK Query API定义

// src/services/api.ts
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';

export const api = createApi({
  baseQuery: fetchBaseQuery({
    baseUrl: '/api/v1',
    prepareHeaders: (headers) => {
      const token = getToken();
      if (token) headers.set('Authorization', `Bearer ${token}`);
      return headers;
    },
  }),
  tagTypes: ['Users', 'Issuers', 'Coupons', 'Orders', 'Compliance'],
  endpoints: () => ({}),
});
// src/services/endpoints/issuers.ts
export const issuerApi = api.injectEndpoints({
  endpoints: (builder) => ({
    getIssuers: builder.query<PaginatedResult<Issuer>, IssuerQuery>({
      query: (params) => ({ url: '/issuers', params }),
      providesTags: ['Issuers'],
    }),
    approveIssuer: builder.mutation<void, { id: string; decision: 'approve' | 'reject' }>({
      query: ({ id, ...body }) => ({
        url: `/issuers/${id}/review`,
        method: 'POST',
        body,
      }),
      invalidatesTags: ['Issuers'],
    }),
  }),
});

3.2 Zustand UI Store

// src/stores/ui-store.ts
import { create } from 'zustand';

interface UiState {
  sidebarCollapsed: boolean;
  theme: 'light' | 'dark';
  toggleSidebar: () => void;
  setTheme: (theme: 'light' | 'dark') => void;
}

export const useUiStore = create<UiState>((set) => ({
  sidebarCollapsed: false,
  theme: 'light',
  toggleSidebar: () => set((s) => ({ sidebarCollapsed: !s.sidebarCollapsed })),
  setTheme: (theme) => set({ theme }),
}));

4. 核心页面模块

4.1 Dashboard 首页

  • 关键指标卡片:日交易量、活跃用户、新发行方、待审核数
  • 交易量趋势图ECharts线图
  • 异常交易告警列表
  • AI洞察面板

4.2 用户管理

  • 用户列表TanStack Table支持搜索/排序/分页)
  • KYC审核详情
  • 用户资产查看(我的券、余额、交易记录)
  • 风控标记用户处理

4.3 发行方管理

// 发行方审核流程
interface IssuerReview {
  issuerId: string;
  companyName: string;
  businessLicense: string;
  documents: Document[];
  creditRating: CreditRating;
  aiRiskScore: number;          // AI预审风险分
  aiRiskFlags: string[];        // AI标记的风险点
  reviewStatus: 'pending' | 'approved' | 'rejected';
}
功能 说明
入驻审核 AI预审+人工复核,标记风险点
信用管理 查看/调整信用评级,额度管理
发行监控 发行量、兑付率、Breakage率监控
违约处理 降级、冻结发行、账户冻结

4.4 交易监控

  • 实时交易流WebSocket推送
  • 订单簿深度图
  • 异常交易检测告警
  • 做市商活动监控

4.5 合规管理

interface ComplianceCase {
  id: string;
  type: 'KYC' | 'AML' | 'OFAC' | 'TravelRule';
  severity: 'low' | 'medium' | 'high' | 'critical';
  status: 'open' | 'investigating' | 'resolved' | 'escalated';
  aiAnalysis: string;           // AI合规分析
  suggestedAction: string;      // AI建议操作
}

4.6 风控中心

  • 风控仪表盘(实时风险指标)
  • 异常交易图谱(关联分析可视化)
  • 自动冻结记录
  • SAR可疑交易报告管理

4.7 系统管理

页面 功能
管理员账号 管理员列表、RBAC角色权限、操作日志
系统配置 手续费率、KYC阈值、交易限额
合约管理 合约部署状态、升级提案、升级日志
系统监控 服务健康、API响应时间、Genex Chain节点状态

5. AI Agent 集成

5.1 管理端AI Agent功能

场景 AI能力 UI实现
风险预警 实时检测异常交易模式 仪表盘AI警告卡片+处理建议
审核辅助 AI预审发行方资料标记风险点 审核页面AI评分+风险标签
合规报告 自动生成SAR/CTR/监管报表草稿 合规报表页AI生成按钮
运营洞察 分析运营数据,提出优化建议 Dashboard AI洞察面板
智能搜索 自然语言查询用户/订单/交易 全局搜索框支持NL查询
决策支持 手续费率调整建议、额度配置建议 系统配置页AI建议标签

5.2 AI Agent侧边面板

// src/components/ai-agent/AgentPanel.tsx
export function AgentPanel() {
  const { messages, sendMessage, isStreaming } = useAgentChat();

  return (
    <Drawer title="AI助手" placement="right" width={400}>
      <ChatMessageList messages={messages} />
      {isStreaming && <StreamingIndicator />}
      <ChatInput onSend={sendMessage} placeholder="描述你要查询或分析的内容..." />
    </Drawer>
  );
}

6. 权限管理RBAC

// 角色定义
enum AdminRole {
  SuperAdmin = 'super_admin',     // 超级管理员:全部权限
  OperationAdmin = 'ops_admin',   // 运营管理员:用户+发行方+券管理
  ComplianceOfficer = 'compliance', // 合规官:合规+风控
  FinanceAdmin = 'finance_admin', // 财务管理员:财务+结算
  Viewer = 'viewer',              // 只读仅查看Dashboard
}

// 路由守卫
function AuthGuard({ children, requiredRole }: GuardProps) {
  const { user } = useAuth();
  if (!hasPermission(user.role, requiredRole)) {
    return <ForbiddenPage />;
  }
  return children;
}

7. 实时数据

// WebSocket连接管理
class AdminWebSocket {
  private ws: WebSocket;

  connect() {
    this.ws = new WebSocket('wss://api.gogenex.com/admin/ws');
    this.ws.onmessage = (event) => {
      const data = JSON.parse(event.data);
      switch (data.type) {
        case 'trade_alert':
          store.dispatch(addTradeAlert(data.payload));
          break;
        case 'risk_warning':
          store.dispatch(addRiskWarning(data.payload));
          break;
        case 'chain_event':
          store.dispatch(updateChainStatus(data.payload));
          break;
      }
    };
  }
}

8. 测试策略

类型 工具 覆盖
单元测试 Vitest Redux slices、工具函数、Hooks
组件测试 React Testing Library 关键表单、表格、弹窗
E2E测试 Playwright 审核流程、配置变更、报表导出

9. 部署

# Next.js部署配置
# Docker + Kubernetes
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./
RUN npm ci --production
EXPOSE 3000
CMD ["npm", "start"]

10. 数据报表与分析

10.1 平台数据报表

// src/features/reports/types.ts
interface PlatformReport {
  type: 'daily' | 'monthly' | 'quarterly';
  metrics: {
    totalTransactionVolume: number;
    totalTransactionAmount: number;
    activeUsers: number;
    newIssuers: number;
    avgDiscountRate: number;
    platformRevenue: number; // 手续费收入
    breakageRevenue: number;
  };
}

10.2 用户行为分析

// src/features/analytics/user-analytics.ts
interface UserBehaviorAnalytics {
  registrationFunnel: FunnelData;      // 注册→KYC→首次交易转化率
  retentionRate: RetentionData;        // 留存率(日/周/月)
  activeUserTrend: TimeSeriesData;     // DAU/WAU/MAU
  tradingPatterns: TradingPatternData; // 交易行为模式
  kycLevelDistribution: PieData;       // KYC等级分布
  walletModeDistribution: PieData;     // 标准/Pro模式占比
}

10.3 券类别分析

// src/features/analytics/coupon-analytics.ts
interface CouponCategoryAnalytics {
  byIndustry: CategoryBreakdown[];    // 按行业(餐饮/购物/娱乐)
  byTemplate: CategoryBreakdown[];    // 按模板(满减/折扣/礼品卡/储值)
  byIssuerTier: CategoryBreakdown[];  // 按发行方层级
  redemptionByCategory: BarData;      // 各品类兑付率
  breakageByCategory: BarData;        // 各品类Breakage率
  priceDistribution: HistogramData;   // 价格分布
}

11. 税务合规报表

11.1 IRS 1099报表管理

// src/features/compliance/tax-reports.ts
interface Tax1099Management {
  // IRS Form 1099-DA/1099-B 生成与管理
  generateBatch: (taxYear: number) => Promise<Tax1099Report[]>;
  reviewReport: (reportId: string) => Promise<Tax1099Report>;
  submitToIRS: (reportIds: string[]) => Promise<SubmissionResult>;
  userPortalExport: (userId: string, taxYear: number) => Promise<TaxDocument>;
}

// 1099报表页面
export function Tax1099Page() {
  const [taxYear, setTaxYear] = useState(2025);
  const reports = useQuery(['tax1099', taxYear], () => taxApi.getReports(taxYear));

  return (
    <div>
      <YearSelector value={taxYear} onChange={setTaxYear} />
      <StatsCards>
        <Card title="需生成1099" value={reports.pendingCount} />
        <Card title="已生成" value={reports.generatedCount} />
        <Card title="已提交IRS" value={reports.submittedCount} />
      </StatsCards>
      <Button onClick={() => taxApi.generateBatch(taxYear)}>批量生成1099</Button>
      <TanStackTable data={reports.data} columns={tax1099Columns} />
    </div>
  );
}

11.2 FATCA跨境税务

interface FatcaReport {
  foreignAccountHolders: ForeignUser[];
  totalUsSourceIncome: number;
  reportingStatus: 'pending' | 'submitted';
}

12. 消费者保护与虚假宣传监控

// src/features/compliance/consumer-protection.ts
interface ConsumerProtectionCase {
  id: string;
  type: 'misleading_description' | 'false_advertising' | 'undisclosed_conditions';
  couponId: string;
  issuerId: string;
  reportedBy: 'user' | 'ai_scan' | 'admin';
  evidence: {
    couponDescription: string;        // 券描述
    actualRedemptionInfo: string;     // 实际兑付情况
    discrepancy: string;              // 差异说明
  };
  status: 'reported' | 'investigating' | 'confirmed' | 'dismissed';
  action: 'warning' | 'delist' | 'suspend_issuer' | 'none';
}

// AI扫描券描述一致性
export function FalseAdvertisingMonitor() {
  return (
    <div>
      <h3>虚假宣传监控</h3>
      {/* AI自动扫描所有上架券的描述 vs 实际兑付记录 */}
      <AlertList alerts={consumerProtectionAlerts} />
      {/* 手动审查队列 */}
      <CaseQueue cases={pendingCases} onResolve={handleResolve} />
    </div>
  );
}

13. SOX审计模块

// src/features/compliance/sox-audit.ts
interface SoxAuditDashboard {
  // Section 302: CEO/CFO认证追踪
  certifications: CertificationRecord[];
  // Section 404: 内部控制评估
  internalControls: InternalControlAssessment[];
  // 智能合约升级审计追踪
  contractUpgradeAudit: ContractUpgradeLog[];
  // 链上记录与GAAP对账
  chainToGaapReconciliation: ReconciliationReport;
}

interface ContractUpgradeLog {
  proposalId: string;
  contractName: string;
  oldImplementation: string;
  newImplementation: string;
  proposedBy: string;
  approvedBy: string[];           // 多签审批人
  timelockExpiry: Date;
  executedAt: Date;
  auditReport: string;           // 第三方审计报告链接
}

// SOX审计页面
export function SoxAuditPage() {
  return (
    <Tabs>
      <Tab label="内部控制">
        <InternalControlMatrix />
      </Tab>
      <Tab label="合约升级日志">
        <ContractUpgradeAuditTrail />
      </Tab>
      <Tab label="链上对账">
        <ChainGaapReconciliation />
      </Tab>
      <Tab label="操作审计日志">
        <AuditLogViewer />  {/* 全链路操作日志append-only */}
      </Tab>
    </Tabs>
  );
}

14. 财务管理

14.1 手续费管理

// src/features/finance/fee-management.ts
interface FeeConfiguration {
  tradingFees: {
    takerBuy: number;    // 0.5%
    takerSell: number;
    makerBuy: number;    // 0.1%
    makerSell: number;
  };
  issuanceFees: Record<IssuerTier, number>;
  breakageSharePercent: number; // 平台Breakage分润比例
}

// 手续费收入仪表盘
export function FeeRevenueDashboard() {
  return (
    <div>
      <RevenueCards>
        <Card title="交易手续费" value={tradingFeeRevenue} />
        <Card title="发行服务费" value={issuanceFeeRevenue} />
        <Card title="Breakage分润" value={breakageRevenue} />
        <Card title="增值服务" value={vasRevenue} />
      </RevenueCards>
      <RevenueChart data={revenueTimeSeries} />
    </div>
  );
}

14.2 结算管理

// 发行方结算管理
interface SettlementManagement {
  pendingSettlements: SettlementBatch[];
  completedSettlements: SettlementBatch[];
  issuerBalances: IssuerBalance[];
  withdrawalRequests: WithdrawalRequest[];
}

15. 争议与仲裁处理

// src/features/disputes/types.ts
interface DisputeCase {
  id: string;
  type: 'buyer_complaint' | 'seller_complaint' | 'refund_request';
  status: 'submitted' | 'evidence_collection' | 'arbitration' | 'resolved' | 'escalated';
  orderId: string;
  buyerId: string;
  sellerId: string;
  chainEvidence: {
    txHash: string;
    blockNumber: number;
    timestamp: Date;
    transferRecord: string;
  };
  sla: {
    responseDeadline: Date;    // 24h响应
    resolutionDeadline: Date;  // 72h处理
  };
  arbitrationDecision?: {
    decidedBy: string;
    decision: 'refund' | 'reject' | 'partial_refund';
    reason: string;
  };
}

// 争议处理页面
export function DisputeManagementPage() {
  return (
    <div>
      <SlaOverview />
      <DisputeList
        columns={[
          { key: 'id', title: '工单号' },
          { key: 'type', title: '类型' },
          { key: 'status', title: '状态' },
          { key: 'sla', title: 'SLA倒计时', render: (sla) => <SlaCountdown deadline={sla.resolutionDeadline} /> },
          { key: 'actions', title: '操作', render: (_, row) => <ArbitrationActions dispute={row} /> },
        ]}
      />
    </div>
  );
}

16. Web商户核销后台

// src/app/(dashboard)/merchant-redemption/page.tsx
// 门店管理员通过浏览器核销+查看核销记录
export default function MerchantRedemptionPage() {
  return (
    <div>
      <h2>Web端核销后台</h2>

      {/* 输码核销 */}
      <Card title="核销券">
        <Input placeholder="输入券码" />
        <Button type="primary">查询并核销</Button>
      </Card>

      {/* 核销记录 */}
      <Card title="核销记录">
        <DateRangePicker />
        <TanStackTable
          data={redemptionRecords}
          columns={[
            { key: 'couponCode', title: '券码' },
            { key: 'couponName', title: '券名' },
            { key: 'faceValue', title: '面值' },
            { key: 'operator', title: '核销员' },
            { key: 'store', title: '门店' },
            { key: 'time', title: '核销时间' },
            { key: 'status', title: '状态' },
          ]}
        />
      </Card>

      {/* 门店数据汇总 */}
      <StoreRedemptionStats />
    </div>
  );
}

17. 做市商管理

// src/features/trading/market-maker-management.ts
interface MarketMakerManagement {
  marketMakers: MarketMaker[];
  obligations: MarketMakerObligation[];
  performanceMetrics: MmPerformanceMetric[];
  violationAlerts: MmViolation[];
}

// 做市商活动监控页面
export function MarketMakerMonitorPage() {
  return (
    <div>
      <h3>做市商监控</h3>
      <MmPerformanceTable data={marketMakers} />
      {/* Spoofing/Layering检测告警 */}
      <ManipulationAlerts alerts={spoofingAlerts} />
      {/* 做市义务合规检查 */}
      <ObligationComplianceCheck />
    </div>
  );
}

18. Nasdaq上市合规管理

18.1 SEC Filing管理

// src/features/compliance/sec-filing.ts
interface SecFiling {
  type: '10-K' | '10-Q' | '8-K' | 'S-1' | 'Form ATS' | 'Form ATS-N';
  status: 'drafting' | 'internal_review' | 'legal_review' | 'filed' | 'accepted';
  period?: string;            // 报告期间(如 "FY2027", "Q1 2027"
  dueDate: Date;
  filedDate?: Date;
  preparedBy: string;
  reviewedBy: string[];
  secEdgarLink?: string;       // SEC EDGAR提交链接
  attachments: FilingAttachment[];
}

interface FilingSchedule {
  annual: { type: '10-K', deadline: '年度结束后60天加速申报人' };
  quarterly: { type: '10-Q', deadline: '季度结束后40天' };
  materialEvent: { type: '8-K', deadline: '事件发生后4个工作日' };
}

// SEC Filing管理页面
export function SecFilingManagementPage() {
  return (
    <div>
      <h2>SEC Filing管理</h2>

      {/* Filing日历 */}
      <Card title="申报日历">
        <FilingCalendar
          filings={upcomingFilings}
          onSelect={(filing) => openFilingDetail(filing)}
        />
      </Card>

      {/* 10-K/10-Q编制追踪 */}
      <Card title="定期报告">
        <TanStackTable
          data={periodicFilings}
          columns={[
            { key: 'type', title: '类型' },
            { key: 'period', title: '报告期' },
            { key: 'status', title: '状态', render: (s) => <FilingStatusBadge status={s} /> },
            { key: 'dueDate', title: '截止日期', render: (d) => <DueDateCountdown date={d} /> },
            { key: 'preparedBy', title: '编制人' },
            { key: 'actions', title: '操作', render: (_, row) => (
              <>
                <Button onClick={() => openDraft(row)}>编辑</Button>
                <Button onClick={() => submitForReview(row)}>提交审核</Button>
              </>
            )},
          ]}
        />
      </Card>

      {/* 8-K重大事件快速申报 */}
      <Card title="8-K重大事件">
        <Button type="primary" onClick={create8K}>新建8-K申报</Button>
        <EventList events={materialEvents} />
      </Card>
    </div>
  );
}

18.2 牌照与注册管理

// src/features/compliance/license-management.ts
interface LicenseRecord {
  type: 'MSB' | 'MTL' | 'BitLicense' | 'DFAL' | 'Broker-Dealer' | 'Form ATS';
  jurisdiction: string;       // 联邦 / 州名
  regulatoryBody: string;     // FinCEN / NYDFS / SEC等
  status: 'active' | 'pending' | 'expired' | 'not_applied';
  obtainedDate?: Date;
  expiryDate?: Date;
  renewalDate?: Date;
  applicationRef?: string;
  notes: string;
}

// 牌照看板
export function LicenseDashboardPage() {
  return (
    <div>
      <h2>牌照与注册状态</h2>

      {/* 联邦级牌照 */}
      <Card title="联邦级">
        <LicenseStatusCard license={msbLicense} icon="federal" />
      </Card>

      {/* 州级MTL地图 */}
      <Card title="州级MTL覆盖">
        <UsStateMap
          data={stateLicenses}
          colorScale={{
            active: 'green',
            pending: 'yellow',
            not_applied: 'gray',
            restricted: 'red',
          }}
          onClick={(state) => openStateDetail(state)}
        />
        <StateLicenseTable data={stateLicenses} />
      </Card>

      {/* 到期提醒 */}
      <Card title="续期提醒">
        <RenewalAlertList licenses={expiringLicenses} />
      </Card>
    </div>
  );
}

18.3 商业保险管理

// src/features/compliance/insurance-management.ts
interface InsurancePolicy {
  type: 'D&O' | 'E&O' | 'CYBER' | 'FIDELITY' | 'GL';
  name: string;
  carrier: string;
  policyNumber: string;
  coverageAmount: number;
  annualPremium: number;
  effectiveDate: Date;
  expiryDate: Date;
  status: 'active' | 'expiring_soon' | 'expired' | 'not_purchased';
  isAdequate: boolean;        // 覆盖额度是否满足要求
}

// 保险管理页面
export function InsuranceManagementPage() {
  return (
    <div>
      <h2>商业保险管理</h2>

      {/* 保险概览卡片 */}
      <Row gutter={16}>
        {insurancePolicies.map(policy => (
          <Col span={8} key={policy.type}>
            <InsurancePolicyCard
              policy={policy}
              required={requiredPolicies[policy.type]}
            />
          </Col>
        ))}
      </Row>

      {/* 保险充足性分析 */}
      <Card title="覆盖充足性">
        <CoverageAdequacyChart
          policies={insurancePolicies}
          benchmarks={industryBenchmarks}
        />
      </Card>

      {/* 到期/续期日历 */}
      <Card title="续期日历">
        <InsuranceRenewalCalendar policies={insurancePolicies} />
      </Card>
    </div>
  );
}

18.4 IPO准备清单

// src/features/compliance/ipo-readiness.ts
interface IpoChecklistItem {
  category: 'legal' | 'financial' | 'compliance' | 'governance' | 'insurance' | 'technical';
  item: string;
  status: 'completed' | 'in_progress' | 'not_started' | 'blocked';
  owner: string;
  targetDate: Date;
  dependencies: string[];
  notes: string;
}

// IPO准备看板
export function IpoReadinessPage() {
  const categories = [
    {
      name: '法律与牌照',
      items: [
        { item: 'MSB注册FinCEN Form 107', status: 'completed' },
        { item: '州级MTL49州+DC', status: 'in_progress' },
        { item: 'NY BitLicense', status: 'in_progress' },
        { item: '券法律属性意见书', status: 'not_started' },
        { item: 'GNX代币法律分类', status: 'not_started' },
      ],
    },
    {
      name: '财务与审计',
      items: [
        { item: '聘请PCAOB注册审计师', status: 'not_started' },
        { item: '2年+经审计GAAP财报', status: 'not_started' },
        { item: 'FASB ASU 2023-08数字资产会计', status: 'not_started' },
        { item: 'ASC 606收入确认Breakage/递延负债)', status: 'in_progress' },
        { item: '链上数据与GAAP对账机制', status: 'in_progress' },
      ],
    },
    {
      name: 'SOX合规',
      items: [
        { item: 'Section 302 CEO/CFO认证流程', status: 'in_progress' },
        { item: 'Section 404(a) 内部控制评估', status: 'not_started' },
        { item: 'Section 404(b) 外部审计师审计', status: 'not_started' },
        { item: '智能合约升级审计追踪', status: 'completed' },
      ],
    },
    {
      name: '公司治理',
      items: [
        { item: '独立董事(多数席位)', status: 'not_started' },
        { item: '审计委员会(全部独立董事)', status: 'not_started' },
        { item: '薪酬委员会', status: 'not_started' },
        { item: 'SEC注册声明Form S-1', status: 'not_started' },
      ],
    },
    {
      name: '商业保险',
      items: [
        { item: 'D&O保险匹配市值', status: 'not_started' },
        { item: 'E&O专业责任险', status: 'not_started' },
        { item: '网络安全险(覆盖数字资产托管)', status: 'not_started' },
        { item: '忠诚保证金', status: 'not_started' },
      ],
    },
  ];

  return (
    <div>
      <h2>IPO准备清单</h2>
      <OverallProgress categories={categories} />
      {categories.map(cat => (
        <Card key={cat.name} title={cat.name}>
          <ChecklistTable items={cat.items} />
        </Card>
      ))}
      <TimelineGantt categories={categories} ipoTargetDate={ipoTarget} />
    </div>
  );
}

文档版本: v2.1 基于: Genex 券交易平台 - 软件需求规格说明书 v4.1 技术栈: React 18 + TypeScript 5 + Next.js 14 + Zustand + Redux Toolkit 更新: v2.1补充Nasdaq上市合规管理SEC Filing/牌照管理/商业保险/IPO准备清单