diff --git a/components/UploadModal.tsx b/components/UploadModal.tsx index 9ce3fbe..1e89ef2 100644 --- a/components/UploadModal.tsx +++ b/components/UploadModal.tsx @@ -51,6 +51,8 @@ export default function UploadModal({ onClose, onSuccess }: UploadModalProps) { const modalControlClass = 'w-full px-4 py-2.5 text-sm rounded-lg outline-none transition-colors border bg-white dark:bg-slate-800 text-slate-900 dark:text-white border-slate-300 dark:border-slate-700 focus-visible:ring-2 focus-visible:ring-slate-200 dark:focus-visible:ring-slate-700 focus-visible:border-slate-900 dark:focus-visible:border-slate-500 placeholder:text-slate-400 dark:placeholder:text-slate-500' const requiredControlClass = 'bg-slate-50 dark:bg-slate-800 border-slate-400 dark:border-slate-600' + const uploadZoneClass = 'border border-dashed border-slate-300 dark:border-slate-600 rounded-lg p-4 transition-colors hover:border-slate-400 dark:hover:border-slate-500 hover:bg-slate-50 dark:hover:bg-slate-800 cursor-pointer' + const uploadTileClass = 'flex-shrink-0 rounded-lg border border-dashed border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 flex items-center justify-center text-slate-500 dark:text-slate-400' const [previewImages, setPreviewImages] = useState([]) // 多预览图(最多5张) const [previewUrls, setPreviewUrls] = useState([]) // 多预览图预览URLs const [displayImage, setDisplayImage] = useState(null) // PSD展示图片 @@ -1073,7 +1075,7 @@ const isVideoFile = (file: File) => { if (xhr.status === 413) { errorMsg = '文件过大,请联系管理员增加上传限制' } else if (xhr.status === 408 || xhr.status === 504) { - errorMsg = '上传超时,建议:\n1. 压缩文件后再上传\n2. 使用内网地址(更快)\n3. 分批上传大文件' + errorMsg = '上传超时,请压缩文件、使用内网地址或分批上传后重试' } else if (xhr.status >= 500) { errorMsg = `服务器错误 (${xhr.status}):${errorMsg}` } @@ -1081,7 +1083,7 @@ const isVideoFile = (file: File) => { setError(errorMsg) } catch (parseError) { console.error('[UploadModal] Failed to parse error response:', parseError) - setError(`上传失败 (状态码: ${xhr.status})\n响应内容: ${xhr.responseText.substring(0, 200)}`) + setError(`上传失败,服务器返回异常(状态码:${xhr.status}),请稍后重试或联系管理员`) } setUploading(false) setRetryCount(0) @@ -1101,14 +1103,14 @@ const isVideoFile = (file: File) => { // 如果上传进度已达到100%,可能实际已成功 if (uploadProgress === 100 && isConnectionReset) { - errorMsg = '上传可能已完成。\n\n由于网络原因,无法确认最终状态。\n\n请执行以下操作:\n1. 刷新页面查看文件是否已上传\n2. 如果文件已存在,说明上传成功\n3. 如果未看到文件,请重新上传\n\n提示:使用内网地址上传更稳定' + errorMsg = '上传结果暂未确认,请刷新素材列表检查是否已经保存' // 3秒后自动关闭弹窗并刷新 setTimeout(() => { onClose() window.location.reload() }, 5000) } else if (isConnectionReset) { - errorMsg = '网络连接中断,可能原因:\n• 文件过大导致超时\n• 网络不稳定\n• 服务器响应慢\n\n建议:\n1. 检查文件大小(压缩包建议<1GB)\n2. 使用内网地址上传(更快更稳定)\n3. 如果是大文件,尝试压缩后再上传\n4. 刷新页面检查文件是否已上传成功' + errorMsg = '网络连接中断,上传结果暂未确认。请刷新列表检查;如未出现,请使用内网地址或压缩后重试' } setError(errorMsg) @@ -1195,10 +1197,10 @@ const isVideoFile = (file: File) => { > {savedUploadData && (
-

- 📎 检测到未完成的上传 +

+ 检测到未完成的上传

-
+

素材类型:{savedUploadData.materialType || '未知'}

@@ -1246,8 +1248,7 @@ const isVideoFile = (file: File) => { >
@@ -1349,7 +1350,7 @@ const isVideoFile = (file: File) => {
{ /> {previewImages.length === 0 ? (
-
+

- 点击或拖拽上传{isVideoTemplate ? '视频封面(可选,最多5张)' : '预览图(最多5张)'} + 上传{isVideoTemplate ? '视频封面(可选,最多5张)' : '预览图(最多5张)'}

{isVideoTemplate - ? '支持 JPG、PNG、WebP 等格式。如不上传,系统将自动从视频中截取封面图' - : '支持 JPG、PNG、WebP 等格式,可直接拖拽图片到此区域'} + ? '支持 JPG、PNG、WebP;不上传时系统会尝试自动截取封面' + : '支持 JPG、PNG、WebP,可拖拽上传'}

@@ -1446,7 +1447,7 @@ const isVideoFile = (file: File) => { e.stopPropagation() previewInputRef.current?.click() }} - className="w-full aspect-square rounded-xl border-2 border-dashed border-slate-300/80 dark:border-slate-600/80 flex flex-col items-center justify-center gap-2 text-slate-500 dark:text-slate-400 bg-white/40 dark:bg-slate-800/40 hover:border-blue-400 hover:text-blue-500 dark:hover:border-blue-500 dark:hover:text-blue-400 transition-colors" + className="w-full aspect-square rounded-lg border border-dashed border-slate-300 dark:border-slate-600 flex flex-col items-center justify-center gap-2 text-slate-500 dark:text-slate-400 bg-white dark:bg-slate-800 hover:border-slate-400 hover:text-slate-700 dark:hover:border-slate-500 dark:hover:text-slate-200 transition-colors" > @@ -1463,7 +1464,7 @@ const isVideoFile = (file: File) => { 已上传 {previewImages.length}/5 张,第一张自动设为{isVideoTemplate ? '视频封面' : '卡片封面'}

- 支持 JPG、PNG、WebP 等格式,可直接拖拽图片到此区域 + 支持 JPG、PNG、WebP,可拖拽调整顺序

@@ -1481,8 +1482,8 @@ const isVideoFile = (file: File) => {
{ >
{displayImageUrl ? ( -
+
PSD 展示图
) : ( -
- +
+
@@ -1510,9 +1511,8 @@ const isVideoFile = (file: File) => { accept="image/*" className="hidden" /> -

点击或拖拽上传 PSD 展示图

-

建议上传详情页第一屏,支持 JPG/PNG/WebP

-

第一张图会自动作为预览图,超高图片会自动切割

+

上传 PSD 展示图

+

支持 JPG、PNG、WebP;超高图片会自动切割

@@ -1534,7 +1534,7 @@ const isVideoFile = (file: File) => {
{ className="hidden" />

- 点击或拖拽上传{isVideoTemplate ? '视频文件' : isAudioTemplate ? '音频文件' : '素材压缩包'} + 上传{isVideoTemplate ? '视频文件' : isAudioTemplate ? '音频文件' : '素材压缩包'}

{isVideoTemplate ? '支持 MP4、MOV、AVI、MKV、WebM 等常见视频格式' : isAudioTemplate ? '支持 MP3、WAV、FLAC、AAC、M4A 等常见音频格式' : '支持 ZIP、RAR、7Z 等压缩格式'} @@ -1612,7 +1612,7 @@ const isVideoFile = (file: File) => { )} {uploadComplete && (

- ✓ 上传成功,正在关闭... + 上传成功,正在关闭...
)}
diff --git a/components/ui/Modal.tsx b/components/ui/Modal.tsx index 47c7cf1..733c36c 100644 --- a/components/ui/Modal.tsx +++ b/components/ui/Modal.tsx @@ -18,7 +18,7 @@ import { useThemeStyles, cn } from '@/lib/ui-styles' export type ModalSize = 'xs' | 'small' | 'medium' | 'large' | 'xlarge' | 'xxlarge' | 'fullscreen' -const MODAL_BORDER_RADIUS = 32 +const MODAL_BORDER_RADIUS = 12 const sizeStyleMap: Record = { xs: { width: 'min(90vw, 20rem)', maxWidth: '20rem' }, diff --git a/docs/商业化地基排查问题清单_20260524.md b/docs/商业化地基排查问题清单_20260524.md index 3e20737..f998d84 100644 --- a/docs/商业化地基排查问题清单_20260524.md +++ b/docs/商业化地基排查问题清单_20260524.md @@ -1062,10 +1062,9 @@ NAS 私有化系统可能在平板或窄屏浏览器里使用。模板编辑器 证据: - `components/UploadModal.tsx:50`:已完成第一轮收口,动态模板字段统一使用中性输入框样式。 -- `components/UploadModal.tsx:1196`:恢复上传提示已去掉可见 emoji。 -- `components/UploadModal.tsx:1233`:上传弹窗内部外壳已从 `rounded-apple`、`shadow-apple-lg` 收为普通圆角和轻阴影。 -- `components/UploadModal.tsx:1245`:上传提示已改为普通文字,不再使用 emoji。 -- `components/UploadModal.tsx:1499`:PSD 展示图提示已去掉 emoji。 +- `components/ui/Modal.tsx`:统一弹窗硬编码圆角已从 32px 收到 12px,避免默认弹窗继续呈现大圆角展示页风格。 +- `components/UploadModal.tsx`:已完成第二轮收口,恢复上传提示去掉 emoji,内部外壳去掉额外重阴影和卡片套卡片,上传区从大圆角虚线卡片收为普通 `rounded-lg` dropzone。 +- `components/UploadModal.tsx`:预览图、PSD 展示图和素材文件上传说明已压短,不再重复“点击或拖拽/支持格式”长提示;网络失败提示也改为一句明确结果和下一步。 - `components/UploadModal.tsx:1661`、`components/UploadModal.tsx:1812`:必填字段不再使用蓝色渐变背景和大阴影,改为边框/浅底提示。 - `components/EditMaterialModal.tsx:240`:编辑弹窗必填标识同样使用紫蓝渐变胶囊。 - `components/EditMaterialModal.tsx:265`:编辑输入框也有必填渐变背景。