You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1454 lines
59 KiB
1454 lines
59 KiB
<template> |
|
<basic-container style="max-height: 800px;overflow: hidden;"> |
|
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" ref="crud" v-model="form" |
|
:permission="permissionList" :before-open="beforeOpen" :before-close="beforeClose" |
|
@selection-change="selectionChange" @search-change="searchChange" @search-reset="searchReset" |
|
@current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"> |
|
<template slot-scope="scope" slot="menuLeft"> |
|
<el-button type="primary" size="small" @click="createTask">生成巡检任务</el-button> |
|
<el-button type="primary" size="small" @click="allExportReport">批量导出报告</el-button> |
|
</template> |
|
<template slot-scope="{ row }" slot="taskStatus"> |
|
<!-- role_id 运维主管 1839537055389515777 维修人员 1839552581620793346 实验室管理员 1846419477876510721--> |
|
<el-tag :type="getStatus('inspectionTask', userInfo.role_id, row.taskStatus).type">{{ |
|
getStatus('inspectionTask', userInfo.role_id, row.taskStatus).name }}</el-tag> |
|
</template> |
|
<template slot-scope="{ row }" slot="menu"> |
|
<el-button @click="handleView(row)" v-show="permission.taskView">查看</el-button> |
|
<el-button v-show="row.taskStatus == 0 && permission.taskAssign" @click="assignUser(row)">指派</el-button> |
|
<el-button v-show="permission.taskAccept && row.taskStatus == 1" @click="handleAccept(row)">接单</el-button> |
|
<el-button v-show="permission.taskPolling && row.taskStatus == 2" @click="handleInspection(row)">巡检</el-button> |
|
<el-button v-show="permission.taskConfirm && row.taskStatus == 3" @click="handleuserConfirm(row)">确认</el-button> |
|
<el-button v-show="row.taskStatus == 4" @click="handleExport(row)">报告</el-button> |
|
<!-- <el-button type="primary" @click="handleExportDevice(row)">导出</el-button> --> |
|
<!-- --> |
|
<!-- <el-button :disabled="row.taskStatus != 1" v-show="permission.inspection_btn" @click="handleInspection(row)">巡检</el-button> --> |
|
</template> |
|
</avue-crud> |
|
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" :append-to-body="true" width="70%"> |
|
<div style="height: 500px; overflow: auto"> |
|
<el-form ref="addForm" :model="addForm" :rules="addRules" label-width="120px" label-position="left"> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
基本信息 |
|
</div> |
|
<el-form-item label="单位名称" prop="deptName"> |
|
<el-input placeholder="请输入单位名称" v-model="addForm.deptName" disabled style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<!-- <el-form-item label="巡检项目名称" prop="inspectionName"> |
|
<el-input placeholder="请输入巡检项目名称" v-model="addForm.inspectionName" disabled style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<el-form-item label="项目地址" prop="projectAddr"> |
|
<el-input placeholder="请输入项目地址" v-model="addForm.projectAddr" disabled style="width: 98%;"></el-input> |
|
</el-form-item> --> |
|
</div> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检任务 |
|
</div> |
|
<el-form-item label="巡检主要内容" prop="taskContent"> |
|
<el-input placeholder="请输入巡检主要内容" type="textarea" disabled v-model="addForm.taskContent" |
|
style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<el-form-item label="楼层" prop="inspectionContent"> |
|
<div style="display: flex;"> |
|
<div v-for="item in floorArr" :key="item" @click="clickFloor(item)" |
|
style="padding: 0px 15px;border: 1px solid #bbbbbb; height: 30px;display: flex;align-items: center;justify-content: center;margin-right: 10px;border-radius: 3px;cursor: pointer;" |
|
:style="{ background: item == activeFloorName ? '#3a62d7' : '', color: item == activeFloorName ? '#fff' : '', borderColor: item == activeFloorName ? '#3a62d7' : '#bbb' }"> |
|
{{ item }} |
|
</div> |
|
</div> |
|
</el-form-item> |
|
<el-form-item label="房间" prop="inspectionContent"> |
|
<div style="display: flex;"> |
|
<div v-for="item in roomArr" :key="item" @click="clickRoom(item)" |
|
style="padding: 0px 15px;border: 1px solid #bbbbbb; height: 30px;display: flex;align-items: center;justify-content: center;margin-right: 10px;border-radius: 3px;cursor: pointer;" |
|
:style="{ background: item == activeRoom ? '#3a62d7' : '', color: item == activeRoom ? '#fff' : '', borderColor: item == activeRoom ? '#3a62d7' : '#bbb' }"> |
|
{{ item }} |
|
</div> |
|
</div> |
|
</el-form-item> |
|
<el-form-item label="巡检配置"> |
|
<el-table :data="tableData" border style="width: 98%"> |
|
<el-table-column prop="deviceId" align="center" label="专业名称"> |
|
<template slot-scope="scope"> |
|
<el-select placeholder="请选择设备" disabled v-model="scope.row.deviceId" |
|
@change="((val) => { changeDevice(val, scope.$index) })"> |
|
<el-option v-for="item in deviceList" :disabled="item.disabled" :key="item.id" :label="item.name" |
|
:value="item.id"></el-option> |
|
</el-select> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="checkContent" align="center" label="巡检内容"> |
|
<template slot-scope="scope"> |
|
<el-input placeholder="请输入巡检内容" v-model="scope.row.checkContent" disabled></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="craft" align="center" label="工艺要求"> |
|
<template slot-scope="scope"> |
|
<el-input placeholder="请输入工艺要求" v-model="scope.row.craft" disabled></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="period" align="center" label="巡检周期" v-if="addForm.taskStatus < 3"> |
|
<template slot-scope="scope"> |
|
<el-select placeholder="请选择巡检周期" v-model="scope.row.period" disabled> |
|
<el-option v-for="item in periodArr" :key="item.dictKey" :label="item.dictValue" |
|
:value="parseInt(item.dictKey)"></el-option> |
|
</el-select> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="startTime" align="center" label="开始时间" v-if="addForm.taskStatus < 3"> |
|
<template slot-scope="scope"> |
|
<el-date-picker style="width: 100%;" v-model="scope.row.startTime" type="date" placeholder="请选择开始时间" |
|
format="yyyy-MM-dd" value-format="yyyy-MM-dd" disabled> |
|
</el-date-picker> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="startTime" align="center" label="状态" v-if="addForm.taskStatus >= 3"> |
|
<template slot-scope="scope"> |
|
{{ scope.row.status == 0 ? '正常' : '异常' }} |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="startTime" align="center" label="现场照片" v-if="addForm.taskStatus >= 3"> |
|
<template slot-scope="scope" v-if="scope.row.picUrl != ''"> |
|
<img :src="scope.row.picUrl" alt="" style="width: 200px;height: 200px;"> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form-item> |
|
<el-form-item label="使用人签字" prop="signUrl" v-if="addForm.taskStatus >= 3"> |
|
<el-input placeholder="请输入使用人签字" v-model="addForm.signUrl" disabled style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<el-form-item label="备注" prop="remark" v-if="addForm.taskStatus >= 3"> |
|
<el-input placeholder="请输入备注" type="textarea" v-model="addForm.remark" disabled |
|
style="width: 98%;"></el-input> |
|
</el-form-item> |
|
</div> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
处理情况 |
|
</div> |
|
<el-form-item label="巡检人员" prop="servicemanId"> |
|
<el-select placeholder="请选择巡检人员" :disabled="addForm.taskStatus != 0 || dialogType == '查看'" |
|
v-model="addForm.servicemanId" style="width: 98%;"> |
|
<el-option v-for="item in repairPersonList" :key="item.id" :label="item.name" |
|
:value="item.id"></el-option> |
|
</el-select> |
|
</el-form-item> |
|
</div> |
|
<div v-show="addForm.taskStatus == 1"> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检配置 |
|
</div> |
|
<!-- <el-form-item label="任务开始时间" prop="taskStartTime"> |
|
<el-date-picker :disabled="dialogType == '查看'" format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 100%;" v-model="addForm.taskStartTime" type="date" placeholder="请选择任务开始时间"> |
|
</el-date-picker> |
|
</el-form-item> --> |
|
<el-form-item label="预约上门时间" prop="appointTime"> |
|
<el-date-picker :disabled="dialogType == '查看'" format="yyyy-MM-dd" value-format="yyyy-MM-dd" |
|
style="width: 98%;" v-model="addForm.appointTime" type="date" placeholder="请选择预约上门时间"> |
|
</el-date-picker> |
|
</el-form-item> |
|
</div> |
|
</el-form> |
|
</div> |
|
<span slot="footer" class="dialog-footer"> |
|
<el-button @click="handleClose">关 闭</el-button> |
|
<!-- <el-button v-show="dialogType != '查看'" @click="handleSave">保 存</el-button> --> |
|
<el-button v-show="dialogType != '查看'" type="primary" @click="handleConfirm">确 定</el-button> |
|
</span> |
|
</el-dialog> |
|
<el-dialog class="inspectionDialog" :title="dialogTitle" :visible.sync="dialogInspection" :append-to-body="true" |
|
width="70%"> |
|
<div style="height: 500px; overflow: auto"> |
|
<el-form ref="inspectionForm" :model="inspectionForm" :rules="inspectionRules" label-width="120px" |
|
label-position="left"> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
基本信息 |
|
</div> |
|
<el-form-item label="单位名称" prop="deptName"> |
|
<el-input placeholder="请输入单位名称" v-model="inspectionForm.deptName" disabled style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<!-- <el-form-item label="巡检项目名称" prop="inspectionName"> |
|
<el-input placeholder="请输入巡检项目名称" v-model="inspectionForm.inspectionName" readonly></el-input> |
|
</el-form-item> |
|
<el-form-item label="项目地址" prop="projectAddr"> |
|
<el-input placeholder="请输入项目地址" v-model="inspectionForm.projectAddr" readonly></el-input> |
|
</el-form-item> --> |
|
</div> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检配置 |
|
</div> |
|
<el-form-item label="巡检主要内容" prop="taskContent"> |
|
<el-input placeholder="请输入巡检主要内容" type="textarea" disabled v-model="inspectionForm.taskContent" |
|
style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<el-form-item label="任务开始时间" prop="taskStartTime"> |
|
<el-date-picker :disabled="dialogType == '查看' || dialogTitle == '巡检任务'" style="width: 98%;" |
|
v-model="inspectionForm.taskStartTime" type="date" placeholder="请选择任务开始时间"> |
|
</el-date-picker> |
|
</el-form-item> |
|
<el-form-item label="预约上门时间" prop="reservationTime"> |
|
<el-date-picker :disabled="dialogType == '查看' || dialogTitle == '巡检任务'" style="width: 98%;" |
|
v-model="inspectionForm.reservationTime" type="date" placeholder="请选择预约上门时间"> |
|
</el-date-picker> |
|
</el-form-item> |
|
</div> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检任务 |
|
</div> |
|
<el-form-item label="巡检楼层"> |
|
<div style="display: flex; width: 98%;"> |
|
<div v-for="item in floorArr" :key="item" @click="clickFloor(item)" |
|
style="padding: 0px 15px;border: 1px solid #bbbbbb; height: 30px;display: flex;align-items: center;justify-content: center;margin-right: 10px;border-radius: 3px;cursor: pointer;" |
|
:style="{ background: item == activeFloorName ? '#3a62d7' : '', color: item == activeFloorName ? '#fff' : '', borderColor: item == activeFloorName ? '#3a62d7' : '#bbb' }"> |
|
{{ item }} |
|
</div> |
|
</div> |
|
</el-form-item> |
|
<el-form-item label="巡检内容"> |
|
<div style="width: 98%;margin-bottom: 20px;display: flex;justify-content: space-between;"> |
|
<div style="display: flex;"> |
|
<el-input placeholder="请输入设备名称" v-model="deviceName" |
|
style="width: 200px;margin-right: 2%;"></el-input><el-button type="primary" |
|
@click="handleSearchDevice">搜索</el-button> |
|
</div> |
|
<!-- <div> |
|
<el-button type="primary" @click="handleExportDevice">导出</el-button> |
|
</div> --> |
|
</div> |
|
<el-table :row-key="getRowKeys" :span-method="objectSpanMethod" |
|
:data="inspectionForm.tableData && inspectionForm.tableData.filter(item => item.floorName == activeFloorName)" |
|
border style="width:98%"> |
|
<el-table-column prop="deptName" align="center" label="房间名称"></el-table-column> |
|
<el-table-column prop="deviceName" align="center" label="巡检设备"></el-table-column> |
|
<el-table-column prop="checkContent" align="center" label="巡检内容"></el-table-column> |
|
<el-table-column prop="status" align="center" label="状态"> |
|
<template slot-scope="scope"> |
|
<el-radio-group v-model="scope.row.status" fill="red"> |
|
<el-radio :label="0" :disabled="dialogTitle == '巡检确认'">正常</el-radio> |
|
<el-radio class="error_radio" :label="1" :disabled="dialogTitle == '巡检确认'">异常</el-radio> |
|
</el-radio-group> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="imgs" align="center" label="现场照片"> |
|
<template slot-scope="scope"> |
|
<el-upload list-type="picture-card" v-show="dialogTitle != '巡检确认'" :disabled="dialogTitle == '巡检确认'" |
|
class="upload-demo" action="/api/blade-resource/oss/endpoint/put-file" |
|
:on-success="handleSuccess(scope.row)" :on-remove="handleRemove(scope.row)" :headers="headers" |
|
:limit="1" :on-exceed="handleExceed" :file-list="scope.row.fileList"> |
|
<i class="el-icon-plus"></i> |
|
</el-upload> |
|
<img @click="clickImg(scope.row.picUrl)" style="width: 200px;height: 200px;cursor: pointer;" |
|
:src="scope.row.picUrl" alt="" v-show="dialogTitle == '巡检确认' && scope.row.picUrl != ''"> |
|
</template> |
|
</el-table-column> |
|
<!-- <el-table-column prop="signUrl" align="center" label="使用人签字"> |
|
<template slot-scope="scope"> |
|
<el-input placeholder="请输入使用人签字" v-model="scope.row.signUrl" :disabled="dialogTitle == '巡检确认'"></el-input> |
|
</template> |
|
</el-table-column> |
|
<el-table-column prop="remark" align="center" label="备注"> |
|
<template slot-scope="scope"> |
|
<el-input placeholder="请输入备注" type="textarea" v-model="scope.row.remark" :disabled="dialogTitle == '巡检确认'"></el-input> |
|
</template> |
|
</el-table-column> --> |
|
</el-table> |
|
</el-form-item> |
|
<el-form-item label="使用人签字" prop="signUrl"> |
|
<el-input placeholder="请输入使用人签字" v-model="inspectionForm.signUrl" :disabled="dialogTitle == '巡检确认'" |
|
style="width: 98%;"></el-input> |
|
</el-form-item> |
|
<el-form-item label="备注" prop="remark"> |
|
<el-input placeholder="请输入备注" type="textarea" v-model="inspectionForm.remark" |
|
:disabled="dialogTitle == '巡检确认'" style="width: 98%;"></el-input> |
|
</el-form-item> |
|
</div> |
|
<div v-show="inspectionForm.taskStatus == 3"> <!-- --> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检确认 |
|
</div> |
|
<el-form-item label="是否巡检完成"> |
|
<el-select v-model="inspectionForm.isOver" style="width: 98%;" placeholder="请选择是否巡检完成"> |
|
<el-option label="是" :value="1"></el-option> |
|
<el-option label="否" :value="0"></el-option> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item v-if="inspectionForm.isOver === 0" label="驳回意见"> |
|
<el-input type="textarea" v-model="inspectionForm.approveRemark" style="width: 98%;"></el-input> |
|
</el-form-item> |
|
</div> |
|
</el-form> |
|
</div> |
|
<span slot="footer" class="dialog-footer"> |
|
<el-button @click="handleCancel">取 消</el-button> |
|
<el-button type="primary" @click="handleConfirmInspection">提 交</el-button> |
|
</span> |
|
</el-dialog> |
|
<el-dialog title="巡检异常维修" :visible.sync="dialogerror" :append-to-body="true" width="70%"> |
|
<div style="height: 500px; overflow: auto"> |
|
<el-form ref="errorForm" :model="errorForm" :rules="addRules" label-width="120px" label-position="left"> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
基本信息 |
|
</div> |
|
<el-form-item label="单位名称" prop="deptName"> |
|
<el-input placeholder="请输入单位名称" v-model="errorForm.deptName"></el-input> |
|
</el-form-item> |
|
<!-- <el-form-item label="巡检项目名称" prop="inspectionName"> |
|
<el-input placeholder="请输入巡检项目名称" v-model="errorForm.inspectionName" readonly></el-input> |
|
</el-form-item> |
|
<el-form-item label="项目地址" prop="projectAddr"> |
|
<el-input placeholder="请输入项目地址" v-model="errorForm.projectAddr" readonly></el-input> |
|
</el-form-item> --> |
|
</div> |
|
<div> |
|
<div style=" |
|
color: #101010; |
|
font-size: 20px; |
|
font-weight: 550; |
|
margin-bottom: 20px; |
|
"> |
|
巡检异常清单 |
|
</div> |
|
<el-form-item label="异常清单"> |
|
<el-table :span-method="errorSpanMethod" :data="errorForm.tableData" border style="width: 100%"> |
|
<el-table-column label="楼层" prop="floorName"></el-table-column> |
|
<el-table-column label="房间名称" prop="roomName"></el-table-column> |
|
<el-table-column label="专业/设备" prop="majorName"></el-table-column> |
|
<el-table-column label="巡检内容" prop="inspectionContent"></el-table-column> |
|
<el-table-column label="状态" prop="status"> |
|
<template slot-scope="scope"> |
|
{{ scope.row.status == 1 ? '异常' : '正常' }} |
|
</template> |
|
</el-table-column> |
|
<el-table-column label="价格" prop="price"> |
|
<template slot-scope="scope"> |
|
<el-input placeholder="请输入价格" v-model="scope.row.price"></el-input> |
|
</template> |
|
</el-table-column> |
|
</el-table> |
|
</el-form-item> |
|
</div> |
|
</el-form> |
|
</div> |
|
<span slot="footer" class="dialog-footer"> |
|
<el-button @click="handleSaveError">保 存</el-button> |
|
<el-button type="primary" @click="handleConfirmError">提 交</el-button> |
|
</span> |
|
</el-dialog> |
|
<el-dialog title="图片查看" :visible.sync="dialogImage" :append-to-body="true" width="70%" @close="closeImg"> |
|
<img :src="imgUrl" alt=""> |
|
</el-dialog> |
|
<!-- <div id="pdfDom" style="padding:20px" v-if="routingFormShow"> |
|
<routing-inspection v-if="routingFormShow" :detailForm="routingForm" detailType="task"></routing-inspection> |
|
</div> --> |
|
</basic-container> |
|
</template> |
|
|
|
<script> |
|
import statusData from "@/assets/json/status.json"; // 引入状态数据 |
|
import website from '@/config/website'; |
|
import { getToken } from '@/util/auth'; |
|
import { getChildList } from '@/api/system/dictbiz' |
|
import { getDeepData } from '@/api/labManagement/inspectionManagement' |
|
import { getRepairPeople } from '@/api/operation/hand' |
|
import { |
|
getTaskPage, getDetail, taskSupervisorConfirm, taskServicemanReceive, updateTime, taskCreat, servicemanUpdateDetail, servicemanSubmit, |
|
customerConfirm, customerRefuse, updateSign, exportDevice |
|
} from '@/api/labManagement/task' |
|
import { mapGetters } from "vuex"; |
|
import { getDeviceList } from '@/api/device/device' |
|
import routingInspection from '@/views/components/routingInspection.vue' |
|
import { exportBlob1,zipDownload } from "@/api/common"; |
|
import { downloadXls } from "@/util/util"; |
|
|
|
export default { |
|
components: { |
|
routingInspection |
|
}, |
|
data() { |
|
return { |
|
deviceName: '', |
|
htmlTitle: '巡检报告', |
|
routingForm: {}, |
|
inspectionForm: { |
|
tableData: [ |
|
{ status: 0 } |
|
] |
|
}, |
|
dialogImage: false, |
|
imgUrl: '', |
|
periodArr: [], |
|
repairPersonList: [], |
|
deviceList: [], |
|
option: { |
|
selection: true, |
|
height: "auto", |
|
calcHeight: 30, |
|
tip: false, |
|
searchShow: true, |
|
searchMenuSpan: 6, |
|
border: true, |
|
index: true, |
|
dialogType: "dialog", |
|
dialogClickModal: false, |
|
addBtn: false, |
|
viewBtn: false, |
|
editBtn: false, |
|
delBtn: false, |
|
searchShowBtn: false, |
|
refreshBtn: false, |
|
columnBtn: false, |
|
menuWidth: 300, |
|
column: [ |
|
{ |
|
label: "任务单号", |
|
labelWidth: 120, |
|
prop: "taskCode", |
|
overHidden: true, |
|
}, |
|
{ |
|
label: "单位名称", |
|
labelWidth: 120, |
|
prop: "deptName", |
|
search: true, |
|
overHidden: true, |
|
}, |
|
// { |
|
// label: "巡检项目名称", |
|
// labelWidth: 120, |
|
// prop: "inspectionName", |
|
// overHidden: true, |
|
// }, |
|
// { |
|
// label: "项目地址", |
|
// labelWidth: 120, |
|
// prop: "projectAddr", |
|
// overHidden: true, |
|
// }, |
|
{ |
|
label: "巡检说明", |
|
labelWidth: 120, |
|
prop: "taskContent", |
|
overHidden: true, |
|
}, |
|
{ |
|
label: "计划开始时间", |
|
labelWidth: 120, |
|
prop: "startTime", |
|
overHidden: true, |
|
}, |
|
{ |
|
label: "状态", |
|
labelWidth: 120, |
|
prop: "taskStatus", |
|
slot: true, |
|
}, |
|
{ |
|
label: "客户预约时间", |
|
labelWidth: 120, |
|
prop: "reservationTime", |
|
}, |
|
{ |
|
label: '巡检完成时间', |
|
labelWidth: 120, |
|
prop: 'finishTime' |
|
} |
|
], |
|
}, |
|
headers: {}, |
|
data: [], |
|
page: { |
|
pageSize: 10, |
|
currentPage: 1, |
|
total: 0, |
|
}, |
|
dialogTitle: '设备新增', |
|
dialogType: '', |
|
dialogVisible: false, |
|
dialogInspection: false, |
|
floorArr: [], |
|
activeFloor: '001', |
|
activeFloorName: '', |
|
roomArr: [ |
|
{ name: '种子常规检测1', value: '001', checked: true }, |
|
{ name: 'PCR室', value: '002', checked: false }, |
|
], |
|
activeRoom: '001', |
|
activeRoomName: '', |
|
addForm: { |
|
|
|
}, |
|
addRules: { |
|
deviceNo: { required: true, message: '请输入设备编号', trigger: 'blur' }, |
|
deviceName: { required: true, message: '请输入设备名称', trigger: 'blur' }, |
|
deviceModel: { required: true, message: '请输入型号', trigger: 'blur' }, |
|
devicePosition: { required: true, message: '请输入设备位置', trigger: 'blur' }, |
|
deviceType: { required: true, message: '请选择设备类型', trigger: 'blur' }, |
|
supplier: { required: true, message: '请输入供应商', trigger: 'blur' }, |
|
productTime: { required: true, message: '请选择生产时间', trigger: 'blur' }, |
|
fileName: { required: true, message: '请输入附件名称', trigger: 'blur' }, |
|
}, |
|
typeList: [ |
|
{ label: '类型一', value: '001' }, |
|
{ label: '类型二', value: '002' }, |
|
{ label: '类型三', value: '003' }, |
|
], |
|
fileList: [], |
|
requestVisible: false, |
|
requestForm: {}, |
|
selectedList: [], |
|
dialogerror: false, //巡检异常弹窗 |
|
errorForm: {}, |
|
role_id: '', |
|
tableData: [], |
|
inspectionTable: [], |
|
routingFormShow: false |
|
} |
|
}, |
|
computed: { |
|
...mapGetters(["userInfo", "permission"]), |
|
getStatus() { |
|
return (type, id, status) => { |
|
let val |
|
statusData[type][id].map(item => { |
|
if (item.status == status) { |
|
val = item |
|
} |
|
}) |
|
return val |
|
} |
|
}, |
|
}, |
|
mounted() { |
|
this.headers = { |
|
"Authorization": `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`, |
|
'Blade-Auth': 'bearer ' + getToken(), |
|
'Blade-Requested-With': 'BladeHttpRequest' |
|
} |
|
getChildList(1, 100, '1858710780677984257').then(res => { |
|
this.periodArr = res.data.data |
|
}) |
|
getDeviceList({ current: 1, size: 100 }).then(res => { |
|
this.deviceList = res.data.data.records |
|
this.deviceList.forEach(item => { |
|
item.disabled = false |
|
}) |
|
}) |
|
console.log('persimmon-------------->', this.permission) |
|
this.role_id = this.userInfo.role_id |
|
console.log('role_id=======>', this.role_id) |
|
|
|
getRepairPeople().then(res => { |
|
this.repairPersonList = res.data.data |
|
// this.dialogVisible = true |
|
}) |
|
|
|
}, |
|
methods: { |
|
// 批量导出报告 |
|
allExportReport() { |
|
if (this.selectedList.length == 0) { |
|
this.$message.warning('请至少选择一条数据') |
|
} else { |
|
let tmp = this.selectedList.filter(item => { return item.taskStatus == 4 }) |
|
if (tmp.length != this.selectedList.length) { |
|
this.$message.warning('请选择状态为已完成的数据') |
|
} else { |
|
console.log('批量导出报告', this.selectedList) |
|
zipDownload('/api/lab-ops/maintenance/batch-maintenance-output-service', this.selectedList) |
|
.then((response) => { |
|
const blob = new Blob([response.data]) |
|
const fileName = '巡检报告.zip' |
|
if ('download' in document.createElement('a')) { // 非IE下载 |
|
const elink = document.createElement('a') |
|
elink.download = fileName |
|
elink.style.display = 'none' |
|
elink.href = URL.createObjectURL(blob) |
|
document.body.appendChild(elink) |
|
elink.click() |
|
URL.revokeObjectURL(elink.href)// 释放URL 对象 |
|
document.body.removeChild(elink) |
|
} else { // IE10+下载 |
|
navigator.msSaveBlob(blob, fileName) |
|
} |
|
}) |
|
.catch((err) => { |
|
console.log(err); |
|
}); |
|
|
|
} |
|
} |
|
}, |
|
// 搜索设备 |
|
handleSearchDevice() { |
|
this.inspectionForm.tableData = this.inspectionTable |
|
if (this.inspectionForm.tableData.length != 0) { |
|
let arr = this.inspectionForm.tableData && this.inspectionForm.tableData.filter(item => item.floorName == this.activeFloorName) |
|
let arr1 = arr.filter(item => item.deviceName.indexOf(this.deviceName) != -1) |
|
console.log('arr1', arr1) |
|
this.inspectionForm.tableData = arr1 |
|
this.$forceUpdate() |
|
} |
|
}, |
|
// 导出设备 |
|
handleExportDevice(row) { |
|
// exportBlob1(`/api/lab-ops/maintenance/task-detail-configuration`, { id: this.inspectionForm.id }).then(res => { |
|
// |
|
// }) |
|
let query = JSON.parse(JSON.stringify(row)) |
|
exportBlob1(`/api/lab-ops/maintenance/maintenance-plan-report`, query).then(res => { |
|
downloadXls(res.data, "巡检计划.xlsx"); |
|
}) |
|
getDetail({ id: row.id }).then(res => { |
|
|
|
|
|
// const header = ["deviceName", "address", "checkContent", "craft", "period", "remark"] |
|
// //展示的名称 |
|
// const headerDisplay = { deviceName: "专业", address: '点位', checkContent: "巡检内容", craft: '巡检工艺', period: '巡检频次', remark: '备注' }; |
|
|
|
// let data = [] |
|
// let data2 = [] |
|
// let oldData = this.checkDeepData(res.data.data.details) |
|
// oldData.forEach(item => { |
|
// data2.push([item.floorName, item.deptName, item.deviceName,1, item.checkContent, item.craft, this.periodArr.filter(v => v.dictKey == item.period)[0].dictValue, item.remark]) |
|
|
|
// data.push({ |
|
// deviceName: item.deviceName, |
|
// address: item.floorName + '/' + item.deptName, |
|
// checkContent: item.checkContent, |
|
// craft: item.craft, |
|
// period: this.periodArr.filter(v => v.dictKey == item.period)[0].dictValue, |
|
// remark: item.remark |
|
// }) |
|
// }) |
|
|
|
// let newData = [headerDisplay, ...data] |
|
|
|
// // 创建工作簿 |
|
// const ws = XLSX.utils.json_to_sheet(newData, { header: header, skipHeader: true }); |
|
|
|
|
|
// // 创建工作簿并添加工作表 |
|
// const wb = XLSX.utils.book_new(); |
|
// XLSX.utils.book_append_sheet(wb, ws, "点检任务"); |
|
|
|
// // 创建数据并写入sheet2 |
|
// const sheet2Data = [ |
|
// ["楼层", "房间", "设备名称", "数量", "维保内容及频次", "巡检工艺", "巡检频次", "备注"], |
|
// ]; |
|
// data2.forEach(i => { |
|
// sheet2Data.push(i) |
|
// }) |
|
// const sheet2 = XLSX.utils.aoa_to_sheet(sheet2Data); |
|
// XLSX.utils.book_append_sheet(wb, sheet2, res.data.data.deptName + '维保计划'); |
|
|
|
// // 生成Excel文件 |
|
// const wbout = XLSX.write(wb, { bookType: "xlsx", type: "binary" }); |
|
// // 字符串转ArrayBuffer |
|
// function s2ab(s) { |
|
// const buf = new ArrayBuffer(s.length); |
|
// const view = new Uint8Array(buf); |
|
// for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; |
|
// return buf; |
|
// } |
|
// downloadXls(new Blob([s2ab(wbout)]), res.data.data.deptName + "维保计划.xlsx"); |
|
// maintenance-plan-report |
|
}) |
|
}, |
|
// 点击图片 |
|
clickImg(url) { |
|
this.imgUrl = url |
|
this.dialogImage = true |
|
}, |
|
// 关闭图片 |
|
closeImg() { |
|
this.imgUrl = '' |
|
}, |
|
createTask() { |
|
taskCreat().then(res => { |
|
console.log('res =========>', res) |
|
}) |
|
}, |
|
objectSpanMethod({ row, column, rowIndex, columnIndex }) { |
|
// console.log('row--------------->',row) |
|
// console.log('column--------------->',column) |
|
// console.log('rowIndex--------------->',rowIndex) |
|
// console.log('columnIndex--------------->',columnIndex) |
|
const span = column['property'] + '-span' |
|
if (row[span]) { |
|
return row[span] |
|
} |
|
|
|
}, |
|
// * table合并行通用 */ |
|
mergeTableRow(data, val, merge) { |
|
if (!merge || merge.length === 0) { |
|
return data |
|
} |
|
console.log('merge==========>', merge) |
|
merge.forEach((m) => { |
|
const mList = {} |
|
data = data.map((v, index) => { |
|
console.log('v----------->', v) |
|
console.log('val=============>', val) |
|
if (v && v.floorName && v.floorName == val) { |
|
const rowVal = v[m] |
|
if (mList[rowVal] && mList[rowVal].newIndex === index) { |
|
mList[rowVal]['num']++ |
|
mList[rowVal]['newIndex']++ |
|
data[mList[rowVal]['index']][m + '-span'].rowspan++ |
|
v[m + '-span'] = { |
|
rowspan: 0, |
|
colspan: 0 |
|
} |
|
} else { |
|
mList[rowVal] = { num: 1, index: index, newIndex: index + 1 } |
|
v[m + '-span'] = { |
|
rowspan: 1, |
|
colspan: 1 |
|
} |
|
} |
|
return v |
|
} |
|
|
|
}) |
|
}) |
|
return data |
|
}, |
|
beforeOpen(done, type) { |
|
done(); |
|
}, |
|
beforeClose(done) { |
|
done(); |
|
}, |
|
searchReset(params, done) { |
|
// params.releaseTimeRange = dateFormat(new Date(), 'yyyy-MM-dd'); |
|
this.query = params; |
|
this.onLoad(this.page); |
|
}, |
|
searchChange(params, done) { |
|
this.query = params; |
|
this.page.currentPage = 1; |
|
this.onLoad(this.page, params); |
|
done(); |
|
}, |
|
addOperation(val) { |
|
console.log('val================>', val && val.deviceNo) |
|
if (val && val.deviceNo) { |
|
this.requestForm = { |
|
errPosition: val.devicePosition, |
|
deviceName: val.deviceName, |
|
errType: val.deviceType |
|
} |
|
this.requestVisible = true |
|
} else { |
|
this.requestVisible = true |
|
} |
|
}, |
|
clickFloor(val) { |
|
console.log('val----------->', val) |
|
this.inspectionForm.tableData = this.inspectionTable |
|
this.deviceName = '' |
|
// this.activeFloor = val.value |
|
this.activeFloorName = val |
|
let firstFloor = this.addForm.details.find(item => item.floorName == this.activeFloorName) |
|
this.roomArr = firstFloor.details.map(item => item.deptName) |
|
this.activeRoom = this.roomArr[0] |
|
let firstRoom = firstFloor.details.find(item => item.deptName == this.activeRoom) |
|
this.tableData = firstRoom.details |
|
}, |
|
clickRoom(val) { |
|
this.activeRoom = val |
|
let firstFloor = this.addForm.details.find(item => item.floorName == this.activeFloorName) |
|
let firstRoom = firstFloor.details.find(item => item.deptName == this.activeRoom) |
|
console.log('firstRoom', firstRoom) |
|
this.tableData = firstRoom.details |
|
|
|
}, |
|
closeRequest() { |
|
this.requestVisible = false |
|
}, |
|
selectionChange(list) { |
|
this.selectedList = list |
|
}, |
|
// 点击新增按钮 |
|
handleAdd() { |
|
if (this.selectedList.length != 1) { |
|
this.$message.warning('只能选择一条数据') |
|
} else { |
|
if (this.selectedList[0].status == 1) { |
|
this.$message.warning('请选择状态为待接单的数据') |
|
} else { |
|
this.dialogTitle = '巡检任务' |
|
this.dialogType = '接单' |
|
this.addForm = this.selectedList[0] |
|
this.dialogVisible = true |
|
} |
|
} |
|
}, |
|
handleView(row) { |
|
this.dialogTitle = '巡检任务' |
|
this.dialogType = '查看' |
|
// this.addForm = row |
|
this.fileList = [] |
|
getDetail({ id: row.id }).then(res => { |
|
this.addForm = res.data.data |
|
getRepairPeople({ isRepair: this.role_id == '1839537055389515777' ? true : false }).then(res => { |
|
this.repairPersonList = res.data.data |
|
}) |
|
// getDeepData({parentId:res.data.data.deptId}).then(result =>{ |
|
// this.floorArr = [] |
|
// result.data.data.map(item =>{ |
|
// this.floorArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// this.activeFloor = result.data.data[0].id |
|
// this.activeFloorName = result.data.data[0].deptName |
|
// getDeepData({parentId:this.activeFloor}).then(result1 =>{ |
|
// this.roomArr = [] |
|
// result1.data.data.map(item =>{ |
|
// this.roomArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// }) |
|
// this.activeRoom = result1.data.data[0].id |
|
// this.activeRoomName = result1.data.data[0].deptName |
|
// this.dialogVisible = true |
|
|
|
// }) |
|
// }) |
|
// console.log('floor=========>',this.floorArr) |
|
// console.log('details========>',res.data.data.details) |
|
// }) |
|
|
|
this.floorArr = this.addForm.details.map(item => item.floorName) |
|
this.activeFloorName = this.floorArr[0] |
|
let firstFloor = this.addForm.details.find(item => item.floorName == this.activeFloorName) |
|
this.roomArr = firstFloor.details.map(item => item.deptName) |
|
this.activeRoom = this.roomArr[0] |
|
let firstRoom = firstFloor.details.find(item => item.deptName == this.activeRoom) |
|
this.tableData = firstRoom.details |
|
this.dialogVisible = true |
|
this.addForm = { |
|
...res.data.data, |
|
inspectionData: res.data.data.details, |
|
servicemanId: res.data.data.servicemanId != -1 ? res.data.data.servicemanId : '' |
|
} |
|
}) |
|
}, |
|
assignUser(row) { |
|
this.dialogTitle = '审核并指派' |
|
this.dialogType = '审核并指派' |
|
this.addForm = row |
|
this.fileList = [] |
|
getRepairPeople({ isRepair: this.role_id == '1839537055389515777' ? true : false }).then(res => { |
|
this.repairPersonList = res.data.data |
|
// this.dialogVisible = true |
|
}) |
|
getDetail({ id: row.id }).then(res => { |
|
this.addForm = res.data.data |
|
// getDeepData({parentId:res.data.data.deptId}).then(result =>{ |
|
// this.floorArr = [] |
|
// result.data.data.map(item =>{ |
|
// this.floorArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// this.activeFloor = result.data.data[0].id |
|
// this.activeFloorName = result.data.data[0].deptName |
|
// getDeepData({parentId:this.activeFloor}).then(result1 =>{ |
|
// this.roomArr = [] |
|
// result1.data.data.map(item =>{ |
|
// this.roomArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// }) |
|
// this.activeRoom = result1.data.data[0].id |
|
// this.activeRoomName = result1.data.data[0].deptName |
|
// this.dialogVisible = true |
|
|
|
// }) |
|
// }) |
|
// console.log('floor=========>',this.floorArr) |
|
// console.log('details========>',res.data.data.details) |
|
// }) |
|
|
|
this.floorArr = this.addForm.details.map(item => item.floorName) |
|
this.activeFloorName = this.floorArr[0] |
|
let firstFloor = this.addForm.details.find(item => item.floorName == this.activeFloorName) |
|
this.roomArr = firstFloor.details.map(item => item.deptName) |
|
this.activeRoom = this.roomArr[0] |
|
let firstRoom = firstFloor.details.find(item => item.deptName == this.activeRoom) |
|
this.tableData = firstRoom.details |
|
this.dialogVisible = true |
|
|
|
this.addForm = { |
|
...res.data.data, |
|
inspectionData: res.data.data.details, |
|
servicemanId: res.data.data.servicemanId != -1 ? res.data.data.servicemanId : '' |
|
} |
|
}) |
|
|
|
}, |
|
handleAccept(row) { |
|
this.dialogTitle = '巡检任务' |
|
this.dialogType = '接单' |
|
// this.addForm = row |
|
this.fileList = [] |
|
// this.dialogVisible = true |
|
getRepairPeople({ isRepair: this.role_id == '1839537055389515777' ? true : false }).then(res => { |
|
this.repairPersonList = res.data.data |
|
// this.dialogVisible = true |
|
}) |
|
getDetail({ id: row.id }).then(res => { |
|
this.addForm = res.data.data |
|
// getDeepData({parentId:res.data.data.deptId}).then(result =>{ |
|
// this.floorArr = [] |
|
// result.data.data.map(item =>{ |
|
// this.floorArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// this.activeFloor = result.data.data[0].id |
|
// this.activeFloorName = result.data.data[0].deptName |
|
// getDeepData({parentId:this.activeFloor}).then(result1 =>{ |
|
// this.roomArr = [] |
|
// result1.data.data.map(item =>{ |
|
// this.roomArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// }) |
|
// this.activeRoom = result1.data.data[0].id |
|
// this.activeRoomName = result1.data.data[0].deptName |
|
// this.dialogVisible = true |
|
|
|
// }) |
|
// }) |
|
// console.log('floor=========>',this.floorArr) |
|
// console.log('details========>',res.data.data.details) |
|
// }) |
|
|
|
this.floorArr = this.addForm.details.map(item => item.floorName) |
|
this.activeFloorName = this.floorArr[0] |
|
let firstFloor = this.addForm.details.find(item => item.floorName == this.activeFloorName) |
|
this.roomArr = firstFloor.details.map(item => item.deptName) |
|
this.activeRoom = this.roomArr[0] |
|
let firstRoom = firstFloor.details.find(item => item.deptName == this.activeRoom) |
|
this.tableData = firstRoom.details |
|
this.dialogVisible = true |
|
this.addForm = { |
|
...res.data.data, |
|
inspectionData: res.data.data.details, |
|
} |
|
}) |
|
|
|
}, |
|
|
|
//用于回调的函数 |
|
checkData(data, list) { |
|
data.forEach((item) => { |
|
if (item.details && item.details.length > 0) { |
|
this.checkData(item.details, list); |
|
} else { |
|
list.push(item); |
|
} |
|
}); |
|
return list; |
|
}, |
|
//调用此函数 返回的就是最底层的数据 |
|
checkDeepData(data) { |
|
const list = []; |
|
return this.checkData(data, list); |
|
}, |
|
// 客户确认巡检计划 |
|
handleuserConfirm(row) { |
|
this.dialogTitle = '巡检确认' |
|
getDetail({ id: row.id }).then(res => { |
|
this.inspectionForm = res.data.data |
|
this.dialogInspection = true |
|
this.inspectionForm.tableData = this.checkDeepData(res.data.data.details) |
|
// getDeepData({parentId:res.data.data.deptId}).then(result =>{ |
|
// this.floorArr = [] |
|
// result.data.data.map(item =>{ |
|
// this.floorArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// this.activeFloor = result.data.data[0].id |
|
// this.activeFloorName = result.data.data[0].deptName |
|
// getDeepData({parentId:this.activeFloor}).then(result1 =>{ |
|
// this.roomArr = [] |
|
// result1.data.data.map(item =>{ |
|
// this.roomArr.push({ |
|
// value:item.id, |
|
// name:item.deptName, |
|
// checked:false |
|
// }) |
|
// }) |
|
// this.activeRoom = result1.data.data[0].id |
|
// this.activeRoomName = result1.data.data[0].deptName |
|
// }) |
|
// }) |
|
// console.log('floor=========>',this.floorArr) |
|
// console.log('details========>',res.data.data.details) |
|
// }) |
|
|
|
this.floorArr = this.inspectionForm.details.map(item => item.floorName) |
|
this.activeFloorName = this.floorArr[0] |
|
// this.inspectionForm.tableData = this.mergeTableRow(this.inspectionForm.tableData,this.activeFloorName,['deptName']) |
|
console.log('tableData------->', this.inspectionForm.tableData) |
|
}) |
|
}, |
|
// 导出 报告 |
|
handleExport(row) { |
|
|
|
getDetail({ id: row.id }).then(res => { |
|
this.routingForm = res.data.data |
|
this.routingForm.tableData = this.checkDeepData(res.data.data.details) |
|
this.routingForm.tableData.map(item => { |
|
item.price = item.price != -1 ? item.price : '' |
|
}) |
|
// this.routingFormShow = true |
|
let query = JSON.parse(JSON.stringify(row)) |
|
exportBlob1(`/api/lab-ops/maintenance/maintenance-output-service`, query).then(res => { |
|
downloadXls(res.data, "巡检报告.xlsx"); |
|
}) |
|
// setTimeout(() => { |
|
// this.getPdf() |
|
// }, 100) |
|
}) |
|
}, |
|
handleInspection(row) { |
|
this.dialogTitle = '巡检任务' |
|
this.inspectionRules = { |
|
signUrl: { required: true, message: '请输入签名', trigger: 'blur' } |
|
} |
|
getDetail({ id: row.id }).then(res => { |
|
this.inspectionForm = res.data.data |
|
this.dialogInspection = true |
|
this.inspectionForm.tableData = this.checkDeepData(res.data.data.details) |
|
this.inspectionTable = JSON.parse(JSON.stringify(this.inspectionForm.tableData)) |
|
this.inspectionForm.tableData.map(item => { |
|
if (item.picUrl != '') { |
|
item.fileList = [{ name: '巡检图片.png', link: item.picUrl }] |
|
} |
|
}) |
|
this.floorArr = this.inspectionForm.details.map(item => item.floorName) |
|
this.activeFloorName = this.floorArr[0] |
|
|
|
console.log('activeFloorName==========>', this.activeFloorName) |
|
console.log('tableData------->', this.inspectionForm.tableData) |
|
}) |
|
}, |
|
// 点击编辑按钮 |
|
handleEdit(row) { |
|
this.addForm = row |
|
this.fileList = row.fileList |
|
this.dialogTitle = '设备编辑' |
|
this.dialogVisible = true |
|
}, |
|
// 点击删除按钮 |
|
handleChangeStatus(row) { |
|
this.$confirm('请确认是否修改巡检计划状态?', '提示', { |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
if (row.status == 0) { |
|
row.status = 1 |
|
} else { |
|
row.status = 0 |
|
} |
|
this.$message({ |
|
type: 'success', |
|
message: '修改成功!' |
|
}); |
|
}).catch(() => { |
|
// this.$message({ |
|
// type: 'info', |
|
// message: '已取消删除' |
|
// }); |
|
}); |
|
}, |
|
// 点击新增弹窗关闭按钮 |
|
handleClose() { |
|
this.dialogVisible = false |
|
this.addForm = {} |
|
}, |
|
// 点击接单弹窗保存按钮 |
|
handleSave() { |
|
this.$refs['addForm'].validate((valid) => { |
|
if (valid) { |
|
console.log('addForm--------------->', this.addForm) |
|
} |
|
}) |
|
}, |
|
// 点击接单弹窗确定按钮 |
|
handleSave() { |
|
this.$refs['addForm'].validate((valid) => { |
|
if (valid) { |
|
console.log('addForm--------------->', this.addForm) |
|
} |
|
}) |
|
}, |
|
|
|
// 点击巡检弹窗中的保存按钮 |
|
handleSaveInspection() { |
|
this.$refs['inspectionForm'].validate((valid) => { |
|
if (valid) { |
|
console.log('inspectionForm--------------->', this.inspectionForm) |
|
} |
|
}) |
|
}, |
|
handleConfirm() { |
|
if (this.dialogType == '审核并指派') { |
|
let servicemanArr = this.repairPersonList.filter(item => { |
|
return item.id = this.addForm.servicemanId |
|
}) |
|
let query = { |
|
id: this.addForm.id, |
|
servicemanId: this.addForm.servicemanId, |
|
servicemanName: servicemanArr[0].name |
|
} |
|
console.log('query=========>', query, this.addForm) |
|
taskSupervisorConfirm(query).then(res => { |
|
if (res.data.code == 200) { |
|
this.$message.success('审核完成') |
|
this.dialogVisible = false |
|
this.onLoad() |
|
} |
|
}) |
|
} else if (this.dialogType == '接单') { |
|
let query = { |
|
id: this.addForm.id, |
|
reservationTime: this.addForm.appointTime |
|
} |
|
taskServicemanReceive({ id: this.addForm.id }).then(res => { |
|
if (res.data.code == 200) { |
|
updateTime(query).then(result => { |
|
if (result.data.code == 200) { |
|
this.$message.success('接单完成') |
|
this.dialogVisible = false |
|
this.onLoad() |
|
} |
|
}) |
|
} |
|
}) |
|
} |
|
}, |
|
handleCancel() { |
|
this.dialogInspection = false |
|
this.inspectionForm = {} |
|
}, |
|
// 点击巡检弹窗中的确定按钮 |
|
handleConfirmInspection() { |
|
this.$refs['inspectionForm'].validate((valid) => { |
|
if (valid) { |
|
if (this.dialogTitle == '巡检确认') { |
|
if (this.inspectionForm.isOver === 1) { |
|
customerConfirm({ id: this.inspectionForm.id }).then(res => { |
|
if (res.data.code == 200) { |
|
this.$message.success('确认成功') |
|
this.dialogInspection = false |
|
this.onLoad() |
|
} |
|
}) |
|
} else { |
|
let query = { |
|
id: this.inspectionForm.id, //任务id |
|
approvePerson: this.userInfo.user_id, //审核人 |
|
appproveResult: this.inspectionForm.isOver, //审核结果 |
|
approveRemark: this.inspectionForm.approveRemark, //备注 |
|
} |
|
console.log('quer=====>', query) |
|
customerRefuse(query).then(res => { |
|
if (res.data.code == 200) { |
|
this.$message.success('确认成功') |
|
this.dialogInspection = false |
|
this.onLoad() |
|
} |
|
}) |
|
} |
|
} else { |
|
let query = [] |
|
this.inspectionForm.tableData.map(item => { |
|
query.push({ |
|
taskId: this.inspectionForm.id, |
|
floorName: item.floorName, |
|
deptId: item.deptId, |
|
checkContent: item.checkContent, |
|
craft: item.craft, |
|
period: item.period, |
|
picUrl: item.picUrl, |
|
// signUrl:item.signUrl, |
|
// remark:item.remark, |
|
id: item.id, |
|
status: item.status |
|
}) |
|
}) |
|
if (query.find(item => item.status === '')) { |
|
this.$message.error('状态及使用人签名请填写完整') |
|
} else { |
|
this.$confirm('请确认是否巡检完成?', '提示', { |
|
confirmButtonText: '确定', |
|
cancelButtonText: '取消', |
|
type: 'warning' |
|
}).then(() => { |
|
servicemanUpdateDetail(query).then(res => { |
|
if (res.data.code == 200) { |
|
servicemanSubmit({ id: this.inspectionForm.id }).then(res => { |
|
if (res.data.code == 200) { |
|
updateSign({ |
|
signUrl: this.inspectionForm.signUrl, |
|
remark: this.inspectionForm.remark, |
|
id: this.inspectionForm.id |
|
}).then(res => { |
|
if (res.data.code == 200) { |
|
this.$message.success('提交成功') |
|
this.onLoad() |
|
this.dialogInspection = false |
|
} |
|
}) |
|
|
|
} |
|
}) |
|
} |
|
}) |
|
}).catch(() => { |
|
|
|
}) |
|
|
|
} |
|
} |
|
|
|
} |
|
}) |
|
}, |
|
//巡检维修弹窗保存按钮 |
|
handleSaveError() { |
|
this.$refs['errorForm'].validate((valid) => { |
|
if (valid) { |
|
console.log('errorForm--------------->', this.errorForm) |
|
} |
|
}) |
|
}, |
|
|
|
//巡检维修弹窗确定按钮 |
|
handleConfirmError() { |
|
this.$refs['errorForm'].validate((valid) => { |
|
if (valid) { |
|
console.log('errorForm--------------->', this.errorForm) |
|
} |
|
}) |
|
}, |
|
// 附件上传成功 |
|
handleSuccess(val) { |
|
return (response, file, fileList) => { |
|
console.log('val==========>', val) |
|
// this.inspectionForm.tableData[index].picUrl = response.data.link |
|
val.picUrl = response.data.link |
|
val.fileList = [ |
|
{ |
|
url: response.data.link, |
|
name: response.data.originalName |
|
} |
|
] |
|
} |
|
}, |
|
getRowKeys(row) { |
|
return row.id |
|
}, |
|
// 附件删除 |
|
handleRemove(index) { |
|
return (file, fileList) => { |
|
// this.inspectionForm.tableData[index].picUrl = '' |
|
val.picUrl = '' |
|
val.fileList = [] |
|
} |
|
}, |
|
onLoad(page, params = {}) { |
|
// this.data = [ |
|
// { |
|
// taskNo:'WX-20240820-01', |
|
// deptName:'济南安池实验室', |
|
// inspectionName:'实验室设备巡检', |
|
// projectAddr:'济南市钢城区', |
|
// inspectionFloor:'三层、四层', |
|
// inspectionDate:'2024-05-21', |
|
// appointTime:'2024-07-21', |
|
// inspectionContent:'巡检主要内容1111', |
|
// status:0, |
|
// inspectionData:[ |
|
// { |
|
// floorId:'001', //楼层id |
|
// roomArr:[ |
|
// { |
|
// roomId:'001', //房间id |
|
// data:[ |
|
// { |
|
// majorName:'001', //专业名称 |
|
// content:'巡检内容11111', //巡检内容 |
|
// requirements:'001', //工艺要求 |
|
// cycle:'001', //巡检周期 |
|
// startTime:'2024-07-11' //开始时间 |
|
// }, |
|
// ] |
|
// }, |
|
// { |
|
// roomId:'002', //房间id |
|
// data:[ |
|
// { |
|
// majorName:'002', //专业名称 |
|
// content:'巡检内容2222222', //巡检内容 |
|
// requirements:'002', //工艺要求 |
|
// cycle:'002', //巡检周期 |
|
// startTime:'2024-07-12' //开始时间 |
|
// } |
|
// ] |
|
// } |
|
// ] |
|
// }, |
|
// { |
|
// floorId:'002', //楼层id |
|
// roomArr:[ |
|
// { |
|
// roomId:'001', //房间id |
|
// data:[ |
|
// { |
|
// majorName:'001', //专业名称 |
|
// content:'巡检内容33333', //巡检内容 |
|
// requirements:'001', //工艺要求 |
|
// cycle:'001', //巡检周期 |
|
// startTime:'2024-07-11' //开始时间 |
|
// }, |
|
// ] |
|
// }, |
|
// { |
|
// roomId:'002', //房间id |
|
// data:[ |
|
// { |
|
// majorName:'002', //专业名称 |
|
// content:'巡检内容44444', //巡检内容 |
|
// requirements:'002', //工艺要求 |
|
// cycle:'002', //巡检周期 |
|
// startTime:'2024-07-12' //开始时间 |
|
// } |
|
// ] |
|
// } |
|
// ] |
|
// } |
|
// ] |
|
// }, |
|
// { |
|
// taskNo:'WX-20240820-01', |
|
// deptName:'济南安池实验室', |
|
// inspectionName:'实验室设备巡检', |
|
// projectAddr:'济南市钢城区', |
|
// inspectionFloor:'三层、四层', |
|
// inspectionDate:'2024-09-21', |
|
// appointTime:'2024-12-21', |
|
// status:2, |
|
// inspectionContent:'巡检主要内容2222', |
|
// floorId:'001,002', |
|
// tableData:[ |
|
// {floorId:'001',floorName:'三楼',roomName:'种子常规检测1',majorName:'水系统',inspectionContent:'巡检内容1111',requirements:'工艺要求1',status:0,imgs:[],userName:'',remark:''}, |
|
// {floorId:'001',floorName:'三楼',roomName:'种子常规检测1',majorName:'电气系统',inspectionContent:'巡检内容1111',requirements:'工艺要求1',status:0,imgs:[],userName:'',remark:''}, |
|
// {floorId:'001',floorName:'三楼',roomName:'种子常规检测1',majorName:'电气系统',inspectionContent:'巡检内容1111',requirements:'工艺要求1',status:0,imgs:[],userName:'',remark:''}, |
|
// {floorId:'002',floorName:'四楼',roomName:'种子常规检测1',majorName:'电气系统',inspectionContent:'巡检内容1111',requirements:'工艺要求1',status:0,imgs:[],userName:'',remark:''}, |
|
// {floorId:'002',floorName:'四楼',roomName:'种子常规检测1',majorName:'水系统',inspectionContent:'巡检内容1111',requirements:'工艺要求1',status:0,imgs:[],userName:'',remark:''}, |
|
// ] |
|
// }, |
|
// ]; |
|
// this.page.total = this.data.length |
|
// this.loading = false; |
|
|
|
let query = { |
|
current: this.page.currentPage, |
|
size: this.page.pageSize |
|
} |
|
getTaskPage(query).then(res => { |
|
console.log('res=======>', res) |
|
this.data = res.data.data.records |
|
this.page.total = res.data.data.total |
|
}) |
|
}, |
|
} |
|
} |
|
</script> |
|
|
|
<style lang="scss" scoped></style> |
|
<style lang="scss"> |
|
.inspectionDialog { |
|
.error_radio { |
|
.el-radio__input.is-checked .el-radio__inner { |
|
border-color: red; |
|
background: red; |
|
} |
|
|
|
.el-radio__input.is-checked+.el-radio__label { |
|
color: red; |
|
} |
|
} |
|
} |
|
</style>
|
|
|