fix: create post

This commit is contained in:
yanghao05
2025-04-09 20:32:31 +08:00
parent 05d2ecc2b9
commit 2346983d67
10 changed files with 192 additions and 95 deletions

View File

@@ -1,18 +1,18 @@
<script setup>
import { mediaService } from '@/api/mediaService';
import { InputText } from 'primevue';
import Badge from 'primevue/badge';
import Button from 'primevue/button';
import Column from 'primevue/column';
import ConfirmDialog from 'primevue/confirmdialog';
import DataTable from 'primevue/datatable';
import Dropdown from 'primevue/dropdown';
import ProgressSpinner from 'primevue/progressspinner';
import Toast from 'primevue/toast';
import { useConfirm } from 'primevue/useconfirm';
import { useToast } from 'primevue/usetoast';
import { computed, onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
import { mediaService } from "@/api/mediaService";
import { InputText } from "primevue";
import Badge from "primevue/badge";
import Button from "primevue/button";
import Column from "primevue/column";
import ConfirmDialog from "primevue/confirmdialog";
import DataTable from "primevue/datatable";
import Dropdown from "primevue/dropdown";
import ProgressSpinner from "primevue/progressspinner";
import Toast from "primevue/toast";
import { useConfirm } from "primevue/useconfirm";
import { useToast } from "primevue/usetoast";
import { computed, onMounted, ref } from "vue";
import { useRouter } from "vue-router";
// Import useConfirm dynamically to avoid the error when the service is not provided
const confirm = useConfirm();
@@ -22,24 +22,24 @@ const router = useRouter();
// Remove upload related refs and methods
const openUploadDialog = () => {
router.push('/medias/uploads');
router.push("/medias/uploads");
};
// Media types for filtering
const mediaTypes = ref([
{ name: '所有媒体', value: null },
{ name: '图片', value: 'Image' },
{ name: '视频', value: 'Video' },
{ name: '文档', value: 'Document' },
{ name: '音频', value: 'Audio' },
{ name: 'PDF', value: 'PDF' }
{ name: "所有媒体", value: null },
{ name: "图片", value: "Image" },
{ name: "视频", value: "Video" },
{ name: "文档", value: "Document" },
{ name: "音频", value: "Audio" },
{ name: "PDF", value: "PDF" },
]);
const selectedMediaType = ref(mediaTypes.value[0]);
const globalFilterValue = ref('');
const globalFilterValue = ref("");
const loading = ref(false);
const filters = ref({
global: { value: null, matchMode: 'contains' }
global: { value: null, matchMode: "contains" },
});
// Add pagination state
@@ -62,13 +62,18 @@ const fetchMediaFiles = async () => {
try {
const response = await mediaService.getMedias({
page: currentPage.value,
limit: rows.value
limit: rows.value,
});
mediaFiles.value = response.items;
totalRecords.value = response.total;
mediaFiles.value = response.data.items;
totalRecords.value = response.data.total;
console.log(totalRecords.value);
} catch (error) {
toast.add({ severity: 'error', summary: '错误', detail: '加载媒体文件失败', life: 3000 });
toast.add({
severity: "error",
summary: "错误",
detail: "加载媒体文件失败",
life: 3000,
});
} finally {
loading.value = false;
}
@@ -80,7 +85,7 @@ const onPage = (event) => {
rows.value = event.rows;
currentPage.value = Math.floor(event.first / event.rows) + 1;
console.log(event)
console.log(event);
fetchMediaFiles();
};
@@ -91,13 +96,13 @@ onMounted(() => {
// File type badge severity mapping
const getBadgeSeverity = (fileType) => {
const map = {
'Image': 'info',
'PDF': 'danger',
'Video': 'warning',
'Document': 'primary',
'Audio': 'success'
Image: "info",
PDF: "danger",
Video: "warning",
Document: "primary",
Audio: "success",
};
return map[fileType] || 'info';
return map[fileType] || "info";
};
// File type icon mapping
@@ -108,9 +113,9 @@ const getFileIcon = (file) => {
// Add helper function to format file size
const formatFileSize = (bytes) => {
if (bytes === 0) return '0 B';
if (bytes === 0) return "0 B";
const k = BigInt(1024);
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
const sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
// Convert input to BigInt
const bytesValue = BigInt(bytes);
@@ -124,7 +129,7 @@ const formatFileSize = (bytes) => {
}
// Convert back to number and format with commas
return `${Number(size).toLocaleString('en-US')} ${sizes[i]}`;
return `${Number(size).toLocaleString("en-US")} ${sizes[i]}`;
};
</script>
@@ -153,9 +158,7 @@ const formatFileSize = (bytes) => {
current-page-report-template=" {first} {last} {totalRecords} " :lazy="true"
:show-current-page-report="true">
<template #paginatorLeft>
<div class="flex items-center">
每页: {{ rows }}
</div>
<div class="flex items-center">每页: {{ rows }}</div>
</template>
<template #paginatorRight>
<div class="flex items-center">
@@ -167,7 +170,7 @@ const formatFileSize = (bytes) => {
</template>
<template #loading>
<div class="flex flex-col items-center justify-center p-4">
<ProgressSpinner style="width:50px;height:50px" />
<ProgressSpinner style="width: 50px; height: 50px" />
<span class="mt-2">加载中...</span>
</div>
</template>
@@ -176,7 +179,8 @@ const formatFileSize = (bytes) => {
<template #body="{ data }">
<div class="flex items-center">
<div v-if="data.thumbnail_url" class="flex-shrink-0 h-10 w-10 mr-3">
<img class="h-10 w-10 object-cover rounded" :src="data.thumbnail_url" :alt="data.name">
<img class="h-10 w-10 object-cover rounded" :src="data.thumbnail_url"
:alt="data.name" />
</div>
<div v-else
class="flex-shrink-0 h-10 w-10 mr-3 bg-gray-100 rounded flex items-center justify-center">
@@ -205,7 +209,7 @@ const formatFileSize = (bytes) => {
</template>
</Column>
<Column header="" :exportable="false" style="min-width:8rem">
<Column header="" :exportable="false" style="min-width: 8rem">
<template #body="{ data }">
<div class="flex justify-center space-x-2">
<Button icon="pi pi-eye" rounded text severity="info" @click="previewFile(data)"