import React, { useState } from 'react'; import { mockApps, mockCoupons } from '@/mock/data'; import type { MarketApp, Coupon } from '@/types'; const SVGIcon: React.FC<{ children: React.ReactNode; size?: number }> = ({ children, size = 16 }) => ( {children} ); const Market: React.FC = () => { const [apps, setApps] = useState(mockApps); const [coupons, setCoupons] = useState(mockCoupons); const [activeTab, setActiveTab] = useState<'review' | 'coupon' | 'official'>('review'); const [showCouponModal, setShowCouponModal] = useState(false); const [couponForm, setCouponForm] = useState({ code: '', type: 'fixed' as 'fixed' | 'percent', value: 0, minAmount: 0, validFrom: '', validTo: '', }); const pendingApps = apps.filter(a => a.status === 'pending'); const publishedOfficialApps = apps.filter(a => a.source === 'official' && a.status !== 'removed'); const handleApprove = (id: string) => { setApps(prev => prev.map(a => a.id === id ? { ...a, status: 'published' as const } : a)); }; const handleReject = (id: string) => { setApps(prev => prev.map(a => a.id === id ? { ...a, status: 'removed' as const } : a)); }; const handleToggleOfficial = (id: string) => { setApps(prev => prev.map(a => { if (a.id === id) { const newStatus: MarketApp['status'] = a.status === 'published' ? 'removed' : 'published'; return { ...a, status: newStatus }; } return a; })); }; const handleCreateCoupon = () => { if (!couponForm.code.trim() || !couponForm.validFrom || !couponForm.validTo) return; setCoupons(prev => [...prev, { id: 'cp' + Date.now(), ...couponForm, status: 'active', }]); setShowCouponModal(false); setCouponForm({ code: '', type: 'fixed', value: 0, minAmount: 0, validFrom: '', validTo: '' }); }; const handleDeleteCoupon = (id: string) => { setCoupons(prev => prev.filter(c => c.id !== id)); }; const formatDate = (d: string) => { const dt = new Date(d); return dt.toLocaleDateString('zh-CN', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit' }); }; const tabs = [ { key: 'review' as const, label: '待审核应用', count: pendingApps.length }, { key: 'coupon' as const, label: '优惠券管理', count: coupons.length }, { key: 'official' as const, label: '官方应用管理', count: publishedOfficialApps.length }, ]; return (

应用市场审核管理

{/* Tabs */}
{tabs.map(tab => ( ))}
{/* Pending Review Tab */} {activeTab === 'review' && (

待审核应用

{pendingApps.map(app => ( ))} {pendingApps.length === 0 && ( )}
应用名 类型 发布者 价格 状态 发布时间 操作
{app.name} {app.type.toUpperCase()} {app.publisherName} {app.price} 元 待审核 {formatDate(app.createdAt)}
暂无待审核应用
)} {/* Coupon Management Tab */} {activeTab === 'coupon' && ( <>

优惠券列表

{coupons.map(c => ( ))}
兑换码 类型 面值 最低消费 有效期 状态 操作
{c.code} {c.type === 'fixed' ? '固定金额' : '百分比'} {c.type === 'fixed' ? `${c.value} 元` : `${c.value}%`} {c.minAmount > 0 ? `${c.minAmount} 元` : '无门槛'} {c.validFrom} 至 {c.validTo} {c.status === 'active' ? '有效' : '已过期'}
)} {/* Official App Management Tab */} {activeTab === 'official' && (

官方应用列表

{publishedOfficialApps.map(app => ( ))}
应用名 类型 价格 会员免费 安装量 评分 状态 操作
{app.name} {app.type.toUpperCase()} {app.price} 元 {app.isMemberFree ? '是' : '否'} {app.installCount.toLocaleString()}
{app.ratingAvg}
{app.status === 'published' ? '已上架' : '已下架'}
)} {/* Create Coupon Modal */} {showCouponModal && (
setShowCouponModal(false)}>
e.stopPropagation()}>

创建优惠券

setCouponForm({ ...couponForm, code: e.target.value })} placeholder="例如: NEW2026" />
setCouponForm({ ...couponForm, value: Number(e.target.value) })} />
setCouponForm({ ...couponForm, minAmount: Number(e.target.value) })} />
setCouponForm({ ...couponForm, validFrom: e.target.value })} />
setCouponForm({ ...couponForm, validTo: e.target.value })} />
)}
); }; export default Market;