测试以达人为维度的支付管理功能
✓ 每个达人卡片显示5项统计(已提交、已完成、待支付佣金、已支付、已支付佣金)
✓ 待支付佣金用红色显示
✓ 待支付佣金 = 已完成但未支付的任务佣金之和
✓ 有待支付佣金的达人显示"标记支付"按钮
✓ 无待支付佣金的达人不显示"标记支付"按钮
✓ 点击某个达人的"标记支付"按钮
✓ 模态框标题显示:标记支付 - 达人名称
✓ 任务列表只显示该达人的任务
✓ 表头不显示"达人"列(因为都是同一个达人)
✓ 筛选工具栏只有状态筛选和搜索(无达人筛选)
✓ 模态框底部显示"支付凭证(可选)"区域
✓ 点击"选择文件"可以选择图片或PDF
✓ 选择文件后显示文件名
✓ 显示"×"按钮可以清除选择
✓ 不上传凭证也可以标记支付
✓ 上传凭证后,确认对话框显示凭证文件名
✓ 按状态筛选(全部/待服务商审核/待客户审核/已完成)
✓ 搜索功能(任务ID、产品名称、客户名称)
✓ 逐个勾选任务
✓ 点击"全选"选中所有可支付任务
✓ 点击"取消全选"清除所有选择
✓ 已完成且未支付的任务可以勾选
✓ 已支付或未完成的任务自动置灰不可勾选
✓ 右上角实时显示已选择任务数和总佣金
✓ 未选择任务时"确认标记支付"按钮禁用
✓ 选择任务后按钮启用
✓ 点击确认显示确认对话框(达人、任务数、总佣金、凭证)
✓ 确认后显示成功提示
✓ 模态框自动关闭
✓ 达人卡片的待支付佣金减少
✓ 达人卡片的已支付任务数和已支付佣金增加
✓ 顶部统计数据更新
✓ 已支付任务不可再次标记
在浏览器控制台执行以下脚本验证数据完整性:
// 验证支付数据
const tasks = JSON.parse(localStorage.getItem('tasks') || '[]');
const creators = JSON.parse(localStorage.getItem('creatorApplications') || '[]');
// 按达人统计
const creatorStats = {};
creators.forEach(creator => {
const creatorTasks = tasks.filter(t => t.creatorId == creator.id);
const completedTasks = creatorTasks.filter(t => t.status === 'approved');
const paidTasks = completedTasks.filter(t => t.isPaid);
const pendingTasks = completedTasks.filter(t => !t.isPaid);
const paidCommission = paidTasks.reduce((sum, t) => sum + (t.pricePerVideo || 0), 0);
const pendingCommission = pendingTasks.reduce((sum, t) => sum + (t.pricePerVideo || 0), 0);
creatorStats[creator.name] = {
已完成: completedTasks.length,
已支付: paidTasks.length,
待支付: pendingTasks.length,
已支付佣金: paidCommission.toFixed(2),
待支付佣金: pendingCommission.toFixed(2)
};
});
console.table(creatorStats);