合并 master 最新变更
保留共享组件库与 UI 组件复用规范变更 整合 AGC 自主构建与项目工具链最新变更 合并 decision-log 两侧有效决策记录
This commit is contained in:
@@ -362,6 +362,10 @@ export interface AdminEditorAssetPayload {
|
||||
assetKind?: string | null;
|
||||
generationInputs?: Record<string, unknown> | null;
|
||||
sourceResourceId?: string | null;
|
||||
sourceImageSrc?: string | null;
|
||||
sourceObjectKey?: string | null;
|
||||
sourceAssetObjectId?: string | null;
|
||||
sourceLabel?: string | null;
|
||||
thumbnailSrc?: string | null;
|
||||
generationCostMudPoints: number;
|
||||
createdAt: string;
|
||||
@@ -404,6 +408,11 @@ export interface AdminEditorShowcaseAssetPayload {
|
||||
model?: string | null;
|
||||
provider?: string | null;
|
||||
taskId?: string | null;
|
||||
sourceResourceId?: string | null;
|
||||
sourceImageSrc?: string | null;
|
||||
sourceObjectKey?: string | null;
|
||||
sourceAssetObjectId?: string | null;
|
||||
sourceLabel?: string | null;
|
||||
assetKind?: string | null;
|
||||
generationInputs?: Record<string, unknown> | null;
|
||||
thumbnailSrc?: string | null;
|
||||
|
||||
@@ -25,6 +25,11 @@ export interface AdminPreviewableEditorAsset {
|
||||
thumbnailSrc?: string | null;
|
||||
imageSequenceFrames?: AdminEditorImageSequenceFramePayload[] | null;
|
||||
imageSequenceDurationMs?: number | null;
|
||||
sourceResourceId?: string | null;
|
||||
sourceImageSrc?: string | null;
|
||||
sourceObjectKey?: string | null;
|
||||
sourceAssetObjectId?: string | null;
|
||||
sourceLabel?: string | null;
|
||||
}
|
||||
|
||||
export function AdminEditorAssetThumbnail({
|
||||
@@ -70,6 +75,15 @@ export function AdminEditorAssetPreviewDialog({
|
||||
token: string;
|
||||
onClose: () => void;
|
||||
}) {
|
||||
const sourceEntry = entry.sourceImageSrc?.trim()
|
||||
? {
|
||||
assetId: entry.sourceResourceId ?? `${entry.assetId}-source`,
|
||||
label: entry.sourceLabel?.trim() || '原图',
|
||||
imageSrc: entry.sourceImageSrc,
|
||||
objectKey: entry.sourceObjectKey,
|
||||
}
|
||||
: null;
|
||||
|
||||
return (
|
||||
<div className="admin-confirm-backdrop" role="presentation">
|
||||
<section
|
||||
@@ -91,13 +105,19 @@ export function AdminEditorAssetPreviewDialog({
|
||||
<X size={17} aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
{sourceEntry ? (
|
||||
<div className="admin-asset-query-source-preview">
|
||||
<h4>原图</h4>
|
||||
<AdminEditorAssetPreviewMedia entry={sourceEntry} token={token} />
|
||||
</div>
|
||||
) : null}
|
||||
<AdminEditorAssetPreviewMedia entry={entry} token={token} />
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
function AdminEditorAssetPreviewMedia({
|
||||
export function AdminEditorAssetPreviewMedia({
|
||||
entry,
|
||||
token,
|
||||
}: {
|
||||
|
||||
@@ -16,6 +16,7 @@ import type {
|
||||
} from '../api/adminApiTypes';
|
||||
import {
|
||||
AdminEditorAssetPreviewDialog,
|
||||
AdminEditorAssetPreviewMedia,
|
||||
AdminEditorAssetThumbnail,
|
||||
} from '../components/AdminEditorAssetMedia';
|
||||
import { AdminUserReferenceButton } from '../components/AdminUserReferenceButton';
|
||||
@@ -561,14 +562,34 @@ function AdminAssetDetailDialog({
|
||||
</button>
|
||||
</div>
|
||||
<div className="admin-asset-query-detail-layout">
|
||||
<button
|
||||
className="admin-asset-query-thumb-button admin-asset-query-detail-thumb-button"
|
||||
title="预览素材"
|
||||
type="button"
|
||||
onClick={() => onPreview(entry)}
|
||||
>
|
||||
<AdminEditorAssetThumbnail entry={entry} token={token} />
|
||||
</button>
|
||||
<div className="admin-asset-query-detail-media">
|
||||
{entry.sourceImageSrc?.trim() ? (
|
||||
<div className="admin-asset-query-detail-media-card">
|
||||
<h4>原图</h4>
|
||||
<AdminEditorAssetPreviewMedia
|
||||
entry={{
|
||||
assetId:
|
||||
entry.sourceResourceId ?? `${entry.assetId}-source`,
|
||||
label: entry.sourceLabel?.trim() || '原图',
|
||||
imageSrc: entry.sourceImageSrc,
|
||||
objectKey: entry.sourceObjectKey,
|
||||
}}
|
||||
token={token}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
<div className="admin-asset-query-detail-media-card">
|
||||
<h4>当前结果</h4>
|
||||
<button
|
||||
className="admin-asset-query-thumb-button admin-asset-query-detail-thumb-button"
|
||||
title="预览素材"
|
||||
type="button"
|
||||
onClick={() => onPreview(entry)}
|
||||
>
|
||||
<AdminEditorAssetThumbnail entry={entry} token={token} />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<dl className="admin-info-list admin-detail-list">
|
||||
<AdminInfoItem label="作者">
|
||||
<div className="admin-inline-identity">
|
||||
|
||||
@@ -17,6 +17,7 @@ import type {
|
||||
} from '../api/adminApiTypes';
|
||||
import {
|
||||
AdminEditorAssetPreviewDialog,
|
||||
AdminEditorAssetPreviewMedia,
|
||||
AdminEditorAssetThumbnail,
|
||||
} from '../components/AdminEditorAssetMedia';
|
||||
import { AdminUserReferenceButton } from '../components/AdminUserReferenceButton';
|
||||
@@ -709,18 +710,38 @@ function AdminShowcaseDetailDialog({
|
||||
</button>
|
||||
</div>
|
||||
<div className="admin-asset-query-detail-layout">
|
||||
<button
|
||||
className="admin-asset-query-thumb-button admin-asset-query-detail-thumb-button"
|
||||
title="预览素材"
|
||||
type="button"
|
||||
onClick={() => onPreview(entry)}
|
||||
>
|
||||
<AdminEditorAssetThumbnail
|
||||
entry={entry}
|
||||
token={token}
|
||||
altPrefix="精选素材"
|
||||
/>
|
||||
</button>
|
||||
<div className="admin-asset-query-detail-media">
|
||||
{entry.sourceImageSrc?.trim() ? (
|
||||
<div className="admin-asset-query-detail-media-card">
|
||||
<h4>原图</h4>
|
||||
<AdminEditorAssetPreviewMedia
|
||||
entry={{
|
||||
assetId:
|
||||
entry.sourceResourceId ?? `${entry.assetId}-source`,
|
||||
label: entry.sourceLabel?.trim() || '原图',
|
||||
imageSrc: entry.sourceImageSrc,
|
||||
objectKey: entry.sourceObjectKey,
|
||||
}}
|
||||
token={token}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
<div className="admin-asset-query-detail-media-card">
|
||||
<h4>当前结果</h4>
|
||||
<button
|
||||
className="admin-asset-query-thumb-button admin-asset-query-detail-thumb-button"
|
||||
title="预览素材"
|
||||
type="button"
|
||||
onClick={() => onPreview(entry)}
|
||||
>
|
||||
<AdminEditorAssetThumbnail
|
||||
entry={entry}
|
||||
token={token}
|
||||
altPrefix="精选素材"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<dl className="admin-info-list admin-detail-list">
|
||||
<AdminInfoItem label="作者">
|
||||
<div className="admin-inline-identity">
|
||||
|
||||
@@ -1655,6 +1655,18 @@ button:disabled {
|
||||
width: min(100%, 860px);
|
||||
}
|
||||
|
||||
.admin-asset-query-source-preview {
|
||||
margin: 0 20px 16px;
|
||||
padding-bottom: 16px;
|
||||
border-bottom: 1px solid #e2e8f0;
|
||||
}
|
||||
|
||||
.admin-asset-query-source-preview h4 {
|
||||
margin: 0 0 8px;
|
||||
color: #64748b;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.admin-asset-query-prompt-dialog .admin-panel-heading > div,
|
||||
.admin-asset-query-detail-dialog .admin-panel-heading > div,
|
||||
.admin-asset-query-preview-dialog .admin-panel-heading > div {
|
||||
@@ -1683,6 +1695,27 @@ button:disabled {
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-media {
|
||||
display: grid;
|
||||
gap: 14px;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-media-card {
|
||||
display: grid;
|
||||
gap: 7px;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-media-card h4 {
|
||||
margin: 0;
|
||||
color: #64748b;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-media-card .admin-asset-query-preview-media {
|
||||
width: 220px;
|
||||
height: 220px;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-thumb-button .admin-asset-query-thumb {
|
||||
width: 220px;
|
||||
height: 220px;
|
||||
@@ -2332,6 +2365,10 @@ button:disabled {
|
||||
justify-self: center;
|
||||
}
|
||||
|
||||
.admin-asset-query-detail-media {
|
||||
justify-items: center;
|
||||
}
|
||||
|
||||
.admin-dashboard-tabs {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user