80 lines
1.8 KiB
Vue
80 lines
1.8 KiB
Vue
|
<script setup lang="ts">
|
|||
|
|
|||
|
const model = defineModel({
|
|||
|
type: Boolean
|
|||
|
})
|
|||
|
|
|||
|
const props = defineProps<{
|
|||
|
row: FileInfo
|
|||
|
}>()
|
|||
|
|
|||
|
const transformData = (data: any) => {
|
|||
|
return new Promise((resolve) => {
|
|||
|
const reader = new FileReader()
|
|||
|
reader.readAsText(data, 'UTF-8')
|
|||
|
reader.onload = () => {
|
|||
|
resolve(reader.result)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
const src = computed(() => bucketApi.detail.downloadUrl(props.row))
|
|||
|
|
|||
|
const { data } = useAsyncData(() =>
|
|||
|
$fetch(src.value, {
|
|||
|
responseType: 'blob',
|
|||
|
}).then(res=>{
|
|||
|
return transformData(res)
|
|||
|
}), {
|
|||
|
watch: [src],
|
|||
|
})
|
|||
|
|
|||
|
|
|||
|
function rendered() {
|
|||
|
console.log('rendered')
|
|||
|
}
|
|||
|
|
|||
|
</script>
|
|||
|
|
|||
|
<template>
|
|||
|
<UModal v-model="model" fullscreen>
|
|||
|
<UCard
|
|||
|
:ui="{
|
|||
|
base: 'h-full flex flex-col',
|
|||
|
rounded: '',
|
|||
|
divide: 'divide-y divide-gray-100 dark:divide-gray-800',
|
|||
|
body: {
|
|||
|
base: 'grow !p-0 '
|
|||
|
}
|
|||
|
}"
|
|||
|
>
|
|||
|
<template #header>
|
|||
|
<div class="flex items-center justify-between">
|
|||
|
<div>
|
|||
|
<h3 class="text-base font-semibold leading-6 text-gray-900 dark:text-white">
|
|||
|
{{ row.Name }}
|
|||
|
<UTooltip text="文件为PDF文件,该页面仅提供预览,编辑请下载文件...">
|
|||
|
<UButton size="sm" @click="bucketApi.detail.download(row)">
|
|||
|
下载编辑
|
|||
|
</UButton>
|
|||
|
</UTooltip>
|
|||
|
</h3>
|
|||
|
</div>
|
|||
|
<UButton
|
|||
|
color="gray"
|
|||
|
variant="ghost"
|
|||
|
icon="i-heroicons-x-mark-20-solid"
|
|||
|
class="-my-1"
|
|||
|
@click="model = false"
|
|||
|
/>
|
|||
|
</div>
|
|||
|
</template>
|
|||
|
<div>
|
|||
|
<div class="txt p-4" style="white-space: pre-wrap;">
|
|||
|
{{ data }}
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</UCard>
|
|||
|
</UModal>
|
|||
|
</template>
|