You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							387 lines
						
					
					
						
							13 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							387 lines
						
					
					
						
							13 KiB
						
					
					
				
								<template>
							 | 
						|
								    <div class="project-handle">
							 | 
						|
								            <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.eventContent}}</div>
							 | 
						|
								                        <el-image v-for="url in dataForm.imageArray"
							 | 
						|
								                                  style="width: 100px; height: 100px; margin-right: 10px"
							 | 
						|
								                                  :key="url"
							 | 
						|
								                                  :src="url"
							 | 
						|
								                                  :preview-src-list="previewImgList"
							 | 
						|
								                                  @click="clickImg(url)">
							 | 
						|
								                        </el-image>
							 | 
						|
								                        <div v-if="dataForm.voice">
							 | 
						|
								                            <audio controls style="height: 30px;">
							 | 
						|
								                                <source :src="dataForm.voice" >
							 | 
						|
								                            </audio>
							 | 
						|
								                        </div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item label="所属网格:" prop="ownGrid">
							 | 
						|
								                        <div>{{dataForm.allDeptNames}}</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item v-if="dataForm.groupName && dataForm.groupName.length > 0" label="议题来源:" prop="ownGrid">
							 | 
						|
								                        <div>{{dataForm.groupName}}</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item v-if="!dataForm.groupName || dataForm.groupName.length == 0" label="议题来源:" prop="ownGrid">
							 | 
						|
								                        <div>党群议事</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item label="上报时间:" prop="createdTime">
							 | 
						|
								                        <div>{{dataForm.createdTime}}</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item label="上报人:" prop="nickName">
							 | 
						|
								                        <div>{{dataForm.nickName}}</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                    <el-form-item label="电话:" prop="mobile">
							 | 
						|
								                        <div>{{dataForm.mobile}}</div>
							 | 
						|
								                    </el-form-item>
							 | 
						|
								                </el-form>
							 | 
						|
								                <div class="container">
							 | 
						|
								                    <div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.address}}</div>
							 | 
						|
								                    <div id="map"></div>
							 | 
						|
								                </div>
							 | 
						|
								            </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="handlerDeptIdRule">
							 | 
						|
								                  <el-cascader
							 | 
						|
								                    ref="name"
							 | 
						|
								                    v-model="dataForm.handlerDeptIdRule"
							 | 
						|
								                    :options="options"
							 | 
						|
								                    :props="{ multiple: false, checkStrictly: true }"
							 | 
						|
								                    @change="changeHandle"
							 | 
						|
								                    clearable
							 | 
						|
								                  >
							 | 
						|
								                  </el-cascader>
							 | 
						|
								                </el-form-item>
							 | 
						|
								                <el-form-item label="审核:" prop="eventState">
							 | 
						|
								                    <el-radio v-model="dataForm.eventState" label="4">审核通过</el-radio>
							 | 
						|
								                    <el-radio v-model="dataForm.eventState" label="2">驳回</el-radio>
							 | 
						|
								                </el-form-item>
							 | 
						|
								                <el-form-item label="议题所属类别:" prop="categoryId" v-if="categoryVisible">
							 | 
						|
								                  <div class="block">
							 | 
						|
								                    <el-cascader v-model="categoryIds" placeholder="试试搜索:城市管理" :props="{ checkStrictly: true }" :options="categoryOptions" filterable></el-cascader>
							 | 
						|
								                  </div>
							 | 
						|
								                </el-form-item>
							 | 
						|
								                <el-form-item label="处理意见:" prop="advice">
							 | 
						|
								                    <el-input :rows="4" v-model="dataForm.advice" type="textarea"   maxlength="500"
							 | 
						|
								                      placeholder="请您填写居民诉求的处理情况及答复意见,向居民公开展示,500字以内"></el-input>
							 | 
						|
								                </el-form-item>
							 | 
						|
								                <el-form-item style="float: right;">
							 | 
						|
								                    <el-button size="small" style="width: 95px" type="primary" :disabled="isAble" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
							 | 
						|
								                    <el-button size="small" style="width: 95px" @click="backToItemDeal">{{ '返回' }}</el-button>
							 | 
						|
								                </el-form-item>
							 | 
						|
								              </el-form>
							 | 
						|
								            </div>
							 | 
						|
								    </div>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script>
							 | 
						|
								import debounce from 'lodash/debounce'
							 | 
						|
								import BMap from 'BMap'
							 | 
						|
								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 {
							 | 
						|
								  name: 'IssueReviewDetailView',
							 | 
						|
								  data () {
							 | 
						|
								    return {
							 | 
						|
								      map: '',
							 | 
						|
								      dataForm: {
							 | 
						|
								        id: '',
							 | 
						|
								        eventContent: '',
							 | 
						|
								        nickName: '',
							 | 
						|
								        categoryId: '',
							 | 
						|
								        advice: '',
							 | 
						|
								        handlerDeptIdRule: '',
							 | 
						|
								        eventState: '4',
							 | 
						|
								        handlerDept: '',
							 | 
						|
								        handlerDeptId: '',
							 | 
						|
								        voice: ''
							 | 
						|
								      },
							 | 
						|
								      isAble: false,
							 | 
						|
								      categoryIds: [],
							 | 
						|
								      previewImgList: [],
							 | 
						|
								      categoryVisible: true,
							 | 
						|
								      urls: [],
							 | 
						|
								      categoryOptions: [],
							 | 
						|
								      options: []
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  mounted () {
							 | 
						|
								    this.dataForm.id = this.$route.query.id
							 | 
						|
								    this.getOptions()
							 | 
						|
								    this.init()
							 | 
						|
								  },
							 | 
						|
								  computed: {
							 | 
						|
								    dataRule () {
							 | 
						|
								      return {
							 | 
						|
								        categoryId: [
							 | 
						|
								          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
							 | 
						|
								        ],
							 | 
						|
								        eventState: [
							 | 
						|
								          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
							 | 
						|
								        ],
							 | 
						|
								        advice: [
							 | 
						|
								          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
							 | 
						|
								        ],
							 | 
						|
								        handlerDeptIdRule: [
							 | 
						|
								          { required: true, message: this.$t('validate.required'), trigger: 'blur' }
							 | 
						|
								        ]
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  watch: {
							 | 
						|
								    'dataForm.eventState': function (val) {
							 | 
						|
								      if (val === '2') {
							 | 
						|
								        this.categoryVisible = false
							 | 
						|
								      } else {
							 | 
						|
								        this.categoryVisible = true
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  methods: {
							 | 
						|
								    backToItemDeal () {
							 | 
						|
								      this.$parent.selectComponent = 'IssueReviewList'
							 | 
						|
								    },
							 | 
						|
								    init () {
							 | 
						|
								      this.isAble = false
							 | 
						|
								      this.$nextTick(() => {
							 | 
						|
								        if (this.dataForm.id) {
							 | 
						|
								          this.getInfo()
							 | 
						|
								          this.getCategoryList()
							 | 
						|
								        }
							 | 
						|
								      })
							 | 
						|
								    },
							 | 
						|
								    getOptions () {
							 | 
						|
								      this.$http
							 | 
						|
								        .get(`/sys/user/deptOptions/getDeptAuthByUser`)
							 | 
						|
								        .then(({ data: res }) => {
							 | 
						|
								          if (res.code !== 0) {
							 | 
						|
								            return this.$message.error(res.msg)
							 | 
						|
								          }
							 | 
						|
								          this.options = res.data.options
							 | 
						|
								        })
							 | 
						|
								        .catch(() => {})
							 | 
						|
								    },
							 | 
						|
								    changeHandle (value, selectedData) {
							 | 
						|
								      this.dataForm.handlerDept = this.$refs['name'].getCheckedNodes()[0].label
							 | 
						|
								      this.dataForm.handlerDeptId = this.$refs['name'].getCheckedNodes()[0].value
							 | 
						|
								    },
							 | 
						|
								    getCategoryList () {
							 | 
						|
								      return this.$http.get('/events/category/list').then(({ data: res }) => {
							 | 
						|
								        if (res.code !== 0) {
							 | 
						|
								          return this.$message.error(res.msg)
							 | 
						|
								        }
							 | 
						|
								        var data = res.data
							 | 
						|
								        this.getSelectedNode(data, data)
							 | 
						|
								        this.categoryOptions = data
							 | 
						|
								      }).catch(() => { })
							 | 
						|
								    },
							 | 
						|
								    getSelectedNode (nodeData, parent) {
							 | 
						|
								      nodeData.forEach(item => {
							 | 
						|
								        if ('children' in item && item.children.length === 0) {
							 | 
						|
								          delete item.children
							 | 
						|
								        } else if ('children' in item && item.children.length) {
							 | 
						|
								          this.getSelectedNode(item.children, item)
							 | 
						|
								        }
							 | 
						|
								      })
							 | 
						|
								    },
							 | 
						|
								    initBmap (latitude, longitude) {
							 | 
						|
								      this.map = new BMap.Map('map')
							 | 
						|
								      const point = new BMap.Point(longitude, latitude)
							 | 
						|
								      var marker = new BMap.Marker(point)
							 | 
						|
								      this.map.addOverlay(marker)
							 | 
						|
								      this.map.centerAndZoom(point, 13)
							 | 
						|
								      this.map.enableScrollWheelZoom(true)
							 | 
						|
								    },
							 | 
						|
								    clickImg (url) {
							 | 
						|
								      this.previewImgList = []
							 | 
						|
								      this.previewImgList.push(url)
							 | 
						|
								    },
							 | 
						|
								    // 获取信息
							 | 
						|
								    getInfo () {
							 | 
						|
								      this.$http.get(`/events/epdcevents/${this.dataForm.id}`).then(({ data: res }) => {
							 | 
						|
								        if (res.code !== 0) {
							 | 
						|
								          return this.$message.error(res.msg)
							 | 
						|
								        }
							 | 
						|
								        this.dataForm = {
							 | 
						|
								          ...this.dataForm,
							 | 
						|
								          ...res.data
							 | 
						|
								        }
							 | 
						|
								        this.initBmap(this.dataForm.issueLatitude, this.dataForm.issueLongitude)
							 | 
						|
								        this.urls = res.data.imageArray
							 | 
						|
								      }).catch(() => {})
							 | 
						|
								    },
							 | 
						|
								    // 表单提交
							 | 
						|
								    dataFormSubmitHandle: debounce(function () {
							 | 
						|
								      this.dataForm.categoryId = this.categoryIds[this.categoryIds.length - 1]
							 | 
						|
								      console.log(this.dataForm)
							 | 
						|
								      this.$refs['dataForm'].validate((valid) => {
							 | 
						|
								        if (!valid) {
							 | 
						|
								          return false
							 | 
						|
								        }
							 | 
						|
								        if (this.dataForm.advice.length > 500) {
							 | 
						|
								          return this.$message.error('处理意见不超过500字')
							 | 
						|
								        }
							 | 
						|
								        this.isAble = true
							 | 
						|
								        this.$http['post']('/events/epdcevents/review', this.dataForm).then(({ data: res }) => {
							 | 
						|
								          if (res.code !== 0) {
							 | 
						|
								            this.isAble = false
							 | 
						|
								            return this.$message.error(res.msg)
							 | 
						|
								          }
							 | 
						|
								          this.$message({
							 | 
						|
								            message: this.$t('prompt.success'),
							 | 
						|
								            type: 'success',
							 | 
						|
								            duration: 500,
							 | 
						|
								            onClose: () => {
							 | 
						|
								              this.visible = false
							 | 
						|
								              this.$parent.selectComponent = 'IssueReviewList'
							 | 
						|
								              this.$emit('refreshDataList')
							 | 
						|
								            }
							 | 
						|
								          })
							 | 
						|
								        }).catch(() => {})
							 | 
						|
								      })
							 | 
						|
								    }, 1000, { 'leading': true, 'trailing': false })
							 | 
						|
								  }
							 | 
						|
								}
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style lang="scss">
							 | 
						|
								    .project-handle {
							 | 
						|
								        .el-timeline {
							 | 
						|
								            padding-left: 9px;
							 | 
						|
								            font-size: 13px;
							 | 
						|
								        }
							 | 
						|
								        .el-textarea {
							 | 
						|
								          width: 600px !important;
							 | 
						|
								        }
							 | 
						|
								        .el-input {
							 | 
						|
								          width: 600px !important;
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								    .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: 49%;
							 | 
						|
								            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: #ccc;
							 | 
						|
								                }
							 | 
						|
								                &::-webkit-scrollbar-track {
							 | 
						|
								                    border-radius: 10px;
							 | 
						|
								                    background: #fff;
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								            .container {
							 | 
						|
								                width: 40%;
							 | 
						|
								                height: 100%;
							 | 
						|
								                float: right;
							 | 
						|
								                .location {
							 | 
						|
								                    height: 30px;
							 | 
						|
								                    line-height: 30px;
							 | 
						|
								                }
							 | 
						|
								                #map {
							 | 
						|
								                    width: 100%;
							 | 
						|
								                    height: calc(100% - 30px);
							 | 
						|
								                }
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								        .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 {
							 | 
						|
								          padding-top: 30px;
							 | 
						|
								          box-sizing: border-box;
							 | 
						|
								          width: 100%;
							 | 
						|
								          height: 49%;
							 | 
						|
								          box-sizing: border-box;
							 | 
						|
								          border: 2px solid #ccc;
							 | 
						|
								          float:left;
							 | 
						|
								          position: relative;
							 | 
						|
								          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-tip {
							 | 
						|
								            position: absolute;
							 | 
						|
								            top: 0;
							 | 
						|
								            left:0;
							 | 
						|
								            width: 80px;
							 | 
						|
								            height: 30px;
							 | 
						|
								            line-height: 30px;
							 | 
						|
								            color: #ffffff;
							 | 
						|
								            background: #ff7600;
							 | 
						|
								            text-align:center;
							 | 
						|
								          }
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								</style>
							 | 
						|
								
							 |