显示精选审核提交失败原因

统一素材精选审核提交资格判断

在素材菜单显示不可提交和后端拒绝原因

将编辑器业务拒绝映射为 400 并保留中文原因

补充精选审核原因展示测试和文档口径
This commit is contained in:
2026-07-06 21:35:10 +08:00
parent be7f0375e5
commit 2d631becc7
10 changed files with 281 additions and 24 deletions
@@ -288,6 +288,82 @@ export function getSelectableAssets(assets: EditorAsset[]) {
return assets.filter((asset) => asset.sourceKind === 'uploaded');
}
export type AssetShowcaseSubmissionState = {
canSubmit: boolean;
label: string;
reason: string | null;
};
function normalizeAssetShowcaseReason(value: string | null | undefined) {
return value?.trim() || null;
}
export function resolveAssetShowcaseSubmissionState(
asset: EditorAsset,
): AssetShowcaseSubmissionState {
const reviewStatus = asset.showcaseReviewStatus ?? null;
if (reviewStatus === 'pending') {
return {
canSubmit: false,
label: '精选审核中',
reason: '素材正在审核中,请等待审核结果',
};
}
if (reviewStatus === 'approved') {
return {
canSubmit: false,
label:
asset.showcaseDisplayEnabled === false
? '已入选精选,暂未展示'
: '已入选精选',
reason:
asset.showcaseDisplayEnabled === false
? '素材已通过审核,运营后台开启展示后才会出现在前台'
: '素材已经入选精选',
};
}
if (reviewStatus === 'rejected') {
return {
canSubmit: false,
label: '精选未通过',
reason: '该素材审核未通过,不能重复提交',
};
}
if (asset.sourceType !== 'generated') {
return {
canSubmit: false,
label: '提交精选审核',
reason: '只有生成素材可以提交精选审核',
};
}
if (!asset.persisted) {
return {
canSubmit: false,
label: '提交精选审核',
reason: '素材保存完成后才能提交精选审核',
};
}
if (!asset.src.trim()) {
return {
canSubmit: false,
label: '提交精选审核',
reason: '没有媒体内容的素材不能提交精选审核',
};
}
return {
canSubmit: true,
label: '提交精选审核',
reason: normalizeAssetShowcaseReason(asset.showcaseSubmitError),
};
}
export function areAllSelectableAssetsSelected(
selectableAssets: EditorAsset[],
selectedAssetIds: Set<string>,