<template>
|
<div class="home-container">
|
<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
|
<div class="homeCard">
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="作业申请单位" prop="applyDepId">
|
<el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="作业内容" prop="workContent">
|
<el-input
|
v-model="form.workContent"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入作业内容"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="作业地点" prop="workLocation">
|
<el-input
|
v-model="form.workLocation"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入作业地点"
|
/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="电源接入点及许可用电功率" prop="workDetail.powerAccessPoint">
|
<el-input
|
v-model="form.workDetail.powerAccessPoint"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入电源接入点及许可用电功率"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="工作电压" prop="workDetail.workingVoltage">
|
<el-input
|
v-model="form.workDetail.workingVoltage"
|
type="number"
|
placeholder="请输入工作电压"
|
/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="用电设备名称及额定功率" prop="workDetail.equipmentAndPower">
|
<el-input
|
v-model="form.workDetail.equipmentAndPower"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入用电设备名称及额定功率"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="用电人" prop="workDetail.electricityUids">
|
<el-select v-model="form.workDetail.electricityUids" multiple clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="作业人及证件编号" prop="operatorUids">
|
<el-select v-model="form.operatorUids" multiple clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="作业单位" prop="workDepId">
|
<el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="作业负责人" prop="headUids">
|
<el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="分析人" prop="analystUids">
|
<el-select v-model="form.analystUids" multiple clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12" class="valueSelect">
|
<el-form-item label="关联其他特殊作业" prop="involveOtherWork">
|
<!-- <el-select v-model="form.involveOtherWork" multiple clearable>-->
|
<!-- <el-option-->
|
<!-- v-for="item in otherWorkList"-->
|
<!-- :key="item.value"-->
|
<!-- :label="item.label"-->
|
<!-- :value="item.label"-->
|
<!-- />-->
|
<!-- </el-select>-->
|
<el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect">
|
<el-option v-for="item in otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="监护人" prop="guardianUids">
|
<el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="绑定执法仪" prop="cameraIds">
|
<el-select v-model="form.cameraIds" multiple clearable>
|
<el-option
|
v-for="item in deviceList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.id"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<!-- <el-col :span="12">-->
|
<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">-->
|
<!-- <el-date-picker-->
|
<!-- v-model="form.expStartTime"-->
|
<!-- format="YYYY-MM-DD HH:mm"-->
|
<!-- value-format="YYYY-MM-DD HH:mm:00"-->
|
<!-- type="datetimerange"-->
|
<!-- range-separator="至"-->
|
<!-- start-placeholder="开始时间"-->
|
<!-- end-placeholder="结束时间"-->
|
<!-- />-->
|
<!-- </el-form-item>-->
|
<!-- </el-col>-->
|
<el-col :span="12">
|
<el-form-item label="预计(整体)开始时间" prop="expStartTime">
|
<el-date-picker
|
v-model="form.expStartTime"
|
format="YYYY-MM-DD HH:mm"
|
value-format="YYYY-MM-DD HH:mm:00"
|
type="datetime"
|
style="width: 100%"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="预计(整体)完成时间" prop="expEndTime">
|
<el-date-picker
|
v-model="form.expEndTime"
|
format="YYYY-MM-DD HH:mm"
|
value-format="YYYY-MM-DD HH:mm:00"
|
type="datetime"
|
style="width: 100%"
|
/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="风险辨识" prop="riskIdentification">
|
<el-input
|
v-model="form.riskIdentification"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入风险辨识"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="备注" prop="remark">
|
<el-input
|
v-model="form.remark"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入作业备注"
|
/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row style="display: flex;justify-content: center">
|
<el-table :data="safetyMeasureBasicList" style="width: 90%" border>
|
<el-table-column type="index" label="序号" width="100px" align="center"/>
|
<el-table-column prop="measureContent" label="安全措施"/>
|
<!-- <el-table-column prop="address" label="确认人">-->
|
<!-- <template #default="scope">-->
|
|
<!-- </template>-->
|
<!-- </el-table-column>-->
|
<!-- <el-table-column prop="address" label="操作">-->
|
<!-- <template #default="scope">-->
|
<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>-->
|
<!-- </template>-->
|
<!-- </el-table-column>-->
|
</el-table>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="安全措施确认人" prop="safetyMeasureUids">
|
<el-select v-model="form.safetyMeasureUids" multiple clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<!-- <el-row>-->
|
<!-- <el-col :span="12">-->
|
<!-- <el-form-item label="其他安全措施">-->
|
<!-- <el-input-->
|
<!-- v-model="form.workContent"-->
|
<!-- :autosize="{ minRows: 2 }"-->
|
<!-- type="textarea"-->
|
<!-- placeholder="请输入其他安全措施"-->
|
<!-- />-->
|
<!-- </el-form-item>-->
|
<!-- </el-col>-->
|
<!-- <el-col :span="12">-->
|
<!-- <el-form-item label="编制人">-->
|
<!-- <el-input-->
|
<!-- v-model="form.workContent"-->
|
<!-- placeholder="请输入编制人"-->
|
<!-- />-->
|
<!-- </el-form-item>-->
|
<!-- </el-col>-->
|
<!-- </el-row>-->
|
<el-row style="display: flex;justify-content: center">
|
<el-table :data="form.approvalDepBasicList" style="width: 90%" border>
|
<el-table-column prop="content" label="审批签字项目" align="center"/>
|
<el-table-column prop="approvalType" label="是否必签" align="center">
|
<template #default="scope">
|
<el-form-item label="" prop="acceptUid">
|
<el-radio-group v-model="scope.row.approvalType">
|
<el-radio :label="0">所有必签</el-radio>
|
<el-radio :label="1">任一</el-radio>
|
<el-radio :label="2">非必签</el-radio>
|
</el-radio-group>
|
</el-form-item>
|
</template>
|
</el-table-column>
|
<el-table-column prop="approvalUids" label="审批人" align="center">
|
<template #default="scope">
|
<el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="完工验收" prop="acceptUid">
|
<el-select v-model="form.acceptUid" clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="现场开始结束确认人" prop="startOrEndUids">
|
<el-select v-model="form.startOrEndUids" multiple clearable>
|
<el-option
|
v-for="item in workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
</el-form>
|
<div class="applyBtn">
|
<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
|
</div>
|
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
|
</div>
|
</template>
|
|
<script lang="ts">
|
import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue';
|
import { storeToRefs } from 'pinia';
|
import { initBackEndControlRoutes } from '/@/router/backEnd';
|
import {useUserInfo} from "/@/stores/userInfo";
|
import { Session } from '/@/utils/storage';
|
import { Search, Edit } from '@element-plus/icons-vue'
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
|
import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
|
interface stateType {
|
form: Object,
|
equipmentDialog: boolean,
|
props:{},
|
depProps:{},
|
safetyMeasureBasicList: []
|
}
|
export default defineComponent({
|
name: 'powerForm',
|
components: {workSelect},
|
props:['departList','departList2','workerList','deviceList','otherWorks'],
|
setup(props: any, context: any) {
|
const userInfo = useUserInfo()
|
const { userInfos } = storeToRefs(userInfo);
|
const state = reactive<stateType>({
|
equipmentDialog: false,
|
safetyMeasureBasicList: [],
|
form: {
|
workType: 7,
|
workLevel: 0,
|
applyDepId: null,
|
seDepId: null,
|
expStartTime: '',
|
expEndTime: '',
|
operatorUids: [],
|
headUids: [],
|
analystUids: [],
|
guardianUids: [],
|
workDepId: null,
|
workContent: '',
|
workLocation: '',
|
riskIdentification: '',
|
involveOtherWork: [],
|
safetyMeasureUids: [],
|
approvalDepBasicList: [],
|
acceptUid: null,
|
startOrEndUids: [],
|
cameraIds: [],
|
workDetail: {
|
powerAccessPoint: '',
|
workingVoltage: '',
|
equipmentAndPower: '',
|
electricityUids: []
|
}
|
},
|
props:{
|
expandTrigger: 'hover',
|
label: 'depName',
|
value: 'depId',
|
emitPath: false
|
},
|
depProps:{
|
expandTrigger: 'hover',
|
label: 'depName',
|
value: 'depId',
|
checkStrictly: true,
|
emitPath: false
|
}
|
});
|
const ruleFormRef = ref<FormInstance>()
|
const applyRules = reactive<FormRules>({
|
applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.workingVoltage": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.equipmentAndPower": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.electricityUids": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
|
});
|
const workSelectRef = ref()
|
// 页面载入时执行方法
|
onMounted(() => {
|
|
});
|
const openWorkSelect = ()=>{
|
workSelectRef.value.openDialog(state.form.involveOtherWork)
|
}
|
const getSelected = ()=>{
|
state.form.involveOtherWork = workSelectRef.value.selected
|
}
|
const findParent = ()=>{
|
state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId)
|
console.log(state.form.seDepId,'state.form.seDepId')
|
}
|
|
// 获取基础数据
|
const getBasicData = async ()=>{
|
const res = await workApplyApi().getFormData(7)
|
if (res.data.code === '200') {
|
state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList))
|
if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){
|
state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({
|
content,
|
approvalDepBasicId: id,
|
approvalUids: [],
|
approvalType: null
|
}))
|
}else{
|
state.form.approvalDepBasicList = []
|
}
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
}
|
};
|
|
const getStartEndIds = ()=>{
|
state.form.startOrEndUids = state.form.headUids
|
state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
|
}
|
|
const getSafetyIds = ()=>{
|
state.form.safetyMeasureUids = state.form.guardianUids
|
}
|
|
const isFirstRow = (index)=> {
|
return index === 0;
|
}
|
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
if (!formEl) return
|
await formEl.validate(async (valid, fields) => {
|
if (valid) {
|
for(let i of state.form.approvalDepBasicList){
|
if(i.approvalUids.length == 0){
|
ElMessage({
|
type: 'warning',
|
message: '部分审批人未配置'
|
});
|
return
|
}
|
}
|
// if(Array.isArray(state.form.involveOtherWork)){
|
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
|
// }
|
state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',')
|
const res = await workApplyApi().submitPowerApply(state.form)
|
if (res.data.code === '200') {
|
ElMessage({
|
type: 'success',
|
message: '提交成功!'
|
});
|
formEl.resetFields()
|
getBasicData()
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
|
state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
|
}
|
} else {
|
console.log('error submit!', fields)
|
}
|
})
|
}
|
|
const findNearestDepLevel2DepId = (data, targetDepId) => {
|
let nearestDepId = null;
|
|
const traverseTree = (node) => {
|
if (node.depId === targetDepId) {
|
return true;
|
}
|
|
if (node.children && node.children.length > 0) {
|
for (const child of node.children) {
|
const found = traverseTree(child);
|
if (found) {
|
if (child.depLevel === 2) {
|
nearestDepId = child.depId;
|
}
|
return true;
|
}
|
}
|
}
|
|
return false;
|
};
|
|
for (const root of data) {
|
traverseTree(root);
|
}
|
|
return nearestDepId;
|
};
|
|
// 折线图
|
const renderMenu = async (value: string) => {
|
Session.set('projectId',value)
|
userInfos.value.projectId = value
|
await initBackEndControlRoutes();
|
};
|
return {
|
renderMenu,
|
getBasicData,
|
getStartEndIds,
|
getSafetyIds,
|
isFirstRow,
|
submitForm,
|
findParent,
|
openWorkSelect,
|
getSelected,
|
workSelectRef,
|
Search,
|
ruleFormRef,
|
applyRules,
|
...toRefs(state),
|
};
|
},
|
});
|
</script>
|
|
<style scoped lang="scss">
|
.home-container {
|
width: 100%;
|
height: 100vh;
|
overflow: hidden;
|
overflow-y: scroll;
|
&::-webkit-scrollbar{
|
width: 0;
|
background-color: transparent;
|
}
|
.homeCard{
|
width: 100%;
|
padding: 20px;
|
box-sizing: border-box;
|
background: #fff;
|
border-radius: 4px;
|
margin-bottom: 20px;
|
}
|
.applyBtn{
|
width: 100%;
|
background: #fff;
|
padding: 20px 0;
|
box-shadow: 0 -3px 8px rgba(150,150,150,.1);
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
}
|
.el-row{
|
margin-bottom: 20px;
|
}
|
.el-row:last-child {
|
margin-bottom: 0;
|
}
|
.el-input{
|
width: 100% !important;
|
}
|
.el-date-editor::v-deep{
|
width: 100%;
|
}
|
.el-select{
|
width: 100%;
|
}
|
.el-cascader{
|
width: 100% !important;
|
}
|
}
|
.valueSelect{
|
::v-deep(.el-popper){
|
display: none !important;
|
}
|
}
|
.tab-i{
|
margin-bottom: 15px;
|
|
&:last-of-type{
|
margin-bottom: 0;
|
}
|
::v-deep(.el-form-item){
|
.el-form-item__label{
|
margin-bottom: 4px;
|
}
|
}
|
}
|
</style>
|