279 lines
8.6 KiB
Vue
279 lines
8.6 KiB
Vue
<template>
|
||
<ai-list class="news-list" isTabs>
|
||
<template slot="content">
|
||
<ai-search-bar>
|
||
<template slot="left">
|
||
<ai-select
|
||
v-model="searchObj.type"
|
||
@change="page.current = 1, getList()"
|
||
placeholder="选择新闻类别"
|
||
:selectList="$dict.getDict('newsCenterType')">
|
||
</ai-select>
|
||
</template>
|
||
<template slot="right">
|
||
<el-input
|
||
v-model="searchObj.title"
|
||
size="small"
|
||
placeholder="搜索标题/发布地区"
|
||
clearable
|
||
v-throttle="() => {page.current = 1, getList()}"
|
||
@clear="page.current = 1, searchObj.title = '', getList()"
|
||
suffix-icon="iconfont iconSearch"/>
|
||
</template>
|
||
</ai-search-bar>
|
||
<ai-search-bar>
|
||
<template slot="left">
|
||
<el-dropdown @visible-change="v=>isClick=v" @command="addNews"
|
||
v-if="permissions('app_appnewscenterinfo_edit')">
|
||
<el-button type="primary" icon="iconfont iconAdd" size="small">发布新闻
|
||
<i class="el-icon--right" :class="dropIcon"></i>
|
||
</el-button>
|
||
<el-dropdown-menu slot="dropdown">
|
||
<el-dropdown-item command="video">发布视频</el-dropdown-item>
|
||
<el-dropdown-item command="article">发布文章</el-dropdown-item>
|
||
</el-dropdown-menu>
|
||
</el-dropdown>
|
||
</template>
|
||
</ai-search-bar>
|
||
<ai-table
|
||
:tableData="tableData"
|
||
:col-configs="colConfigs"
|
||
:total="total"
|
||
stripe
|
||
:current.sync="page.current"
|
||
:size.sync="page.size"
|
||
@getList="getList">
|
||
<el-table-column slot="title" label="标题" width="280" align="left" show-overflow-tooltip>
|
||
<template slot-scope="{ row }">
|
||
<span style="color: #2266FF;margin-right:40px;" v-if="row.isTop == 1">[置顶]</span>
|
||
<span>{{ row.title }}</span>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column slot="options" label="操作" fixed="right" width="260" align="center">
|
||
<template slot-scope="{ row }">
|
||
<div class="table-options">
|
||
<el-button type="text" title="取消置顶" v-if="row.isTop==1" @click="setTop(row)">取消置顶</el-button>
|
||
<el-button type="text" title="置顶" v-else @click="setTop(row)">置顶</el-button>
|
||
<el-button type="text" title="取消发布" v-if="+row.status" @click="changeStatus(row)">取消发布</el-button>
|
||
<el-button type="text" v-else title="发布" @click="changeStatus(row)">发布</el-button>
|
||
<el-button type="text" title="查看" @click="hangeleDetail(row)"
|
||
:disabled="!permissions('app_appnewscenterinfo_detail')">查看
|
||
</el-button>
|
||
<el-button type="text" title="编辑" @click="handleEdit(row)"
|
||
:disabled="!permissions('app_appnewscenterinfo_edit')">编辑
|
||
</el-button>
|
||
<el-button type="text" title="删除" @click="handleDelete(row)"
|
||
:disabled="!permissions('app_appnewscenterinfo_del')">删除
|
||
</el-button>
|
||
<el-button type="text" title="分享" @click="handleCopyShare(row)">小程序链接</el-button>
|
||
</div>
|
||
</template>
|
||
</el-table-column>
|
||
</ai-table>
|
||
</template>
|
||
</ai-list>
|
||
</template>
|
||
|
||
<script>
|
||
import moment from "dayjs"
|
||
|
||
export default {
|
||
name: "newsList",
|
||
props: {
|
||
instance: Function,
|
||
dict: Object,
|
||
permissions: Function,
|
||
areaId: String
|
||
},
|
||
data() {
|
||
return {
|
||
tableData: [],
|
||
total: 0,
|
||
isClick: false,
|
||
page: {
|
||
current: 1,
|
||
size: 10
|
||
},
|
||
searchObj: {
|
||
title: '',
|
||
type: ''
|
||
},
|
||
}
|
||
},
|
||
computed: {
|
||
colConfigs() {
|
||
return [
|
||
{slot: 'title', label: '标题', width: 280},
|
||
{
|
||
prop: 'type', label: '类别', align: 'center',
|
||
render: (h, {row}) => {
|
||
return h('span', null, this.dict.getLabel('newsCenterType', +row.type))
|
||
}
|
||
},
|
||
{
|
||
prop: 'policyType', label: '类型', align: 'center',
|
||
render: (h, {row}) => {
|
||
return h('span', null, this.dict.getLabel('newsCenterPolicyType', +row.policyType))
|
||
}
|
||
},
|
||
{
|
||
prop: 'viewCount', label: '浏览/播放量', align: "center",
|
||
render: (h, {row}) => {
|
||
return h('span', null, row.viewCount >= 10000 ? ((row.viewCount / 10000).toFixed(2) + '万') : row.viewCount)
|
||
}
|
||
},
|
||
{prop: 'msgCount', label: '评论数', align: "center"},
|
||
{prop: 'areaName', label: '发布地区', align: 'center'},
|
||
{prop: 'createTime', label: '发布时间'},
|
||
{
|
||
prop: 'status', label: '发布状态', align: 'center',
|
||
render: (h, {row}) => {
|
||
return h('span', {
|
||
style: {
|
||
color: row.status ? this.$dict.getColor('newsCenterStatus', row.status) : 'auto'
|
||
}
|
||
}, this.$dict.getLabel('newsCenterStatus', row.status))
|
||
}
|
||
},
|
||
{slot: 'options', label: '操作'}
|
||
]
|
||
},
|
||
dropIcon() {
|
||
return this.isClick ? 'el-icon-arrow-up' : 'el-icon-arrow-down'
|
||
},
|
||
},
|
||
methods: {
|
||
/**
|
||
* 查看详情
|
||
* */
|
||
hangeleDetail(row) {
|
||
if (+row.type) {
|
||
this.$emit("goPage", {key: "videoDetail", row});
|
||
} else {
|
||
this.$emit("goPage", {key: "newsDetail", row});
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 编辑
|
||
* */
|
||
handleEdit(row) {
|
||
if (+row.type) {
|
||
this.$emit("goPage", {key: "addVideo", row});
|
||
} else {
|
||
this.$emit("goPage", {key: "addArticle", row});
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 修改新闻中心状态-发布、取消发布
|
||
* */
|
||
changeStatus(row) {
|
||
const msg = +row.status ? "是否取消发布?" : "是否发布?";
|
||
this.$confirm(msg).then(() => this.changeInfo(row));
|
||
},
|
||
/**
|
||
* 置顶新闻
|
||
* */
|
||
setTop(row) {
|
||
const msg = !row.topping ? "是否要置顶?" : "是否要取消置顶?"
|
||
this.$confirm(msg).then(() => this.setTopInfo(row));
|
||
},
|
||
/**
|
||
* 删除新闻
|
||
* */
|
||
handleDelete({id}) {
|
||
this.$confirm("是否要删除?").then(() => this.deleteInfo(id));
|
||
},
|
||
resetSearch() {
|
||
this.searchObj.title = "";
|
||
this.searchObj.type = "";
|
||
this.getList();
|
||
},
|
||
/**
|
||
* 添加新闻、视频
|
||
* */
|
||
addNews(command) {
|
||
switch (command) {
|
||
case "video":
|
||
this.$emit('goPage', {key: "addVideo"});
|
||
break;
|
||
case "article":
|
||
this.$emit('goPage', {key: "addArticle"});
|
||
break;
|
||
}
|
||
},
|
||
/**
|
||
* 修改发布状态
|
||
* */
|
||
changeInfo({id, status}) {
|
||
const msg = +status ? "取消发布成功" : "发布成功";
|
||
status = +status ? 0 : 1;
|
||
this.instance.post(`/app/appnewscenterinfo/release?id=${id}&status=${status}`).then(() => {
|
||
this.$message.success(msg);
|
||
this.getList();
|
||
})
|
||
},
|
||
/**
|
||
* 置顶新闻
|
||
* */
|
||
setTopInfo(row) {
|
||
const msg = !row.topping ? "置顶成功!" : "取消置顶成功!";
|
||
this.instance.post(`/app/appnewscenterinfo/topping?id=${row.id}&areaId=${this.areaId}`).then(() => {
|
||
this.$message.success(msg);
|
||
this.getList();
|
||
})
|
||
},
|
||
/**
|
||
* 删除新闻
|
||
* @param id
|
||
*/
|
||
deleteInfo(id) {
|
||
this.instance.post(`/app/appnewscenterinfo/delete?ids=${id}`).then(() => {
|
||
this.$message.success("删除成功");
|
||
this.getList();
|
||
})
|
||
},
|
||
getList() {
|
||
this.instance.post(`/app/appnewscenterinfo/list`, null, {
|
||
params: {
|
||
...this.page,
|
||
...this.searchObj,
|
||
areaId: this.areaId
|
||
}
|
||
}).then(res => {
|
||
if (res && res.data) {
|
||
this.tableData = res.data.records.map(e => {
|
||
return {
|
||
...e,
|
||
createTime: +e.status ? moment(e.createTime).format("YYYY-MM-DD HH:mm") : ''
|
||
}
|
||
});
|
||
this.total = res.data.total;
|
||
}
|
||
})
|
||
},
|
||
handleCopyShare(row) {
|
||
navigator.clipboard.writeText(`/subPages/live/newsDetail?id=${row.id}`)
|
||
this.$message.success("小程序链接已复制!")
|
||
}
|
||
},
|
||
created() {
|
||
this.dict.load('newsCenterType', 'newsCenterStatus', 'newsCenterPolicyType').then(() => this.getList());
|
||
},
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.news-list {
|
||
height: 100%;
|
||
overflow: auto;
|
||
background: #f3f6f9;
|
||
|
||
::v-deep.has-gutter th:nth-child(1) div {
|
||
margin-left: 40px;
|
||
}
|
||
}
|
||
|
||
</style>
|