|
@@ -3,18 +3,30 @@
|
|
|
<h2 class="page-title">举报管理</h2>
|
|
<h2 class="page-title">举报管理</h2>
|
|
|
|
|
|
|
|
<el-card shadow="never" class="toolbar-card">
|
|
<el-card shadow="never" class="toolbar-card">
|
|
|
- <el-space wrap>
|
|
|
|
|
- <el-select v-model="filters.status" placeholder="举报状态" clearable style="width: 140px" @change="loadList">
|
|
|
|
|
- <el-option label="全部" :value="undefined" />
|
|
|
|
|
- <el-option label="待处理" :value="0" />
|
|
|
|
|
- <el-option label="处理中" :value="1" />
|
|
|
|
|
- <el-option label="已处理" :value="2" />
|
|
|
|
|
- <el-option label="已驳回" :value="3" />
|
|
|
|
|
- </el-select>
|
|
|
|
|
- <el-input v-model="filters.dynamicId" placeholder="动态ID" clearable style="width: 160px" @keyup.enter.native="loadList" />
|
|
|
|
|
- <el-button icon="Search" type="primary" @click="loadList">查询</el-button>
|
|
|
|
|
- <el-button icon="Refresh" @click="resetAndReload">重置</el-button>
|
|
|
|
|
- </el-space>
|
|
|
|
|
|
|
+ <el-row :gutter="20">
|
|
|
|
|
+ <el-col :span="8">
|
|
|
|
|
+ <el-space>
|
|
|
|
|
+ <el-button icon="Search" type="primary" @click="loadList">查询</el-button>
|
|
|
|
|
+ <el-button icon="Refresh" @click="resetAndReload">重置</el-button>
|
|
|
|
|
+ </el-space>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ <el-col :span="16">
|
|
|
|
|
+ <el-space style="justify-content: flex-end; width: 100%;">
|
|
|
|
|
+ <el-select v-model="filters.status" placeholder="举报状态" clearable style="width: 140px" @change="loadList">
|
|
|
|
|
+ <el-option label="全部" :value="undefined" />
|
|
|
|
|
+ <el-option label="待处理" :value="0" />
|
|
|
|
|
+ <el-option label="处理中" :value="1" />
|
|
|
|
|
+ <el-option label="已处理" :value="2" />
|
|
|
|
|
+ <el-option label="已驳回" :value="3" />
|
|
|
|
|
+ </el-select>
|
|
|
|
|
+ <el-input v-model="filters.dynamicId" placeholder="动态ID" clearable style="width: 160px" @keyup.enter.native="loadList">
|
|
|
|
|
+ <template #append>
|
|
|
|
|
+ <el-button icon="Search" @click="loadList" />
|
|
|
|
|
+ </template>
|
|
|
|
|
+ </el-input>
|
|
|
|
|
+ </el-space>
|
|
|
|
|
+ </el-col>
|
|
|
|
|
+ </el-row>
|
|
|
</el-card>
|
|
</el-card>
|
|
|
|
|
|
|
|
<el-card shadow="never" class="table-card">
|
|
<el-card shadow="never" class="table-card">
|
|
@@ -47,7 +59,8 @@
|
|
|
fit="cover"
|
|
fit="cover"
|
|
|
style="width:64px;height:64px;border-radius:6px;cursor:pointer;"
|
|
style="width:64px;height:64px;border-radius:6px;cursor:pointer;"
|
|
|
:lazy="true"
|
|
:lazy="true"
|
|
|
- :hide-on-click-modal="true"
|
|
|
|
|
|
|
+ preview-teleported
|
|
|
|
|
+ hide-on-click-modal
|
|
|
:data-report-id="row.reportId"
|
|
:data-report-id="row.reportId"
|
|
|
@error="(e) => handleImageError(e, row)"
|
|
@error="(e) => handleImageError(e, row)"
|
|
|
>
|
|
>
|
|
@@ -500,7 +513,8 @@ onMounted(loadList)
|
|
|
const moderateDialog = reactive({
|
|
const moderateDialog = reactive({
|
|
|
visible: false,
|
|
visible: false,
|
|
|
loading: false,
|
|
loading: false,
|
|
|
- action: 2,
|
|
|
|
|
|
|
+ action: 2,
|
|
|
|
|
+ reportId: null,
|
|
|
form: {
|
|
form: {
|
|
|
dynamicId: null,
|
|
dynamicId: null,
|
|
|
userId: null,
|
|
userId: null,
|
|
@@ -517,6 +531,7 @@ const moderateDialog = reactive({
|
|
|
const openModerate = async (row, action) => {
|
|
const openModerate = async (row, action) => {
|
|
|
moderateDialog.visible = true
|
|
moderateDialog.visible = true
|
|
|
moderateDialog.action = action
|
|
moderateDialog.action = action
|
|
|
|
|
+ moderateDialog.reportId = row.reportId
|
|
|
moderateDialog.loading = true
|
|
moderateDialog.loading = true
|
|
|
moderateDialog.form.reason = ''
|
|
moderateDialog.form.reason = ''
|
|
|
// 重置其他字段
|
|
// 重置其他字段
|
|
@@ -585,6 +600,14 @@ const submitModerate = async () => {
|
|
|
params: { dynamicId: moderateDialog.form.dynamicId, action: moderateDialog.action, reason: moderateDialog.form.reason }
|
|
params: { dynamicId: moderateDialog.form.dynamicId, action: moderateDialog.action, reason: moderateDialog.form.reason }
|
|
|
})
|
|
})
|
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
|
|
|
+ // 更新举报状态:封禁设为2,取消封禁设为1
|
|
|
|
|
+ if (moderateDialog.reportId && (moderateDialog.action === 2 || moderateDialog.action === 1)) {
|
|
|
|
|
+ const newStatus = moderateDialog.action === 2 ? 2 : 1
|
|
|
|
|
+ await request.post(`${API_ENDPOINTS.REPORT_HANDLE}/${moderateDialog.reportId}`, {
|
|
|
|
|
+ status: newStatus,
|
|
|
|
|
+ handleResult: moderateDialog.form.reason
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
ElMessage.success('操作成功')
|
|
ElMessage.success('操作成功')
|
|
|
moderateDialog.visible = false
|
|
moderateDialog.visible = false
|
|
|
loadList()
|
|
loadList()
|
|
@@ -596,6 +619,7 @@ const submitModerate = async () => {
|
|
|
const openUnban = async (row) => {
|
|
const openUnban = async (row) => {
|
|
|
moderateDialog.visible = true
|
|
moderateDialog.visible = true
|
|
|
moderateDialog.action = 1
|
|
moderateDialog.action = 1
|
|
|
|
|
+ moderateDialog.reportId = row.reportId
|
|
|
moderateDialog.loading = true
|
|
moderateDialog.loading = true
|
|
|
moderateDialog.form.dynamicId = row.dynamicId
|
|
moderateDialog.form.dynamicId = row.dynamicId
|
|
|
moderateDialog.form.reason = ''
|
|
moderateDialog.form.reason = ''
|
|
@@ -632,8 +656,8 @@ const openUnban = async (row) => {
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped>
|
|
<style scoped>
|
|
|
-.report-page { padding: 0; }
|
|
|
|
|
-.page-title { font-size: 24px; font-weight: bold; color: #333; margin: 0 0 20px 0; }
|
|
|
|
|
|
|
+.report-page { padding: 20px; }
|
|
|
|
|
+.page-title { font-size: 24px; font-weight: 600; color: #303133; margin: 0 0 20px 0; }
|
|
|
.toolbar-card { margin-bottom: 20px; }
|
|
.toolbar-card { margin-bottom: 20px; }
|
|
|
.table-card { margin-top: 20px; }
|
|
.table-card { margin-top: 20px; }
|
|
|
.pagination-container { display: flex; justify-content: flex-end; margin-top: 20px; }
|
|
.pagination-container { display: flex; justify-content: flex-end; margin-top: 20px; }
|