feat(embed,ui04): E07 acceptance — matrix completion, hostile-CSS hardening, measurements and record closure
- E07 e2e (7 cases): 4-viewport fixed size, narrow shrink + dual-slot 12px stack, single/static + empty state + two-photo loop copies, broken-thumb drop, reducedMotion stop with manual arrows, forged postMessage rejected, hostile CSS (!important box-sizing/border) with inline-important countermeasures + duplicate script dedup - loader v2: geometry-critical properties upgraded to inline !important (beats host stylesheet !important) - pre-existing fixes: likes.spec view-count assertion vs concurrent session's AlbumHeader unicode icons (toContainText); embed-v2 host port moved to 3998 (3999 collides with embed-crossorigin under parallel full runs); prettier formatting of two concurrent-session files (formatting-only) - evidence: matrix EMB-A01..A16 closed in acceptance record (mechanism-level items honestly marked), measurements (loader v2 9885B/gzip 3959B, first-load 1 GET + 1 WS, DOM<=16), refreshed screenshots/recordings, master plan UI-04 note - regression: root lint/typecheck/test 12 packages green; embed suites 43/43; admin embed-slots 5/5; journey pre-existing env failure reproduced at clean HEAD (registered) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -320,7 +320,7 @@ describe('buildPreviewPlacement 本地预览停靠几何(草稿即时反映,
|
||||
})
|
||||
|
||||
it('mobile:窄屏强制 sm + 默认收起(§5.4 <480px);宽度按剩余宽收缩防溢出(carousel)', () => {
|
||||
const v1 = { ...DEFAULT_EMBED_SETTINGS, displayMode: 'carousel' }
|
||||
const v1: EmbedSettingsDraft = { ...DEFAULT_EMBED_SETTINGS, displayMode: 'carousel' }
|
||||
const placement = buildPreviewPlacement(v1, 'mobile')
|
||||
expect(placement.size).toBe('sm')
|
||||
expect(placement.width).toBe(280)
|
||||
|
||||
@@ -61,7 +61,11 @@
|
||||
<!-- UI-04 v2:真实组件预览(iframe 载 viewer /embed-preview——真实
|
||||
EmbedStream/引擎/气泡层,样例数据注入;配置经 postMessage 实时
|
||||
更新,§8.2「preview 用真实展示组件,数据源注入」)。 -->
|
||||
<div v-if="isV2 && !isCollapsed" class="embed-preview-v2frame" data-test="embed-preview-v2">
|
||||
<div
|
||||
v-if="isV2 && !isCollapsed"
|
||||
class="embed-preview-v2frame"
|
||||
data-test="embed-preview-v2"
|
||||
>
|
||||
<iframe
|
||||
ref="previewFrame"
|
||||
:src="previewSrc"
|
||||
|
||||
@@ -6,10 +6,7 @@
|
||||
import { ref } from 'vue'
|
||||
|
||||
export function useAdminUserPages(
|
||||
fetchPage: (
|
||||
page: number,
|
||||
pageSize: number,
|
||||
) => Promise<Api.AdminUser.ListResponse>,
|
||||
fetchPage: (page: number, pageSize: number) => Promise<Api.AdminUser.ListResponse>
|
||||
) {
|
||||
const items = ref<Api.AdminUser.Item[]>([])
|
||||
const total = ref(0)
|
||||
|
||||
@@ -65,11 +65,7 @@
|
||||
<ElTableColumn :label="$t('usersManage.list.colDisplayName')" min-width="180">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center gap-2">
|
||||
<ElAvatar
|
||||
:size="28"
|
||||
:src="row.synced?.avatar || undefined"
|
||||
data-test="user-avatar"
|
||||
>
|
||||
<ElAvatar :size="28" :src="row.synced?.avatar || undefined" data-test="user-avatar">
|
||||
{{ row.displayName.slice(0, 1) }}
|
||||
</ElAvatar>
|
||||
<span data-test="user-display-name">{{ row.displayName }}</span>
|
||||
|
||||
Reference in New Issue
Block a user