Merge remote-tracking branch 'origin/dev' into dev

pull/1/head
chenxinying 2024-02-04 09:10:58 +08:00
commit 9b4fc4fa0d
52 changed files with 2434 additions and 423 deletions

2
.env
View File

@ -1,4 +1,4 @@
VITE_BASE_URL=http://192.168.0.17:8001/
VITE_BASE_URL=http://192.168.0.49:8099/
VITE_PROXY=/api/
VITE_FILE_URL=https://file.zcloudchina.com/YTHFile
VITE_TEMPLATE_URL=https://qaaq.qhdsafety.com/file/

View File

@ -289,6 +289,14 @@ export default [
},
component: "hazard_investigation/inventory_management/print",
},
{
path: "/hazard_investigation/inventory_management/print_custom",
meta: {
title: "打印",
activeMenu: "/hazard_investigation/inventory_management",
},
component: "hazard_investigation/inventory_management/print_custom",
},
{
path: "/hazard_investigation/inventory_management/part_qr_code",
meta: {
@ -331,13 +339,12 @@ export default [
component: "hazard_investigation/inventory_management/add",
},
{
path: "/hazard_investigation/inventory_management/check_standard_add",
path: "/hazard_investigation/inventory_management/add_custom",
meta: {
title: "新增",
activeMenu: "/hazard_investigation/inventory_management",
},
component:
"hazard_investigation/inventory_management/check_standard_add",
component: "hazard_investigation/inventory_management/add_custom",
},
{
path: "/hazard_investigation/inventory_management/edit",
@ -347,6 +354,14 @@ export default [
},
component: "hazard_investigation/inventory_management/add",
},
{
path: "/hazard_investigation/inventory_management/edit_custom",
meta: {
title: "修改",
activeMenu: "/hazard_investigation/inventory_management",
},
component: "hazard_investigation/inventory_management/add_custom",
},
{
path: "/hazard_investigation/inventory_management/inheritance_list",
meta: {
@ -394,13 +409,13 @@ export default [
component: "hazard_investigation/inventory_troubleshooting/inspect",
},
{
path: "/hazard_investigation/inventory_troubleshooting/standard_inspect",
path: "/hazard_investigation/inventory_troubleshooting/inspect_custom",
meta: {
title: "开始检查",
activeMenu: "/hazard_investigation/inventory_troubleshooting",
},
component:
"hazard_investigation/inventory_troubleshooting/standard_inspect",
"hazard_investigation/inventory_troubleshooting/inspect_custom",
},
],
},
@ -861,7 +876,21 @@ export default [
title: "查看详情",
activeMenu: "/keyprojects/inspection",
},
component: "keyprojects/inspection/record_view",
component: "children",
children: [
{
path: "",
component: "keyprojects/inspection/record_view",
},
{
path: "/keyprojects/inspection/hidden_view",
meta: {
title: "隐患信息",
activeMenu: "/keyprojects/inspection",
},
component: "keyprojects/inspection/hidden_view",
},
],
},
],
},
@ -933,16 +962,6 @@ export default [
},
],
},
{
path: "/keyprojects/aiwarning",
meta: { title: "AI报警", isSubMenu: false },
component: "keyprojects/aiwarning/index",
},
{
path: "/keyprojects/videomanager",
meta: { title: "视频监控", isSubMenu: false },
component: "keyprojects/videomanager/index",
},
],
},
{
@ -993,6 +1012,88 @@ export default [
},
],
},
{
path: "/safety_environmental_management/inspectors_verify_management",
meta: { title: "检查人核实管理", isSubMenu: false },
component: "children",
children: [
{
path: "",
component:
"safety_environmental_management/inspectors_verify_management/index",
},
{
path: "/safety_environmental_management/inspectors_verify_management/view",
meta: {
title: "查看",
activeMenu:
"/safety_environmental_management/inspectors_verify_management",
},
component:
"safety_environmental_management/inspectors_verify_management/view",
},
],
},
{
path: "/safety_environmental_management/inspected_person_confirm",
meta: { title: "被检查人确认", isSubMenu: false },
component: "children",
children: [
{
path: "",
component:
"safety_environmental_management/inspected_person_confirm/index",
},
{
path: "/safety_environmental_management/inspected_person_confirm/view",
meta: {
title: "查看",
activeMenu:
"/safety_environmental_management/inspected_person_confirm",
},
component:
"safety_environmental_management/inspected_person_confirm/view",
},
],
},
{
path: "/safety_environmental_management/hazard_assignment_acceptance",
meta: { title: "隐患指派与验收", isSubMenu: false },
component: "children",
children: [
{
path: "",
component:
"safety_environmental_management/hazard_assignment_acceptance/index",
},
{
path: "/safety_environmental_management/hazard_assignment_acceptance/view",
meta: {
title: "查看",
activeMenu:
"/safety_environmental_management/hazard_assignment_acceptance",
},
component:
"safety_environmental_management/hazard_assignment_acceptance/view",
},
{
path: "/safety_environmental_management/hazard_assignment_acceptance/assign",
meta: {
title: "指派",
activeMenu:
"/safety_environmental_management/hazard_assignment_acceptance",
},
component: "children",
children: [
{
path: "",
component:
"safety_environmental_management/hazard_assignment_acceptance/hidden_list",
},
],
},
],
},
],
},
{

View File

@ -1,5 +1,6 @@
<template>
<el-cascader
v-if="type === 'cascader'"
ref="cascaderRef"
v-model="modelValue"
:options="hiddenDangerTypeList"
@ -10,6 +11,22 @@
checkStrictly: true,
}"
/>
<el-tree-select
v-if="type === 'tree'"
ref="treeSelectRef"
v-model="modelValue"
:data="hiddenDangerTypeList"
:props="{
value: 'BIANMA',
children: 'nodes',
label: 'name',
}"
node-key="id"
:render-after-expand="false"
accordion
check-strictly
:clearable="true"
/>
</template>
<script setup>
@ -30,10 +47,26 @@ const props = defineProps({
type: String,
default: "/",
},
type: {
type: String,
default: "cascader",
validator: (value) => {
const typeList = ["cascader", "tree"];
if (typeList.includes(value)) {
return true;
} else {
throw new Error(`type必须是${typeList.join("、")}之一`);
}
},
},
});
const emits = defineEmits(["update:modelValue"]);
const modelValue = useVModel(props, "modelValue", emits);
const cascaderRef = ref(null);
const treeSelectRef = ref(null);
const getCurrentNode = () => {
return treeSelectRef.value.getCurrentNode();
};
const getCheckedNodes = () => {
return cascaderRef.value
.getCheckedNodes()[0]
@ -41,6 +74,7 @@ const getCheckedNodes = () => {
};
defineExpose({
getCheckedNodes,
getCurrentNode,
});
const hiddenDangerTypeList = await getHiddenDangerType();
</script>

View File

@ -6,6 +6,8 @@
<span v-if="data.info.SOURCE === '1'"> </span>
<span v-else-if="data.info.SOURCE === '2'"> 隐患排查 </span>
<span v-else-if="data.info.SOURCE === '3'"> 隐患排查 </span>
<span v-else-if="data.info.SOURCE === '4'"> 安全环保检查 </span>
<span v-else-if="data.info.SOURCE === '5'"> 安全环保检查 </span>
</el-descriptions-item>
<template v-if="data.info.SOURCE === '2'">
<el-descriptions-item label="风险点(单元)">
@ -233,7 +235,7 @@
</template>
<script setup>
import { reactive } from "vue";
import { reactive, watchEffect } from "vue";
import { getFileSuffix } from "@/assets/js/utils.js";
import { VideoPlay } from "@element-plus/icons-vue";
import LayoutVideo from "@/components/video/index.vue";
@ -271,6 +273,7 @@ const fnGetData = async () => {
data.info = resData.pd;
data.hs = resData.hs;
data.checkList = resData.checkList;
data.hImgs = [];
for (let i = 0; i < resData.hImgs.length; i++) {
if (getFileSuffix(resData.hImgs[i].FILEPATH) === "mp4") {
data.videoDialog.src = resData.hImgs[i].FILEPATH;
@ -283,7 +286,9 @@ const fnGetData = async () => {
data.pImgs = resData.pImgs;
emits("throw-data", data.info);
};
fnGetData();
watchEffect(() => {
if (props.hiddenId) fnGetData();
});
</script>
<style scoped lang="scss"></style>

View File

@ -14,7 +14,7 @@
:height="300"
:is-crop="false"
:line-width="6"
line-color="#fff"
line-color="#000"
/>
<template #footer>
<el-button @click="fnReset"></el-button>

View File

@ -17,6 +17,7 @@ export const getInfo = (params) =>
export const setUploadImg = (params) => upload("/imgfiles/add", params); // 上传附件
export const setDeleteImg = (params) => post("/imgfiles/delete", params); // 删除附件
export const getViewImg = (params) => post("/imgfiles/listImgs", params); // 查看图片
export const setUploadVideo = (params) => upload("/imgfiles/addVideo", params); // 上传视频
export const getVideoSource = (params) =>
post("/videoRes/getVideoPlayAuth", params); // 获取视频
export const getVideoAuth = (params) =>

View File

@ -95,10 +95,15 @@ export const setCheckStandardSupplementaryRecordingSubmit = (params) =>
post("/customCheckrecord/recording", params); // 隐患排查清单检查情况检查记录补录提交
export const setCheckStandardSubmit = (params) =>
post("/customCheckrecord/add", params); // 清单排查提交
export const getDeleteCustomList = (params) => post("/customStop/list", params); // 删除清单管理列表
export const setDeleteCustomRecovery = (params) =>
post("/customStop/restore", params); // 删除清单管理恢复
export const setCustomBatchDelete = (params) =>
post("/customStop/deleteAll", params); // 清单管理批量删除
export const getCustomStopView = (params) => post("/customStop/goEdit", params); // 清单管理查看
export const getCustomCheckRecordList = (params) =>
post("/customCheckrecord/list", params); // 隐患清单排查列表
export const getCustomCheckRecordView = (params) =>
post("/customCheckrecord/goEdit", params); // 隐患清单排查查询单个
export const setDeleteCustommCheckrecord = (params) =>
post("/customCheckrecord/delete", params); // 删除隐患清单排查记录

View File

@ -36,6 +36,8 @@ export const setOutsourcedGoEdit = (params) =>
post("/outsourced/goEdit", params); // 重点工程修改获取
export const setOutsourcedDelete = (params) =>
post("/outsourced/delete", params); // 重点工程修改获取
export const getOutsourcedJie = (params) => post("/outsourced/jie", params); // 结束工程
export const getOutsourcedStart = (params) => post("/outsourced/start", params); // 结束工程
export const getKeyprojectcheckList = (params) =>
post("/keyprojectcheck/list", params); // 安全环保检查列表
@ -49,3 +51,5 @@ export const getKeyprojectpunishList = (params) =>
post("/keyprojectpunish/list", params); // 处罚列表
export const getKeyprojectpunishGoEdit = (params) =>
post("/keyprojectpunish/goEdit", params); // 处罚列表详情
export const getCorpinfoListAll = (params) => post("/corpinfo/listAll", params); // 监理单位名称

View File

@ -1,10 +1,34 @@
import { post } from "@/request/axios.js";
import { post, upload } from "@/request/axios.js";
export const getSafetyEnvironmentalList = (params) =>
post("/safetyenvironmental/list", params); // 安全环保管理列表
export const getSafetyEnvironmentalFlowChart = (params) =>
post("/safetyenvironmental/getFlow", params); // 安全环保管理流程图
export const getSafetyEnvironmentalListFlowChart = (params) =>
post("/safetyenvironmental/getFlow", params); // 安全环保管理列表流程图
export const setSafetyEnvironmentalDelete = (params) =>
post("/safetyenvironmental/hide", params); // 安全环保管理删除
export const setSafetyEnvironmentalDefense = (params) =>
post("/safetyenvironmental/explain", params); // 安全环保管理申辩
export const setSafetyEnvironmentalAdd = (params) =>
post("/safetyenvironmental/add", params); // 安全环保管理新增
export const setSafetyEnvironmentalEdit = (params) =>
post("/safetyenvironmental/edit", params); // 安全环保管理编辑
export const getSafetyEnvironmentalViewInfo = (params) =>
post("/safetyenvironmental/goShow", params); // 安全环保管理查看
export const getSafetyEnvironmentalView = (params) =>
post("/safetyenvironmental/goEdit", params); // 安全环保管理查看
export const getSafetyEnvironmentalViewFlowChart = (params) =>
post("/safetyenvironmental/getFlowChart", params); // 安全环保管理查看流程图
export const getInspectorsVerifyManagementList = (params) =>
post("/safetyenvironmentalinspector/list", params); // 检查人核实列表
export const setInspectorsVerifyManagementVerify = (params) =>
post("/safetyenvironmentalinspector/verify", params); // 检查人核实管理核实
export const getInspectedPersonConfirmList = (params) =>
post("/safetyenvironmentalexplain/list", params); // 被检查人确认列表
export const getInspectedPersonConfirmHiddenCount = (params) =>
post("/safetyenvironmentalexplain/hiddencount", params); // 被检查人确认获取隐患数量
export const setInspectedPersonConfirmSubmit = (params) =>
upload("/safetyenvironmentalexplain/add", params); // 被检查人确认提交
export const getHazardAssignmentAcceptanceList = (params) =>
post("/safetyenvironmental/checkList", params); // 隐患指派与验收列表
export const getHazardAssignmentAcceptanceHiddenList = (params) =>
post("/hidden/listForAhZp", params); // 隐患指派与验收隐患列表

View File

@ -3,7 +3,7 @@
<el-divider content-position="left">清单信息</el-divider>
<el-descriptions border :column="2">
<el-descriptions-item label="清单名称">
{{ info.LIST_NAME }}
{{ info.LIST_NAME ? info.LIST_NAME : info.CUSTOM_NAME }}
</el-descriptions-item>
<el-descriptions-item label="排查清单类型">
{{ info.SCREENTYPENAME }}
@ -66,7 +66,8 @@
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">检查内容</el-divider>
<div class="print_no_use">
<!--1风险管控清单 -->
<div v-if="listType === '1'" class="print_no_use">
<layout-table :data="inspectionList" :show-pagination="false">
<el-table-column label="序号" width="70" type="index" />
<el-table-column prop="RISKUNITNAME" label="风险点(单元)" />
@ -109,7 +110,7 @@
</el-table-column>
</layout-table>
</div>
<table class="print_use">
<table v-if="listType === '1'" class="print_use">
<thead>
<tr>
<th width="55">序号</th>
@ -153,6 +154,97 @@
</tr>
</tbody>
</table>
<!--2隐患排查清单 -->
<div v-if="listType === '2'" class="print_no_use">
<layout-table :data="inspectionList" :show-pagination="false">
<el-table-column label="序号" width="70" type="index" />
<el-table-column prop="CHECK_CATEGORY_NAME" label="检查类别" />
<el-table-column prop="CHECK_ITEM_NAME" label="检查项目" />
<el-table-column prop="CHECK_CONTENT" label="检查内容" />
<el-table-column prop="CHECK_STANDARD" label="检查标准" />
<el-table-column prop="REFERENCE_BASIS" label="参考依据" />
<el-table-column prop="CHECK_RESULT" label="检查结果" />
<el-table-column label="状态" width="100">
<template v-slot="{ row }">
<template v-if="row.ISNORMAL === 0">
<el-button
v-if="row.IMGCOUNT > 0"
type="primary"
text
link
@click="entrance && fnQualified(row.RECORDITEM_ID)"
>
合格
</el-button>
<div v-else></div>
</template>
<el-button
v-else-if="row.ISNORMAL === 1"
type="primary"
text
link
@click="
entrance &&
router.push({
path: hiddenPath[entrance],
query: { HIDDEN_ID: row.HIDDEN_ID },
})
"
>
不合格
</el-button>
<div v-else-if="row.ISNORMAL === 2">不涉及</div>
<div v-else></div>
</template>
</el-table-column>
</layout-table>
</div>
<table v-if="listType === '2'" class="print_use">
<thead>
<tr>
<th width="55">序号</th>
<th width="125">检查类别</th>
<th width="100">检查项目</th>
<th>检查内容</th>
<th width="120">检查标准</th>
<th>参考依据</th>
<th width="100">检查结果</th>
<th>状态</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) in inspectionList" :key="index">
<td>{{ index + 1 }}</td>
<td>{{ item.CHECK_CATEGORY_NAME }}</td>
<td>{{ item.CHECK_ITEM_NAME }}</td>
<td>{{ item.CHECK_CONTENT }}</td>
<td>{{ item.CHECK_STANDARD }}</td>
<td>{{ item.REFERENCE_BASIS }}</td>
<td>{{ item.CHECK_RESULT }}</td>
<template v-if="item.ISNORMAL === 0">
<template v-if="item.IMGCOUNT > 0">
<td>
<el-button type="primary" text link> 合格 </el-button>
</td>
</template>
<template v-else>
<td>合格</td>
</template>
</template>
<template v-else-if="item.ISNORMAL === 1">
<td>
<el-button type="primary" text link> 不合格 </el-button>
</td>
</template>
<template v-else-if="item.ISNORMAL === 2">
<td>不涉及</td>
</template>
<template v-else>
<td>存在未整改隐患</td>
</template>
</tr>
</tbody>
</table>
<el-divider content-position="left">其他隐患</el-divider>
<div class="print_no_use">
<layout-table :data="otherHiddenList" :show-pagination="false">
@ -209,6 +301,7 @@ import { useRouter } from "vue-router";
import { reactive, ref } from "vue";
import {
getChecklistInspectionStatusRecordView,
getCustomCheckRecordView,
getChecklistInspectionStatusRecordViewOtherHiddenDangerList,
} from "@/request/hazard_investigation.js";
import { getViewImg } from "@/request/api.js";
@ -232,6 +325,11 @@ const props = defineProps({
required: true,
default: "",
},
listType: {
type: String,
required: true,
default: "",
},
});
const hiddenPath = {
checklist_inspection_status:
@ -251,7 +349,9 @@ const data = reactive({
mapDialogVisible: false,
});
const { list: inspectionList } = useListData(
getChecklistInspectionStatusRecordView,
props.listType === 1
? getChecklistInspectionStatusRecordView
: getCustomCheckRecordView,
{
otherParams: { CHECKRECORD_ID: props.checkRecordId },
usePagination: false,

View File

@ -7,7 +7,7 @@
@submit.prevent="fnResetPaginationTransfer"
>
<el-row>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="清单名称" prop="KEYWORDS">
<el-input
v-model="searchForm.KEYWORDS"
@ -15,7 +15,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="清单种类" prop="LIST_TYPE">
<el-select v-model="searchForm.LIST_TYPE">
<el-option label="风险管控清单" value="1" />
@ -23,7 +23,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="周期内检查状态" prop="STATUS">
<el-select v-model="searchForm.STATUS">
<el-option label="未检查" value="0" />
@ -31,7 +31,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="是否存在隐患项" prop="HASHIDDEN">
<el-select v-model="searchForm.HASHIDDEN">
<el-option label="无隐患" value="0" />
@ -39,7 +39,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="4">
<el-form-item label="是否有超期记录" prop="OVERTIME">
<el-select v-model="searchForm.OVERTIME">
<el-option label="无超期" value="0" />
@ -47,7 +47,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="人员" prop="USERNAME">
<el-input
v-model="searchForm.USERNAME"
@ -55,7 +55,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="清单类型" prop="TYPE">
<el-select v-model="searchForm.TYPE">
<el-option
@ -67,7 +67,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="排查周期" prop="PERIOD">
<el-select v-model="searchForm.PERIOD">
<el-option
@ -79,7 +79,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="清单级别" prop="LISTINGLEVEL">
<el-select v-model="searchForm.LISTINGLEVEL">
<el-option
@ -94,7 +94,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="4">
<el-form-item label="部门" prop="DEPTIDS">
<layout-department
v-model="searchForm.DEPTIDS"
@ -104,7 +104,7 @@
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="清单状态" prop="ISDELETE">
<el-select v-model="searchForm.ISDELETE">
<el-option label="启用" value="0" />
@ -114,7 +114,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label="在岗状态" prop="WORKSTATUS">
<el-select v-model="searchForm.WORKSTATUS">
<el-option label="在岗" value="0" />
@ -122,7 +122,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-col :span="5">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
@ -145,7 +145,7 @@
</template>
</el-table-column>
<el-table-column prop="NAME" label="清单名称" />
<el-table-column label="清单种类">
<el-table-column label="清单种类" width="100">
<template v-slot="{ row }">
<span v-if="row.list_type === '1'"></span>
<span v-if="row.list_type === '2'"></span>
@ -210,7 +210,8 @@
router.push({
path: '/hazard_investigation/checklist_inspection_status/inspection_record',
query: {
LISTMANAGER_ID: row.LISTMANAGER_ID,
LIST_ID: row.LISTMANAGER_ID,
LIST_TYPE: row.list_type,
},
})
"

View File

@ -86,6 +86,7 @@
path: '/hazard_investigation/checklist_inspection_status/inspection_record/view',
query: {
CHECKRECORD_ID: row.CHECKRECORD_ID,
LIST_TYPE: LIST_TYPE,
},
})
"
@ -114,7 +115,8 @@
CHECKRECORD_ID: row.CHECKRECORD_ID,
DATESTART: row.DATESTART,
DATEEND: row.DATEEND,
LISTMANAGER_ID,
LIST_TYPE: LIST_TYPE,
LIST_ID,
},
})
"
@ -136,6 +138,8 @@ import { serialNumber } from "@/assets/js/utils";
import {
getChecklistInspectionStatusRecordList,
setChecklistInspectionStatusRecordDelete,
setDeleteCustommCheckrecord,
getCustomCheckRecordList,
} from "@/request/hazard_investigation.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
@ -144,15 +148,23 @@ import useListData from "@/assets/js/useListData.js";
const route = useRoute();
const router = useRouter();
const { LISTMANAGER_ID } = route.query;
const { LIST_ID, LIST_TYPE } = route.query;
const info = ref({});
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getChecklistInspectionStatusRecordList, {
otherParams: { LISTMANAGER_ID },
callbackFn: (list, resData) => {
info.value = resData.ls;
},
});
useListData(
LIST_TYPE === "1"
? getChecklistInspectionStatusRecordList
: getCustomCheckRecordList,
{
otherParams:
LIST_TYPE === "1"
? { LISTMANAGER_ID: LIST_ID }
: { CUSTOM_ID: LIST_ID },
callbackFn: (list, resData) => {
info.value = resData.ls;
},
}
);
const fnGetDataTransfer = () => {
fnGetData({
STARTTIME: searchForm.value.dates?.[0],
@ -170,7 +182,9 @@ const fnDelete = debounce(
1000,
async (CHECKRECORD_ID) => {
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
await setChecklistInspectionStatusRecordDelete({ CHECKRECORD_ID });
LIST_TYPE === "1"
? await setChecklistInspectionStatusRecordDelete({ CHECKRECORD_ID })
: await setDeleteCustommCheckrecord({ CHECKRECORD_ID });
ElMessage.success("删除成功");
fnResetPaginationTransfer();
},

View File

@ -4,6 +4,7 @@
<inspection-record-view
:entrance="entrance"
:check-record-id="CHECKRECORD_ID"
:list-type="LIST_TYPE"
/>
</div>
<div class="tc mt-10">
@ -23,7 +24,7 @@ defineProps({
},
});
const route = useRoute();
const { CHECKRECORD_ID } = route.query;
const { CHECKRECORD_ID, LIST_TYPE } = route.query;
</script>
<style scoped lang="scss"></style>

View File

@ -103,6 +103,7 @@
path: '/hazard_investigation/inspection_record/view',
query: {
CHECKRECORD_ID: row.CHECKRECORD_ID,
LIST_TYPE: row.LIST_TYPE,
},
})
"
@ -114,7 +115,7 @@
type="primary"
text
link
@click="fnDelete(row.CHECKRECORD_ID)"
@click="fnDelete(row.LIST_TYPE, row.CHECKRECORD_ID)"
>
删除
</el-button>
@ -132,6 +133,7 @@
DATESTART: row.DATESTART,
DATEEND: row.DATEEND,
LISTMANAGER_ID: row.LISTMANAGER_ID,
LIST_TYPE,
},
})
"
@ -153,6 +155,7 @@ import { serialNumber } from "@/assets/js/utils";
import {
getInspectionRecordList,
setChecklistInspectionStatusRecordDelete,
setDeleteCustommCheckrecord,
} from "@/request/hazard_investigation.js";
import { debounce } from "throttle-debounce";
import { ElMessage, ElMessageBox } from "element-plus";
@ -186,9 +189,11 @@ const fnResetPaginationTransfer = () => {
const buttonJurisdiction = await useButtonJurisdiction("checkrecord");
const fnDelete = debounce(
1000,
async (CHECKRECORD_ID) => {
async (LIST_TYPE, CHECKRECORD_ID) => {
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
await setChecklistInspectionStatusRecordDelete({ CHECKRECORD_ID });
LIST_TYPE === "1"
? await setChecklistInspectionStatusRecordDelete({ CHECKRECORD_ID })
: await setDeleteCustommCheckrecord({ CHECKRECORD_ID });
ElMessage.success("删除成功");
fnResetPaginationTransfer();
},

View File

@ -190,7 +190,7 @@ const fnInspect = (ID, LIST_TYPE) => {
path:
LIST_TYPE === "1"
? "/hazard_investigation/inventory_troubleshooting/inspect"
: "/hazard_investigation/inventory_troubleshooting/standard_inspect",
: "/hazard_investigation/inventory_troubleshooting/inspect_custom",
query: { ID },
});
};

View File

@ -244,7 +244,7 @@
v-model:form="data.unQualifiedDialog.form"
:type="data.unQualifiedDialog.type"
:hidden-type="data.unQualifiedDialog.hiddenType"
:list-manager-id="LISTMANAGER_ID"
:list-manager-id="LIST_ID"
:info="{ ...data.unQualifiedDialog.info, ...info.value }"
:longitude="data.longitude"
:latitude="data.latitude"
@ -262,6 +262,7 @@ import {
setHiddenDangerDelete,
setInventoryTroubleshootingSubmit,
setChecklistInspectionStatusRecordSupplementaryRecordingSubmit,
getCheckStandardManagementView,
} from "@/request/hazard_investigation.js";
import { useRoute, useRouter } from "vue-router";
import useListData from "@/assets/js/useListData.js";
@ -283,7 +284,7 @@ import { WarningFilled } from "@element-plus/icons-vue";
const route = useRoute();
const router = useRouter();
const { LISTMANAGER_ID, CHECKRECORD_ID, DATEEND, DATESTART } = route.query;
const { LIST_ID, CHECKRECORD_ID, DATEEND, DATESTART, LIST_TYPE } = route.query;
// entrance: supplementaryRecording
const props = defineProps({
entrance: {
@ -337,24 +338,32 @@ const data = reactive({
},
},
});
const { list: inspectionList } = useListData(getInventoryManagementView, {
otherParams: { LISTMANAGER_ID },
usePagination: false,
callbackFn: (list, resData) => {
for (let i = 0; i < list.length; i++) {
if (list[i].HASHIDDEN <= 0) list[i].ISNORMAL = 0;
if (list[i].ELECTRONIC_FENCE_ID) {
//
data.canDoCheck = false;
const { list: inspectionList } = useListData(
LIST_TYPE === "1"
? getInventoryManagementView
: getCheckStandardManagementView,
{
otherParams:
LIST_TYPE === "1" ? { LISTMANAGER_ID: LIST_ID } : { ID: LIST_ID },
usePagination: false,
callbackFn: (list, resData) => {
if (LIST_TYPE === "1") {
for (let i = 0; i < list.length; i++) {
if (list[i].HASHIDDEN <= 0) list[i].ISNORMAL = 0;
if (list[i].ELECTRONIC_FENCE_ID) {
//
data.canDoCheck = false;
}
}
}
}
info.value = resData.pd;
},
});
info.value = resData.pd;
},
}
);
const { list: otherHiddenList, fnGetData: fnGetOtherHidden } = useListData(
getInventoryTroubleshootingOtherHiddenList,
{
otherParams: { LISTMANAGER_ID },
otherParams: { LIST_ID },
usePagination: false,
key: "hiddenList",
}
@ -501,7 +510,7 @@ const fnSubmit = debounce(
const inspectedList = cloneDeep(data.form.inspectedList);
if (inspectedList.length > 0) inspectedList.splice(0, 1);
const params = {
LISTMANAGER_ID,
LIST_ID,
LIST_NAME: info.value.NAME,
CHECK_TIME: data.form.CHECK_TIME,
DESCR: data.form.DESCR,

View File

@ -41,14 +41,7 @@
<el-table-column prop="CHECK_ITEM_NAME" label="检查项目" />
<el-table-column prop="CHECK_CONTENT" label="检查内容" />
<el-table-column prop="CHECK_STANDARD" label="检查标准" />
<el-table-column prop="CHECK_QUALIFIED" label="检查合格项" />
<el-table-column prop="CHECK_UNQUALIFIED" label="检查不合格项" />
<el-table-column label="操作类型">
<template v-slot="{ row }">
<span v-if="row.OPERATION_TYPE === 1"></span>
<span v-if="row.OPERATION_TYPE === 2"></span>
</template>
</el-table-column>
<el-table-column prop="CHECK_RESULT" label="检查结果" />
<el-table-column label="操作" width="280">
<template v-slot="{ row, $index }">
<el-radio-group
@ -384,6 +377,7 @@ const fnDisabledDate = (time) => {
else return false;
};
const fnQualified = async (index, row) => {
row.CHECK_RESULT = row.CHECK_QUALIFIED;
if (row.HASHIDDEN > 0) return;
data.qualifiedDialog.visible = true;
await nextTick();
@ -497,6 +491,7 @@ const fnSubmit = debounce(
item.CUSTOM_ITEM_ID = inspectionList.value[i].CUSTOM_ITEM_ID;
item.ISNORMAL = inspectionList.value[i].ISNORMAL;
item.RECORDITEM_ID = inspectionList.value[i].RECORDITEM_ID;
item.CHECK_RESULT = inspectionList.value[i].CHECK_RESULT;
items.push(item);
if (inspectionList.value[i].ISNORMAL === 1)
ids.push(inspectionList.value[i].HIDDEN_ID);
@ -505,7 +500,7 @@ const fnSubmit = debounce(
if (inspectedList.length > 0) inspectedList.splice(0, 1);
const params = {
ID,
LIST_NAME: info.value.NAME,
CUSTOM_NAME: info.value.NAME,
CHECK_TIME: data.form.CHECK_TIME,
DESCR: data.form.DESCR,
ITEMS: JSON.stringify(items),

View File

@ -31,9 +31,9 @@
<el-form-item prop="CHECK_TIME" label="验收时间">
<el-date-picker
v-model="data.form.CHECK_TIME"
type="date"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="datetime"
value-format="YYYY-MM-DD HH:mm"
format="YYYY-MM-DD HH:mm"
placeholder="选择日期"
/>
</el-form-item>

View File

@ -62,9 +62,9 @@
<el-form-item label="整改时间" prop="RECTIFICATIONTIME">
<el-date-picker
v-model="data.form.RECTIFICATIONTIME"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
value-format="YYYY-MM-DD HH:mm"
format="YYYY-MM-DD HH:mm"
type="datetime"
placeholder="选择日期"
/>
</el-form-item>

View File

@ -1,106 +0,0 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR_CORP_NAME" label="添加单位" />
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="fnView(row.PERSONNELMANAGEMENT_ID)"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getPersonnelmanagementList,
setPersonnelmanagementGoEdit,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getPersonnelmanagementList);
const data = reactive({
type: "",
title: "",
editDialog: {
visible: false,
form: {},
},
});
const fnGoEdit = async (id) => {
const resData = await setPersonnelmanagementGoEdit({
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
};
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnView = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "view";
data.editDialog.title = "查看";
fnGoEdit(id);
};
</script>
<style scoped></style>

View File

@ -38,7 +38,14 @@
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="250" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门">
<template v-slot="{ row }">
<span v-if="row.Q_DEPARTMENT_NAME">
{{ row.Q_DEPARTMENT_NAME }}
</span>
<span v-else>{{ row.DEPARTMENT_NAME }}</span>
</template>
</el-table-column>
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"

View File

@ -54,10 +54,10 @@
</el-table-column>
<el-table-column label="隐患来源" width="200">
<template v-slot="{ row }">
<span v-if="row.SOURCE === 1">AI</span>
<span v-if="row.SOURCE === 2">AI</span>
<span v-if="row.SOURCE === 3">()</span>
<span v-if="row.SOURCE === 4">()</span>
<span v-if="row.SOURCE === '1'">AI</span>
<span v-if="row.SOURCE === '2'">AI</span>
<span v-if="row.SOURCE === '3'">()</span>
<span v-if="row.SOURCE === '5'">()</span>
</template>
</el-table-column>
<el-table-column label="隐患发现人" width="150">
@ -72,9 +72,9 @@
<el-table-column prop="CHECKTIME" label="验收时间" width="100" />
<el-table-column label="隐患状态" width="100">
<template v-slot="{ row }">
<span v-if="row.SOURCE === 1"></span>
<span v-if="row.SOURCE === 2"></span>
<span v-if="row.SOURCE === 4"></span>
<span v-if="row.STATE === '1'"></span>
<span v-if="row.STATE === '2'"></span>
<span v-if="row.STATE === '4'"></span>
</template>
</el-table-column>
<el-table-column label="是否处罚" width="100">

View File

@ -5,7 +5,15 @@
<el-divider content-position="left">检查信息</el-divider>
<el-descriptions border>
<el-descriptions-item label="隐患照片 ">
{{ data.info.INSPECTION_CATEGORY }}
<img
v-viewer
v-for="item in data.hiddenImgs"
:key="item.FILEPATH"
:src="item.url"
width="100"
height="100"
class="ml"
/>
</el-descriptions-item>
<el-descriptions-item label="隐患描述">
{{ data.info.HIDDENDESCR }}
@ -32,16 +40,32 @@
{{ data.info.RECTIFICATIONTIME }}
</el-descriptions-item>
<el-descriptions-item label="整改照片">
{{ data.info.RECTIFICATIONTIME }}
<img
v-viewer
v-for="item in data.zgImgs"
:key="item.FILEPATH"
:src="item.url"
width="100"
height="100"
class="ml"
/>
</el-descriptions-item>
<el-descriptions-item label="验收时间">
{{ data.info.CHECKTIME }}
</el-descriptions-item>
<el-descriptions-item label="验收图片">
{{ data.info.CHECKTIME }}
<img
v-viewer
v-for="item in data.ysImgs"
:key="item.FILEPATH"
:src="item.url"
width="100"
height="100"
class="ml"
/>
</el-descriptions-item>
<el-descriptions-item label="是否进行罚款">
{{ pd.ISPUNISH === "1" ? "是" : "否" }}
{{ data.info.ISPUNISH === "1" ? "是" : "否" }}
</el-descriptions-item>
</el-descriptions>
</div>
@ -50,6 +74,7 @@
</template>
<script setup>
import { addingPrefixToFile } from "@/assets/js/utils";
import { getKeyprojectcheckFindHidden } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
@ -57,6 +82,9 @@ import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
hiddenImgs: [],
ysImgs: [],
zgImgs: [],
});
const fnGetData = async () => {
@ -64,6 +92,10 @@ const fnGetData = async () => {
HIDDEN_ID: route.query.HIDDEN_ID,
});
data.info = resData.pd;
data.hiddenImgs = addingPrefixToFile(resData.pd.hiddenImgs);
data.ysImgs = addingPrefixToFile(resData.pd.ysImgs);
data.zgImgs = addingPrefixToFile(resData.pd.zgImgs);
};
fnGetData();
</script>

View File

@ -0,0 +1,71 @@
<template>
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">检查信息</el-divider>
<el-descriptions border>
<el-descriptions-item label="隐患照片 ">
{{ data.info.INSPECTION_CATEGORY }}
</el-descriptions-item>
<el-descriptions-item label="隐患描述">
{{ data.info.HIDDENDESCR }}
</el-descriptions-item>
<el-descriptions-item label="隐患部位 ">
{{ data.info.HIDDENPART }}
</el-descriptions-item>
<el-descriptions-item label="隐患级别">
{{ data.info.HIDDENLEVEL_NAME }}
</el-descriptions-item>
<el-descriptions-item label="隐患类型 ">
限期整改
</el-descriptions-item>
<el-descriptions-item label="整改期限">
{{ data.info.RECTIFICATIONDEADLINE }}
</el-descriptions-item>
<el-descriptions-item label="整改部门 ">
{{ data.info.RECTIFICATIONDEPT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="整改人">
{{ data.info.RECTIFICATIONOR_NAME }}
</el-descriptions-item>
<el-descriptions-item label="整改时间">
{{ data.info.RECTIFICATIONTIME }}
</el-descriptions-item>
<el-descriptions-item label="整改照片">
{{ data.info.RECTIFICATIONTIME }}
</el-descriptions-item>
<el-descriptions-item label="验收时间">
{{ data.info.CHECKTIME }}
</el-descriptions-item>
<el-descriptions-item label="验收图片">
{{ data.info.CHECKTIME }}
</el-descriptions-item>
<el-descriptions-item label="是否进行罚款">
{{ data.info.ISPUNISH === "1" ? "是" : "否" }}
</el-descriptions-item>
</el-descriptions>
</div>
</layout-card>
</div>
</template>
<script setup>
import { getKeyprojectcheckFindHidden } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
});
const fnGetData = async () => {
const resData = await getKeyprojectcheckFindHidden({
HIDDEN_ID: route.query.HIDDEN_ID,
});
data.info = resData.pd;
};
fnGetData();
</script>
<style scoped lang="scss"></style>

View File

@ -38,7 +38,14 @@
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="200" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门">
<template v-slot="{ row }">
<span v-if="row.Q_DEPARTMENT_NAME">
{{ row.Q_DEPARTMENT_NAME }}
</span>
<span v-else>{{ row.DEPARTMENT_NAME }}</span>
</template>
</el-table-column>
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"

View File

@ -38,11 +38,14 @@
</template>
</el-table-column>
<el-table-column prop="INSPECTION_PLACE" label="检查场所" />
<el-table-column
prop="INSPECTION_STATUS"
label="检查状态"
width="200"
/>
<el-table-column label="检查状态" width="200">
<template v-slot="{ row }">
<span v-if="row.INSPECTION_STATUS === '-1'"></span>
<span v-if="row.INSPECTION_STATUS === '0'"></span>
<span v-if="row.INSPECTION_STATUS === '1'"></span>
<span v-if="row.INSPECTION_STATUS === '2'"></span>
</template>
</el-table-column>
<el-table-column
prop="INSPECTION_TYPE_NAME"
label="检查类型"

View File

@ -2,7 +2,7 @@
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">检查信息</el-divider>
<el-divider content-position="left">隐患信息</el-divider>
<el-descriptions border :column="2">
<el-descriptions-item label="检查题目 ">
{{ data.info.INSPECTION_CATEGORY }}
@ -47,7 +47,19 @@
<el-table-column prop="HIDDENDESCR" label="隐患描述" />
<el-table-column label="状态" width="100">
<template v-slot="{ row }">
<el-button type="primary" text link @click="row">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/inspection/hidden_view',
query: {
HIDDEN_ID: row.HIDDEN_ID,
},
})
"
>
查看
</el-button>
</template>
@ -62,6 +74,7 @@
import { getKeyprojectcheckGoEdit } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
import router from "@/router";
const route = useRoute();
const data = reactive({

View File

@ -66,7 +66,7 @@
v-model="data.form.UNITS_ID"
clearable
placeholder="请选择相关方"
@change="fnGetUnitUser"
@change="fnGetUnitUser('', '')"
>
<el-option
v-for="item in data.unitsList"
@ -105,10 +105,18 @@
</el-col>
<el-col :span="8">
<el-form-item label="监理单位名称">
<el-input
<el-select
v-model="data.form.MANAGE_NAME"
placeholder="请输入内容"
/>
clearable
placeholder="请选择"
>
<el-option
v-for="item in data.mangeList"
:key="item.CORPINFO_ID"
:label="item.CORP_NAME"
:value="item.CORPINFO_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
@ -126,12 +134,24 @@
</el-col>
<el-col :span="8">
<el-form-item label="集团单位">
<el-input v-model="data.form.GROUP_UNIT" placeholder="请输入内容" />
<el-select
v-model="data.form.GROUP_UNIT"
clearable
placeholder="请选择"
>
<el-option
v-for="item in data.groupCorpList"
:key="item.CORPINFO_ID"
:label="item.CORP_NAME"
:value="item.CORPINFO_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="STATE">
<el-select v-model="data.form.STATE" placeholder="请选择状态">
<el-select v-model="data.form.STATE" placeholder="请选择">
<el-option label="待开始" value="0" />
<el-option label="进行中" value="1" />
<el-option label="已结束" value="2" />
</el-select>
@ -139,59 +159,63 @@
</el-col>
<el-col :span="8">
<el-form-item label="是否发送短信">
<el-input v-model="data.form.IS_SMS" placeholder="请输入内容" />
<el-select v-model="data.form.IS_SMS" placeholder="请选择">
<el-option label="是" value="0" />
<el-option label="否" value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="安全管理协议(附件)" prop="CONTACTS">
<el-input v-model="data.form.CONTACTS" placeholder="请输入内容" />
<el-col :span="24">
<el-form-item label="安全管理协议(附件)" prop="fileList">
<layout-upload
v-model:file-list="data.fileList"
accept=".jpg,.jpeg,.png"
delete-to-server
:limit="9"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left">
处罚相关&nbsp;&nbsp;
<el-button size="small" @click="addInspector"> </el-button>
</el-divider>
<template>
<template>
<el-divider content-position="left"> 处罚相关 </el-divider>
<el-row>
<template
v-for="(item, index) in data.form.acceptanceList"
:key="item.id"
>
<el-col :span="11">
<el-col :span="8">
<el-form-item
label="验收部门"
:prop="'acceptanceList.' + index + '.DEPARTMENT_ID'"
label="主管部门"
:prop="'acceptanceList.' + index + '.INSPECTION_DEPARTMENT_ID'"
:rules="{
required: true,
message: '请选择验收部门',
message: '请选择主管部门',
trigger: 'change',
}"
>
<layout-department
v-model="item.DEPARTMENT_ID"
v-model="item.INSPECTION_DEPARTMENT_ID"
@update:model-value="fnInspectDepartmentChange($event, index)"
/>
</el-form-item>
</el-col>
<el-col :span="11">
<el-col :span="8">
<el-form-item
label="验收人"
:prop="'acceptanceList.' + index + '.USER_ID'"
label="处罚人员"
:prop="'acceptanceList.' + index + '.INSPECTION_USER_ID'"
:rules="{
required: true,
message: '请选择验收人',
message: '请选择处罚人员',
trigger: 'change',
}"
>
<el-select
:model-value="item.USER_ID"
:model-value="item.INSPECTION_USER_ID"
@change="
verifyDuplicateSelection(
data.form.acceptanceList,
index,
'USER_ID',
'INSPECTION_USER_ID',
$event
)
"
@ -224,8 +248,8 @@
</el-form-item>
</el-col>
</template>
</template>
</template>
</el-row>
</el-form>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"> </el-button>
</div>
@ -240,6 +264,7 @@ import {
setOutsourcedEdit,
setOutsourcedGoEdit,
setPersonnelmanagementListAll,
getCorpinfoListAll,
} from "@/request/keyprojects";
import { ElMessage } from "element-plus";
import { debounce } from "throttle-debounce";
@ -247,6 +272,8 @@ import { reactive, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import LayoutDepartment from "@/components/department/index.vue";
import { getUserListAll } from "@/request/data_dictionary";
import { verifyDuplicateSelection } from "@/assets/js/utils.js";
import LayoutUpload from "@/components/upload/index.vue";
const router = useRouter();
const route = useRoute();
@ -279,26 +306,26 @@ const data = reactive({
acceptanceList: [
{
id: Math.random(),
DEPARTMENT_ID: "",
USER_ID: "",
INSPECTION_DEPARTMENT_ID: "",
INSPECTION_USER_ID: "",
userList: [],
},
],
},
inspectorList: [
{ INSPECTION_DEPARTMENT_ID: "", INSPECTION_USER_ID: "", USER_SIDE: "" },
],
fileList: [],
INSPECTOR_List: [],
unitsList: [],
groupCorpList: [],
mangeList: [],
});
const addInspector = () => {
data.inspectorList.push({
const fnAddInspectedList = () => {
data.form.acceptanceList.push({
id: Math.random(),
INSPECTION_DEPARTMENT_ID: "",
INSPECTION_USER_ID: "",
USER_SIDE: "",
userList: [],
});
data.INSPECTOR_List.push([]);
};
const fnGetData = async () => {
@ -307,21 +334,52 @@ const fnGetData = async () => {
});
data.form = resData.pd;
data.form.acceptanceList = resData.punishThePerson;
data.form.STARTTIME_TIMES = [resData.pd.STARTTIME, resData.pd.ENDTIME];
data.form.DEPARTMENT_ID = data.form.DEPARTMENT_ID.split(",");
data.form.INVOLVING_CORPS_DEPART_ID =
data.form.INVOLVING_CORPS_DEPART_ID.split(",");
fnGetUnitUser(resData.pd.UNITS_PIC, resData.pd.UNITS_PHONE);
for (let index = 0; index < data.form.acceptanceList.length; index++) {
const item = data.form.acceptanceList[index];
fnInspectDepartmentChange(item.INSPECTION_DEPARTMENT_ID, index);
}
for (let index = 0; index < resData.file9.length; index++) {
resData.file9[index].name = resData.file9[index].FILE_NAME;
}
data.fileList = resData.file9;
};
if (route.query.type === "edit") fnGetData();
const fnGetCorpList = async () => {
const resData2 = await getCorpinfoListAll({});
data.mangeList = resData2.varList;
resData2.varList.forEach((item) => {
if (
item.CORPINFO_ID === "1e6dbbe16004402f8d2c0e52afd9a676" ||
item.CORPINFO_ID === "3a854eefa7894e06aaa1a2611bca80f6" ||
item.CORPINFO_ID === "020578a4c1f04bc692ee25145c2efbe5" ||
item.CORPINFO_ID === "90966974de3c4b83aca6f8fd6432d5c2"
) {
data.groupCorpList.push(item);
}
});
};
fnGetCorpList();
const fnGetUnitsList = async () => {
const resData = await getUnitsListAll({});
data.unitsList = resData.varList;
};
fnGetUnitsList();
const fnGetUnitUser = async () => {
const fnGetUnitUser = async (UNITS_PIC, UNITS_PHONE) => {
const resData = await setPersonnelmanagementListAll({
UNITS_ID: data.form.UNITS_ID,
});
data.form.UNITS_PIC = "";
data.form.UNITS_PHONE = "";
data.form.UNITS_PIC = UNITS_PIC;
data.form.UNITS_PHONE = UNITS_PHONE;
data.unitsUserList = resData.varList;
};
@ -345,6 +403,7 @@ const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
@ -353,6 +412,24 @@ const fnSubmit = debounce(
formData.append("STARTTIME", data.form.STARTTIME_TIMES[0]);
formData.append("ENDTIME", data.form.STARTTIME_TIMES[1]);
}
let PUNISH_THE_PERSON = "";
data.form.acceptanceList.forEach((item) => {
PUNISH_THE_PERSON = item.INSPECTION_USER_ID + "," + PUNISH_THE_PERSON;
});
if (PUNISH_THE_PERSON.length > 0) {
PUNISH_THE_PERSON = PUNISH_THE_PERSON.substr(
0,
PUNISH_THE_PERSON.length - 1
);
}
formData.set("PUNISH_THE_PERSON", PUNISH_THE_PERSON);
for (let index = 0; index < data.fileList.length; index++) {
const item = data.fileList[index];
formData.append("file9", item.raw);
}
route.query.type === "edit"
? await setOutsourcedEdit(formData)
: await setOutsourcedAdd(formData);

View File

@ -62,7 +62,7 @@
/>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="UNITS_NAME" label="施工相关方" />
<el-table-column prop="UNITS_NAME" label="辖区单位">
<el-table-column label="辖区单位">
<template v-slot="{ row }">
<span v-if="row.JURISDICTION_UNIT_NAME">
{{ row.JURISDICTION_UNIT_NAME }}
@ -89,11 +89,12 @@
<el-table-column prop="MANAGE_CORPS_NAME" label="监理单位" />
<el-table-column prop="STATE" label="状态">
<template v-slot="{ row }">
<span v-if="row.STATE === '0'"></span>
<span v-if="row.STATE === '1'"></span>
<span v-if="row.STATE === '2'"></span>
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_CREATOR_NAME" label="创建人" />
<el-table-column prop="CREATOR" label="创建人" />
<el-table-column label="操作" align="center" width="200">
<template v-slot="{ row }">
<el-button
@ -111,9 +112,24 @@
>
查看
</el-button>
<el-button type="primary" text link v-if="row.STATE === '1'">
<el-button
type="primary"
text
link
v-if="row.STATE === '1'"
@click="fnHandleJie(row.OUTSOURCED_ID)"
>
结束
</el-button>
<el-button
type="primary"
text
link
v-if="row.STATE === '0'"
@click="fnHandleStart(row.OUTSOURCED_ID)"
>
审批
</el-button>
<el-button
type="primary"
text
@ -167,10 +183,12 @@ import {
getOutsourcedList,
getUnitsListAll,
setOutsourcedDelete,
getOutsourcedJie,
getOutsourcedStart,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
import router from "@/router";
import { ElMessageBox } from "element-plus";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getOutsourcedList);
@ -194,6 +212,30 @@ const fnHandleDelete = async (OUTSOURCED_ID) => {
type: "warning",
});
await setOutsourcedDelete({ OUTSOURCED_ID });
ElMessage.success("删除成功");
fnGetData();
};
const fnHandleJie = async (OUTSOURCED_ID) => {
await ElMessageBox.confirm("确定要结束吗?", {
type: "warning",
});
const resData = await getOutsourcedJie({ OUTSOURCED_ID });
if (resData.code === "0") {
ElMessage.success("操作成功");
} else {
ElMessage.warning(resData.message);
}
fnGetData();
};
const fnHandleStart = async (OUTSOURCED_ID) => {
const resData = await getOutsourcedStart({ OUTSOURCED_ID });
if (resData.code === "0") {
ElMessage.success("审批成功");
} else {
ElMessage.warning(resData.message);
}
fnGetData();
};
</script>

View File

@ -27,7 +27,10 @@
{{ data.info.JURISDICTION_UNIT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="企业监督部门">
{{ data.info.DEPARTMENT_NAME }}
<span v-if="data.info.Q_COMPETENT_DEPT_NAME">
{{ data.info.Q_COMPETENT_DEPT_NAME }}
</span>
<span v-else>{{ data.info.MANAGER_DEPARTMENT_NAME }}</span>
</el-descriptions-item>
<el-descriptions-item label="企业辖区部门" :span="2">
{{ data.info.INVOLVING_CORPS_DEPART_NAME }}
@ -63,12 +66,14 @@
{{ data.info.IS_SMS === "0" ? "是" : "否" }}
</el-descriptions-item>
<el-descriptions-item label="状态">
{{ data.info.STATE === "1" ? "进行中" : "已结束" }}
<span v-if="data.info.STATE === '0'"></span>
<span v-if="data.info.STATE === '1'"></span>
<span v-if="data.info.STATE === '2'"></span>
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">处罚相关</el-divider>
<el-descriptions border :column="2">
<div v-for="(item, index) in punishThePerson" :key="index">
<div v-for="(item, index) in data.punishThePerson" :key="index">
<el-descriptions-item label="处罚人员部门">
{{ item.punishname }}
</el-descriptions-item>

View File

@ -1,12 +1,14 @@
<template>
<el-dialog v-model="visible" :title="title" width="600" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-form
ref="formRef"
:rules="rules"
:model="form"
label-width="110px"
:disabled="type === 'view'"
>
<el-form-item label="单位名称" prop="UNITS_ID">
<el-select
:disabled="type === 'view'"
v-model="form.UNITS_ID"
placeholder="请选择状态"
>
<el-select v-model="form.UNITS_ID" placeholder="请选择状态">
<el-option
v-for="item in data.unitsnameList"
:key="item.UNITS_ID"
@ -16,11 +18,7 @@
</el-select>
</el-form-item>
<el-form-item label="作业类别">
<el-select
:disabled="type === 'view'"
v-model="form.JOB_TYPE"
placeholder="请选择状态"
>
<el-select v-model="form.JOB_TYPE" placeholder="请选择状态">
<el-option
v-for="item in jobtypeList"
:key="item.DICTIONARIES_ID"
@ -30,7 +28,14 @@
</el-select>
</el-form-item>
<el-form-item label="操作项目">
<el-input v-model="form.OPERATIONITEM" :disabled="type === 'view'" />
<el-select v-model="form.OPERATIONITEM" placeholder="请选择状态">
<el-option
v-for="item in data.operationitemList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
<el-form-item label="手机号码" prop="PHONENUM">
<el-input v-model="form.PHONENUM" :disabled="type === 'view'" />
@ -52,7 +57,12 @@
<el-input v-model="form.CERTIFICATE_NUM" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="复审时间">
<el-input v-model="form.REVIEWTIME" :disabled="type === 'view'" />
<el-date-picker
v-model="form.REVIEWTIME"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
/>
</el-form-item>
<el-form-item label="身份证号码">
<el-input v-model="form.IDENTITYCARD" :disabled="type === 'view'" />
@ -82,7 +92,7 @@
<script setup>
import { useVModels } from "@vueuse/core";
import { reactive, ref } from "vue";
import { reactive, ref, watchEffect } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
@ -92,6 +102,7 @@ import {
setPersonnelmanagementAdd,
setPersonnelmanagementEdit,
} from "@/request/keyprojects";
import { getLevels } from "@/request/data_dictionary.js";
const props = defineProps({
visible: {
@ -132,28 +143,30 @@ const rules = {
],
};
const formRef = ref(null);
const data = reactive({
unitsnameList: [],
operationitemList: [],
});
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
data.operationitemList = [];
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const form = props.form;
if (form.VALID_TIME && form.VALID_TIME.length !== 0) {
form.VALID_STIME = form.VALID_TIME[0];
form.VALID_ETIME = form.VALID_TIME[1];
}
props.type === "add"
? await setPersonnelmanagementAdd(props.form)
: await setPersonnelmanagementEdit(props.form);
? await setPersonnelmanagementAdd(form)
: await setPersonnelmanagementEdit(form);
ElMessage.success("提交成功");
fnClose();
emits("get-data");
@ -167,6 +180,15 @@ const fnUnitsListAll = async () => {
data.unitsnameList = resData.varList;
};
fnUnitsListAll();
const fnChangeType = async (DICTIONARIES_ID) => {
const resData = await getLevels({ DICTIONARIES_ID });
data.operationitemList = resData.list;
};
watchEffect(() => {
if (form.value.JOB_TYPE) fnChangeType(form.value.JOB_TYPE);
});
</script>
<style scoped lang="scss"></style>

View File

@ -57,9 +57,14 @@
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="OPERATIONITEM_NAME" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="SEX" label="性别">
<template v-slot="{ row }">
<span v-if="row.SEX === '0'"></span>
<span v-if="row.SEX === '1'"></span>
</template>
</el-table-column>
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="240">
@ -183,6 +188,10 @@ const fnGoEdit = async (id) => {
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
data.editDialog.form.VALID_TIME = [
resData.pd.VALID_STIME,
resData.pd.VALID_ETIME,
];
};
const fnResetPaginationTransfer = () => {

View File

@ -38,7 +38,14 @@
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="200" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门">
<template v-slot="{ row }">
<span v-if="row.Q_DEPARTMENT_NAME">
{{ row.Q_DEPARTMENT_NAME }}
</span>
<span v-else>{{ row.DEPARTMENT_NAME }}</span>
</template>
</el-table-column>
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"

View File

@ -47,7 +47,7 @@
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="REASON" label="处罚原因" width="200" />
<el-table-column prop="CREATOR_NAME" label="下发人" width="150" />
<el-table-column prop="CREATOR_NAMES" label="下发人" width="150" />
<el-table-column
prop="OUTSOURCED_NAME"
label="被处罚单位"
@ -67,7 +67,7 @@
link
@click="
router.push({
path: '/keyprojects/inspection/record_view',
path: '/keyprojects/punish/record_view',
query: {
KEYPROJECTPUNISH_ID: row.KEYPROJECTPUNISH_ID,
},

View File

@ -23,7 +23,13 @@
{{ data.info.DATE }}
</el-descriptions-item>
<el-descriptions-item label="罚款缴纳单 ">
{{ data.info.INSPECTION_TIME_START }}
<img
v-viewer
:src="FILE_URL + data.info.HANDLE_IMG"
width="100"
height="100"
class="ml"
/>
</el-descriptions-item>
<el-descriptions-item label="处罚处理人">
{{ data.info.PERSON_NAME }}
@ -42,6 +48,7 @@ import { getKeyprojectpunishGoEdit } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const FILE_URL = import.meta.env.VITE_FILE_URL;
const route = useRoute();
const data = reactive({
info: {},

View File

@ -1,106 +0,0 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR_CORP_NAME" label="添加单位" />
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="fnView(row.PERSONNELMANAGEMENT_ID)"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getPersonnelmanagementList,
setPersonnelmanagementGoEdit,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getPersonnelmanagementList);
const data = reactive({
type: "",
title: "",
editDialog: {
visible: false,
form: {},
},
});
const fnGoEdit = async (id) => {
const resData = await setPersonnelmanagementGoEdit({
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
};
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnView = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "view";
data.editDialog.title = "查看";
fnGoEdit(id);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,97 @@
<template>
<div>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="HIDDENDESCR" label="隐患描述" />
<el-table-column label="隐患状态">
<template v-slot="{ row }">
{{ translationStatus(row.HIDDEN_STATUS, stateList) }}
</template>
</el-table-column>
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/hazard_assignment_acceptance/view',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
查看
</el-button>
<el-button
v-if="
row.INSPECTED_SITEUSER_ID === USER_ID &&
(row.HIDDEN_STATUS === '101' || row.HIDDEN_STATUS === '16')
"
type="primary"
text
link
@click="goAssign(row, '-2')"
>
指派
</el-button>
<el-button
v-if="
row.CREATOR === USER_ID &&
(row.HIDDEN_STATUS === '4' || row.HIDDEN_STATUS === '8') &&
(!row.FINAL_CHECK || row.FINAL_CHECK === '2')
"
type="primary"
text
link
@click="goAccept(row)"
>
验收
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import { useRoute, useRouter } from "vue-router";
import { serialNumber, translationStatus } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js";
import { getHazardAssignmentAcceptanceHiddenList } from "@/request/safety_environmental_management.js";
import { useUserStore } from "@/pinia/user.js";
const stateList = [
{ ID: "101", NAME: "待整改" },
{ ID: "1", NAME: "待整改" },
{ ID: "2", NAME: "待验收" },
{ ID: "10", NAME: "验收打回" },
{ ID: "4", NAME: "已验收" },
{ ID: "-2", NAME: "已指派确认人" },
{ ID: "8", NAME: "特殊处置通过" },
{ ID: "16", NAME: "确认打回" },
];
const router = useRouter();
const route = useRoute();
const { INSPECTION_ID } = route.query;
const userStore = useUserStore();
const USER_ID = userStore.getUserInfo.USER_ID;
const { list, pagination, fnGetData } = useListData(
getHazardAssignmentAcceptanceHiddenList,
{
otherParams: { INSPECTION_ID },
}
);
</script>
<style scoped></style>

View File

@ -0,0 +1,225 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPaginationTransfer"
>
<el-row>
<el-col :span="4">
<el-form-item label="被检查单位" prop="INSPECTED_DEPARTMENT_ID">
<layout-department v-model="searchForm.INSPECTED_DEPARTMENT_ID" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查部门" prop="INSPECTION_DEPARTMENT_ID">
<layout-department
v-model="searchForm.INSPECTION_DEPARTMENT_ID"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查发起人" prop="INSPECTION_ORIGINATOR_NAME">
<el-input v-model="searchForm.INSPECTION_ORIGINATOR_NAME" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查类型" prop="INSPECTION_TYPE">
<layout-inspection-type v-model="searchForm.INSPECTION_TYPE" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检查时间" prop="dates">
<el-date-picker
v-model="searchForm.dates"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查状态" prop="INSPECTION_STATUS">
<el-select v-model="searchForm.INSPECTION_STATUS">
<el-option
v-for="item in stateList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查题目" prop="INSPECTION_SUBJECT">
<el-select v-model="searchForm.INSPECTION_SUBJECT">
<el-option
v-for="item in inspectionQuestionList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetDataTransfer"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTED_DEPARTMENT_NAMES" label="被检查单位" />
<el-table-column
prop="INSPECTED_SITEUSER_NAME"
label="被检查单位现场负责人"
/>
<el-table-column prop="INSPECTION_DEPARTMENT_NAME" label="检查部门" />
<el-table-column
prop="INSPECTION_ORIGINATOR_NAME"
label="检查发起人"
width="120"
/>
<el-table-column prop="INSPECTION_TYPE_NAME" label="检查类型" />
<el-table-column label="检查时间" width="270">
<template v-slot="{ row }">
<span>
{{ row.INSPECTION_TIME_START }}
{{ row.INSPECTION_TIME_END }}
</span>
</template>
</el-table-column>
<el-table-column label="状态" width="120">
<template v-slot="{ row }">
{{ translationStatus(row.INSPECTION_STATUS, stateList) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTION_SUBJECT" label="检查题目" />
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/hazard_assignment_acceptance/view',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
查看
</el-button>
<el-button
v-if="
(row.INSPECTION_STATUS === '3' ||
row.INSPECTION_STATUS === '4') &&
row.INSPECTED_SITEUSER_ID.includes(USER_ID)
"
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/hazard_assignment_acceptance/assign',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
指派
</el-button>
<el-button
v-if="
(row.INSPECTION_STATUS === '6' ||
row.INSPECTION_STATUS === '5' ||
row.INSPECTION_STATUS === '7') &&
row.checkout === 1
"
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/hazard_assignment_acceptance/acceptance',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
验收
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import { useRouter } from "vue-router";
import { serialNumber, translationStatus } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js";
import LayoutDepartment from "@/components/department/index.vue";
import LayoutInspectionType from "@/components/inspection_type/index.vue";
import { getHazardAssignmentAcceptanceList } from "@/request/safety_environmental_management.js";
import { useUserStore } from "@/pinia/user.js";
const stateList = [
{ ID: "0", NAME: "待检查人核实" },
{ ID: "1", NAME: "检查人核实中" },
{ ID: "2", NAME: "待被检查人确认" },
{ ID: "3", NAME: "待指派整改人" },
{ ID: "4", NAME: "指派中" },
{ ID: "5", NAME: "指派完成" },
{ ID: "6", NAME: "检查待验收" },
{ ID: "7", NAME: "检查已验收" },
{ ID: "8", NAME: "已归档" },
{ ID: "-1", NAME: "检查人核实打回" },
{ ID: "-2", NAME: "被检查人申辩" },
];
const inspectionQuestionList = [
{ ID: "安全", NAME: "安全" },
{ ID: "环保", NAME: "环保" },
{ ID: "综合", NAME: "综合" },
];
const router = useRouter();
const userStore = useUserStore();
const USER_ID = userStore.getUserInfo.USER_ID;
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getHazardAssignmentAcceptanceList, {
otherParams: {
ARCHIVE_USER_ID: USER_ID,
INSPECTION_STATUS: "3-7",
},
});
const fnGetDataTransfer = () => {
fnGetData({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
const fnResetPaginationTransfer = () => {
fnResetPagination({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
</script>
<style scoped></style>

View File

@ -0,0 +1,9 @@
<template>
<view-info />
</template>
<script setup>
import ViewInfo from "../safety_environmental/view.vue";
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,116 @@
<template>
<el-dialog v-model="visible" title="检查确认" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-form-item label="是否申辩" prop="INSPECTION_STATUS">
<el-radio v-model="form.INSPECTION_STATUS" label="3"></el-radio>
<el-radio
v-if="hiddenCount === 1"
v-model="form.INSPECTION_STATUS"
label="-2"
>
</el-radio>
</el-form-item>
<template v-if="form.INSPECTION_STATUS === '-2'">
<el-form-item label="申辩内容" prop="INSPECTED_EXPLAIN">
<el-input
v-model="form.INSPECTED_EXPLAIN"
:autosize="{ minRows: 3 }"
type="textarea"
/>
</el-form-item>
<el-form-item label="附件" prop="file">
<layout-upload v-model:file-list="form.file" accept=".pdf" />
</el-form-item>
</template>
<el-form-item label="确认人" prop="INSPECTED_SITEUSER_SIGN_IMG">
<layout-sign v-model="form.INSPECTED_SITEUSER_SIGN_IMG" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"> </el-button>
<el-button type="primary" @click="fnSubmit"></el-button>
</template>
</el-dialog>
</template>
<script setup>
import LayoutSign from "@/components/sign/index.vue";
import { useVModel } from "@vueuse/core";
import { ref } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import LayoutUpload from "@/components/upload/index.vue";
import { setInspectedPersonConfirmSubmit } from "@/request/safety_environmental_management.js";
import dayjs from "dayjs";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
id: {
type: String,
required: true,
default: "",
},
hiddenCount: {
type: Number,
required: true,
default: 0,
},
});
const emits = defineEmits(["update:visible", "get-data"]);
const visible = useVModel(props, "visible", emits);
const formRef = ref(null);
const form = ref({
INSPECTION_STATUS: "3",
INSPECTED_EXPLAIN: "",
file: [],
INSPECTED_SITEUSER_SIGN_IMG: "",
});
const rules = {
INSPECTION_STATUS: [
{ required: true, message: "请选择是否申辩", trigger: "change" },
],
INSPECTED_EXPLAIN: [
{ required: true, message: "请输入申辩内容", trigger: "blur" },
],
INSPECTED_SITEUSER_SIGN_IMG: [
{ required: true, message: "请签名", trigger: "blur" },
],
};
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(form.value).forEach((key) => {
formData.append(key, form.value[key]);
});
formData.append("INSPECTION_ID", props.id);
formData.append(
"INSPECTED_SITEUSER_SIGN_TIME",
dayjs().format("YYYY-MM-DD HH:mm")
);
formData.delete("file");
if (form.value.file[0]?.raw) {
formData.append("file", form.value.file[0].raw);
formData.append("INSPECTED_EXPLAIN_FILENAME", form.value.file[0].name);
}
await setInspectedPersonConfirmSubmit(formData);
fnClose();
ElMessage.success("核实成功");
emits("get-data");
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,223 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPaginationTransfer"
>
<el-row>
<el-col :span="4">
<el-form-item label="被检查单位" prop="INSPECTED_DEPARTMENT_ID">
<layout-department v-model="searchForm.INSPECTED_DEPARTMENT_ID" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查部门" prop="INSPECTION_DEPARTMENT_ID">
<layout-department
v-model="searchForm.INSPECTION_DEPARTMENT_ID"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查发起人" prop="INSPECTION_ORIGINATOR_NAME">
<el-input v-model="searchForm.INSPECTION_ORIGINATOR_NAME" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查类型" prop="INSPECTION_TYPE">
<layout-inspection-type v-model="searchForm.INSPECTION_TYPE" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检查时间" prop="dates">
<el-date-picker
v-model="searchForm.dates"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查状态" prop="INSPECTION_STATUS">
<el-select v-model="searchForm.INSPECTION_STATUS">
<el-option
v-for="item in stateList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查题目" prop="INSPECTION_SUBJECT">
<el-select v-model="searchForm.INSPECTION_SUBJECT">
<el-option
v-for="item in inspectionQuestionList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetDataTransfer"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTED_DEPARTMENT_NAMES" label="被检查单位" />
<el-table-column
prop="INSPECTED_SITEUSER_NAME"
label="被检查单位现场负责人"
/>
<el-table-column prop="INSPECTION_DEPARTMENT_NAME" label="检查部门" />
<el-table-column
prop="INSPECTION_ORIGINATOR_NAME"
label="检查发起人"
width="120"
/>
<el-table-column prop="INSPECTION_TYPE_NAME" label="检查类型" />
<el-table-column label="检查时间" width="270">
<template v-slot="{ row }">
<span>
{{ row.INSPECTION_TIME_START }}
{{ row.INSPECTION_TIME_END }}
</span>
</template>
</el-table-column>
<el-table-column label="状态" width="120">
<template v-slot="{ row }">
{{ translationStatus(row.INSPECTION_STATUS, stateList) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTION_SUBJECT" label="检查题目" />
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/inspected_person_confirm/view',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
查看
</el-button>
<el-button
v-if="
buttonJurisdiction.edit &&
row.INSPECTION_STATUS === '2' &&
row.INSPECTED_SITEUSER_ID === userStore.getUserInfo.USER_ID
"
type="primary"
text
link
@click="fnConfirm(row.INSPECTION_ID)"
>
确认
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
<confirm
v-model:visible="data.confirmDialog.visible"
:id="data.confirmDialog.INSPECTION_ID"
:hidden-count="data.confirmDialog.hiddenCount"
@get-data="fnResetPaginationTransfer"
/>
</div>
</template>
<script setup>
import { useRouter } from "vue-router";
import { serialNumber, translationStatus } from "@/assets/js/utils";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import useListData from "@/assets/js/useListData.js";
import LayoutDepartment from "@/components/department/index.vue";
import LayoutInspectionType from "@/components/inspection_type/index.vue";
import {
getInspectedPersonConfirmHiddenCount,
getInspectedPersonConfirmList,
} from "@/request/safety_environmental_management.js";
import { reactive } from "vue";
import Confirm from "./components/confirm.vue";
import { useUserStore } from "@/pinia/user.js";
const stateList = [
{ ID: "0", NAME: "待检查人核实" },
{ ID: "1", NAME: "检查人核实中" },
{ ID: "2", NAME: "待被检查人确认" },
{ ID: "3", NAME: "待指派整改人" },
{ ID: "4", NAME: "指派中" },
{ ID: "5", NAME: "指派完成" },
{ ID: "6", NAME: "检查待验收" },
{ ID: "7", NAME: "检查已验收" },
{ ID: "8", NAME: "已归档" },
{ ID: "-1", NAME: "检查人核实打回" },
{ ID: "-2", NAME: "被检查人申辩" },
];
const inspectionQuestionList = [
{ ID: "安全", NAME: "安全" },
{ ID: "环保", NAME: "环保" },
{ ID: "综合", NAME: "综合" },
];
const router = useRouter();
const userStore = useUserStore();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getInspectedPersonConfirmList);
const data = reactive({
confirmDialog: {
visible: false,
INSPECTION_ID: "",
hiddenCount: 0,
},
});
const fnGetDataTransfer = () => {
fnGetData({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
const fnResetPaginationTransfer = () => {
fnResetPagination({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
const buttonJurisdiction = await useButtonJurisdiction(
"safetyenvironmentalinspector"
);
const fnConfirm = async (INSPECTION_ID) => {
const resData = await getInspectedPersonConfirmHiddenCount({ INSPECTION_ID });
data.confirmDialog.hiddenCount = +resData.hiddencount;
data.confirmDialog.INSPECTION_ID = INSPECTION_ID;
data.confirmDialog.visible = true;
};
</script>
<style scoped></style>

View File

@ -0,0 +1,9 @@
<template>
<view-info />
</template>
<script setup>
import ViewInfo from "../safety_environmental/view.vue";
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,88 @@
<template>
<el-dialog v-model="visible" title="核实" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-form-item label="检查人意见" prop="INSPECTION_USER_OPINION">
<el-input
v-model="form.INSPECTION_USER_OPINION"
:autosize="{ minRows: 3 }"
type="textarea"
placeholder="这里输入检查人意见(有异议时必填)..."
/>
</el-form-item>
<el-form-item label="检查人" prop="INSPECTION_USER_SIGN_IMG">
<layout-sign v-model="form.INSPECTION_USER_SIGN_IMG" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"> </el-button>
<el-button type="danger" @click="fnSubmit('-1')"></el-button>
<el-button type="primary" @click="fnSubmit('1')"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import LayoutSign from "@/components/sign/index.vue";
import { useVModel } from "@vueuse/core";
import { ref } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import { setInspectorsVerifyManagementVerify } from "@/request/safety_environmental_management.js";
import dayjs from "dayjs";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
info: {
type: Object,
required: true,
default: () => ({}),
},
});
const emits = defineEmits(["update:visible", "get-data"]);
const visible = useVModel(props, "visible", emits);
const formRef = ref(null);
const form = ref({
INSPECTION_USER_OPINION: "",
INSPECTION_USER_SIGN_IMG: "",
});
const rules = {
INSPECTION_USER_SIGN_IMG: [
{ required: true, message: "请签名", trigger: "blur" },
],
};
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async (INSPECTION_STATUS) => {
await useFormValidate(formRef);
if (INSPECTION_STATUS === "-1") {
if (!form.value.INSPECTION_USER_OPINION) {
ElMessage.warning("有异议时,检查人意见不能为空");
return false;
}
}
await setInspectorsVerifyManagementVerify({
...form.value,
INSPECTION_INSPECTOR_ID: props.info.INSPECTION_INSPECTOR_ID,
INSPECTION_ID: props.info.INSPECTION_ID,
INSPECTION_USER_ID: props.info.INSPECTION_USER_ID,
INSPECTION_USER_SIGN_TIME: dayjs().format("YYYY-MM-DD HH:mm"),
INSPECTION_STATUS,
});
fnClose();
ElMessage.success("核实成功");
emits("get-data");
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,214 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPaginationTransfer"
>
<el-row>
<el-col :span="4">
<el-form-item label="被检查单位" prop="INSPECTED_DEPARTMENT_ID">
<layout-department v-model="searchForm.INSPECTED_DEPARTMENT_ID" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查部门" prop="INSPECTION_DEPARTMENT_ID">
<layout-department
v-model="searchForm.INSPECTION_DEPARTMENT_ID"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查发起人" prop="INSPECTION_ORIGINATOR_NAME">
<el-input v-model="searchForm.INSPECTION_ORIGINATOR_NAME" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查类型" prop="INSPECTION_TYPE">
<layout-inspection-type v-model="searchForm.INSPECTION_TYPE" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检查时间" prop="dates">
<el-date-picker
v-model="searchForm.dates"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查状态" prop="INSPECTION_STATUS">
<el-select v-model="searchForm.INSPECTION_STATUS">
<el-option
v-for="item in stateList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="检查题目" prop="INSPECTION_SUBJECT">
<el-select v-model="searchForm.INSPECTION_SUBJECT">
<el-option
v-for="item in inspectionQuestionList"
:key="item.ID"
:label="item.NAME"
:value="item.ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetDataTransfer"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTED_DEPARTMENT_NAMES" label="被检查单位" />
<el-table-column
prop="INSPECTED_SITEUSER_NAME"
label="被检查单位现场负责人"
/>
<el-table-column prop="INSPECTION_DEPARTMENT_NAME" label="检查部门" />
<el-table-column
prop="INSPECTION_ORIGINATOR_NAME"
label="检查发起人"
width="120"
/>
<el-table-column prop="INSPECTION_TYPE_NAME" label="检查类型" />
<el-table-column label="检查时间" width="270">
<template v-slot="{ row }">
<span>
{{ row.INSPECTION_TIME_START }}
{{ row.INSPECTION_TIME_END }}
</span>
</template>
</el-table-column>
<el-table-column label="状态" width="120">
<template v-slot="{ row }">
{{ translationStatus(row.INSPECTION_STATUS, stateList) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTION_SUBJECT" label="检查题目" />
<el-table-column label="操作" width="120">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_environmental_management/inspectors_verify_management/view',
query: { INSPECTION_ID: row.INSPECTION_ID },
})
"
>
查看
</el-button>
<el-button
v-if="
buttonJurisdiction.edit &&
!row.INSPECTION_USER_SIGN_TIME &&
(row.INSPECTION_STATUS === '0' || row.INSPECTION_STATUS === '1')
"
type="primary"
text
link
@click="fnVerify(row)"
>
核实
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
<verify
v-model:visible="data.verifyDialog.visible"
:info="data.verifyDialog.info"
@get-data="fnResetPaginationTransfer"
/>
</div>
</template>
<script setup>
import { useRouter } from "vue-router";
import { serialNumber, translationStatus } from "@/assets/js/utils";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import useListData from "@/assets/js/useListData.js";
import LayoutDepartment from "@/components/department/index.vue";
import LayoutInspectionType from "@/components/inspection_type/index.vue";
import { getInspectorsVerifyManagementList } from "@/request/safety_environmental_management.js";
import { reactive } from "vue";
import Verify from "./components/verify.vue";
const stateList = [
{ ID: "0", NAME: "待检查人核实" },
{ ID: "1", NAME: "检查人核实中" },
{ ID: "2", NAME: "待被检查人确认" },
{ ID: "3", NAME: "待指派整改人" },
{ ID: "4", NAME: "指派中" },
{ ID: "5", NAME: "指派完成" },
{ ID: "6", NAME: "检查待验收" },
{ ID: "7", NAME: "检查已验收" },
{ ID: "8", NAME: "已归档" },
{ ID: "-1", NAME: "检查人核实打回" },
{ ID: "-2", NAME: "被检查人申辩" },
];
const inspectionQuestionList = [
{ ID: "安全", NAME: "安全" },
{ ID: "环保", NAME: "环保" },
{ ID: "综合", NAME: "综合" },
];
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getInspectorsVerifyManagementList);
const data = reactive({
verifyDialog: {
visible: false,
info: {},
},
});
const fnGetDataTransfer = () => {
fnGetData({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
const fnResetPaginationTransfer = () => {
fnResetPagination({
INSPECTION_TIME_START: searchForm.value.dates?.[0],
INSPECTION_TIME_END: searchForm.value.dates?.[1],
});
};
const buttonJurisdiction = await useButtonJurisdiction(
"safetyenvironmentalinspector"
);
const fnVerify = (row) => {
data.verifyDialog.info = row;
data.verifyDialog.visible = true;
};
</script>
<style scoped></style>

View File

@ -0,0 +1,9 @@
<template>
<view-info />
</template>
<script setup>
import ViewInfo from "../safety_environmental/view.vue";
</script>
<style scoped lang="scss"></style>

View File

@ -45,17 +45,17 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="检查人意见" prop="INSPECTION_USER_OPINION">
<el-form-item label="检查人意见" prop="CONFIRM_MESSAGE">
<el-input
v-model="data.form.INSPECTION_USER_OPINION"
v-model="data.form.CONFIRM_MESSAGE"
:autosize="{ minRows: 3 }"
type="textarea"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="检查人" prop="INSPECTION_USER_SIGN_IMG">
<layout-sign v-model="data.form.INSPECTION_USER_SIGN_IMG" />
<el-form-item label="检查人" prop="CONFIRM_MESSAGE_SIGN">
<layout-sign v-model="data.form.CONFIRM_MESSAGE_SIGN" />
</el-form-item>
</el-col>
<el-col :span="8">
@ -96,7 +96,15 @@
:key="item.id"
>
<el-col :span="12">
<el-form-item label="检查人员部门" prop="INSPECTION_DEPARTMENT_ID">
<el-form-item
label="检查人员部门"
:prop="'inspectorList.' + index + '.INSPECTION_DEPARTMENT_ID'"
:rules="{
required: true,
message: '请选择检查人员部门',
trigger: 'change',
}"
>
<layout-department
v-model="item.INSPECTION_DEPARTMENT_ID"
@update:model-value="
@ -106,7 +114,15 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检查人员" prop="INSPECTION_USER_ID">
<el-form-item
label="检查人员"
:prop="'inspectorList.' + index + '.INSPECTION_USER_ID'"
:rules="{
required: true,
message: '请选择检查人员',
trigger: 'change',
}"
>
<div
style="
flex: 1;
@ -148,7 +164,15 @@
:key="item.id"
>
<el-col :span="24">
<el-form-item label="检查情况" prop="SITUATION">
<el-form-item
label="检查情况"
:prop="'situationList.' + index + '.SITUATION'"
:rules="{
required: true,
message: '请输入检查情况',
trigger: 'blur',
}"
>
<div
style="
flex: 1;
@ -178,15 +202,38 @@
<el-divider content-position="left">发现问题</el-divider>
</el-col>
<el-col :span="24" class="tr mb-10">
<el-button type="primary"> 添加发现问题 </el-button>
<el-button type="primary" @click="fnAddHidden">
添加发现问题
</el-button>
</el-col>
<el-col :span="24">
<layout-table :data="data.form.hiddenList" :show-pagination="false">
<el-table-column type="index" label="序号" width="60" />
<el-table-column label="问题描述" prop="HIDDENDESCR" />
<el-table-column label="操作" width="80">
<template v-slot="{ $index }">
<el-button
type="primary"
text
link
@click="data.form.hiddenList.splice($index, 1)"
>
删除
</el-button>
</template>
</el-table-column>
</layout-table>
</el-col>
</el-row>
</el-form>
<div class="mt-10 tc">
<el-button type="primary" @click="fnSubmit"></el-button>
</div>
<hidden-add
v-model:visible="data.addHiddenDialog.visible"
:hazard-discoverer-list="data.addHiddenDialog.hazardDiscovererList"
@submit="fnAddHiddenSubmit"
/>
</layout-card>
</template>
@ -196,17 +243,68 @@ import LayoutDepartment from "@/components/department/index.vue";
import LayoutSign from "@/components/sign/index.vue";
import { getUserListAll } from "@/request/data_dictionary.js";
import LayoutInspectionType from "@/components/inspection_type/index.vue";
import HiddenAdd from "./components/hidden_add.vue";
import { useUserStore } from "@/pinia/user.js";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import { useRoute, useRouter } from "vue-router";
import {
getSafetyEnvironmentalView,
setSafetyEnvironmentalAdd,
setSafetyEnvironmentalEdit,
} from "@/request/safety_environmental_management.js";
import { setUploadImg, setUploadVideo } from "@/request/api.js";
import dayjs from "dayjs";
const rules = {};
const route = useRoute();
const router = useRouter();
const userStore = useUserStore();
const { INSPECTION_ID } = route.query;
const rules = {
INSPECTION_SUBJECT: [
{ required: true, message: "请选择检查题目", trigger: "change" },
],
INSPECTED_DEPARTMENT_ID: [
{ required: true, message: "请选择被检查单位", trigger: "change" },
],
INSPECTED_SITEUSER_ID: [
{
required: true,
message: "请选择被检查单位现场负责人",
trigger: "change",
},
],
INSPECTION_PLACE: [
{ required: true, message: "请输入检查场所", trigger: "blur" },
],
CONFIRM_MESSAGE: [
{ required: true, message: "请输入检查人意见", trigger: "blur" },
],
CONFIRM_MESSAGE_SIGN: [
{ required: true, message: "请上传检查人签名", trigger: "change" },
],
INSPECTION_TYPE: [
{ required: true, message: "请选择检查类型", trigger: "change" },
],
INSPECTION_TIME_START: [
{ required: true, message: "请选择检查开始时间", trigger: "change" },
],
INSPECTION_TIME_END: [
{ required: true, message: "请选择检查结束时间", trigger: "change" },
],
};
const formRef = ref(null);
const data = reactive({
form: {
INSPECTION_SOURCE: "5",
INSPECTION_STATUS: "0",
INSPECTION_SUBJECT: "安全",
INSPECTED_DEPARTMENT_ID: "",
INSPECTED_SITEUSER_ID: "",
INSPECTION_PLACE: "",
INSPECTION_USER_OPINION: "",
INSPECTION_USER_SIGN_IMG: "",
CONFIRM_MESSAGE: "",
CONFIRM_MESSAGE_SIGN: "",
INSPECTION_TYPE: "",
INSPECTION_TIME_START: "",
INSPECTION_TIME_END: "",
@ -215,6 +313,10 @@ const data = reactive({
hiddenList: [],
},
inspectedSiteUserList: [],
addHiddenDialog: {
visible: false,
hazardDiscovererList: [],
},
});
const fnAddInspectorList = () => {
data.form.inspectorList.push({
@ -224,21 +326,35 @@ const fnAddInspectorList = () => {
id: Math.random(),
});
};
fnAddInspectorList();
const fnAddSituationList = () => {
data.form.situationList.push({
SITUATION: "",
id: Math.random(),
});
};
fnAddSituationList();
const fnGetData = async () => {
if (!INSPECTION_ID) {
fnAddInspectorList();
fnAddSituationList();
return;
}
const resData = await getSafetyEnvironmentalView({ INSPECTION_ID });
data.form = resData.pd;
for (let i = 0; i < resData.pd.inspectorList.length; i++) {
await fnGetInspectionSitUserList(
resData.pd.inspectorList[i].INSPECTION_DEPARTMENT_ID,
i
);
}
};
fnGetData();
const fnInspectedDepartmentChange = () => {
data.inspectedSiteUserList.value = [];
data.inspectedSiteUserList = [];
data.form.INSPECTED_SITEUSER_ID = "";
};
const fnGetInspectedSitUserList = async (DEPARTMENT_ID) => {
const { userList } = await getUserListAll({ DEPARTMENT_ID });
data.inspectedSiteUserList.value = userList;
data.inspectedSiteUserList = userList;
};
const fnInspectionDepartmentChange = (value, index) => {
data.form.inspectorList[index].INSPECTION_USER_ID = "";
@ -246,13 +362,107 @@ const fnInspectionDepartmentChange = (value, index) => {
fnGetInspectionSitUserList(value, index);
};
const fnGetInspectionSitUserList = async (DEPARTMENT_ID, index) => {
const { userList } = await getUserListAll({ DEPARTMENT_ID });
const { userList } = await getUserListAll({ DEPARTMENT_ID, NOMAIN: "1" });
data.form.inspectorList[index].inspectionUserList = userList;
};
watchEffect(() => {
if (data.form.INSPECTED_DEPARTMENT_ID)
fnGetInspectedSitUserList(data.form.INSPECTED_DEPARTMENT_ID);
});
const fnAddHidden = () => {
data.addHiddenDialog.visible = true;
data.addHiddenDialog.hazardDiscovererList = [
{
NAME: userStore.getUserInfo.NAME,
USER_ID: userStore.getUserInfo.USER_ID,
},
];
const inspectorList = data.form.inspectorList;
for (let i = 0; i < inspectorList.length; i++) {
const inspectionUserList = inspectorList[i].inspectionUserList;
for (let j = 0; j < inspectionUserList.length; j++) {
if (
inspectorList[i].INSPECTION_USER_ID === inspectionUserList[j].USER_ID
) {
data.addHiddenDialog.hazardDiscovererList.push(inspectionUserList[j]);
break;
}
}
}
};
const fnAddHiddenSubmit = (item) => {
data.form.hiddenList.push(item);
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const inspectorList = [...data.form.inspectorList];
if (
!inspectorList.some(
(item) => userStore.getUserInfo.USER_ID === item.INSPECTION_USER_ID
)
) {
inspectorList.push({
INSPECTION_INSPECTOR_ID: "",
INSPECTION_DEPARTMENT_ID: userStore.getUserInfo.DEPARTMENT_ID,
INSPECTION_USER_ID: userStore.getUserInfo.USER_ID,
});
}
let hiddenList = [];
if (!INSPECTION_ID) {
const resData = await setSafetyEnvironmentalAdd({
...data.form,
HIDDENFINDDEPT: userStore.getUserInfo.DEPARTMENT_ID,
INSPECTORJSON: JSON.stringify(inspectorList),
SITUATIONJSON: JSON.stringify(data.form.situationList),
HIDDENJSON: JSON.stringify(data.form.hiddenList),
CONFIRM_MESSAGE_TIME: dayjs().format("YYYY-MM-DD HH:mm"),
});
hiddenList = resData.pd.hiddenList;
} else {
const resData = await setSafetyEnvironmentalEdit({
...data.form,
INSPECTORJSON: JSON.stringify(inspectorList),
SITUATIONJSON: JSON.stringify(data.form.situationList),
HIDDENJSON: JSON.stringify(data.form.hiddenList),
CONFIRM_MESSAGE_TIME: dayjs().format("YYYY-MM-DD HH:mm"),
});
hiddenList = resData.pd.hiddenList;
}
for (let i = 0; i < hiddenList.length; i++) {
await fnUploadImage(
hiddenList[i].HIDDEN_ID,
data.form.hiddenList[i].hiddenImgs
);
await fnUploadVideo(
hiddenList[i].HIDDEN_ID,
data.form.hiddenList[i].videoFiles
);
}
ElMessage.success("提交成功");
router.back();
},
{ atBegin: true }
);
const fnUploadImage = async (HIDDEN_ID, files) => {
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append("FFILE", files[i]);
}
formData.append("FOREIGN_KEY", HIDDEN_ID);
formData.append("TYPE", 3);
await setUploadImg(formData);
};
const fnUploadVideo = async (HIDDEN_ID, files) => {
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
formData.append("FFILE", files[i]);
}
formData.append("FOREIGN_KEY", HIDDEN_ID);
formData.append("TYPE", 102);
await setUploadVideo(formData);
};
</script>
<style scoped lang="scss"></style>

View File

@ -10,7 +10,10 @@
import { useVModel } from "@vueuse/core";
import RelationGraph from "relation-graph/vue3";
import { ref, watchEffect } from "vue";
import { getSafetyEnvironmentalFlowChart } from "@/request/safety_environmental_management.js";
import {
getSafetyEnvironmentalListFlowChart,
getSafetyEnvironmentalViewFlowChart,
} from "@/request/safety_environmental_management.js";
const props = defineProps({
visible: {
@ -23,6 +26,11 @@ const props = defineProps({
required: true,
default: "",
},
type: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
@ -63,10 +71,17 @@ const graphOptions = ref({
defaultNodeWidth: 200,
});
const fnGetData = async () => {
const { nodes, from } = await getSafetyEnvironmentalFlowChart({
INSPECTION_ID: props.id,
});
fnSeeksGraph(nodes, from);
if (props.type === "list") {
const { nodes, from } = await getSafetyEnvironmentalListFlowChart({
INSPECTION_ID: props.id,
});
fnSeeksGraph(nodes, from);
} else if (props.type === "view") {
const { nodes, from } = await getSafetyEnvironmentalViewFlowChart({
HIDDEN_ID: props.id,
});
fnSeeksGraph(nodes, from);
}
};
const fnSeeksGraph = (nodes, links) => {
relationGraphRef.value.setJsonData({ nodes, links }, () => {});

View File

@ -0,0 +1,176 @@
<template>
<el-dialog v-model="visible" title="添加隐患" :on-close="fnClose">
<el-form ref="formRef" :model="form" :rules="rules" label-width="110px">
<el-row>
<el-col :span="24">
<el-form-item label="隐患描述" prop="HIDDENDESCR">
<el-input
v-model="form.HIDDENDESCR"
placeholder="请输入内容"
type="textarea"
:autosize="{ minRows: 3 }"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="DISCOVERYTIME" label="隐患发现时间">
<el-date-picker
v-model="form.DISCOVERYTIME"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患部位" prop="HIDDENPART">
<el-input v-model="form.HIDDENPART" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患级别" prop="HIDDENLEVEL">
<el-select v-model="form.HIDDENLEVEL">
<el-option
v-for="item in [
{ BIANMA: 'hiddenLevel0001', NAME: '一般隐患' },
]"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患类型" prop="HIDDENTYPE">
<layout-hidden-danger-type
v-model="form.HIDDENTYPE"
ref="hiddenDangerTypeRef"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患图片" prop="hiddenImgs">
<layout-upload
v-model:file-list="form.hiddenImgs"
list-type="picture-card"
accept=".jpg,.jpeg,.png"
:limit="99"
delete-to-server
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患视频" prop="videoFiles">
<layout-upload
v-model:file-list="form.videoFiles"
accept=".mp4"
:size="50"
>
<template #tip>只能上传mp4文件且不超过50M</template>
</layout-upload>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患发现人" prop="CREATOR">
<el-select v-model="form.CREATOR">
<el-option
v-for="item in hazardDiscovererList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="fnClose"></el-button>
<el-button @click="fnSubmit"></el-button>
</template>
</el-dialog>
</template>
<script setup>
import LayoutHiddenDangerType from "@/components/hazard_type/index.vue";
import LayoutUpload from "@/components/upload/index.vue";
import { ref } from "vue";
import { useVModels } from "@vueuse/core";
import useFormValidate from "@/assets/js/useFormValidate.js";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
hazardDiscovererList: {
type: Array,
required: true,
default: () => [],
},
});
const emits = defineEmits(["update:visible", "submit"]);
const { visible } = useVModels(props, emits);
const rules = {
HIDDENDESCR: [{ required: true, message: "请输入隐患描述", trigger: "blur" }],
DISCOVERYTIME: [
{ required: true, message: "请选择隐患发现时间", trigger: "change" },
],
HIDDENPART: [{ required: true, message: "请输入隐患部位", trigger: "blur" }],
HIDDENLEVEL: [
{ required: true, message: "请选择隐患级别", trigger: "change" },
],
HIDDENTYPE: [
{ required: true, message: "请选择隐患类型", trigger: "change" },
],
hiddenImgs: [
{ required: true, message: "请上传隐患图片", trigger: "change" },
],
CREATOR: [{ required: true, message: "请选择隐患发现人", trigger: "change" }],
};
const form = ref({
SOURCE: "5",
HIDDENDESCR: "",
DISCOVERYTIME: "",
HIDDENPART: "",
HIDDENLEVEL: "",
HIDDENTYPE: [],
hiddenImgs: [],
videoFiles: [],
CREATOR: "",
});
const formRef = ref(null);
const hiddenDangerTypeRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = async () => {
await useFormValidate(formRef);
const throwForm = { ...form.value };
delete throwForm.hiddenImgs;
delete throwForm.videoFiles;
throwForm.hiddenImgs = [];
throwForm.videoFiles = [];
for (let i = 0; i < form.value.hiddenImgs.length; i++) {
if (form.value.hiddenImgs[i].raw)
throwForm.hiddenImgs.push(form.value.hiddenImgs[i].raw);
}
for (let i = 0; i < form.value.videoFiles.length; i++) {
if (form.value.videoFiles[i].raw)
throwForm.videoFiles.push(form.value.videoFiles[i].raw);
}
emits("submit", {
...throwForm,
HIDDENTYPE1: form.value.HIDDENTYPE[0],
HIDDENTYPE2: form.value.HIDDENTYPE[1],
HIDDENTYPE3: form.value.HIDDENTYPE[2],
HIDDENTYPE_NAME: hiddenDangerTypeRef.value.getCheckedNodes(),
});
fnClose();
};
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,30 @@
<template>
<el-dialog v-model="visible" title="查看隐患">
<layout-hidden-view :hidden-id="id" />
<template #footer>
<el-button @click="visible = false"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import LayoutHiddenView from "@/components/hidden_view/index.vue";
import { useVModel } from "@vueuse/core";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
id: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
</script>
<style scoped lang="scss"></style>

View File

@ -99,10 +99,7 @@
:data="list"
@get-data="fnGetDataTransfer"
v-model:pagination="pagination"
ref="tableRef"
row-key="INSPECTION_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
@ -112,6 +109,7 @@
<el-table-column
prop="INSPECTED_SITEUSER_NAME"
label="被检查单位现场负责人"
width="150"
/>
<el-table-column prop="INSPECTION_DEPARTMENT_NAME" label="检查部门" />
<el-table-column
@ -159,7 +157,11 @@
流程图
</el-button>
<el-button
v-if="buttonJurisdiction.edit && row.INSPECTION_STATUS === '-1'"
v-if="
buttonJurisdiction.edit &&
row.INSPECTION_ORIGINATOR_ID === USER_ID &&
row.INSPECTION_STATUS === '-1'
"
type="primary"
text
link
@ -213,6 +215,7 @@
<flow-chart
v-model:visible="data.flowChartDialog.visible"
:id="data.flowChartDialog.INSPECTION_ID"
type="list"
/>
<defense
v-model:visible="data.defenseDialog.visible"
@ -268,7 +271,7 @@ const hiddenTotal = ref(0);
const userStore = useUserStore();
const USER_ID = userStore.getUserInfo.USER_ID;
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyEnvironmentalList, {
callbackFn: (list, resData) => {
safetyTotal.value = resData.safetyTotal;

View File

@ -1,7 +1,205 @@
<template>
<layout-card></layout-card>
<layout-card>
<div id="printContainer">
<el-divider content-position="left">
秦港股份有限公司现场{{ data.info.INSPECTION_SUBJECT }}检查记录
</el-divider>
<el-descriptions :column="2" border>
<el-descriptions-item label="被检查单位">
{{ data.info.INSPECTED_DEPARTMENT_NAMES }}
</el-descriptions-item>
<el-descriptions-item label="被检查单位现场负责人">
{{ data.info.INSPECTED_SITEUSER_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查场所" :span="2">
{{ data.info.INSPECTION_PLACE }}
</el-descriptions-item>
<el-descriptions-item label="牵头检查部门">
{{ data.info.INSPECTION_LEADDEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查人员">
{{ data.info.INSPECTION_USER_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查类型">
{{ data.info.INSPECTION_TYPE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查时间">
{{
dayjs(data.info.INSPECTION_TIME_START).format(
"YYYY年MM月DD日HH时mm分"
)
}}
{{
dayjs(data.info.INSPECTION_TIME_END).format(
"YYYY年MM月DD日HH时mm分"
)
}}
</el-descriptions-item>
<el-descriptions-item label="记录填写时间">
{{ data.info.CREATTIME }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">检查情况</el-divider>
<el-descriptions :column="1" border>
<el-descriptions-item
v-for="(item, index) in data.info.situationList"
:key="'situation' + index"
:label="'检查情况' + (index + 1)"
>
{{ item.SITUATION }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">发现问题</el-divider>
<table>
<tr>
<th class="title">隐患描述</th>
<th class="title">隐患部位</th>
<th class="title print_no_use">操作</th>
</tr>
<tr v-for="item in data.info.hiddenList" :key="item.HIDDEN_ID">
<td>{{ item.HIDDENDESCR }}</td>
<td>{{ item.HIDDENPART_NAME || item.HIDDENPART }}</td>
<td class="print_no_use">
<el-button type="primary" text link @click="fnView(item.HIDDEN_ID)">
查看
</el-button>
<el-button
type="primary"
text
link
@click="fnFlowChart(item.HIDDEN_ID)"
>
流程图
</el-button>
</td>
</tr>
</table>
<div class="print_no_use" v-if="data.info?.inspectorList?.length > 0">
<el-divider content-position="left">检查人员核实情况</el-divider>
<table class="table-ui">
<tr>
<th>序号</th>
<th>核实人员</th>
<th>核实时间</th>
<th>核实意见</th>
<th>签字</th>
</tr>
<tr v-for="(item, index) in data.info.inspectorList" :key="index">
<td>{{ index + 1 }}</td>
<td>{{ item.INSPECTION_USER_NAME }}</td>
<td>{{ item.INSPECTION_USER_SIGN_TIME }}</td>
<td>{{ item.INSPECTION_USER_OPINION }}</td>
<td>
<img
v-viewer
:src="VITE_FILE_URL + item.INSPECTION_USER_SIGN_IMG"
width="100"
height="100"
alt=""
/>
</td>
</tr>
</table>
</div>
<el-descriptions :column="1" border class="mt-10">
<el-descriptions-item label="检查人员(签名)">
<img
v-for="(item, index) in data.info?.inspectorList"
:key="index"
v-viewer
:src="VITE_FILE_URL + item.INSPECTION_USER_SIGN_IMG"
width="100"
height="100"
alt=""
/>
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border class="mt-10">
<el-descriptions-item label="被检查单位负责人(签名)">
<img
v-if="data.info.INSPECTED_SITEUSER_SIGN_IMG"
v-viewer
:src="VITE_FILE_URL + data.info.INSPECTED_SITEUSER_SIGN_IMG"
width="100"
height="100"
alt=""
/>
<div v-else></div>
</el-descriptions-item>
</el-descriptions>
</div>
<div class="mt-10 tc">
<el-button type="primary" v-print="'#printContainer'"></el-button>
</div>
<div v-html="PRINT_STYLE" />
<flow-chart
v-model:visible="data.flowChartDialog.visible"
:id="data.flowChartDialog.HIDDEN_ID"
type="view"
/>
<view-hidden
v-model:visible="data.viewDialog.visible"
:id="data.viewDialog.HIDDEN_ID"
/>
</layout-card>
</template>
<script setup></script>
<script setup>
import { useRoute } from "vue-router";
import { getSafetyEnvironmentalViewInfo } from "@/request/safety_environmental_management.js";
import { reactive } from "vue";
import dayjs from "dayjs";
import FlowChart from "./components/flow_chart.vue";
import ViewHidden from "./components/view_hidden.vue";
import { PRINT_STYLE } from "@/assets/js/constant.js";
<style scoped lang="scss"></style>
const route = useRoute();
const { INSPECTION_ID } = route.query;
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
const data = reactive({
info: {},
flowChartDialog: {
visible: false,
HIDDEN_ID: "",
},
viewDialog: {
visible: false,
HIDDEN_ID: "",
},
});
const fnGetData = async () => {
const resData = await getSafetyEnvironmentalViewInfo({ INSPECTION_ID });
data.info = resData.pd;
};
fnGetData();
const fnFlowChart = (HIDDEN_ID) => {
data.flowChartDialog.visible = true;
data.flowChartDialog.HIDDEN_ID = HIDDEN_ID;
};
const fnView = (HIDDEN_ID) => {
data.viewDialog.visible = true;
data.viewDialog.HIDDEN_ID = HIDDEN_ID;
};
</script>
<style scoped lang="scss">
table {
border-collapse: collapse;
width: 100%;
td,
th {
border: 1px solid var(--el-border-color);
padding: 8px 12px;
font-size: 14px;
text-align: center;
}
.title {
background: var(--el-fill-color-light);
width: 200px;
text-align: center;
}
}
</style>