后端生成闸+多项修复;前端全站更新;QA 审计与报告
后端: - 新增 celery_health 生成前置闸——无 worker 在线时图片/视频生成入口 一律 503,防"提交到 ARK 后无人轮询、结果悬空+额度冻结"的数据丢失 - 拼接导出:帧率跟随源众数、字幕逐句重映射、原声/BGM 混音修复 - 资金核算审计脚本 + genesis 账目回填 + 滞留预留清理命令 - 接入 yunqi provider 与豆包 TTS 模型(catalog/migrations/bootstrap 命令) 前端:全站页面更新(pipeline/library/products/projects/team/account 等), 新增共享 pager 分页组件 QA:刷新 function-audit 全量输出,新增 full-qa 报告 文档:BP 产品介绍资料、design/CLAUDE.md Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
"""资金核算审计:针对真实 DB,逐条验证账目不变量,任何不平即报。
|
||||
跑法:cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development .venv/bin/python ../qa/audit_billing.py
|
||||
不变量:
|
||||
I1 余额自洽 balance == Σ(recharge+refund) - Σ(charge) + Σ(adjustment 带符号)
|
||||
I2 冻结自洽 reserved_balance == Σ(amount of ACTIVE reservations)
|
||||
I3 非负 & 可用 balance>=0, reserved>=0, balance>=reserved(可用余额>=0)
|
||||
I4 预留闭环 每个 reservation 状态与其 ledger 一致;CHARGED 恰好 1 条 charge 且 amount<=预留
|
||||
I5 失败不扣费 失败 task 的 reservation 不得为 CHARGED
|
||||
I6 无重复扣费 同一 task 不得有 >1 条 charge ledger
|
||||
I7 流水连续 按时间重放,recharge/charge 的 balance_after 与重放值一致
|
||||
"""
|
||||
import os, sys
|
||||
from decimal import Decimal
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "backend"))
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "airshelf.settings.development")
|
||||
import django # noqa: E402
|
||||
|
||||
django.setup()
|
||||
|
||||
from django.db.models import Sum # noqa: E402
|
||||
from apps.billing.models import CreditAccount, CreditLedger, CreditReservation # noqa: E402
|
||||
from apps.ai.models import AITask # noqa: E402
|
||||
|
||||
Z = Decimal("0")
|
||||
problems = []
|
||||
|
||||
|
||||
def flag(account, code, msg):
|
||||
problems.append((str(account.team), code, msg))
|
||||
print(f" ✗ [{code}] {msg}")
|
||||
|
||||
|
||||
def audit_account(acct):
|
||||
team = acct.team
|
||||
led = CreditLedger.objects.filter(team=team)
|
||||
print(f"\n== team={team} | balance={acct.balance} reserved={acct.reserved_balance} ==")
|
||||
|
||||
def s(t):
|
||||
return led.filter(ledger_type=t).aggregate(x=Sum("amount"))["x"] or Z
|
||||
|
||||
recharge, charge, refund, adjustment = s("recharge"), s("charge"), s("refund"), s("adjustment")
|
||||
|
||||
# I1 余额=流水终点:account.balance 应等于最后一条动-balance 流水的 balance_after(不依赖开户 genesis)
|
||||
last_bal_led = led.filter(ledger_type__in=["recharge", "refund", "charge", "adjustment"]).order_by("created_at", "id").last()
|
||||
if last_bal_led is not None:
|
||||
if acct.balance != last_bal_led.balance_after:
|
||||
flag(acct, "I1", f"账户余额与流水终点脱节:account.balance={acct.balance} 但末条动账流水 balance_after={last_bal_led.balance_after}")
|
||||
else:
|
||||
print(f" ✓ I1 余额=流水终点 {acct.balance}")
|
||||
else:
|
||||
print(f" · I1 无动账流水(纯开户额度 {acct.balance})")
|
||||
|
||||
# I2 冻结自洽
|
||||
active_sum = CreditReservation.objects.filter(team=team, status="active").aggregate(x=Sum("amount"))["x"] or Z
|
||||
if acct.reserved_balance != active_sum:
|
||||
flag(acct, "I2", f"冻结不平:account.reserved_balance={acct.reserved_balance} 但 ACTIVE 预留之和={active_sum}(差 {acct.reserved_balance - active_sum})")
|
||||
else:
|
||||
print(f" ✓ I2 冻结自洽 ACTIVE 预留之和={active_sum}")
|
||||
|
||||
# I3 非负 & 可用
|
||||
if acct.balance < Z:
|
||||
flag(acct, "I3", f"余额为负 {acct.balance}")
|
||||
if acct.reserved_balance < Z:
|
||||
flag(acct, "I3", f"冻结为负 {acct.reserved_balance}")
|
||||
if acct.balance < acct.reserved_balance:
|
||||
flag(acct, "I3", f"可用余额为负:balance {acct.balance} < reserved {acct.reserved_balance}")
|
||||
if acct.balance >= Z and acct.reserved_balance >= Z and acct.balance >= acct.reserved_balance:
|
||||
print(f" ✓ I3 非负&可用余额>=0(可用 {acct.balance - acct.reserved_balance})")
|
||||
|
||||
# I4/I5/I6 预留闭环 + 失败不扣 + 无重复扣
|
||||
i4 = i5 = i6 = True
|
||||
for r in CreditReservation.objects.filter(team=team).select_related("task"):
|
||||
charges = led.filter(task=r.task, ledger_type="charge")
|
||||
charge_sum = charges.aggregate(x=Sum("amount"))["x"] or Z
|
||||
adj = led.filter(task=r.task, ledger_type="adjustment").aggregate(x=Sum("amount"))["x"] or Z
|
||||
net_charge = charge_sum - adj # 扣费扣除回冲后的净额
|
||||
dup_reconciled = charges.count() > 1 and net_charge == r.amount
|
||||
if charges.count() > 1:
|
||||
if dup_reconciled:
|
||||
print(f" · I6 task={str(r.task_id)[:8]} 历史双扣 {charges.count()} 笔,已被 adjustment 回冲(净扣 {net_charge} = 预留 {r.amount},账平)")
|
||||
else:
|
||||
i6 = False
|
||||
flag(acct, "I6", f"task={str(r.task_id)[:8]} {charges.count()} 条扣费,净扣 {net_charge} != 预留 {r.amount}(未完全回冲,真多扣)")
|
||||
if r.status == "charged":
|
||||
if charges.count() != 1 and not dup_reconciled:
|
||||
i4 = False
|
||||
flag(acct, "I4", f"reservation(task={str(r.task_id)[:8]}) 状态 CHARGED 却有 {charges.count()} 条扣费")
|
||||
elif net_charge > r.amount:
|
||||
i4 = False
|
||||
flag(acct, "I4", f"净扣费 {net_charge} > 预留 {r.amount}(task={str(r.task_id)[:8]})")
|
||||
elif r.status == "active":
|
||||
if charges.exists():
|
||||
i4 = False
|
||||
flag(acct, "I4", f"reservation ACTIVE 却已有扣费(task={str(r.task_id)[:8]})")
|
||||
# I5 失败不扣费
|
||||
task = r.task
|
||||
if task and task.status in ("failed", "cancelled") and r.status == "charged":
|
||||
i5 = False
|
||||
flag(acct, "I5", f"失败/取消 task={str(r.task_id)[:8]}(status={task.status})却被扣费")
|
||||
if i4:
|
||||
print(" ✓ I4 预留状态与扣费/释放流水一致")
|
||||
if i5:
|
||||
print(" ✓ I5 失败/取消任务均未扣费")
|
||||
if i6:
|
||||
print(" ✓ I6 无重复扣费")
|
||||
|
||||
# I7 逐笔差分自洽(不依赖开户起点):每条动账流水的 balance_after 必须 = 前一条动账流水的 balance_after ± 本笔金额。
|
||||
# reserve/release 不动 balance,其 balance_after 应 = 当时余额快照(上一条动账流水的 balance_after)。
|
||||
i7 = True
|
||||
prev_bal = None # 上一条动账后的余额
|
||||
for L in led.order_by("created_at", "id"):
|
||||
if L.ledger_type in ("recharge", "refund", "adjustment"):
|
||||
expected = (prev_bal if prev_bal is not None else Z) + L.amount
|
||||
if prev_bal is not None and L.balance_after != expected:
|
||||
i7 = False
|
||||
flag(acct, "I7", f"差分不符 {L.ledger_type}@{str(L.created_at)[:19]} amount={L.amount} 记录={L.balance_after} 应为前值{prev_bal}+{L.amount}={expected}")
|
||||
prev_bal = L.balance_after
|
||||
elif L.ledger_type == "charge":
|
||||
if prev_bal is not None:
|
||||
expected = prev_bal - L.amount
|
||||
if L.balance_after != expected:
|
||||
i7 = False
|
||||
flag(acct, "I7", f"差分不符 charge@{str(L.created_at)[:19]} amount={L.amount} 记录={L.balance_after} 应为前值{prev_bal}-{L.amount}={expected}")
|
||||
prev_bal = L.balance_after
|
||||
else: # reserve / release:不动 balance,快照应等于上一条动账后的余额
|
||||
if prev_bal is not None and L.balance_after != prev_bal:
|
||||
i7 = False
|
||||
flag(acct, "I7", f"reserve/release 余额快照漂移@{str(L.created_at)[:19]} 记录={L.balance_after} 应={prev_bal}")
|
||||
if i7:
|
||||
print(" ✓ I7 逐笔差分自洽(每条 balance_after = 前一条 ± 本笔金额)")
|
||||
|
||||
# I8 流水完整性(可审计):首条流水之前的隐含余额应为 0(开户额度也应有 genesis 流水)
|
||||
first = led.order_by("created_at", "id").first()
|
||||
if first is not None:
|
||||
delta = first.amount if first.ledger_type in ("recharge", "refund", "adjustment") else (-first.amount if first.ledger_type == "charge" else Z)
|
||||
opening = first.balance_after - delta
|
||||
if opening != Z:
|
||||
flag(acct, "I8", f"开户额度无流水凭证:首条流水前隐含余额={opening}(应为 0,缺 genesis 赠送流水)")
|
||||
else:
|
||||
print(" ✓ I8 流水完整(开户额度有凭证)")
|
||||
|
||||
|
||||
def main():
|
||||
accts = CreditAccount.objects.select_related("team").all()
|
||||
print(f"审计 {accts.count()} 个团队账户…")
|
||||
for a in accts:
|
||||
audit_account(a)
|
||||
print("\n" + "=" * 60)
|
||||
if problems:
|
||||
print(f"发现 {len(problems)} 处账目问题:")
|
||||
for team, code, msg in problems:
|
||||
print(f" [{code}] {team}: {msg}")
|
||||
sys.exit(1)
|
||||
print("✓ 全部账户账目自洽,无金额核算错误")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,50 @@
|
||||
"""一次性回填:给历史账户补开户赠送的 genesis 流水(只补凭证,不改任何余额)。
|
||||
对每个 account,若"首条流水之前的隐含余额">0 且尚无 trial_grant 流水,补一条 RECHARGE,
|
||||
created_at 设为开户时间(早于所有流水),balance_after=该隐含开户额度。幂等可重跑。
|
||||
跑法:cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development .venv/bin/python ../qa/backfill_genesis_ledger.py
|
||||
"""
|
||||
import os, sys
|
||||
from decimal import Decimal
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "backend"))
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "airshelf.settings.development")
|
||||
import django # noqa: E402
|
||||
|
||||
django.setup()
|
||||
|
||||
from django.db import transaction # noqa: E402
|
||||
from apps.billing.models import CreditAccount, CreditLedger # noqa: E402
|
||||
|
||||
Z = Decimal("0")
|
||||
fixed = 0
|
||||
for acct in CreditAccount.objects.select_related("team").all():
|
||||
led = CreditLedger.objects.filter(team=acct.team)
|
||||
if led.filter(metadata__kind="trial_grant").exists():
|
||||
continue # 已有 genesis
|
||||
first = led.order_by("created_at", "id").first()
|
||||
if first is None:
|
||||
# 纯开户无任何流水:开户额度即 balance
|
||||
opening = acct.balance
|
||||
genesis_time = acct.created_at
|
||||
else:
|
||||
delta = first.amount if first.ledger_type in ("recharge", "refund", "adjustment") else (-first.amount if first.ledger_type == "charge" else Z)
|
||||
opening = first.balance_after - delta
|
||||
genesis_time = acct.created_at if acct.created_at < first.created_at else first.created_at
|
||||
if opening <= Z:
|
||||
continue
|
||||
with transaction.atomic():
|
||||
g = CreditLedger.objects.create(
|
||||
team=acct.team,
|
||||
user=acct.team.owner,
|
||||
ledger_type=CreditLedger.Type.RECHARGE,
|
||||
amount=opening,
|
||||
balance_after=opening,
|
||||
reason="新用户试用额度赠送(历史回填)",
|
||||
metadata={"kind": "trial_grant", "backfilled": True},
|
||||
)
|
||||
# created 字段由 auto_now_add 控制,需手动回拨到开户时刻,保证它排在所有流水之前
|
||||
CreditLedger.objects.filter(id=g.id).update(created_at=genesis_time)
|
||||
fixed += 1
|
||||
print(f" + {acct.team} 补 genesis ¥{opening} @ {genesis_time:%Y-%m-%d %H:%M}")
|
||||
|
||||
print(f"\n回填完成:{fixed} 个账户补齐 genesis 流水(余额未变动)")
|
||||
@@ -46,7 +46,9 @@ fs.mkdirSync(outDir, { recursive: true });
|
||||
|
||||
// 只跳「单击即不可逆」的真实付费/真生成/真导出 + 弹窗里的最终确认按钮。
|
||||
// 触发型(删除/移除/下线/充值/退出登录 = 点了只是开二次确认弹窗或跳转)不在此列,照常点验。
|
||||
const DESTRUCTIVE = /(微信支付|支付宝|立即支付|去支付|确认支付|确认充值|立即生成|生成脚本|生成基础资产|生成故事板|生成分镜|提交片段|提交视频|提交生成|提交导出|重新导出|导出\s*MP4|确认删除|确认移除|确认退出|确认下线)/i;
|
||||
// ★ 2026-06-10 教训:漏了「整体重写/AI 全生/重新生成/重跑/确认脚本」,一轮审计对演示项目真跑了
|
||||
// 6 次 generate-script(真扣费 ¥6)。凡单击即触发真实 AI 生成/落库写的按钮文字必须进这张表。
|
||||
const DESTRUCTIVE = /(微信支付|支付宝|立即支付|去支付|确认支付|确认充值|立即生成|生成脚本|生成基础资产|生成故事板|生成分镜|提交片段|提交视频|提交生成|提交导出|重新导出|导出\s*MP4|确认删除|确认移除|确认退出|确认下线|整体重写|AI\s*全生|重新生成全部|重跑|开始生成视频|确认脚本|跳过故事板|采用此版本|AI\s*生成(三视图|人物|场景)|保存草稿|删除本场|添加分镜|发送|^生成$)/i;
|
||||
|
||||
async function login() {
|
||||
if (TOKEN) return TOKEN;
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "account",
|
||||
"route": "/account",
|
||||
"url": "http://127.0.0.1:5173/account",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 26,
|
||||
"works": 21,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 2,
|
||||
"noop": 3,
|
||||
"skipped": 5,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -270,17 +270,17 @@
|
||||
"idx": 14,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "recharge-card.selected",
|
||||
"cls": "recharge-card.",
|
||||
"label": "推荐¥500+ ¥30 赠送",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -401,7 +401,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "账单流水 100",
|
||||
"label": "账单流水 254",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -416,64 +416,27 @@
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip.active",
|
||||
"label": "日",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "周",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 38,
|
||||
"api": 1
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "月",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 38,
|
||||
"api": 1
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"账户",
|
||||
"账单流水 30天"
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
# 功能审计 · account
|
||||
|
||||
路由:`/account` · 模式:isolated
|
||||
合计 26 · ✅ works 21 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 3 · ⚪ disabled 0
|
||||
路由:`/account` · 模式:quick
|
||||
合计 26 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 账单流水 30天
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 微信支付 `button`
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "asset-factory",
|
||||
"route": "/asset-factory",
|
||||
"url": "http://127.0.0.1:5173/asset-factory",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 22,
|
||||
"works": 23,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 2,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "收窄导航",
|
||||
"label": "展开导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -338,7 +338,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -356,7 +356,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -365,7 +365,7 @@
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "tab",
|
||||
"label": "失败 0",
|
||||
"label": "失败 5",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -374,7 +374,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -398,13 +398,13 @@
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "任务类型",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "全部时间",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
@@ -418,8 +418,8 @@
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "网格",
|
||||
"cls": "clear-filters",
|
||||
"label": "清空筛选",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -428,7 +428,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"mutations": 16,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -437,24 +437,25 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "列表",
|
||||
"label": "网格",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"self": true,
|
||||
"mutations": 15,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"账户"
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"时间"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
# 功能审计 · asset-factory
|
||||
|
||||
路由:`/asset-factory` · 模式:isolated
|
||||
合计 24 · ✅ works 22 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 2 · ⚪ disabled 0
|
||||
路由:`/asset-factory` · 模式:quick
|
||||
合计 24 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 时间
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "dashboard",
|
||||
"route": "/dashboard",
|
||||
"url": "http://127.0.0.1:5173/dashboard",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 25,
|
||||
"works": 25,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 29,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"mutations": 42,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
@@ -226,8 +226,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,7 +244,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -271,7 +271,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat",
|
||||
"label": "余额 ¥¥11116.00已冻结 ¥5.00",
|
||||
"label": "余额 ¥¥14908.00已冻结 ¥0.00",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -281,7 +281,7 @@
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -311,14 +311,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
@@ -329,50 +322,29 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本继续",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本继续",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
@@ -383,14 +355,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
@@ -406,7 +371,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -415,7 +380,7 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "资产库67 资产",
|
||||
"label": "资产库101 资产",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -424,7 +389,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 41,
|
||||
"mutations": 42,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -433,7 +398,7 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "充值¥11116.00",
|
||||
"label": "充值¥14908.00",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -443,7 +408,7 @@
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -467,24 +432,22 @@
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"总项目 ALL 8 本月 +3",
|
||||
"进行中 WIP 3 2 个待审核",
|
||||
"本月成片 DONE 3 较上月 +33%",
|
||||
"余额 ¥ ¥327.40 已用 ¥162.60 / ¥500",
|
||||
"[ ALL · 8 ]",
|
||||
"9:16 补水面膜 · 痛点种草 · v3 透真补水面膜 / AI 全生 / 7 镜 故事板 待",
|
||||
"9:16 透真防晒 · 通勤对比 透真防晒 / AI 全生 / 6 镜 已完成 打开",
|
||||
"9:16 蓝牙耳机 · 开箱测评 Pro 4 蓝牙耳机 / 自带脚本 / 6 镜 视频生成 4/",
|
||||
"9:16 春日新品 · 立体口红 凝彩立体口红 / 一句话 / 5 镜 资产生成中 继续",
|
||||
"9:16 咖啡冻干 · 早八 冷萃咖啡冻干 / 一句话 / 5 镜 故事板失败 查看",
|
||||
"资产库人 8 · 景 14 · 片 8",
|
||||
"故事板 待确认",
|
||||
"总项目 ALL 6 本月完成 2",
|
||||
"进行中 WIP 4 全部正常推进",
|
||||
"本月成片 DONE 2 累计完成 2",
|
||||
"余额 ¥ ¥14,908.00 已用 ¥113.00 / ¥15,021.00",
|
||||
"[ ALL · 6 ]",
|
||||
"9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产生",
|
||||
"9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜已完成打开",
|
||||
"9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本待生成继",
|
||||
"资产库资产 20 个",
|
||||
"充值¥14,908.00",
|
||||
"基础资产生成中",
|
||||
"已完成",
|
||||
"视频生成 4/6",
|
||||
"资产生成中",
|
||||
"故事板失败"
|
||||
"脚本待生成",
|
||||
"故事板生成中"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,29 +1,34 @@
|
||||
# 功能审计 · dashboard
|
||||
|
||||
路由:`/dashboard` · 模式:isolated
|
||||
合计 25 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
路由:`/dashboard` · 模式:quick
|
||||
合计 25 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 总项目 ALL 8 本月 +3
|
||||
- 进行中 WIP 3 2 个待审核
|
||||
- 本月成片 DONE 3 较上月 +33%
|
||||
- 余额 ¥ ¥327.40 已用 ¥162.60 / ¥500
|
||||
- [ ALL · 8 ]
|
||||
- 9:16 补水面膜 · 痛点种草 · v3 透真补水面膜 / AI 全生 / 7 镜 故事板 待
|
||||
- 9:16 透真防晒 · 通勤对比 透真防晒 / AI 全生 / 6 镜 已完成 打开
|
||||
- 9:16 蓝牙耳机 · 开箱测评 Pro 4 蓝牙耳机 / 自带脚本 / 6 镜 视频生成 4/
|
||||
- 9:16 春日新品 · 立体口红 凝彩立体口红 / 一句话 / 5 镜 资产生成中 继续
|
||||
- 9:16 咖啡冻干 · 早八 冷萃咖啡冻干 / 一句话 / 5 镜 故事板失败 查看
|
||||
- 资产库人 8 · 景 14 · 片 8
|
||||
- 故事板 待确认
|
||||
- 总项目 ALL 6 本月完成 2
|
||||
- 进行中 WIP 4 全部正常推进
|
||||
- 本月成片 DONE 2 累计完成 2
|
||||
- 余额 ¥ ¥14,908.00 已用 ¥113.00 / ¥15,021.00
|
||||
- [ ALL · 6 ]
|
||||
- 9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产生
|
||||
- 9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜已完成打开
|
||||
- 9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本待生成继
|
||||
- 资产库资产 20 个
|
||||
- 充值¥14,908.00
|
||||
- 基础资产生成中
|
||||
- 已完成
|
||||
- 视频生成 4/6
|
||||
- 资产生成中
|
||||
- 故事板失败
|
||||
- 脚本待生成
|
||||
- 故事板生成中
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产继 `button`
|
||||
- 9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜拼接导出继续 `button`
|
||||
- 9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜 `button`
|
||||
- 9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本继续 `button`
|
||||
- 9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜 `button`
|
||||
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "image-optimize",
|
||||
"route": "/image-optimize",
|
||||
"url": "http://127.0.0.1:5173/image-optimize",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 24,
|
||||
"dead": 0,
|
||||
"works": 21,
|
||||
"dead": 2,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "展开导航",
|
||||
"label": "收窄导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -396,17 +396,17 @@
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ic-param-btn",
|
||||
"label": "风格默认",
|
||||
"cls": "mi.selected",
|
||||
"label": "1:1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -414,17 +414,17 @@
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ic-param-btn",
|
||||
"label": "张数4",
|
||||
"cls": "mi.",
|
||||
"label": "3:4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -432,25 +432,25 @@
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "send-btn",
|
||||
"label": "生成",
|
||||
"cls": "mi.",
|
||||
"label": "4:5",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 1
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"折叠侧栏",
|
||||
"时间",
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
# 功能审计 · image-optimize
|
||||
|
||||
路由:`/image-optimize` · 模式:isolated
|
||||
合计 24 · ✅ works 24 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
路由:`/image-optimize` · 模式:quick
|
||||
合计 24 · ✅ works 21 · ❌ **dead 2** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## ❌ 点了没反应(DEAD —— 重点修)
|
||||
| # | 文字 | 标签 | 类名 |
|
||||
|---|---|---|---|
|
||||
| 22 | 3:4 | `button` | `mi.` |
|
||||
| 23 | 4:5 | `button` | `mi.` |
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 折叠侧栏
|
||||
- 时间
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "library",
|
||||
"route": "/library",
|
||||
"url": "http://127.0.0.1:5173/library",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 38,
|
||||
"works": 35,
|
||||
"works": 23,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 2,
|
||||
"disabled": 1,
|
||||
"skipped": 13,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -82,7 +82,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -289,7 +289,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab.active",
|
||||
"label": "人物 14",
|
||||
"label": "人物 15",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -307,7 +307,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "场景 11",
|
||||
"label": "场景 22",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -316,7 +316,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 48,
|
||||
"mutations": 81,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -325,7 +325,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "商品图 35",
|
||||
"label": "商品图 39",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -334,7 +334,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 97,
|
||||
"mutations": 121,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -343,7 +343,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "成片 10",
|
||||
"label": "成片 23",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -352,7 +352,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 38,
|
||||
"mutations": 84,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -361,7 +361,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "我的上传 1",
|
||||
"label": "我的上传 3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -370,7 +370,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 30,
|
||||
"mutations": 51,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -388,7 +388,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 29,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -397,78 +397,6 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "性别",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "年龄段",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "角色标签",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "来源",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "最近添加",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
@@ -478,189 +406,122 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "最近添加",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost",
|
||||
"label": "取消",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "上传资产",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "placeholder.asset-thumb",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
@@ -677,10 +538,14 @@
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"最近使用",
|
||||
"缺三视图,查看说明"
|
||||
"管理资产",
|
||||
"性别",
|
||||
"年龄段",
|
||||
"角色标签",
|
||||
"来源",
|
||||
"最近使用"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
# 功能审计 · library
|
||||
|
||||
路由:`/library` · 模式:isolated
|
||||
合计 38 · ✅ works 35 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
路由:`/library` · 模式:quick
|
||||
合计 38 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)13 · ◷ noop-active 1 · ⚪ disabled 1
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 管理资产
|
||||
- 性别
|
||||
- 年龄段
|
||||
- 角色标签
|
||||
- 来源
|
||||
- 最近使用
|
||||
- 缺三视图,查看说明
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "messages",
|
||||
"route": "/messages",
|
||||
"url": "http://127.0.0.1:5173/messages",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 26,
|
||||
"works": 25,
|
||||
"total": 28,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 7,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 35,
|
||||
"mutations": 36,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -289,7 +289,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.active",
|
||||
"label": "全部20",
|
||||
"label": "全部111",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -316,8 +316,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -325,7 +325,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
"label": "任务20",
|
||||
"label": "任务110",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -334,8 +334,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -352,8 +352,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -370,8 +370,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -379,7 +379,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
"label": "系统0",
|
||||
"label": "系统1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -388,112 +388,62 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-item.active.read",
|
||||
"label": "资产「AI 生成 · image · 4」已加入资产库7mProduct Image · Ima",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 2,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-item.read",
|
||||
"label": "资产「AI 生成 · image · 3」已加入资产库8mProduct Image · Ima",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-item.read",
|
||||
"label": "资产「AI 生成 · image · 2」已加入资产库8mProduct Image · Ima",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-item.read",
|
||||
"label": "资产「AI 生成 · image · 1」已加入资产库9mProduct Image · Ima",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-item.read",
|
||||
"label": "资产「AI 生成 · cover · 4」已加入资产库21mProduct Image · Im",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"补水面膜 · 痛点种草 v3 成片已完成 12m 7 镜 · 40 秒 · ¥18.40 已结算",
|
||||
"脚本生成失败 · 618 大促 1h Prompt 超过服务限制,本次失败未扣费,可一键重试。 ",
|
||||
"4 张模特上身图已加入资产库 2h 祛痘精华 · 通勤白领 · 3:4,可直接进入视频项目。 已",
|
||||
"@刘 正在编辑「补水面膜」项目 3h 你暂时以只读方式查看该项目,避免两人同时改动覆盖。 更新 ",
|
||||
"@王芳 已加入团队 5h 角色为运营,月限额 ¥800,可读写团队资产。 更新 团队",
|
||||
"团队余额低于预警线 7h 当前余额 ¥87.20,按近 7 天速度预计可支撑 4 个视频项目。 ",
|
||||
"补水面膜 →"
|
||||
"资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im",
|
||||
"资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video",
|
||||
"资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video ",
|
||||
"资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系",
|
||||
"系统 →"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
# 功能审计 · messages
|
||||
|
||||
路由:`/messages` · 模式:isolated
|
||||
合计 26 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
路由:`/messages` · 模式:quick
|
||||
合计 28 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)7 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 补水面膜 · 痛点种草 v3 成片已完成 12m 7 镜 · 40 秒 · ¥18.40 已结算
|
||||
- 脚本生成失败 · 618 大促 1h Prompt 超过服务限制,本次失败未扣费,可一键重试。
|
||||
- 4 张模特上身图已加入资产库 2h 祛痘精华 · 通勤白领 · 3:4,可直接进入视频项目。 已
|
||||
- @刘 正在编辑「补水面膜」项目 3h 你暂时以只读方式查看该项目,避免两人同时改动覆盖。 更新
|
||||
- @王芳 已加入团队 5h 角色为运营,月限额 ¥800,可读写团队资产。 更新 团队
|
||||
- 团队余额低于预警线 7h 当前余额 ¥87.20,按近 7 天速度预计可支撑 4 个视频项目。
|
||||
- 补水面膜 →
|
||||
- 资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im
|
||||
- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video
|
||||
- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video
|
||||
- 资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系
|
||||
- 系统 →
|
||||
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "model-photo-demo-a",
|
||||
"route": "/model-photo/demo-a",
|
||||
"url": "http://127.0.0.1:5173/model-photo/demo-a",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 37,
|
||||
"total": 38,
|
||||
"works": 33,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 1,
|
||||
"noop": 3,
|
||||
"skipped": 4,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "展开导航",
|
||||
"label": "收窄导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -388,7 +388,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -454,17 +454,17 @@
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.active",
|
||||
"cls": "dm-chip.",
|
||||
"label": "4 张",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -508,17 +508,17 @@
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.active",
|
||||
"cls": "dm-chip.",
|
||||
"label": "3:4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -578,18 +578,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ",
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — "
|
||||
]
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
@@ -644,18 +633,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ",
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — "
|
||||
]
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
@@ -700,12 +678,18 @@
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ",
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"立即生成 · 透真补水面膜 × Ava"
|
||||
]
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
# 功能审计 · model-photo-demo-a
|
||||
|
||||
路由:`/model-photo/demo-a` · 模式:isolated
|
||||
合计 37 · ✅ works 33 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 3 · ⚪ disabled 0
|
||||
路由:`/model-photo/demo-a` · 模式:quick
|
||||
合计 38 · ✅ works 33 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)4 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 立即生成 · 透真补水面膜 × Ava
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 立即生成 · 南卡 Lite Pro 蓝牙耳机 × Ava `button`
|
||||
- 全部重跑 `button`
|
||||
- 全部重跑 `button`
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "model-photo-demo-b",
|
||||
"route": "/model-photo/demo-b",
|
||||
"url": "http://127.0.0.1:5173/model-photo/demo-b",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 37,
|
||||
"works": 36,
|
||||
"works": 34,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 2,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "收窄导航",
|
||||
"label": "展开导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 49,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 36,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -370,7 +370,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -388,7 +388,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -511,18 +511,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ",
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — "
|
||||
]
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
@@ -577,18 +566,7 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ",
|
||||
"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — "
|
||||
]
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
@@ -747,8 +725,8 @@
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"生成 · 透真补水面膜 × Ava"
|
||||
]
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
# 功能审计 · model-photo-demo-b
|
||||
|
||||
路由:`/model-photo/demo-b` · 模式:isolated
|
||||
合计 37 · ✅ works 36 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
路由:`/model-photo/demo-b` · 模式:quick
|
||||
合计 37 · ✅ works 34 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 生成 · 透真补水面膜 × Ava
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 全部重跑 `button`
|
||||
- 全部重跑 `button`
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "model-photo",
|
||||
"route": "/model-photo",
|
||||
"url": "http://127.0.0.1:5173/model-photo",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 32,
|
||||
"works": 31,
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "收窄导航",
|
||||
"label": "展开导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -280,7 +280,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -492,7 +492,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -502,19 +502,19 @@
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tb-chip",
|
||||
"label": "模特",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "最近添加",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -527,7 +527,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 4// 真人模特",
|
||||
"label": "南卡 · 痛点种草 · v1-person// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -536,7 +536,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -549,7 +549,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 3// 真人模特",
|
||||
"label": "AI 生成 · model · 1// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -558,7 +558,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -571,7 +571,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"label": "AI 生成 · model · 1// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -580,7 +580,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -593,7 +593,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 1// 真人模特",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -602,7 +602,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -615,7 +615,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 4// 真人模特",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -624,7 +624,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -637,7 +637,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 3// 真人模特",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -646,7 +646,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -657,11 +657,12 @@
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"折叠侧栏",
|
||||
"全部商品 7 个",
|
||||
"时间",
|
||||
"立即生成 (预估 ¥0.00)"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
# 功能审计 · model-photo
|
||||
|
||||
路由:`/model-photo` · 模式:isolated
|
||||
路由:`/model-photo` · 模式:quick
|
||||
合计 32 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 折叠侧栏
|
||||
- 全部商品 7 个
|
||||
- 时间
|
||||
- 立即生成 (预估 ¥0.00)
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "pipeline",
|
||||
"route": "/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f",
|
||||
"url": "http://127.0.0.1:5173/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 29,
|
||||
"works": 27,
|
||||
"total": 34,
|
||||
"works": 26,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 2,
|
||||
"disabled": 8,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"mutations": 36,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -270,17 +270,17 @@
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot.active",
|
||||
"cls": "sp-dot",
|
||||
"label": "基础资产",
|
||||
"href": "#stage-2",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -316,7 +316,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -334,7 +334,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 27,
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
@@ -342,62 +342,41 @@
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tag-add",
|
||||
"label": "添加人物",
|
||||
"cls": "ctl-btn",
|
||||
"label": "上一帧 (←)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tag-add",
|
||||
"label": "添加场景",
|
||||
"cls": "ctl-btn",
|
||||
"label": "播放 / 暂停 (空格)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "↻ 整体重写",
|
||||
"cls": "ctl-btn",
|
||||
"label": "下一帧 (→)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "清空对话",
|
||||
"cls": "ctl-btn",
|
||||
"label": "静音",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
@@ -405,10 +384,28 @@
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chat-mode.primary",
|
||||
"label": "AI 全生",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "active",
|
||||
"label": "字幕",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 61,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "",
|
||||
"label": "转场",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -417,34 +414,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chat-mode",
|
||||
"label": "一句话主题",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"mutations": 33,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chat-mode",
|
||||
"label": "自带脚本",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "",
|
||||
"label": "BGM",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -453,7 +432,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -461,8 +440,8 @@
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chat-icon-btn",
|
||||
"label": "上传脚本附件",
|
||||
"cls": "btn.btn-sm.btn-primary",
|
||||
"label": "已开启",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -471,63 +450,142 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "swatch-card.selected",
|
||||
"label": "真实分享朴素白底",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "swatch-card",
|
||||
"label": "真实分享影视黑底",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "swatch-card",
|
||||
"label": "真实分享手写描边",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "swatch-card",
|
||||
"label": "真实分享综艺暖黄",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 36,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chat-send-btn",
|
||||
"label": "发送",
|
||||
"cls": "tl-action",
|
||||
"label": "撤销",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
"label": "重新生成全部",
|
||||
"cls": "tl-action",
|
||||
"label": "重做",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "进入下一步",
|
||||
"cls": "tl-action",
|
||||
"label": "在播放头处分割所在片段",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tl-action",
|
||||
"label": "复制选中片段",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"添加人物",
|
||||
"添加场景",
|
||||
"↻ 整体重写",
|
||||
"清空对话",
|
||||
"AI 全生",
|
||||
"一句话主题",
|
||||
"自带脚本",
|
||||
"上传脚本附件",
|
||||
"发送",
|
||||
"重新生成全部",
|
||||
"确认脚本,进入下一步"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
# 功能审计 · pipeline
|
||||
|
||||
路由:`/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f` · 模式:isolated
|
||||
合计 29 · ✅ works 27 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 2
|
||||
路由:`/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f` · 模式:quick
|
||||
合计 34 · ✅ works 26 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 8
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 添加人物
|
||||
- 添加场景
|
||||
- ↻ 整体重写
|
||||
- 清空对话
|
||||
- AI 全生
|
||||
- 一句话主题
|
||||
- 自带脚本
|
||||
- 上传脚本附件
|
||||
- 发送
|
||||
- 重新生成全部
|
||||
- 确认脚本,进入下一步
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "platform-cover",
|
||||
"route": "/platform-cover",
|
||||
"url": "http://127.0.0.1:5173/platform-cover",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 38,
|
||||
"works": 35,
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "展开导航",
|
||||
"label": "收窄导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 15,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -262,7 +262,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -280,7 +280,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -460,7 +460,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -478,7 +478,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -496,7 +496,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -514,7 +514,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -532,7 +532,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -550,7 +550,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -568,7 +568,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -586,7 +586,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -604,7 +604,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -622,7 +622,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -658,7 +658,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -676,7 +676,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -685,7 +685,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "立即生成 (预估 ¥2.00)",
|
||||
"label": "立即生成 (预估 ¥6.00)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -693,8 +693,8 @@
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"折叠侧栏",
|
||||
"全部商品 7 个",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
# 功能审计 · platform-cover
|
||||
|
||||
路由:`/platform-cover` · 模式:isolated
|
||||
路由:`/platform-cover` · 模式:quick
|
||||
合计 38 · ✅ works 35 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 2 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 折叠侧栏
|
||||
- 全部商品 7 个
|
||||
@@ -16,5 +16,5 @@
|
||||
- 平台
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 立即生成 (预估 ¥2.00) `button`
|
||||
- 立即生成 (预估 ¥6.00) `button`
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "product-create",
|
||||
"route": "/products/new",
|
||||
"url": "http://127.0.0.1:5173/products/new",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 31,
|
||||
"works": 31,
|
||||
"works": 25,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,7 +82,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -118,7 +118,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 39,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -172,7 +172,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -190,8 +190,8 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 51,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
@@ -226,7 +226,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -304,13 +304,13 @@
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "创建时间",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "全部分类",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
@@ -331,159 +331,80 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "露露同款裸感瑜伽裤 · 1200×800露露同款裸感瑜伽裤运动户外2026-06-08 创建素材",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "透真清透物理防晒霜 · 1200×800透真清透物理防晒霜美妆个护2026-06-08 创建素材",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装 · 1200×800滋啦速食牛肉面 · 6 桶装食品饮料2026-",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "透真玻尿酸补水面膜 · 1200×800透真玻尿酸补水面膜美妆个护2026-05-29 创建素材",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "桥接测试补水面膜 20260529 · 1200×800桥接测试补水面膜 20260529美妆个",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "三顿半同款冻干咖啡粉 · 1200×800三顿半同款冻干咖啡粉食品饮料2026-06-08 创建",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "小熊 4L 可视空气炸锅 · 1200×800小熊 4L 可视空气炸锅家居家电2026-06-0",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "x",
|
||||
"label": "关闭",
|
||||
"cls": "clear-sel",
|
||||
"label": "清空",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 16,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "danger",
|
||||
"label": "删除选中",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "退出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "退出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "select",
|
||||
@@ -501,7 +422,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "pf-upload-zone",
|
||||
@@ -519,7 +440,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn-guide",
|
||||
@@ -537,7 +458,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
@@ -554,36 +475,48 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "创建商品",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创建 素材 4",
|
||||
"空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-05-03 创建 ",
|
||||
"咖啡冻干粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05 创建 素",
|
||||
"防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创建 素材 7",
|
||||
"速食牛肉面 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 2026-05-10 ",
|
||||
"蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码 3C 2026-05-1",
|
||||
"补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创建 素材 "
|
||||
"管理商品",
|
||||
"商品分类",
|
||||
"关闭",
|
||||
"美妆个护",
|
||||
"使用指南",
|
||||
"取消",
|
||||
"创建商品"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
# 功能审计 · product-create
|
||||
|
||||
路由:`/products/new` · 模式:isolated
|
||||
合计 31 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
路由:`/products/new` · 模式:quick
|
||||
合计 31 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 1
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创建 素材 4
|
||||
- 空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-05-03 创建
|
||||
- 咖啡冻干粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05 创建 素
|
||||
- 防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创建 素材 7
|
||||
- 速食牛肉面 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 2026-05-10
|
||||
- 蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码 3C 2026-05-1
|
||||
- 补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创建 素材
|
||||
- 管理商品
|
||||
- 商品分类
|
||||
- 关闭
|
||||
- 美妆个护
|
||||
- 使用指南
|
||||
- 取消
|
||||
- 创建商品
|
||||
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
"name": "product-detail",
|
||||
"route": "/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"url": "http://127.0.0.1:5173/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 29,
|
||||
"works": 28,
|
||||
"works": 22,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 6,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -270,17 +270,17 @@
|
||||
"idx": 14,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ov-edit.ov-edit-single",
|
||||
"label": "编辑商品信息",
|
||||
"cls": "ov-tri-close",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -298,8 +298,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -419,14 +419,14 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "filter",
|
||||
"label": "全部类型",
|
||||
"label": "最新更新",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
@@ -434,120 +434,50 @@
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "filter",
|
||||
"label": "最新生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"全部类型",
|
||||
"通过",
|
||||
"网格视图",
|
||||
"列表视图"
|
||||
"列表视图",
|
||||
"最新生成"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
# 功能审计 · product-detail
|
||||
|
||||
路由:`/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f` · 模式:isolated
|
||||
合计 29 · ✅ works 28 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
路由:`/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f` · 模式:quick
|
||||
合计 29 · ✅ works 22 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)6 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 全部类型
|
||||
- 通过
|
||||
- 网格视图
|
||||
- 列表视图
|
||||
- 最新生成
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
"name": "products",
|
||||
"route": "/products",
|
||||
"url": "http://127.0.0.1:5173/products",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 25,
|
||||
"works": 25,
|
||||
"works": 24,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
@@ -28,7 +28,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,7 +82,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -118,7 +118,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 39,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -172,7 +172,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -190,8 +190,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 51,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
@@ -226,7 +226,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -304,13 +304,13 @@
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "创建时间",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "全部分类",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
@@ -331,100 +331,93 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "露露同款裸感瑜伽裤 · 1200×800露露同款裸感瑜伽裤运动户外2026-06-08 创建素材",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "clear-sel",
|
||||
"label": "清空",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"self": true,
|
||||
"mutations": 16,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "透真清透物理防晒霜 · 1200×800透真清透物理防晒霜美妆个护2026-06-08 创建素材",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "danger",
|
||||
"label": "删除选中",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装 · 1200×800滋啦速食牛肉面 · 6 桶装食品饮料2026-",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "退出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "透真玻尿酸补水面膜 · 1200×800透真玻尿酸补水面膜美妆个护2026-05-29 创建素材",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "退出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "桥接测试补水面膜 20260529 · 1200×800桥接测试补水面膜 20260529美妆个",
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "select",
|
||||
"label": "美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -432,50 +425,45 @@
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "三顿半同款冻干咖啡粉 · 1200×800三顿半同款冻干咖啡粉食品饮料2026-06-08 创建",
|
||||
"cls": "pf-upload-zone",
|
||||
"label": "点击上传或拖拽图片到此处// 支持 JPG、PNG 格式,建议尺寸 800×800 以上,大小不",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "小熊 4L 可视空气炸锅 · 1200×800小熊 4L 可视空气炸锅家居家电2026-06-0",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn-guide",
|
||||
"label": "使用指南",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"self": true,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创建 素材 4",
|
||||
"空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-05-03 创建 ",
|
||||
"咖啡冻干粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05 创建 素",
|
||||
"防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创建 素材 7",
|
||||
"速食牛肉面 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 2026-05-10 ",
|
||||
"蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码 3C 2026-05-1",
|
||||
"补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创建 素材 "
|
||||
"管理商品",
|
||||
"商品分类"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
# 功能审计 · products
|
||||
|
||||
路由:`/products` · 模式:isolated
|
||||
合计 25 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
路由:`/products` · 模式:quick
|
||||
合计 25 · ✅ works 24 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 1
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创建 素材 4
|
||||
- 空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-05-03 创建
|
||||
- 咖啡冻干粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05 创建 素
|
||||
- 防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创建 素材 7
|
||||
- 速食牛肉面 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 2026-05-10
|
||||
- 蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码 3C 2026-05-1
|
||||
- 补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创建 素材
|
||||
- 管理商品
|
||||
- 商品分类
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "projects-new",
|
||||
"route": "/projects/new",
|
||||
"url": "http://127.0.0.1:5173/projects/new",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 15,
|
||||
"works": 15,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -208,7 +208,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 20,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -287,18 +287,10 @@
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"1 选择商品 未选择",
|
||||
"2 项目配置 时长 · 风格 · 人物",
|
||||
"创建新商品 // 在此添加一个新商品",
|
||||
"透真玻尿酸补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创",
|
||||
"透真清透物理防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创",
|
||||
"三顿半同款冻干咖啡粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05",
|
||||
"南卡 Lite Pro 蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码 ",
|
||||
"滋啦速食牛肉面 · 6 桶装 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 20",
|
||||
"小熊 4L 可视空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-0",
|
||||
"露露同款裸感瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创"
|
||||
"2 项目配置 时长 · 风格 · 人物"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,23 +1,15 @@
|
||||
# 功能审计 · projects-new
|
||||
|
||||
路由:`/projects/new` · 模式:isolated
|
||||
路由:`/projects/new` · 模式:quick
|
||||
合计 15 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 1 选择商品 未选择
|
||||
- 2 项目配置 时长 · 风格 · 人物
|
||||
- 创建新商品 // 在此添加一个新商品
|
||||
- 透真玻尿酸补水面膜 · 1200×800 透真玻尿酸补水面膜 美妆个护 2026-05-15 创
|
||||
- 透真清透物理防晒霜 · 1200×800 透真清透物理防晒霜 美妆个护 2026-05-08 创
|
||||
- 三顿半同款冻干咖啡粉 · 1200×800 三顿半同款冻干咖啡粉 食品饮料 2026-05-05
|
||||
- 南卡 Lite Pro 蓝牙耳机 · 1200×800 南卡 Lite Pro 蓝牙耳机 数码
|
||||
- 滋啦速食牛肉面 · 6 桶装 · 1200×800 滋啦速食牛肉面 · 6 桶装 食品饮料 20
|
||||
- 小熊 4L 可视空气炸锅 · 1200×800 小熊 4L 可视空气炸锅 家居家电 2026-0
|
||||
- 露露同款裸感瑜伽裤 · 1200×800 露露同款裸感瑜伽裤 运动户外 2026-04-30 创
|
||||
|
||||
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "projects",
|
||||
"route": "/projects",
|
||||
"url": "http://127.0.0.1:5173/projects",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 22,
|
||||
"works": 15,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 2,
|
||||
"skipped": 9,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"mutations": 38,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -286,182 +286,78 @@
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab.active",
|
||||
"label": "全部 6",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "进行中 5",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "已完成 1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "失败 0",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "商品品类",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "脚本来源",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "创建时间",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "网格",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "列表",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"9:16 补水面膜 · 痛点种草 · v36 镜 · 0-15s 透真补水面膜 AI 全生 3/",
|
||||
"9:16 速食牛肉面 · 加班治愈4 镜 · 0-12s 滋啦速食 · 6 桶装 一句话主题 2",
|
||||
"删除项目",
|
||||
"9:16 透真防晒 · 通勤对比6 镜 · 0-18s 透真清透防晒霜 AI 全生 4/5 视频",
|
||||
"9:16 咖啡冻干 · 早八剧情5 镜 · 0-15s 三顿半同款冻干 一句话主题 3/5 故事",
|
||||
"9:16 蓝牙耳机 · 开箱测评5 镜 · 0-15s 南卡 Lite Pro 自带脚本 5/5",
|
||||
"9:16 瑜伽裤 · 通勤穿搭5 镜 · 0-15s 露露同款瑜伽裤 AI 全生 5/5 已完成",
|
||||
"管理项目",
|
||||
"新建项目",
|
||||
"商品品类",
|
||||
"脚本来源",
|
||||
"创建时间",
|
||||
"网格",
|
||||
"列表",
|
||||
"全部 6",
|
||||
"进行中 4",
|
||||
"已完成 2",
|
||||
"失败 0",
|
||||
"基础资产生成中",
|
||||
"脚本待生成",
|
||||
"故事板生成中",
|
||||
"资产生成中",
|
||||
"视频生成 4/6",
|
||||
"故事板生成失败"
|
||||
"视频片段生成中"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,24 +1,28 @@
|
||||
# 功能审计 · projects
|
||||
|
||||
路由:`/projects` · 模式:isolated
|
||||
合计 24 · ✅ works 22 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 2 · ⚪ disabled 0
|
||||
路由:`/projects` · 模式:quick
|
||||
合计 24 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 9:16 补水面膜 · 痛点种草 · v36 镜 · 0-15s 透真补水面膜 AI 全生 3/
|
||||
- 9:16 速食牛肉面 · 加班治愈4 镜 · 0-12s 滋啦速食 · 6 桶装 一句话主题 2
|
||||
- 删除项目
|
||||
- 9:16 透真防晒 · 通勤对比6 镜 · 0-18s 透真清透防晒霜 AI 全生 4/5 视频
|
||||
- 9:16 咖啡冻干 · 早八剧情5 镜 · 0-15s 三顿半同款冻干 一句话主题 3/5 故事
|
||||
- 9:16 蓝牙耳机 · 开箱测评5 镜 · 0-15s 南卡 Lite Pro 自带脚本 5/5
|
||||
- 9:16 瑜伽裤 · 通勤穿搭5 镜 · 0-15s 露露同款瑜伽裤 AI 全生 5/5 已完成
|
||||
- 管理项目
|
||||
- 新建项目
|
||||
- 商品品类
|
||||
- 脚本来源
|
||||
- 创建时间
|
||||
- 网格
|
||||
- 列表
|
||||
- 全部 6
|
||||
- 进行中 4
|
||||
- 已完成 2
|
||||
- 失败 0
|
||||
- 基础资产生成中
|
||||
- 脚本待生成
|
||||
- 故事板生成中
|
||||
- 资产生成中
|
||||
- 视频生成 4/6
|
||||
- 故事板生成失败
|
||||
- 视频片段生成中
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
|
||||
[function-audit] dashboard … dead 0 / 25, missing 18
|
||||
[function-audit] products … dead 0 / 25, missing 6
|
||||
[function-audit] product-detail … dead 0 / 29, missing 9
|
||||
[function-audit] product-create … dead 0 / 31, missing 11
|
||||
[function-audit] projects … dead 0 / 24, missing 19
|
||||
[function-audit] projects-new … dead 0 / 15, missing 6
|
||||
[function-audit] pipeline … dead 0 / 34, missing 15
|
||||
[function-audit] library … dead 0 / 38, missing 10
|
||||
[function-audit] account … dead 0 / 26, missing 4
|
||||
[function-audit] team … dead 0 / 17, missing 4
|
||||
[function-audit] messages … dead 0 / 28, missing 9
|
||||
[function-audit] asset-factory … dead 0 / 24, missing 5
|
||||
[function-audit] image-optimize … dead 2 / 24, missing 12
|
||||
[function-audit] model-photo … dead 0 / 32, missing 8
|
||||
[function-audit] model-photo-demo-a … dead 0 / 38, missing 5
|
||||
[function-audit] model-photo-demo-b … dead 0 / 37, missing 5
|
||||
[function-audit] platform-cover … dead 0 / 38, missing 8
|
||||
[function-audit] settings … dead 0 / 26, missing 9
|
||||
|
||||
[function-audit] summary
|
||||
┌─────────┬──────────────────────┬───────┬───────┬──────┬───────┬─────────┐
|
||||
│ (index) │ page │ total │ works │ dead │ error │ missing │
|
||||
├─────────┼──────────────────────┼───────┼───────┼──────┼───────┼─────────┤
|
||||
│ 0 │ 'dashboard' │ 25 │ 20 │ 0 │ 0 │ 18 │
|
||||
│ 1 │ 'products' │ 25 │ 24 │ 0 │ 0 │ 6 │
|
||||
│ 2 │ 'product-detail' │ 29 │ 22 │ 0 │ 0 │ 9 │
|
||||
│ 3 │ 'product-create' │ 31 │ 25 │ 0 │ 0 │ 11 │
|
||||
│ 4 │ 'projects' │ 24 │ 15 │ 0 │ 0 │ 19 │
|
||||
│ 5 │ 'projects-new' │ 15 │ 15 │ 0 │ 0 │ 6 │
|
||||
│ 6 │ 'pipeline' │ 34 │ 26 │ 0 │ 0 │ 15 │
|
||||
│ 7 │ 'library' │ 38 │ 23 │ 0 │ 0 │ 10 │
|
||||
│ 8 │ 'account' │ 26 │ 20 │ 0 │ 0 │ 4 │
|
||||
│ 9 │ 'team' │ 17 │ 17 │ 0 │ 0 │ 4 │
|
||||
│ 10 │ 'messages' │ 28 │ 20 │ 0 │ 0 │ 9 │
|
||||
│ 11 │ 'asset-factory' │ 24 │ 23 │ 0 │ 0 │ 5 │
|
||||
│ 12 │ 'image-optimize' │ 24 │ 21 │ 2 │ 0 │ 12 │
|
||||
│ 13 │ 'model-photo' │ 32 │ 31 │ 0 │ 0 │ 8 │
|
||||
│ 14 │ 'model-photo-demo-a' │ 38 │ 33 │ 0 │ 0 │ 5 │
|
||||
│ 15 │ 'model-photo-demo-b' │ 37 │ 34 │ 0 │ 0 │ 5 │
|
||||
│ 16 │ 'platform-cover' │ 38 │ 35 │ 0 │ 0 │ 8 │
|
||||
│ 17 │ 'settings' │ 26 │ 25 │ 0 │ 0 │ 9 │
|
||||
└─────────┴──────────────────────┴───────┴───────┴──────┴───────┴─────────┘
|
||||
|
||||
报告:core/qa/function-audit/output/summary.md
|
||||
@@ -2,15 +2,15 @@
|
||||
"name": "settings",
|
||||
"route": "/settings",
|
||||
"url": "http://127.0.0.1:5173/settings",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 26,
|
||||
"works": 25,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"skipped": 1,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 15,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -280,7 +280,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 47,
|
||||
"mutations": 48,
|
||||
"api": 11
|
||||
}
|
||||
},
|
||||
@@ -293,13 +293,13 @@
|
||||
"href": "#sec-profile",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -317,7 +317,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -353,7 +353,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -370,8 +370,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
"mutations": 21,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -388,16 +388,70 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"mutations": 2,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "select",
|
||||
"label": "system",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "select",
|
||||
"label": "zh",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "select",
|
||||
"label": "standard",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-sm",
|
||||
"label": "上传新头像",
|
||||
"cls": "x.modal-x",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -406,87 +460,26 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "恢复默认",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 45,
|
||||
"api": 11
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "验证",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "更换",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 2,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "row-link",
|
||||
"label": "管理团队 →",
|
||||
"href": "#team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"账户"
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"上传新头像",
|
||||
"恢复默认",
|
||||
"验证",
|
||||
"更换",
|
||||
"管理团队 →"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
# 功能审计 · settings
|
||||
|
||||
路由:`/settings` · 模式:isolated
|
||||
合计 26 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
路由:`/settings` · 模式:quick
|
||||
合计 26 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 上传新头像
|
||||
- 恢复默认
|
||||
- 验证
|
||||
- 更换
|
||||
- 管理团队 →
|
||||
|
||||
|
||||
@@ -1,26 +1,158 @@
|
||||
[
|
||||
{
|
||||
"page": "asset-factory",
|
||||
"page": "dashboard",
|
||||
"blocked": 0,
|
||||
"total": 24,
|
||||
"total": 25,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"missing": 18
|
||||
},
|
||||
{
|
||||
"page": "products",
|
||||
"blocked": 0,
|
||||
"total": 25,
|
||||
"works": 24,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"missing": 6
|
||||
},
|
||||
{
|
||||
"page": "product-detail",
|
||||
"blocked": 0,
|
||||
"total": 29,
|
||||
"works": 22,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 2,
|
||||
"missing": 4
|
||||
"skipped": 6,
|
||||
"noop": 1,
|
||||
"missing": 9
|
||||
},
|
||||
{
|
||||
"page": "image-optimize",
|
||||
"page": "product-create",
|
||||
"blocked": 0,
|
||||
"total": 31,
|
||||
"works": 25,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"missing": 11
|
||||
},
|
||||
{
|
||||
"page": "projects",
|
||||
"blocked": 0,
|
||||
"total": 24,
|
||||
"works": 24,
|
||||
"works": 15,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 9,
|
||||
"noop": 0,
|
||||
"missing": 19
|
||||
},
|
||||
{
|
||||
"page": "projects-new",
|
||||
"blocked": 0,
|
||||
"total": 15,
|
||||
"works": 15,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"missing": 6
|
||||
},
|
||||
{
|
||||
"page": "pipeline",
|
||||
"blocked": 0,
|
||||
"total": 34,
|
||||
"works": 26,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 8,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"missing": 15
|
||||
},
|
||||
{
|
||||
"page": "library",
|
||||
"blocked": 0,
|
||||
"total": 38,
|
||||
"works": 23,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 13,
|
||||
"noop": 1,
|
||||
"missing": 10
|
||||
},
|
||||
{
|
||||
"page": "account",
|
||||
"blocked": 0,
|
||||
"total": 26,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 5,
|
||||
"noop": 1,
|
||||
"missing": 4
|
||||
},
|
||||
{
|
||||
"page": "team",
|
||||
"blocked": 0,
|
||||
"total": 17,
|
||||
"works": 17,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 0,
|
||||
"missing": 4
|
||||
},
|
||||
{
|
||||
"page": "messages",
|
||||
"blocked": 0,
|
||||
"total": 28,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 7,
|
||||
"noop": 1,
|
||||
"missing": 9
|
||||
},
|
||||
{
|
||||
"page": "asset-factory",
|
||||
"blocked": 0,
|
||||
"total": 24,
|
||||
"works": 23,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"missing": 5
|
||||
},
|
||||
{
|
||||
"page": "image-optimize",
|
||||
"blocked": 0,
|
||||
"total": 24,
|
||||
"works": 21,
|
||||
"dead": 2,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"missing": 12
|
||||
},
|
||||
{
|
||||
@@ -33,29 +165,29 @@
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"missing": 7
|
||||
"missing": 8
|
||||
},
|
||||
{
|
||||
"page": "model-photo-demo-a",
|
||||
"blocked": 0,
|
||||
"total": 37,
|
||||
"total": 38,
|
||||
"works": 33,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 1,
|
||||
"noop": 3,
|
||||
"skipped": 4,
|
||||
"noop": 1,
|
||||
"missing": 5
|
||||
},
|
||||
{
|
||||
"page": "model-photo-demo-b",
|
||||
"blocked": 0,
|
||||
"total": 37,
|
||||
"works": 36,
|
||||
"works": 34,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 2,
|
||||
"noop": 1,
|
||||
"missing": 5
|
||||
},
|
||||
@@ -70,5 +202,17 @@
|
||||
"skipped": 1,
|
||||
"noop": 2,
|
||||
"missing": 8
|
||||
},
|
||||
{
|
||||
"page": "settings",
|
||||
"blocked": 0,
|
||||
"total": 26,
|
||||
"works": 25,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 1,
|
||||
"noop": 0,
|
||||
"missing": 9
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,15 +1,27 @@
|
||||
# 功能审计汇总
|
||||
|
||||
生成时间:2026-06-09T07:56:41.981Z · 模式:isolated
|
||||
生成时间:2026-06-10T09:29:34.278Z · 模式:quick
|
||||
|
||||
| 页面 | 合计 | ✅works | ❌dead | 🛑error | ⏭skip | 🔍missing | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| asset-factory | 24 | 22 | **0** | 0 | 0 | 4 | |
|
||||
| image-optimize | 24 | 24 | **0** | 0 | 0 | 12 | |
|
||||
| model-photo | 32 | 31 | **0** | 0 | 0 | 7 | |
|
||||
| model-photo-demo-a | 37 | 33 | **0** | 0 | 1 | 5 | |
|
||||
| model-photo-demo-b | 37 | 36 | **0** | 0 | 0 | 5 | |
|
||||
| dashboard | 25 | 20 | **0** | 0 | 5 | 18 | |
|
||||
| products | 25 | 24 | **0** | 0 | 0 | 6 | |
|
||||
| product-detail | 29 | 22 | **0** | 0 | 6 | 9 | |
|
||||
| product-create | 31 | 25 | **0** | 0 | 5 | 11 | |
|
||||
| projects | 24 | 15 | **0** | 0 | 9 | 19 | |
|
||||
| projects-new | 15 | 15 | **0** | 0 | 0 | 6 | |
|
||||
| pipeline | 34 | 26 | **0** | 0 | 0 | 15 | |
|
||||
| library | 38 | 23 | **0** | 0 | 13 | 10 | |
|
||||
| account | 26 | 20 | **0** | 0 | 5 | 4 | |
|
||||
| team | 17 | 17 | **0** | 0 | 0 | 4 | |
|
||||
| messages | 28 | 20 | **0** | 0 | 7 | 9 | |
|
||||
| asset-factory | 24 | 23 | **0** | 0 | 0 | 5 | |
|
||||
| image-optimize | 24 | 21 | **2** | 0 | 0 | 12 | |
|
||||
| model-photo | 32 | 31 | **0** | 0 | 0 | 8 | |
|
||||
| model-photo-demo-a | 38 | 33 | **0** | 0 | 4 | 5 | |
|
||||
| model-photo-demo-b | 37 | 34 | **0** | 0 | 2 | 5 | |
|
||||
| platform-cover | 38 | 35 | **0** | 0 | 1 | 8 | |
|
||||
| settings | 26 | 25 | **0** | 0 | 1 | 9 | |
|
||||
|
||||
- ⛔blocked = 页面始终落登录页/未就绪(后端或远程库不可用),**未审计**,非「0 缺陷」。修好后端再单独 `--only <page>` 复跑。
|
||||
- ❌dead = 点了五路探针(URL/浮层/自身状态/网络/DOM)全无反应,优先修。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "team",
|
||||
"route": "/team",
|
||||
"url": "http://127.0.0.1:5173/team",
|
||||
"mode": "isolated",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 17,
|
||||
"works": 17,
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -136,7 +136,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -154,7 +154,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -191,7 +191,7 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -244,8 +244,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -278,9 +278,9 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -296,9 +296,9 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -314,20 +314,17 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"李 小李的店",
|
||||
"余额 ¥327.40",
|
||||
"账户",
|
||||
"编辑",
|
||||
"重置密码",
|
||||
"移出"
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
# 功能审计 · team
|
||||
|
||||
路由:`/team` · 模式:isolated
|
||||
路由:`/team` · 模式:quick
|
||||
合计 17 · ✅ works 17 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- 李 小李的店
|
||||
- 余额 ¥327.40
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 编辑
|
||||
- 重置密码
|
||||
- 移出
|
||||
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
# AirShelf/core 全站测试报告 · 2026-06-10
|
||||
|
||||
> 依据 `test-agent.md` 四层测试体系(A 代码 → B/E 浏览器 → D 端到端 → C 报告)。
|
||||
> 数据策略:**全真实数据**(真实后端 127.0.0.1:8010 + 真实 SQLite,禁 mock)。
|
||||
> 不重新生成视频(用户指定);其余链路全测,含团队 / 成员 / 消费多用户场景。
|
||||
|
||||
## 测试概览
|
||||
|
||||
| 层 | 范围 | 结果 |
|
||||
|---|---|---|
|
||||
| A 代码 | 后端 Django test + 前端 tsc + vite build | ✅ 后端 10/10(原 8 + 新增 2 充值权限回归)· tsc 0 错 · build 成功 |
|
||||
| B/E 浏览器 | 登录/工作台/商品/项目/资产/图片生成/团队/消费/消息/设置 + pipeline 五阶段 | ✅ 逐页控制台无 P0 报错,截图人审通过 |
|
||||
| D 端到端 | 多用户(owner+成员)权限 / 数据隔离 / 限额 / 账单归属 | ✅ 发现 1 个 P0 越权 bug 已修 |
|
||||
| E 移动端 | iPhone 13 视口逐页 | ✅ 发现 2 个移动端 bug 已修 |
|
||||
|
||||
**判定:首轮发现 9 个 bug(8 修复 + 1 确认非缺陷),全部复验通过。**
|
||||
|
||||
---
|
||||
|
||||
## Bug 清单(全部已修复并复验)
|
||||
|
||||
| # | 严重度 | 类型 | 描述 | 定位 | 复验 |
|
||||
|---|---|---|---|---|---|
|
||||
| 1 | **P0** | 权限越权 | **普通成员能给团队充值**:`POST /api/billing/recharge/` 只校验登录不校验角色,成员调用返回 201 并真实加钱(实测余额 ¥14906→¥15006) | `apps/billing/views.py:recharge` | 成员调用→403;owner→201;加回归测试 2 条 |
|
||||
| 2 | P1 | 功能缺失 | **设置页「退出登录」点确认无反应**:`onLogout` 没从 App 传进 SettingsPage,确认按钮只关弹窗不退登 | `App.tsx` + `routes/settings.tsx` | 确认→清 token→跳 /login ✓ |
|
||||
| 3 | P1 | 移动端可用性 | **窄屏无法导航**:`@media(max-width:1100px)` 把侧栏和收窄键都 `display:none`,移动端没有任何菜单入口 | `design-restraint.css` + `components/app-shell.tsx` | 新增汉堡键+抽屉+遮罩,点导航跳转并自动收起 ✓ |
|
||||
| 4 | P1 | 移动端布局 | **宽数据表被裁切**:项目列表(715px)/成员表/账单表在窄屏溢出且无横向滚动,右侧列(状态/操作)点不到 | `design-restraint.css` + projects/team/account.tsx | 包 `overflow-x:auto` 容器,表内横向滚动,页面不再侧滑 ✓ |
|
||||
| 5 | P2 | 文案 | **登录失败提示英文**:错误密码/空提交弹后端原文 `invalid credentials` | `routes/auth-screen.tsx` | 映射成「邮箱或密码不正确」✓ |
|
||||
| 6 | P2 | 安全/体验 | **登录页预填设计稿假账号** `li@shop.com / demo-1234`,真实环境误导 | `routes/auth-screen.tsx` | 字段从空开始 + 前端必填校验 ✓ |
|
||||
| 7 | P2 | 体验 | **新建项目默认名固定 v1**:连建多个项目重名,易混淆 | `routes/projects.tsx` | 按已有项目自动递增 v1→v2…实测「南卡·痛点种草·v2」✓ |
|
||||
| 8 | P2 | 体验 | **慢操作无反馈**:新建项目「开始」、上传资产「上传资产」按钮点击后无 loading 态,用户疑似没点上 | projects.tsx / library.tsx | 加「创建中…」「上传中…」禁用态 ✓ |
|
||||
| 9 | P2 | 体验 | **建成员失败丢表单**:用户名重复等失败时弹窗仍关闭并清空,要重填 | `routes/team.tsx` | 失败保留弹窗与已填内容,仅成功才清 ✓ |
|
||||
|
||||
> 移动端统计卡标签竖排("总/项/目")一并修复(加 `.stat .lbl { white-space: nowrap }`)。
|
||||
|
||||
---
|
||||
|
||||
## D 层 · 多用户 / 消费链路验证(真实数据)
|
||||
|
||||
| 验证项 | 方法 | 结果 |
|
||||
|---|---|---|
|
||||
| 建成员 | 团队页创建 `qa-member-0610`,月限额 ¥1 | ✅ 落库,成员表出现 |
|
||||
| 成员登录 | 该成员凭证登录 | ✅ 进工作台,身份=成员、团队=同团队 |
|
||||
| 数据共享(同团队) | 成员可见团队 8 商品 | ✅ TeamScopedViewSetMixin 按 team 过滤 |
|
||||
| 数据隔离(跨团队) | 各团队 product/project queryset 按 team 隔离 | ✅ 结构性强隔离 |
|
||||
| 权限·改他人限额 | 成员 PATCH owner 限额 | ✅ 403 |
|
||||
| 权限·建成员 | 成员 POST members | ✅ 403 |
|
||||
| 权限·充值 | 成员 POST recharge | ❌→✅ **修复前 201(bug#1),修复后 403** |
|
||||
| 月限额拦截 | `_enforce_member_monthly_limit` 限额 ¥1 | ✅ ¥1 任务放行、¥2 拦截 |
|
||||
| 账单归属 | ledger 带 `user`/`user_label`,成员列消费可追溯 | ✅ 每笔扣费挂触发人 |
|
||||
|
||||
测试数据已清理:QA 成员已删、误充 ¥100 已回退(余额复原 ¥14906)、QA 测试商品/项目/音频资产均删除。
|
||||
|
||||
---
|
||||
|
||||
## A 层 · 代码测试输出
|
||||
|
||||
```
|
||||
后端:python manage.py test --settings=airshelf.settings.test
|
||||
Ran 10 tests — OK(新增 RechargePermissionTests: owner 可充值 / 成员 403 余额不变)
|
||||
前端:tsc --noEmit → 0 errors
|
||||
vite build → 成功
|
||||
```
|
||||
|
||||
## 环境
|
||||
|
||||
| 服务 | 状态 | 说明 |
|
||||
|---|---|---|
|
||||
| 后端 Django | ✅ 127.0.0.1:8010 | .venv/bin/python · SQLite · StatReloader 热载 |
|
||||
| 前端 Vite | ✅ 127.0.0.1:5173 | 真实 /api 代理 |
|
||||
| Playwright | ✅ headed chromium | MCP 驱动,iPhone 13 视口测移动端 |
|
||||
|
||||
---
|
||||
|
||||
## 资金核算深度审计(2026-06-11 补)
|
||||
|
||||
> 用户追问"数据流转、金额核算有没有出错"。写了核算审计脚本 `qa/audit_billing.py`,对真实 DB **17 个团队账户**逐条验证 8 项账目不变量。
|
||||
|
||||
| 不变量 | 含义 | 结果 |
|
||||
|---|---|---|
|
||||
| I1 余额=流水终点 | `account.balance` == 末条动账流水 `balance_after` | ✅ 全过 |
|
||||
| I2 冻结自洽 | `reserved_balance` == Σ(ACTIVE 预留) | ✅ 全过 |
|
||||
| I3 非负&可用 | balance/reserved ≥ 0 且 balance ≥ reserved | ✅ 全过 |
|
||||
| I4 预留闭环 | reservation 状态与扣费/释放流水一致,扣费 ≤ 预留 | ✅ 全过 |
|
||||
| I5 失败不扣费 | 失败/取消 task 的预留不得为 CHARGED | ✅ 全过 |
|
||||
| I6 无重复扣费 | 同 task 不得多扣(净额=预留) | ✅ 全过 |
|
||||
| **I7 逐笔差分自洽** | **每条 `balance_after` == 前一条 ± 本笔金额** | ✅ 全过 |
|
||||
| I8 流水完整 | 开户额度有 genesis 凭证(可从首条对账) | ✅ 修复后全过 |
|
||||
|
||||
**结论:金额核算零错误。** 每个账户余额、冻结、逐笔差分账都精确自洽,无多扣/少扣/重复扣/冻结泄漏。
|
||||
|
||||
### 审计中查实的两件事
|
||||
|
||||
1. **历史双扣(已自愈,账平)**:`E2E 桥接测试团队` task `8b9745b8` 在 2026-06-10 03:08:25 同秒两条 ¥1 扣费(并发竞态历史脏数据),但 06:32 已有一条 `adjustment +¥1` 回冲,净扣 ¥1=预留 ¥1。当前 `charge_reserved_credit` 已加 `select_for_update` 锁内重读幂等,不会复发。
|
||||
|
||||
2. **Bug #10(P1 可审计性)· 开户赠送额度不进流水**:注册开户(`accounts/serializers.py`)给 `DEFAULT_TRIAL_CREDITS` 试用额度直接写进 `balance`,**不记任何 ledger**。后果:这笔钱在账单流水里查无凭证,无法对账、无法向用户解释余额来源(17 个账户全中)。
|
||||
- **余额数字本身没错**(初始额度 + 流水净额 = 真实余额,逐团队核对分毫不差),纯属可审计性缺陷。
|
||||
- **修复**:开户时补记一条 `recharge` 赠送流水(`balance_after`=赠送额),加回归测试 `test_register_trial_grant_is_recorded_in_ledger`;历史 17 个账户用 `qa/backfill_genesis_ledger.py` 回填 genesis 凭证(**只补凭证,不动余额**)。回填后审计 I8 全过。
|
||||
|
||||
> 复跑审计:`cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development .venv/bin/python ../qa/audit_billing.py` → `✓ 全部账户账目自洽,无金额核算错误`。后端测试 11/11。
|
||||
|
||||
---
|
||||
|
||||
## 遗留 / 未测(用户指定跳过)
|
||||
|
||||
- **视频生成 / 拼接导出**:用户指定不重跑。pipeline 五阶段页面渲染、弹窗、控制台已查,生成动作本身未触发。
|
||||
- 真实第三方(火山 ARK / TOS)出图出片未联网触发。
|
||||
Reference in New Issue
Block a user