2026-05-21-00-43-44 修复ZIP STL导入反馈
This commit is contained in:
@@ -135,7 +135,8 @@ interface AssetImportProgressState {
|
||||
totalBytes: number;
|
||||
loadedBytes: number;
|
||||
percent: number;
|
||||
phase: 'uploading' | 'processing' | 'done';
|
||||
phase: 'uploading' | 'processing' | 'done' | 'failed';
|
||||
message?: string;
|
||||
}
|
||||
|
||||
function formatFileSize(value: number) {
|
||||
@@ -953,8 +954,17 @@ export default function ProjectLibrary({
|
||||
setActionMessage(kind === 'dicom' ? `已导入 ${updated.dicomCount} 张 DICOM 影像` : `已导入 ${updated.modelCount ?? 0} 个 STL 模型`);
|
||||
window.setTimeout(() => setAssetImportProgress(null), 1800);
|
||||
} catch (error) {
|
||||
setActionMessage(error instanceof Error ? error.message : '项目资产导入失败');
|
||||
window.setTimeout(() => setAssetImportProgress(null), 2400);
|
||||
const message = error instanceof Error ? error.message : '项目资产导入失败';
|
||||
setAssetImportProgress((current) => ({
|
||||
kind,
|
||||
fileCount: files.length,
|
||||
totalBytes: current?.totalBytes ?? totalBytes,
|
||||
loadedBytes: current?.loadedBytes ?? 0,
|
||||
percent: current?.percent ?? 0,
|
||||
phase: 'failed',
|
||||
message,
|
||||
}));
|
||||
setActionMessage(message);
|
||||
} finally {
|
||||
setAssetImporting(false);
|
||||
}
|
||||
@@ -1516,15 +1526,29 @@ export default function ProjectLibrary({
|
||||
</div>
|
||||
|
||||
{assetImportProgress && (
|
||||
<div className="rounded-2xl border border-blue-100 bg-white px-5 py-3 shadow-sm">
|
||||
<div className={`rounded-2xl border px-5 py-3 shadow-sm ${
|
||||
assetImportProgress.phase === 'failed'
|
||||
? 'border-rose-200 bg-rose-50'
|
||||
: assetImportProgress.phase === 'done'
|
||||
? 'border-emerald-100 bg-white'
|
||||
: 'border-blue-100 bg-white'
|
||||
}`}>
|
||||
<div className="mb-2 flex items-center justify-between gap-4">
|
||||
<div className="flex min-w-0 items-center gap-3">
|
||||
<div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-blue-50 text-blue-600">
|
||||
<FileArchive size={17} />
|
||||
<div className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-xl ${
|
||||
assetImportProgress.phase === 'failed'
|
||||
? 'bg-rose-100 text-rose-600'
|
||||
: assetImportProgress.phase === 'done'
|
||||
? 'bg-emerald-50 text-emerald-600'
|
||||
: 'bg-blue-50 text-blue-600'
|
||||
}`}>
|
||||
{assetImportProgress.phase === 'failed' ? <X size={17} /> : <FileArchive size={17} />}
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<p className="truncate text-sm font-bold text-slate-800">
|
||||
{assetImportProgress.phase === 'done'
|
||||
{assetImportProgress.phase === 'failed'
|
||||
? `${describeImportKind(assetImportProgress.kind)}导入失败`
|
||||
: assetImportProgress.phase === 'done'
|
||||
? `${describeImportKind(assetImportProgress.kind)}导入完成`
|
||||
: assetImportProgress.phase === 'processing'
|
||||
? '上传完成,服务器正在解压与解析'
|
||||
@@ -1533,15 +1557,32 @@ export default function ProjectLibrary({
|
||||
<p className="mt-0.5 text-[11px] font-bold text-slate-400">
|
||||
{assetImportProgress.fileCount} 个文件 · {formatFileSize(assetImportProgress.loadedBytes)} / {formatFileSize(assetImportProgress.totalBytes)}
|
||||
</p>
|
||||
{assetImportProgress.phase === 'failed' && assetImportProgress.message && (
|
||||
<p className="mt-1 whitespace-normal text-[11px] font-bold leading-5 text-rose-700">
|
||||
{assetImportProgress.message}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<span className="shrink-0 font-mono text-sm font-black text-blue-600">
|
||||
<span className={`shrink-0 font-mono text-sm font-black ${
|
||||
assetImportProgress.phase === 'failed'
|
||||
? 'text-rose-600'
|
||||
: assetImportProgress.phase === 'done'
|
||||
? 'text-emerald-600'
|
||||
: 'text-blue-600'
|
||||
}`}>
|
||||
{assetImportProgress.percent}%
|
||||
</span>
|
||||
</div>
|
||||
<div className="h-2 overflow-hidden rounded-full bg-slate-100">
|
||||
<div
|
||||
className={`h-full rounded-full transition-all duration-300 ${assetImportProgress.phase === 'done' ? 'bg-emerald-500' : 'bg-blue-600'}`}
|
||||
className={`h-full rounded-full transition-all duration-300 ${
|
||||
assetImportProgress.phase === 'failed'
|
||||
? 'bg-rose-500'
|
||||
: assetImportProgress.phase === 'done'
|
||||
? 'bg-emerald-500'
|
||||
: 'bg-blue-600'
|
||||
}`}
|
||||
style={{ width: `${assetImportProgress.percent}%` }}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user