Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

613 righe
17 KiB

  1. {
  2. "title": "训练编排返回列表与页面标签聚焦回归",
  3. "status": "PASS",
  4. "startedAt": "2026-09-05T16:40:46.677Z",
  5. "environment": {
  6. "browser": "Microsoft Edge / Playwright",
  7. "role": "真实管理员登录后切换教员",
  8. "origins": [
  9. "http://127.0.0.1:6180",
  10. "http://192.168.31.168:6180"
  11. ]
  12. },
  13. "checks": [
  14. {
  15. "title": "手动切换标签保留原编辑页",
  16. "status": "PASS",
  17. "details": {
  18. "before": {
  19. "path": "/content/training-projects/162/legacy",
  20. "entries": [
  21. {
  22. "key": "/dashboard",
  23. "fullPath": "/dashboard",
  24. "title": "工作总览",
  25. "locked": false
  26. },
  27. {
  28. "key": "/profile",
  29. "fullPath": "/profile",
  30. "title": "个人中心",
  31. "locked": false
  32. },
  33. {
  34. "key": "/content/training-projects",
  35. "fullPath": "/content/training-projects",
  36. "title": "训练编排",
  37. "locked": false
  38. },
  39. {
  40. "key": "/content/training-projects/161/legacy",
  41. "fullPath": "/content/training-projects/161/legacy",
  42. "title": "训练编排",
  43. "locked": false
  44. },
  45. {
  46. "key": "/content/training-projects/162/legacy",
  47. "fullPath": "/content/training-projects/162/legacy",
  48. "title": "训练编排",
  49. "locked": false
  50. }
  51. ],
  52. "labels": [
  53. {
  54. "title": "工作总览",
  55. "active": false
  56. },
  57. {
  58. "title": "个人中心",
  59. "active": false
  60. },
  61. {
  62. "title": "训练编排",
  63. "active": false
  64. },
  65. {
  66. "title": "训练编排",
  67. "active": false
  68. },
  69. {
  70. "title": "训练编排",
  71. "active": true
  72. }
  73. ]
  74. },
  75. "after": {
  76. "path": "/content/training-projects/161/legacy",
  77. "entries": [
  78. {
  79. "key": "/dashboard",
  80. "fullPath": "/dashboard",
  81. "title": "工作总览",
  82. "locked": false
  83. },
  84. {
  85. "key": "/profile",
  86. "fullPath": "/profile",
  87. "title": "个人中心",
  88. "locked": false
  89. },
  90. {
  91. "key": "/content/training-projects",
  92. "fullPath": "/content/training-projects",
  93. "title": "训练编排",
  94. "locked": false
  95. },
  96. {
  97. "key": "/content/training-projects/161/legacy",
  98. "fullPath": "/content/training-projects/161/legacy",
  99. "title": "训练编排",
  100. "locked": false
  101. },
  102. {
  103. "key": "/content/training-projects/162/legacy",
  104. "fullPath": "/content/training-projects/162/legacy",
  105. "title": "训练编排",
  106. "locked": false
  107. }
  108. ],
  109. "labels": [
  110. {
  111. "title": "工作总览",
  112. "active": false
  113. },
  114. {
  115. "title": "个人中心",
  116. "active": false
  117. },
  118. {
  119. "title": "训练编排",
  120. "active": false
  121. },
  122. {
  123. "title": "训练编排",
  124. "active": true
  125. },
  126. {
  127. "title": "训练编排",
  128. "active": false
  129. }
  130. ]
  131. },
  132. "method": "真实页面标签点击"
  133. },
  134. "screenshots": [
  135. "screenshots/01-manual-switch-keeps-editors.png"
  136. ]
  137. },
  138. {
  139. "title": "顶部返回只关闭当前编辑标签,保留列表及另一编辑标签",
  140. "status": "PASS",
  141. "details": {
  142. "path": "/content/training-projects",
  143. "entries": [
  144. {
  145. "key": "/dashboard",
  146. "fullPath": "/dashboard",
  147. "title": "工作总览",
  148. "locked": false
  149. },
  150. {
  151. "key": "/profile",
  152. "fullPath": "/profile",
  153. "title": "个人中心",
  154. "locked": false
  155. },
  156. {
  157. "key": "/content/training-projects",
  158. "fullPath": "/content/training-projects",
  159. "title": "训练编排",
  160. "locked": false
  161. },
  162. {
  163. "key": "/content/training-projects/162/legacy",
  164. "fullPath": "/content/training-projects/162/legacy",
  165. "title": "训练编排",
  166. "locked": false
  167. }
  168. ],
  169. "labels": [
  170. {
  171. "title": "工作总览",
  172. "active": false
  173. },
  174. {
  175. "title": "个人中心",
  176. "active": false
  177. },
  178. {
  179. "title": "训练编排",
  180. "active": true
  181. },
  182. {
  183. "title": "训练编排",
  184. "active": false
  185. }
  186. ]
  187. },
  188. "screenshots": [
  189. "screenshots/02-return-closes-current.png"
  190. ]
  191. },
  192. {
  193. "title": "刷新后已关闭标签不复活",
  194. "status": "PASS",
  195. "details": {
  196. "path": "/content/training-projects",
  197. "entries": [
  198. {
  199. "key": "/dashboard",
  200. "fullPath": "/dashboard",
  201. "title": "工作总览",
  202. "locked": false
  203. },
  204. {
  205. "key": "/profile",
  206. "fullPath": "/profile",
  207. "title": "个人中心",
  208. "locked": false
  209. },
  210. {
  211. "key": "/content/training-projects",
  212. "fullPath": "/content/training-projects",
  213. "title": "训练编排",
  214. "locked": false
  215. },
  216. {
  217. "key": "/content/training-projects/162/legacy",
  218. "fullPath": "/content/training-projects/162/legacy",
  219. "title": "训练编排",
  220. "locked": false
  221. }
  222. ],
  223. "labels": [
  224. {
  225. "title": "工作总览",
  226. "active": false
  227. },
  228. {
  229. "title": "个人中心",
  230. "active": false
  231. },
  232. {
  233. "title": "训练编排",
  234. "active": true
  235. },
  236. {
  237. "title": "训练编排",
  238. "active": false
  239. }
  240. ]
  241. },
  242. "screenshots": [
  243. "screenshots/03-refresh-no-resurrection.png"
  244. ]
  245. },
  246. {
  247. "title": "未保存时 Escape 取消返回,原页与修改保留",
  248. "status": "PASS",
  249. "details": {
  250. "path": "/content/training-projects/161/legacy",
  251. "entries": [
  252. {
  253. "key": "/dashboard",
  254. "fullPath": "/dashboard",
  255. "title": "工作总览",
  256. "locked": false
  257. },
  258. {
  259. "key": "/profile",
  260. "fullPath": "/profile",
  261. "title": "个人中心",
  262. "locked": false
  263. },
  264. {
  265. "key": "/content/training-projects",
  266. "fullPath": "/content/training-projects",
  267. "title": "训练编排",
  268. "locked": false
  269. },
  270. {
  271. "key": "/content/training-projects/162/legacy",
  272. "fullPath": "/content/training-projects/162/legacy",
  273. "title": "训练编排",
  274. "locked": false
  275. },
  276. {
  277. "key": "/content/training-projects/161/legacy",
  278. "fullPath": "/content/training-projects/161/legacy",
  279. "title": "训练编排",
  280. "locked": false
  281. }
  282. ],
  283. "labels": [
  284. {
  285. "title": "工作总览",
  286. "active": false
  287. },
  288. {
  289. "title": "个人中心",
  290. "active": false
  291. },
  292. {
  293. "title": "训练编排",
  294. "active": false
  295. },
  296. {
  297. "title": "训练编排",
  298. "active": false
  299. },
  300. {
  301. "title": "训练编排",
  302. "active": true
  303. }
  304. ]
  305. },
  306. "screenshots": [
  307. "screenshots/04-unsaved-return-confirmation.png",
  308. "screenshots/05-escape-keeps-editor.png"
  309. ]
  310. },
  311. {
  312. "title": "保存并离开失败时不导航、不删除编辑标签(浏览器模拟 503)",
  313. "status": "PASS",
  314. "details": {
  315. "tabs": {
  316. "path": "/content/training-projects/161/legacy",
  317. "entries": [
  318. {
  319. "key": "/dashboard",
  320. "fullPath": "/dashboard",
  321. "title": "工作总览",
  322. "locked": false
  323. },
  324. {
  325. "key": "/profile",
  326. "fullPath": "/profile",
  327. "title": "个人中心",
  328. "locked": false
  329. },
  330. {
  331. "key": "/content/training-projects",
  332. "fullPath": "/content/training-projects",
  333. "title": "训练编排",
  334. "locked": false
  335. },
  336. {
  337. "key": "/content/training-projects/162/legacy",
  338. "fullPath": "/content/training-projects/162/legacy",
  339. "title": "训练编排",
  340. "locked": false
  341. },
  342. {
  343. "key": "/content/training-projects/161/legacy",
  344. "fullPath": "/content/training-projects/161/legacy",
  345. "title": "训练编排",
  346. "locked": false
  347. }
  348. ],
  349. "labels": [
  350. {
  351. "title": "工作总览",
  352. "active": false
  353. },
  354. {
  355. "title": "个人中心",
  356. "active": false
  357. },
  358. {
  359. "title": "训练编排",
  360. "active": false
  361. },
  362. {
  363. "title": "训练编排",
  364. "active": false
  365. },
  366. {
  367. "title": "训练编排",
  368. "active": true
  369. }
  370. ]
  371. },
  372. "writes": [
  373. {
  374. "origin": "http://127.0.0.1:6180",
  375. "path": "/api/tran/v1/content/projects/161/assets/upload",
  376. "method": "POST",
  377. "response": 503,
  378. "forwarded": false
  379. },
  380. {
  381. "origin": "http://127.0.0.1:6180",
  382. "path": "/api/tran/v1/content/projects/161",
  383. "method": "PUT",
  384. "response": 503,
  385. "forwarded": false
  386. }
  387. ],
  388. "simulated": true
  389. },
  390. "screenshots": [
  391. "screenshots/06-save-failure-keeps-editor.png"
  392. ]
  393. },
  394. {
  395. "title": "明确放弃修改后返回并关闭当前编辑标签",
  396. "status": "PASS",
  397. "details": {
  398. "path": "/content/training-projects",
  399. "entries": [
  400. {
  401. "key": "/dashboard",
  402. "fullPath": "/dashboard",
  403. "title": "工作总览",
  404. "locked": false
  405. },
  406. {
  407. "key": "/profile",
  408. "fullPath": "/profile",
  409. "title": "个人中心",
  410. "locked": false
  411. },
  412. {
  413. "key": "/content/training-projects",
  414. "fullPath": "/content/training-projects",
  415. "title": "训练编排",
  416. "locked": false
  417. },
  418. {
  419. "key": "/content/training-projects/162/legacy",
  420. "fullPath": "/content/training-projects/162/legacy",
  421. "title": "训练编排",
  422. "locked": false
  423. }
  424. ],
  425. "labels": [
  426. {
  427. "title": "工作总览",
  428. "active": false
  429. },
  430. {
  431. "title": "个人中心",
  432. "active": false
  433. },
  434. {
  435. "title": "训练编排",
  436. "active": true
  437. },
  438. {
  439. "title": "训练编排",
  440. "active": false
  441. }
  442. ]
  443. },
  444. "screenshots": [
  445. "screenshots/07-discard-closes-current.png"
  446. ]
  447. },
  448. {
  449. "title": "服务端两项目版本、封面与内容校验值未变",
  450. "status": "PASS",
  451. "details": {
  452. "projects": [
  453. {
  454. "id": "161",
  455. "version": 9,
  456. "currentVersionId": "213",
  457. "publishedVersionId": "213",
  458. "coverUri": "fsvc://unreal-tran/image/2026/09/05/32b2fb56adf53691ede867a8c957c573.jpg",
  459. "checksum": "d5a0f4c872c8e275db980808375d9351bd51ea0aaf6b52bf453b7e8f9cc55605",
  460. "unchanged": true,
  461. "after": {
  462. "id": "161",
  463. "version": 9,
  464. "currentVersionId": "213",
  465. "publishedVersionId": "213",
  466. "coverUri": "fsvc://unreal-tran/image/2026/09/05/32b2fb56adf53691ede867a8c957c573.jpg",
  467. "checksum": "d5a0f4c872c8e275db980808375d9351bd51ea0aaf6b52bf453b7e8f9cc55605"
  468. }
  469. },
  470. {
  471. "id": "162",
  472. "version": 6,
  473. "currentVersionId": "214",
  474. "publishedVersionId": "214",
  475. "coverUri": "fsvc://unreal-tran/image/2026/09/05/be78d4ad687c3872a15001b8333f1afe.jpg",
  476. "checksum": "e13b82f8fbc38ad327d8f83baec8295316e614132acf5eeeba25ea7371dfd9d3",
  477. "unchanged": true,
  478. "after": {
  479. "id": "162",
  480. "version": 6,
  481. "currentVersionId": "214",
  482. "publishedVersionId": "214",
  483. "coverUri": "fsvc://unreal-tran/image/2026/09/05/be78d4ad687c3872a15001b8333f1afe.jpg",
  484. "checksum": "e13b82f8fbc38ad327d8f83baec8295316e614132acf5eeeba25ea7371dfd9d3"
  485. }
  486. }
  487. ],
  488. "forwardedBusinessWrites": 0
  489. },
  490. "screenshots": []
  491. },
  492. {
  493. "title": "局域网地址返回列表也关闭当前编辑标签",
  494. "status": "PASS",
  495. "details": {
  496. "origin": "http://192.168.31.168:6180",
  497. "tabs": {
  498. "path": "/content/training-projects",
  499. "entries": [
  500. {
  501. "key": "/dashboard",
  502. "fullPath": "/dashboard",
  503. "title": "工作总览",
  504. "locked": false
  505. },
  506. {
  507. "key": "/profile",
  508. "fullPath": "/profile",
  509. "title": "个人中心",
  510. "locked": false
  511. },
  512. {
  513. "key": "/content/training-projects",
  514. "fullPath": "/content/training-projects",
  515. "title": "训练编排",
  516. "locked": false
  517. }
  518. ],
  519. "labels": [
  520. {
  521. "title": "工作总览",
  522. "active": false
  523. },
  524. {
  525. "title": "个人中心",
  526. "active": false
  527. },
  528. {
  529. "title": "训练编排",
  530. "active": true
  531. }
  532. ]
  533. }
  534. },
  535. "screenshots": [
  536. "screenshots/08-lan-return-closes-current.png"
  537. ]
  538. }
  539. ],
  540. "blockedWrites": [
  541. {
  542. "origin": "http://127.0.0.1:6180",
  543. "path": "/api/tran/v1/content/projects/161/assets/upload",
  544. "method": "POST",
  545. "response": 503,
  546. "forwarded": false
  547. },
  548. {
  549. "origin": "http://127.0.0.1:6180",
  550. "path": "/api/tran/v1/content/projects/161",
  551. "method": "PUT",
  552. "response": 503,
  553. "forwarded": false
  554. }
  555. ],
  556. "pageErrors": [],
  557. "projects": [
  558. {
  559. "id": "161",
  560. "version": 9,
  561. "currentVersionId": "213",
  562. "publishedVersionId": "213",
  563. "coverUri": "fsvc://unreal-tran/image/2026/09/05/32b2fb56adf53691ede867a8c957c573.jpg",
  564. "checksum": "d5a0f4c872c8e275db980808375d9351bd51ea0aaf6b52bf453b7e8f9cc55605",
  565. "unchanged": true,
  566. "after": {
  567. "id": "161",
  568. "version": 9,
  569. "currentVersionId": "213",
  570. "publishedVersionId": "213",
  571. "coverUri": "fsvc://unreal-tran/image/2026/09/05/32b2fb56adf53691ede867a8c957c573.jpg",
  572. "checksum": "d5a0f4c872c8e275db980808375d9351bd51ea0aaf6b52bf453b7e8f9cc55605"
  573. }
  574. },
  575. {
  576. "id": "162",
  577. "version": 6,
  578. "currentVersionId": "214",
  579. "publishedVersionId": "214",
  580. "coverUri": "fsvc://unreal-tran/image/2026/09/05/be78d4ad687c3872a15001b8333f1afe.jpg",
  581. "checksum": "e13b82f8fbc38ad327d8f83baec8295316e614132acf5eeeba25ea7371dfd9d3",
  582. "unchanged": true,
  583. "after": {
  584. "id": "162",
  585. "version": 6,
  586. "currentVersionId": "214",
  587. "publishedVersionId": "214",
  588. "coverUri": "fsvc://unreal-tran/image/2026/09/05/be78d4ad687c3872a15001b8333f1afe.jpg",
  589. "checksum": "e13b82f8fbc38ad327d8f83baec8295316e614132acf5eeeba25ea7371dfd9d3"
  590. }
  591. }
  592. ],
  593. "preparationNotes": [],
  594. "scope": [
  595. "仅验证顶部返回列表及现有离开确认。打开已有训练 161/162,业务写请求全部由浏览器拦截。",
  596. "“保存并离开”的失败由浏览器模拟 HTTP 503;不代表真实服务端故障。没有真实保存、发布、上传或修改这两条项目。",
  597. "本轮未测试成功保存或成功发布;其业务路径未被本次代码修改。"
  598. ],
  599. "commands": [
  600. {
  601. "command": "pnpm run build",
  602. "status": "PASS",
  603. "details": "根代理执行,含 vue-tsc、Vite 与 iframe 校验;既有构建警告不影响退出码 0。"
  604. },
  605. {
  606. "command": "git diff --check",
  607. "status": "PASS",
  608. "details": "根代理执行,退出码 0。"
  609. }
  610. ],
  611. "finishedAt": "2026-09-05T16:41:29.185Z"
  612. }