<template> <div class="app-container detail" style="background-color: rgb(238, 241, 245);"> <!-- 工单信息 --> <div style="padding-top: 10px;background: #fff;height: 100%;"> <el-row> <el-col :span="24" style="padding-left: 15px;margin-bottom: -10px;"> <div style="height: 45px;" @click="$router.go(-1)"> <el-button size="medium" type="text" style="font-size: 18px; color: rgb(7, 63, 112);float: left;">返回 </el-button> <div style="float: left;margin-top: 8px;margin-left: 5px;"><img src="../../../assets/logo/fanhui.png" style="width: 25px;" alt=""></div> </div> </el-col> </el-row> <el-row style="width: 100%;height: 40px;"> <el-col :span="24"> <div style=""> <ul><li style="list-style: none;font-weight: 900;font-size: 20px;color: #053b6a;">工单反馈详情</li></ul> </div> </el-col> </el-row> <el-steps :active="active" finish-status="success" simple prop="orderStatus" style="margin-top: 5px"> <el-step title="未接收" ></el-step> <el-step title="已接收" ></el-step> <!-- <el-step title="进行中" ></el-step>--> <el-step title="已反馈" ></el-step> <el-step title="已归档" ></el-step> </el-steps> <el-divider></el-divider> <el-row style="width: 100%;margin-top: -15px;"> <el-col :span="24"> <div style="color: #31EAEA;height: 25px;"> <ul><li>详细信息</li></ul> </div> </el-col> </el-row> <el-row style="width: 100%;padding: 10px;padding-left: 40px;margin-bottom: -10px;"> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" label-width="100px" style="width: 100%;"> <el-form-item label="工单类型:" prop="orderType"> <font v-if="form.orderType == 1">巡检信息</font> <font v-if="form.orderType == 2">隐患信息</font> <font v-if="form.orderType == 3">报警信息</font> </el-form-item> <el-form-item label="工单编号:" prop="orderId"> <font>{{form.orderId}}</font> </el-form-item> <el-form-item label="工单名称:" prop="orderName"> <font>{{form.orderName}}</font> </el-form-item> <el-form-item label="工单状态:" prop="orderStatus"> <font v-if="form.orderStatus == 0">未接收</font> <font v-if="form.orderStatus == 1">已接收</font> <font v-if="form.orderStatus == 2">已反馈</font> <font v-if="form.orderStatus == 3">已归档</font> </el-form-item> <el-form-item label="指定执行人员:" prop="appointInspectorName"> <font>{{form.appointInspectorName}}</font> </el-form-item> <el-form-item label="工单描述:" prop="remarks" style="width: 170%;"> <font>{{form.remarks}}</font> </el-form-item> </el-form> </el-col> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" label-width="100px" style="width: 100%;"> <el-form-item label="设备类型:" prop="deviceType" v-if="form.orderType != 1"> <font v-if="form.deviceType == 0">管道</font> <font v-if="form.deviceType == 1">调压阀</font> <font v-if="form.deviceType == 2">阀门井</font> <font v-if="form.deviceType == 3">流量计</font> <font v-if="form.deviceType == 4">压力表</font> </el-form-item> <el-form-item label="设备名称:" prop="deviceName"> <font v-if="form.orderType != 1">{{form.deviceName}}</font> <el-tree :data="deviceOptions" :props="defaultProps" :expand-on-click-node="false" ref="tree" @node-click="handleNodeClick" v-if="form.orderType == 1" /> </el-form-item> <el-form-item label="设备位置:" v-if="form.orderType != 1"> <font>{{form.address}}</font> </el-form-item> <el-form-item label="工单进度:" v-if="form.orderType == 1"> <font>{{form.finishNum}}/{{form.deviceNum}}</font> </el-form-item> <el-form-item label="下发时间:" prop="allotTime"> <font>{{form.allotTime}}</font> </el-form-item> </el-form> </el-col> <el-col :span="12"> <div id="marbox" style="width: 100%;height: 250px;margin-top: -35px; border: 1px solid rgb(218, 213, 213);"> <div style="width: 100%;height: 100%" id="container"></div> </div> </el-col> </el-row> <!-- <div style="width: 100%;height: 265px;"> </div> --> <!-- 接单信息 --> <div v-if="form.actualTime != '' && form.actualTime != null"> <el-divider></el-divider> <el-row style="margin-top: -15px;"> <el-col :span="24"> <div style="color: #31EAEA;width: 100%;height: 40px;"> <ul><li>接单信息</li></ul> </div> </el-col> </el-row> <el-row> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" label-width="100px" style="height: 30px;width: 100%;"> <el-form-item label="接单人:" prop="actualInspectorName"> <font>{{form.actualInspectorName}}</font> </el-form-item> </el-form> </el-col> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" label-width="100px" style="height: 30px;width: 100%;"> <el-form-item label="接单时间:" prop="actualTime"> <font>{{form.actualTime}}</font> </el-form-item> </el-form> </el-col> </el-row> </div> <!-- 反馈信息 --> <div style="width: 100%;font-weight: 600;" v-if="form.feedbackList != null"> <el-divider></el-divider> <div style="color: #31EAEA;width: 100%;height: 40px;"> <ul><li>反馈信息</li></ul> </div> <div class="block" style="width: 95%;"> <el-timeline ref="timeline"> <el-timeline-item v-for="(activity, index) in form.feedbackList" v-show='index>1?false:true' :key="index" :timestamp="activity.feedbackTime"> <el-card> <el-row> <el-col :span="6"> <p>设备类型: <span v-if="activity.deviceType == 0">管道</span> <span v-if="activity.deviceType == 1">调压箱</span> <span v-if="activity.deviceType == 2">阀门井</span> <span v-if="activity.deviceType == 3">流量计</span> <span v-if="activity.deviceType == 4">压力表</span> </p> <p>是否有隐患: <span v-if="activity.isHiddenDanger == 1">是</span> <span v-if="activity.isHiddenDanger == 2">否</span> </p> <p v-if="activity.isHiddenDanger == 1">处理状态: <span v-if="activity.dealStatus == 1">不需要处理</span> <span v-if="activity.dealStatus == 2">已处理完成</span> <span v-if="activity.dealStatus == 3">未处理完成</span> </p> <div style="width: 600px;"> <p>反馈信息: <span>{{activity.contents}}</span> </p> </div> </el-col> <el-col :span="6"> <p>设备名称:{{activity.deviceName}}</p> <p>反馈时间:{{activity.feedbackTime}}</p> </el-col> <el-col :span="12"> <div class="feedbackTime-div"> <div class="feedbackTime"> <el-image :src="activity.pictureUrl1" :preview-src-list="[activity.pictureUrl1]" v-if="activity.pictureUrl1 != null && activity.pictureUrl1 != ''" style="width: 100%;"></el-image> </div> <div class="feedbackTime"> <el-image :src="activity.pictureUrl2" :preview-src-list="[activity.pictureUrl2]" v-if="activity.pictureUrl2 != null && activity.pictureUrl2 != ''" style="width: 100%;"></el-image> </div> <div class="feedbackTime"> <el-image :src="activity.pictureUrl3" :preview-src-list="[activity.pictureUrl3]" v-if="activity.pictureUrl3 != null && activity.pictureUrl3 != ''" style="width: 100%;"></el-image> </div> </div> </el-col> </el-row> </el-card> </el-timeline-item> </el-timeline> </div> <div style="width: 95%;position: relative;" @click="changeDisplay(scope)"> <i class="el-icon-arrow-down" v-if="isDisplay==false" style="margin-left: 100px;color: #909399;font-size: 14px;"> <span style="text-decoration:underline">显示全部</span> </i> <i class="el-icon-arrow-up" v-else style="color: #909399;font-size: 14px;margin-left: 100px;"> <span style="text-decoration:underline">收起</span> </i> </div> </div> <!-- 归档 --> <div class="" style="width: 95%;margin-left: 50px;text-align: center;margin-top: 10px;"> <el-button type="primary" size="normal" icon="el-icon-edit" style="margin-bottom: 15px;" @click="handleFeedback(form.orderId)" v-hasPermi="['workOrder:basicsInfo:editStatus']" v-if="form.orderStatus == 1 || form.orderStatus == 2" >反馈</el-button> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body @close="cancel"> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form-item label="工单名称" prop="orderName"> <font>{{form.orderName}}</font> </el-form-item> <el-form-item label="工单类型" prop="orderType"> <span type="primary" v-if="form.orderType == 1">巡检信息</span> <span type="primary" v-if="form.orderType == 2">隐患信息</span> <span type="primary" v-if="form.orderType == 3">报警信息</span> </el-form-item> <el-form-item label="工单编号" prop="orderId"> <font>{{form.orderId}}</font> </el-form-item> <el-form-item label="设备列表" prop="deviceCode" v-if="form.orderType == '1'"> <el-select v-model="form.deviceId" placeholder="请选择设备" filterable clearable size="small" filterable > <el-option v-for="device in form.deviceInfoList" :key="device.deviceId" :label="device.deviceName" :value="device.deviceId" ></el-option> </el-select> </el-form-item> <el-form-item label="反馈图片" prop="pictureUrl1"> <FileUpload listType="picture-card" @resFun="getFileInfo" @remove="listRemove" :fileArr="fileList" /> </el-form-item> <el-form-item label="是否存在隐患" prop="isHiddenDanger"> <el-switch v-model="isHiddenDanger" active-text="是" inactive-text="否"> </el-switch> </el-form-item> <el-form-item label="处理结果" prop="dealStatus" v-if="isHiddenDanger == true"> <el-radio-group v-model="form.dealStatus"> <el-radio :label="2">已处理完成</el-radio> <el-radio :label="3">未处理完成</el-radio> <el-radio :label="1">不需处理</el-radio> </el-radio-group> </el-form-item> <el-form-item label="反馈信息" prop="contents"> <el-input v-model="form.contents" type="textarea" placeholder="请输入反馈信息" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> </div> </div> </div> </template> <script> import { listBasicsInfo, getBasicsInfo, delBasicsInfo, addBasicsInfo, updateBasicsInfo, updateOrderStatus, exportBasicsInfo } from "@/api/workOrder/basicsInfo"; import { addFeedback } from "@/api/workOrder/feedback"; import FileUpload from '@/components/FileUpload'; import Cookie from 'js-cookie'; import { deviceTree } from "@/api/device/deviceInfo"; import c from "utils/gaodeMap.js"; import {map, DEVICE_TYPE} from "utils/gaodeMap.js"; import { inspectorList } from "@/api/system/user"; export default { name: "Feedback", components: { FileUpload, }, data() { return { fileList: [], isHiddenDanger: false, inspector: [], isDisplay:false, dialogImageUrl: '', dialogVisible: false, disabled: false, imageUrl: '', // 遮罩层 loading: true, // 导出遮罩层 exportLoading: false, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 工单基础信息表格数据 basicsInfoList: [], // feedbackList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, // 工单状态字典 typeOptions: [], pickerOptions:[], // 工单类型字典 ordertypeOptions: [], // 设备树选项 deviceOptions: [ { label: "设备列表", childList: [] } ], defaultProps: { children: "childList", label: "label" }, // 查询参数 queryParams: { pageNum: 1, pageSize: 10, orderType: null, orderName: null, orderStatus: null, appointInspector: null, allotTime: null, actualInspector: null, actualTime: null, remarks: null }, // 表单参数 form: {}, activity: {}, // 表单校验 rules: { }, active : 0, orderId : "", showAndHide : false }; }, created() { // 如果是跳转来的,则接受初始化参数 // this.user_id = this.$route.query.id; //详细信息页接收参数 this.orderId = this.$route.query.orderId; this.getList(); this.getDicts("t_order_status").then(response => { this.typeOptions = response.data; }); this.getDicts("t_order_type").then(response => { this.ordertypeOptions = response.data; }); this.getBasicsInfo(); }, mounted(){ let gaoMap = new gaodeMap(process.env.VUE_APP_MAP_CENTER); this.gaoMap = gaoMap; this.getBasicsInfo(); }, methods: { getInspectorList(){ this.loading = true; inspectorList().then(response => { this.inspector = response.data; this.loading = false; }); }, // 点击按钮显示隐藏 changeDisplay(e){ this.isDisplay = !this.isDisplay let $timeline = this.$refs.timeline; if(!this.showAndHide){ for(let i = 0; i< $timeline.$children.length; i++){ if(i>1){ $timeline.$children[i].$el.style.display = "block"; } } this.showAndHide = true; }else{ for(let i = 0; i< $timeline.$children.length; i++){ if(i>1){ $timeline.$children[i].$el.style.display = "none"; } } this.showAndHide = false; } //$timeline.toggleRowExpansion(row,true) }, handleRemove(file) { console.log(file); }, handlePictureCardPreview(file) { this.dialogImageUrl = file.url; this.dialogVisible = true; }, handleDownload(file) { console.log(file); }, /** 查询工单基础信息列表 */ getList() { this.loading = true; this.queryParams.userName = Cookie.get('username'); listBasicsInfo(this.queryParams).then(response => { this.basicsInfoList = response.rows; this.total = response.total; this.loading = false; }); }, getFileInfo(res){ this.fileIndex++; console.log(this.fileIndex,"index"); console.log(res,"res.url"); if(this.fileIndex == 1){ this.form.pictureUrl1 = res.url; } else if(this.fileIndex == 2){ this.form.pictureUrl2 = res.url; } else if(this.fileIndex == 3){ this.form.pictureUrl3 = res.url; } }, listRemove(e) { this.form.pictureUrl1 = ""; this.form.pictureUrl2 = ""; this.form.pictureUrl3 = ""; this.fileList = []; this.fileIndex = 0; }, getBasicsInfo (){ getBasicsInfo(this.orderId).then(response =>{ this.form = response.data; console.log(this.form) this.active = parseInt(response.data.orderStatus) + 1; if(this.form.deviceInfoList.length>0){ this.gaoMap.resetMapCenter([this.form.deviceInfoList[0].longitude,this.form.deviceInfoList[0].latitude]); for(var i = 0; i < this.form.deviceInfoList.length; i++){ let obj = this.form.deviceInfoList[i]; this.gaoMap.addMarker(DEVICE_TYPE.WORKORDER, obj); } } if(this.form.pipeList.length>0) { for (var i = 0; i < this.form.pipeList.length; i++) { let obj = this.form.pipeList[i]; this.gaoMap.onlyLine(obj); } } if(this.form.orderType == '1') { // 获取设备列表树 let data = { key1:this.form.deviceInfoList, key2:this.form.pipeList }; deviceTree(data).then(response => { this.deviceOptions[0].childList = response.data; }); } }); }, // 节点单击事件 handleNodeClick(data) { }, setUserId(val){ this.form.appointInspector = val; }, // 取消按钮 cancel() { this.open = false; // this.reset(); this.fileList = []; this.fileIndex = 0; }, // 表单重置 reset() { this.form = { orderId: null, orderType: null, orderName: null, orderStatus: "0", createTime: null, appointInspector: null, allotTime: null, actualInspector: null, actualTime: null, isHiddenDanger: null, remarks: null }; this.resetForm("form"); }, /** 反馈按钮操作 */ handleFeedback(orderId) { this.open = true; //const orderId = row.orderId || this.ids getBasicsInfo(orderId).then(response => { this.form = response.data; this.open = true; this.title = "工单反馈"; }); }, /** 提交按钮 */ submitForm() { if(this.isHiddenDanger == false){ this.form.isHiddenDanger = "2"; } else { this.form.isHiddenDanger = "1"; } this.$refs["form"].validate(valid => { if (valid) { if(this.form.orderStatus == '1' || this.form.orderStatus == '2'){ addFeedback(this.form).then(response => { this.msgSuccess("反馈成功"); this.open = false; location.reload(); }); } } }); }, } } </script> <style> .el-tree-node__content{ width: 150px; } .el-divider--horizontal { display: block; height: 1px; width: 100%; margin: 20px 0; } .feedbackTime-div{ width: 100%; float: left; margin-left: 150px; margin-top: 10px; } .feedbackTime{ width: 15%; float: left; margin-left: 15px; margin-top: 5px; margin-bottom: 5px; display: flex; justify-content: center; align-items: center; } .el-card__body { padding: 5px 20px 20px 20px; } .detail .el-form{ width: 20%; } .detail .el-form-item{ margin-bottom: 0px; } .el-tree{ margin-top: 5px; } .avatar-uploader{ width: 25%; float: left; } .avatar-uploader .el-upload { border: 1px dashed #d9d9d9; border-radius: 6px; cursor: pointer; position: relative; overflow: hidden; } .avatar-uploader .el-upload:hover { border-color: #409EFF; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; width: 178px; height: 178px; line-height: 178px; text-align: center; } .avatar { width: 178px; height: 178px; display: block; } li{ font-size: 15px; font-weight: 900; } </style>