Newer
Older
dcms_front / src / views / caseCommon / caseDetailSupervise.vue
<!--案卷详情 督办-->
<template>
  <app-container>
    <div class="detail-title">
      <div class="table-title">
        <div class="title-header"><i class="el-icon-menu"/>案卷详情</div>
        <div class="edit_btns">
          <el-button class="edit_btn" size="small" @click="dialogVisible = true">查看地图</el-button>
        </div>
      </div>
    </div>
    <div class="detail-block">
      <el-form ref="caseform" class="form" size="small" label-width="90px">
        <div class="detail-row">
          <div class="detail-item">
            <el-form-item label="案卷编号">
              <table-cell-read :text="caseDetail.caseid"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="信息来源">
              <table-cell-read :text="caseDetail.sourceName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="举报人/电话">
              <table-cell-read :text="caseDetail.reporterName+'/'+caseDetail.reporterPhone"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="上报人员">
              <table-cell-read :text="caseDetail.createUserName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="案卷类别">
              <table-cell-read :text="caseDetail.eorcName"/>
            </el-form-item>
          </div>
        </div>
        <div class="detail-row">

          <div class="detail-item">
            <el-form-item label="案卷大类">
              <table-cell-read :text="caseDetail.casetypeName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="案卷小类">
              <table-cell-read :text="caseDetail.casetypeDetailName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="案卷等级">
              <table-cell-read :text="caseDetail.caseLevelName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="所在区县">
              <table-cell-read :text="caseDetail.areaName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="所在乡镇">
              <table-cell-read :text="caseDetail.streetName"/>
            </el-form-item>
          </div>
        </div>
        <div class="detail-row">

          <div class="detail-item">
            <el-form-item label="所在社区">
              <table-cell-read :text="caseDetail.communityName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="登记时间">
              <table-cell-read :text="caseDetail.createTime"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="处理时限">
              <table-cell-read :text="caseDetail.bzhours+'小时'+caseDetail.bzminis+'分钟'"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item label="完成时限">
              <table-cell-read :text="caseDetail.nodeLimittime"/>
            </el-form-item>
          </div>
          <div v-if="showNeedVisit==true" class="detail-item">
            <el-form-item label="是否回访">
              <table-cell-read :text="isNeedVisit"/>
            </el-form-item>
          </div>
        </div>

        <div v-if="caseDetail.shopkeeperName || caseDetail.shopPhone" class="detail-row">
          <div class="detail-item">
            <el-form-item v-if="caseDetail.shopkeeperName" label="商户名称">
              <table-cell-read :text="caseDetail.shopkeeperName"/>
            </el-form-item>
          </div>
          <div class="detail-item">
            <el-form-item v-if="caseDetail.shopPhone" label="商户电话">
              <table-cell-read :text="caseDetail.shopPhone"/>
            </el-form-item>
          </div>
        </div>

        <div class="detail-row">
          <div class="detail-item" style="width: 99%;display: block;">
            <el-form-item label="立案标准">
              <table-cell-read :text="caseDetail.casetypesTimeName"/>
            </el-form-item>
          </div>
        </div>
        <div class="detail-row">
          <div class="detail-item" style="width: 99%;display: block;">
            <el-form-item label="发生地点">
              <table-cell-read :text="caseDetail.fieldintro"/>
            </el-form-item>
          </div>
        </div>
        <div class="detail-row">
          <div class="detail-item" style="width: 99%;display: block;">
            <el-form-item label="案卷描述">
              <table-cell-read :text="caseDetail.description"/>
            </el-form-item>
          </div>
        </div>
      </el-form>
    </div>

    <div v-show="hasFile" class="detail-block">
      <div class="title">案卷附件
        <span v-if="!showFile" style="cursor: pointer" @click="funShowFile()"><i class="el-icon-arrow-right"/></span>
        <span v-if="showFile" style="cursor: pointer" @click="funHideFile()"><i class="el-icon-arrow-down"/></span>
      </div>
      <el-tabs v-show="showFile" type="border-card" class="image-container">
        <el-tab-pane v-if="showVerifyFile" label="案卷附件">
          <case-file
            :img-ids="caseDetail.fileIdVerify"
            :video-ids="caseDetail.videoIdVerify"
            :audio-ids="caseDetail.audioIdVerify"
          />
        </el-tab-pane>
        <el-tab-pane v-if="showProcessFile" label="处理附件">
          <case-file
            :img-ids="caseDetail.fileIdProcess"
            :video-ids="caseDetail.videoIdProcess"
            :audio-ids="caseDetail.audioIdProcess"
          />
        </el-tab-pane>
        <el-tab-pane v-if="showCheckFile" label="核查附件">
          <case-file
            :img-ids="caseDetail.fileIdCheck"
            :video-ids="caseDetail.videoIdCheck"
            :audio-ids="caseDetail.audioIdCheck"
          />
        </el-tab-pane>
      </el-tabs>
    </div>
    <!--数据流转记录-->
    <div class="detail-block" style="padding: 20px;">
      <el-table :data="recordList" :max-height="250" class="table" border>
        <el-table-column prop="operationTypeName" label="操作" align="center"/>
        <el-table-column prop="deptName" label="单位" align="center"/>
        <el-table-column prop="userName" label="人员" align="center"/>
        <el-table-column prop="time" label="时间" align="center"/>
        <el-table-column prop="remarks" label="意见" align="center"/>
      </el-table>
    </div>

    <!-- 案卷处理-->
    <div class="detail-block">
      <!--<div class="title">督办意见:</div>-->
      <div class="case-process">
        <el-form ref="superviseForm" v-model="superviseForm" class="form" label-width="90px" >
          <el-row>
            <el-form-item :label="title+'意见'">
              <el-input v-model="superviseForm.superviseRemarks" type="textarea" maxlength="50" show-word-limit/>
            </el-form-item>
          </el-row>
          <el-row>
            <el-form-item label="">
              <el-select v-model="commonLanguage" placeholder="请选择常用处理意见" clearable style="width: 400px;" @change="selectCommonLang">
                <el-option
                  v-for="item in commonLanguageList"
                  :key="item.value"
                  :label="item.name"
                  :value="item.name"
                />
              </el-select>
            </el-form-item>
          </el-row>
        </el-form>
      </div>
    </div>
    <el-row style="text-align: center;">
      <el-button type="primary" size="medium" icon="el-icon-check" style="width: 200px; margin: 20px" @click="submit"> 提交 </el-button>
    </el-row>

    <el-dialog
      :visible.sync="dialogVisible"
      :append-to-body="true"
      title="位置详情"
    >

      <leaflet-map-read :longitude="caseDetail.lng" :latitude="caseDetail.lat"/>
    </el-dialog>
  </app-container>
</template>

<script>
import 'element-ui/lib/theme-chalk/index.css'
import { getCaseDetail } from '@/api/coorBusiness/case'
import { getCommonLanguage } from '@/api/coorBusiness/dict'
import { historicalRecords } from '@/api/coorBusiness/process'
import { superviseCaseTask, urgeCaseTask } from '@/api/supervise/supervise'
import LeafletMapRead from '@/components/Map/leafletMapRead'
import CaseFile from '@/components/caseCommon/caseFile'

export default {
  name: 'CaseDetail',
  components: { LeafletMapRead, CaseFile },
  data() {
    return {
      id: '',
      imgurl: process.env.BASE_API + '/static/',
      showNeedVisit: false,
      caseDetail: {},
      operationKey: '', // 案件处理按钮key
      fileIdVerify: [], // 核实照片id
      fileIdProcess: [], // 处理照片id
      fileIdCheck: [], // 核查照片id
      recordList: [], // 流转记录列表
      superviseForm: { // 督办案卷表单
        id: '', // 流程实例ID
        superviseRemarks: '' // 审批意见
      },
      processId: '', // 处理流程id
      commonLanguage: '', // 常用语
      commonLanguageList: [], // 常用语列表
      processRadioList: [], // 案件处理单选按钮
      processCompShow: '', // 案卷处理组件显示
      processCompObj: {}, // 案卷处理组件相关对象
      dialogVisible: false,
      type: 'supervise',
      showFile: false
    }
  },
  computed: {
    isNeedVisit: function() {
      return this.caseDetail.isNeedRevisit === 1 ? '需要回访' : '不需要回访'
    },
    // 是否显示案卷图片
    showImage: function() {
      if (this.fileIdVerify.length === 0 && this.fileIdProcess.length === 0 && this.fileIdCheck.length === 0) {
        return false
      } else {
        return true
      }
    },
    imgList() {
      return this.fileIdVerify.concat(this.fileIdProcess).concat(this.fileIdCheck)
    },
    title() {
      return this.type === 'supervise' ? '督办' : '催办'
    },
    showVerifyFile() {
      return this.caseDetail.fileIdVerify || this.caseDetail.audioIdVerify || this.caseDetail.videoIdVerify
    },
    showProcessFile() {
      return this.caseDetail.fileIdProcess || this.caseDetail.videoIdProcess || this.caseDetail.audioIdProcess
    },
    showCheckFile() {
      return this.caseDetail.fileIdCheck || this.caseDetail.videoIdCheck || this.caseDetail.audioIdCheck
    },
    hasFile() {
      return this.showVerifyFile || this.showProcessFile || this.showCheckFile
    }
  },
  mounted() {
    this.id = this.$route.params.id
    if (this.$route.query.type) {
      this.type = this.$route.query.type
    }
    this.initData()
  },
  methods: {
    async initData() {
      // 查询案件详情接口
      const resDetail = await getCaseDetail(this.id)
      console.log('detail', resDetail)
      this.caseDetail = resDetail.data[0]

      // 解析图片id
      const imgUrl = process.env.BASE_API + '/static/'
      if (this.caseDetail.fileIdVerify) {
        this.fileIdVerify = this.caseDetail.fileIdVerify.split(',')
        this.fileIdVerify = this.fileIdVerify.map(item => imgUrl + item)
      }
      if (this.caseDetail.fileIdProcess) {
        this.fileIdProcess = this.caseDetail.fileIdProcess.split(',')
        this.fileIdProcess = this.fileIdProcess.map(item => imgUrl + item)
      }
      if (this.caseDetail.fileIdCheck) {
        this.fileIdCheck = this.caseDetail.fileIdCheck.split(',')
        this.fileIdCheck = this.fileIdCheck.map(item => imgUrl + item)
      }

      // 查询常用语列表
      const languageRes = await getCommonLanguage()
      this.commonLanguageList = languageRes.data

      // 查询流转记录接口
      this.superviseForm.id = this.id
      this.processId = this.caseDetail.processId
      const resRecord = await historicalRecords(this.processId)
      this.recordList = resRecord.data
      console.log(this.recordList)
    },
    /**
     * 选择常用语,更新审核意见
     */
    selectCommonLang(value) {
      this.superviseForm.superviseRemarks = value
    },
    submit() {
      const superviseForm = this.superviseForm
      this.$confirm('确定提交案件处理吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        console.log('doing submit')
        // 点击“确定”后的操作
        if (this.type === 'supervise') {
          this.submitSupervise(superviseForm)
        } else {
          this.submitUrge(superviseForm)
        }
      }).catch(() => {
        // 点击“取消”后的操作
      })
    },
    submitSupervise(form) {
      console.log('submitSupervise')
      superviseCaseTask(form).then(response => {
        if (response.code === 200) {
          this.$message.success('提交成功')
          // this.$emit('submitProcess', this.caseDetail.caseid)
        } else {
          this.$message.error('提交失败')
        }
      })
    },
    submitUrge(form) {
      console.log('submitUrge', urgeForm)
      // todo
      const urgeForm = {
        id: form.id,
        urgeRemarks: form.superviseRemarks
      }
      urgeCaseTask(urgeForm).then(response => {
        if (response.code === 200) {
          this.$message.success('提交成功')
          // this.$emit('submitProcess', this.caseDetail.caseid)
        } else {
          this.$message.error('提交失败')
        }
      })
    },
    funShowFile() {
      this.showFile = true
    },
    funHideFile() {
      this.showFile = false
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
  .detail-block {
    border-top: 12px solid #ebebeb;
    padding: 10px;
  }
  .detail-row {
    display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
    display: -webkit-box;   /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
    display: -moz-box;      /* 老版本语法: Firefox (buggy) */
    display: -ms-flexbox;   /* 混合版本语法: IE 10 */
    display: flex;          /* 新版本语法: Opera 12.1, Firefox 22+ */
  }
  .detail-item {
    display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
    display: -webkit-box;   /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
    display: -moz-box;      /* 老版本语法: Firefox (buggy) */
    display: -ms-flexbox;   /* 混合版本语法: IE 10 */
    display: flex;          /* 新版本语法: Opera 12.1, Firefox 22+ */
    width: 20%;
  }

  $tableTitleHeight:46px;
  .table-title{
    position: relative;
    height: 46px;
    background-color:#fff;
    .title-header{
      position: absolute;
      left: 15px;
      top: 50%;
      transform: translateY(-50%);
      font-size: 15px;
      i{
        margin-left: 10px;
        margin-right: 5px;
      }
      i:focus{
        outline: none;
      }
    }
  }
  .edit_btns{
    float:right;
    .edit_btn{

      margin:7px 10px;//为了需要居中显示margin-top和bottom要用$tableTitleHeight减去按钮原高度除以2
    }
  }
  .title{
    font-size: 14px;
    font-weight: bold;
    margin: 10px;
    margin-left: 20px;
  }
  .button{
    margin-bottom: 30px;
  }

  .image-container {
    margin-left: 10px;
    margin-right: 10px;
    margin-bottom: 10px;
  }
  .el-image.image {
    width: 150px;
    height: 150px;
    margin-right: 20px;
  }
  /deep/ .gutter{
    background-color: #f3f3f3;
  }
  /deep/ .el-icon-circle-close{
    color: #e2e2e2
  }
</style>