Newer
Older
smartwell_front_yizhuang / src / views / jobManage / detailJob.vue
StephanieGitHub on 8 Jul 2020 11 KB 亦庄迁移
<template>
  <div class="job-form">
    <el-form v-loading="loading" ref="dataForm" :label-position="labelPosition" :model="jobForm" label-width="120px">
      <el-row :gutter="20">
        <el-col :span="9">
          <el-form-item label="工单编号">
            <el-input v-model="jobForm.jobCode" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
        <el-col :span="9" :offset="3">
          <el-form-item label="窨井编号">
            <el-input v-model="jobForm.wellCode" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="9">
          <el-form-item label="设备编号">
            <el-input v-model="jobForm.devcode" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
        <el-col :span="9" :offset="3">
          <el-form-item label="详细地址">
            <el-input v-model="jobForm.position" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="9">
          <el-form-item label="告警类型">
            <el-input v-model="jobForm.alarmTypeName" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
        <el-col :span="9" :offset="3">
          <el-form-item label="告警内容">
            <el-input v-model="jobForm.alarmContentName" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="9">
          <el-form-item label="告警详情">
            <el-input v-model="jobForm.alarmMessage" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
        <el-col :span="9" :offset="3">
          <el-form-item label="处理状态">
            <el-input v-model="jobForm.jobStatusName" type="text" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row v-if="jobForm.firstState" :gutter="20">
        <el-col :span="20">
          <el-form-item label="现场情况">
            <el-input v-model="jobForm.firstState" :rows="3" type="textarea" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row v-if="firstImageList.length>0" :gutter="20">
        <el-col :span="20">
          <el-form-item label="现场图片">
            <el-image
              v-for="firstImage in firstImageList"
              :key="firstImage"
              :src="firstImage"
              :preview-src-list="firstImageList"
              fit="fill"
              style="width:150px;height: 150px;border-radius: 5px; margin-right:10px;"/>
              <!--<el-dialog :visible.sync="dialogVisible" title="图片预览" append-to-body>-->
              <!--<div class="imgBox">-->
              <!--<img :src="dialogImageUrl" max-height="400px;" alt="" style="margin: 0 auto;">-->
              <!--</div>-->
              <!--</el-dialog>-->
          </el-form-item>
        </el-col>
      </el-row>
      <el-row v-if="jobForm.handleMessage" :gutter="20">
        <el-col :span="20">
          <el-form-item label="维护情况">
            <el-input v-model="jobForm.handleMessage" :rows="3" type="textarea" placeholder="未知" disabled/>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row v-if="handleImageList.length>0">
        <el-col :span="24">
          <el-form-item label="维护图片">
            <el-image
              v-for="handleImage in handleImageList"
              :key="handleImage"
              :src="handleImage"
              :preview-src-list="firstImageList"
              fit="fill"
              style="width:150px;height: 150px;border-radius: 5px; margin-right:10px;"/>

              <!--<el-dialog :visible.sync="dialogVisible" title="图片预览" append-to-body>-->
              <!--<div class="imgBox">-->
              <!--<img :src="dialogImageUrl" alt="" style="margin:0 auto; max-height: 400px; max-width: 700px">-->
              <!--</div>-->
              <!--</el-dialog>-->
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="14">
          <div>
            <div class="table-label">
              工单动态
            </div>
            <div class="table-content">
              <el-timeline>
                <el-timeline-item
                  v-for="(activity, index) in activities"
                  :key="index"
                  :timestamp="activity.time"
                  color="#0bbd87">
                  {{ activity.name }}
                </el-timeline-item>
              </el-timeline>
            </div>
            <div class="clear-float"/>
          </div>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>

<script>
import { getJobInfo } from '@/api/job'
import { compareCalendar } from '@/utils/string'

export default {
  name: 'DetailJob',
  data() {
    return {
      dialogFormVisible: false, // 对话框是否显示
      dialogStatus: '', // 对话框类型:create,update
      jobForm: {
        jobCode: '', // 工单编号
        wellCode: '', // 窨井编号
        devcode: '', // 设备编号
        position: '', // 详细地址
        coordinateX: '',
        coordinateY: '',
        latBaidu: '',
        lngBaidu: '',
        latGaode: '',
        lngGaode: '',
        alarmType: '',
        alarmTypeName: '', // 告警类型
        alarmContentName: '', // 报警内容
        alarmMessage: '', // 告警详情
        jobStatusName: '', // 工单处理状态
        firstState: '', // 现场情况描述
        firstStatePhotos: '', // 现场情况图片
        handleMessage: '', // 维护情况描述
        handleStatePhotos: '', // 维护图片
        getJobPerson: '', // 接单人员名称
        getJobTime: '', // 接单时间
        confirmJobPerson: '', // 确认人员名称
        confirmJobTime: '', // 确认时间
        handleJobPerson: '', // 完成人员名称
        handleJobTime: '', // 完成时间
        flow: '' // 工单流转记录
      }, // 表单
      deptProps: {
        parent: 'pid',
        value: 'id',
        label: 'name',
        children: 'children'
      },
      activeStep: 0,
      activities: [], // 工单记录
      hideUpload: true,
      firstImageList: [], // 现场图片列表
      handleImageList: [], // 处理图片列表
      dialogImageUrl: '', // 图片预览路径
      dialogVisible: false, // 图片预览框是否显示
      labelPosition: 'right', // labe对齐方式
      mapShow: false, // 是否显示地图
      loading: true
    }
  },
  created() {
    const jobId = this.$route.query.jobId
    if (jobId) {
      this.getJobInfo(jobId)
    } else {
      this.$message.error('参数加载错误')
    }
  },
  activated() {
    const jobId = this.$route.query.jobId
    if (jobId) {
      this.getJobInfo(jobId)
    } else {
      this.$message.error('参数加载错误')
    }
  },
  methods: {
    // 初始化对话框
    initDialog: function(jobId) {
      this.getJobInfo(jobId)
    },
    // 获取工单详情
    getJobInfo: function(jobId) {
      this.loading = true
      const base_url = process.env.BASE_API + '/static/'
      getJobInfo(jobId).then(response => {
        this.loading = false
        if (response.code === 200) {
          if (response.data.length <= 0) {
            return
          }
          const job = response.data[0]
          this.jobForm = job
          // 处理现场图片
          if (job.firstStatePhotos !== '') {
            this.firstImageList = []
            const urls = job.firstStatePhotos.split(';')
            for (const url of urls) {
              if (url) {
                // this.firstImageList.push({ name: url, url: base_url + url })
                this.firstImageList.push(base_url + url)
              }
            }
          } else {
            this.firstImageList = []
          }
          // 处理维护图片
          if (job.handlePhotos.length !== '') {
            this.handleImageList = []
            const urls = job.handlePhotos.split(';')
            for (const url of urls) {
              if (url) {
                // this.handleImageList.push({ name: url, url: base_url + url })
                this.handleImageList.push(base_url + url)
              }
            }
          } else {
            this.handleImageList = []
          }
          // 处理工单动态
          // 若有getJobTime有值,表示有人接单
          const activities = []
          const jobForm = job
          if (jobForm.createTime && jobForm.createTime !== '0000-00-00 00:00:00') {
            activities.push({ time: jobForm.createTime, name: '创建工单', num: 1 })
          }
          if (jobForm.getJobTime && jobForm.getJobTime !== '0000-00-00 00:00:00') {
            let getName = jobForm.getJobPerson ? jobForm.getJobPerson : '系统'
            getName = getName + '接单'
            activities.push({ time: jobForm.getJobTime, name: getName, num: 2 })
          }
          if (jobForm.confirmJobTime && jobForm.confirmJobTime !== '0000-00-00 00:00:00') {
            let confirmName = jobForm.confirmJobPerson ? jobForm.confirmJobPerson : '系统'
            confirmName = confirmName + '确认工单'
            activities.push({ time: jobForm.confirmJobTime, name: confirmName, num: 3 })
          }
          if (jobForm.handleJobTime && jobForm.handleJobTime !== '0000-00-00 00:00:00') {
            if (jobForm.jobStatus === '4') {
              let handleName = jobForm.handleJobPerson ? jobForm.handleJobPerson : '系统'
              handleName = handleName + '取消工单'
              activities.push({ time: jobForm.handleJobTime, name: handleName, num: 4 })
            } else {
              let handleName = jobForm.handleJobPerson ? jobForm.handleJobPerson : '系统'
              handleName = handleName + '完成工单'
              activities.push({ time: jobForm.handleJobTime, name: handleName, num: 4 })
            }
          }
          if (jobForm.flow && jobForm.flow.length > 0) {
            for (const item of jobForm.flow) {
              const transName = item.from + '转单给' + item.to
              activities.push({ time: item.time, name: transName, num: 4 })
            }
          }
          if (activities.length > 1) {
            activities.sort((b, a) => {
              const cmp = compareCalendar(a.time, b.time)
              if (cmp === 0) {
                if (a.num > b.num) return -1
                else return 1
              } else {
                return compareCalendar(a.time, b.time)
              }
            })
          }
          this.activities = activities
        }
      })
    },
    // 图片预览
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url
      this.dialogVisible = true
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" >
  .job-form {
    margin:20px 20px;
    padding-bottom: 30px;
    .hide .el-upload--picture-card {
      display: none;
    }
    .main-form {
      margin: 20px 30px;
      padding: 10px;
    }
    .el-dialog {
      width: 700px
    }
    .el-select {
      width: 100%;
    }
    .line {
      width: 50px;
      margin-left: 5px;
    }
    .hide .el-upload-–picture-card {
      display: none;
    }
    .imgBox {
      width: 100%;
      text-align: center;
    }
    .el-step.is-horizontal .el-step__line{
      top:17px;
    }
    .table-label{
      width: 120px;
      float: left;
      text-align: right;
      font-size: 14px;
      font-weight: 700;
      color: #606266;
      line-height: 40px;
      padding: 0 12px 0 0;
      -webkit-box-sizing: border-box;
      box-sizing: border-box;
    }
    .table-content{
      float:left;
      padding-top: 15px;
    }
  }
</style>