file详情页工具栏实现图片优化的功能

This commit is contained in:
jingrow 2026-04-17 12:37:17 +08:00
parent f13e63a1a6
commit 9f49a15877

View File

@ -18,7 +18,7 @@
<n-button type="default" size="medium" @click="optimizeFile" v-if="isOptimizable">
<template #icon>
<n-icon><Icon icon="tabler:compress" /></n-icon>
<n-icon><Icon icon="tabler:photo-spark" /></n-icon>
</template>
{{ context.t('Optimize') }}
</n-button>
@ -50,8 +50,9 @@
<script setup lang="ts">
import { computed } from 'vue'
import { NButton, NSpace, NIcon } from 'naive-ui'
import { NButton, NSpace, NIcon, useMessage } from 'naive-ui'
import { Icon } from '@iconify/vue'
import { api } from '@/shared/api/common'
const props = defineProps<{
context: {
@ -61,11 +62,14 @@ const props = defineProps<{
canEdit: boolean
loading: boolean
save: () => Promise<void>
refresh: () => Promise<void>
router: any
t: (key: string) => string
}
}>()
const message = useMessage()
// 0
const isOptimizable = computed(() => {
const record = props.context.record
@ -105,16 +109,46 @@ const downloadFile = () => {
window.open(fileUrl)
}
//
const optimizeFile = () => {
// TODO:
console.log('Optimize file:', props.context.record.name)
//
const optimizeFile = async () => {
const record = props.context.record
message.loading(props.context.t('Optimizing image...'), { duration: 0 })
try {
await api.call('run_pg_method', {
dt: 'File',
dn: record.name,
method: 'optimize_file'
})
message.destroyAll()
message.success(props.context.t('Image optimized'))
//
await props.context.refresh()
} catch (error: any) {
message.destroyAll()
message.error(error?.message || props.context.t('Optimization failed'))
console.error('Optimize failed:', error)
}
}
//
const unzipFile = () => {
// TODO:
console.log('Unzip file:', props.context.record.name)
// ZIP
const unzipFile = async () => {
const record = props.context.record
message.loading(props.context.t('Unzipping file...'), { duration: 0 })
try {
const result = await api.call('jingrow.core.api.file.unzip_file', {
name: record.name
})
message.destroyAll()
message.success(props.context.t('File unzipped successfully'))
//
props.context.router.push({ name: 'PageTypeList', params: { entity: 'file' } })
} catch (error: any) {
message.destroyAll()
message.error(error?.message || props.context.t('Unzip failed'))
console.error('Unzip failed:', error)
}
}
</script>