合并 master 最新变更
Project CI / Repository checks (pull_request) Successful in 6m28s
Project CI / Frontend tests (pull_request) Successful in 10m58s
Project CI / Backend tests (pull_request) Successful in 23m10s
Project CI / Native shell tests (pull_request) Successful in 25m43s

保留共享组件库与 UI 组件复用规范变更

整合 AGC 自主构建与项目工具链最新变更

合并 decision-log 两侧有效决策记录
This commit is contained in:
2026-08-31 14:06:51 +08:00
507 changed files with 20676 additions and 6155 deletions
+9
View File
@@ -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">
+37
View File
@@ -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%;
}