Files
learning-system-portal/src/views/article/ManageList.vue
2022-10-22 14:32:16 +08:00

301 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="u-page" style="padding-right:32px">
<div style="padding: 2px 0px 10px 8px;">
<div style="display: flex; justify-content: flex-start">
<div style="padding: 0px 5px">
<el-select v-model="pageData.status" style="width: 110px" clearable placeholder="审核状态" >
<el-option label="全部" value=""></el-option>
<el-option label="草稿" :value="1"></el-option>
<el-option label="待审核" :value="2"></el-option>
<el-option label="未通过" :value="3"></el-option>
<el-option label="已通过" :value="5"></el-option>
<el-option label="已发布" :value="9"></el-option>
</el-select>
</div>
<div style="padding: 0px 5px">
<el-input placeholder="关键词搜索" v-model="pageData.keyword" clearable ></el-input>
</div>
<div style="padding: 0px 5px">
<el-button @click="getsearch" icon="el-icon-search" type="primary">搜索</el-button >
<!-- <el-button type="primary" >批量设置推荐</el-button> -->
</div>
<div style="padding: 0px 5px;"><el-button icon="el-icon-refresh-right" type="primary" @click="reset">重置</el-button></div>
</div>
</div>
<el-table style="width: 100%;margin:10px 32px 10px 12px;" :data="pageData.list" border stripe >
<!-- <el-table-column type="selection" width="55"></el-table-column> -->
<el-table-column label="标题" show-overflow-tooltip prop="title" >
<template slot-scope="scope">
<span class="previewStyle" @click="viewTopic(scope.row)">{{scope.row.title}}</span>
<!-- <a :style="cursor:pointer;" target="_blank" :href="`${webBaseUrl}/qa/answer`">{{scope.row.name}}</a> -->
<!-- <el-link style="display:inline;" :href="`${webBaseUrl}/article/detail`">{{scope.row.title}}</el-link> -->
</template>
</el-table-column>
<!-- <el-table-column label="介绍" prop="content"> -->
<el-table-column label="浏览" width="60px" prop="views"></el-table-column>
<el-table-column label="点赞" width="60px" prop="praises" ></el-table-column>
<el-table-column label="收藏" width="60px" prop="favorites" ></el-table-column>
<el-table-column label="评论" width="60px" prop="comments" ></el-table-column>
<el-table-column label="作者" width="80px" prop="sysCreateBy" ></el-table-column>
<el-table-column label="发布时间" width="160px" prop="sysCreateTime" ></el-table-column>
<el-table-column label="状态" width="80px" prop="status">
<template slot-scope="scope">
{{ scope.row.status | statusFilter }}
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="160">
<template slot-scope="scope">
<el-button v-if="scope.row.status === 2" type="text" icon="el-icon-refresh-left" @click="audit(scope.row)" >审核</el-button>
<el-button type="text" @click="delItem(scope.row)" icon="el-icon-delete">删除</el-button>
<el-button type="text" @click="shelfHandle(scope.row)" :icon="scope.row.enabled ? 'el-icon-download' : 'el-icon-upload2'">
{{ scope.row.enabled ? '下架' : '上架' }}
</el-button>
<!-- <el-button type="text" icon="el-icon-share" size="mini">推荐</el-button> -->
</template>
</el-table-column>
</el-table>
<div v-if="pageData.list.length > 0" style="text-align: center;margin-top: 50px;">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageData.pageIndex"
:page-sizes="[10, 20, 30, 40]"
:page-size="pageData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
></el-pagination>
</div>
<div style="height: 100px"></div>
<el-dialog custom-class="g-dialog" title="审核文章" :visible.sync="dialogVisible">
<el-row>
<h3 style="text-align: center">{{ form.title }}</h3>
作者{{ form.sysCreateBy }}
</el-row>
<el-form :model="form" ref="auditForm" :rules="rules" label-width="80px">
<div v-html="form.content"
style="padding: 0 10px;margin-top: 10px;border: 1px solid #d9d9d9;height: 400px; overflow: auto;">
<!-- <img style="width: 100%;" :src="`${webBaseUrl}/temp/articleTwo.png·" /> -->
</div>
<!-- <el-form-item label="人数"><el-input v-model="form.num"></el-input></el-form-item> -->
<el-form-item label="审核结果" prop="status">
<el-radio-group v-model="form.status">
<el-radio :label="true">通过</el-radio>
<el-radio :label="false">拒绝</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="审核意见">
<el-input type="textarea" placeholder="请输入0-200个字" v-model="form.auditRemark" maxlength="200" ></el-input>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="enSure">确认</el-button>
</template>
</el-dialog>
</div>
</template>
<script>
import apiArticle from '@/api/modules/article.js'
import { mapGetters } from 'vuex';
export default {
name: 'articleItems',
computed: {
...mapGetters(['userInfo'])
},
data() {
return {
pageData: {
pageIndex: 1,
pageSize: 10,
list: [],
},
total: 0,
form: {status:null,id:'',auditRemark:''},
rules: {
status: [
{ required: true, message: '请选择审核结果', trigger: 'blur' },
],
},
dialogVisible: false,
}
},
mounted() {},
created() {
this.getArticleList()
},
filters: {
statusFilter(item) {
switch (item) {
case 1: {
return '草稿'
}
case 2: {
return '待审核'
}
case 3: {
return '未通过'
}
case 5: {
return '已通过'
}
case 9: {
return '已发布'
}
}
},
},
methods: {
getsearch(){
this.pageData.pageIndex = 1;
this.getArticleList()
},
reset() {
this.pageData.status = ''
this.pageData.keyword = ''
this.pageData.pageIndex = 1;
this.getArticleList()
},
//获取文章列表数据
getArticleList() {
const { pageIndex, pageSize } = this.pageData
let query = { pageIndex, pageSize }
if (this.pageData.status) {
const { status } = this.pageData
query.status = status
}
if (this.pageData.keyword) {
const { keyword } = this.pageData
query.keyword = keyword
} //拼接查询条件
apiArticle
.portalPageList(query)
.then((res) => {
if (res.status == 200) {
this.total = res.result.count
this.pageData.list = res.result.list
}
})
.catch((err) => {
this.$message.error('获取数据失败')
})
},
//改变条数的回调
handleSizeChange(value) {
this.pageData.pageIndex = 1;
this.pageData.pageSize = value;
this.getArticleList();
},
//改变页数的回调
handleCurrentChange(value) {
this.pageData.pageIndex = value;
this.getArticleList();
},
//删除文章
delItem(item) {
this.$confirm('您确定要删除所选文章吗?', '删除提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
apiArticle.del(item.id).then((res) => {
if (res.status == 200) {
this.$message.success('删除成功')
this.getArticleList()
let event = {
key: "ArticleDelete",//被管理员删除
title: '被管理员删除文章',//事件的标题
parameters:"author:"+item.sysCreateAid,//用户自定义参数 name:value,name:value
content: '被管理员删除文章',//事件的内容
objId: item.id,//关联的id
objType: "2",//关联的类型
objInfo:item.title,
aid: this.userInfo.aid, //当前登录人的id
aname: this.userInfo.name,//当前人的姓名
status: 1 //状态直接写1
}
this.$store.dispatch("userTrigger", event);
} else {
this.$message.error('删除失败')
}
})
.catch((err) => {
this.$message.error('删除失败')
})
})
.catch(() => {})
},
//审核操作
audit(row) {
apiArticle.detail(row.id, false).then((res) => {
if (res.status == 200) {
this.form.id = res.result.id;
this.form.content = res.result.content;
this.form.auditRemark = '';
this.dialogVisible = true
}
})
},
//确认审核结果
enSure() {
const { auditRemark, status, id } = this.form
if(!status&&!auditRemark){
return this.$message.warning("如果审核未通过要填写拒绝理由")
}
this.$refs.auditForm.validate((valid) => {
if (valid) {
apiArticle
.savaAudit(id, auditRemark, status)
.then((res) => {
if (res.status == 200) {
this.$message.success('审核成功')
this.dialogVisible = false
this.getArticleList()
} else {
this.$message.error('审核失败')
}
})
.catch((err) => {
this.$message.error('审核失败')
})
}
})
},
//上下架子
shelfHandle(row) {
let successMessage, errorMessage
if (row.enabled) {
;(successMessage = '下架成功'), (errorMessage = '下架失败')
} else {
;(successMessage = '上架成功'), (errorMessage = '上架失败')
}
row.enabled = !row.enabled
const { id, enabled } = row
apiArticle
.isEnabled(id, enabled)
.then((res) => {
if (res.status == 200) {
this.$message.success(successMessage)
this.getArticleList()
} else {
this.$message.error(errorMessage)
}
})
.catch((err) => {
this.$message.error(errorMessage)
})
},
viewTopic(data) {
// window.open(this.webBaseUrl+'/article/detail?id='+data.id , '_blank')
this.$router.push({path:'/article/detail',query:{id:data.id}})
},
},
}
</script>
<style lang="scss" scoped>
</style>