<template>
|
<div class="home-container">
|
<el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
|
<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="lists.departList2" :props="props1" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="作业类别" prop="workLevel">
|
<el-select v-model="form.workLevel" clearable>
|
<el-option
|
v-for="item in workLevelList"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</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.pipingName">
|
<el-input
|
v-model="form.workDetail.pipingName"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入设备管道名称"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="管道介质" prop="workDetail.media">
|
<el-input
|
v-model="form.workDetail.media"
|
: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.temperature">
|
<el-input
|
v-model="form.workDetail.temperature"
|
type="number"
|
placeholder="请输入管道温度"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="管道压力(kPa)" prop="workDetail.pressure">
|
<el-input
|
v-model="form.workDetail.pressure"
|
type="number"
|
placeholder="请输入管道压力"
|
/>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="盲板材质" prop="workDetail.bpMaterialQuality">
|
<el-input
|
v-model="form.workDetail.bpMaterialQuality"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入盲板材质"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="盲板规格" prop="workDetail.bpSpecification">
|
<el-input
|
v-model="form.workDetail.bpSpecification"
|
: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.bpCode">
|
<el-input
|
v-model="form.workDetail.bpCode"
|
: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.bpLocationDesc">
|
<el-input
|
v-model="form.workDetail.bpLocationDesc"
|
:autosize="{ minRows: 1 }"
|
type="textarea"
|
placeholder="请输入盲板位置相关描述并在右方上传位置图"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="盲板位置示意图" prop="workDetail.bpLocationMapPath">
|
<el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
|
<el-icon><Plus /></el-icon>
|
<template #tip>
|
<div class="el-upload__tip">上传jpg/png图片尺寸小于2M,最多可上传3张</div>
|
</template>
|
</el-upload>
|
</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" filterable multiple clearable>
|
<el-option
|
v-for="item in lists.spList.opList"
|
:key="item.uid"
|
:label="item.realName"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
|
</el-form-item>
|
</el-col>
|
<el-col :span="12" class="valueSelect">
|
<el-form-item label="关联其他特殊作业">
|
<!-- <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 lists.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="workDepId">
|
<el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="lists.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 filterable @change="getStartEndIds" clearable>
|
<el-option
|
v-for="item in lists.workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.headUids" :options="lists.workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>-->
|
</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 filterable clearable>
|
<el-option
|
v-for="item in lists.spList.jhList"
|
:key="item.uid"
|
:label="item.realName"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.guardianUids" :options="lists.spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>-->
|
</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 lists.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="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="workDetail.preparedByName">
|
<el-input
|
v-model="form.workDetail.preparedByName"
|
placeholder="请输入编制人姓名"
|
/>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="编制时间" prop="workDetail.preparedTime">
|
<el-date-picker
|
v-model="form.workDetail.preparedTime"
|
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-select v-model="form.riskIdentification" multiple clearable>
|
<el-option
|
v-for="item in lists.riskList"
|
:key="item.id"
|
:label="item.content"
|
:value="item.content"
|
/>
|
</el-select>
|
</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 v-loading="tabLoading">
|
<el-table-column type="index" label="序号" width="100px" align="center"/>
|
<el-table-column prop="measureContent" label="安全措施"/>
|
</el-table>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="安全措施确认人" prop="safetyMeasureUids">
|
<el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
|
<el-option
|
v-for="item in lists.workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>-->
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row style="display: flex;justify-content: center">
|
<el-table :data="form.approvalDepBasicList" style="width: 90%" border v-loading="tabLoading">
|
<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" label-width="0">
|
<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" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
|
<el-option
|
v-for="item in lists.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" filterable clearable>
|
<el-option
|
v-for="item in lists.workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.acceptUid" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>-->
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="现场开始结束确认人" prop="startOrEndUids">
|
<el-select v-model="form.startOrEndUids" filterable multiple clearable>
|
<el-option
|
v-for="item in lists.workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>-->
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="最终审批人" prop="lastApprover">
|
<el-select v-model="form.lastApprover" filterable clearable>
|
<el-option
|
v-for="item in lists.workerList"
|
:key="item.uid"
|
:label="item.username"
|
:value="item.uid"
|
/>
|
</el-select>
|
<!-- <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>-->
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
</el-form>
|
<div class="applyBtn">
|
<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
|
</div>
|
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
|
</el-dialog>
|
</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";
|
import {UploadProps} from "element-plus/es";
|
import axios from "axios";
|
import {userApi} from "/@/api/systemManage/user";
|
interface stateType {
|
form: Object,
|
workLevelList: Array<any>,
|
equipmentDialog: boolean,
|
showDialog: boolean,
|
props1:{},
|
depProps:{},
|
safetyMeasureBasicList: [],
|
fileList: Array<file>,
|
uploadUrl: string,
|
imgLimit: number,
|
tabLoading: boolean
|
}
|
interface file {
|
url: string;
|
}
|
export default defineComponent({
|
name: 'plateForm',
|
components: {workSelect},
|
props:['lists'],
|
setup(props: any, context: any) {
|
const userInfo = useUserInfo()
|
const { userInfos } = storeToRefs(userInfo);
|
const state = reactive<stateType>({
|
tabLoading: false,
|
showDialog: false,
|
equipmentDialog: false,
|
safetyMeasureBasicList: [],
|
form: {
|
id: null,
|
workType: 8,
|
workLevel: null,
|
applyDepId: null,
|
seDepId: null,
|
expStartTime: '',
|
expEndTime: '',
|
operatorUids: [],
|
headUids: [],
|
guardianUids: [],
|
workDepId: null,
|
workContent: '',
|
workLocation: '',
|
riskIdentification: [],
|
involveOtherWork: [],
|
safetyMeasureUids: [],
|
approvalDepBasicList: [],
|
acceptUid: null,
|
lastApprover: null,
|
startOrEndUids: [],
|
cameraIds: [],
|
workDetail: {
|
pipingName: '',
|
bpCode: '',
|
media: '',
|
temperature: null,
|
pressure: null,
|
bpMaterialQuality: '',
|
bpSpecification: '',
|
bpLocationMapPath: [],
|
bpLocationDesc: '',
|
preparedByName: '',
|
preparedTime: ''
|
},
|
remark: ''
|
},
|
workLevelList: [
|
{
|
label: "抽盲板作业",
|
value: 11
|
},
|
{
|
label: "堵盲板作业",
|
value: 12
|
}
|
],
|
props1:{
|
expandTrigger: 'hover',
|
label: 'depName',
|
value: 'depId',
|
emitPath: false
|
},
|
depProps:{
|
expandTrigger: 'hover',
|
label: 'depName',
|
value: 'depId',
|
checkStrictly: true,
|
emitPath: false
|
},
|
fileList: [],
|
imgLimit: 3,
|
uploadUrl: '',
|
});
|
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' }],
|
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' }],
|
lastApprover: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.pipingName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.bpCode": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.media": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.temperature": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.pressure": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.bpMaterialQuality": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.bpSpecification": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.bpLocationMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.bpLocationDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.preparedByName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
|
"workDetail.preparedTime": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
|
});
|
const workSelectRef = ref()
|
// 页面载入时执行方法
|
onMounted(() => {
|
getBasicData()
|
});
|
const openWorkSelect = ()=>{
|
workSelectRef.value.openDialog(state.form.involveOtherWork)
|
}
|
|
const getSelected = ()=>{
|
state.form.involveOtherWork = workSelectRef.value.selected
|
}
|
|
const openDialog = (row)=>{
|
Object.keys(state.form).forEach(key => {
|
if (row.hasOwnProperty(key)) {
|
state.form[key] = JSON.parse(JSON.stringify(row))[key];
|
}
|
})
|
state.form.operatorUids = row.operatorList.map(i=>i.userId)
|
state.form.headUids = row.headList.map(i=>i.userId)
|
state.form.analystUids = row.analystList.map(i=>i.userId)
|
state.form.guardianUids = row.guardianList.map(i=>i.userId)
|
state.form.involveOtherWork = row.otherWorkList.map(i=>i.otherWorkApplyId)
|
state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId)
|
state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId)
|
state.form.riskIdentification = row.riskIdentification.split(',')
|
state.form.approvalDepBasicList = row.approvalDepList.map((item)=>({
|
content: item.content,
|
approvalDepBasicId: item.approvalDepBasicId,
|
approvalUids: item.approvalPersonList.filter(j=>j.type == 5).map(i=>i.userId),
|
approvalType: item.approvalType
|
}))
|
state.form.acceptUid = row.acceptUser.userId
|
state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId)
|
state.form.lastApprover = row.lastApprover.userId
|
state.fileList = row.workDetail.bpLocationMapPath.split(',').map(item => {
|
return {
|
url: item,
|
name: item.match(/specialWork9step\/(.*?)\?/)[1]
|
}
|
})
|
state.form.workDetail.bpLocationMapPath = row.workDetail.bpLocationMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1])
|
state.showDialog = true
|
}
|
|
const clearFile = ()=>{
|
state.form = {
|
id: null,
|
workType: 8,
|
workLevel: null,
|
applyDepId: null,
|
seDepId: null,
|
expStartTime: '',
|
expEndTime: '',
|
operatorUids: [],
|
headUids: [],
|
guardianUids: [],
|
workDepId: null,
|
workContent: '',
|
workLocation: '',
|
riskIdentification: [],
|
involveOtherWork: [],
|
safetyMeasureUids: [],
|
approvalDepBasicList: [],
|
acceptUid: null,
|
lastApprover: null,
|
startOrEndUids: [],
|
cameraIds: [],
|
workDetail: {
|
pipingName: '',
|
bpCode: '',
|
media: '',
|
temperature: null,
|
pressure: null,
|
bpMaterialQuality: '',
|
bpSpecification: '',
|
bpLocationMapPath: [],
|
bpLocationDesc: '',
|
preparedByName: '',
|
preparedTime: ''
|
},
|
remark:''
|
}
|
state.showDialog = false
|
}
|
|
const findParent = ()=>{
|
state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId)
|
}
|
|
function findTopLevelId(tree, targetId) {
|
let topLevelId = null;
|
function findIdRecursive(node) {
|
if (node.id === targetId) {
|
topLevelId = node.id;
|
return true;
|
}
|
if (node.children) {
|
for (const child of node.children) {
|
if (findIdRecursive(child)) {
|
topLevelId = node.id;
|
return true;
|
}
|
}
|
}
|
return false;
|
}
|
tree.forEach(node => findIdRecursive(node));
|
return topLevelId;
|
}
|
|
// 获取基础数据
|
const getBasicData = async ()=>{
|
state.tabLoading = true
|
const res = await workApplyApi().getFormData(8)
|
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
|
});
|
}
|
state.tabLoading = false
|
};
|
|
const getStartEndIds = (value)=>{
|
// let selected = value
|
// if(selected.length>1){
|
// const temp = []
|
// for(let i of selected){
|
// const index = temp.findIndex(item => item[0] === i[0]);
|
// if (index !== -1) {
|
// temp[index] = i
|
// }else{
|
// temp.push(i)
|
// }
|
// }
|
// state.form.headUids = temp
|
// }
|
// state.form.startOrEndUids = state.form.headUids
|
// state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
|
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 transformArr = (arr: Array<any>)=>{
|
return arr.map((i)=>{
|
return {
|
uid: i[0],
|
certificate: i[1].split(',')[0],
|
certExpiredAt: i[1].split(',')[1],
|
certTypeName: i[1].split(',')[2]
|
}
|
})
|
}
|
|
const transform2Arr = (arr: Array<any>)=>{
|
return arr.map((i)=>{
|
return {
|
uid: i,
|
certificate: '',
|
certExpiredAt: '',
|
certTypeName: ''
|
}
|
})
|
}
|
|
const transform2Obj = (id:any)=>{
|
return {
|
uid: id,
|
certificate: '',
|
certExpiredAt: '',
|
certTypeName: ''
|
}
|
}
|
|
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.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',')
|
state.form.riskIdentification = state.form.riskIdentification.join(',')
|
const {...data} = state.form
|
data.operatorUids = transform2Arr(data.operatorUids)
|
data.headUids = transform2Arr(data.headUids)
|
data.guardianUids = transform2Arr(data.guardianUids)
|
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
|
data.startOrEndUids = transform2Arr(data.startOrEndUids)
|
data.acceptUid = transform2Obj(data.acceptUid)
|
data.lastApprover = transform2Obj(data.lastApprover)
|
const res = await workApplyApi().modPlateApply(data)
|
if (res.data.code === '200') {
|
ElMessage({
|
type: 'success',
|
message: '提交成功!'
|
});
|
formEl.resetFields()
|
state.form.guardianUids = []
|
state.form.involveOtherWork = []
|
getBasicData()
|
state.form.workDetail.bpLocationMapPath = []
|
state.fileList = []
|
clearFile()
|
context.emit('refresh')
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
|
state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',')
|
state.form.riskIdentification = state.form.riskIdentification.split(',')
|
}
|
} else {
|
console.log('error submit!', fields)
|
ElMessage({
|
type: 'warning',
|
message: '有表单内容未完成,请再次检查完善'
|
})
|
}
|
})
|
}
|
|
const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
|
console.log(uploadFile);
|
};
|
|
const getUploadUrl = async (rawFile: any) => {
|
// const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0'
|
if(rawFile.size / 1024 / 1024 > 2){
|
ElMessage({
|
type: 'warning',
|
message: '文件大小不能超过2M。'
|
});
|
return Promise.reject(false)
|
}else{
|
const res = await workApplyApi().getUpload9Url(rawFile.name);
|
state.form.workDetail.bpLocationMapPath.push(res.data.data.fileName)
|
state.uploadUrl = res.data.data.uploadUrl;
|
}
|
};
|
|
const upload = async (params: any) => {
|
let reader = new FileReader();
|
reader.readAsArrayBuffer(params.file);
|
reader.onload = async () => {
|
axios
|
.put(state.uploadUrl, reader.result, {
|
header: { 'Content-Type': 'multipart/form-data' }
|
})
|
.then(() => {
|
// if (state.fileList.length === 2) {
|
// state.fileList.splice(0, 1);
|
// }
|
});
|
};
|
};
|
|
const beforeRemove = (file: {}, fileList: []) => {
|
if (file && file.status === "success") {
|
const result = new Promise((resolve, reject) => {
|
ElMessageBox.confirm('此操作将彻底删除该图片,不可恢复,是否继续?', '提示', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
})
|
.then(() => {
|
// console.log(state.workDetail.bpLocationMapPath,'path')
|
const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath))
|
fileList.map((item, index) => {
|
if (item.uid === file.uid) {
|
fileList.splice(index, 1)
|
state.form.workDetail.bpLocationMapPath.splice(index, 1)
|
// 请求删除接口
|
deletePic(list[index])
|
}
|
})
|
})
|
.catch(() => {
|
reject(false);
|
});
|
});
|
return result;
|
}
|
};
|
|
// 删除图片接口
|
const deletePic = async(fileName:string)=>{
|
const res = await workApplyApi().deleteFile({fileName: fileName})
|
if (res.data.code === '200') {
|
ElMessage({
|
type: 'success',
|
message: '删除成功!'
|
});
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
}
|
}
|
|
const showTip =()=>{
|
ElMessage({
|
type: 'warning',
|
message: '超出文件上传数量'
|
});
|
}
|
|
// 折线图
|
const renderMenu = async (value: string) => {
|
Session.set('projectId',value)
|
userInfos.value.projectId = value
|
await initBackEndControlRoutes();
|
};
|
return {
|
renderMenu,
|
getBasicData,
|
getStartEndIds,
|
getSafetyIds,
|
isFirstRow,
|
submitForm,
|
findParent,
|
handlePreview,
|
getUploadUrl,
|
upload,
|
showTip,
|
beforeRemove,
|
openWorkSelect,
|
getSelected,
|
openDialog,
|
clearFile,
|
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>
|