sync: soul-admin 页面 | 原因: 前端页面修改
This commit is contained in:
@@ -121,6 +121,63 @@ export function MatchPoolTab() {
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* 匹配池选择 */}
|
||||
<Card className="bg-[#0f2137] border-gray-700/50">
|
||||
<CardHeader>
|
||||
<CardTitle className="text-white flex items-center gap-2"><Filter className="w-5 h-5 text-blue-400" /> 匹配池选择</CardTitle>
|
||||
<CardDescription className="text-gray-400">选择匹配的用户池和完善程度要求,只有满足条件的用户才可被匹配到</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-6">
|
||||
<div className="space-y-3">
|
||||
<Label className="text-gray-300">匹配来源池</Label>
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-3">
|
||||
{([
|
||||
{ value: 'vip' as const, label: '超级个体(VIP会员)', desc: '仅匹配付费 ¥1980 的VIP会员', icon: '👑' },
|
||||
{ value: 'complete' as const, label: '完善资料用户', desc: '已完善联系方式+业务信息的用户', icon: '✅' },
|
||||
{ value: 'all' as const, label: '全部流量池', desc: '所有已注册用户(含未完善资料)', icon: '👥' },
|
||||
]).map(opt => {
|
||||
const ps = config.poolSettings ?? DEFAULT_POOL
|
||||
const selected = ps.poolSource === opt.value
|
||||
return (
|
||||
<button key={opt.value} type="button"
|
||||
onClick={() => setConfig({ ...config, poolSettings: { ...(config.poolSettings ?? DEFAULT_POOL), poolSource: opt.value } })}
|
||||
className={`p-4 rounded-lg border text-left transition-all ${selected ? 'border-[#38bdac] bg-[#38bdac]/10' : 'border-gray-700 bg-[#0a1628] hover:border-gray-600'}`}>
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-xl">{opt.icon}</span>
|
||||
<span className={`text-sm font-medium ${selected ? 'text-[#38bdac]' : 'text-gray-300'}`}>{opt.label}</span>
|
||||
</div>
|
||||
<p className="text-gray-500 text-xs mt-1">{opt.desc}</p>
|
||||
</button>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
<div className="space-y-3 pt-4 border-t border-gray-700/50">
|
||||
<Label className="text-gray-300">用户资料完善要求(被匹配用户必须满足以下条件)</Label>
|
||||
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||||
{([
|
||||
{ key: 'requirePhone' as const, label: '有手机号', icon: '📱' },
|
||||
{ key: 'requireNickname' as const, label: '有昵称', icon: '👤' },
|
||||
{ key: 'requireAvatar' as const, label: '有头像', icon: '🖼️' },
|
||||
{ key: 'requireBusiness' as const, label: '有业务需求', icon: '💼' },
|
||||
]).map(item => {
|
||||
const ps = config.poolSettings ?? DEFAULT_POOL
|
||||
const checked = ps[item.key]
|
||||
return (
|
||||
<div key={item.key} className="flex items-center gap-3 bg-[#0a1628] rounded-lg p-3">
|
||||
<Switch checked={checked} onCheckedChange={v => setConfig({ ...config, poolSettings: { ...(config.poolSettings ?? DEFAULT_POOL), [item.key]: v } })} />
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span>{item.icon}</span>
|
||||
<Label className="text-gray-300 text-sm">{item.label}</Label>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
<Card className="bg-[#0f2137] border-gray-700/50">
|
||||
<CardHeader>
|
||||
<CardTitle className="text-white flex items-center gap-2"><Zap className="w-5 h-5 text-yellow-400" /> 基础设置</CardTitle>
|
||||
|
||||
Reference in New Issue
Block a user