This commit is contained in:
2026-10-22 11:56:54 +08:00
parent 090431b409
commit 3e77c3976e
40 changed files with 976 additions and 241 deletions
@@ -10,7 +10,8 @@ import { getApiErrorDetails, type ApiErrorDetails } from '@/shared/api/http'
import { downloadOceanBookingPrint } from '../api/platformOceanBookings'
import type { OceanBookingPrintType } from '../types'
const props = defineProps<{ bookingId: string; bookingNo?: string | null; allowed: boolean }>()
const props = defineProps<{ bookingId: string; bookingNo?: string | null; allowed: boolean; initialType?: OceanBookingPrintType }>()
const emit = defineEmits<{ previewed: [event: { bookingId: string; type: OceanBookingPrintType }] }>()
const open = defineModel<boolean>({ default: false })
const selectedType = ref<OceanBookingPrintType | ''>('')
const loading = ref(false)
@@ -42,15 +43,18 @@ function reset() {
}
async function preview() {
if (!props.allowed || !selectedType.value || loading.value) return
const bookingId = props.bookingId
const type = selectedType.value
const request = ++previewRequest
loading.value = true
error.value = null
releasePreview()
try {
const blob = await downloadOceanBookingPrint(props.bookingId, selectedType.value)
const blob = await downloadOceanBookingPrint(bookingId, type)
if (request !== previewRequest || !open.value) return
printBlob.value = blob
previewUrl.value = URL.createObjectURL(blob)
emit('previewed', { bookingId, type })
} catch (cause) {
if (request === previewRequest) error.value = getApiErrorDetails(cause, '打印单据加载失败,请稍后重试')
} finally {
@@ -71,7 +75,13 @@ function download() {
URL.revokeObjectURL(url)
}
watch(open, (value) => { if (!value) reset() })
watch(open, (value) => {
if (!value) reset()
else if (props.initialType) {
selectedType.value = props.initialType
void preview()
}
}, { immediate: true })
onBeforeUnmount(() => { previewRequest += 1; releasePreview() })
</script>