|
|
@@ -50,6 +50,14 @@
|
|
|
<el-tag v-else size="small" type="warning">已归档</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column label="审核状态" width="120">
|
|
|
+ <template slot-scope="{ row }">
|
|
|
+ <el-tag v-if="row.auditStatus === 'approved'" size="small" type="success">已通过</el-tag>
|
|
|
+ <el-tag v-else-if="row.auditStatus === 'pending'" size="small" type="warning">待审核</el-tag>
|
|
|
+ <el-tag v-else-if="row.auditStatus === 'rejected'" size="small" type="danger">已驳回</el-tag>
|
|
|
+ <span v-else>-</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column prop="viewCount" label="阅读" width="70" />
|
|
|
<el-table-column label="发布时间" width="160">
|
|
|
<template slot-scope="{ row }">
|
|
|
@@ -59,6 +67,8 @@
|
|
|
<el-table-column label="操作" width="280" fixed="right">
|
|
|
<template slot-scope="{ row }">
|
|
|
<el-button size="mini" type="primary" plain @click="$router.push('/article-edit?id=' + row.id)">编辑</el-button>
|
|
|
+ <el-button v-if="row.auditStatus === 'pending'" size="mini" type="success" @click="handleAudit(row, 'approved')">通过</el-button>
|
|
|
+ <el-button v-if="row.auditStatus === 'pending'" size="mini" type="danger" @click="showRejectDialog(row)">驳回</el-button>
|
|
|
<el-button v-if="row.status === 'draft'" size="mini" type="success" @click="handlePublish(row)">发布</el-button>
|
|
|
<el-button v-if="row.status === 'published'" size="mini" type="warning" @click="handleUnpublish(row)">下架</el-button>
|
|
|
<el-button
|
|
|
@@ -85,6 +95,20 @@
|
|
|
/>
|
|
|
</el-card>
|
|
|
</div>
|
|
|
+
|
|
|
+ <!-- 驳回弹窗 -->
|
|
|
+ <el-dialog title="驳回原因" :visible.sync="rejectDialogVisible" width="400px">
|
|
|
+ <el-input
|
|
|
+ type="textarea"
|
|
|
+ :rows="4"
|
|
|
+ v-model="rejectReason"
|
|
|
+ placeholder="请输入驳回原因..."
|
|
|
+ ></el-input>
|
|
|
+ <span slot="footer">
|
|
|
+ <el-button @click="rejectDialogVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="confirmReject">确认驳回</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
@@ -93,7 +117,8 @@ import {
|
|
|
adminArticlePublish,
|
|
|
adminArticleToggleFeatured,
|
|
|
adminArticleDelete,
|
|
|
- adminArticleCategoriesList
|
|
|
+ adminArticleCategoriesList,
|
|
|
+ adminArticleAudit
|
|
|
} from '@/api/article.js'
|
|
|
|
|
|
export default {
|
|
|
@@ -110,7 +135,10 @@ export default {
|
|
|
categoryId: '',
|
|
|
keyword: ''
|
|
|
},
|
|
|
- categories: []
|
|
|
+ categories: [],
|
|
|
+ rejectDialogVisible: false,
|
|
|
+ rejectReason: '',
|
|
|
+ currentAuditRow: null
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
@@ -195,6 +223,44 @@ export default {
|
|
|
this.$message.error(e.message || '删除失败')
|
|
|
}
|
|
|
}).catch(() => {})
|
|
|
+ },
|
|
|
+ handleAudit(row, auditStatus) {
|
|
|
+ var self = this
|
|
|
+ this.$confirm('确定' + (auditStatus === 'approved' ? '通过' : '驳回') + '该文章吗?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(function() {
|
|
|
+ return self.$http.post('/api/admin/articles/audit', {
|
|
|
+ id: row.id,
|
|
|
+ auditStatus: auditStatus,
|
|
|
+ auditReason: auditStatus === 'rejected' ? self.rejectReason : ''
|
|
|
+ })
|
|
|
+ }).then(function(res) {
|
|
|
+ if (res.data && res.data.code === 200) {
|
|
|
+ self.$message.success('审核完成')
|
|
|
+ self.loadList()
|
|
|
+ } else {
|
|
|
+ self.$message.error(res.data && res.data.message || '审核失败')
|
|
|
+ }
|
|
|
+ }).catch(function(e) {
|
|
|
+ if (e !== 'cancel') {
|
|
|
+ self.$message.error('审核失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ showRejectDialog(row) {
|
|
|
+ this.currentAuditRow = row
|
|
|
+ this.rejectReason = ''
|
|
|
+ this.rejectDialogVisible = true
|
|
|
+ },
|
|
|
+ confirmReject() {
|
|
|
+ if (!this.rejectReason.trim()) {
|
|
|
+ this.$message.warning('请填写驳回原因')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ this.rejectDialogVisible = false
|
|
|
+ this.handleAudit(this.currentAuditRow, 'rejected')
|
|
|
}
|
|
|
}
|
|
|
}
|