Browse Source

话题通知 和 话题内容

master
songyunpeng 6 years ago
parent
commit
397258c9aa
  1. 97
      src/views/modules/master/masternotice-add-or-update.vue
  2. 229
      src/views/modules/master/masternotice.vue
  3. 117
      src/views/modules/master/masternoticedetail.vue
  4. 30
      src/views/modules/master/masternoticeroute.vue
  5. 240
      src/views/modules/master/mastertopic.vue
  6. 101
      src/views/modules/master/mastertopiccomment.vue
  7. 106
      src/views/modules/master/mastertopicdetail.vue
  8. 32
      src/views/modules/master/mastertopicroute.vue

97
src/views/modules/master/masternotice-add-or-update.vue

@ -1,46 +1,39 @@
<template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="dataForm.userId" placeholder="用户ID"></el-input>
</el-form-item>
<el-form-item label="通知标题" prop="noticeTitle">
<el-input v-model="dataForm.noticeTitle" placeholder="通知标题"></el-input>
<el-input v-model="dataForm.noticeTitle" placeholder="请输入标题(50字以内)" maxlength="50"></el-input>
</el-form-item>
<el-form-item label="通知内容" prop="noticeContent">
<el-input v-model="dataForm.noticeContent" placeholder="通知内容"></el-input>
</el-form-item>
<el-form-item label="状态:0关闭,1发布,2置顶" prop="state">
<el-input v-model="dataForm.state" placeholder="状态:0关闭,1发布,2置顶"></el-input>
</el-form-item>
<el-form-item label="删除标记 0:未删除,1:已删除" prop="delFlag">
<el-input v-model="dataForm.delFlag" placeholder="删除标记 0:未删除,1:已删除"></el-input>
</el-form-item>
<el-form-item label="乐观锁" prop="revision">
<el-input v-model="dataForm.revision" placeholder="乐观锁"></el-input>
</el-form-item>
<el-form-item label="创建人" prop="createdBy">
<el-input v-model="dataForm.createdBy" placeholder="创建人"></el-input>
</el-form-item>
<el-form-item label="创建时间" prop="createdTime">
<el-input v-model="dataForm.createdTime" placeholder="创建时间"></el-input>
</el-form-item>
<el-form-item label="更新人" prop="updatedBy">
<el-input v-model="dataForm.updatedBy" placeholder="更新人"></el-input>
<el-input type="textarea"
:rows="3"
v-model="dataForm.noticeContent" placeholder="请输入内容,限制2000字以内"
maxlength="2000"></el-input>
</el-form-item>
<el-form-item label="更新时间" prop="updatedTime">
<el-input v-model="dataForm.updatedTime" placeholder="更新时间"></el-input>
<el-form-item label="添加图片" prop="noticeContent">
<el-upload
:action="url"
:file-list="fileList"
drag
multiple
:before-upload="beforeUploadHandle"
:on-success="successHandle">
<i class="el-icon-upload"></i>
<div class="el-upload__text" v-html="$t('upload.text')"></div>
<div class="el-upload__tip" slot="tip">{{ $t('upload.tip', { 'format': 'jpg、png、gif' }) }}</div>
</el-upload>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()" :disabled="btnAble">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
import Cookies from 'js-cookie'
export default {
data () {
return {
@ -56,8 +49,13 @@ export default {
createdBy: '',
createdTime: '',
updatedBy: '',
updatedTime: ''
}
updatedTime: '',
fileList: ''
},
url: '',
num: 0,
fileList: [],
btnAble: false
}
},
computed: {
@ -99,6 +97,9 @@ export default {
methods: {
init () {
this.visible = true
this.url = `${window.SITE_CONFIG['apiURL']}/oss/file/upload?token=${Cookies.get('token')}`
this.num = 0
this.fileList = []
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
@ -108,7 +109,7 @@ export default {
},
//
getInfo () {
this.$http.get(`//masternotice/${this.dataForm.id}`).then(({ data: res }) => {
this.$http.get(`/cloudAnalysis/masternotice/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
@ -120,11 +121,12 @@ export default {
},
//
dataFormSubmitHandle: debounce(function () {
this.btnAble = true
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('//masternotice/', this.dataForm).then(({ data: res }) => {
this.$http[!this.dataForm.id ? 'post' : 'put']('/cloudAnalysis/masternotice/', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
@ -134,12 +136,45 @@ export default {
duration: 500,
onClose: () => {
this.visible = false
this.btnAble = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}, 1000, { 'leading': true, 'trailing': false }),
//
beforeUploadHandle (file) {
this.btnAble = true
if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
this.$message.error(this.$t('upload.tip', { 'format': 'jpg、png、gif' }))
return false
}
this.num++
},
//
successHandle (res, file, fileList) {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.fileList = fileList
this.num--
if (this.num === 0) {
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.btnAble = false
let fileListStr = ''
fileList.forEach((v, i) => {
fileListStr += v.response.data.url + ','
})
this.dataForm.fileList = fileListStr
}
})
}
}
}
}
</script>

229
src/views/modules/master/masternotice.vue

@ -2,37 +2,68 @@
<el-card shadow="never" class="aui-card--fill">
<div class="mod-__masternotice}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.id" placeholder="id" clearable></el-input>
<el-form-item label="通知内容" prop="noticeContent">
<el-input v-model="dataForm.noticeContent" placeholder="通知内容" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission(':masternotice:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission(':masternotice:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
<el-form-item label="状态" prop="state">
<el-select v-model="dataForm.state" placeholder="状态" clearable>
<el-option v-for="item in stateArr"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<div class="block">
<el-form-item label="时间" prop="startTime">
<el-date-picker
v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="至" label-width="25px" prop="endTime">
<el-date-picker
v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>
<el-table-column prop="userId" label="用户ID" header-align="center" align="center"></el-table-column>
<el-table-column label="序号" header-align="center" align="center" width="50px">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="noticeTitle" label="通知标题" header-align="center" align="center"></el-table-column>
<el-table-column prop="noticeContent" label="通知内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态:0关闭,1发布,2置顶" header-align="center" align="center"></el-table-column>
<el-table-column prop="delFlag" label="删除标记 0:未删除,1:已删除" header-align="center" align="center"></el-table-column>
<el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="nickName" label="发布人" header-align="center" align="center"></el-table-column>
<el-table-column prop="manageFlag" label="发布人身份" header-align="center" align="center" :formatter="manageFlagFormat"></el-table-column>
<el-table-column prop="readCount" label="已阅读人数" header-align="center" align="center" :formatter="readCountFormat"></el-table-column>
<el-table-column prop="unReadCount" label="未阅读人数" header-align="center" align="center" :formatter="unReadCountFormat"></el-table-column>
<el-table-column prop="createdTime" label="发布时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态" header-align="center" align="center" :formatter="stateFormat"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission(':masternotice:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission(':masternotice:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
<el-button type="text" size="small" @click="openToTopDialog($event, scope.row)" v-if="scope.row.state == 1">置顶</el-button>
<el-button type="text" size="small" @click="openCancelToTopDialog($event, scope.row)" v-if="scope.row.state == 2">取消置顶</el-button>
<el-button type="text" size="small" @click="openCloseTopicDialog($event, scope.row)" :disabled="scope.row.state == 0">关闭</el-button>
<el-button type="text" size="small" @click="manageHandle(scope.row.id)">查看</el-button> </template>
</el-table-column>
</el-table>
<el-pagination
@ -46,6 +77,36 @@
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<el-dialog
title="确定要本条内容置顶吗?"
:visible.sync="toTopDialog"
width="30%">
<span>置顶后话题会被群成员优先看到查看内容</span>
<span slot="footer" class="dialog-footer">
<el-button @click="toTopDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
<el-dialog
title="确定要本条内容取消置顶吗?"
:visible.sync="cancelToTopDialog"
width="30%">
<span>取消置顶后话题会被按照发布时间排序需要滑动查找内容</span>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelToTopDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
<el-dialog
title="确定要将本条内容关闭吗?"
:visible.sync="closeDialog"
width="30%">
<span>关闭后在移动端不显示话题内容管理后台将保留数据可以查看</span>
<span slot="footer" class="dialog-footer">
<el-button @click="closeDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
</div>
</el-card>
</template>
@ -58,18 +119,132 @@ export default {
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '//masternotice/page',
getDataListURL: '/cloudAnalysis/masternotice/page',
getDataListIsPage: true,
deleteURL: '//masternotice',
deleteURL: '/cloudAnalysis/masternotice',
deleteIsBatch: true
},
dataForm: {
id: ''
}
},
optionForm: {
id: '',
state: ''
},
toTopDialog: false,
cancelToTopDialog: false,
closeDialog: false,
isTop: true,
toGrey: false,
pickerBeginDateBefore: {
disabledDate: time => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: time => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
},
stateArr: [
{
label: '全部',
value: '-1'
},
{
label: '进行中',
value: '1'
},
{
label: '关闭',
value: '0'
}
]
}
},
components: {
AddOrUpdate
},
mounted () {
this.getDataList()
},
methods: {
stateFormat: function (row, column) {
let state = row.state
if (state === '0') {
return '已关闭'
} else if (state === '1' || state === '2') {
return '进行中'
}
},
readCountFormat: function (row, column) {
let readCount = row.readCount
if (readCount === '') {
return '0'
} else {
return row.readCount
}
},
unReadCountFormat: function (row, column) {
let unreadCount = row.unReadCount
if (unreadCount === '') {
return '0'
} else {
return row.unReadCount
}
},
manageFlagFormat: function (row, column) {
let manageFlag = row.manageFlag
if (manageFlag === '0') {
return '群成员'
} else if (manageFlag === '1') {
return '管理员'
}
},
openToTopDialog (value, row) {
this.toTopDialog = true
this.optionForm.id = row.id
this.optionForm.state = 2
},
openCancelToTopDialog (value, row) {
this.cancelToTopDialog = true
this.optionForm.id = row.id
this.optionForm.state = 1
},
toTopOrCancelToTop () {
this.toGrey = true
this.$http.put(`/cloudAnalysis/masternotice`, this.optionForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
type: 'success',
message: '修改成功!',
onClose: () => {
this.toTopDialog = false
this.cancelToTopDialog = false
this.closeDialog = false
this.toGrey = false
this.getDataList()
}
})
})
},
openCloseTopicDialog (value, row) {
this.closeDialog = true
this.optionForm.id = row.id
this.optionForm.state = 0
},
manageHandle (noticeId) {
this.$parent.selectComponent = 'Masternoticedetail'
this.$router.push({ path: '/master-masternoticeroute', query: { noticeId: noticeId } })
}
}
}
</script>

117
src/views/modules/master/masternoticedetail.vue

@ -0,0 +1,117 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div>
<el-button type="primary" @click="backToDeptList()">返回</el-button>
</div>
<div style="width: 60%;float: left">
<p style="font-weight:bold;font-size: 30px">{{dataForm.noticeTitle}}</p>
<p style="text-indent: 2em;font-size: 15px;letter-spacing: 0.1em;line-height:2em">{{dataForm.noticeContent}}</p>
<div v-for="(item,index) in dataForm.fileArrayList" :key="index">
<img :src="item" style="width: 100%">
</div>
</div>
<div style="width: 40%;float: right;">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="已读名单" name="first">
<el-table
:data="readFormList"
style="width: 100%"
:show-header="showHeader">
<el-table-column width="60">
<template slot-scope="scope">
<img :src="scope.row.userAvatar" width="40" height="40" class="head_pic"/>
</template>
</el-table-column>
<el-table-column
prop="nickName" align="left">
</el-table-column>
<el-table-column
prop="createdTime">
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="未读名单" name="second">
<el-table
:data="readFormList"
style="width: 100%"
:show-header="showHeader">
<el-table-column width="60">
<template slot-scope="scope">
<img :src="scope.row.userAvatar" width="40" height="40" class="head_pic"/>
</template>
</el-table-column>
<el-table-column
prop="nickName">
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</el-card>
</template>
<script>
export default {
data () {
return {
dataForm: {
id: ''
},
readForm: {
id: '',
readFlag: ''
},
readFormList: [],
activeName: 'first',
showHeader: false,
size: 'small'
}
},
mounted () {
this.dataForm.id = this.$route.query.noticeId
this.readForm.id = this.$route.query.noticeId
this.getInfo()
this.getReadInfo(1)
},
methods: {
//
getInfo () {
this.$http.get(`/cloudAnalysis/masternotice/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
this.dataForm.tagIds = []
}).catch(() => { })
},
//
getReadInfo (readFlag) {
this.readForm.readFlag = readFlag
this.$http.post(`/cloudAnalysis/masternotice/getReadInfo`, this.readForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.readFormList = res.data
console.log(this.readFormList)
this.readFormList.tagIds = []
}).catch(() => { })
},
backToDeptList () {
this.$emit('refreshDataList')
this.$parent.selectComponent = 'Masternotice'
this.$router.push({ path: '/master-masternoticeroute' })
},
handleClick (tab, event) {
if (tab.label === '已读名单') {
this.getReadInfo(1)
}
if (tab.label === '未读名单') {
this.getReadInfo(0)
}
}
}
}
</script>

30
src/views/modules/master/masternoticeroute.vue

@ -0,0 +1,30 @@
<template>
<keep-alive include="masternotice">
<component :is="selectComponent"></component>
</keep-alive>
</template>
<script>
import Masternotice from './masternotice'
import Masternoticedetail from './masternoticedetail'
export default {
data () {
return {
selectComponent: Masternotice
}
},
components: {
Masternotice,
Masternoticedetail
},
methods: {
init () {
this.selectComponent = Masternotice
}
}
}
</script>
<style lang="scss" scoped>
</style>

240
src/views/modules/master/mastertopic.vue

@ -2,12 +2,62 @@
<el-card shadow="never" class="aui-card--fill">
<div class="mod-__mastertopic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.id" placeholder="id" clearable></el-input>
<el-form-item label="话题内容" prop="topicContent">
<el-input v-model="dataForm.topicContent" placeholder="话题内容" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
<el-form-item label="发言人" prop="nickName">
<el-input v-model="dataForm.nickName" placeholder="发言人" clearable></el-input>
</el-form-item>
<el-form-item label="排行榜" prop="orderBy">
<el-select v-model="dataForm.orderBy" placeholder="类别" clearable>
<el-option v-for="item in orderByArr"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="state">
<el-select v-model="dataForm.state" placeholder="状态" clearable>
<el-option v-for="item in stateArr"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<div class="block">
<el-form-item label="时间" prop="startTime">
<el-date-picker
v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="至" label-width="25px" prop="endTime">
<el-date-picker
v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button type="primary"
@click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</div>
<el-form-item>
<el-button v-if="$hasPermission(':mastertopic:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
@ -16,25 +66,26 @@
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>
<el-table-column prop="userId" label="用户ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicContent" label="话题内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态:0关闭,1发布,2置顶" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentNum" label="评论数" header-align="center" align="center"></el-table-column>
<el-table-column label="序号" header-align="center" align="center" width="50px">
<template slot-scope="scope">
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="topicContent" label="话题内容" header-align="center" align="center" width="200"></el-table-column>
<el-table-column prop="nickName" label="发言人" header-align="center" align="center"></el-table-column>
<el-table-column prop="browseNum" label="浏览数" header-align="center" align="center"></el-table-column>
<el-table-column prop="approveNum" label="点赞次数" header-align="center" align="center"></el-table-column>
<el-table-column prop="opposeNum" label="踩次数" header-align="center" align="center"></el-table-column>
<el-table-column prop="delFlag" label="删除标记 0:未删除,1:已删除" header-align="center" align="center"></el-table-column>
<el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentNum" label="评论数" header-align="center" align="center"></el-table-column>
<el-table-column prop="approveNum" label="点赞数" header-align="center" align="center"></el-table-column>
<el-table-column prop="opposeNum" label="点踩数" header-align="center" align="center"></el-table-column>
<el-table-column prop="totalParticipation" label="总参与度" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="发布时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态" header-align="center" align="center" :formatter="stateFormat"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission(':mastertopic:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission(':mastertopic:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
<el-button type="text" size="small" @click="openToTopDialog($event, scope.row)" v-if="scope.row.state == 1">置顶</el-button>
<el-button type="text" size="small" @click="openCancelToTopDialog($event, scope.row)" v-if="scope.row.state == 2">取消置顶</el-button>
<el-button type="text" size="small" @click="openCloseTopicDialog($event, scope.row)" :disabled="scope.row.state == 0">关闭</el-button>
<el-button type="text" size="small" @click="manageHandle(scope.row.id)">查看</el-button>
</template>
</el-table-column>
</el-table>
@ -49,6 +100,36 @@
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<el-dialog
title="确定要本条内容置顶吗?"
:visible.sync="toTopDialog"
width="30%">
<span>置顶后话题会被群成员优先看到查看内容</span>
<span slot="footer" class="dialog-footer">
<el-button @click="toTopDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
<el-dialog
title="确定要本条内容取消置顶吗?"
:visible.sync="cancelToTopDialog"
width="30%">
<span>取消置顶后话题会被按照发布时间排序需要滑动查找内容</span>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelToTopDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
<el-dialog
title="确定要将本条内容关闭吗?"
:visible.sync="closeDialog"
width="30%">
<span>关闭后在移动端不显示话题内容管理后台将保留数据可以查看</span>
<span slot="footer" class="dialog-footer">
<el-button @click="closeDialog = false"> </el-button>
<el-button type="primary" @click="toTopOrCancelToTop" :disabled="toGrey"> </el-button>
</span>
</el-dialog>
</div>
</el-card>
</template>
@ -61,18 +142,131 @@ export default {
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '//mastertopic/page',
getDataListURL: '/cloudAnalysis/mastertopic/page',
getDataListIsPage: true,
deleteURL: '//mastertopic',
deleteIsBatch: true
deleteURL: '/cloudAnalysis/mastertopic',
deleteIsBatch: true,
exportURL: '/cloudAnalysis/mastertopic/export'
},
dataForm: {
id: ''
},
optionForm: {
id: '',
state: ''
},
toTopDialog: false,
cancelToTopDialog: false,
closeDialog: false,
isTop: true,
toGrey: false,
orderByArr: [
{
label: '总参与度',
value: '0'
},
{
label: '浏览最多',
value: '1'
},
{
label: '评论最多',
value: '2'
},
{
label: '点赞最多',
value: '3'
},
{
label: '点踩最多',
value: '4'
}
],
stateArr: [
{
label: '全部',
value: '-1'
},
{
label: '进行中',
value: '1'
},
{
label: '关闭',
value: '0'
}
],
pickerBeginDateBefore: {
disabledDate: time => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: time => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
}
}
},
components: {
AddOrUpdate
},
mounted () {
this.getDataList()
},
methods: {
stateFormat: function (row, column) {
let state = row.state
if (state === '0') {
return '已关闭'
} else if (state === '1' || state === '2') {
return '进行中'
}
},
manageHandle (topicId) {
this.$parent.selectComponent = 'Mastertopicdetail'
this.$router.push({ path: '/master-mastertopicroute', query: { topicId: topicId } })
},
openToTopDialog (value, row) {
this.toTopDialog = true
this.optionForm.id = row.id
this.optionForm.state = 2
},
openCancelToTopDialog (value, row) {
this.cancelToTopDialog = true
this.optionForm.id = row.id
this.optionForm.state = 1
},
toTopOrCancelToTop () {
this.toGrey = true
this.$http.put(`/cloudAnalysis/mastertopic`, this.optionForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
type: 'success',
message: '修改成功!',
onClose: () => {
this.toTopDialog = false
this.cancelToTopDialog = false
this.closeDialog = false
this.toGrey = false
this.getDataList()
}
})
})
},
openCloseTopicDialog (value, row) {
this.closeDialog = true
this.optionForm.id = row.id
this.optionForm.state = 0
}
}
}
</script>

101
src/views/modules/master/mastertopiccomment.vue

@ -2,8 +2,35 @@
<el-card shadow="never" class="aui-card--fill">
<div class="mod-__mastertopiccomment}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.id" placeholder="id" clearable></el-input>
<div>
<el-form-item>
<el-button type="primary" @click="backToDeptList(dataForm.id)">返回</el-button>
</el-form-item>
</div>
<el-form-item label="用户名" prop="username">
<el-input v-model="dataForm.username" placeholder="用户名" clearable></el-input>
</el-form-item>
<el-form-item label="时间" prop="startTime">
<el-date-picker
v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item label="至" label-width="25px" prop="endTime">
<el-date-picker
v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
@ -16,33 +43,17 @@
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicId" label="话题ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="userId" label="评论人ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="username" label="评论人昵称" header-align="center" align="center"></el-table-column>
<el-table-column prop="userFace" label="评论人头像" header-align="center" align="center"></el-table-column>
<el-table-column prop="content" label="评论内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentType" label="评论类型 0:评论,1:回复,2:回复的回复" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentId" label="回复的评论ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyCount" label="被回复数" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyUserId" label="被回复人ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyUsername" label="被回复人名称" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyUserFace" label="被回复人头像" header-align="center" align="center"></el-table-column>
<el-table-column prop="likeCount" label="点赞数" header-align="center" align="center"></el-table-column>
<el-table-column prop="unLikeCount" label="点踩数" header-align="center" align="center"></el-table-column>
<el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>
<el-table-column prop="delFlag" label="删除标记 0:未删除,1:已删除" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<el-table-column label="序号" header-align="center" align="center" width="50px">
<template slot-scope="scope">
<el-button v-if="$hasPermission(':mastertopiccomment:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission(':mastertopiccomment:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
{{scope.$index+1}}
</template>
</el-table-column>
<el-table-column prop="username" label="评论人-用户名" header-align="center" align="center"></el-table-column>
<el-table-column prop="content" label="评论内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="likeCount" label="点赞数" header-align="center" align="center"></el-table-column>
<el-table-column prop="unLikeCount" label="点踩数" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentType" label="状态" header-align="center" align="center" :formatter="commentTypeFormat"></el-table-column>
<el-table-column prop="createdTime" label="操作时间" header-align="center" align="center" ></el-table-column>
</el-table>
<el-pagination
:current-page="page"
@ -67,18 +78,52 @@ export default {
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '//mastertopiccomment/page',
getDataListURL: '/cloudAnalysis/mastertopiccomment/page',
getDataListIsPage: true,
deleteURL: '//mastertopiccomment',
deleteURL: '/cloudAnalysis/mastertopiccomment',
deleteIsBatch: true
},
dataForm: {
id: ''
},
pickerBeginDateBefore: {
disabledDate: time => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: time => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
}
}
},
mounted () {
this.dataForm.id = this.$route.query.topicId
this.getDataList()
},
components: {
AddOrUpdate
},
methods: {
commentTypeFormat (row) {
let state = row.commentType
if (state === '0') {
return '评论'
} else if (state === '1' || state === '2') {
return '回复'
}
},
backToDeptList (topicId) {
this.$parent.selectComponent = 'Mastertopicdetail'
this.$router.push({ path: '/master-mastertopicroute', query: { topicId: topicId } })
}
}
}
</script>

106
src/views/modules/master/mastertopicdetail.vue

@ -0,0 +1,106 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-__mastertopic}">
<el-form :model="dataForm"
ref="dataForm"
style="width: 50%;">
<div>
<el-form-item>
<el-button type="primary" @click="backToDeptList">返回</el-button>
</el-form-item>
</div>
<el-form-item label="话题内容:"
prop="topicContent" v-if="dataForm.topicContent">
<span>{{dataForm.topicContent}}</span>
</el-form-item>
<el-form-item label="发布时间:"
prop="createdTime" v-if="dataForm.createdTime">
<span>{{dataForm.createdTime}}</span>
</el-form-item>
<el-form-item label="话题来源:">
<span>书记在线</span>
</el-form-item>
<el-form-item label="发言人:"
prop="nickName" v-if="dataForm.nickName">
<span>{{dataForm.nickName}}</span>
</el-form-item>
<el-form-item label="总参与度:" v-if="dataForm.totalParticipation"
prop="totalParticipation">
<span>{{dataForm.totalParticipation}}</span>
</el-form-item>
<el-button type="success" round>浏览数{{dataForm.browseNum}}</el-button>
<el-button type="success" round @click="manageHandle(dataForm.id)">评论数{{dataForm.commentNum}}</el-button>
<el-button type="success" round>点赞数{{dataForm.approveNum}}</el-button>
<el-button type="success" round>点踩数{{dataForm.opposeNum}}</el-button>
</el-form>
</div>
</el-card>
</template>
<script>
export default {
data () {
return {
dataForm: {
id: '',
topicContent: '',
createdTime: '',
nickName: '',
totalParticipation: ''
},
pickerBeginDateBefore: {
disabledDate: time => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: time => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
}
}
},
mounted () {
this.dataForm.id = this.$route.query.topicId
this.getInfo()
},
methods: {
stateFormat: function (row, column) {
let state = row.state
if (state === '0') {
return '已关闭'
} else if (state === '1' || state === '2') {
return '进行中'
}
},
//
getInfo () {
this.$http.get(`/cloudAnalysis/mastertopic/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
this.dataForm.tagIds = []
}).catch(() => { })
},
backToDeptList () {
this.$emit('refreshDataList')
this.$parent.selectComponent = 'Mastertopic'
this.$router.push({ path: '/master-mastertopicroute' })
},
manageHandle (topicId) {
this.$parent.selectComponent = 'Mastertopiccomment'
this.$router.push({ path: '/master-mastertopicroute', query: { topicId: topicId } })
}
}
}
</script>

32
src/views/modules/master/mastertopicroute.vue

@ -0,0 +1,32 @@
<template>
<keep-alive include="mastertopic">
<component :is="selectComponent"></component>
</keep-alive>
</template>
<script>
import Mastertopic from './mastertopic'
import Mastertopicdetail from './mastertopicdetail'
import Mastertopiccomment from './mastertopiccomment'
export default {
data () {
return {
selectComponent: Mastertopic
}
},
components: {
Mastertopic,
Mastertopicdetail,
Mastertopiccomment
},
methods: {
init () {
this.selectComponent = Mastertopic
}
}
}
</script>
<style lang="scss" scoped>
</style>
Loading…
Cancel
Save