|
|
@@ -7,12 +7,8 @@
|
|
|
<div class="search-table-container">
|
|
|
<header>
|
|
|
<div style="position: relative">
|
|
|
- <el-button type="primary" class="search-table-container--button" @click="handleCreate">
|
|
|
- 添加
|
|
|
- </el-button>
|
|
|
- <el-button plain class="search-table-container--button" @click="handleImport">
|
|
|
- 导入
|
|
|
- </el-button>
|
|
|
+ <el-button type="primary" class="search-table-container--button" @click="handleCreate"> 添加 </el-button>
|
|
|
+ <el-button plain class="search-table-container--button" @click="handleImport"> 导入 </el-button>
|
|
|
</div>
|
|
|
|
|
|
<div class="act-search">
|
|
|
@@ -28,11 +24,7 @@
|
|
|
</div>
|
|
|
<div class="select-box--item">
|
|
|
<span>状态:</span>
|
|
|
- <el-select
|
|
|
- v-model="tableQuery.queryParam.status"
|
|
|
- placeholder="请选择状态"
|
|
|
- clearable
|
|
|
- >
|
|
|
+ <el-select v-model="tableQuery.queryParam.status" placeholder="请选择状态" clearable>
|
|
|
<el-option
|
|
|
v-for="item in AREA_CHECK_PLAN_STATUS_OPTIONS"
|
|
|
:key="String(item.value)"
|
|
|
@@ -73,9 +65,7 @@
|
|
|
<section class="search-btn">
|
|
|
<el-button type="primary" @click="handleSearch">查询</el-button>
|
|
|
<el-button @click="handleReset">重置</el-button>
|
|
|
- <el-button plain @click="handleDownload">
|
|
|
- 导出
|
|
|
- </el-button>
|
|
|
+ <el-button plain @click="handleDownload"> 导出 </el-button>
|
|
|
</section>
|
|
|
</div>
|
|
|
</header>
|
|
|
@@ -92,10 +82,14 @@
|
|
|
<span>{{ AREA_CHECK_PLAN_STATUS_LABEL[String(scope.row.status)] ?? '-' }}</span>
|
|
|
</template>
|
|
|
<template #needOverallDesc="scope">
|
|
|
- <span>{{ scope.row.needOverallDesc === true ? '是' : scope.row.needOverallDesc === false ? '否' : '-' }}</span>
|
|
|
+ <span>{{
|
|
|
+ scope.row.needOverallDesc === true ? '是' : scope.row.needOverallDesc === false ? '否' : '-'
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template #needSigneeSign="scope">
|
|
|
- <span>{{ scope.row.needSigneeSign === true ? '是' : scope.row.needSigneeSign === false ? '否' : '-' }}</span>
|
|
|
+ <span>{{
|
|
|
+ scope.row.needSigneeSign === true ? '是' : scope.row.needSigneeSign === false ? '否' : '-'
|
|
|
+ }}</span>
|
|
|
</template>
|
|
|
<template #action="scope">
|
|
|
<div class="action-container--div" style="justify-content: left">
|
|
|
@@ -200,12 +194,7 @@
|
|
|
clearable
|
|
|
style="width: 100%"
|
|
|
>
|
|
|
- <el-option
|
|
|
- v-for="item in userGroupOptions"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-option v-for="item in userGroupOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="院领导部门:" prop="hospitalLeaderDeptId">
|
|
|
@@ -228,12 +217,7 @@
|
|
|
clearable
|
|
|
style="width: 100%"
|
|
|
>
|
|
|
- <el-option
|
|
|
- v-for="item in userGroupOptions"
|
|
|
- :key="item.id"
|
|
|
- :label="item.name"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
+ <el-option v-for="item in userGroupOptions" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="计划开始日期:" prop="planStartTime">
|
|
|
@@ -295,7 +279,12 @@
|
|
|
import BasicTable from '@/components/BasicTable.vue';
|
|
|
import useTableConfig from '@/hooks/useTableConfigHook';
|
|
|
import ActionButton from '@/components/ActionButton.vue';
|
|
|
- import { TABLE_OPTIONS, AREA_CHECK_PLAN_TABLE_COLUMNS, AREA_CHECK_PLAN_STATUS_OPTIONS, AREA_CHECK_PLAN_STATUS_LABEL } from './configs/tables';
|
|
|
+ import {
|
|
|
+ TABLE_OPTIONS,
|
|
|
+ AREA_CHECK_PLAN_TABLE_COLUMNS,
|
|
|
+ AREA_CHECK_PLAN_STATUS_OPTIONS,
|
|
|
+ AREA_CHECK_PLAN_STATUS_LABEL,
|
|
|
+ } from './configs/tables';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
import type { QueryPageRequest } from '@/types/basic-query';
|
|
|
import type { AreaCheckPlanQuery, AreaCheckPlanRecord } from './configs/types';
|
|
|
@@ -397,9 +386,36 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- const onIssueDialogOpen = () => {
|
|
|
- loadIssueDeptTree();
|
|
|
- loadUserGroupOptions();
|
|
|
+ const onIssueDialogOpen = async () => {
|
|
|
+ await Promise.all([loadIssueDeptTree(), loadUserGroupOptions()]);
|
|
|
+
|
|
|
+ if (!currentIssuePlanId.value) return;
|
|
|
+
|
|
|
+ try {
|
|
|
+ const raw = await queryAreaCheckPlanManageDetail(currentIssuePlanId.value);
|
|
|
+ const detail = mapAreaCheckPlanApiRecordToUi(raw);
|
|
|
+
|
|
|
+ const responsibleDeptIdsByCode = parseNumberList(
|
|
|
+ detail.primaryResponsibleDeptCode ?? (detail as Record<string, unknown>).responsibleDeptCode,
|
|
|
+ );
|
|
|
+
|
|
|
+ issueForm.responsibleDeptIds = responsibleDeptIdsByCode.length
|
|
|
+ ? responsibleDeptIdsByCode
|
|
|
+ : (detail.primaryResponsibleDeptName || '')
|
|
|
+ .split(',')
|
|
|
+ .map((name) => findDeptIdByName(issueDeptTree.value, name.trim()))
|
|
|
+ .filter((id): id is number => id != null);
|
|
|
+
|
|
|
+ const safetyEmergencyDeptIdByCode = parseNumber(detail.safetyEmergencyDeptCode);
|
|
|
+ issueForm.safetyEmergencyDeptId =
|
|
|
+ safetyEmergencyDeptIdByCode ?? findDeptIdByName(issueDeptTree.value, detail.safetyEmergencyDeptName);
|
|
|
+
|
|
|
+ const hospitalLeaderDeptIdByCode = parseNumber(detail.hospitalLeaderDeptCode);
|
|
|
+ issueForm.hospitalLeaderDeptId =
|
|
|
+ hospitalLeaderDeptIdByCode ?? findDeptIdByName(issueDeptTree.value, detail.hospitalLeaderDeptName);
|
|
|
+ } catch (e) {
|
|
|
+ console.error('加载下发默认数据失败:', e);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
const findDeptNameById = (nodes: DeptTree[] | undefined, id: number | undefined): string | undefined => {
|
|
|
@@ -412,6 +428,30 @@
|
|
|
return undefined;
|
|
|
};
|
|
|
|
|
|
+ const findDeptIdByName = (nodes: DeptTree[] | undefined, name: string | undefined): number | undefined => {
|
|
|
+ if (!nodes?.length || !name) return undefined;
|
|
|
+ for (const n of nodes) {
|
|
|
+ if (n.deptName === name) return n.id ?? undefined;
|
|
|
+ const found = findDeptIdByName(n.children, name);
|
|
|
+ if (found != null) return found;
|
|
|
+ }
|
|
|
+ return undefined;
|
|
|
+ };
|
|
|
+
|
|
|
+ const parseNumber = (val: unknown): number | undefined => {
|
|
|
+ if (val == null || val === '') return undefined;
|
|
|
+ const n = Number(val);
|
|
|
+ return Number.isFinite(n) ? n : undefined;
|
|
|
+ };
|
|
|
+
|
|
|
+ const parseNumberList = (val: unknown): number[] => {
|
|
|
+ if (val == null || val === '') return [];
|
|
|
+ return String(val)
|
|
|
+ .split(',')
|
|
|
+ .map((s) => parseNumber(s.trim()))
|
|
|
+ .filter((n): n is number => n != null);
|
|
|
+ };
|
|
|
+
|
|
|
const findDeptNamesByIds = (nodes: DeptTree[] | undefined, ids: number[] | undefined): string[] => {
|
|
|
const list = (ids ?? []).filter((v) => v != null);
|
|
|
if (!list.length) return [];
|
|
|
@@ -548,7 +588,11 @@
|
|
|
if (!issueFormRef.value || !currentIssuePlanId.value) return;
|
|
|
const valid = await issueFormRef.value.validate().catch(() => false);
|
|
|
if (!valid) return;
|
|
|
- if (issueForm.planStartTime && issueForm.planEndTime && new Date(issueForm.planStartTime) > new Date(issueForm.planEndTime)) {
|
|
|
+ if (
|
|
|
+ issueForm.planStartTime &&
|
|
|
+ issueForm.planEndTime &&
|
|
|
+ new Date(issueForm.planStartTime) > new Date(issueForm.planEndTime)
|
|
|
+ ) {
|
|
|
ElMessage.error('计划开始日期不能大于计划结束日期');
|
|
|
return;
|
|
|
}
|
|
|
@@ -580,13 +624,15 @@
|
|
|
safetyEmergencyDeptName,
|
|
|
safetyEmergencyDeptId: issueForm.safetyEmergencyDeptId,
|
|
|
safetyEmergencyExecutorGroupName: findGroupNameById(issueForm.safetyEmergencyGroupId),
|
|
|
- safetyEmergencyExecGroupCode: issueForm.safetyEmergencyGroupId != null ? String(issueForm.safetyEmergencyGroupId) : undefined,
|
|
|
+ safetyEmergencyExecGroupCode:
|
|
|
+ issueForm.safetyEmergencyGroupId != null ? String(issueForm.safetyEmergencyGroupId) : undefined,
|
|
|
|
|
|
// 院领导部门
|
|
|
hospitalLeaderDeptName,
|
|
|
hospitalLeaderDeptId: issueForm.hospitalLeaderDeptId,
|
|
|
hospitalLeaderExecutorGroupName: findGroupNameById(issueForm.hospitalLeaderGroupId),
|
|
|
- hospitalLeaderExecGroupCode: issueForm.hospitalLeaderGroupId != null ? String(issueForm.hospitalLeaderGroupId) : undefined,
|
|
|
+ hospitalLeaderExecGroupCode:
|
|
|
+ issueForm.hospitalLeaderGroupId != null ? String(issueForm.hospitalLeaderGroupId) : undefined,
|
|
|
|
|
|
// 计划时间与开关项
|
|
|
planStartTime: issueForm.planStartTime,
|
|
|
@@ -651,7 +697,10 @@
|
|
|
{ label: '日常安全', value: '日常安全' },
|
|
|
{ label: '各级危险点', value: '各级危险点' },
|
|
|
{ label: '试验室及试验过程', value: '试验室及试验过程' },
|
|
|
- { label: '办公区域(含地下车库、图书馆、档案库房、仓库等)', value: '办公区域(含地下车库、图书馆、档案库房、仓库等)' },
|
|
|
+ {
|
|
|
+ label: '办公区域(含地下车库、图书馆、档案库房、仓库等)',
|
|
|
+ value: '办公区域(含地下车库、图书馆、档案库房、仓库等)',
|
|
|
+ },
|
|
|
{ label: '老旧厂房', value: '老旧厂房' },
|
|
|
{ label: '施工现场', value: '施工现场' },
|
|
|
{ label: '职工食堂', value: '职工食堂' },
|
|
|
@@ -673,7 +722,7 @@
|
|
|
{ label: '危险化学品', value: '危险化学品' },
|
|
|
{ label: '设施设备应急操作流程', value: '设施设备应急操作流程' },
|
|
|
{ label: '堆场、物资库房', value: '堆场、物资库房' },
|
|
|
- { label: '室内外停车场', value: '室内外停车场' }
|
|
|
+ { label: '室内外停车场', value: '室内外停车场' },
|
|
|
];
|
|
|
getTableData();
|
|
|
});
|