jy-safe-app/pages/apply/subPages/FO/jobFireShow.vue
2025-12-26 14:29:11 +08:00

482 lines
22 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view style="padding-bottom: 80px;">
<view class="card">
<view class="background"></view>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">基本信息</view>
<u-form-item label="公司:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_Company||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="生产单元:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_ProductionUnit||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="发起时间:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.CREATE_TIME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="发起部门:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_ApplyDepartment||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="发起人:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_ApplyUser||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="工作票编号:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.CODE" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="作业名称:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_OperationStep||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="审批层级:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.AUDIT_LEVELName" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="作业风险等级:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.EVALUATE_LEVELName" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火部门:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_FireDepartment||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火部门负责人:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_FireUser||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="安全生产管理人员:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_SafeUser||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火区域:" prop="Product_Unit" borderBottom>
<u--input v-model="(model.Nav_Area||{}).NAME" disabled disabledColor="#ffffff" border="none" inputAlign="right" fontSize="14px">
</u--input>
</u-form-item>
<u-form-item label="动火地点" prop="LOCATION" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.JOB_LOCATION" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="动火方式:" prop="Nav_Type" borderBottom>
<u--input v-model="(model.Nav_Type||{}).NAME" disabled disabledColor="#ffffff" border="none" inputAlign="right" fontSize="14px">
</u--input>
</u-form-item>
<u-form-item label="动火具体事项" prop="LOCATION" borderBottom>
<u--input disabled disabledColor="#ffffff" v-model="model.JOB_CONTENT" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="动火计划开始时间" prop="CHECKDATETIME" borderBottom>
<u--input disabled disabledColor="#fff" v-model="model.JOB_DATE" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="动火计划结束时间" prop="ENDTIME" borderBottom>
<u--input disabled disabledColor="#fff" v-model="model.JOB_END_DATE" border="none" inputAlign="right" fontSize="14px"></u--input>
</u-form-item>
<u-form-item label="存在的风险">
<!-- <u-icon name="arrow-down" size="12" slot="right"></u-icon> -->
</u-form-item>
<view class="tag-view" v-if="model.Nav_Risks">
<uni-tag class="tag" v-for="(i, k) in model.Nav_Risks.filter(i => !i.IS_DELETED)" :key="k" :inverted="true" :text="i.RISK_NAME" type="primary" />
</view>
<view class="upload-title">附件:</view>
<full-upload v-model="model.Nav_Files" :isShowBtn='false'></full-upload>
</u--form>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom" ref="sForm" class="sub-form" style="margin-top: 20px;" v-if="model.Nav_Details.length>0">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">作业人员信息</view>
<uni-collapse :border="false" accordion>
<view v-for="(item, index) in model.Nav_Users" :key="index">
<uni-collapse-item title-border="none" :border="false">
<template v-slot:title>
<view class="uni-collapse-item__title-box">
<view class="uni-collapse-item__title-text">
{{item.Nav_User?index+1+'.'+item.Nav_User.NAME:index+1+'.'}}
</view>
<view @click.stop style="margin-right: 10px;">
<!-- <u-icon @click="handleDelRowBefore(index)" name="trash" color="#ff4d4f" size="21" style="margin-right: 10px;"></u-icon> -->
<!-- <u-icon name="arrow-down" size="12"></u-icon> -->
</view>
</view>
</template>
<view class="content">
<u-form-item label="作业人员类别" prop="CERTIFICATE_TYPE_SHOW" borderBottom>
<u--input disabled disabledColor="#fff" v-model="(item.Nav_UserType||{}).NAME" inputAlign="right" fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 9px"
border="none"></u--input>
</u-form-item>
<u-form-item label="姓名" prop="personName" borderBottom>
<u--input disabled disabledColor="#fff" v-model="(item.Nav_User||{}).NAME" inputAlign="right" fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 9px" border="none">
</u--input>
</u-form-item>
<!-- <u-form-item label="证件名称" prop="certificateName" borderBottom>
<u--input disabled disabledColor="#fff" v-model="(item.Nav_Train||{}).CERTIFICATE_NAME" inputAlign="right" fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 9px" border="none"></u--input>
</u-form-item> -->
<u-form-item label="证书编号" prop="CertificateCode" borderBottom>
<u--input disabled disabledColor="#fff" inputAlign="right" v-model="item.CERTIFICATE_CODE" fontSize="14px" border="none"
customStyle="margin:0px;display:flex;padding:3px 9px;"></u--input>
</u-form-item>
<view class="upload-title">附件:</view>
<full-upload v-model="item.Nav_UserFiles" :isShowBtn='false'></full-upload>
</view>
</uni-collapse-item>
</view>
</uni-collapse>
</u--form>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" errorType="border-bottom" ref="sForm" class="sub-form" style="margin-top: 20px;" v-if="model.Nav_Details.length>0">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">作业流程及安全措施</view>
<uni-collapse :border="false" accordion>
<view v-for="(item, index) in model.Nav_Details" :key="index">
<uni-collapse-item title-border="none" :border="false">
<template v-slot:title>
<view class="uni-collapse-item__title-box">
<view class="uni-collapse-item__title-text">
{{item.CONTENT?index+1+'.'+item.JOB_STEPName+'--'+item.CONTENT:index+1+'.'}}
</view>
<view @click.stop style="margin-right: 10px;">
<!-- <u-icon @click="handleDelRowBefore(index)" name="trash" color="#ff4d4f" size="21" style="margin-right: 10px;"></u-icon> -->
<!-- <u-icon name="arrow-down" size="12"></u-icon> -->
</view>
</view>
</template>
<view class="content">
<u-form-item label="顺序:" prop="Nav_User.NAME" @ borderBottom>
<u--input disabled disabledColor="#fff" v-model="item.NUM" type="number" fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="作业阶段:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="item.JOB_STEPName" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="作业流程及安全措施:">
</u-form-item>
<u--textarea disabled v-model="item.CONTENT" border="surround"></u--textarea>
<view v-if="model.STATUS==30">
<u-form-item label="是否确认:" prop="Nav_User.NAME" borderBottom>
<u-switch v-model="item.IS_CONFIRM_NEW" size="18" disabled slot="right"></u-switch>
</u-form-item>
<view class="upload-title">附件:</view>
<full-upload v-model="item.Nav_DetailFiles" :isShowBtn='false'></full-upload>
</view>
</view>
</uni-collapse-item>
</view>
</uni-collapse>
</u--form>
<u--form labelPosition="left" labelWidth="auto" labelAlign="center" :model="model" class="demo-ruleForm" style="margin-top: 20px;">
<view style="position: relative;">
<view style="position: absolute;left: -10px;color: #3d4b70;top: -3px;">*</view>
</view>
<view style="font-size: 15px; font-weight: bold;color: #3d4b70;margin-bottom: 10px;">基本信息</view>
<view v-if="model.STATUS==30">
<u-form-item label="动火作业现场条件验收情况:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.COMPLETED_CONDITION" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="是否可以动火:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.IS_FIREName" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火实际开始时间:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.ACT_DATE" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<view class="upload-title">现场条件验收附件:</view>
<full-upload v-model="model.Nav_FireFiles" :isShowBtn='false'></full-upload>
<u-form-item label="矿调度室人员:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="(model.Nav_DispatchUser||{}).NAME" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火部门负责人签名">
</u-form-item>
<image style="width: 150px;height: 60px;" :src="imgurl+model.Nav_FireUser.FILE_PATH" v-if='model.USER_DEAL_STATUS== 1'>
</image>
<u-form-item label="安全管理人员签名">
</u-form-item>
<image style="width: 150px;height: 60px;" :src="imgurl+model.Nav_SafeUser.FILE_PATH" v-if='model.SAFE_DEAL_STATUS== 1'>
</image>
<u-form-item label="矿调度人员签名">
</u-form-item>
<image style="width: 150px;height: 60px;" :src="imgurl+model.Nav_DispatchUser.FILE_PATH" v-if='model.DISPATCH_DEAL_STATUS== 1'>
</image>
</view>
<view v-if="model.FIRE_STATUS>15">
<u-form-item label="动火作业完工验收情况:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.COMPLETED_CONTENT" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="是否可以撤离:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.IS_LEAVEName" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="动火实际结束时间:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.ACT_END_DATE" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<u-form-item label="离开现场时间:" prop="Nav_User.NAME" borderBottom>
<u--input disabledColor="#fff" v-model="model.LEAVE_DATE" disabled fontSize="14px" customStyle="margin:0px;display:flex;padding:3px 0px" border="none" inputAlign="right">
</u--input>
</u-form-item>
<view class="upload-title">完工验收附件:</view>
<full-upload v-model="model.Nav_MonitorFiles" :isShowBtn='false'></full-upload>
<u-form-item label="动火部门负责人签字">
</u-form-item>
<image style="width: 150px;height: 60px;" :src="imgurl+model.Nav_FireUser.FILE_PATH" v-if='model.USER_DEAL_FINISH_STATUS== 1'>
</image>
<u-form-item label="安全生产管理人员签字">
</u-form-item>
<image style="width: 150px;height: 60px;" :src="imgurl+model.Nav_SafeUser.FILE_PATH" v-if='model.SAFE_DEAL_FINISH_STATUS== 1'>
</image>
</view>
</u--form>
</view>
<audit-process :show="showAudit" @close="handleCloseAudit" :dataSource="auditData" />
<check-action v-if="isLoadOK && tableKey === '1'&&isAudit==='true' " :okApi="okApi" :refuseApi="refuseApi" :dataSource="$store.state.auditModel"></check-action>
<view class="bottom-button">
<u-button type="primary" class="bottom" v-if="isLoadOK&&tableKey==='1'&&!isAudit" @click="onTableBtnAgree" color="#3d4b70" >审阅</u-button>
<!-- <button type="primary" class="bottom" v-if='isLoadOK&&tableKey==1' @click="onTableBtnAgree">签到</button> -->
</view>
</view>
</template>
<script>
import {
initFilter,
extendRule,
extendInclude
} from '../../../../utils/common'
import {
getRequest,
} from '../../../../services/apply/FOServices/FOServices'
import '../../../../utils/showMsg.js'
import color from '../../../../uni_modules/uview-ui/libs/config/color'
import config from '../../../../config/common'
import {
getEnum
} from '../../../../services/common';
export default {
data() {
return {
imgurl: config.uni_app_web_api_url + ':5199',
model: {
Nav_ApplyUser: {
NAME: ''
},
Nav_ApplyDepartment: {
NAME: ''
},
Nav_ProductionUnit: {
NAME: ''
},
Nav_OperationStep: {
NAME: ''
},
Nav_FireDepartment: {
NAME: ''
},
Nav_FireUser: {
NAME: ''
},
Nav_SafeUser: {
NAME: ''
},
Nav_Area: {
NAME: ''
},
Nav_Type: {
NAME: ''
},
IS_HOLIDAY: false,
IS_HOLIDAYName: '否',
EVALUATE_LEVEL: '',
EVALUATE_LEVELName: '',
JOB_LOCATION: '',
JOB_CONTENT: '',
JOB_DATE: '',
JOB_END_DATE: '',
Nav_Users: [],
Nav_Risks: [],
Nav_Details: [],
Nav_Files: [],
Nav_FireFiles:[],
Nav_MonitorFiles:[],
Nav_DispatchUser:{
NAME: ''
},
},
listPropUpload: ['PRE_SHIFT_MEETING_RECORD_ID'],
listPropValUpload: [],
TaskID: "",
tableKey: '0',
okApi: '',
refuseApi: '',
isAudit: false,
isLoadOK: false,
showAudit: false,
auditData: [],
ID: '',
enumsData: {}, // 存储所有枚举数据(键:枚举名称,值:处理后的枚举列表)
enumsText: {} // 存储枚举文本列表(用于下拉选择等场景)
}
},
onLoad(option) {
this.ID = option.ID;
this.TaskID = option.taskID;
this.tableKey = option.tableKey ? option.tableKey : '0'
this.okApi = option.okApi
this.refuseApi = option.refuseApi
this.ApproveID = option.ApproveID
this.isAudit = option.isAudit
this.auditModel = {
...this.$store.state.auditModel,
TaskID: option.taskID ? option.taskID : ''
}
this.fetchEnums(['HMOperationTaskAuditEnum', 'SKEvaluateLevelEnum', 'FOJobStepEnum','FOYesOrNoEnum']);
},
methods: {
async fetchEnums(enumNames) {
try {
// 存储所有枚举请求的Promise
const enumPromises = enumNames.map(name => {
return getEnum({
name
}).then(res => {
// 统一处理枚举格式添加name/code字段便于后续映射
return {
enumName: name,
data: res.map(item => ({
...item,
name: item.NAME, // 统一显示名称字段
code: item.ID // 统一值字段
}))
};
});
});
// 等待所有枚举请求完成
const results = await Promise.all(enumPromises);
// 存储枚举结果到data中键为枚举名称值为处理后的数据
results.forEach(({
enumName,
data
}) => {
this.enumsData[enumName] = data;
// 生成文本列表(如需要)
this.enumsText[enumName] = data.map(item => item.name);
});
// 所有枚举获取完成后执行loadData
this.loadData();
this.loadAuditData()
} catch (error) {
console.error('枚举请求失败:', error);
uni.showToast({
title: '枚举数据加载失败',
icon: 'none'
});
}
},
loadData() {
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, "", "CODE", 1)
extendRule(json, 'ID', 1, this.ID);
getRequest(json, "/FO/FOFireJob/GetEdit").then(res => {
this.model = res
this.model.EVALUATE_LEVELName = res.EVALUATE_LEVEL !== '' && res.EVALUATE_LEVEL !== undefined ? this.enumsData['SKEvaluateLevelEnum'].find(item => item.code === res.EVALUATE_LEVEL).name : ''
this.model.AUDIT_LEVELName = res.AUDIT_LEVEL !== '' && res.AUDIT_LEVEL !== undefined ? this.enumsData['HMOperationTaskAuditEnum'].find(item => item.code === res.AUDIT_LEVEL).name : ''
this.model.IS_FIREName = res.IS_FIRE !== '' && res.IS_FIRE !== undefined ? this.enumsData['FOYesOrNoEnum'].find(item => item.code === res.IS_FIRE).name : ''
this.model.IS_LEAVEName = res.IS_LEAVE !== '' && res.IS_LEAVE !== undefined ? this.enumsData['FOYesOrNoEnum'].find(item => item.code === res.IS_LEAVE).name : ''
if (this.model.Nav_Details && this.model.Nav_Details.length > 0) {
this.model.Nav_Details.map(item => {
item.JOB_STEPName = item.JOB_STEP !== '' && item.JOB_STEP !== undefined ? this.enumsData['FOJobStepEnum'].find(item1 => item1.code === item.JOB_STEP).name : ''
})
}
this.isLoadOK = true;
})
},
onTableBtnAgree() {
let json = {};
json.ID = this.ID;
json.TaskID = this.TaskID;
getRequest(json, "/FO/FOFireJob/IdentityUpdate").then(res => {
if (res) {
uni.$showMsgFunc('操作成功!', () => {
uni.navigateBack()
}, 'success', 1000)
}
})
},
loadAuditData() {
const orgId = uni.getStorageSync('orgId')
const json = initFilter(orgId, this.ID, "CODE", 1)
return new Promise((resolve, reject) => {
getRequest(json, "/PF/Approve/GetApproveInfo").then(res => {
if (res) {
if (res && res[0].Nav_ApproveDetails.length > 0) {
res[0].Nav_ApproveDetails.sort((a, b) => a.NUM - b.NUM)
resolve(res)
}
this.auditData = res
} else {
uni.showToast({
title: '暂无审批数据',
icon: 'none'
})
}
}).catch(err => {
reject(err)
})
})
},
handleCloseAudit() {
this.showAudit = false
},
async onNavigationBarButtonTap() {
// const res = await this.loadAuditData()
// if (res) {
// this.auditData = res
this.showAudit = true
// }
}
},
computed: {
}
}
</script>
<style>
@import url("../../../../style/css/newTemplate.css");
</style>