Browse Source

话题 排行榜

master
王金鹏 6 years ago
parent
commit
bcaf69ede8
  1. 67
      package-lock.json
  2. 1
      src/i18n/zh-CN.js
  3. 201
      src/views/modules/group/leaderboard.vue
  4. 278
      src/views/modules/group/topic-add-or-update.vue
  5. 67
      src/views/modules/group/topic-close.vue
  6. 234
      src/views/modules/group/topic-detail.vue
  7. 237
      src/views/modules/group/topic-list.vue
  8. 98
      src/views/modules/group/topic.vue

67
package-lock.json

@ -2700,7 +2700,7 @@
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
@ -5396,15 +5396,6 @@
"resolved": "http://r.cnpmjs.org/events/download/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"eventsource": {
"version": "0.1.6",
"resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true,
"requires": {
"original": ">=0.0.5"
}
},
"evp_bytestokey": {
"version": "1.0.3",
"resolved": "http://r.cnpmjs.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
@ -10378,7 +10369,7 @@
},
"normalize-wheel": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=",
"dev": true
},
@ -14308,40 +14299,6 @@
}
}
},
"sockjs-client": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.0.0.tgz?cache=0&sync_timestamp=1566505930428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.0.0.tgz",
"integrity": "sha1-r20tNASCcJveJ4kKC6gE39dl+Pk=",
"dev": true,
"requires": {
"debug": "^2.1.0",
"eventsource": "^0.1.3",
"faye-websocket": "~0.7.3",
"inherits": "^2.0.1",
"json3": "^3.3.2",
"url-parse": "^1.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"faye-websocket": {
"version": "0.7.3",
"resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.7.3.tgz",
"integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=",
"dev": true,
"requires": {
"websocket-driver": ">=0.3.6"
}
}
}
},
"source-list-map": {
"version": "2.0.0",
"resolved": "http://r.cnpmjs.org/source-list-map/download/source-list-map-2.0.0.tgz",
@ -14603,7 +14560,7 @@
},
"stompjs": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/stompjs/-/stompjs-2.3.3.tgz",
"resolved": "https://registry.npm.taobao.org/stompjs/download/stompjs-2.3.3.tgz",
"integrity": "sha1-NBeKx7uO4pTMXVVK2LUPf1RZ/Y4=",
"dev": true,
"requires": {
@ -15530,8 +15487,8 @@
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"resolved": "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=",
"dev": true,
"optional": true,
"requires": {
@ -16712,8 +16669,8 @@
},
"websocket": {
"version": "1.0.30",
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.30.tgz",
"integrity": "sha512-aO6klgaTdSMkhfl5VVJzD5fm+Srhh5jLYbS15+OiI1sN6h/RU/XW6WN9J1uVIpUKNmsTvT3Hs35XAFjn9NMfOw==",
"resolved": "https://registry.npm.taobao.org/websocket/download/websocket-1.0.30.tgz",
"integrity": "sha1-kdO9AMPUPpFvDPli+PjEUbsLI3M=",
"dev": true,
"optional": true,
"requires": {
@ -16725,8 +16682,8 @@
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true,
"optional": true,
"requires": {
@ -16735,8 +16692,8 @@
},
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz",
"integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=",
"dev": true,
"optional": true
}
@ -16844,7 +16801,7 @@
},
"yaeti": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
"resolved": "https://registry.npm.taobao.org/yaeti/download/yaeti-0.0.6.tgz",
"integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
"dev": true,
"optional": true

1
src/i18n/zh-CN.js

@ -25,6 +25,7 @@ t.look = '查看'
t.ban = '禁言'
t.liftTheBan = '解禁'
t.disband = '解散'
t.close = '关闭'
t.prompt = {}
t.prompt.title = '提示'

201
src/views/modules/group/leaderboard.vue

@ -0,0 +1,201 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" placeholder="请选择" clearable @change="getCommunityList">
<el-option v-for="item in streetOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId"
placeholder="请选择"
clearable
@change="getGridList">
<el-option v-for="item in communityOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable
placeholder="请选择">
<el-option v-for="item in gridOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</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 label="排名">
<el-select v-model="this.orderType" clearable
placeholder="请选择">
<el-option v-for="item in orderTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
</el-form>
<el-table v-if="this.orderType === '0'" v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="groupName" label="群名" header-align="center" align="center"></el-table-column>
<el-table-column prop="ownGrid" label="所属网格" header-align="center" align="center"></el-table-column>
</el-table>
<el-table v-if="this.orderType === '1'" v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="groupName" label="群名" header-align="center" align="center"></el-table-column>
<el-table-column prop="memberNum" label="群成员数量" header-align="center" align="center"></el-table-column>
<el-table-column prop="ownGrid" label="所属网格" header-align="center" align="center"></el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<close v-if="closeVisible" ref="close" @refreshDataList="getDataList"></close>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import Close from './topic-close'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/group/group/activity',
getDataListIsPage: true
},
closeVisible: false,
detailVisible: false,
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
startTime: '',
endTime: ''
},
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()
}
}
},
orderType: '0',
streetOptions: [],
communityOptions: [],
gridOptions: [],
orderTypeOptions: [{
id: '0',
name: '按活跃度排名'
}, {
id: '1',
name: '按群成员排名'
}]
}
},
watch: {
'orderType': function (val) {
if (val === '0') {
this.mixinViewModuleOptions.getDataListURL = '/group/group/activity'
} else {
this.mixinViewModuleOptions.getDataListURL = '/group/group/member'
}
this.getDataList()
}
},
components: {
Close
},
created: function () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => { })
},
getCommunityList () {
if (this.dataForm.streetId === '') {
this.communityOptions = []
this.gridOptions = []
this.dataForm.communityId = ''
this.dataForm.gridId = ''
return
}
this.dataForm.communityId = ''
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => { })
},
getGridList () {
if (this.dataForm.communityId === '') {
this.gridOptions = []
this.dataForm.gridId = ''
return
}
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => { })
}
}
}
</script>

278
src/views/modules/group/topic-add-or-update.vue

@ -1,278 +0,0 @@
<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="nickname">
<el-input v-model="dataForm.nickname" placeholder="用户昵称"></el-input>
</el-form-item>
<el-form-item label="用户头像" prop="userFace">
<el-input v-model="dataForm.userFace" placeholder="用户头像"></el-input>
</el-form-item>
<el-form-item label="党员标识 0:否,1:是" prop="partyMember">
<el-input v-model="dataForm.partyMember" placeholder="党员标识 0:否,1:是"></el-input>
</el-form-item>
<el-form-item label="话题内容" prop="topicContent">
<el-input v-model="dataForm.topicContent" placeholder="话题内容"></el-input>
</el-form-item>
<el-form-item label="议题ID" prop="issueId">
<el-input v-model="dataForm.issueId" placeholder="议题ID"></el-input>
</el-form-item>
<el-form-item label="项目ID" prop="itemId">
<el-input v-model="dataForm.itemId" placeholder="项目ID"></el-input>
</el-form-item>
<el-form-item label="区" prop="area">
<el-input v-model="dataForm.area" placeholder="区"></el-input>
</el-form-item>
<el-form-item label="区ID" prop="areaId">
<el-input v-model="dataForm.areaId" placeholder="区ID"></el-input>
</el-form-item>
<el-form-item label="街道" prop="street">
<el-input v-model="dataForm.street" placeholder="街道"></el-input>
</el-form-item>
<el-form-item label="街道ID" prop="streetId">
<el-input v-model="dataForm.streetId" placeholder="街道ID"></el-input>
</el-form-item>
<el-form-item label="社区" prop="community">
<el-input v-model="dataForm.community" placeholder="社区"></el-input>
</el-form-item>
<el-form-item label="社区ID" prop="communityId">
<el-input v-model="dataForm.communityId" placeholder="社区ID"></el-input>
</el-form-item>
<el-form-item label="网格" prop="grid">
<el-input v-model="dataForm.grid" placeholder="网格"></el-input>
</el-form-item>
<el-form-item label="网格ID" prop="gridId">
<el-input v-model="dataForm.gridId" placeholder="网格ID"></el-input>
</el-form-item>
<el-form-item label="话题地址" prop="topicAddress">
<el-input v-model="dataForm.topicAddress" placeholder="话题地址"></el-input>
</el-form-item>
<el-form-item label="话题位置纬度" prop="topicLatitude">
<el-input v-model="dataForm.topicLatitude" placeholder="话题位置纬度"></el-input>
</el-form-item>
<el-form-item label="话题位置经度" prop="topicLongitude">
<el-input v-model="dataForm.topicLongitude" placeholder="话题位置经度"></el-input>
</el-form-item>
<el-form-item label="友邻社群" prop="groupName">
<el-input v-model="dataForm.groupName" placeholder="友邻社群"></el-input>
</el-form-item>
<el-form-item label="友邻社群ID" prop="groupId">
<el-input v-model="dataForm.groupId" placeholder="友邻社群ID"></el-input>
</el-form-item>
<el-form-item label="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭" prop="state">
<el-input v-model="dataForm.state" placeholder="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭"></el-input>
</el-form-item>
<el-form-item label="评论数" prop="commentNum">
<el-input v-model="dataForm.commentNum" placeholder="评论数"></el-input>
</el-form-item>
<el-form-item label="浏览数" prop="browseNum">
<el-input v-model="dataForm.browseNum" placeholder="浏览数"></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-form-item>
<el-form-item label="更新时间" prop="updatedTime">
<el-input v-model="dataForm.updatedTime" placeholder="更新时间"></el-input>
</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>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
userId: '',
nickname: '',
userFace: '',
partyMember: '',
topicContent: '',
issueId: '',
itemId: '',
area: '',
areaId: '',
street: '',
streetId: '',
community: '',
communityId: '',
grid: '',
gridId: '',
topicAddress: '',
topicLatitude: '',
topicLongitude: '',
groupName: '',
groupId: '',
state: '',
commentNum: '',
browseNum: '',
delFlag: '',
revision: '',
createdBy: '',
createdTime: '',
updatedBy: '',
updatedTime: ''
}
}
},
computed: {
dataRule () {
return {
userId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
nickname: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
userFace: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
partyMember: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicContent: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
issueId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
itemId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
area: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
areaId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
street: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
streetId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
community: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
communityId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
grid: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
gridId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicAddress: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicLatitude: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicLongitude: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
groupName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
groupId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
state: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
commentNum: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
browseNum: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
delFlag: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
revision: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/news/topic/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/news/topic/', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

67
src/views/modules/group/topic-close.vue

@ -0,0 +1,67 @@
<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="关闭原因" prop="processingOpinions">
<el-input v-model="dataForm.processingOpinions" type="textarea" placeholder="50字以内"></el-input>
</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>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
processingOpinions: ''
}
}
},
computed: {
dataRule () {
return {
processingOpinions: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/group/topic/close', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

234
src/views/modules/group/topic-detail.vue

@ -0,0 +1,234 @@
<template>
<div class="project-handle">
<el-form :model="dataForm" ref="dataForm" style="width: 100%; height: 100%;">
<div class="project-detail">
<div class="project-detail-tip">话题详情</div>
<el-form label-position="right" label-width="120px">
<el-form-item label="话题内容:" prop="eventContent">
<div>{{dataForm.topicContent}}</div>
<el-image v-for="url in dataForm.images"
style="width: 100px; height: 100px; margin-right: 10px"
:key="url"
:src="url"
:preview-src-list="previewImgList"
@click="clickImg(url)">
</el-image>
</el-form-item>
<el-form-item label="地址:" prop="ownGrid">
<div>{{dataForm.topicAddress}}</div>
</el-form-item>
<el-form-item label="议题来源:" prop="createdTime">
<div>{{dataForm.groupName}}</div>
</el-form-item>
<el-form-item label="发言人:" prop="nickName">
<div>{{dataForm.nickName}}</div>
</el-form-item>
<el-form-item label="评论:">
<el-button type="primary" @click="innerVisible = true">点击查看评论</el-button>
</el-form-item>
</el-form>
</div>
<div style="width: 100%; text-align:center; float:left;">
<el-button size="medium" style="width: 95px" type="primary" @click="back">返回</el-button>
</div>
</el-form>
<el-dialog width="90%" title="评论" :visible.sync="innerVisible" append-to-body>
<el-table :data="commentsDTOs" border style="width: 100%;">
<el-table-column prop="user.userName" label="发言人" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentTime" 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="replyComment.userName" label="被回复人" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyComment.content" label="被回复内容" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="scope.row.shieldFlag === '0'" type="button" size="small" @click="deleteComment(scope.row.commentId)">屏蔽</el-button>
<el-button v-if="scope.row.shieldFlag === '1'" type="text" size="small">已屏蔽</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="limitVal"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandleNew"
@current-change="pageCurrentChangeHandleNew">
</el-pagination>
</el-dialog>
</div>
</template>
<script>
import 'element-ui/lib/theme-chalk/timeline.css'
import 'element-ui/lib/theme-chalk/timeline-item.css'
import 'element-ui/lib/theme-chalk/image.css'
export default {
data () {
return {
innerVisible: false,
visible: false,
dataForm: {
id: ''
},
order: '',
orderField: '',
pageIndex: 1,
limitVal: 10,
total: 0,
commentsDTOs: []
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/group/topic/detail/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
pageSizeChangeHandleNew (val) {
this.pageIndex = 1
this.limitVal = val
this.getCommentList()
},
pageCurrentChangeHandleNew (val) {
this.pageIndex = val
this.getCommentList()
},
getCommentList () {
this.$http.get('/group/topiccomment/comments', { params: { id: this.dataForm.id, order: this.order, orderField: this.orderField, page: this.pageIndex, limit: this.limitVal }
}).then(({ data: res }) => {
if (res.code !== 0) {
this.commentsDTOs = []
this.total = 0
return this.$message.error(res.msg)
}
this.commentsDTOs = res.data.list
this.total = res.data.total
}).catch(() => {})
},
deleteComment (val) {
this.$http['post'](
'/group/topiccomment/deleteComment', { commentIds: [val] }).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.getCommentList()
}
})
}).catch(() => {})
}
}
}
</script>
<style lang="scss">
.project-handle {
.el-timeline {
padding-left: 9px;
font-size: 13px;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>
.project-handle {
width: 100%;
height: calc(100vh - 120px);
background: #ffffff;
box-sizing: border-box;
padding: 10px;
.project-detail {
width: 100%;
height: 80%;
border: 2px solid #ccc;
box-sizing: border-box;
padding: 10px;
padding-top: 20px;
float:left;
margin-bottom: 1%;
position:relative;
.project-detail-tip {
position: absolute;
top: 0;
left:0;
width: 80px;
height: 30px;
line-height: 30px;
color: #ffffff;
background: #4ac38b;
text-align:center;
}
.el-form {
width: 58%;
height: 100%;
float:left;
overflow-y:auto;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #fff;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #fff;
}
}
}
.project-progress {
width: 20%;
height: 100%;
float: right;
border: 2px solid #ccc;
box-sizing: border-box;
margin-left: 1%;
padding-top: 20px;
overflow-y:auto;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #aaa;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #ccc;
}
}
.handle-operation {
width: 79%;
height: 49%;
box-sizing: border-box;
border: 2px solid #ccc;
float:left;
}
}
</style>

237
src/views/modules/group/topic-list.vue

@ -0,0 +1,237 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" placeholder="请选择" clearable @change="getCommunityList">
<el-option v-for="item in streetOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId"
placeholder="请选择"
clearable
@change="getGridList">
<el-option v-for="item in communityOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable
placeholder="请选择">
<el-option v-for="item in gridOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</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 label="群名">
<el-select v-model="dataForm.groupId" clearable
placeholder="请选择">
<el-option v-for="item in groupOptions"
:key="item.groupId"
:label="item.groupName"
:value="item.groupId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="关键词" prop="keyword">
<el-input v-model="dataForm.keyword" placeholder=""></el-input>
</el-form-item>
<el-form-item label="排序方式">
<el-select v-model="dataForm.orderType" clearable
placeholder="请选择">
<el-option v-for="item in orderTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</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 label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="nickname" 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="topicContent" 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="browseNum" label="浏览数" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="look(scope.row.id)">{{ $t('look') }}</el-button>
<el-button v-if="scope.row.state !== 20" type="text" size="small" @click="close(scope.row.id)">{{ $t('close') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<close v-if="closeVisible" ref="close" @refreshDataList="getDataList"></close>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import Close from './topic-close'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/group/topic/page',
getDataListIsPage: true
},
closeVisible: false,
detailVisible: false,
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
startTime: '',
endTime: '',
groupId: '',
keyword: '',
orderType: ''
},
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()
}
}
},
streetOptions: [],
communityOptions: [],
gridOptions: [],
groupOptions: [],
orderTypeOptions: [{
id: '0',
name: '按发布时间排序'
}, {
id: '1',
name: '按浏览数排序'
}, {
id: '2',
name: '按评论数排序'
}]
}
},
components: {
Close
},
created: function () {
this.getStreetList()
this.getGroupList()
},
methods: {
close (id) {
this.closeVisible = true
this.$nextTick(() => {
this.$refs.close.dataForm.id = id
this.$refs.close.init()
})
},
look (id) {
this.detailVisible = true
this.$nextTick(() => {
this.$refs.detail.dataForm.id = id
this.$refs.detail.init()
})
},
getGroupList () {
this.$http.get('/group/group/groupList').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.groupOptions = res.data
}).catch(() => { })
},
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => { })
},
getCommunityList () {
if (this.dataForm.streetId === '') {
this.communityOptions = []
this.gridOptions = []
this.dataForm.communityId = ''
this.dataForm.gridId = ''
return
}
this.dataForm.communityId = ''
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => { })
},
getGridList () {
if (this.dataForm.communityId === '') {
this.gridOptions = []
this.dataForm.gridId = ''
return
}
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => { })
}
}
}
</script>

98
src/views/modules/group/topic.vue

@ -1,94 +1,30 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<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>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:topic:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:topic:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</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="nickname" 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="partyMember" label="党员标识 0:否,1:是" 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="issueId" label="议题ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="itemId" label="项目ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="area" label="区" header-align="center" align="center"></el-table-column>
<el-table-column prop="areaId" label="区ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="street" label="街道" header-align="center" align="center"></el-table-column>
<el-table-column prop="streetId" label="街道ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="community" label="社区" header-align="center" align="center"></el-table-column>
<el-table-column prop="communityId" label="社区ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="grid" label="网格" header-align="center" align="center"></el-table-column>
<el-table-column prop="gridId" label="网格ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicAddress" label="话题地址" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicLatitude" label="话题位置纬度" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicLongitude" label="话题位置经度" header-align="center" align="center"></el-table-column>
<el-table-column prop="groupName" label="友邻社群" header-align="center" align="center"></el-table-column>
<el-table-column prop="groupId" label="友邻社群ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭" 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="browseNum" 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 :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('news:topic:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('news:topic:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
<keep-alive include="TopicList">
<component :is="selectComponent"></component>
</keep-alive>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './topic-add-or-update'
import TopicList from './topic-list'
import TopicDetail from './topic-detail'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/news/topic/page',
getDataListIsPage: true,
deleteURL: '/news/topic',
deleteIsBatch: true
},
dataForm: {
id: ''
}
selectComponent: TopicList
}
},
components: {
AddOrUpdate
TopicList,
TopicDetail
},
methods: {
init () {
this.selectComponent = TopicList
}
}
}
</script>
<style lang="scss" scoped>
</style>

Loading…
Cancel
Save