<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;"> <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-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%;"> <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;"> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" style="width: 100%;"> <el-form-item label="工单类型:" prop="orderType" style="margin-bottom: 0px;"> <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" style="margin-bottom: 0px;"> <font>{{form.orderId}}</font> </el-form-item> <el-form-item label="工单名称:" prop="orderName" style="margin-bottom: 0px;"> <font>{{form.orderName}}</font> </el-form-item> <el-form-item label="工单状态:" prop="orderStatus" style="margin-bottom: 0px;"> <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" style="margin-bottom: 0px;"> <font>{{form.appointInspectorName}}</font> </el-form-item> <el-form-item label="工单描述:" prop="remarks" style="margin-bottom: 0px;"> <font>{{form.remarks}}</font> </el-form-item> </el-form> </el-col> <el-col :span="6"> <el-form ref="form" v-model="form" :rules="rules" style="width: 100%;"> <el-form-item label="设备类型:" prop="deviceType" v-if="form.orderType != 1" style="margin-bottom: 0px;"> <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" style="margin-bottom: 0px;"> <!-- <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" style="margin-bottom: 0px;"> <font>{{form.address}}</font> </el-form-item> <el-form-item label="工单进度:" v-if="form.orderType == 1" style="margin-bottom: 0px;"> <font>{{form.finishNum}}/{{form.deviceNum}}</font> </el-form-item> <el-form-item label="下发时间:" prop="allotTime" style="margin-bottom: 0px;"> <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 v-if="form.actualTime != '' && form.actualTime != null"> <el-divider></el-divider> <el-row> <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> <el-divider></el-divider> <!-- 反馈信息 --> <div style="width: 100%;font-weight: 600;" v-if="form.feedbackList != null"> <div style="color: #31EAEA;width: 100%;height: 40px;"> <ul><li>反馈信息</li></ul> </div> <div class="block" style="width: 95%;margin-left: 2%;"> <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: 90px;"></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: 90px;"></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: 90px;"></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)"> <!-- <el-button type="primary"> --> <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> <!-- </el-button> --> </div> </div> <!-- 归档 --> <div class="" style="width: 95%; height: 60px;margin-left: 50px;text-align: center;"> <el-button type="primary" size="normal" icon="el-icon-edit" @click="handleUpdate(form.orderId)" v-hasPermi="['workOrder:basicsInfo:edit']" v-if="form.orderStatus == 0" >修改</el-button> <el-button type="primary" size="normal" icon="el-icon-edit" @click="handleFinish(form.orderId)" v-hasPermi="['workOrder:basicsInfo:editStatus']" v-if="form.orderStatus == 2" >归档</el-button> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <div v-if="this.title == '工单信息修改'"> <el-form-item label="工单名称" prop="orderName"> <el-input v-model="form.orderName" placeholder="请输入工单名称" /> </el-form-item> <el-form-item label="指定执行人员" prop="appointInspector"> <el-select v-model="form.appointInspector" placeholder="请选择执行人员" clearable size="small" @change="setUserId"> <el-option v-for="item in inspector" :key="item.userId" :label="item.nickName" :value="item.userId" ></el-option> </el-select> </el-form-item> <el-form-item label="工单描述" prop="remarks"> <el-input v-model="form.remarks" type="textarea" placeholder="请输入工单描述" /> </el-form-item> </div> <div v-if="this.title == '工单信息归档'"> <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="archiving"> <el-input v-model="form.archiving" type="textarea" placeholder="请输入归档信息" /> </el-form-item> </div> </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 { deviceTree } from "@/api/device/deviceInfo"; import gaodeMap from "utils/gaodeMap.js"; import {map, DEVICE_TYPE} from "utils/gaodeMap.js"; import { inspectorList } from "@/api/system/user"; export default { name: "BasicsInfo", components: { }, data() { return { 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("石家庄"); 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; listBasicsInfo(this.queryParams).then(response => { this.basicsInfoList = response.rows; this.total = response.total; this.loading = false; }); }, getBasicsInfo (){ getBasicsInfo(this.orderId).then(response =>{ this.form = response.data; this.active = parseInt(response.data.orderStatus) + 1; if(this.form.deviceInfoList.length>0){ console.log("this.form.deviceInfoList",this.form.deviceInfoList) 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); } 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; }); } }); }, // 筛选节点 // filterNode(value, data) { // if (!value) return true; // return data.label.indexOf(value) !== -1; // }, // 节点单击事件 handleNodeClick(data) { }, setUserId(val){ this.form.appointInspector = val; }, // 取消按钮 cancel() { this.open = false; // this.reset(); }, // 表单重置 reset() { this.form = { orderId: null, orderType: null, orderName: null, orderStatus: "0", createTime: null, appointInspector: null, allotTime: null, actualInspector: null, actualTime: null, remarks: null }; this.resetForm("form"); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map(item => item.orderId) this.single = selection.length!==1 this.multiple = !selection.length }, /** 新增按钮操作 */ handleAdd() { this.reset(); this.open = true; this.title = "添加工单基础信息"; }, /** 归档按钮操作 */ handleFinish(res) { // this.reset(); getBasicsInfo(res).then(response => { this.form = response.data; this.open = true; this.title = "工单信息归档"; }); }, /** 修改按钮操作 */ handleUpdate(res) { // this.reset(); this.getInspectorList(); getBasicsInfo(this.orderId).then(response => { this.form = response.data; this.open = true; this.title = "工单信息修改"; }); }, /** 提交按钮 */ submitForm() { this.$refs["form"].validate(valid => { if (valid) { if (this.form.orderStatus == '0') { updateBasicsInfo(this.form).then(response => { this.msgSuccess("修改成功"); this.open = false; location.reload(); }); } else if(this.form.orderStatus == '2'){ updateOrderStatus(this.form).then(response => { this.msgSuccess("操作成功"); this.open = false; location.reload(); }); } } }); }, /** 删除按钮操作 */ handleDelete(row) { const orderIds = row.orderId || this.ids; this.$confirm('是否确认删除工单基础信息编号为"' + orderIds + '"的数据项?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(function() { return delBasicsInfo(orderIds); }).then(() => { this.getList(); this.msgSuccess("删除成功"); }).catch(() => {}); }, /** 导出按钮操作 */ handleExport() { const queryParams = this.queryParams; this.$confirm('是否确认导出所有工单基础信息数据项?', "警告", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning" }).then(() => { this.exportLoading = true; return exportBasicsInfo(queryParams); }).then(response => { this.download(response.msg); this.exportLoading = false; }).catch(() => {}); } } } </script> <style> .el-tree-node__content{ width: 150px; } .el-divider--horizontal { display: block; height: 1px; width: 100%; margin: 20px 0; } .feedbackTime-div{ float: left;margin-left: 150px;margin-top: 10px; } .feedbackTime{ height: 120px; width: 120px; float: left; margin-left: 15px; margin-top: 5px; margin-bottom: 15px; display: flex; justify-content: center; align-items: center; } .el-card__body { padding: 5px 20px 20px 20px; } .el-tree{ margin-top: 5px; margin-left: 70px; } .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>