/* 工单附件:图片缩略图、文件入口、预览错误及下载操作。 */ /* 导入方:app/components/TicketAttachments.vue、app/pages/tickets/[id].vue、app/pages/tickets/ticket.vue。 */ .message-attachments[data-v-77cd676b] { border-top: 1px solid var(--p-content-border-color); flex-direction: column; gap: 12px; margin: 0 14px 14px; padding: 12px 0 0; font-size: 0.9375rem; list-style: none; display: flex; } .message-attachments li[data-v-77cd676b] { min-width: 0; } .image-attachment[data-v-77cd676b] { border: 1px solid var(--p-content-border-color); background: var(--p-content-background); max-width: 100%; color: var(--p-text-color); text-align: left; cursor: pointer; border-radius: var(--radius-md); align-items: center; gap: 12px; padding: 8px; display: flex; } .image-attachment[data-v-77cd676b]:hover { border-color: var(--p-primary-color); } .image-attachment[data-v-77cd676b]:hover, .thumbnail[data-v-77cd676b] { background: var(--p-content-hover-background); } .thumbnail[data-v-77cd676b] { border-radius: var(--radius-sm); flex: 0 0 112px; justify-content: center; align-items: center; width: 112px; height: 80px; display: flex; overflow: hidden; } .thumbnail img[data-v-77cd676b] { -o-object-fit: contain; object-fit: contain; width: 100%; height: 100%; } .thumbnail .pi[data-v-77cd676b] { color: var(--p-text-muted-color); font-size: 1.5rem; } .image-caption[data-v-77cd676b] { flex-direction: column; gap: 5px; min-width: 0; display: flex; } /* 允许连续长文本换行,防止IP、密钥或用户输入撑破当前容器;不会修改原始数据。 */ .attachment-name[data-v-77cd676b] { color: var(--p-primary-color); overflow-wrap: anywhere; } .image-hint[data-v-77cd676b] { color: var(--p-text-muted-color); font-size: 0.8125rem; } .file-attachment[data-v-77cd676b] { align-items: baseline; gap: 8px; min-width: 0; display: flex; } /* 允许连续长文本换行,防止IP、密钥或用户输入撑破当前容器;不会修改原始数据。 */ .file-attachment a[data-v-77cd676b] { color: var(--p-primary-color); overflow-wrap: anywhere; } .file-attachment a .pi[data-v-77cd676b] { margin-left: 4px; font-size: 0.8125rem; } /* 附件不可用状态与可下载链接明确区分,实际下载/预览权限由脚本和后端控制。 */ .attachment-unavailable[data-v-77cd676b] { color: var(--p-text-muted-color); overflow-wrap: anywhere; } .preview-error[data-v-77cd676b], .preview-status[data-v-77cd676b] { color: var(--p-text-muted-color); margin: 0 0 12px; } .preview-error[data-v-77cd676b] { padding: 24px 0; } /* 图片预览区域与下载操作分开,加载失败时保留可理解的错误反馈。 */ .image-preview[data-v-77cd676b] { background: var(--p-content-hover-background); border-radius: var(--radius-md); justify-content: center; align-items: center; min-height: 120px; max-height: 68vh; display: flex; overflow: auto; } .image-preview img[data-v-77cd676b] { -o-object-fit: contain; object-fit: contain; max-width: 100%; max-height: 68vh; display: block; } .image-preview.original-size[data-v-77cd676b] { display: block; } .image-preview.original-size img[data-v-77cd676b] { max-width: none; max-height: none; margin: 0 auto; } .preview-actions[data-v-77cd676b] { flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 10px; display: flex; } .download-image[data-v-77cd676b] { color: var(--p-primary-contrast-color); background: var(--p-primary-color); border-radius: var(--radius-md); justify-content: center; align-items: center; gap: 8px; padding: 10px 14px; text-decoration: none; display: inline-flex; } .download-image[data-v-77cd676b]:hover { background: var(--p-primary-hover-color); } /* 视口条件 (width<=480px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */ @media (width<=480px) { .thumbnail[data-v-77cd676b] { flex-basis: 80px; width: 80px; height: 64px; } .image-attachment[data-v-77cd676b], .preview-actions[data-v-77cd676b] { gap: 8px; } }