2525 <div v-for =" a in listItems" :key =" a.id" class =" manage-item" @click =" goEdit(a.id)" >
2626 <div class =" manage-item-main" >
2727 <div class =" manage-item-title" >{{ a.title || '未命名' }}</div >
28- <div class =" manage-item-meta" >{{ a.status }} · {{ formatDate(a.publishedAt) }}</div >
28+ <div class =" manage-item-meta" >{{ statusLabel( a.status) }} · {{ formatDate(a.publishedAt) }}</div >
2929 </div >
3030 <div class =" manage-item-actions" @click.stop >
3131 <button class =" btn" style =" padding : 6px 10px " @click =" goEdit(a.id)" >编辑</button >
32+ <button v-if =" a.status === 'PUBLISHED'" class =" btn" style =" padding : 6px 10px " @click =" hideArticle(a.id)" >隐藏</button >
33+ <button v-if =" a.status === 'HIDDEN'" class =" btn" style =" padding : 6px 10px " @click =" republish(a.id)" >发布</button >
3234 <button class =" btn" style =" padding : 6px 10px " @click =" remove(a.id)" >删除</button >
3335 </div >
3436 </div >
4345<script setup>
4446import { computed , onMounted , ref } from ' vue'
4547import { useRouter } from ' vue-router'
46- import { deleteMyArticle , fetchMyArticles } from ' ../api/admin'
48+ import { deleteMyArticle , fetchMyArticles , publishArticle , unpublishArticle } from ' ../api/admin'
4749
4850const router = useRouter ()
4951
@@ -63,6 +65,11 @@ function formatDate(v) {
6365 }
6466}
6567
68+ function statusLabel (s ) {
69+ const map = { DRAFT : ' 草稿' , SCHEDULED : ' 已预约' , PUBLISHED : ' 已发布' , HIDDEN : ' 已隐藏' }
70+ return map[s] || s
71+ }
72+
6673async function loadArticles () {
6774 loadingArticles .value = true
6875 try {
@@ -90,6 +97,9 @@ function goEdit(id) {
9097async function remove (id ) {
9198 articleError .value = ' '
9299 articleSuccess .value = ' '
100+ if (! window .confirm (' 确定要永久删除这篇文章吗?此操作不可撤销。' )) {
101+ return
102+ }
93103 try {
94104 await deleteMyArticle (id)
95105 await loadArticles ()
@@ -103,6 +113,32 @@ async function remove(id) {
103113 }
104114}
105115
116+ async function hideArticle(id) {
117+ articleError.value = ''
118+ articleSuccess.value = ''
119+ try {
120+ await unpublishArticle(id)
121+ await loadArticles()
122+ articleSuccess.value = '已隐藏'
123+ } catch (e) {
124+ articleError.value = e?.message || '隐藏失败'
125+ articleSuccess.value = ''
126+ }
127+ }
128+
129+ async function republish(id) {
130+ articleError.value = ''
131+ articleSuccess.value = ''
132+ try {
133+ await publishArticle(id)
134+ await loadArticles()
135+ articleSuccess.value = '已发布'
136+ } catch (e) {
137+ articleError.value = e?.message || '发布失败'
138+ articleSuccess.value = ''
139+ }
140+ }
141+
106142onMounted(() => {
107143 loadArticles()
108144})
0 commit comments