import { useMemo, useState } from 'react'; import { ChevronDown, ChevronLeft, ChevronRight, Edit3, FileText, Info, Plus, Search, Trash2, Upload } from 'lucide-react'; import { Breadcrumb, Button, Input, Modal, Select, Table, Tabs, Tag, Textarea, type TableColumn } from '@/components/ui'; type CarrierStatus = 'approved' | 'pending' | 'rejected' | 'filing'; type SignatureKind = 'sms' | 'mms'; type DrainageInfo = { id: string; siteName: string; url: string; mobile: CarrierStatus; unicom: CarrierStatus; telecom: CarrierStatus; submittedAt: string; remark: string; }; type SignatureItem = { id: string; name: string; enterprise: string; application: string; mobile: CarrierStatus; unicom: CarrierStatus; telecom: CarrierStatus; drainage?: DrainageInfo[]; updatedAt: string; }; const statusLabelMap: Record = { approved: '已通过', pending: '审核中', rejected: '已驳回', filing: '待报备', }; const statusToneMap: Record = { approved: 'success', pending: 'info', rejected: 'danger', filing: 'neutral', }; const statusOptions = [ { label: '已通过', value: 'approved' }, { label: '审核中', value: 'pending' }, { label: '已驳回', value: 'rejected' }, { label: '待报备', value: 'filing' }, ]; const initialSmsSignatures: SignatureItem[] = [ { id: 'sig-1', name: '【科技公司】', enterprise: '上海XXXXX科技有限公司', application: '营销推广平台', mobile: 'approved', unicom: 'approved', telecom: 'approved', updatedAt: '2026-01-08 11:00:00', drainage: [ { id: 'drain-1', siteName: '官网入口', url: 'https://www.example.com', mobile: 'approved', unicom: 'approved', telecom: 'approved', submittedAt: '2026-01-08 11:00:00', remark: '官网首页引流链接,三网报备通过。' }, { id: 'drain-2', siteName: '促销活动页', url: 'https://sale.example.com', mobile: 'approved', unicom: 'pending', telecom: 'pending', submittedAt: '2026-01-09 10:30:00', remark: '活动页待联通、电信回执。' }, ], }, { id: 'sig-2', name: '【客户服务】', enterprise: '重庆进载数智', application: '客户服务系统', mobile: 'approved', unicom: 'pending', telecom: 'approved', updatedAt: '2026-01-09 14:20:00', drainage: [ { id: 'drain-3', siteName: '客户服务中心', url: 'https://service.example.com', mobile: 'approved', unicom: 'filing', telecom: 'pending', submittedAt: '2026-01-09 14:20:00', remark: '服务入口链接报备中。' }, ], }, { id: 'sig-3', name: '【促销活动】', enterprise: '超感世纪互三网', application: '营销推广平台', mobile: 'rejected', unicom: 'approved', telecom: 'pending', updatedAt: '2026-01-07 10:00:00', drainage: [ { id: 'drain-4', siteName: '促销专区', url: 'https://sale.example.com', mobile: 'rejected', unicom: 'approved', telecom: 'approved', submittedAt: '2026-01-07 10:00:00', remark: '移动侧驳回,需补充页面备案信息。' }, ], }, ]; const initialMmsSignatures: SignatureItem[] = [ { id: 'mms-sig-1', name: '【活动推广】', enterprise: '上海XXXXX科技有限公司', application: '营销活动彩信', mobile: 'approved', unicom: 'approved', telecom: 'approved', updatedAt: '2026-01-12 09:10:00' }, { id: 'mms-sig-2', name: '【节日祝福】', enterprise: '重庆进载数智', application: '节日祝福彩信', mobile: 'approved', unicom: 'pending', telecom: 'approved', updatedAt: '2026-01-13 16:35:00' }, { id: 'mms-sig-3', name: '【优品发布】', enterprise: '四川骠骑企业管理', application: '营销活动彩信', mobile: 'pending', unicom: 'pending', telecom: 'pending', updatedAt: '2026-01-15 10:28:00' }, ]; function StatusTag({ status }: { status: CarrierStatus }) { return {statusLabelMap[status]}; } function paginate(items: T[], page: number, pageSize: number) { return items.slice((page - 1) * pageSize, page * pageSize); } function Pagination({ page, pageSize, total, onPageChange }: { page: number; pageSize: number; total: number; onPageChange: (page: number) => void }) { const totalPages = Math.max(1, Math.ceil(total / pageSize)); return (
{pageSize}条/页 / {totalPages}
); } function ConfirmModal({ message, onCancel, onConfirm }: { message: string; onCancel: () => void; onConfirm: () => void }) { return ( )} onClose={onCancel} open title="删除确认" >

{message}

); } function SignatureUploadBox({ label, compact = false }: { label: string; compact?: boolean }) { return (
{label} {compact ? '上传文件' : '点击上传 或拖拽文件到此处'} {!compact ? 支持 PNG、JPG、JPEG 格式,大小不超过 3M : null}
); } function SignatureFormModal({ item, kind, onClose, onSubmit, }: { item?: SignatureItem; kind: SignatureKind; onClose: () => void; onSubmit: (item: SignatureItem) => void; }) { const [name, setName] = useState(item?.name ?? ''); const [enterprise, setEnterprise] = useState(item?.enterprise ?? ''); const [application, setApplication] = useState(item?.application ?? ''); const [mobile, setMobile] = useState(item?.mobile ?? 'filing'); const [unicom, setUnicom] = useState(item?.unicom ?? 'filing'); const [telecom, setTelecom] = useState(item?.telecom ?? 'filing'); function submit() { onSubmit({ id: item?.id ?? `${kind}-sig-${Date.now()}`, name, enterprise, application, mobile, unicom, telecom, drainage: kind === 'sms' ? (item?.drainage ?? []) : undefined, updatedAt: '2026-06-30 10:00:00', }); } return ( )} onClose={onClose} open size="xl" title={(

{item ? '编辑签名' : '添加签名'}

{item ? '修改短信签名的相关信息' : '新增短信签名的相关信息'}

)} >

基本信息

签名需履行报备,并遵照管理部门审核结果方可使用。请用 PNG、JPG 或 JPEG 格式的正版文件,且大小不超过 3M。
setName(event.target.value)} placeholder="请输入短信签名,如【XXXX公司】" value={name} />

公司信息

setEnterprise(event.target.value)} placeholder="请输入公司名称" value={enterprise} />

责任人信息

setApplication(event.target.value)} placeholder="请输入应用名称" value={application} />

三网报备状态

setUnicom(event.target.value as CarrierStatus)} options={statusOptions} value={unicom} /> update('url', event.target.value)} placeholder="请输入引流网址" value={form.url} />
  1. 本页面中所填的信息需与短信内容应用所包含的网站或服务保持一致;
  2. 图片仅支持 PNG、JPG 或 JPEG 格式的正版文件,且大小不超过 3M;
  3. 文件格式支持 pdf 格式或者图片,且大小不超过 10M。
update('siteName', event.target.value)} placeholder="请输入公司名称" value={form.siteName} />
字段名称7:
未选择文件
update('unicom', event.target.value as CarrierStatus)} options={statusOptions} value={form.unicom} /> update('submittedAt', event.target.value)} value={form.submittedAt} />