feat: 为所有终端添加平台显示功能

- 新增 frontend/lib/platforms.ts 共享平台配置模块
- 支持6个平台: 抖音、小红书、B站、快手、微博、微信视频号
- 品牌方终端: 项目看板、项目详情、终审台列表添加平台显示
- 代理商终端: 工作台概览、审核台、Brief配置、达人管理、
  数据报表、消息中心、申诉处理添加平台显示
- 达人端: 任务列表添加平台显示
- 统一使用彩色头部条样式展示平台信息

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Your Name
2026-02-06 18:53:51 +08:00
co-authored by Claude Opus 4.5
parent 964797d2e9
commit 0bfedb95c8
22 changed files with 1784 additions and 460 deletions
+47 -3
View File
@@ -14,9 +14,20 @@ import {
X,
Users,
Search,
Building2
Building2,
Check
} from 'lucide-react'
// 平台选项
const platformOptions = [
{ id: 'douyin', name: '抖音', icon: '🎵', color: 'bg-[#1a1a1a]' },
{ id: 'xiaohongshu', name: '小红书', icon: '📕', color: 'bg-[#fe2c55]' },
{ id: 'bilibili', name: 'B站', icon: '📺', color: 'bg-[#00a1d6]' },
{ id: 'kuaishou', name: '快手', icon: '⚡', color: 'bg-[#ff4906]' },
{ id: 'weibo', name: '微博', icon: '🔴', color: 'bg-[#e6162d]' },
{ id: 'wechat', name: '微信视频号', icon: '💬', color: 'bg-[#07c160]' },
]
// 模拟品牌方已添加的代理商(来自代理商管理)
const mockAgencies = [
{ id: 'AG789012', name: '星耀传媒', companyName: '上海星耀文化传媒有限公司', creatorCount: 50, passRate: 92 },
@@ -33,6 +44,7 @@ export default function CreateProjectPage() {
const [deadline, setDeadline] = useState('')
const [briefFile, setBriefFile] = useState<File | null>(null)
const [selectedAgencies, setSelectedAgencies] = useState<string[]>([])
const [selectedPlatform, setSelectedPlatform] = useState<string>('')
const [isSubmitting, setIsSubmitting] = useState(false)
const [agencySearch, setAgencySearch] = useState('')
@@ -60,7 +72,7 @@ export default function CreateProjectPage() {
}
const handleSubmit = async () => {
if (!projectName.trim() || !deadline || !briefFile || selectedAgencies.length === 0) {
if (!projectName.trim() || !deadline || !briefFile || selectedAgencies.length === 0 || !selectedPlatform) {
alert('请填写完整信息')
return
}
@@ -72,7 +84,7 @@ export default function CreateProjectPage() {
router.push('/brand')
}
const isValid = projectName.trim() && deadline && briefFile && selectedAgencies.length > 0
const isValid = projectName.trim() && deadline && briefFile && selectedAgencies.length > 0 && selectedPlatform
return (
<div className="space-y-6 max-w-4xl">
@@ -100,6 +112,38 @@ export default function CreateProjectPage() {
/>
</div>
{/* 选择平台 */}
<div>
<label className="block text-sm font-medium text-text-primary mb-2">
<span className="text-accent-coral">*</span>
</label>
<p className="text-xs text-text-tertiary mb-3"></p>
<div className="grid grid-cols-3 md:grid-cols-6 gap-3">
{platformOptions.map((platform) => (
<button
key={platform.id}
type="button"
onClick={() => setSelectedPlatform(platform.id)}
className={`p-3 rounded-xl border-2 transition-all flex flex-col items-center gap-2 ${
selectedPlatform === platform.id
? 'border-accent-indigo bg-accent-indigo/10'
: 'border-border-subtle hover:border-accent-indigo/50'
}`}
>
<div className={`w-10 h-10 ${platform.color} rounded-lg flex items-center justify-center text-lg`}>
{platform.icon}
</div>
<span className="text-sm font-medium text-text-primary">{platform.name}</span>
{selectedPlatform === platform.id && (
<div className="absolute top-1 right-1 w-4 h-4 rounded-full bg-accent-indigo flex items-center justify-center">
<Check size={10} className="text-white" />
</div>
)}
</button>
))}
</div>
</div>
{/* 截止日期 */}
<div>
<label className="block text-sm font-medium text-text-primary mb-2">