| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { ElMessage } from 'element-plus'
- import {
- downloadAttachmentFile,
- normalizeAttachmentUrls,
- openAttachmentPreviewInNewTab
- } from '@/utils/download-attachment'
- /** 取逗号分隔附件中的第一张 URL(相对或绝对) */
- export function firstPhotoUrl(raw?: string | null): string {
- const normalized = normalizeAttachmentUrls(raw)
- if (!normalized) return ''
- return normalized.split(',').map((s) => s.trim()).filter(Boolean)[0] || ''
- }
- /** 拼 MinIO 完整访问地址(与 AttachmentUploadField 一致) */
- export function resolvePhotoDisplayUrl(url?: string | null): string {
- const trimmed = String(url || '').trim()
- if (!trimmed) return ''
- if (/^https?:\/\//i.test(trimmed)) return trimmed
- const base = String(import.meta.env.VITE_MINIO_BASE_URL || '').replace(/\/$/, '')
- return base ? `${base}/${trimmed.replace(/^\//, '')}` : trimmed
- }
- function photoFileName(url: string) {
- return (
- String(url || '')
- .split('?')[0]
- .split('/')
- .pop() || '照片'
- )
- }
- /** 列表照片列:新标签页预览首图 */
- export async function previewListPhoto(raw?: string | null) {
- const fileUrl = firstPhotoUrl(raw)
- if (!fileUrl) {
- ElMessage.error('无法获取照片地址')
- return
- }
- await openAttachmentPreviewInNewTab(
- { fileUrl, fileName: photoFileName(fileUrl) },
- { fullFileUrl: resolvePhotoDisplayUrl, kind: 'image' }
- )
- }
- /** 列表照片列:下载首图 */
- export async function downloadListPhoto(raw?: string | null) {
- const fileUrl = firstPhotoUrl(raw)
- if (!fileUrl) {
- ElMessage.error('无法获取照片地址')
- return
- }
- try {
- await downloadAttachmentFile(
- { fileUrl, fileName: photoFileName(fileUrl) },
- { fullFileUrl: resolvePhotoDisplayUrl }
- )
- ElMessage.success('下载成功')
- } catch {
- ElMessage.error('下载失败,请稍后重试')
- }
- }
|