<template>
|
<j-modal
|
:title="title"
|
:width="1200"
|
:visible="visible"
|
:okButtonProps="{ class:{'jee-hidden': disableSubmit||!hasInspectionDateArrived} }"
|
@ok="submitForm"
|
@cancel="handleCancel"
|
:mask-closable="false"
|
:confirmLoading="confirmLoading"
|
switchFullscreen
|
centered
|
>
|
<a-spin :spinning="spinning">
|
<a-form-model ref='form' :model='tableRowRecord' :labelCol="labelCol" :wrapperCol="wrapperCol"
|
:rules="validatorRules">
|
<a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 点检基础信息</a-divider>
|
|
<a-row>
|
<a-col :span='span'>
|
<a-form-model-item label="工单号">
|
<a-input readOnly v-model="tableRowRecord.orderNum"/>
|
</a-form-model-item>
|
</a-col>
|
<a-col :span='span'>
|
<a-form-model-item label="设备编号">
|
<MaintenanceEquipmentSelect v-model="tableRowRecord.equipmentId"
|
:maintenanceCategory="'POINT_INSPECTION'" disabled
|
@autocompleteForm="autoCompleteForm"/>
|
</a-form-model-item>
|
</a-col>
|
<a-col :span='span'>
|
<a-form-model-item label="标准名称">
|
<a-input readOnly v-model="tableRowRecord.standardName"/>
|
</a-form-model-item>
|
</a-col>
|
</a-row>
|
|
<a-row>
|
<a-col :span='span'>
|
<a-form-model-item label="标准编码">
|
<a-input readOnly v-model="tableRowRecord.standardCode"/>
|
</a-form-model-item>
|
</a-col>
|
<a-col :span='span'>
|
<a-form-model-item label="点检日期">
|
<a-input v-model="tableRowRecord.inspectionDate" readOnly/>
|
</a-form-model-item>
|
</a-col>
|
<a-col :span='span'>
|
<a-form-model-item label="点检过期时间">
|
<a-input v-model="tableRowRecord.expirationTime" readOnly/>
|
</a-form-model-item>
|
</a-col>
|
</a-row>
|
|
<a-row>
|
<a-col :span='span'>
|
<a-form-model-item label="保养周期">
|
<a-input v-model="tableRowRecord.maintenancePeriod" readOnly/>
|
</a-form-model-item>
|
</a-col>
|
<a-col :span='span'>
|
<a-form-model-item label="点检人">
|
<a-input v-model="tableRowRecord.operator_dictText" readOnly/>
|
</a-form-model-item>
|
</a-col>
|
</a-row>
|
|
<a-row>
|
<a-col :span="span*3">
|
<a-form-model-item label="备注" :labelCol="{span:2}" :wrapperCol="{span:21}">
|
<a-textarea v-model="tableRowRecord.remark" rows="3" readOnly/>
|
</a-form-model-item>
|
</a-col>
|
</a-row>
|
|
<a-row>
|
<a-form-model-item prop="imageFilesResult" label="点检图片" :labelCol="{span:2}" :wrapperCol="{span:21}">
|
<lx-upload :returnUrl="false" :isMultiple="true" file-type="image" :number="3"
|
:disabled="isDisableOperation||!hasInspectionDateArrived"
|
v-model="tableRowRecord.fileList"/>
|
</a-form-model-item>
|
</a-row>
|
|
<a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;">
|
保养项信息
|
</a-divider>
|
|
<a-tabs v-model="activeTabKey">
|
<a-tab-pane key="1" tab="保养项明细">
|
<j-vxe-table
|
ref="editableDetailTable"
|
:rowNumber="false"
|
:rowSelection="true"
|
:bordered="true"
|
:alwaysEdit="true"
|
:toolbar="false"
|
keep-source
|
:height="300"
|
:loading="detail.loading"
|
:dataSource="detail.dataSource"
|
:columns="detail.columns"
|
@selectRowChange="handleTableSelectRowChange"
|
>
|
<template v-slot:inspectionResult="props">
|
<j-dict-select-tag v-model="props.row.inspectionResult" dictCode="eam_inspection_result"
|
:disabled="isDisableOperation"
|
placeholder="请选择点检结果"
|
@change="handleInspectionResultSelectChange($event,props.row)"
|
style="width: 100%"/>
|
</template>
|
|
<template v-slot:exceptionDescription="props">
|
<a-textarea style="height: 32px" v-model="props.row.exceptionDescription"
|
:placeholder="props.row.inspectionResult==='2'?'请输入异常描述':''"
|
:disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'"/>
|
</template>
|
|
<template v-slot:reportFlag="props">
|
<j-dict-select-tag v-model="props.row.reportFlag"
|
:placeholder="props.row.inspectionResult==='2'?'请选择异常是否报修':''"
|
:disabled="isDisableOperation||!props.row.inspectionResult||props.row.inspectionResult==='1'"
|
dictCode="yn"
|
style="width: 100%"/>
|
</template>
|
</j-vxe-table>
|
</a-tab-pane>
|
|
<template v-if="selectShenpiData.procInstId">
|
<a-tab-pane key='2' tab='流程节点'>
|
<a-card :bordered="false">
|
<a-timeline>
|
<a-timeline-item v-for="(item,index) in hitaskDataSource" :key="index">
|
<div>
|
<h3 style="font-weight: bold;">{{item.taskName}}</h3>
|
<div>处理人:{{item.assignee_dictText}}</div>
|
<div v-if="index !==0">处理时长:{{item.duration}}</div>
|
<div v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</div>
|
<div v-if="item.description">处理意见:{{item.description}}</div>
|
</div>
|
</a-timeline-item>
|
</a-timeline>
|
</a-card>
|
</a-tab-pane>
|
|
<a-tab-pane key='3' tab='流程图'>
|
<img :src="imageSrc" alt="Fetched Image"/>
|
</a-tab-pane>
|
</template>
|
|
<a-button
|
v-if="selectedRowKeys.length>0&&!isDisableOperation&&hasInspectionDateArrived&&activeTabKey==='1'"
|
slot="tabBarExtraContent" type="primary"
|
@click="handleSelectAllInspectionResult">批量点检正常
|
</a-button>
|
|
<!--<a-dropdown slot="tabBarExtraContent" v-if="selectedRowKeys.length>0">-->
|
<!--<a-menu slot="overlay">-->
|
<!--<a-menu-item key="1" @click="handleSelectAllInspectionResult('正常')">正常</a-menu-item>-->
|
<!--<a-menu-item key="2" @click="handleSelectAllInspectionResult('异常')">异常</a-menu-item>-->
|
<!--</a-menu>-->
|
|
<!--<a-button> 批量选择点检结果-->
|
<!--<a-icon type="down"/>-->
|
<!--</a-button>-->
|
<!--</a-dropdown>-->
|
</a-tabs>
|
|
<template v-if="isDisplayConfirm">
|
<a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 管理员确认信息
|
</a-divider>
|
|
<a-row :gutter="24">
|
<a-col :span="12">
|
<a-form-model-item prop="confirmDealType" label="处理类型">
|
<j-dict-select-tag type='radio' v-model='tableRowRecord.confirmDealType' dictCode='approved_rejected'
|
:disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'"/>
|
</a-form-model-item>
|
</a-col>
|
|
<a-col :span="12">
|
<a-form-model-item prop="confirmComment" label="处理意见">
|
<a-textarea placeholder="请输入处理意见"
|
:disabled="disableSubmit||tableRowRecord.inspectionStatus!=='WAIT_CONFIRM'"
|
v-model="tableRowRecord.confirmComment"/>
|
</a-form-model-item>
|
</a-col>
|
</a-row>
|
</template>
|
</a-form-model>
|
</a-spin>
|
</j-modal>
|
</template>
|
|
<script>
|
import '@assets/less/TableExpand.less'
|
import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
|
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
|
import { JVXETypes } from '@comp/jeecg/JVxeTable'
|
import moment from 'moment'
|
|
export default {
|
name: 'InspectionOrderHandle',
|
components: { MaintenanceEquipmentSelect },
|
props: {
|
selectShenpiData: {
|
type: Object
|
}
|
},
|
data() {
|
return {
|
span: 8,
|
confirmLoading: false,
|
spinning: false,
|
tableRowRecord: {},
|
assignFileStream: {},
|
hitaskDataSource: [],
|
validatorRules: {
|
confirmDealType: [
|
{ required: true, message: '请选择处理类型' }
|
],
|
confirmComment: [
|
{ required: true, message: '请输入处理意见' }
|
]
|
},
|
imageSrc: null,
|
labelCol: {
|
xs: { span: 24 },
|
sm: { span: 6 }
|
},
|
wrapperCol: {
|
xs: { span: 30 },
|
sm: { span: 16 }
|
},
|
visible: false,
|
// 表头
|
url: {
|
// queryBomDataById: '/eam/eamInspectionOrder/selectVoById',
|
diagramView: '/assign/flow/diagramView',
|
queryHisTaskList: '/assign/flow/queryHisTaskList',
|
approve: '/eam/eamInspectionOrder/approval',
|
queryById: '/eam/eamInspectionOrder/queryById',
|
detailList: '/eam/eamInspectionOrderDetail/queryList'
|
},
|
detail: {
|
loading: false,
|
dataSource: [],
|
columns: [
|
{
|
title: '序号',
|
key: 'itemCode',
|
type: JVXETypes.normal,
|
width: '5%',
|
align: 'center',
|
fixed: 'left'
|
},
|
{
|
title: '保养项',
|
key: 'itemName',
|
type: JVXETypes.normal,
|
width: '15%',
|
align: 'center',
|
fixed: 'left'
|
},
|
{
|
title: '保养要求',
|
key: 'itemDemand',
|
type: JVXETypes.normal,
|
width: '15%',
|
align: 'center',
|
fixed: 'left'
|
},
|
{
|
title: '点检结果',
|
key: 'inspectionResult',
|
type: JVXETypes.slot,
|
slotName: 'inspectionResult',
|
width: '15%',
|
align: 'center',
|
validateRules: [
|
{ required: true, message: '${title}不能为空!' }
|
]
|
},
|
{
|
title: '异常描述',
|
key: 'exceptionDescription',
|
type: JVXETypes.slot,
|
slotName: 'exceptionDescription',
|
width: '20%',
|
align: 'center',
|
validateRules: [
|
{ handler: this.customValidator }
|
]
|
},
|
{
|
title: '异常是否报修',
|
key: 'reportFlag',
|
type: JVXETypes.slot,
|
slotName: 'reportFlag',
|
width: '20%',
|
align: 'center',
|
validateRules: [
|
{ handler: this.customValidator }
|
]
|
}
|
]
|
},
|
selectedRowKeys: [],
|
disableSubmit: false,
|
activeTabKey: '1',
|
title: ''
|
}
|
},
|
computed: {
|
hasInspectionDateArrived() {
|
return moment(this.tableRowRecord.inspectionDate).diff(moment(), 'hours') <= 0
|
},
|
isDisplayConfirm() {
|
return ['WAIT_CONFIRM', 'COMPLETE'].includes(this.tableRowRecord.inspectionStatus)
|
},
|
isDisableOperation() {
|
return this.disableSubmit || this.tableRowRecord.inspectionStatus !== 'UNDER_INSPECTION'
|
}
|
},
|
methods: {
|
/**
|
* 获取流程节点和流程图
|
* @param record 待办记录信息
|
*/
|
getAllApproveData(record) {
|
if (record.procInstId) {
|
const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = record
|
const param = { procInstId }
|
const imageParam = { processDefinitionId, processInstanceId, TaskDefinitionKey: processDefinitionKey }
|
const that = this
|
|
getAction(this.url.queryHisTaskList, param)
|
.then(res => {
|
that.hitaskDataSource = res.result
|
})
|
|
downFile(this.url.diagramView, imageParam, 'get')
|
.then((res => {
|
const urlObject = window.URL.createObjectURL(new Blob([res]))
|
that.imageSrc = urlObject
|
}))
|
.catch(err => {
|
that.$notification.error({
|
message: '消息',
|
description: res.message
|
})
|
})
|
}
|
},
|
|
/**
|
* 获取待办记录的基本信息
|
* @param record 待办记录信息
|
*/
|
async getBasicInformation(record) {
|
this.activeTabKey = '1'
|
this.detail.dataSource = []
|
this.spinning = true
|
const param = { id: record.dataId }
|
let res = await getAction(this.url.queryById, param);
|
this.tableRowRecord = Object.assign({}, res.result);
|
if (this.tableRowRecord.imageFiles) {
|
let obj = JSON.parse(this.tableRowRecord.imageFiles)
|
this.tableRowRecord.fileList = [...obj]
|
}
|
await this.loadDetail(record.dataId)
|
},
|
|
async submitForm() {
|
let errMap = await this.$refs.editableDetailTable.validateTable()
|
if (errMap) {
|
console.log('err', errMap)
|
return
|
}
|
|
this.$refs.form.validate(valid => {
|
if (valid) {
|
this.confirmLoading = this.spinning = true
|
const flowTaskVo = {}
|
flowTaskVo.dataId = this.selectShenpiData.dataId
|
flowTaskVo.taskId = this.selectShenpiData.id
|
flowTaskVo.userId = this.selectShenpiData.assignee
|
flowTaskVo.instanceId = this.selectShenpiData.procInstId
|
flowTaskVo.values = this.selectShenpiData.variables
|
flowTaskVo.confirmDealType = this.tableRowRecord.confirmDealType
|
flowTaskVo.confirmComment = this.tableRowRecord.confirmComment
|
flowTaskVo.fileList = this.tableRowRecord.fileList
|
flowTaskVo.tableDetailList = this.$refs.editableDetailTable.getTableData()
|
const that = this
|
console.log('表单提交数据', flowTaskVo)
|
httpAction(this.url.approve, flowTaskVo, 'post')
|
.then((res) => {
|
if (res.success) {
|
that.$message.success(res.message)
|
//刷新表格
|
that.$emit('searchReset')
|
that.handleCancel()
|
} else {
|
that.$message.warning(res.message)
|
}
|
})
|
.finally(() => {
|
that.confirmLoading = this.spinning = false
|
})
|
} else {
|
return false
|
}
|
})
|
},
|
|
autoCompleteForm({ standardName, maintenancePeriod, standardCode }) {
|
this.$set(this.tableRowRecord, 'standardName', standardName)
|
this.$set(this.tableRowRecord, 'maintenancePeriod', maintenancePeriod)
|
this.$set(this.tableRowRecord, 'standardCode', standardCode)
|
},
|
|
// 批量选择所有点检结果
|
handleSelectAllInspectionResult() {
|
this.selectedRowKeys.forEach(key => {
|
const dataItem = this.detail.dataSource.find(item => item.id === key)
|
if (dataItem && dataItem.inspectionResult !== '1') {
|
delete dataItem.exceptionDescription
|
delete dataItem.reportFlag
|
dataItem.inspectionResult = '1'
|
}
|
})
|
this.$refs.editableDetailTable.clearCheckboxRow()
|
this.selectedRowKeys = []
|
},
|
|
/**
|
* 表格多选框发生改变时触发
|
* @param {selectedRowIds} 表格中已选择的ID列表
|
*/
|
handleTableSelectRowChange({ selectedRowIds }) {
|
this.selectedRowKeys = selectedRowIds
|
},
|
|
/**
|
* 点检结果选择器发生改变时触发
|
* @param value 改变后的值
|
* @param record 保养明细行记录
|
*/
|
handleInspectionResultSelectChange(value, record) {
|
if (record.exceptionDescription) delete record.exceptionDescription
|
if (record.reportFlag) delete record.reportFlag
|
},
|
|
customValidator({ cellValue, row }, callback) {
|
if (row.inspectionResult === '2') {
|
if (!cellValue) {
|
callback(false, '${title}不能为空!') // false = 未通过,可以跟自定义提示
|
} else {
|
callback(true) // true = 通过验证
|
}
|
} else {
|
callback(true)
|
}
|
},
|
|
handleCancel() {
|
this.selectedRowKeys = []
|
this.visible = false
|
},
|
//标准选择变化
|
loadDetail(orderId) {
|
if (orderId) {
|
getAction(this.url.detailList, { orderId: orderId })
|
.then(res => {
|
if (res.success) {
|
this.detail.dataSource = [...res.result]
|
}
|
})
|
.finally(() => {
|
this.spinning = false
|
})
|
}
|
},
|
}
|
}
|
</script>
|
<style scoped>
|
/deep/ .ant-select-dropdown-menu {
|
text-align: left;
|
}
|
|
@import '~@assets/less/common.less';
|
</style>
|