<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>