feat(file): 优化文件管理页面功能

- 新增MinIO存储服务选项支持
- 集成CoiImageViewer组件替换原生图片预览功能
- 移除冗余的图片预览弹框代码,提升代码简洁性
- 优化图片文件的展示效果和预览体验
- 统一存储服务类型的标签显示样式
This commit is contained in:
Leo 2025-09-22 22:58:57 +08:00
parent 0d54a2d119
commit a6dc2f90ae

View File

@ -217,6 +217,7 @@
:options="[
{ label: 'LOCAL', value: 'LOCAL' },
{ label: 'OSS', value: 'OSS' },
{ label: 'MINIO', value: 'MINIO' },
]"
/>
</n-form-item>
@ -271,36 +272,16 @@
</div>
</template>
</CoiDialog>
<!-- 图片预览弹框 -->
<n-modal
v-model:show="imagePreviewVisible"
preset="card"
title="图片预览"
:style="{ width: '80%', maxWidth: '800px' }"
:mask-closable="true"
>
<div class="text-center">
<img
v-if="previewImageUrl"
:src="previewImageUrl"
:alt="previewImageName"
class="max-w-full max-h-96 mx-auto"
>
<div class="mt-2 text-sm text-gray-500">
{{ previewImageName }}
</div>
</div>
</n-modal>
</div>
</template>
<script setup lang="ts">
import { h, onMounted, ref } from 'vue'
import { NButton, NIcon, NImage, NP, NPopconfirm, NSpace, NTag, NText, NUpload, NUploadDragger } from 'naive-ui'
import { NButton, NIcon, NP, NPopconfirm, NSpace, NTag, NText, NUpload, NUploadDragger } from 'naive-ui'
import type { DataTableColumns, DataTableInst, FormInst, UploadFileInfo, UploadInst } from 'naive-ui'
import CoiEmpty from '@/components/common/CoiEmpty.vue'
import CoiPagination from '@/components/common/CoiPagination.vue'
import CoiImageViewer from '@/components/common/CoiImageViewer.vue'
import { coiMsgBox, coiMsgError, coiMsgSuccess, coiMsgWarning } from '@/utils/coi'
import { usePermission } from '@/hooks/usePermission'
import { PERMISSIONS } from '@/constants/permissions'
@ -360,11 +341,6 @@ const searchForm = ref<SysFileSearchForm>({
fileType: '0', //
})
//
const imagePreviewVisible = ref(false)
const previewImageUrl = ref('')
const previewImageName = ref('')
//
const uploadFileList = ref<UploadFileInfo[]>([])
const uploading = ref(false)
@ -458,14 +434,13 @@ const columns: DataTableColumns<SysFileVo> = [
)
if (isImage && row.filePath) {
return h(NImage, {
return h(CoiImageViewer, {
src: row.filePath,
width: 45,
height: 30,
objectFit: 'cover',
previewDisabled: true,
onClick: () => handleImagePreview(row.filePath!, row.fileName),
class: 'cursor-pointer rounded border',
alt: row.fileName,
width: 50,
height: 40,
previewable: true,
title: `文件预览 - ${row.fileName}`,
})
}
@ -481,6 +456,7 @@ const columns: DataTableColumns<SysFileVo> = [
render: (row) => {
const serviceMap: Record<string, { type: 'success' | 'info' | 'warning', text: string }> = {
1: { type: 'success', text: '本地存储' },
2: { type: 'info', text: 'MinIO存储' },
3: { type: 'warning', text: '阿里云OSS' },
}
const config = serviceMap[row.fileService] || { type: 'info', text: '未知' }
@ -676,13 +652,6 @@ function handleDownload(row: SysFileVo) {
}
}
//
function handleImagePreview(url: string, name: string) {
previewImageUrl.value = url
previewImageName.value = name
imagePreviewVisible.value = true
}
//
//