fix: create post
This commit is contained in:
@@ -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)"
|
||||
|
||||
Reference in New Issue
Block a user