feat: 更新内容管理功能,支持价格为可选字段,添加状态管理及媒体计数显示

This commit is contained in:
2026-01-04 19:56:53 +08:00
parent 581cbc3991
commit 4b32e64d35
3 changed files with 106 additions and 26 deletions

View File

@@ -77,10 +77,21 @@
</div>
<div class="flex items-center gap-6 text-sm text-slate-500">
<span v-if="item.price > 0" class="text-red-600 font-bold">¥ {{ item.price }}</span>
<span v-if="item.price > 0" class="text-red-600 font-bold">¥ {{ item.price.toFixed(2) }}</span>
<span v-else class="text-green-600 font-bold">免费</span>
<span><i class="pi pi-eye mr-1"></i> {{ item.views }}</span>
<span><i class="pi pi-thumbs-up mr-1"></i> {{ item.likes }}</span>
<span class="flex items-center gap-1" title="图片" v-if="item.image_count > 0">
<i class="pi pi-image"></i> {{ item.image_count }}
</span>
<span class="flex items-center gap-1" title="视频" v-if="item.video_count > 0">
<i class="pi pi-video"></i> {{ item.video_count }}
</span>
<span class="flex items-center gap-1" title="音频" v-if="item.audio_count > 0">
<i class="pi pi-microphone"></i> {{ item.audio_count }}
</span>
<span title="浏览量"><i class="pi pi-eye mr-1"></i> {{ item.views }}</span>
<span title="点赞数"><i class="pi pi-thumbs-up mr-1"></i> {{ item.likes }}</span>
<!-- Date field missing in DTO, using hardcoded or omitting -->
</div>
</div>
@@ -91,10 +102,12 @@
@click="$router.push(`/creator/contents/${item.id}`)"><i class="pi pi-file-edit mr-1"></i>
编辑</button>
<button v-if="item.status === 'published'"
class="text-sm text-slate-500 hover:text-orange-600 font-medium cursor-pointer"><i
class="text-sm text-slate-500 hover:text-orange-600 font-medium cursor-pointer"
@click="handleStatusChange(item.id, 'unpublished')"><i
class="pi pi-arrow-down mr-1"></i> 下架</button>
<button v-if="item.status === 'unpublished'"
class="text-sm text-slate-500 hover:text-green-600 font-medium cursor-pointer"><i
class="text-sm text-slate-500 hover:text-green-600 font-medium cursor-pointer"
@click="handleStatusChange(item.id, 'published')"><i
class="pi pi-arrow-up mr-1"></i> 上架</button>
<button class="text-sm text-slate-500 hover:text-red-600 font-medium ml-auto cursor-pointer"
@click="handleDelete(item.id)"><i class="pi pi-trash mr-1"></i> 删除</button>
@@ -108,10 +121,12 @@
<script setup>
import { onMounted, ref, watch } from 'vue';
import { useRouter } from 'vue-router';
import { useToast } from 'primevue/usetoast';
import { commonApi } from '../../api/common';
import { creatorApi } from '../../api/creator';
const router = useRouter();
const toast = useToast();
const contents = ref([]);
const filterStatus = ref('all');
const filterGenre = ref('all');
@@ -176,6 +191,17 @@ const statusStyle = (status) => {
}
};
const handleStatusChange = async (id, status) => {
try {
await creatorApi.updateContent(id, { status });
toast.add({ severity: 'success', summary: '更新成功', life: 2000 });
fetchContents();
} catch (e) {
console.error(e);
toast.add({ severity: 'error', summary: '更新失败', detail: e.message, life: 3000 });
}
};
const handleDelete = async (id) => {
if (!confirm('确定要删除吗?')) return;
try {