fix(billing): 删任务/删项目级联吞 ACTIVE 预留致 reserved_balance 永久冻结(审计 I2)
- 根因: CreditReservation.task 是 OneToOneField(CASCADE), AITask.project 也是 CASCADE
—— 删项目→级联删任务→ACTIVE 预留行被吞, 账户冻结份额永不归还(实测 4 账户漂移共 ¥42,
且随删项目持续增长)
- 修法: billing/signals.py 挂 AITask pre_delete, 删除前先 release_credit 释放(级联同样
触发, release 自带行锁+幂等); apps.py ready() 接线
- 回归测试 x3: 直删任务/删项目级联/已扣费不重复释放
- qa/repair_reserved_drift.py: 存量漂移回填脚本(dry-run 默认, --apply 落 RELEASE 流水),
已对线上 4 账户执行并复验清零
- qa/function-audit/output: 本轮 18 页模拟点击审计报告(0 真死按钮 0 JS 报错)
验证: 后端测试 213/213 通过, django check 无警告
补齐 aab4d7e: 该提交带走了 signals.py 之外的测试轮改动, 信号挂载点与回归测试在本提交收口
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,3 +5,6 @@ class BillingConfig(AppConfig):
|
||||
default_auto_field = "django.db.models.BigAutoField"
|
||||
name = "apps.billing"
|
||||
|
||||
def ready(self):
|
||||
from . import signals # noqa: F401 — 挂 AITask pre_delete 预留释放守护
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
"""跨 app 账目守护信号。
|
||||
|
||||
CreditReservation.task 是 OneToOneField(on_delete=CASCADE):AITask 被硬删(用户删项目
|
||||
→ AITask.project CASCADE 级联删任务、或直接删任务)时,预留行会被一并删掉。若该预留
|
||||
还处于 ACTIVE,account.reserved_balance 里冻结的份额就永远退不回来 —— 这是资金审计
|
||||
I2「冻结不平」的根因(ZWQ-Test / 演示团队实测漂移 ¥10 / ¥30,且随测试删项目持续增长)。
|
||||
|
||||
修法:在 AITask 删除前(pre_delete,级联删除同样触发)把仍 ACTIVE 的预留正常走
|
||||
release_credit 释放 —— 退还冻结、落 RELEASE 流水,然后再让级联删掉预留行。
|
||||
release_credit 自带行锁 + 幂等(非 ACTIVE 直接返回),并发安全。
|
||||
"""
|
||||
from django.db.models.signals import pre_delete
|
||||
from django.dispatch import receiver
|
||||
|
||||
|
||||
@receiver(pre_delete, sender="ai.AITask", dispatch_uid="billing.release_reservation_before_task_delete")
|
||||
def release_reservation_before_task_delete(sender, instance, **kwargs):
|
||||
from apps.billing.models import CreditReservation
|
||||
from apps.billing.services.ledger import release_credit
|
||||
|
||||
reservation = CreditReservation.objects.filter(
|
||||
task=instance, status=CreditReservation.Status.ACTIVE
|
||||
).first()
|
||||
if reservation is not None:
|
||||
release_credit(reservation=reservation, reason="任务删除,释放未结预留")
|
||||
@@ -59,6 +59,48 @@ class CreditLedgerTests(TestCase):
|
||||
self.assertEqual(self.account.reserved_balance, Decimal("0.0000"))
|
||||
self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 1)
|
||||
|
||||
def test_task_delete_releases_active_reservation(self):
|
||||
"""回归:CreditReservation.task 是 CASCADE,直接删任务会把 ACTIVE 预留行吞掉,
|
||||
reserved_balance 冻结永不归还(审计 I2 冻结不平根因)。pre_delete 信号必须先释放。"""
|
||||
reserve_credit(team=self.team, user=self.user, task=self.task, amount=Decimal("10.0000"))
|
||||
self.task.delete()
|
||||
self.account.refresh_from_db()
|
||||
|
||||
self.assertEqual(self.account.reserved_balance, Decimal("0.0000"))
|
||||
self.assertEqual(self.account.balance, Decimal("100.0000"))
|
||||
self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 1)
|
||||
self.assertFalse(CreditReservation.objects.exists()) # 预留行随任务级联删除
|
||||
|
||||
def test_project_delete_cascade_releases_reservation(self):
|
||||
"""回归:删项目 → AITask.project CASCADE 级联删任务,同样必须先释放 ACTIVE 预留。"""
|
||||
from apps.products.models import Product
|
||||
from apps.projects.models import Project
|
||||
|
||||
product = Product.objects.create(team=self.team, created_by=self.user, title="P 商品")
|
||||
project = Project.objects.create(team=self.team, created_by=self.user, product=product, name="P")
|
||||
task = AITask.objects.create(
|
||||
team=self.team, created_by=self.user, project=project,
|
||||
task_type=AITask.Type.SCRIPT_GENERATION, model_config=self.model,
|
||||
idempotency_key="billing-test-task-proj", estimated_cost=Decimal("5.0000"),
|
||||
)
|
||||
reserve_credit(team=self.team, user=self.user, task=task, amount=Decimal("5.0000"))
|
||||
project.delete()
|
||||
self.account.refresh_from_db()
|
||||
|
||||
self.assertEqual(self.account.reserved_balance, Decimal("0.0000"))
|
||||
self.assertTrue(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE, reason="任务删除,释放未结预留").exists())
|
||||
|
||||
def test_task_delete_after_charge_does_not_double_release(self):
|
||||
"""已扣费(CHARGED)的预留再删任务,信号不应重复释放(release_credit 幂等 + 信号只挑 ACTIVE)。"""
|
||||
reservation = reserve_credit(team=self.team, user=self.user, task=self.task, amount=Decimal("10.0000"))
|
||||
charge_reserved_credit(reservation=reservation, actual_amount=Decimal("10.0000"))
|
||||
self.task.delete()
|
||||
self.account.refresh_from_db()
|
||||
|
||||
self.assertEqual(self.account.balance, Decimal("90.0000"))
|
||||
self.assertEqual(self.account.reserved_balance, Decimal("0.0000"))
|
||||
self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 0) # 无多余释放
|
||||
|
||||
|
||||
class MemberLimitTests(TestCase):
|
||||
"""成员三档额度(每日/每月/累计总额,0=不限)在 reserve_credit 时逐档管控(PMC#17/#18)。"""
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/account",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 26,
|
||||
"works": 20,
|
||||
"dead": 0,
|
||||
"total": 29,
|
||||
"works": 24,
|
||||
"dead": 1,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 5,
|
||||
"skipped": 3,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -190,12 +208,33 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 2
|
||||
},
|
||||
"consoleNote": [
|
||||
"Failed to load resource: the server responded with a status of 404 (Not Found)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +247,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +283,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +301,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "recharge-card.",
|
||||
@@ -262,12 +319,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "recharge-card.",
|
||||
@@ -280,12 +337,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "recharge-card.",
|
||||
@@ -298,12 +355,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "recharge-card.",
|
||||
@@ -316,12 +373,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"mutations": 12,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.pay-method-btn.pay-wechat",
|
||||
@@ -332,7 +389,7 @@
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.pay-method-btn.pay-alipay",
|
||||
@@ -343,7 +400,7 @@
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.active",
|
||||
@@ -360,74 +417,98 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "项目 6",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "成员 1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "账单流水 254",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "项目 20",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "成员 4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.",
|
||||
"label": "账单流水 1368",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "按类型筛选",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "select",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "按成员筛选",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 66,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
@@ -436,7 +517,6 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户"
|
||||
"余额 ¥14,072.00"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
# 功能审计 · account
|
||||
|
||||
路由:`/account` · 模式:quick
|
||||
合计 26 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 29 · ✅ works 24 · ❌ **dead 1** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## ❌ 点了没反应(DEAD —— 重点修)
|
||||
| # | 文字 | 标签 | 类名 |
|
||||
|---|---|---|---|
|
||||
| 26 | 按类型筛选 | `select` | `` |
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 微信支付 `button`
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"name": "asset-factory",
|
||||
"route": "/asset-factory",
|
||||
"url": "http://127.0.0.1:5173/asset-factory",
|
||||
"url": "http://127.0.0.1:5174/asset-factory",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 23,
|
||||
"total": 35,
|
||||
"works": 31,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 3,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -37,7 +37,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "sidebar-toggle",
|
||||
"label": "展开导航",
|
||||
"label": "收窄导航",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,80 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -194,11 +122,119 @@
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 31,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 108,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "设置",
|
||||
"href": "/settings",
|
||||
"disabled": false,
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 22,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,74 +298,70 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 52,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
"label": "开始生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 38,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "tab.active",
|
||||
"label": "全部 20",
|
||||
"label": "全部 70",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -325,7 +375,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "tab",
|
||||
@@ -338,16 +388,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "tab",
|
||||
"label": "已完成 15",
|
||||
"label": "已完成 67",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -361,11 +411,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "tab",
|
||||
"label": "失败 5",
|
||||
"label": "失败 3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -374,12 +424,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -397,7 +447,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
@@ -415,7 +465,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "clear-filters",
|
||||
@@ -428,12 +478,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 16,
|
||||
"mutations": 14,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -446,16 +496,123 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 15,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "列表",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "article",
|
||||
"role": "button",
|
||||
"cls": "task-card.history-card",
|
||||
"label": "查看本批图片",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "article",
|
||||
"role": "button",
|
||||
"cls": "task-card.history-card",
|
||||
"label": "查看本批图片",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "article",
|
||||
"role": "button",
|
||||
"cls": "task-card.history-card",
|
||||
"label": "查看本批图片",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "x",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,071.00",
|
||||
"时间"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
# 功能审计 · asset-factory
|
||||
|
||||
路由:`/asset-factory` · 模式:quick
|
||||
合计 24 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 35 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 时间
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/dashboard",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 25,
|
||||
"works": 20,
|
||||
"total": 31,
|
||||
"works": 28,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 5,
|
||||
"skipped": 3,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,7 +82,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 30,
|
||||
"mutations": 41,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 29,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 31,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 29,
|
||||
"api": 0
|
||||
"mutations": 49,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 42,
|
||||
"api": 0
|
||||
"mutations": 45,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 29,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 27,
|
||||
"mutations": 109,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 54,
|
||||
"mutations": 29,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 28,
|
||||
"mutations": 33,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
@@ -241,15 +295,15 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
@@ -260,109 +314,18 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 60,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat",
|
||||
"label": "余额 ¥¥14908.00已冻结 ¥0.00",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "more",
|
||||
"label": "[ ALL · 6 ] →",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产继",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜拼接导出继续",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"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,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "商品库8 SKU",
|
||||
"cls": "stat",
|
||||
"label": "总项目 ALL39",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -371,16 +334,16 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"mutations": 31,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "a",
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "资产库101 资产",
|
||||
"cls": "stat",
|
||||
"label": "进行中 WIP16",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -394,11 +357,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "a",
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "充值¥14908.00",
|
||||
"cls": "stat",
|
||||
"label": "成片 DONE4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -407,16 +370,103 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"mutations": 45,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat",
|
||||
"label": "余额 ¥¥14074.00冻结 ¥4.00 / 共 ¥14078.00",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 112,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "more",
|
||||
"label": "[ ALL · 39 ] →",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16南卡 · 短视频 · v4南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜基",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16Apple/苹果 · 短视频 · v3Apple/苹果 iPhone 17 Pro / ",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "a",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "所有项目6 个",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16南卡 · 短视频 · v12南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 1 镜视频片段继续",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "recent-row",
|
||||
"label": "9:16Apple/苹果 · 短视频 · v2Apple/苹果 iPhone 17 Pro / ",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -425,7 +475,79 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "商品库17 SKU",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 41,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "资产库53 资产",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 41,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "充值¥14074.00",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "shortcut",
|
||||
"label": "所有项目39 个",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 31,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
@@ -433,21 +555,16 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"总项目 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 镜脚本待生成继",
|
||||
"余额 ¥14,074.00",
|
||||
"总项目 ALL 20 本月完成 0",
|
||||
"进行中 WIP 16 全部正常推进",
|
||||
"本月成片 DONE 4 累计完成 4",
|
||||
"余额 ¥ ¥14,074.00 已用 ¥947.00 / ¥15,021.00",
|
||||
"[ ALL · 20 ]",
|
||||
"9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 4 镜已完成打开",
|
||||
"资产库资产 20 个",
|
||||
"充值¥14,908.00",
|
||||
"充值¥14,074.00",
|
||||
"基础资产生成中",
|
||||
"已完成",
|
||||
"脚本待生成",
|
||||
"故事板生成中"
|
||||
"已完成"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,34 +1,27 @@
|
||||
# 功能审计 · dashboard
|
||||
|
||||
路由:`/dashboard` · 模式:quick
|
||||
合计 25 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
合计 31 · ✅ works 28 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 总项目 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 镜脚本待生成继
|
||||
- 余额 ¥14,074.00
|
||||
- 总项目 ALL 20 本月完成 0
|
||||
- 进行中 WIP 16 全部正常推进
|
||||
- 本月成片 DONE 4 累计完成 4
|
||||
- 余额 ¥ ¥14,074.00 已用 ¥947.00 / ¥15,021.00
|
||||
- [ ALL · 20 ]
|
||||
- 9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 4 镜已完成打开
|
||||
- 资产库资产 20 个
|
||||
- 充值¥14,908.00
|
||||
- 充值¥14,074.00
|
||||
- 基础资产生成中
|
||||
- 已完成
|
||||
- 脚本待生成
|
||||
- 故事板生成中
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 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`
|
||||
- 9:16南卡 · 短视频 · v4南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜基 `button`
|
||||
- 9:16南卡 · 短视频 · v12南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜 `button`
|
||||
- 9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 1 镜视频片段继续 `button`
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
"url": "http://127.0.0.1:5173/image-optimize",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 21,
|
||||
"dead": 2,
|
||||
"total": 37,
|
||||
"works": 34,
|
||||
"dead": 1,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"noop": 2,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 56,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,33 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 105,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 2
|
||||
},
|
||||
"consoleNote": [
|
||||
"Failed to load resource: the server responded with a status of 404 (Not Found)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +247,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +283,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +301,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "back-pill",
|
||||
@@ -262,12 +319,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ic-new-conv",
|
||||
@@ -280,124 +337,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ex",
|
||||
"label": "一只穿着宇航服的橘猫,漂浮在霓虹色星云中,赛博朋克风",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ex",
|
||||
"label": "极简北欧风格的茶杯,白底,自然柔光,产品摄影",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ex",
|
||||
"label": "国风水墨海报,主体一只白鹤立于水边,留白构图",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
"mutations": 0,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ex",
|
||||
"label": "电影感都市夜景,街道湿漉漉反射霓虹,4K 高清",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "add-btn",
|
||||
"label": "上传参考图",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ic-param-btn",
|
||||
"label": "比例1:1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "mi.selected",
|
||||
"label": "1:1",
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.active",
|
||||
"label": "默认创作",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -410,16 +359,308 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "默认创作",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "露露同款裸感瑜伽裤 白底商品三视图,正面 / 侧",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "默认创作",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "默认创作",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "默认创作",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "ic-conv-item.",
|
||||
"label": "深成该背心的穿戴的不同的那个场景。",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "mi.",
|
||||
"label": "3:4",
|
||||
"cls": "gen-img-btn",
|
||||
"label": "再生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "gen-img-btn",
|
||||
"label": "下载",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
"Access to fetch at 'https://airshelf.tos-s3-cn-shanghai.volces.com/teams/90fc4844-48fe-4445-a709-3362b3d40918/standalone/8883fcf4-1f91-4626-a445-4c4786c4b91c.png' from origin 'http://127.0.0.1:5173' h",
|
||||
"Failed to load resource: net::ERR_FAILED"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "gen-img-btn",
|
||||
"label": "更多",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "gen-bubble-item",
|
||||
"label": "加入模特库",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-sm.btn-ghost",
|
||||
"label": "更多",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "add-btn",
|
||||
"label": "上传参考图(可多张)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ic-param-btn",
|
||||
"label": "模型火山 Seedream",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "mi.selected",
|
||||
"label": "火山 Seedream",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
@@ -429,20 +670,20 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 36,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "mi.",
|
||||
"label": "4:5",
|
||||
"label": "gpt-image-2",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "dead",
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
@@ -450,8 +691,7 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,072.00",
|
||||
"折叠侧栏",
|
||||
"时间",
|
||||
"生成模式",
|
||||
@@ -459,6 +699,7 @@
|
||||
"一只穿着宇航服的橘猫,漂浮在霓虹色星云中,赛博朋克风",
|
||||
"极简北欧风格的茶杯,白底,自然柔光,产品摄影",
|
||||
"国风水墨海报,主体一只白鹤立于水边,留白构图",
|
||||
"电影感都市夜景,街道湿漉漉反射霓虹,4K 高清"
|
||||
"电影感都市夜景,街道湿漉漉反射霓虹,4K 高清",
|
||||
"上传参考图"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
# 功能审计 · image-optimize
|
||||
|
||||
路由:`/image-optimize` · 模式:quick
|
||||
合计 24 · ✅ works 21 · ❌ **dead 2** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 37 · ✅ works 34 · ❌ **dead 1** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 2 · ⚪ disabled 0
|
||||
|
||||
## ❌ 点了没反应(DEAD —— 重点修)
|
||||
| # | 文字 | 标签 | 类名 |
|
||||
|---|---|---|---|
|
||||
| 22 | 3:4 | `button` | `mi.` |
|
||||
| 23 | 4:5 | `button` | `mi.` |
|
||||
| 29 | 下载 | `button` | `gen-img-btn` |
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
- 折叠侧栏
|
||||
- 时间
|
||||
- 生成模式
|
||||
@@ -24,4 +22,5 @@
|
||||
- 极简北欧风格的茶杯,白底,自然柔光,产品摄影
|
||||
- 国风水墨海报,主体一只白鹤立于水边,留白构图
|
||||
- 电影感都市夜景,街道湿漉漉反射霓虹,4K 高清
|
||||
- 上传参考图
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/library",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 38,
|
||||
"works": 23,
|
||||
"total": 28,
|
||||
"works": 27,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 13,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 47,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 47,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -144,6 +144,24 @@
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"mutations": 69,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-edit-toggle",
|
||||
@@ -262,34 +316,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "上传资产",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 17,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab.active",
|
||||
"label": "人物 15",
|
||||
"label": "模特上身图 3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -302,48 +338,12 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "场景 22",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 81,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "商品图 39",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 121,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "成片 23",
|
||||
"label": "平台套图 3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -352,8 +352,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 84,
|
||||
"api": 0
|
||||
"mutations": 9,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -361,7 +361,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "我的上传 3",
|
||||
"label": "自由创作 1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -370,8 +370,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 51,
|
||||
"api": 0
|
||||
"mutations": 9,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -379,7 +379,7 @@
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "未分类 0",
|
||||
"label": "视频成品 7",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -388,12 +388,66 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
"label": "其他 46",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 15,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "资产类型",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"label": "全部类型",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -404,36 +458,18 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 39,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"idx": 25,
|
||||
"tag": "article",
|
||||
"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": "取消",
|
||||
"cls": "asset-card.audio",
|
||||
"label": "AUDIO配音 · 场 4 · 句 2未分类 · AI 生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -442,110 +478,62 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 10,
|
||||
"mutations": 8,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "article",
|
||||
"role": "button",
|
||||
"cls": "asset-card.image",
|
||||
"label": "ea9d4d0ecc5334fbd780a7217bcdd3430597562a5a3f0-w2",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"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,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
"tag": "article",
|
||||
"role": "button",
|
||||
"cls": "asset-card.image",
|
||||
"label": "ea9d4d0ecc5334fbd780a7217bcdd3430597562a5a3f0-w2",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,072.00",
|
||||
"管理资产",
|
||||
"上传资产",
|
||||
"性别",
|
||||
"年龄段",
|
||||
"角色标签",
|
||||
"来源",
|
||||
"最近使用"
|
||||
"最近使用",
|
||||
"人物 2",
|
||||
"场景 1",
|
||||
"商品图 5",
|
||||
"成片 1",
|
||||
"我的上传 4",
|
||||
"未分类 7"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,19 +1,24 @@
|
||||
# 功能审计 · library
|
||||
|
||||
路由:`/library` · 模式:quick
|
||||
合计 38 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)13 · ◷ noop-active 1 · ⚪ disabled 1
|
||||
合计 28 · ✅ works 27 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
- 管理资产
|
||||
- 上传资产
|
||||
- 性别
|
||||
- 年龄段
|
||||
- 角色标签
|
||||
- 来源
|
||||
- 最近使用
|
||||
- 人物 2
|
||||
- 场景 1
|
||||
- 商品图 5
|
||||
- 成片 1
|
||||
- 我的上传 4
|
||||
- 未分类 7
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/messages",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 28,
|
||||
"works": 20,
|
||||
"total": 34,
|
||||
"works": 23,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 7,
|
||||
"skipped": 10,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 31,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 45,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"mutations": 33,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 21,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 40,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 36,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
"mutations": 36,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,33 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 1
|
||||
"mutations": 104,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
},
|
||||
"consoleNote": [
|
||||
"Failed to load resource: the server responded with a status of 404 (Not Found)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +247,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 48,
|
||||
"mutations": 53,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +283,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 45,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +301,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
@@ -263,11 +320,11 @@
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 2
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
@@ -280,16 +337,16 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 58,
|
||||
"api": 2
|
||||
"mutations": 57,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.active",
|
||||
"label": "全部111",
|
||||
"label": "全部1191",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -303,7 +360,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
@@ -316,16 +373,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"mutations": 31,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
"label": "任务110",
|
||||
"label": "任务560",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -334,12 +391,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"mutations": 8,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
@@ -352,16 +409,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"mutations": 14,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
"label": "计费0",
|
||||
"label": "计费630",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -370,12 +427,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"mutations": 10,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "msg-filter.",
|
||||
@@ -388,28 +445,10 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"mutations": 8,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"label": "",
|
||||
@@ -433,17 +472,51 @@
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im",
|
||||
"资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video",
|
||||
"资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video ",
|
||||
"资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系",
|
||||
"余额 ¥14,072.00",
|
||||
"商品图生成已扣费 ¥2.008mAI 任务扣费 · 扣费后余额 ¥14072.00更新系统",
|
||||
"资产「AI 生成 · 商品三视图 · 1」已加入资产库8mProduct Image · Ima",
|
||||
"商品图生成已扣费 ¥2.001dAI 任务扣费 · 扣费后余额 ¥14080.00更新系统",
|
||||
"系统 →"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
# 功能审计 · messages
|
||||
|
||||
路由:`/messages` · 模式:quick
|
||||
合计 28 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)7 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 34 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)10 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im
|
||||
- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video
|
||||
- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video
|
||||
- 资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系
|
||||
- 余额 ¥14,072.00
|
||||
- 商品图生成已扣费 ¥2.008mAI 任务扣费 · 扣费后余额 ¥14072.00更新系统
|
||||
- 资产「AI 生成 · 商品三视图 · 1」已加入资产库8mProduct Image · Ima
|
||||
- 商品图生成已扣费 ¥2.001dAI 任务扣费 · 扣费后余额 ¥14080.00更新系统
|
||||
- 系统 →
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "model-photo-demo-a",
|
||||
"route": "/model-photo/demo-a",
|
||||
"url": "http://127.0.0.1:5173/model-photo/demo-a",
|
||||
"url": "http://127.0.0.1:5174/model-photo/demo-a",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 38,
|
||||
"works": 33,
|
||||
"total": 39,
|
||||
"works": 34,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 27,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "add",
|
||||
@@ -262,16 +316,16 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.active",
|
||||
"label": "主图南卡 Lite Pro 蓝牙耳机// 数码 3C · 6 批",
|
||||
"label": "主图透真补水面膜// 美妆个护 · 6 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
@@ -284,66 +338,12 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图露露同款裸感瑜伽裤// 运动户外 · 3 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图透真清透物理防晒霜// 美妆个护 · 2 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图滋啦速食牛肉面 · 6 桶装// 食品饮料 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图透真玻尿酸补水面膜// 美妆个护 · 1 批",
|
||||
"label": "主图透真清透防晒霜// 美妆个护 · 3 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -361,7 +361,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图桥接测试补水面膜 20260529// 美妆个护 · 0 批",
|
||||
"label": "主图南卡 Lite Pro 蓝牙耳机// 数码 3C · 2 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -378,8 +378,62 @@
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图滋啦速食牛肉面// 食品饮料 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图三顿半同款冻干咖啡// 食品饮料 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图小熊 4L 可视空气炸锅// 家居家电 · 0 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-all",
|
||||
"label": "全部商品8 个",
|
||||
"label": "全部商品24 个",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -388,12 +442,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-back",
|
||||
@@ -406,16 +460,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -433,7 +483,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -451,7 +501,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -469,7 +519,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -487,7 +537,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"idx": 29,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -505,7 +555,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -523,7 +573,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -541,7 +591,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-chip.",
|
||||
@@ -559,7 +609,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-gen",
|
||||
@@ -569,61 +619,6 @@
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部重跑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部下载",
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "加入资产库",
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
@@ -649,20 +644,27 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "加入资产库",
|
||||
"label": "全部重跑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部下载",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -671,16 +673,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"idx": 38,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
@@ -689,8 +687,8 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"立即生成 · 透真补水面膜 × Ava"
|
||||
"余额 ¥14,071.00",
|
||||
"立即生成 · 透真补水面膜 × Ava",
|
||||
"加入资产库"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# 功能审计 · model-photo-demo-a
|
||||
|
||||
路由:`/model-photo/demo-a` · 模式:quick
|
||||
合计 38 · ✅ works 33 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)4 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 39 · ✅ works 34 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)4 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 立即生成 · 透真补水面膜 × Ava
|
||||
- 加入资产库
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 立即生成 · 南卡 Lite Pro 蓝牙耳机 × Ava `button`
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "model-photo-demo-b",
|
||||
"route": "/model-photo/demo-b",
|
||||
"url": "http://127.0.0.1:5173/model-photo/demo-b",
|
||||
"url": "http://127.0.0.1:5174/model-photo/demo-b",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 37,
|
||||
"works": 34,
|
||||
"total": 38,
|
||||
"works": 36,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 2,
|
||||
"noop": 1,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 27,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 36,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "add",
|
||||
@@ -262,12 +316,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"mutations": 42,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.active",
|
||||
@@ -275,17 +329,17 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"mutations": 3,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
@@ -302,66 +356,30 @@
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图透真清透物理防晒霜// 美妆个护 · 2 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图滋啦速食牛肉面 · 6 桶装// 食品饮料 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图透真玻尿酸补水面膜// 美妆个护 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图桥接测试补水面膜 20260529// 美妆个护 · 0 批",
|
||||
"label": "主图测试// 美妆个护 · 2 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图透真清透物理防晒霜// 美妆个护 · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -375,11 +393,47 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图耳机包// 数码 3C · 1 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-prod.",
|
||||
"label": "主图Apple/苹果 iPhone 17 Pro// 数码 3C · 0 批",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-all",
|
||||
"label": "全部商品8 个",
|
||||
"label": "全部商品17 个",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -388,12 +442,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "dm-back",
|
||||
@@ -406,16 +460,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icbtn",
|
||||
@@ -428,16 +478,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -450,16 +496,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -472,16 +514,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -494,68 +532,9 @@
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部重跑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部下载",
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "加入资产库",
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
@@ -582,20 +561,27 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 75,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "加入资产库",
|
||||
"label": "全部重跑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "全部下载",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -604,16 +590,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "pchip.active",
|
||||
@@ -626,16 +608,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 32,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "pchip",
|
||||
@@ -648,16 +626,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 75,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"idx": 35,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "pchip",
|
||||
@@ -670,16 +644,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 75,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"idx": 36,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "pchip",
|
||||
@@ -692,16 +662,12 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 75,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"idx": 37,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "gen-btn",
|
||||
@@ -714,20 +680,16 @@
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 75,
|
||||
"api": 2
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,071.00",
|
||||
"加入资产库",
|
||||
"生成 · 透真补水面膜 × Ava"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# 功能审计 · model-photo-demo-b
|
||||
|
||||
路由:`/model-photo/demo-b` · 模式:quick
|
||||
合计 37 · ✅ works 34 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 38 · ✅ works 36 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 加入资产库
|
||||
- 生成 · 透真补水面膜 × Ava
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "model-photo",
|
||||
"route": "/model-photo",
|
||||
"url": "http://127.0.0.1:5173/model-photo",
|
||||
"url": "http://127.0.0.1:5174/model-photo",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 32,
|
||||
"works": 31,
|
||||
"total": 49,
|
||||
"works": 44,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 69,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,16 +298,34 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "back-pill",
|
||||
"label": "返回",
|
||||
"cls": "iw-side-toggle",
|
||||
"label": "收起商品栏",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "search-btn",
|
||||
"label": "搜索批次/模特",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -262,12 +334,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "new-prod",
|
||||
@@ -280,100 +352,16 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.active",
|
||||
"label": "南卡南卡 Lite Pro 蓝牙耳机// 数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "露露露露同款裸感瑜伽裤// 运动户外",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真透真清透物理防晒霜// 美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦滋啦速食牛肉面 · 6 桶装// 食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真透真玻尿酸补水面膜// 美妆个护",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -382,8 +370,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 49,
|
||||
"api": 1
|
||||
},
|
||||
"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 — ",
|
||||
@@ -395,7 +383,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "桥接桥接测试补水面膜 20260529// 美妆个护",
|
||||
"label": "露露同款裸感瑜伽裤运动户外",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -404,8 +392,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 52,
|
||||
"api": 1
|
||||
},
|
||||
"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 — ",
|
||||
@@ -417,7 +405,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "三顿三顿半同款冻干咖啡粉// 食品饮料",
|
||||
"label": "测试美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -426,8 +414,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — ",
|
||||
@@ -439,7 +427,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "小熊小熊 4L 可视空气炸锅// 家居家电",
|
||||
"label": "透真清透物理防晒霜美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -448,8 +436,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — ",
|
||||
@@ -460,6 +448,182 @@
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "耳机包数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "Apple/苹果 iPhone 17 Pro数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "植护24大包抽纸家用实惠装整箱面巾卫生餐巾纸巾悬挂式擦手面纸抽个护清洁",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真玻尿酸补水面膜美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "测试美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "桥接测试补水面膜 20260529美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
},
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "search-btn",
|
||||
"label": "搜索批次/模特",
|
||||
"href": "",
|
||||
@@ -470,7 +634,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -479,7 +643,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tb-chip",
|
||||
@@ -501,7 +665,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"idx": 33,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
@@ -523,11 +687,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "南卡 · 痛点种草 · v1-person// 真人模特",
|
||||
"cls": "iw-actor-lib-btn",
|
||||
"label": "模特库",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -536,7 +700,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -545,11 +709,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 1// 真人模特",
|
||||
"idx": 35,
|
||||
"tag": "span",
|
||||
"role": "button",
|
||||
"cls": "right",
|
||||
"label": "全部 (14)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -557,8 +721,8 @@
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -567,11 +731,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 36,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 1// 真人模特",
|
||||
"label": "AI 生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -580,7 +744,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -589,11 +753,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"idx": 37,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"label": "AI 生成",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -602,7 +766,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -611,11 +775,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"idx": 38,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"label": "Apple/苹果",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -624,7 +788,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
},
|
||||
"consoleNote": [
|
||||
@@ -633,11 +797,11 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"idx": 39,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "AI 生成 · model · 2// 真人模特",
|
||||
"label": "Apple/苹果",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -646,20 +810,137 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 40,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "Apple/苹果 · 短视频 · v1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 41,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "OPPO手机 · 短视频 · v1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 42,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "南卡 · 痛点种草 · v3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 43,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "model-card.",
|
||||
"label": "南卡 · 短视频 · v5",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"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 — "
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 44,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 45,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 46,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 47,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 48,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,071.00",
|
||||
"折叠侧栏",
|
||||
"全部商品 7 个",
|
||||
"时间",
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# 功能审计 · model-photo
|
||||
|
||||
路由:`/model-photo` · 模式:quick
|
||||
合计 32 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 49 · ✅ works 44 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 折叠侧栏
|
||||
- 全部商品 7 个
|
||||
- 时间
|
||||
|
||||
@@ -1,45 +1,45 @@
|
||||
{
|
||||
"ts": "2026-06-17T13:32:23.263Z",
|
||||
"ts": "2026-07-02T03:02:30.918Z",
|
||||
"base": "http://127.0.0.1:5174",
|
||||
"apiChecks": [
|
||||
{
|
||||
"name": "page_size 生效 /api/assets/",
|
||||
"pass": true,
|
||||
"detail": "count=261 返回=200 next=有"
|
||||
"detail": "count=428 返回=200 next=有"
|
||||
},
|
||||
{
|
||||
"name": "page_size 生效 /api/products/",
|
||||
"pass": true,
|
||||
"detail": "count=11 返回=11 next=无"
|
||||
"detail": "count=17 返回=17 next=无"
|
||||
},
|
||||
{
|
||||
"name": "page_size 生效 /api/projects/",
|
||||
"pass": true,
|
||||
"detail": "count=21 返回=21 next=无"
|
||||
"detail": "count=39 返回=39 next=无"
|
||||
},
|
||||
{
|
||||
"name": "延迟 /api/assets/?page_size=200",
|
||||
"pass": true,
|
||||
"soft": true,
|
||||
"detail": "808ms / 参考 1200ms (HTTP 200)"
|
||||
"detail": "754ms / 参考 1200ms (HTTP 200)"
|
||||
},
|
||||
{
|
||||
"name": "延迟 /api/products/?page_size=200",
|
||||
"pass": true,
|
||||
"soft": true,
|
||||
"detail": "585ms / 参考 1200ms (HTTP 200)"
|
||||
"detail": "569ms / 参考 1200ms (HTTP 200)"
|
||||
},
|
||||
{
|
||||
"name": "延迟 /api/projects/?page_size=200",
|
||||
"pass": true,
|
||||
"soft": true,
|
||||
"detail": "488ms / 参考 1200ms (HTTP 200)"
|
||||
"detail": "580ms / 参考 1200ms (HTTP 200)"
|
||||
},
|
||||
{
|
||||
"name": "延迟 /api/ops/notifications/?page_size=100",
|
||||
"pass": false,
|
||||
"soft": true,
|
||||
"detail": "1233ms / 参考 1200ms (HTTP 200)"
|
||||
"detail": "1474ms / 参考 1200ms (HTTP 200)"
|
||||
}
|
||||
],
|
||||
"pageFailed": 0,
|
||||
@@ -49,128 +49,6 @@
|
||||
"route": "http://127.0.0.1:5174/dashboard",
|
||||
"unique": 6,
|
||||
"budget": 7,
|
||||
"rawRequests": 7,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/assets/summary/"
|
||||
],
|
||||
"elapsedMs": 4223,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "products",
|
||||
"route": "http://127.0.0.1:5174/products",
|
||||
"unique": 5,
|
||||
"budget": 6,
|
||||
"rawRequests": 6,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1"
|
||||
],
|
||||
"elapsedMs": 3760,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "projects",
|
||||
"route": "http://127.0.0.1:5174/projects",
|
||||
"unique": 5,
|
||||
"budget": 6,
|
||||
"rawRequests": 6,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1"
|
||||
],
|
||||
"elapsedMs": 3509,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "library",
|
||||
"route": "http://127.0.0.1:5174/library",
|
||||
"unique": 8,
|
||||
"budget": 9,
|
||||
"rawRequests": 10,
|
||||
"waterfall": 0,
|
||||
"duplicates": [
|
||||
{
|
||||
"key": "GET /api/assets/?ordering=-created_at&page=1&page_size=10&tab=people",
|
||||
"n": 2
|
||||
}
|
||||
],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/assets/?ordering=-created_at&page=1&page_size=10&tab=people ×2",
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/assets/summary/",
|
||||
"GET /api/assets/facets/?meta_keys=gender,age,role&tab=people"
|
||||
],
|
||||
"elapsedMs": 3494,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "account",
|
||||
"route": "http://127.0.0.1:5174/account",
|
||||
"unique": 8,
|
||||
"budget": 9,
|
||||
"rawRequests": 9,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/billing/trend/",
|
||||
"GET /api/auth/team/members/",
|
||||
"GET /api/billing/ledgers/?page=1&page_size=10"
|
||||
],
|
||||
"elapsedMs": 3728,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "team",
|
||||
"route": "http://127.0.0.1:5174/team",
|
||||
"unique": 6,
|
||||
"budget": 7,
|
||||
"rawRequests": 8,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
@@ -182,17 +60,17 @@
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/auth/team/members/",
|
||||
"GET /api/ops/notifications/?page_size=100"
|
||||
"GET /api/assets/summary/",
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 3729,
|
||||
"elapsedMs": 3773,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "messages",
|
||||
"route": "http://127.0.0.1:5174/messages",
|
||||
"name": "products",
|
||||
"route": "http://127.0.0.1:5174/products",
|
||||
"unique": 5,
|
||||
"budget": 6,
|
||||
"rawRequests": 7,
|
||||
@@ -206,18 +84,18 @@
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/ops/notifications/?page=1&page_size=10"
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 3693,
|
||||
"elapsedMs": 3714,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "productDetail",
|
||||
"route": "http://127.0.0.1:5174/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"unique": 6,
|
||||
"budget": 7,
|
||||
"name": "projects",
|
||||
"route": "http://127.0.0.1:5174/projects",
|
||||
"unique": 5,
|
||||
"budget": 6,
|
||||
"rawRequests": 7,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
@@ -229,35 +107,178 @@
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/assets/?page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f"
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 4730,
|
||||
"elapsedMs": 4631,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "pipeline",
|
||||
"route": "http://127.0.0.1:5174/pipeline/46754596-a6f5-4f07-a85f-92a2415910ff",
|
||||
"unique": 6,
|
||||
"budget": 8,
|
||||
"rawRequests": 7,
|
||||
"name": "library",
|
||||
"route": "http://127.0.0.1:5174/library",
|
||||
"unique": 9,
|
||||
"budget": 9,
|
||||
"rawRequests": 12,
|
||||
"waterfall": 0,
|
||||
"duplicates": [
|
||||
{
|
||||
"key": "GET /api/assets/batches/?ordering=-created_at&page=1&page_size=10&tab=tryon",
|
||||
"n": 2
|
||||
}
|
||||
],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/assets/batches/?ordering=-created_at&page=1&page_size=10&tab=tryon ×2",
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/assets/summary/",
|
||||
"GET /api/assets/video-packs/",
|
||||
"GET /api/assets/facets/?meta_keys=product&tab=tryon",
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 3738,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "account",
|
||||
"route": "http://127.0.0.1:5174/account",
|
||||
"unique": 9,
|
||||
"budget": 9,
|
||||
"rawRequests": 11,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/projects/46754596-a6f5-4f07-a85f-92a2415910ff/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1"
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/billing/trend/",
|
||||
"GET /api/auth/team/members/",
|
||||
"GET /api/auth/team/settings/",
|
||||
"GET /api/billing/ledgers/?page=1&page_size=10",
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 3737,
|
||||
"elapsedMs": 3917,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "team",
|
||||
"route": "http://127.0.0.1:5174/team",
|
||||
"unique": 7,
|
||||
"budget": 7,
|
||||
"rawRequests": 10,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/auth/team/members/",
|
||||
"GET /api/ops/notifications/?page_size=100",
|
||||
"GET /api/auth/team/settings/",
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 3706,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "messages",
|
||||
"route": "http://127.0.0.1:5174/messages",
|
||||
"unique": 5,
|
||||
"budget": 6,
|
||||
"rawRequests": 8,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/ops/notifications/?page=1&page_size=10",
|
||||
"GET /api/ai/tasks/unread/"
|
||||
],
|
||||
"elapsedMs": 4048,
|
||||
"problems": [],
|
||||
"warnings": [],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "productDetail",
|
||||
"route": "http://127.0.0.1:5174/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"unique": 8,
|
||||
"budget": 7,
|
||||
"rawRequests": 10,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/ai/tasks/unread/",
|
||||
"GET /api/assets/?page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"GET /api/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f/materials/",
|
||||
"GET /api/assets/?asset_type=image&in_library=all&page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f"
|
||||
],
|
||||
"elapsedMs": 4447,
|
||||
"problems": [],
|
||||
"warnings": [
|
||||
"首屏接口数 8 > 预算 7(架构性过量拉取,待决策)"
|
||||
],
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"name": "pipeline",
|
||||
"route": "http://127.0.0.1:5174/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0",
|
||||
"unique": 9,
|
||||
"budget": 8,
|
||||
"rawRequests": 11,
|
||||
"waterfall": 0,
|
||||
"duplicates": [],
|
||||
"failed": [],
|
||||
"breakdown": [
|
||||
"GET /api/auth/me/",
|
||||
"GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/",
|
||||
"GET /api/products/",
|
||||
"GET /api/projects/",
|
||||
"GET /api/billing/summary/",
|
||||
"GET /api/ai/models/",
|
||||
"GET /api/ops/notifications/?page_size=1",
|
||||
"GET /api/ai/tasks/unread/",
|
||||
"POST /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/poll-reviews/",
|
||||
"GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/pending-assets/",
|
||||
"GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/extract-status/"
|
||||
],
|
||||
"elapsedMs": 5214,
|
||||
"problems": [],
|
||||
"warnings": [
|
||||
"首屏接口数 9 > 预算 8(架构性过量拉取,待决策)"
|
||||
],
|
||||
"pass": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"name": "pipeline",
|
||||
"route": "/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f",
|
||||
"url": "http://127.0.0.1:5173/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f",
|
||||
"route": "/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0",
|
||||
"url": "http://127.0.0.1:5173/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 34,
|
||||
"works": 26,
|
||||
"total": 35,
|
||||
"works": 21,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 8,
|
||||
"skipped": 0,
|
||||
"disabled": 2,
|
||||
"skipped": 12,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 52,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 40,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 36,
|
||||
"mutations": 43,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -108,81 +108,9 @@
|
||||
"idx": 5,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -194,11 +122,119 @@
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 108,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "设置",
|
||||
"href": "/settings",
|
||||
"disabled": false,
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 56,
|
||||
"mutations": 61,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.pipeline-back",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"mutations": 27,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot.done",
|
||||
@@ -262,12 +316,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot",
|
||||
@@ -280,12 +334,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 26,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot",
|
||||
@@ -298,12 +352,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot",
|
||||
@@ -316,67 +370,27 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "sp-dot",
|
||||
"label": "拼接导出",
|
||||
"href": "#stage-5",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ctl-btn",
|
||||
"label": "上一帧 (←)",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ctl-btn",
|
||||
"label": "播放 / 暂停 (空格)",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ctl-btn",
|
||||
"label": "下一帧 (→)",
|
||||
"cls": "btn.btn-sm.btn-primary",
|
||||
"label": "▶ 开始生成视频",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ctl-btn",
|
||||
"label": "静音",
|
||||
"cls": "btn.btn-sm",
|
||||
"label": "把所有已完成视频片段打包下载",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
@@ -386,62 +400,41 @@
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "active",
|
||||
"label": "字幕",
|
||||
"cls": "placeholder.video-thumb",
|
||||
"label": "点击查看详情(历史版本/提示词/重跑)",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 61,
|
||||
"api": 0
|
||||
}
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "",
|
||||
"label": "转场",
|
||||
"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": 33,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "skipped-destructive"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "",
|
||||
"label": "BGM",
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "下载",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-sm.btn-primary",
|
||||
"label": "已开启",
|
||||
"cls": "btn",
|
||||
"label": "返回故事板",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -450,132 +443,70 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 30,
|
||||
"api": 0
|
||||
"mutations": 35,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tl-action",
|
||||
"label": "撤销",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tl-action",
|
||||
"label": "重做",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tl-action",
|
||||
"label": "在播放头处分割所在片段",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tl-action",
|
||||
"label": "复制选中片段",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,072.00",
|
||||
"拼接导出",
|
||||
"添加人物",
|
||||
"添加场景",
|
||||
"↻ 整体重写",
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
# 功能审计 · pipeline
|
||||
|
||||
路由:`/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f` · 模式:quick
|
||||
合计 34 · ✅ works 26 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 8
|
||||
路由:`/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0` · 模式:quick
|
||||
合计 35 · ✅ works 21 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)12 · ◷ noop-active 0 · ⚪ disabled 2
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
- 拼接导出
|
||||
- 添加人物
|
||||
- 添加场景
|
||||
- ↻ 整体重写
|
||||
@@ -22,3 +22,8 @@
|
||||
- 重新生成全部
|
||||
- 确认脚本,进入下一步
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- ▶ 开始生成视频 `button`
|
||||
- 点击查看详情(历史版本/提示词/重跑) `div`
|
||||
- 重跑 `button`
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "platform-cover",
|
||||
"route": "/platform-cover",
|
||||
"url": "http://127.0.0.1:5173/platform-cover",
|
||||
"url": "http://127.0.0.1:5174/platform-cover",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 38,
|
||||
"works": 35,
|
||||
"total": 48,
|
||||
"works": 46,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 1,
|
||||
"noop": 2,
|
||||
"disabled": 1,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 15,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 41,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 108,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,16 +298,34 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "back-pill",
|
||||
"label": "返回",
|
||||
"cls": "iw-side-toggle",
|
||||
"label": "收起商品栏",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -262,12 +334,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "new-prod",
|
||||
@@ -280,79 +352,7 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.active",
|
||||
"label": "南卡南卡 Lite Pro 蓝牙耳机// 数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "露露露露同款裸感瑜伽裤// 运动户外",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真透真清透物理防晒霜// 美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦滋啦速食牛肉面 · 6 桶装// 食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"mutations": 42,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -361,7 +361,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真透真玻尿酸补水面膜// 美妆个护",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -370,8 +370,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 51,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -379,7 +379,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "桥接桥接测试补水面膜 20260529// 美妆个护",
|
||||
"label": "露露同款裸感瑜伽裤运动户外",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -388,8 +388,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 51,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -397,7 +397,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "三顿三顿半同款冻干咖啡粉// 食品饮料",
|
||||
"label": "测试美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -406,8 +406,8 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -415,7 +415,7 @@
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "小熊小熊 4L 可视空气炸锅// 家居家电",
|
||||
"label": "透真清透物理防晒霜美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -424,20 +424,229 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "耳机包数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "Apple/苹果 iPhone 17 Pro数码 3C",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装食品饮料",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "植护24大包抽纸家用实惠装整箱面巾卫生餐巾纸巾悬挂式擦手面纸抽个护清洁",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "透真玻尿酸补水面膜美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "测试美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-prod-item.",
|
||||
"label": "桥接测试补水面膜 20260529美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "search-btn",
|
||||
"label": "搜索",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 4,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "search-btn",
|
||||
"label": "按平台筛选",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-filter-clear",
|
||||
"label": "清空",
|
||||
"href": "",
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "抖音电商",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "淘宝",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
@@ -447,11 +656,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"idx": 36,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "抖抖音电商",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "天猫",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -460,16 +669,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"idx": 37,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "淘淘宝",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "京东",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -478,16 +687,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"idx": 38,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "猫天猫",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "拼多多",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -496,16 +705,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"idx": 39,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "京京东",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "小红书",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -514,16 +723,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 40,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "拼拼多多",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "快手",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -532,16 +741,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"idx": 41,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "红小红书",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "视频号",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -550,16 +759,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"idx": 42,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "快快手",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "亚马逊",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -568,16 +777,16 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"idx": 43,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "视视频号",
|
||||
"cls": "iw-filter-opt",
|
||||
"label": "1688",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -586,84 +795,30 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"idx": 44,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "a亚马逊",
|
||||
"label": "抖音电商",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "platform-card.",
|
||||
"label": "阿1688",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "opt.active",
|
||||
"label": "4 张",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "opt.",
|
||||
"label": "8 张",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 7,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"idx": 45,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "opt.",
|
||||
@@ -681,21 +836,45 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"idx": 46,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "立即生成 (预估 ¥6.00)",
|
||||
"cls": "ic-param-btn",
|
||||
"label": "模型火山 Seedream",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "skipped-destructive"
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 1,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 47,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "mi.selected",
|
||||
"label": "火山 Seedream",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,071.00",
|
||||
"折叠侧栏",
|
||||
"全部商品 7 个",
|
||||
"搜索批次/平台",
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
# 功能审计 · platform-cover
|
||||
|
||||
路由:`/platform-cover` · 模式:quick
|
||||
合计 38 · ✅ works 35 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 2 · ⚪ disabled 0
|
||||
合计 48 · ✅ works 46 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 1
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 折叠侧栏
|
||||
- 全部商品 7 个
|
||||
- 搜索批次/平台
|
||||
- 时间
|
||||
- 平台
|
||||
|
||||
## ⏭ 破坏性按钮(未自动点,需人工验)
|
||||
- 立即生成 (预估 ¥6.00) `button`
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/products/new",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 31,
|
||||
"works": 25,
|
||||
"dead": 0,
|
||||
"total": 47,
|
||||
"works": 35,
|
||||
"dead": 3,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 5,
|
||||
"disabled": 0,
|
||||
"skipped": 9,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
"mutations": 36,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 16,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
"mutations": 50,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -109,6 +109,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 45,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 39,
|
||||
"api": 0
|
||||
"mutations": 30,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 25,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"mutations": 108,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 51,
|
||||
"mutations": 57,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
"mutations": 49,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 29,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-edit-toggle",
|
||||
@@ -267,7 +321,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-create",
|
||||
@@ -275,17 +329,17 @@
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -298,15 +352,15 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 12,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"cls": "mi.mi-all.selected",
|
||||
"label": "全部分类",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
@@ -314,18 +368,18 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 12,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机 · 1200×800南卡 Lite Pro 蓝牙耳机数码 3C",
|
||||
"cls": "mi",
|
||||
"label": "数码 3C4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -334,16 +388,70 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "clear-sel",
|
||||
"label": "清空",
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "运动户外1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 14,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "美妆个护6",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "食品饮料3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "个护清洁1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -357,94 +465,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"label": "美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 25,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "pf-upload-zone",
|
||||
"label": "点击上传或拖拽图片到此处// 支持 JPG、PNG 格式,建议尺寸 800×800 以上,大小不",
|
||||
"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-guide",
|
||||
"label": "使用指南",
|
||||
"cls": "mi",
|
||||
"label": "家居家电1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -458,11 +483,209 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "服饰内衣1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
"label": "取消",
|
||||
"cls": "chip",
|
||||
"label": "创建时间",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat.stat-link",
|
||||
"label": "查看视频项目",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "缺三视图MISSING TRI-VIEW该商品还未生成 正 / 侧 / 背 三视图。直接生成图片",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"tag": "span",
|
||||
"role": "button",
|
||||
"cls": "tri-missing-badge",
|
||||
"label": "缺三视图,查看说明",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat.stat-link",
|
||||
"label": "查看视频项目",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "耳机包数码 3C2026-06-17 创建素材 1·视频 2",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "Apple/苹果 iPhone 17 Pro数码 3C2026-06-18 创建素材 1·视频 ",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "滋啦速食牛肉面 · 6 桶装食品饮料2026-06-17 创建素材 1·视频 0",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "缺三视图MISSING TRI-VIEW该商品还未生成 正 / 侧 / 背 三视图。直接生成图片",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"tag": "span",
|
||||
"role": "button",
|
||||
"cls": "tri-missing-badge",
|
||||
"label": "缺三视图,查看说明",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "dead",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "x",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -471,36 +694,60 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"idx": 38,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"idx": 39,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"idx": 40,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"idx": 41,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"idx": 42,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 43,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 44,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 45,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 46,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
@@ -509,10 +756,7 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"管理商品",
|
||||
"商品分类",
|
||||
"余额 ¥14,072.00",
|
||||
"关闭",
|
||||
"美妆个护",
|
||||
"使用指南",
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
# 功能审计 · product-create
|
||||
|
||||
路由:`/products/new` · 模式:quick
|
||||
合计 31 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 1
|
||||
合计 47 · ✅ works 35 · ❌ **dead 3** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## ❌ 点了没反应(DEAD —— 重点修)
|
||||
| # | 文字 | 标签 | 类名 |
|
||||
|---|---|---|---|
|
||||
| 17 | 新建商品 | `button` | `btn.btn-primary.btn-create` |
|
||||
| 30 | 缺三视图,查看说明 | `span/button` | `tri-missing-badge` |
|
||||
| 36 | 缺三视图,查看说明 | `span/button` | `tri-missing-badge` |
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 管理商品
|
||||
- 商品分类
|
||||
- 余额 ¥14,072.00
|
||||
- 关闭
|
||||
- 美妆个护
|
||||
- 使用指南
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 29,
|
||||
"works": 22,
|
||||
"total": 31,
|
||||
"works": 29,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 6,
|
||||
"skipped": 1,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 32,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"mutations": 81,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 22,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ov-edit.ov-tri-trigger",
|
||||
@@ -262,12 +316,12 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": true,
|
||||
"mutations": 12,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "ov-tri-close",
|
||||
@@ -280,12 +334,12 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 12,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
@@ -298,12 +352,30 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 28,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "thumb.placeholder",
|
||||
"label": "点击放大",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 38,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "qa-item",
|
||||
@@ -313,19 +385,15 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"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 — "
|
||||
]
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "qa-item",
|
||||
@@ -335,15 +403,15 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 73,
|
||||
"api": 9
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "qa-item",
|
||||
@@ -353,15 +421,15 @@
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "qa-item.primary",
|
||||
@@ -374,12 +442,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 20,
|
||||
"mutations": 81,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab.active",
|
||||
@@ -397,7 +465,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "tab",
|
||||
@@ -410,12 +478,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 13,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "filter",
|
||||
@@ -426,44 +494,68 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 10,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "x",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "pd-group-thumb.placeholder",
|
||||
"label": "",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"tag": "span",
|
||||
"role": "button",
|
||||
"cls": "review-badge.rv-idle.clickable",
|
||||
"label": "待审核尚未送审 · 点击立即提交火山人像审核",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
@@ -472,8 +564,7 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"余额 ¥14,074.00",
|
||||
"全部类型",
|
||||
"通过",
|
||||
"网格视图",
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# 功能审计 · product-detail
|
||||
|
||||
路由:`/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f` · 模式:quick
|
||||
合计 29 · ✅ works 22 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)6 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
合计 31 · ✅ works 29 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 1 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 余额 ¥14,074.00
|
||||
- 全部类型
|
||||
- 通过
|
||||
- 网格视图
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/products",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 25,
|
||||
"works": 24,
|
||||
"total": 40,
|
||||
"works": 29,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 1,
|
||||
"skipped": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 11,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
"mutations": 35,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 0
|
||||
"mutations": 49,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 43,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 39,
|
||||
"api": 0
|
||||
"mutations": 40,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"mutations": 104,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 51,
|
||||
"mutations": 56,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 27,
|
||||
"api": 0
|
||||
"mutations": 34,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-edit-toggle",
|
||||
@@ -267,7 +321,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-create",
|
||||
@@ -280,12 +334,12 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
@@ -298,15 +352,15 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 12,
|
||||
"mutations": 10,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi.selected",
|
||||
"cls": "mi.mi-all.selected",
|
||||
"label": "全部分类",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
@@ -314,18 +368,18 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 12,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "product-card",
|
||||
"label": "南卡 Lite Pro 蓝牙耳机 · 1200×800南卡 Lite Pro 蓝牙耳机数码 3C",
|
||||
"cls": "mi",
|
||||
"label": "数码 3C4",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -334,16 +388,70 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "clear-sel",
|
||||
"label": "清空",
|
||||
"idx": 21,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "运动户外1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 14,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "美妆个护6",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "食品饮料3",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 18,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "个护清洁1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -357,94 +465,11 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"label": "美妆个护",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"idx": 25,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "pf-upload-zone",
|
||||
"label": "点击上传或拖拽图片到此处// 支持 JPG、PNG 格式,建议尺寸 800×800 以上,大小不",
|
||||
"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-guide",
|
||||
"label": "使用指南",
|
||||
"cls": "mi",
|
||||
"label": "家居家电1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -456,14 +481,135 @@
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "mi",
|
||||
"label": "服饰内衣1",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "chip",
|
||||
"label": "创建时间",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 11,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "stat.stat-link",
|
||||
"label": "查看视频项目",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 30,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 31,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 32,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 33,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 34,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 35,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 36,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 37,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 38,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 39,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,908.00",
|
||||
"账户",
|
||||
"余额 ¥14,074.00",
|
||||
"管理商品",
|
||||
"商品分类"
|
||||
"新建商品",
|
||||
"商品分类",
|
||||
"创建时间"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
# 功能审计 · products
|
||||
|
||||
路由:`/products` · 模式:quick
|
||||
合计 25 · ✅ works 24 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 1
|
||||
合计 40 · ✅ works 29 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)11 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,908.00
|
||||
- 账户
|
||||
- 余额 ¥14,074.00
|
||||
- 管理商品
|
||||
- 新建商品
|
||||
- 商品分类
|
||||
- 创建时间
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
"url": "http://127.0.0.1:5173/projects/new",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 15,
|
||||
"works": 15,
|
||||
"total": 18,
|
||||
"works": 18,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 48,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 48,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 36,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -108,6 +108,24 @@
|
||||
"idx": 5,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
@@ -118,12 +136,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -136,12 +154,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
"mutations": 43,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 29,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 39,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"mutations": 44,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"mutations": 56,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 48,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 28,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost",
|
||||
@@ -262,12 +316,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 18,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "pp-chip",
|
||||
@@ -280,7 +334,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"mutations": 13,
|
||||
"api": 0
|
||||
}
|
||||
}
|
||||
@@ -288,8 +342,7 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,072.00",
|
||||
"1 选择商品 未选择",
|
||||
"2 项目配置 时长 · 风格 · 人物"
|
||||
]
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# 功能审计 · projects-new
|
||||
|
||||
路由:`/projects/new` · 模式:quick
|
||||
合计 15 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
合计 18 · ✅ works 18 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
- 1 选择商品 未选择
|
||||
- 2 项目配置 时长 · 风格 · 人物
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
"url": "http://127.0.0.1:5173/projects",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 24,
|
||||
"works": 15,
|
||||
"total": 27,
|
||||
"works": 18,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 47,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 26,
|
||||
"mutations": 35,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -108,81 +108,9 @@
|
||||
"idx": 5,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 38,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -194,11 +122,119 @@
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 6,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 7,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 42,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 28,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "团队",
|
||||
"href": "/team",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 38,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "消费",
|
||||
"href": "/account",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 109,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "设置",
|
||||
"href": "/settings",
|
||||
"disabled": false,
|
||||
@@ -208,12 +244,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 50,
|
||||
"mutations": 23,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +280,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
"mutations": 47,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +298,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"mutations": 27,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-edit-toggle",
|
||||
@@ -262,12 +316,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 12,
|
||||
"mutations": 26,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary.btn-lg",
|
||||
@@ -280,28 +334,10 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 19,
|
||||
"mutations": 51,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"label": "",
|
||||
@@ -337,13 +373,30 @@
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,072.00",
|
||||
"管理项目",
|
||||
"新建项目",
|
||||
"商品品类",
|
||||
@@ -351,13 +404,10 @@
|
||||
"创建时间",
|
||||
"网格",
|
||||
"列表",
|
||||
"全部 6",
|
||||
"进行中 4",
|
||||
"已完成 2",
|
||||
"全部 20",
|
||||
"进行中 16",
|
||||
"已完成 4",
|
||||
"失败 0",
|
||||
"基础资产生成中",
|
||||
"脚本待生成",
|
||||
"故事板生成中",
|
||||
"视频片段生成中"
|
||||
"基础资产生成中"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
# 功能审计 · projects
|
||||
|
||||
路由:`/projects` · 模式:quick
|
||||
合计 24 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
合计 27 · ✅ works 18 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
- 管理项目
|
||||
- 新建项目
|
||||
- 商品品类
|
||||
@@ -17,12 +16,9 @@
|
||||
- 创建时间
|
||||
- 网格
|
||||
- 列表
|
||||
- 全部 6
|
||||
- 进行中 4
|
||||
- 已完成 2
|
||||
- 全部 20
|
||||
- 进行中 16
|
||||
- 已完成 4
|
||||
- 失败 0
|
||||
- 基础资产生成中
|
||||
- 脚本待生成
|
||||
- 故事板生成中
|
||||
- 视频片段生成中
|
||||
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
"url": "http://127.0.0.1:5173/settings",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 26,
|
||||
"works": 25,
|
||||
"total": 25,
|
||||
"works": 19,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 1,
|
||||
"noop": 0,
|
||||
"disabled": 2,
|
||||
"skipped": 3,
|
||||
"noop": 1,
|
||||
"blocked": 0
|
||||
},
|
||||
"results": [
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 15,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 37,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,33 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 105,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 2
|
||||
},
|
||||
"consoleNote": [
|
||||
"Failed to load resource: the server responded with a status of 404 (Not Found)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -208,12 +247,30 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +283,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,48 +301,34 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn",
|
||||
"label": "取消",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"api": 0
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
"label": "保存所有变更",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"disabled": true,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 48,
|
||||
"api": 11
|
||||
}
|
||||
"verdict": "disabled"
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "a",
|
||||
"role": "tab",
|
||||
"cls": "active",
|
||||
@@ -293,21 +336,21 @@
|
||||
"href": "#sec-profile",
|
||||
"disabled": false,
|
||||
"active": true,
|
||||
"verdict": "works",
|
||||
"verdict": "noop-active",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 0,
|
||||
"api": 1
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 19,
|
||||
"tag": "a",
|
||||
"role": "tab",
|
||||
"cls": "",
|
||||
"label": "安全3 设备",
|
||||
"label": "安全14 设备",
|
||||
"href": "#sec-security",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -317,15 +360,15 @@
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 1
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 17,
|
||||
"idx": 20,
|
||||
"tag": "a",
|
||||
"role": "tab",
|
||||
"cls": "",
|
||||
"label": "通知4/4",
|
||||
"label": "通知3/3",
|
||||
"href": "#sec-notify",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
@@ -339,43 +382,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 18,
|
||||
"tag": "a",
|
||||
"role": "tab",
|
||||
"cls": "",
|
||||
"label": "创作默认",
|
||||
"href": "#sec-pref",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 6,
|
||||
"api": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "a",
|
||||
"role": "tab",
|
||||
"cls": "",
|
||||
"label": "显示",
|
||||
"href": "#sec-display",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 21,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 20,
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "logout-pill",
|
||||
@@ -388,84 +395,24 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"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,
|
||||
"mutations": 12,
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"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
|
||||
}
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "x.modal-x",
|
||||
"label": "关闭",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 2,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
@@ -474,8 +421,9 @@
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户",
|
||||
"余额 ¥14,071.00",
|
||||
"创作默认",
|
||||
"显示",
|
||||
"上传新头像",
|
||||
"恢复默认",
|
||||
"验证",
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
# 功能审计 · settings
|
||||
|
||||
路由:`/settings` · 模式:quick
|
||||
合计 26 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
合计 25 · ✅ works 19 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 2
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,071.00
|
||||
- 创作默认
|
||||
- 显示
|
||||
- 上传新头像
|
||||
- 恢复默认
|
||||
- 验证
|
||||
|
||||
@@ -1,177 +1,33 @@
|
||||
[
|
||||
{
|
||||
"page": "dashboard",
|
||||
"blocked": 0,
|
||||
"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": 6,
|
||||
"noop": 1,
|
||||
"missing": 9
|
||||
},
|
||||
{
|
||||
"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": 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
|
||||
},
|
||||
{
|
||||
"page": "model-photo",
|
||||
"blocked": 0,
|
||||
"total": 32,
|
||||
"total": 35,
|
||||
"works": 31,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 3,
|
||||
"noop": 1,
|
||||
"missing": 8
|
||||
"missing": 4
|
||||
},
|
||||
{
|
||||
"page": "model-photo",
|
||||
"blocked": 0,
|
||||
"total": 49,
|
||||
"works": 44,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 5,
|
||||
"noop": 0,
|
||||
"missing": 7
|
||||
},
|
||||
{
|
||||
"page": "model-photo-demo-a",
|
||||
"blocked": 0,
|
||||
"total": 38,
|
||||
"works": 33,
|
||||
"total": 39,
|
||||
"works": 34,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
@@ -182,37 +38,25 @@
|
||||
{
|
||||
"page": "model-photo-demo-b",
|
||||
"blocked": 0,
|
||||
"total": 37,
|
||||
"works": 34,
|
||||
"total": 38,
|
||||
"works": 36,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 2,
|
||||
"noop": 1,
|
||||
"noop": 0,
|
||||
"missing": 5
|
||||
},
|
||||
{
|
||||
"page": "platform-cover",
|
||||
"blocked": 0,
|
||||
"total": 38,
|
||||
"works": 35,
|
||||
"total": 48,
|
||||
"works": 46,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"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
|
||||
"disabled": 1,
|
||||
"skipped": 0,
|
||||
"noop": 1,
|
||||
"missing": 7
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,27 +1,14 @@
|
||||
# 功能审计汇总
|
||||
|
||||
生成时间:2026-06-10T09:29:34.278Z · 模式:quick
|
||||
生成时间:2026-07-02T03:20:24.149Z · 模式:quick
|
||||
|
||||
| 页面 | 合计 | ✅works | ❌dead | 🛑error | ⏭skip | 🔍missing | 状态 |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 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 | |
|
||||
| asset-factory | 35 | 31 | **0** | 0 | 3 | 4 | |
|
||||
| model-photo | 49 | 44 | **0** | 0 | 5 | 7 | |
|
||||
| model-photo-demo-a | 39 | 34 | **0** | 0 | 4 | 5 | |
|
||||
| model-photo-demo-b | 38 | 36 | **0** | 0 | 2 | 5 | |
|
||||
| platform-cover | 48 | 46 | **0** | 0 | 0 | 7 | |
|
||||
|
||||
- ⛔blocked = 页面始终落登录页/未就绪(后端或远程库不可用),**未审计**,非「0 缺陷」。修好后端再单独 `--only <page>` 复跑。
|
||||
- ❌dead = 点了五路探针(URL/浮层/自身状态/网络/DOM)全无反应,优先修。
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
"url": "http://127.0.0.1:5173/team",
|
||||
"mode": "quick",
|
||||
"tally": {
|
||||
"total": 17,
|
||||
"works": 17,
|
||||
"total": 30,
|
||||
"works": 27,
|
||||
"dead": 0,
|
||||
"error": 0,
|
||||
"disabled": 0,
|
||||
"skipped": 0,
|
||||
"skipped": 3,
|
||||
"noop": 0,
|
||||
"blocked": 0
|
||||
},
|
||||
@@ -28,8 +28,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 32,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -64,7 +64,7 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 14,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -82,8 +82,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -100,7 +100,7 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 25,
|
||||
"mutations": 34,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
@@ -109,8 +109,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"label": "模特库",
|
||||
"href": "/models",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -118,8 +118,8 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 20,
|
||||
"api": 0
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -127,8 +127,8 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"label": "视频项目",
|
||||
"href": "/projects",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
@@ -145,6 +145,24 @@
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "图片生成",
|
||||
"href": "/asset-factory",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 41,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "资产库",
|
||||
"href": "/library",
|
||||
"disabled": false,
|
||||
@@ -154,12 +172,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 37,
|
||||
"api": 0
|
||||
"mutations": 38,
|
||||
"api": 5
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 8,
|
||||
"idx": 9,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "active",
|
||||
@@ -172,12 +190,12 @@
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"mutations": 19,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 9,
|
||||
"idx": 10,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -190,12 +208,33 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 1
|
||||
"mutations": 105,
|
||||
"api": 4
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 10,
|
||||
"idx": 11,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
"label": "垃圾桶",
|
||||
"href": "/trash",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"api": 2
|
||||
},
|
||||
"consoleNote": [
|
||||
"Failed to load resource: the server responded with a status of 404 (Not Found)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -208,12 +247,30 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 49,
|
||||
"mutations": 54,
|
||||
"api": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 11,
|
||||
"idx": 13,
|
||||
"tag": "div",
|
||||
"role": "button",
|
||||
"cls": "user",
|
||||
"label": "账户",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"self": true,
|
||||
"mutations": 22,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"tag": "a",
|
||||
"role": "",
|
||||
"cls": "",
|
||||
@@ -226,12 +283,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 25,
|
||||
"api": 0
|
||||
"mutations": 46,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 12,
|
||||
"idx": 15,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn",
|
||||
@@ -244,12 +301,12 @@
|
||||
"url": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 23,
|
||||
"mutations": 26,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 13,
|
||||
"idx": 16,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-primary",
|
||||
@@ -262,12 +319,12 @@
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 3,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 14,
|
||||
"idx": 17,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-sm",
|
||||
@@ -278,14 +335,32 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"mutations": 21,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 15,
|
||||
"idx": 18,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
"label": "邀请成员",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 19,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "btn.btn-ghost.btn-sm",
|
||||
@@ -296,14 +371,14 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 4,
|
||||
"mutations": 9,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 16,
|
||||
"idx": 20,
|
||||
"tag": "a",
|
||||
"role": "button",
|
||||
"cls": "more",
|
||||
@@ -314,17 +389,142 @@
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": true,
|
||||
"overlay": true,
|
||||
"overlay": false,
|
||||
"self": false,
|
||||
"mutations": 24,
|
||||
"mutations": 27,
|
||||
"api": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 21,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm",
|
||||
"label": "编辑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 5,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 22,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm",
|
||||
"label": "重置密码",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 23,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm.danger",
|
||||
"label": "移出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 24,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm",
|
||||
"label": "编辑",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 6,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 25,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm",
|
||||
"label": "重置密码",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 17,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 26,
|
||||
"tag": "button",
|
||||
"role": "",
|
||||
"cls": "icon-btn-sm.danger",
|
||||
"label": "移出",
|
||||
"href": "",
|
||||
"disabled": false,
|
||||
"active": false,
|
||||
"verdict": "works",
|
||||
"signals": {
|
||||
"url": false,
|
||||
"overlay": true,
|
||||
"self": false,
|
||||
"mutations": 8,
|
||||
"api": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"idx": 27,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 28,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
},
|
||||
{
|
||||
"idx": 29,
|
||||
"label": "",
|
||||
"tag": "",
|
||||
"verdict": "stale"
|
||||
}
|
||||
],
|
||||
"missing": [
|
||||
"搜索",
|
||||
"E E2E 桥接测试团队 20260529",
|
||||
"余额 ¥14,907.00",
|
||||
"账户"
|
||||
"余额 ¥14,072.00"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
# 功能审计 · team
|
||||
|
||||
路由:`/team` · 模式:quick
|
||||
合计 17 · ✅ works 17 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
合计 30 · ✅ works 27 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 0 · ⚪ disabled 0
|
||||
|
||||
## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式)
|
||||
> 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。
|
||||
|
||||
- 搜索
|
||||
- E E2E 桥接测试团队 20260529
|
||||
- 余额 ¥14,907.00
|
||||
- 账户
|
||||
- 余额 ¥14,072.00
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
"""修复 reserved_balance 冻结漂移(审计 I2)存量坏账。
|
||||
|
||||
根因:CreditReservation.task 是 OneToOneField(on_delete=CASCADE) —— 删任务/删项目
|
||||
级联删掉 ACTIVE 预留行,但 account.reserved_balance 冻结的份额永不归还。代码侧已由
|
||||
apps/billing/signals.py 的 pre_delete 守护堵住;本脚本回填历史漂移:
|
||||
对每个账户,在行锁事务内令 reserved_balance = Σ(ACTIVE 预留),差额落一条 RELEASE
|
||||
流水(task/user 为空,reason 注明修复),与 release_credit 的记账口径一致。
|
||||
|
||||
跑法(默认 dry-run 只报告;--apply 才写库):
|
||||
cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development \
|
||||
.venv/bin/python ../qa/repair_reserved_drift.py [--apply]
|
||||
"""
|
||||
import os
|
||||
import 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 django.db.models import Sum # noqa: E402
|
||||
|
||||
from apps.billing.models import CreditAccount, CreditLedger, CreditReservation # noqa: E402
|
||||
|
||||
apply_mode = "--apply" in sys.argv
|
||||
fixed = 0
|
||||
for account_id in CreditAccount.objects.values_list("id", flat=True):
|
||||
with transaction.atomic():
|
||||
account = CreditAccount.objects.select_for_update().get(id=account_id)
|
||||
active_sum = (
|
||||
CreditReservation.objects.filter(team=account.team, status=CreditReservation.Status.ACTIVE)
|
||||
.aggregate(s=Sum("amount"))["s"] or Decimal("0")
|
||||
)
|
||||
drift = account.reserved_balance - active_sum
|
||||
if drift == 0:
|
||||
continue
|
||||
print(f"[{account.team}] reserved={account.reserved_balance} ACTIVEΣ={active_sum} 漂移={drift}"
|
||||
f" -> {'修复' if apply_mode else 'dry-run 不写'}")
|
||||
if drift < 0:
|
||||
# reserved 比 ACTIVE 还小属另一种坏账(理论不该出现),不自动动,人工核
|
||||
print(" !! 漂移为负,跳过(需人工核查)")
|
||||
continue
|
||||
if not apply_mode:
|
||||
continue
|
||||
account.reserved_balance = active_sum
|
||||
account.save(update_fields=["reserved_balance", "updated_at"])
|
||||
CreditLedger.objects.create(
|
||||
team=account.team,
|
||||
ledger_type=CreditLedger.Type.RELEASE,
|
||||
amount=drift,
|
||||
balance_after=account.balance,
|
||||
reason="修复:任务删除级联吞预留的历史漂移回填(I2)",
|
||||
metadata={"kind": "repair_reserved_drift"},
|
||||
)
|
||||
fixed += 1
|
||||
print(f"\n{'已修复' if apply_mode else '待修复(dry-run)'}账户数:{fixed if apply_mode else '见上'}")
|
||||
Reference in New Issue
Block a user