|
|
|
@ -3,8 +3,10 @@ |
|
|
|
<div 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"> |
|
|
|
<el-form label-position="right" |
|
|
|
label-width="120px"> |
|
|
|
<el-form-item label="议题内容:" |
|
|
|
prop="eventContent"> |
|
|
|
<div>{{dataForm.itemContent}}</div> |
|
|
|
<el-image v-for="url in dataForm.images" |
|
|
|
style="width: 100px; height: 100px; margin-right: 10px" |
|
|
|
@ -14,19 +16,25 @@ |
|
|
|
@click="clickImg(url)"> |
|
|
|
</el-image> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item v-if="dataForm.groupName && dataForm.groupName.length > 0" label="项目来源:" prop="ownGrid"> |
|
|
|
<el-form-item v-if="dataForm.groupName && dataForm.groupName.length > 0" |
|
|
|
label="项目来源:" |
|
|
|
prop="ownGrid"> |
|
|
|
<div>{{dataForm.groupName}}</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="上报时间:" prop="distributeTime"> |
|
|
|
<el-form-item label="上报时间:" |
|
|
|
prop="distributeTime"> |
|
|
|
<div>{{dataForm.distributeTime}}</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="上报人:" prop="nickName"> |
|
|
|
<el-form-item label="上报人:" |
|
|
|
prop="nickName"> |
|
|
|
<div>{{dataForm.nickName}}</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="电话:" prop="mobile"> |
|
|
|
<el-form-item label="电话:" |
|
|
|
prop="mobile"> |
|
|
|
<div>{{dataForm.mobile}}</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="所属类别:" prop="categoryName"> |
|
|
|
<el-form-item label="所属类别:" |
|
|
|
prop="categoryName"> |
|
|
|
<div>{{dataForm.categoryName}}</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="项目态度:"> |
|
|
|
@ -36,7 +44,8 @@ |
|
|
|
<span>反对 {{dataForm.opposeNum}}</span> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="项目评论:"> |
|
|
|
<el-button type="text" @click="innerVisible = true">查看评论</el-button> |
|
|
|
<el-button type="text" |
|
|
|
@click="innerVisible = true">查看评论</el-button> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
<div class="container"> |
|
|
|
@ -47,14 +56,13 @@ |
|
|
|
<div class="project-progress"> |
|
|
|
<div class="project-progress-tip">处理进展</div> |
|
|
|
<el-timeline> |
|
|
|
<el-timeline-item |
|
|
|
v-for="(item, index) in timeLineList" |
|
|
|
:key="item.id" |
|
|
|
:color="item.type === 'init' ? 'red' : item.type === 'project' ? '#009688' : '#ffa546'"> |
|
|
|
<div :id="`content${index}`" style="line-height:25px; "> |
|
|
|
<div |
|
|
|
:style="{ marginBottom: '10px', width: '35px', height: '20px', fontSize: '12px', borderRadius: '4px', background: item.type === 'project' ? '#009688': item.type === 'issue' || item.type === 'issue-project' ? '#ffa546' : '', color: '#fff', textAlign: 'center', lineHeight: '20px'}" |
|
|
|
v-if="item.type !== 'init'"> |
|
|
|
<el-timeline-item v-for="(item, index) in timeLineList" |
|
|
|
:key="item.id" |
|
|
|
:color="item.type === 'init' ? 'red' : item.type === 'project' ? '#009688' : '#ffa546'"> |
|
|
|
<div :id="`content${index}`" |
|
|
|
style="line-height:25px; "> |
|
|
|
<div :style="{ marginBottom: '10px', width: '35px', height: '20px', fontSize: '12px', borderRadius: '4px', background: item.type === 'project' ? '#009688': item.type === 'issue' || item.type === 'issue-project' ? '#ffa546' : '', color: '#fff', textAlign: 'center', lineHeight: '20px'}" |
|
|
|
v-if="item.type !== 'init'"> |
|
|
|
{{item.type === 'project' ? '项目': item.type === 'issue' || item.type === 'issue-project' ? '议题' : ''}} |
|
|
|
</div> |
|
|
|
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">[{{item | formatState}}]</span> {{item.createdTime}}</div> |
|
|
|
@ -66,15 +74,17 @@ |
|
|
|
<div v-if="item.state !== 3"> |
|
|
|
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理部门:</span>{{item.handlerDept}}</div> |
|
|
|
</div> |
|
|
|
<div v-if="item.itemDeptDTOS && item.itemDeptDTOS.length > 0" style="width: 100%; display: flex;"> |
|
|
|
<div v-if="item.itemDeptDTOS && item.itemDeptDTOS.length > 0" |
|
|
|
style="width: 100%; display: flex;"> |
|
|
|
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">被吹哨部门:</span> </div> |
|
|
|
<div> |
|
|
|
<span v-for="(csDept, index1) in item.itemDeptDTOS" :key="index1"> |
|
|
|
{{ csDept.deptName }}<br/> |
|
|
|
</span> |
|
|
|
<span v-for="(csDept, index1) in item.itemDeptDTOS" |
|
|
|
:key="index1"> |
|
|
|
{{ csDept.deptName }}<br /> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理意见:</span> {{item.advice}}</div> |
|
|
|
<div><span style="font-weight: bold; color: rgb(96, 98, 102);">处理意见:</span> {{item.advice}}</div> |
|
|
|
<div style="display: flex;"> |
|
|
|
<el-image v-for="url in item.images" |
|
|
|
style="width: 60px; height: 60px; object-fit: cover; margin-right: 8px; border-radius: 2px;" |
|
|
|
@ -92,35 +102,53 @@ |
|
|
|
</div> |
|
|
|
<div class="handle-operation"> |
|
|
|
<div class="handle-operation-tip">处理操作</div> |
|
|
|
<el-form ref="dataForm" label-width="120px" label-position="right" style="width: 720px;" :model="dataForm" :rules="dataRule"> |
|
|
|
<el-form-item label="处理:" prop="handleCategory"> |
|
|
|
<el-select v-model="postDataForm.handleCategory" placeholder="请选择"> |
|
|
|
<el-option |
|
|
|
v-for="handleResultDTO in dataForm.handleResultDTOS" |
|
|
|
:key="handleResultDTO.processResult" |
|
|
|
:label="handleResultDTO.processName" |
|
|
|
:value="handleResultDTO.processResult"> |
|
|
|
<el-form ref="dataForm" |
|
|
|
label-width="120px" |
|
|
|
label-position="right" |
|
|
|
style="width: 720px;" |
|
|
|
:model="dataForm" |
|
|
|
:rules="dataRule"> |
|
|
|
<el-form-item label="处理:" |
|
|
|
prop="handleCategory"> |
|
|
|
<el-select v-model="postDataForm.handleCategory" |
|
|
|
placeholder="请选择"> |
|
|
|
<el-option v-for="handleResultDTO in dataForm.handleResultDTOS" |
|
|
|
:key="handleResultDTO.processResult" |
|
|
|
:label="handleResultDTO.processName" |
|
|
|
:value="handleResultDTO.processResult"> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="吹哨部门:" prop="deptResultDTOS" v-if="deptResultDTOSVisible"> |
|
|
|
<el-select v-model="deptResult" multiple placeholder="请选择"> |
|
|
|
<el-option |
|
|
|
v-for="item in dataForm.deptResultDTOS" |
|
|
|
:key="item.deptId" |
|
|
|
:label="item.deptName" |
|
|
|
:value="item.deptId"> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="回复居民意见:" prop="outHandleAdvice"> |
|
|
|
<el-input v-model="postDataForm.outHandleAdvice" type="textarea" placeholder="请您选择居民诉求的处理情况及答复意见,向居民公开展示"></el-input> |
|
|
|
<el-form-item label="吹哨部门:" |
|
|
|
prop="deptResultDTOS" |
|
|
|
v-if="deptResultDTOSVisible"> |
|
|
|
<el-select v-model="deptResult" |
|
|
|
multiple |
|
|
|
placeholder="请选择"> |
|
|
|
<el-option v-for="item in dataForm.deptResultDTOS" |
|
|
|
:key="item.deptId" |
|
|
|
:label="item.deptName" |
|
|
|
:value="item.deptId"> |
|
|
|
</el-option> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="回复居民意见:" |
|
|
|
prop="outHandleAdvice"> |
|
|
|
<el-input v-model="postDataForm.outHandleAdvice" |
|
|
|
type="textarea" |
|
|
|
placeholder="请您选择居民诉求的处理情况及答复意见,向居民公开展示"></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="项目处理意见:" prop="handleAdvice"> |
|
|
|
<el-input v-model="postDataForm.handleAdvice" type="textarea" placeholder="请您填写项目的实际办理情况(自己处理、吹哨报道、内部协调),便于相关部门了解项目的实际情况"></el-input> |
|
|
|
<el-form-item label="项目处理意见:" |
|
|
|
prop="handleAdvice"> |
|
|
|
<el-input v-model="postDataForm.handleAdvice" |
|
|
|
type="textarea" |
|
|
|
placeholder="请您填写项目的实际办理情况(自己处理、吹哨报道、内部协调),便于相关部门了解项目的实际情况"></el-input> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="满意度评价:" prop="evaluateDeptDTOS" v-if="evaluateDeptDTOSVisible"> |
|
|
|
<div v-for="(evaluateDeptDTO, index) in dataForm.evaluateDeptDTOS" :key="index"> |
|
|
|
<el-form-item label="满意度评价:" |
|
|
|
prop="evaluateDeptDTOS" |
|
|
|
v-if="evaluateDeptDTOSVisible"> |
|
|
|
<div v-for="(evaluateDeptDTO, index) in dataForm.evaluateDeptDTOS" |
|
|
|
:key="index"> |
|
|
|
<label>{{evaluateDeptDTO.deptName}}</label> |
|
|
|
<el-radio-group v-model="evaluateDeptDTO.evaluationLevel"> |
|
|
|
<el-radio :label="2">非常满意</el-radio> |
|
|
|
@ -130,35 +158,68 @@ |
|
|
|
</div> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item style="float: right;"> |
|
|
|
<el-button size="small" type="primary" :disabled="isAble" style="width: 95px" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|
|
|
<el-button size="small" style="width: 95px" @click="backToItemDeal">返回</el-button> |
|
|
|
</el-form-item> |
|
|
|
<el-button size="small" |
|
|
|
type="primary" |
|
|
|
:disabled="isAble" |
|
|
|
style="width: 95px" |
|
|
|
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|
|
|
<el-button size="small" |
|
|
|
style="width: 95px" |
|
|
|
@click="backToItemDeal">返回</el-button> |
|
|
|
</el-form-item> |
|
|
|
</el-form> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<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"> |
|
|
|
<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> |
|
|
|
<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 :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> |
|
|
|
@ -367,7 +428,7 @@ export default { |
|
|
|
this.dataForm.handleCategory = handleResultDTO.processResult |
|
|
|
} |
|
|
|
} |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => { }) |
|
|
|
}, |
|
|
|
deleteComment (val) { |
|
|
|
this.$http['post']('/events/item/deleteComment', { commentIds: [val] }).then(({ data: res }) => { |
|
|
|
@ -382,7 +443,7 @@ export default { |
|
|
|
this.getCommentList() |
|
|
|
} |
|
|
|
}) |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => { }) |
|
|
|
}, |
|
|
|
pageSizeChangeHandleNew (val) { |
|
|
|
this.pageIndex = 1 |
|
|
|
@ -394,7 +455,7 @@ export default { |
|
|
|
this.getCommentList() |
|
|
|
}, |
|
|
|
getCommentList () { |
|
|
|
this.$http.get('/events/item/comments', { params: { id: this.dataForm.id, order: this.order, orderField: this.orderField, page: this.pageIndex, limit: this.limitVal } |
|
|
|
this.$http.get('/events/item/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 = [] |
|
|
|
@ -403,7 +464,7 @@ export default { |
|
|
|
} |
|
|
|
this.commentsDTOs = res.data.list |
|
|
|
this.total = res.data.total |
|
|
|
}).catch(() => {}) |
|
|
|
}).catch(() => { }) |
|
|
|
}, |
|
|
|
// 表单提交 |
|
|
|
dataFormSubmitHandle: debounce(function () { |
|
|
|
@ -447,24 +508,24 @@ export default { |
|
|
|
} else { |
|
|
|
this.postDataForm.evaluateDeptDTOS = [] |
|
|
|
} |
|
|
|
this.isAble =true |
|
|
|
this.isAble = true |
|
|
|
this.$http['post']( |
|
|
|
'/events/item/itemHandleSubmit', this.postDataForm).then(({ data: res }) => { |
|
|
|
this.isAble =false |
|
|
|
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') |
|
|
|
this.isAble = false |
|
|
|
if (res.code !== 0) { |
|
|
|
return this.$message.error(res.msg) |
|
|
|
} |
|
|
|
}) |
|
|
|
this.$parent.selectComponent = 'ItemDeal' |
|
|
|
}).catch(() => {}) |
|
|
|
this.$message({ |
|
|
|
message: this.$t('prompt.success'), |
|
|
|
type: 'success', |
|
|
|
duration: 500, |
|
|
|
onClose: () => { |
|
|
|
this.visible = false |
|
|
|
this.$emit('refreshDataList') |
|
|
|
} |
|
|
|
}) |
|
|
|
this.$parent.selectComponent = 'ItemDeal' |
|
|
|
}).catch(() => { }) |
|
|
|
}, 1000, { 'leading': true, 'trailing': false }) |
|
|
|
|
|
|
|
} |
|
|
|
@ -472,21 +533,21 @@ export default { |
|
|
|
</script> |
|
|
|
|
|
|
|
<style lang="scss"> |
|
|
|
.project-handle { |
|
|
|
.el-timeline { |
|
|
|
padding-left: 9px; |
|
|
|
font-size: 13px; |
|
|
|
} |
|
|
|
.el-textarea { |
|
|
|
width: 600px !important; |
|
|
|
} |
|
|
|
.el-input { |
|
|
|
width: 600px !important; |
|
|
|
} |
|
|
|
.project-handle { |
|
|
|
.el-timeline { |
|
|
|
padding-left: 9px; |
|
|
|
font-size: 13px; |
|
|
|
} |
|
|
|
.el-textarea { |
|
|
|
width: 600px !important; |
|
|
|
} |
|
|
|
.el-form-item__label { |
|
|
|
font-weight: bold; |
|
|
|
.el-input { |
|
|
|
width: 600px !important; |
|
|
|
} |
|
|
|
} |
|
|
|
.el-form-item__label { |
|
|
|
font-weight: bold; |
|
|
|
} |
|
|
|
</style> |
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
@ -503,25 +564,25 @@ export default { |
|
|
|
box-sizing: border-box; |
|
|
|
padding: 10px; |
|
|
|
padding-top: 20px; |
|
|
|
float:left; |
|
|
|
float: left; |
|
|
|
margin-bottom: 1%; |
|
|
|
position:relative; |
|
|
|
position: relative; |
|
|
|
.project-detail-tip { |
|
|
|
position: absolute; |
|
|
|
top: 0; |
|
|
|
left:0; |
|
|
|
left: 0; |
|
|
|
width: 80px; |
|
|
|
height: 30px; |
|
|
|
line-height: 30px; |
|
|
|
color: #ffffff; |
|
|
|
background: #4ac38b; |
|
|
|
text-align:center; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
.el-form { |
|
|
|
width: 58%; |
|
|
|
height: 100%; |
|
|
|
float:left; |
|
|
|
overflow-y:auto; |
|
|
|
float: left; |
|
|
|
overflow-y: auto; |
|
|
|
&::-webkit-scrollbar { |
|
|
|
width: 5px; |
|
|
|
height: 1px; |
|
|
|
@ -557,18 +618,18 @@ export default { |
|
|
|
box-sizing: border-box; |
|
|
|
margin-left: 1%; |
|
|
|
padding-top: 40px; |
|
|
|
overflow-y:auto; |
|
|
|
overflow-y: auto; |
|
|
|
position: relative; |
|
|
|
.project-progress-tip { |
|
|
|
position: absolute; |
|
|
|
top: 0; |
|
|
|
left:0; |
|
|
|
left: 0; |
|
|
|
width: 80px; |
|
|
|
height: 30px; |
|
|
|
line-height: 30px; |
|
|
|
color: #ffffff; |
|
|
|
background: #0098ff; |
|
|
|
text-align:center; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
&::-webkit-scrollbar { |
|
|
|
width: 5px; |
|
|
|
@ -590,7 +651,7 @@ export default { |
|
|
|
height: 49%; |
|
|
|
box-sizing: border-box; |
|
|
|
border: 2px solid #ccc; |
|
|
|
float:left; |
|
|
|
float: left; |
|
|
|
overflow-y: auto; |
|
|
|
position: relative; |
|
|
|
&::-webkit-scrollbar { |
|
|
|
@ -608,13 +669,13 @@ export default { |
|
|
|
.handle-operation-tip { |
|
|
|
position: absolute; |
|
|
|
top: 0; |
|
|
|
left:0; |
|
|
|
left: 0; |
|
|
|
width: 80px; |
|
|
|
height: 30px; |
|
|
|
line-height: 30px; |
|
|
|
color: #ffffff; |
|
|
|
background: #ff7600; |
|
|
|
text-align:center; |
|
|
|
text-align: center; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|