加流程节点 维修工单添加 领取按钮 领取后 生成维修开始时间 提交后 生成维修结束时间 计算 维修时长 故障时长
| | |
| | | |
| | | <!-- 操作按钮区域 --> |
| | | <div class="table-operator" v-if="isDisplayOperation"> |
| | | <a-button type="primary" icon="download" @click="handleExportXls('维修工单台账')">导出</a-button> |
| | | <a-dropdown :disabled="selectedRowKeys.length == 0"> |
| | | <a-menu slot="overlay"> |
| | | <a-menu-item key="1" @click="handleBatchSubmit"> |
| | |
| | | :scroll="{x:'max-content'}"> |
| | | <span slot="action" slot-scope="text, record"> |
| | | <template v-if="record.repairStatus=='PENDING_REPAIR'||record.repairStatus=='UNDER_MAINTENANCE' ||record.repairStatus=='REJECTED'"> |
| | | <a @click="handleFillIn(record)">填报</a> |
| | | <a-divider type="vertical"/> |
| | | <a-popconfirm title="确定提交吗?" @confirm="() => handleSubmit(record.id)"> |
| | | <a-popconfirm v-if="record.claimStatus=='0' || record.claimStatus==null " title="确定提交吗?" @confirm="() => handleClaim(record.id)"> |
| | | <a>领取</a> |
| | | </a-popconfirm> |
| | | <a v-if="record.claimStatus=='1'" @click="handleFillIn(record)">维修</a> |
| | | <a-divider v-if="record.claimStatus=='1'" type="vertical"/> |
| | | <a-popconfirm v-if="record.claimStatus=='1'" title="确定提交吗?" @confirm="() => handleSubmit(record.id)"> |
| | | <a>提交</a> |
| | | </a-popconfirm> |
| | | </template> |
| | |
| | | fixed: 'left' |
| | | }, |
| | | { |
| | | title: '领取状态', |
| | | align: 'center', |
| | | dataIndex: 'claimStatus_dictText', |
| | | fixed: 'left' |
| | | }, |
| | | { |
| | | title: '工单号', |
| | | align: 'center', |
| | | dataIndex: 'repairCode', |
| | |
| | | title: '维修结束时间', |
| | | align: 'center', |
| | | dataIndex: 'actualEndTime', |
| | | width: 200 |
| | | }, |
| | | { |
| | | title: '维修时长', |
| | | align: 'center', |
| | | dataIndex: 'repairDuration', |
| | | width: 200 |
| | | }, |
| | | { |
| | | title: '故障时长', |
| | | align: 'center', |
| | | dataIndex: 'faultDuration', |
| | | width: 200 |
| | | }, |
| | | { |
| | |
| | | url: { |
| | | list: '/eam/eamRepairOrder/list', |
| | | submit: '/eam/eamRepairOrder/submit', |
| | | claim: '/eam/eamRepairOrder/claim', |
| | | delete: '/eam/eamRepairOrder/delete', |
| | | deleteBatch: '/eam/eamRepairOrder/deleteBatch' |
| | | deleteBatch: '/eam/eamRepairOrder/deleteBatch', |
| | | exportXlsUrl: "eam/eamRepairOrder/exportXls", |
| | | } |
| | | } |
| | | }, |
| | |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * 点击领取时触发 |
| | | * @param id |
| | | */ |
| | | handleClaim(id){ |
| | | this.loading = true |
| | | getAction(this.url.claim, { id }) |
| | | .then(res => { |
| | | if (res.success) { |
| | | this.$notification.success({ |
| | | message: '消息', |
| | | description: res.message |
| | | }) |
| | | this.loadData() |
| | | } else { |
| | | this.$notification.warning({ |
| | | message: '消息', |
| | | description: res.message |
| | | }) |
| | | this.loading = false |
| | | } |
| | | }) |
| | | }, |
| | | // 批量提交时触发 |
| | | handleBatchSubmit() { |
| | | |
| | |
| | | <a-form-model-item label="维修开始时间" prop="actualStartTime"> |
| | | <a-date-picker show-time v-model="model.actualStartTime" :allowClear="false" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | style="width:100%"/> |
| | | style="width:100%" disabled/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="customSpan"> |
| | | <a-form-model-item label="维修结束时间" prop="actualEndTime"> |
| | | <a-date-picker show-time v-model="model.actualEndTime" :allowClear="false" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | style="width:100%"/> |
| | | style="width:100%" disabled/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="customSpan"> |
| | |
| | | confirmLoading: false, |
| | | spinning: false, |
| | | validatorRules: { |
| | | actualStartTime: [{ required: true, message: '请选择维修开始时间', trigger: 'change' }], |
| | | actualEndTime: [{ required: true, message: '请选择维修结束时间', trigger: 'change' }], |
| | | faultType: [{ required: true, message: '请选择故障类型' }] |
| | | }, |
| | | detail: { |
| | |
| | | <a-tab-pane key='2' tab='流程图' v-if="selectShenpiData.procInstId"> |
| | | <img :src="imageSrc" alt="Fetched Image" style="width: 100%" v-if="imageSrc"/> |
| | | </a-tab-pane> |
| | | <a-tab-pane key='3' tab='流转节点'> |
| | | <a-card> |
| | | <a-timeline style="padding:0 1% 0 12%" > |
| | | <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1"> |
| | | <div class="bottom"> |
| | | <p>处理人:{{item.assignee_dictText}}</p> |
| | | <p v-if="index1 !==0">处理时长:{{item.duration}}</p> |
| | | <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p> |
| | | <p v-if="item.description != null">处理意见:{{item.description}}</p> |
| | | <div class="left_qiu"><span>{{item.taskName}}</span></div> |
| | | </div> |
| | | </a-timeline-item> |
| | | </a-timeline> |
| | | </a-card> |
| | | </a-tab-pane> |
| | | </a-tabs> |
| | | </a-col> |
| | | |
| | |
| | | }, |
| | | disableSubmit: false, |
| | | selectedRowKeys: [], |
| | | hitaskDataSource:[], |
| | | detail: { |
| | | dataSource: [], |
| | | columns: [ |
| | |
| | | this.model = {} |
| | | this.getBasicInformationByApi(record) |
| | | this.getFlowChartImageByApi(record) |
| | | this.getFlowTaskListByApi(record) |
| | | }, |
| | | |
| | | /** |
| | |
| | | handleDetail(record) { |
| | | this.model = Object.assign({}, record) |
| | | this.loadDetail(record.id) |
| | | this.getFlowTaskListByApi(record) |
| | | }, |
| | | |
| | | /** |
| | |
| | | description: err.message |
| | | }) |
| | | }) |
| | | }, |
| | | |
| | | |
| | | /** |
| | | * 获取流转节点 |
| | | * @param record |
| | | */ |
| | | getFlowTaskListByApi(record) { |
| | | let parmhis={ |
| | | 'procInstId': record.procInstId |
| | | } |
| | | getAction(this.url.queryHisTaskList,parmhis).then(res=>{ |
| | | this.hitaskDataSource=res.result |
| | | }).finally( |
| | | this.visible = true, |
| | | console.log('this.approveData---->', this.approveData) |
| | | ) |
| | | }, |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /* 全局禁选样式 - 作用于整个页面 */ |
| | | html.submitting, |
| | | html.submitting body { |
| | | pointer-events: none !important; |
| | | cursor: wait !important; |
| | | } |
| | | |
| | | /* 蒙层效果增强 */ |
| | | html.submitting::before { |
| | | content: ''; |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | background: rgba(255, 255, 255, 0.5); |
| | | z-index: 9998; |
| | | } |
| | | |
| | | /* 加载指示器 - 更明显的视觉反馈 */ |
| | | html.submitting::after { |
| | | content: '提交中...'; |
| | | position: fixed; |
| | | top: 50%; |
| | | left: 50%; |
| | | transform: translate(-50%, -50%); |
| | | background: #1890ff; |
| | | color: white; |
| | | padding: 10px 20px; |
| | | border-radius: 4px; |
| | | z-index: 9999; |
| | | } |
| | | |
| | | /* 禁用状态按钮样式 */ |
| | | .disabled-btn { |
| | | opacity: 0.6; |
| | | cursor: not-allowed !important; |
| | | } |
| | | |
| | | .shallow-hr { |
| | | border: 0; |
| | | height: 1px; /* 分界线的高度 */ |
| | | background-color: rgba(0, 0, 0, 0.1); /* 使用 RGBA 颜色,并设置较低的透明度 */ |
| | | margin: 20px 0; /* 分界线上下的外边距 */ |
| | | } |
| | | .btn-custom { |
| | | background-color: #4CAF50; /* 绿色背景 */ |
| | | color: white; /* 白色文字 */ |
| | | border: none; /* 无边框 */ |
| | | padding: 5px 15px; /* 内边距 */ |
| | | text-align: center; /* 文字居中 */ |
| | | text-decoration: none; /* 无下划线 */ |
| | | display: inline-block; /* 行内块元素 */ |
| | | font-size: 12px; /* 字体大小 */ |
| | | margin: 4px 2px; /* 外边距 */ |
| | | cursor: pointer; /* 鼠标悬停时显示手型 */ |
| | | border-radius: 4px; /* 圆角边框 */ |
| | | } |
| | | |
| | | .bold-large-label { |
| | | font-weight: bold; |
| | | font-size: 20px; /* 或你需要的任何大小 */ |
| | | } |
| | | .left_qiu{ |
| | | position: absolute; |
| | | left: -74px; |
| | | top: 0; |
| | | width:54px; |
| | | border-radius: 50%; |
| | | height:54px; |
| | | font-size: 13px; |
| | | margin: auto; |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | align-items: center; |
| | | justify-content: center; |
| | | background: #0099ff; |
| | | transform: translate(0, 0); |
| | | } |
| | | /deep/ .ant-timeline-item-tail{ |
| | | left: -29px !important; |
| | | } |
| | | .left_qiu span{ |
| | | width: 3em; |
| | | display: block; |
| | | color: #fff; |
| | | text-align: center; |
| | | } |
| | | .img{ |
| | | width: 75%; |
| | | } |
| | | |
| | | .wrap{ |
| | | clear: both; |
| | | width: 100%; |
| | | display: flex; |
| | | height: 50px; |
| | | border: 1px solid #ccc; |
| | | /* background-color: aqua; */ |
| | | } |
| | | .box{ |
| | | width:21%; |
| | | height:50px; |
| | | border-right: 1px solid #ccc; |
| | | line-height: 50px; |
| | | /* background: red; */ |
| | | text-align:center; |
| | | margin: auto; |
| | | } |
| | | |
| | | /* 添加禁用样式 */ |
| | | .disabled-link { |
| | | color: #999; |
| | | cursor: not-allowed; |
| | | pointer-events: none; |
| | | text-decoration: none; |
| | | } |
| | | </style> |
| | |
| | | <a-input v-model="model.actualEndTime" readOnly/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="12"> |
| | | <a-form-model-item label="维修时长" :labelCol="labelCol" :wrapperCol="wrapperCol"> |
| | | <a-input v-model="model.repairDuration" readOnly/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="12"> |
| | | <a-form-model-item label="故障时长" :labelCol="labelCol" :wrapperCol="wrapperCol"> |
| | | <a-input v-model="model.faultDuration" readOnly/> |
| | | </a-form-model-item> |
| | | </a-col> |
| | | <a-col :span="24"> |
| | | <a-form-model-item label="故障现象"> |
| | | <a-textarea :rows="5" v-model="model.faultPhenomenon" readOnly/> |