修正音频素材封面

使用用户提供的透明 PNG 替换自绘 SVG 音频封面
统一后台素材查询、精选审核、创作主页和画板素材库的音频封面引用
补齐画板图层列表音频图层封面展示
更新相关测试覆盖
This commit is contained in:
2026-07-06 14:44:43 +08:00
parent 0b766c8bf9
commit 7c449f0596
14 changed files with 40 additions and 31 deletions
@@ -154,7 +154,7 @@ test('后台素材查询音频素材使用统一封面缩略图', async () => {
const image = await screen.findByRole('img', { name: '素材:胜利音效' });
expect(image.getAttribute('src')).toBe(
'/creation-home/audio-asset-cover.svg',
'/creation-home/audio-asset-cover.png',
);
expect(getAdminAssetReadUrl).not.toHaveBeenCalled();
});
@@ -19,7 +19,7 @@ interface AdminEditorAssetQueryPageProps {
}
const ADMIN_ASSET_READ_EXPIRE_SECONDS = 300;
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.svg';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png';
export function AdminEditorAssetQueryPage({
token,
@@ -200,7 +200,7 @@ test('后台精选审核音频素材使用统一封面缩略图', async () => {
const image = await screen.findByRole('img', { name: '精选素材:胜利音效' });
expect(image.getAttribute('src')).toBe(
'/creation-home/audio-asset-cover.svg',
'/creation-home/audio-asset-cover.png',
);
expect(getAdminAssetReadUrl).not.toHaveBeenCalled();
});
@@ -24,7 +24,7 @@ interface AdminEditorShowcaseReviewPageProps {
}
const ADMIN_SHOWCASE_READ_EXPIRE_SECONDS = 300;
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.svg';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png';
const showcaseCategoryOptions = [
{ value: 'packs', label: '素材包' },
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

@@ -1,19 +0,0 @@
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 256 256"
role="img"
aria-label="音频素材"
>
<g
fill="none"
stroke="#dc7f58"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="16"
>
<path d="M92 185V35l152-24v149" />
<path d="M92 87l152-24" />
<ellipse cx="53" cy="207" rx="41" ry="24" transform="rotate(4 53 207)" />
<ellipse cx="201" cy="193" rx="41" ry="24" transform="rotate(-4 201 193)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 475 B

@@ -547,7 +547,7 @@ describe('CreationLandingView', () => {
name: '背景音乐',
});
expect(image.getAttribute('src')).toBe(
'/creation-home/audio-asset-cover.svg',
'/creation-home/audio-asset-cover.png',
);
});
@@ -191,7 +191,7 @@ function ShowcaseAudioPreview({
objectKey: preview.objectKey,
});
const coverSrc =
preview.coverSrc?.trim() || '/creation-home/audio-asset-cover.svg';
preview.coverSrc?.trim() || '/creation-home/audio-asset-cover.png';
return (
<div className="creation-landing__asset-audio-preview">
@@ -459,7 +459,7 @@ describe('creationShowcaseModel', () => {
expect(items).toHaveLength(1);
expect(items[0]?.previews[0]?.mediaType).toBe('audio');
expect(items[0]?.previews[0]?.coverSrc).toBe(
'/creation-home/audio-asset-cover.svg',
'/creation-home/audio-asset-cover.png',
);
expect(items[0]?.author).toBe('当前用户');
expect(items[0]?.cost).toBe('5泥点');
@@ -56,7 +56,7 @@ type ShowcaseAssetGroup = {
};
const UNKNOWN_META_VALUE = '-';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.svg';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png';
const SHOWCASE_COST_KEYS = [
'priceMudPoints',
@@ -249,7 +249,7 @@ describe('ImageCanvasAssetRowView', () => {
expect(screen.getByText('音频')).toBeTruthy();
const image = screen.getByRole('img', { name: '素材:胜利音效.mp3' });
expect(image.getAttribute('src')).toBe(
'/creation-home/audio-asset-cover.svg',
'/creation-home/audio-asset-cover.png',
);
expect(
document.querySelector('.image-canvas-editor__asset-media-overlay'),
@@ -24,7 +24,7 @@ import {
getCanvasMediaPreviewMarker,
} from './ImageCanvasMediaModel';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.svg';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png';
export type ImageCanvasAssetRowViewProps = {
asset: EditorAsset;
@@ -7,6 +7,8 @@ import type {
ImageContextMenuState,
} from './ImageCanvasEditorTypes';
const AUDIO_ASSET_COVER_SRC = '/creation-home/audio-asset-cover.png';
export type ImageCanvasLayerPanelViewProps = {
layers: CanvasLayer[];
selectedLayerId: string | null;
@@ -52,8 +54,12 @@ export function ImageCanvasLayerPanelView({
]
.filter(Boolean)
.join(' · ')}
imageSrc={layer.src}
objectKey={layer.mediaType === 'image' ? layer.objectKey : undefined}
imageSrc={
layer.mediaType === 'audio' ? AUDIO_ASSET_COVER_SRC : layer.src
}
objectKey={
layer.mediaType === 'image' ? layer.objectKey : undefined
}
imageAlt={`图层缩略图:${layer.title}`}
selected={selectedLayerId === layer.id}
primaryLabel={`选择图层${layer.title}`}
@@ -297,6 +297,28 @@ describe('ImageCanvasSidebarView', () => {
).toBeTruthy();
});
it('uses the transparent audio cover for audio layer thumbnails', () => {
render(
<ImageCanvasSidebarView
{...createSidebarProps({
activeSidebarPanel: 'layers',
layers: [
createLayer({
title: '胜利音效',
src: '/generated-character-drafts/editor-audios/win.mp3',
mediaType: 'audio',
}),
],
})}
/>,
);
const image = screen.getByAltText('图层缩略图:胜利音效');
expect(image.getAttribute('src')).toBe(
'/creation-home/audio-asset-cover.png',
);
});
it('filters canvas layers from the sidebar search field', () => {
render(
<ImageCanvasSidebarView