From 9673c181dd7b3882cbde386422ffb9a2b1949693 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Mon, 25 Mar 2024 10:02:42 +0800
Subject: [PATCH] Default Changelist
---
src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue | 915 +++++++
src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue | 31
src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 26
src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 62
src/views/newHome/index.vue | 1
src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue | 783 ++++++
src/views/specialWorkSystem/specialIndex/index.vue | 207
src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue | 920 +++++++
src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue | 796 ++++++
src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue | 62
src/api/specialWorkSystem/workApply/index.ts | 67
src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 188 +
src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue | 5
src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue | 62
src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue | 62
src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue | 742 +++++
src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue | 706 +++++
src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue | 788 ++++++
src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue | 967 +++++++
src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue | 62
src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue | 62
src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue | 5
src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue | 66
src/api/specialWorkSystem/specialIndex/index.ts | 7
src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue | 64
25 files changed, 7,297 insertions(+), 359 deletions(-)
diff --git a/src/api/specialWorkSystem/specialIndex/index.ts b/src/api/specialWorkSystem/specialIndex/index.ts
index da21744..b40b8fd 100644
--- a/src/api/specialWorkSystem/specialIndex/index.ts
+++ b/src/api/specialWorkSystem/specialIndex/index.ts
@@ -35,6 +35,13 @@
method: 'post',
data: data
});
+ },
+ getWorkWarning: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/statistic/work/warning`,
+ method: 'post',
+ data: data
+ });
}
};
}
diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts
index 511d8d8..83b5d0d 100644
--- a/src/api/specialWorkSystem/workApply/index.ts
+++ b/src/api/specialWorkSystem/workApply/index.ts
@@ -81,9 +81,23 @@
data: data
});
},
+ modFireApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hot`,
+ method: 'post',
+ data: data
+ });
+ },
submitSpaceApply: (data: object) => {
return request({
url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/confinedspace`,
+ method: 'post',
+ data: data
+ });
+ },
+ modSpaceApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/confinedspace`,
method: 'post',
data: data
});
@@ -95,9 +109,23 @@
data: data
});
},
+ modHoistApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hoisting`,
+ method: 'post',
+ data: data
+ });
+ },
submitGroundApply: (data: object) => {
return request({
url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/groundBreaking`,
+ method: 'post',
+ data: data
+ });
+ },
+ modGroundApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/groundBreaking`,
method: 'post',
data: data
});
@@ -109,9 +137,23 @@
data: data
});
},
+ modBrokenApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/brokenCircuit`,
+ method: 'post',
+ data: data
+ });
+ },
submitHeightApply: (data: object) => {
return request({
url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/hight`,
+ method: 'post',
+ data: data
+ });
+ },
+ modHeightApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/hight`,
method: 'post',
data: data
});
@@ -123,6 +165,13 @@
data: data
});
},
+ modPowerApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/temporaryPower`,
+ method: 'post',
+ data: data
+ });
+ },
submitPlateApply: (data: object) => {
return request({
url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/blindPlatePlugging`,
@@ -130,7 +179,14 @@
data: data
});
},
-
+ modPlateApply: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/work/mod/blindPlatePlugging`,
+ method: 'post',
+ data: data
+ });
+ },
+
// 所有记录列表
getApplyList: (data: object) => {
return request({
@@ -156,6 +212,15 @@
});
},
+ // 获取所有风险辨识
+ getAllRiskIdentity: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/specialwork9step/risk/manage/select`,
+ method: 'post',
+ data: data,
+ });
+ },
+
// 导出打印接口
postPrinting: (data: object) => {
return request({
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
index 29526a9..ddb5bb7 100644
--- a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
@@ -4,6 +4,14 @@
<el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
<el-row :gutter="35">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="" prop="type">
+ <el-radio-group v-model="form.type">
+ <el-radio :label="1">安全评价报告</el-radio>
+ <el-radio :label="2">安全三同时</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="报告名称" prop="name">
<el-input v-model.trim="form.name" placeholder="报告名称" clearable></el-input>
</el-form-item>
@@ -26,6 +34,14 @@
<div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传1张</div>
</template>
</el-upload>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio label="0">未删除</el-radio>
+ <el-radio label="1">已删除</el-radio>
+ </el-radio-group>
</el-form-item>
</el-col>
</el-row>
@@ -55,10 +71,12 @@
isShowDialog: boolean;
form: {
uuid: string
+ type: null | number
name: string
remarks: string
evaluateTime: string
files: string
+ deleted: string
}
rules:{},
fileList: [],
@@ -75,12 +93,15 @@
isShowDialog: false,
form: {
uuid: '',
+ type: 1,
name: '',
remarks: '',
evaluateTime: '',
- files: ''
+ files: '',
+ deleted: '0'
},
rules:{
+ type: [{ required: true, message: '请选择报告类型', trigger: 'blur'}],
name: [{ required: true, message: '请填写报告名称', trigger: 'blur'}],
remarks: [{ required: true, message: '请填写备注', trigger: 'blur'}],
evaluateTime: [{ required: true, message: '请选择评价时间', trigger: 'blur'}]
@@ -104,19 +125,23 @@
state.title = '新增上报';
state.form = {
uuid: '',
+ type: 1,
name: '',
remarks: '',
evaluateTime: '',
- files: ''
+ files: '',
+ deleted: '0'
}
}else{
state.title = '重新上报';
state.form = {
+ type: 1,
uuid: data.uuid,
name: '',
remarks: '',
evaluateTime: '',
- files: ''
+ files: '',
+ deleted: '0'
}
}
state.fileList = []
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
index bf72612..5cdcb9e 100644
--- a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
@@ -12,6 +12,11 @@
<el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
<el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
<el-table-column prop="name" label="报告名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="type" label="报告类型" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.type == 1 ? '安全评价报告':scope.row.type == 2 ? '安全三同时':'--'}}
+ </template>
+ </el-table-column>
<el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column>
<el-table-column prop="evaluateTime" label="评价时间" show-overflow-tooltip></el-table-column>
<el-table-column prop="files" label="附件" show-overflow-tooltip>
diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue
index 5e11dcb..8de963d 100644
--- a/src/views/newHome/index.vue
+++ b/src/views/newHome/index.vue
@@ -362,6 +362,7 @@
// router.push({
// name: "warningScreen"
// });
+
window.open('http://39.104.85.193:8585/');
};
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue
new file mode 100644
index 0000000..aa9da97
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue
@@ -0,0 +1,915 @@
+<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-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="workDetail.involvedDepIds">
+ <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :props="depProps2" :options="lists.departList" :show-all-levels="false"/>
+ </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.bcReason">
+ <el-input
+ v-model="form.workDetail.bcReason"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入断路原因"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="监护人" prop="guardianUids">
+ <el-select v-model="form.guardianUids" filterable multiple 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-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="作业负责人" prop="headUids">
+ <el-select v-model="form.headUids" filterable multiple @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-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-row>
+ <el-row>
+ <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-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="workDetail.bcExplain">
+ <el-input
+ v-model="form.workDetail.bcExplain"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入断路地段相关说明并在右方上传示意图"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="断路地段示意图" prop="workDetail.bcPath">
+ <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :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="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-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-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" 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>-->
+<!-- <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 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="workDetail.signUid">
+ <el-select v-model="form.workDetail.signUid" filterable clearable>
+ <el-option
+ v-for="item in lists.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="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,
+ equipmentDialog: boolean,
+ showDialog: boolean
+ props1:{},
+ depProps:{},
+ depProps2:{},
+ safetyMeasureBasicList: [],
+ fileList: Array<file>,
+ uploadUrl: string,
+ dialogVisible: Boolean,
+ tabLoading: Boolean,
+ dialogImageUrl: string | null,
+ imgLimit: number,
+ }
+ interface file {
+ url: string;
+ }
+ export default defineComponent({
+ name: 'brokenDialog',
+ 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: 5,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ involvedDepIds: [],
+ bcReason: '',
+ bcExplain: '',
+ bcPath: [],
+ signUid: null
+ },
+ remark: ''
+ },
+ props1:{
+ expandTrigger: 'hover',
+ label: 'depName',
+ value: 'depId',
+ emitPath: false
+ },
+ depProps:{
+ expandTrigger: 'hover',
+ label: 'depName',
+ value: 'depId',
+ checkStrictly: true,
+ emitPath: false
+ },
+ depProps2:{
+ expandTrigger: 'hover',
+ label: 'depName',
+ value: 'depId',
+ checkStrictly: true,
+ emitPath: false,
+ multiple: true
+ },
+ fileList: [],
+ imgLimit: 3,
+ uploadUrl: '',
+ dialogVisible: false,
+ dialogImageUrl: null
+ });
+ 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' }],
+ 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.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.signUid": [{ 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.form.workDetail.involvedDepIds = row.workDetail.involvedDepIds.split(',').map(i=>Number(i))
+ state.fileList = row.workDetail.bcPath.split(',').map(item => {
+ return {
+ url: item,
+ name: item.match(/specialWork9step\/(.*?)\?/)[1]
+ }
+ })
+ state.form.workDetail.bcPath = row.workDetail.bcPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1])
+ state.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 5,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ involvedDepIds: [],
+ bcReason: '',
+ bcExplain: '',
+ bcPath: [],
+ signUid: null
+ },
+ 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(5)
+ 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 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.involvedDepIds = state.form.workDetail.involvedDepIds.join(',')
+ state.form.workDetail.bcPath = state.form.workDetail.bcPath.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().modBrokenApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ state.form.workDetail.bcPath = []
+ state.fileList = []
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',')
+ state.form.workDetail.bcPath = state.form.workDetail.bcPath.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 handlePictureCardPreview = (uploadFile: { url: string }) => {
+ state.dialogImageUrl = uploadFile.url!;
+ state.dialogVisible = true;
+ };
+
+ 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.bcPath.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.bcPath,'path')
+ const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath))
+ fileList.map((item, index) => {
+ if (item.uid === file.uid) {
+ fileList.splice(index, 1)
+ state.form.workDetail.bcPath.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,
+ handlePictureCardPreview,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue
new file mode 100644
index 0000000..fdf1be0
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue
@@ -0,0 +1,783 @@
+<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.workMethod">
+ <el-input
+ v-model="form.workDetail.workMethod"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入动火方式"
+ />
+ </el-form-item>
+ </el-col>
+ <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-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="analystUids">
+ <el-select v-model="form.analystUids" 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.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :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 :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="guardianUids">
+ <el-select v-model="form.guardianUids" filterable multiple 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="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-select v-model="form.riskIdentification" multiple clearable>
+ <el-option
+ v-for="item in lists.riskList"
+ :key="item.content"
+ :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-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" 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>-->
+<!-- <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 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" plain v-throttle @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, onUpdated } 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 {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ workLevelList: Array<any>,
+ equipmentDialog: boolean,
+ tabLoading: boolean
+ showDialog: boolean
+ props1:{}
+ depProps:{}
+ safetyMeasureBasicList: []
+ }
+ export default defineComponent({
+ name: 'fireDialog',
+ 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: 1,
+ workLevel: null,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ workMethod: ''
+ },
+ remark: ''
+ },
+ workLevelList: [
+ {
+ label: "一级动火作业",
+ value: 1
+ },
+ {
+ label: "二级动火作业",
+ value: 2
+ },
+ {
+ label: "特级动火作业",
+ value: 3
+ }
+ ],
+ props1:{
+ 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' }],
+ 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.workMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+ });
+ const workSelectRef = ref()
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ getBasicData()
+ })
+
+ onUpdated(()=>{
+ console.log('false loading')
+ })
+
+ 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.riskIdentification = row.riskIdentification.split(',')
+ state.form.cameraIds = row.workApprovalDeviceList.map(i=>i.deviceId)
+ state.form.safetyMeasureUids = row.safetyMeasureList.map(i=>i.userId)
+ 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
+ console.log(state.form,'form')
+ state.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 1,
+ workLevel: null,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ workMethod: ''
+ },
+ remark: ''
+ }
+ state.showDialog = false
+ }
+
+ const openWorkSelect = ()=>{
+ workSelectRef.value.openDialog(state.form.involveOtherWork)
+ }
+
+ const getSelected = ()=>{
+ state.form.involveOtherWork = workSelectRef.value.selected
+ }
+
+ const findParent = ()=>{
+ // state.form.applyDepId = state.form.depIdList[state.form.depIdList.length - 1]
+ // state.form.seDepId = state.form.depIdList[0]
+ state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId)
+ }
+
+ // 获取基础数据
+ const getBasicData = async ()=>{
+ state.tabLoading = true
+ const res = await workApplyApi().getFormData(1)
+ 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 transform2EObj = (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.riskIdentification = state.form.riskIdentification.join(',')
+ const {...data} = state.form
+ data.operatorUids = transform2Arr(data.operatorUids)
+ data.headUids = transform2Arr(data.headUids)
+ // data.analystUids = transformArr(data.analystUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
+ data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
+ data.startOrEndUids = transform2Arr(data.startOrEndUids)
+ data.acceptUid = transform2EObj(data.acceptUid)
+ data.lastApprover = transform2EObj(data.lastApprover)
+ const res = await workApplyApi().modFireApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ ElMessage({
+ type: 'warning',
+ message: '有表单内容未完成,请再次检查完善'
+ })
+ }
+ })
+ }
+
+ 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 renderMenu = async (value: string) => {
+ Session.set('projectId',value)
+ userInfos.value.projectId = value
+ await initBackEndControlRoutes();
+ };
+ return {
+ renderMenu,
+ getBasicData,
+ getStartEndIds,
+ getSafetyIds,
+ isFirstRow,
+ submitForm,
+ findParent,
+ openWorkSelect,
+ getSelected,
+ openDialog,
+ workSelectRef,
+ clearFile,
+ 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;
+ position: relative;
+ }
+ .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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue
new file mode 100644
index 0000000..cfc65e5
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue
@@ -0,0 +1,920 @@
+<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-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="operatorUids">
+ <el-select v-model="form.operatorUids" 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-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="workLocation">
+ <el-input
+ v-model="form.workLocation"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入作业地点"
+ />
+ </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="guardianUids">
+ <el-select v-model="form.guardianUids" filterable multiple 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="workDetail.gbDesc">
+ <el-input
+ v-model="form.workDetail.gbDesc"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入作业范围、内容、方式(包括深度、面积)并在右方上传简图"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="作业简图" prop="workDetail.gbPath">
+ <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :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="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-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-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" 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>-->
+<!-- <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 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="workDetail.signUid">
+ <el-select v-model="form.workDetail.signUid" filterable clearable>
+ <el-option
+ v-for="item in lists.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="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 v-model="dialogVisible">
+ <img w-full :src="dialogImageUrl" alt="Preview Image" />
+ </el-dialog>
+ </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, UploadProps, UploadUserFile} 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 axios from "axios";
+ import {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ equipmentDialog: boolean,
+ showDialog: boolean
+ props1:{},
+ depProps:{},
+ safetyMeasureBasicList: [],
+ fileList: Array<file>,
+ uploadUrl: string,
+ dialogVisible: Boolean,
+ dialogImageUrl: string | null,
+ imgLimit: number
+ tabLoading: boolean
+ }
+ interface file {
+ url: string;
+ }
+ export default defineComponent({
+ name: 'groundDialog',
+ 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: 4,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ gbDesc: '',
+ gbPath: [],
+ signUid: null
+ },
+ remark: ''
+ },
+ props1:{
+ expandTrigger: 'hover',
+ label: 'depName',
+ value: 'depId',
+ emitPath: false
+ },
+ depProps:{
+ expandTrigger: 'hover',
+ label: 'depName',
+ value: 'depId',
+ checkStrictly: true,
+ emitPath: false
+ },
+ fileList: [],
+ imgLimit: 3,
+ uploadUrl: '',
+ dialogVisible: false,
+ dialogImageUrl: null,
+ });
+ 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.gbDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.gbPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.signUid": [{ 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.gbPath.split(',').map(item => {
+ return {
+ url: item,
+ name: item.match(/specialWork9step\/(.*?)\?/)[1]
+ }
+ })
+ state.form.workDetail.gbPath = row.workDetail.gbPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1])
+ state.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 4,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ gbDesc: '',
+ gbPath: [],
+ signUid: null
+ },
+ 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(4)
+ 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.gbPath = state.form.workDetail.gbPath.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().modGroundApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ state.form.workDetail.gbPath = []
+ state.fileList = []
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ ElMessage({
+ type: 'warning',
+ message: '有表单内容未完成,请再次检查完善'
+ })
+ }
+ })
+ }
+
+ 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 handlePreview: UploadProps['onPreview'] = (uploadFile) => {
+ console.log(uploadFile);
+ };
+
+ const handlePictureCardPreview = (uploadFile: { url: string }) => {
+ state.dialogImageUrl = uploadFile.url!;
+ state.dialogVisible = true;
+ };
+
+ const getUploadUrl = async(rawFile: any) => {
+ 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.gbPath.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.gbPath,'path')
+ const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath))
+ fileList.map((item, index) => {
+ if (item.uid === file.uid) {
+ fileList.splice(index, 1)
+ state.form.workDetail.gbPath.splice(index, 1)
+ // 请求删除接口
+ deletePic(list[index])
+ }
+ })
+ console.log(state.form.workDetail.gbPath, 'gbpath')
+ })
+ .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,
+ handlePictureCardPreview,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue
new file mode 100644
index 0000000..40edfb2
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue
@@ -0,0 +1,742 @@
+<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="作业高度(m)" prop="workDetail.hight">
+ <el-input
+ v-model="form.workDetail.hight"
+ placeholder="请输入作业高度"
+ type="number"
+ />
+ </el-form-item>
+ </el-col>
+ <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-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" filterable multiple @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" filterable multiple 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" 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="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="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="安全措施确认人" filterable prop="safetyMeasureUids">
+ <el-select v-model="form.safetyMeasureUids" 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" filterable 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 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" 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="现场开始结束确认人" filterable prop="startOrEndUids">
+ <el-select v-model="form.startOrEndUids" 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" 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 {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ workLevelList: Array<any>,
+ equipmentDialog: boolean,
+ showDialog: boolean
+ props1:{},
+ depProps:{},
+ safetyMeasureBasicList: []
+ tabLoading: boolean
+ }
+ export default defineComponent({
+ name: 'heightDialog',
+ 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: 6,
+ 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: {
+ hight: ''
+ },
+ remark: ''
+ },
+ workLevelList: [
+ {
+ label: "一级高处作业",
+ value: 4
+ },
+ {
+ label: "二级高处作业",
+ value: 5
+ },
+ {
+ label: "三级高处作业",
+ value: 6
+ },
+ {
+ label: "特级高处作业",
+ value: 7
+ }
+ ],
+ props1:{
+ 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' }],
+ 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.hight": [{ 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.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 6,
+ 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: {
+ hight: ''
+ },
+ 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(6)
+ 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 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.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().modHeightApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ ElMessage({
+ type: 'warning',
+ message: '有表单内容未完成,请再次检查完善'
+ })
+ }
+ })
+ }
+
+ 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,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue
new file mode 100644
index 0000000..dab9391
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue
@@ -0,0 +1,796 @@
+<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="吊物重量(t)" prop="workDetail.weightMass">
+ <el-input
+ v-model="form.workDetail.weightMass"
+ placeholder="请输入吊物重量"
+ type="number"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="吊具名称" prop="workDetail.hoistingToolName">
+ <el-input
+ v-model="form.workDetail.hoistingToolName"
+ placeholder="请输入吊具名称"
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <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="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="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-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="workDetail.solicitorUids">
+ <el-select v-model="form.workDetail.solicitorUids" filterable multiple clearable>
+ <el-option
+ v-for="item in lists.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="关联其他特殊作业">
+<!-- <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="guardianUids">
+ <el-select v-model="form.guardianUids" filterable multiple 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="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-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-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" 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>-->
+<!-- <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 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 {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ workLevelList: Array<any>
+ equipmentDialog: boolean
+ showDialog: boolean
+ props1:{}
+ depProps:{}
+ safetyMeasureBasicList: []
+ tabLoading: boolean
+ }
+ export default defineComponent({
+ name: 'hoistDialog',
+ 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: 3,
+ workLevel: null,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ hoistingToolName: '',
+ weightMass: '',
+ solicitorUids: []
+ },
+ remark:''
+ },
+ workLevelList: [
+ {
+ label: "一级吊装作业",
+ value: 8
+ },
+ {
+ label: "二级吊装作业",
+ value: 9
+ },
+ {
+ label: "三级吊装作业",
+ value: 10
+ }
+ ],
+ props1:{
+ 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' }],
+ 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.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.weightMass": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.solicitorUids": [{ 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.workDetail.solicitorUids = row.workDetail.solicitorUids.split(',').map(i=>Number(i))
+ 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.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 3,
+ workLevel: null,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ hoistingToolName: '',
+ weightMass: '',
+ solicitorUids: []
+ },
+ 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(3)
+ 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.solicitorUids = state.form.workDetail.solicitorUids.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().modHoistApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ 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,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
index 964fca9..ecea5c2 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
@@ -14,7 +14,7 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="风险研判报告记录附件" prop="judgePicturePath">
+ <el-form-item label="风险研判报告记录附件">
<el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :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>
@@ -96,8 +96,7 @@
judgePicturePath: []
},
jsaFormRules: {
- judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }],
- judgePicturePath: [{ required: true, message: '请上传风险研判报告附件', trigger: 'blur' }]
+ judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }]
},
fileList: [],
imgLimit: 3,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue
new file mode 100644
index 0000000..6be01e2
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue
@@ -0,0 +1,967 @@
+<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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue
new file mode 100644
index 0000000..f05b607
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue
@@ -0,0 +1,788 @@
+<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-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" filterable multiple clearable>
+ <el-option
+ v-for="item in lists.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" 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-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="analystUids">
+ <el-select v-model="form.analystUids" 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.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :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="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 filterable 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="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-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-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" 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>-->
+<!-- <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 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" plain v-throttle @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 {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ equipmentDialog: boolean,
+ showDialog: boolean
+ props1:{},
+ depProps:{},
+ safetyMeasureBasicList: []
+ tabLoading: boolean
+ }
+ export default defineComponent({
+ name: 'powerDialog',
+ components: {workSelect},
+ props:['lists'],
+ setup(props: any, context: any) {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const state = reactive<stateType>({
+ tabLoading: false,
+ equipmentDialog: false,
+ showDialog: false,
+ safetyMeasureBasicList: [],
+ form: {
+ id: null,
+ workType: 7,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ powerAccessPoint: '',
+ workingVoltage: '',
+ equipmentAndPower: '',
+ electricityUids: []
+ },
+ remark: ''
+ },
+ props1:{
+ 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' }],
+ 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.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(() => {
+ 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.workDetail.electricityUids = row.workDetail.electricityUids.split(',').map(i=>Number(i))
+ state.form.acceptUid = row.acceptUser.userId
+ state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId)
+ state.form.lastApprover = row.lastApprover.userId
+ state.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 7,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ powerAccessPoint: '',
+ workingVoltage: '',
+ equipmentAndPower: '',
+ electricityUids: []
+ },
+ 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(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
+ });
+ }
+ 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 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.electricityUids = state.form.workDetail.electricityUids.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
+ const {...data} = state.form
+ data.operatorUids = transform2Arr(data.operatorUids)
+ data.headUids = transform2Arr(data.headUids)
+ // data.analystUids = transformArr(data.analystUids)
+ 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().modPowerApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ 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,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue
new file mode 100644
index 0000000..cd7a065
--- /dev/null
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue
@@ -0,0 +1,706 @@
+<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-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="受限空间名称" prop="workDetail.csName">
+ <el-input
+ v-model="form.workDetail.csName"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入受限空间名称"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="原有介质名称" prop="workDetail.csOriginalName">
+ <el-input
+ v-model="form.workDetail.csOriginalName"
+ :autosize="{ minRows: 1 }"
+ type="textarea"
+ placeholder="请输入受限空间原有介质名称"
+ />
+ </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="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-row>
+ <el-row>
+ <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="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="analystUids">
+ <el-select v-model="form.analystUids" 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.analystUids" :options="lists.workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :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 :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="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="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-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" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</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, onUnmounted} 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 {userApi} from "/@/api/systemManage/user";
+ interface stateType {
+ form: Object,
+ equipmentDialog: boolean,
+ showDialog: boolean
+ props1:{},
+ depProps:{},
+ safetyMeasureBasicList: []
+ tabLoading: boolean
+ }
+ export default defineComponent({
+ name: 'spaceDialog',
+ 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: 2,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ csName: '',
+ csOriginalName: ''
+ },
+ remark: ''
+ },
+ props1:{
+ 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' }],
+ 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.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+ "workDetail.csOriginalName": [{ 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.showDialog = true
+ }
+
+ const clearFile = ()=>{
+ state.form = {
+ id: null,
+ workType: 2,
+ workLevel: 0,
+ applyDepId: null,
+ seDepId: null,
+ expStartTime: '',
+ expEndTime: '',
+ operatorUids: [],
+ headUids: [],
+ analystUids: [],
+ guardianUids: [],
+ workDepId: null,
+ workContent: '',
+ workLocation: '',
+ riskIdentification: [],
+ involveOtherWork: [],
+ safetyMeasureUids: [],
+ approvalDepBasicList: [],
+ acceptUid: null,
+ lastApprover: null,
+ startOrEndUids: [],
+ cameraIds: [],
+ workDetail: {
+ csName: '',
+ csOriginalName: ''
+ },
+ 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(2)
+ 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)=>{
+ 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 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.riskIdentification = state.form.riskIdentification.join(',')
+ const {...data} = state.form
+ data.operatorUids = transform2Arr(data.operatorUids)
+ data.headUids = transform2Arr(data.headUids)
+ // data.analystUids = transformArr(data.analystUids)
+ 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().modSpaceApply(data)
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '提交成功!'
+ });
+ formEl.resetFields()
+ state.form.guardianUids = []
+ state.form.involveOtherWork = []
+ getBasicData()
+ clearFile()
+ context.emit('refresh')
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
+ }
+ } else {
+ console.log('error submit!', fields)
+ 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,
+ 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>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
index 8502469..7cfecd0 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
@@ -98,8 +98,8 @@
<span v-if="scope.row.status == -1">已废止</span>
<el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">作废</el-button>
<el-button v-if="scope.row.status !== -1" link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
-<!-- <el-button link type="success" size="small" :icon="Finished">修改</el-button>-->
- <el-button v-if="scope.row.status == 1" link type="success" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button>
+ <el-button link type="primary" size="small" v-throttle :icon="Edit" @click="openEdit(scope.row)">修改</el-button>
+ <el-button link type="success" v-throttle v-if="scope.row.status == 0 || scope.row.status == 1" size="small" :icon="Download" @click="checkTicket(scope.row)">正式办票</el-button>
<!-- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>-->
</template>
</el-table-column>
@@ -122,13 +122,19 @@
<detail-log :type=dialogType :statusList=statusList :details = details></detail-log>
<template #footer>
<span class="dialog-footer">
- <el-button type="primary" @click="dialogDetails = false"
- >确认</el-button
- >
+ <el-button type="primary" @click="dialogDetails = false">确认</el-button>
</span>
</template>
</el-dialog>
<report-log ref="reportDialogRef" @refresh="getListByPage"></report-log>
+ <fire-dialog ref="fireRef" :lists="lists" @refresh="getListByPage"></fire-dialog>
+ <plate-dialog ref="plateRef" :lists="lists" @refresh="getListByPage"></plate-dialog>
+ <space-dialog ref="spaceRef" :lists="lists" @refresh="getListByPage"></space-dialog>
+ <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getListByPage"></hoist-dialog>
+ <ground-dialog ref="groundRef" :lists="lists" @refresh="getListByPage"></ground-dialog>
+ <broken-dialog ref="brokenRef" :lists="lists" @refresh="getListByPage"></broken-dialog>
+ <height-dialog ref="heightRef" :lists="lists" @refresh="getListByPage"></height-dialog>
+ <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog>
</div>
</template>
@@ -175,6 +181,7 @@
searPara: {}
timeRange: Array<string>;
dep4List: Array<type>;
+ lists: {}
}
interface type {
id: number;
@@ -188,13 +195,29 @@
name: 'myApply',
components: {
detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')),
- reportLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue'))
+ reportLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue')),
+ fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')),
+ plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')),
+ spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')),
+ hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')),
+ groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')),
+ brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')),
+ heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')),
+ powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue'))
},
setup() {
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
const router = useRouter();
const reportDialogRef = ref();
+ const fireRef = ref()
+ const plateRef = ref()
+ const spaceRef = ref()
+ const hoistRef = ref()
+ const groundRef = ref()
+ const brokenRef = ref()
+ const heightRef = ref()
+ const powerRef = ref()
const state = reactive<stateType>({
pageIndex1: 1,
pageSize1: 10,
@@ -237,6 +260,15 @@
{ id: 7, name: '临时用电作业' },
{ id: 8, name: '盲板抽堵作业' }
],
+ lists: {
+ workerList: [],
+ departList: [],
+ departList2: [],
+ deviceList: [],
+ otherWorks: [],
+ spList: [],
+ riskList: []
+ },
dep4List: [
{id:49,name:'电石事业部'},
{id:50,name:'电力事业部'},
@@ -290,6 +322,121 @@
}
]
});
+
+ // 页面载入时执行方法
+ onMounted(() => {
+ getListByPage();
+ getAllDepartment()
+ spWorker()
+ getAll()
+ getAllDevice()
+ getAllRisks()
+ getOtherWork()
+ });
+
+ const openEdit = (row)=>{
+ if(row.workType == 1){
+ fireRef.value.openDialog(row)
+ }
+ if(row.workType == 2){
+ spaceRef.value.openDialog(row)
+ }
+ if(row.workType == 3){
+ hoistRef.value.openDialog(row)
+ }
+ if(row.workType == 4){
+ groundRef.value.openDialog(row)
+ }
+ if(row.workType == 5){
+ brokenRef.value.openDialog(row)
+ }
+ if(row.workType == 6){
+ heightRef.value.openDialog(row)
+ }
+ if(row.workType == 7){
+ powerRef.value.openDialog(row)
+ }
+ if(row.workType == 8){
+ plateRef.value.openDialog(row)
+ }
+ }
+
+ const spWorker = async ()=>{
+ for(let id of ['17','18','19']){
+ const res = await workApplyApi().getSpList({roleId: id})
+ if(id == '17'){
+ if (res.data.code === '200') {
+ state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ if(id == '18'){
+ if (res.data.code === '200') {
+ state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ if(id == '19'){
+ if (res.data.code === '200') {
+ state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ }
+ }
+
+ // 获取用户列表
+ const getAll = async ()=>{
+ const res = await workApplyApi().getAllUsers()
+ if (res.data.code === '200') {
+ state.lists.workerList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ // 获取设备列表
+ const getAllDevice = async ()=>{
+ const res = await workApplyApi().getAllDevices()
+ if (res.data.code === '200') {
+ state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
+ // 获取设备列表
+ const getAllRisks = async ()=>{
+ const res = await workApplyApi().getAllRiskIdentity()
+ if (res.data.code === '200') {
+ // state.allDevices = JSON.parse(JSON.stringify(res.data.data))
+ state.lists.riskList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
const giveTime = () => {
if (state.timeRange && state.timeRange !== null) {
state.searPara.startTime = state.timeRange[0];
@@ -321,12 +468,25 @@
if (res.data.code === '200') {
state.departmentList = JSON.parse(JSON.stringify(res.data.data))
recursion(state.departmentList);
+ state.lists.departList = JSON.parse(JSON.stringify(res.data.data))
+ state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50)
} else {
ElMessage({
type: 'warning',
message: res.data.msg
});
}
+ };
+ const getOtherWork = async () => {
+ let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null});
+ if (res.data.code === '200') {
+ state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
};
const recursion = (value: any) => {
@@ -537,12 +697,6 @@
await initBackEndControlRoutes();
};
- // 页面载入时执行方法
- onMounted(() => {
- getListByPage();
- getAllDepartment()
- });
-
return {
View,
Edit,
@@ -552,6 +706,16 @@
Finished,
Download,
reportDialogRef,
+ fireRef,
+ plateRef,
+ spaceRef,
+ hoistRef,
+ groundRef,
+ brokenRef,
+ heightRef,
+ powerRef,
+ openEdit,
+ getAllDepartment,
checkTicket,
giveTime,
reLoadData,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
index f54fabe..f1f264d 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
@@ -56,15 +56,15 @@
</el-col>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
-<!-- <el-option-->
-<!-- v-for="item in 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-select v-model="form.guardianUids" filterable multiple 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-row>
@@ -84,15 +84,15 @@
</el-col>
<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 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-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-row>
@@ -188,12 +188,14 @@
<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-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">
@@ -263,7 +265,7 @@
<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-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>
@@ -344,7 +346,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -411,7 +413,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -736,10 +738,11 @@
// }
state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.join(',')
state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -764,6 +767,7 @@
state.form.involveOtherWork = state.form.involveOtherWork.split(',')
state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',')
state.form.workDetail.bcPath = state.form.workDetail.bcPath.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
index 36c0196..6f9bb00 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
@@ -56,15 +56,15 @@
</el-col>
<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 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-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-row>
@@ -114,15 +114,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
-<!-- <el-option-->
-<!-- v-for="item in 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-select v-model="form.guardianUids" filterable multiple 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">
@@ -178,12 +178,14 @@
<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-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">
@@ -253,7 +255,7 @@
<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-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>
@@ -379,7 +381,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -684,10 +686,12 @@
if(type == '监护人'){state.form.guardianUids = temp}
if(type == '确认人'){state.form.safetyMeasureUids = temp}
if(type == '结束人'){state.form.startOrEndUids = temp}
+ console.log(value,state.form.operatorUids,55)
}
}
const submitForm = async (formEl: FormInstance | undefined) => {
+ console.log(state.form.operatorUids,666)
if (!formEl) return
await formEl.validate(async (valid, fields) => {
if (valid) {
@@ -703,11 +707,12 @@
// if(Array.isArray(state.form.involveOtherWork)){
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
// data.analystUids = transformArr(data.analystUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2EObj(data.acceptUid)
@@ -727,6 +732,7 @@
type: 'warning',
message: res.data.msg
})
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
}
} else {
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
index 399eec3..8ae195e 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
@@ -22,15 +22,15 @@
</el-col>
<el-col :span="12">
<el-form-item label="作业人" prop="operatorUids">
-<!-- <el-select v-model="form.operatorUids" 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-select v-model="form.operatorUids" 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-row>
@@ -85,15 +85,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" 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-select v-model="form.guardianUids" filterable multiple 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">
@@ -171,12 +171,14 @@
<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-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">
@@ -246,7 +248,7 @@
<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-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>
@@ -327,7 +329,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <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 v-model="dialogVisible">
@@ -394,7 +396,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -705,10 +707,11 @@
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -730,8 +733,9 @@
type: 'warning',
message: res.data.msg
});
- state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
index e8815a0..4b51329 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
@@ -55,15 +55,15 @@
</el-col>
<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 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-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-row>
@@ -90,15 +90,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" 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-select v-model="form.guardianUids" filterable multiple 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" class="valueSelect">
@@ -159,12 +159,14 @@
<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-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">
@@ -204,7 +206,7 @@
<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-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>
@@ -273,7 +275,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -329,7 +331,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -648,10 +650,11 @@
// if(Array.isArray(state.form.involveOtherWork)){
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -672,6 +675,7 @@
message: res.data.msg
});
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
index d3a2e52..595a6ed 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
@@ -65,15 +65,15 @@
</el-col>
<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 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-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-row>
@@ -130,15 +130,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" 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-select v-model="form.guardianUids" filterable multiple 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">
@@ -194,12 +194,14 @@
<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-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">
@@ -269,7 +271,7 @@
<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-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>
@@ -338,7 +340,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -395,7 +397,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -716,10 +718,11 @@
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -741,6 +744,7 @@
});
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
index fe6bcea..add6ecd 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
@@ -144,15 +144,15 @@
<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-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">
@@ -195,15 +195,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" 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-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">
@@ -267,12 +267,14 @@
<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-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">
@@ -312,7 +314,7 @@
<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-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>
@@ -381,7 +383,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -447,7 +449,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -785,10 +787,11 @@
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -812,6 +815,7 @@
});
// 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)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
index ddadf29..f1e4594 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
@@ -65,7 +65,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="用电人" prop="workDetail.electricityUids">
- <el-select v-model="form.workDetail.electricityUids" multiple clearable>
+ <el-select v-model="form.workDetail.electricityUids" filterable multiple clearable>
<el-option
v-for="item in lists.workerList"
:key="item.uid"
@@ -79,15 +79,15 @@
<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-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-row>
@@ -145,20 +145,20 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" 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-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-select v-model="form.cameraIds" multiple filterable clearable>
<el-option
v-for="item in lists.deviceList"
:key="item.id"
@@ -209,12 +209,14 @@
<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-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">
@@ -284,7 +286,7 @@
<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-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>
@@ -353,7 +355,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -409,7 +411,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -718,11 +720,12 @@
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',')
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
// data.analystUids = transformArr(data.analystUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -744,6 +747,7 @@
});
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
index 3ceadc7..8acd0fc 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
@@ -44,15 +44,15 @@
</el-col>
<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-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-row>
@@ -114,15 +114,15 @@
<el-row>
<el-col :span="12">
<el-form-item label="监护人" prop="guardianUids">
-<!-- <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" 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-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">
@@ -178,12 +178,14 @@
<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-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">
@@ -223,7 +225,7 @@
<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-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>
@@ -292,7 +294,7 @@
</div>
</el-form>
<div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+ <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</el-button>
</div>
<work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
</div>
@@ -348,7 +350,7 @@
workDepId: null,
workContent: '',
workLocation: '',
- riskIdentification: '',
+ riskIdentification: [],
involveOtherWork: [],
safetyMeasureUids: [],
approvalDepBasicList: [],
@@ -655,11 +657,12 @@
// if(Array.isArray(state.form.involveOtherWork)){
// state.form.involveOtherWork = state.form.involveOtherWork.join(',')
// }
+ state.form.riskIdentification = state.form.riskIdentification.join(',')
const {depIdList,...data} = state.form
- data.operatorUids = transformArr(data.operatorUids)
+ data.operatorUids = transform2Arr(data.operatorUids)
data.headUids = transform2Arr(data.headUids)
// data.analystUids = transformArr(data.analystUids)
- data.guardianUids = transformArr(data.guardianUids)
+ data.guardianUids = transform2Arr(data.guardianUids)
data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
data.startOrEndUids = transform2Arr(data.startOrEndUids)
data.acceptUid = transform2Obj(data.acceptUid)
@@ -680,6 +683,7 @@
message: res.data.msg
});
// state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+ state.form.riskIdentification = state.form.riskIdentification.split(',')
}
} else {
console.log('error submit!', fields)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
index 37b230b..fba0b5c 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
@@ -93,7 +93,8 @@
departList2: [],
deviceList: [],
otherWorks: [],
- spList: []
+ spList: [],
+ riskList: []
},
activeName: 'fire',
allWorkers: [],
@@ -139,11 +140,12 @@
// 页面载入时执行方法
onMounted(() => {
- getAll();
- getAllDepartment();
- getAllDevice();
- getOtherWork();
+ getAll()
+ getAllDepartment()
+ getAllDevice()
+ getOtherWork()
spWorker()
+ getAllRisks()
});
// 获取用户列表
@@ -240,6 +242,20 @@
}
};
+ // 获取设备列表
+ const getAllRisks = async ()=>{
+ const res = await workApplyApi().getAllRiskIdentity()
+ if (res.data.code === '200') {
+ // state.allDevices = JSON.parse(JSON.stringify(res.data.data))
+ state.lists.riskList = JSON.parse(JSON.stringify(res.data.data))
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
return {
...toRefs(state),
fire,
diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index dd9a486..d754f58 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -66,20 +66,20 @@
<div class="chart-tit">
<span class="tit">作业警报记录</span>
<div class="filter-part">
- <el-switch
- v-model="chartSearch4.type"
- inline-prompt
- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"
- active-text="作业人"
- inactive-text="监护人"
- />
- <el-select :teleported="false" v-model="chartSearch4.period" size="small">
- <el-option label="近7天" value="week"/>
- <el-option label="近30天" value="month"/>
- <el-option label="近90天" value="season"/>
- <el-option label="近1年" value="year"/>
+<!-- <el-switch-->
+<!-- v-model="chartSearch4.type"-->
+<!-- inline-prompt-->
+<!-- style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66"-->
+<!-- active-text="作业人"-->
+<!-- inactive-text="监护人"-->
+<!-- />-->
+ <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)">
+ <el-option label="近7天" :value="7"/>
+ <el-option label="近30天" :value="30"/>
+ <el-option label="近90天" :value="90"/>
+ <el-option label="近1年" :value="365"/>
</el-select>
- <el-select :teleported="false" v-model="chartSearch4.workType" size="small">
+ <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()">
<el-option
v-for="item in workType1"
:key="item.id"
@@ -91,17 +91,17 @@
</div>
<div class="chart">
<el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }">
- <el-table-column property="name" label="姓名" align="center"/>
- <el-table-column property="dep" label="所属部门" align="center"/>
- <el-table-column property="warning" label="异常报警次数" align="center"/>
- <el-table-column property="role" label="角色" align="center"/>
- <el-table-column property="isCard" label="是否持证" align="center">
- <template #default="scope">
- <span>{{scope.row.isCard == 1?'是':'否'}}</span>
- </template>
- </el-table-column>
+ <el-table-column property="operatorUname" label="姓名" align="center"/>
+ <el-table-column property="deptName" label="所属部门" align="center"/>
+ <el-table-column property="warningCount" label="异常报警次数" align="center"/>
+<!-- <el-table-column property="role" label="角色" align="center"/>-->
+<!-- <el-table-column property="isCard" label="是否持证" align="center">-->
+<!-- <template #default="scope">-->
+<!-- <span>{{scope.row.isCard == 1?'是':'否'}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
</el-table>
- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>
+<!-- <el-button type="text" size="small" style="margin-top: 10px">所有记录>></el-button>-->
</div>
<!-- <div class="chart" :id="slfx"></div>-->
</div>
@@ -423,9 +423,9 @@
depId: 1
},
chartSearch4: {
- searchDep: null,
startTime: '',
- days: 30
+ days: 30,
+ workType: 1
},
searchDep2: null,
searchDep: null,
@@ -485,29 +485,7 @@
],
pieData: [],
squareData: [],
- warningData: [
- {
- name: '黄公子',
- dep: '有机事业部',
- warning: 69,
- role: '作业人',
- isCard: 1
- },
- {
- name: '李飞飞',
- dep: '有机事业部',
- warning: 51,
- role: '监护人',
- isCard: 0
- },
- {
- name: '黄公子',
- dep: '有机事业部',
- warning: 69,
- role: '作业人',
- isCard: 1
- }
- ],
+ warningData: [],
reviewForm: {
advice: ''
},
@@ -523,28 +501,34 @@
getTypePie()
getWorkDep()
getDepMonth()
+ getWarningList()
});
const initTime =()=>{
state.chartSearch1.startTime = getPeriod(30)
state.chartSearch2.startTime = getPeriod(30)
+ state.chartSearch4.startTime = getPeriod(30)
state.endTime = formatDate(new Date())
}
const getPeriod =(num)=> {
const currentDate = new Date();
const startTime = new Date();
- startTime.setDate(currentDate.getDate() - num);
+ startTime.setDate(currentDate.getDate() - num - 1);
return formatDate(startTime)
}
const formatDate =(date)=> {
const year = date.getFullYear().toString();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
- return `${year}-${month}-${day} 00:00:00`;
+ return `${year}-${month}-${day} 23:59:59`;
}
const changeTime1=(value:number)=>{
state.chartSearch1.startTime = getPeriod(value)
- console.log(state.chartSearch1.startTime,state.endTime,'结束段')
getTypePie()
+ }
+ const changeTime4=(value:number)=>{
+ state.chartSearch4.startTime = getPeriod(value)
+ console.log(state.chartSearch4.startTime,state.endTime,'结束段')
+ getWarningList()
}
const changeDep1=()=>{
getTypePie()
@@ -555,6 +539,9 @@
}
const changeType2=()=>{
getWorkDep()
+ }
+ const changeType4=()=>{
+ getWarningList()
}
const changeDep3=()=>{
getDepMonth()
@@ -645,6 +632,22 @@
if (res.data.code === '200') {
state.workData = JSON.parse(JSON.stringify(res.data.data))
state.totalSize = res.data.total
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ const getWarningList = async()=>{
+ const data = {
+ startTime: state.chartSearch4.startTime,
+ endTime: state.endTime,
+ workType:state.chartSearch4.workType
+ }
+ let res = await specialIndexApi().getWorkWarning(data)
+ if (res.data.code === '200') {
+ state.warningData = JSON.parse(JSON.stringify(res.data.data))
} else {
ElMessage({
type: 'warning',
@@ -1033,9 +1036,11 @@
slfx,
zyqs,
changeTime1,
+ changeTime4,
changeDep1,
changeDep2,
changeType2,
+ changeType4,
changeDep3,
toFullscreen,
// handleReview,
@@ -1156,57 +1161,57 @@
.chart{
width: 100%;
height: 85%;
+ overflow-y: scroll;
.el-table{
- height: 90% !important;
- :deep(.el-table__inner-wrapper){
- height: 100% !important;
- .el-table__header-wrapper {
- height: 20% !important;
- .el-table__header{
- height: 100% !important;
- th{
- height: 100% !important;
- padding: 0 0 !important;
- .cell{
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- }
- }
- }
- .el-table__body-wrapper {
- height: 80% !important;
- .el-scrollbar__view{
- height: 100% !important;
- .el-table__body{
- height: 100% !important;
- tbody{
- height: 100% !important;
- .el-table__row{
- height: 25% !important;
- td{
- height: 25% !important;
- padding: 0 0 !important;
- .left-info{
- display: flex;
- align-items: center;
- }
- .cell{
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
- .el-button{
- padding: 0 !important;
- }
- }
- }
- }
- }
- }
- }
- }
+ //:deep(.el-table__inner-wrapper){
+ // height: 100% !important;
+ // .el-table__header-wrapper {
+ // height: 20% !important;
+ // .el-table__header{
+ // height: 100% !important;
+ // th{
+ // height: 100% !important;
+ // padding: 0 0 !important;
+ // .cell{
+ // white-space: nowrap;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // }
+ // }
+ // }
+ // }
+ // .el-table__body-wrapper {
+ // height: 80% !important;
+ // .el-scrollbar__view{
+ // height: 100% !important;
+ // .el-table__body{
+ // height: 100% !important;
+ // tbody{
+ // height: 100% !important;
+ // .el-table__row{
+ // height: 25% !important;
+ // td{
+ // height: 25% !important;
+ // padding: 0 0 !important;
+ // .left-info{
+ // display: flex;
+ // align-items: center;
+ // }
+ // .cell{
+ // white-space: nowrap;
+ // overflow: hidden;
+ // text-overflow: ellipsis;
+ // }
+ // .el-button{
+ // padding: 0 !important;
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ //}
}
}
.el-radio-group{
--
Gitblit v1.9.2