|
@@ -2,7 +2,23 @@
|
|
|
<main class="safety-platform-container__main">
|
|
<main class="safety-platform-container__main">
|
|
|
<el-form ref="formRef" :model="formData" :rules="isViewMode ? undefined : formRules" label-width="180px" class="check-record-form">
|
|
<el-form ref="formRef" :model="formData" :rules="isViewMode ? undefined : formRules" label-width="180px" class="check-record-form">
|
|
|
<el-form-item label="被检查单位:" prop="inspectedUnit">
|
|
<el-form-item label="被检查单位:" prop="inspectedUnit">
|
|
|
- <el-input v-model="formData.inspectedUnit" :disabled="!isAddMode || checkType===1" placeholder="请输入被检查单位" clearable />
|
|
|
|
|
|
|
+ <el-cascader
|
|
|
|
|
+ ref="CascaderRef"
|
|
|
|
|
+ v-model="formData.inspectedUnit"
|
|
|
|
|
+ :options="deptTreeOne"
|
|
|
|
|
+ :props="cascaderDeptProp"
|
|
|
|
|
+ :show-all-levels="false"
|
|
|
|
|
+ collapse-tags
|
|
|
|
|
+ collapse-tags-tooltip
|
|
|
|
|
+ :max-collapse-tags="3"
|
|
|
|
|
+ placeholder="请选择被检查单位"
|
|
|
|
|
+ filterable
|
|
|
|
|
+ clearable
|
|
|
|
|
+ :disabled="isViewMode"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ @change="responsibleDeptChange"
|
|
|
|
|
+ />
|
|
|
|
|
+ <!-- <el-input v-model="formData.inspectedUnit" :disabled="!isAddMode || checkType===1" placeholder="请输入被检查单位" clearable /> -->
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="检查人员:" prop="inspector">
|
|
<el-form-item label="检查人员:" prop="inspector">
|
|
|
<el-input v-model="formData.inspector" :disabled="true" placeholder="请输入检查人员" clearable />
|
|
<el-input v-model="formData.inspector" :disabled="true" placeholder="请输入检查人员" clearable />
|
|
@@ -116,6 +132,8 @@
|
|
|
import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
|
import { downloadFile } from '@/views/disaster/utils';
|
|
import { downloadFile } from '@/views/disaster/utils';
|
|
|
import { useUserInfoHook } from '@/views/disaster/hooks';
|
|
import { useUserInfoHook } from '@/views/disaster/hooks';
|
|
|
|
|
+ import type { DeptTree } from '@/types/dept/type';
|
|
|
|
|
+ import { getAllDepartments } from '@/api/auth/dept';
|
|
|
|
|
|
|
|
const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
|
const router = useRouter();
|
|
const router = useRouter();
|
|
@@ -134,7 +152,8 @@
|
|
|
const viewDetailData = ref<Record<string, unknown>>({});
|
|
const viewDetailData = ref<Record<string, unknown>>({});
|
|
|
const formRef = ref();
|
|
const formRef = ref();
|
|
|
const formData = ref({
|
|
const formData = ref({
|
|
|
- inspectedUnit: '',
|
|
|
|
|
|
|
+ inspectedUnit: '' as string | number,
|
|
|
|
|
+ checkedCompanyName: '',
|
|
|
inspector: '',
|
|
inspector: '',
|
|
|
checkTime: '',
|
|
checkTime: '',
|
|
|
checkPlace: '',
|
|
checkPlace: '',
|
|
@@ -166,7 +185,29 @@
|
|
|
checkProblem: string;
|
|
checkProblem: string;
|
|
|
id: number;
|
|
id: number;
|
|
|
}
|
|
}
|
|
|
|
|
+ const deptTreeOne = ref<DeptTree[]>([]);
|
|
|
|
|
+ const cascaderDeptProp = {
|
|
|
|
|
+ checkStrictly: true,
|
|
|
|
|
+ expandTrigger: 'hover' as const,
|
|
|
|
|
+ value: 'id',
|
|
|
|
|
+ label: 'deptName',
|
|
|
|
|
+ emitPath: false,
|
|
|
|
|
+ };
|
|
|
|
|
+ const CascaderRef = ref();
|
|
|
|
|
|
|
|
|
|
+ /** 部门树:一级部门 */
|
|
|
|
|
+ const getDeptTreeData = async () => {
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getAllDepartments();
|
|
|
|
|
+ deptTreeOne.value = res?.[0]?.children.map(item => ({
|
|
|
|
|
+ ...item,
|
|
|
|
|
+ children: []
|
|
|
|
|
+ }));
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ console.error('获取部门树失败:', e);
|
|
|
|
|
+ deptTreeOne.value = [];
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
const checkItems = ref<CheckItem[]>([]);
|
|
const checkItems = ref<CheckItem[]>([]);
|
|
|
|
|
|
|
|
function convertSignFileToFileItems(attachmentsStr: string): FileItem[] {
|
|
function convertSignFileToFileItems(attachmentsStr: string): FileItem[] {
|
|
@@ -202,6 +243,22 @@
|
|
|
router.back();
|
|
router.back();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ const getDeptCodeByName = (id) => {
|
|
|
|
|
+ const findDeptCode = (nodes: DeptTree[]): string | null => {
|
|
|
|
|
+ for (const node of nodes) {
|
|
|
|
|
+ if (String(node.id) === String(id)) {
|
|
|
|
|
+ return node.deptName || null;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (node.children && node.children.length > 0) {
|
|
|
|
|
+ const code = findDeptCode(node.children);
|
|
|
|
|
+ if (code) return code;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ };
|
|
|
|
|
+ return findDeptCode(deptTreeOne.value || []) || '';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
const handleSubmit = async () => {
|
|
const handleSubmit = async () => {
|
|
|
if (!formRef.value) return;
|
|
if (!formRef.value) return;
|
|
|
const valid = await formRef.value.validate().catch(() => false);
|
|
const valid = await formRef.value.validate().catch(() => false);
|
|
@@ -217,7 +274,8 @@
|
|
|
await saveAreaCheckPlanDetailDept({
|
|
await saveAreaCheckPlanDetailDept({
|
|
|
areaPlanId: checkItemData.areaPlanId || planId.value,
|
|
areaPlanId: checkItemData.areaPlanId || planId.value,
|
|
|
id: checkItemData.id, // 编辑时传记录ID,新增时后端自动生成无需传
|
|
id: checkItemData.id, // 编辑时传记录ID,新增时后端自动生成无需传
|
|
|
- checkedCompanyName: formData.value.inspectedUnit,
|
|
|
|
|
|
|
+ checkedCompanyName: formData.value.checkedCompanyName,
|
|
|
|
|
+ checkedCompanyCode: formData.value.inspectedUnit,
|
|
|
checkTime: formData.value.checkTime,
|
|
checkTime: formData.value.checkTime,
|
|
|
checkPersonName: formData.value.inspector,
|
|
checkPersonName: formData.value.inspector,
|
|
|
// 暂无人员 code 来源,前端先不传或由后端根据名称解析
|
|
// 暂无人员 code 来源,前端先不传或由后端根据名称解析
|
|
@@ -254,6 +312,13 @@
|
|
|
return [];
|
|
return [];
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ const responsibleDeptChange = (value) => {
|
|
|
|
|
+ formData.value.inspectedUnit = value;
|
|
|
|
|
+ // 根据选择的部门ID获取对应的部门name并设置到表单中
|
|
|
|
|
+ const deptName = getDeptCodeByName(value);
|
|
|
|
|
+ formData.value.checkedCompanyName = deptName;
|
|
|
|
|
+ };
|
|
|
const loadRecordDetail = async () => {
|
|
const loadRecordDetail = async () => {
|
|
|
if (recordId.value) {
|
|
if (recordId.value) {
|
|
|
try {
|
|
try {
|
|
@@ -261,7 +326,8 @@
|
|
|
const raw = (res as { data?: Record<string, unknown> })?.data ?? res;
|
|
const raw = (res as { data?: Record<string, unknown> })?.data ?? res;
|
|
|
const r = raw as Record<string, unknown>;
|
|
const r = raw as Record<string, unknown>;
|
|
|
formData.value = {
|
|
formData.value = {
|
|
|
- inspectedUnit: String(r?.checkedCompanyName ?? r?.checkedCompany ?? ''),
|
|
|
|
|
|
|
+ inspectedUnit: Number(r.checkedCompanyCode),
|
|
|
|
|
+ checkedCompanyName: String(r?.checkedCompanyName ?? ''),
|
|
|
inspector: String(r?.checkPersonName ?? r?.checkPerson ?? ''),
|
|
inspector: String(r?.checkPersonName ?? r?.checkPerson ?? ''),
|
|
|
checkTime: String(r?.checkTime ?? ''),
|
|
checkTime: String(r?.checkTime ?? ''),
|
|
|
checkPlace: String(r?.checkAddress ?? r?.checkPlace ?? ''),
|
|
checkPlace: String(r?.checkAddress ?? r?.checkPlace ?? ''),
|
|
@@ -283,6 +349,7 @@
|
|
|
// 无 recordId 的查看场景,只保留空表单和空检查明细(不依赖路由传递数据)
|
|
// 无 recordId 的查看场景,只保留空表单和空检查明细(不依赖路由传递数据)
|
|
|
formData.value = {
|
|
formData.value = {
|
|
|
inspectedUnit: '',
|
|
inspectedUnit: '',
|
|
|
|
|
+ checkedCompanyName: '',
|
|
|
inspector: '',
|
|
inspector: '',
|
|
|
checkTime: '',
|
|
checkTime: '',
|
|
|
checkPlace: '',
|
|
checkPlace: '',
|
|
@@ -312,17 +379,18 @@
|
|
|
const res = await fetchDeptAreaCheckRecord(recordId.value);
|
|
const res = await fetchDeptAreaCheckRecord(recordId.value);
|
|
|
const list = res.areaCheckRecords || [];
|
|
const list = res.areaCheckRecords || [];
|
|
|
checkItemData = res
|
|
checkItemData = res
|
|
|
- if(checkType.value === 1){
|
|
|
|
|
- formData.value.inspectedUnit = res.responsibleDeptName || ''
|
|
|
|
|
- }
|
|
|
|
|
- formData.value.inspector = res.checkPersonName ?? res.checkPerson ?? ''
|
|
|
|
|
|
|
+ formData.value.inspectedUnit = res.checkedCompanyCode
|
|
|
|
|
+ formData.value.checkedCompanyName = res.checkedCompanyName
|
|
|
|
|
+ formData.value.inspector = res.checkPersonName ??''
|
|
|
formData.value.checkTime = res.checkTime || ''
|
|
formData.value.checkTime = res.checkTime || ''
|
|
|
formData.value.checkPlace = res.checkAddress ?? res.checkPlace ?? ''
|
|
formData.value.checkPlace = res.checkAddress ?? res.checkPlace ?? ''
|
|
|
formData.value.overallDesc = res.overallCheckDesc || ''
|
|
formData.value.overallDesc = res.overallCheckDesc || ''
|
|
|
|
|
+ // 被检查人签字文件
|
|
|
if(res.checkedPersonSign){
|
|
if(res.checkedPersonSign){
|
|
|
- formData.value.signFile = JSON.stringify(convertSignFileToFileItems(String(res.checkedPersonSign || '')))
|
|
|
|
|
|
|
+ formData.value.signFile = res.checkedPersonSign || ''
|
|
|
|
|
+ signFileList.value = JSON.parse(res.checkedPersonSign || '')
|
|
|
}
|
|
}
|
|
|
- signFileList.value = convertSignFileToFileItems(String(res.checkedPersonSign || ''))
|
|
|
|
|
|
|
+
|
|
|
if (Array.isArray(list) && list.length > 0) {
|
|
if (Array.isArray(list) && list.length > 0) {
|
|
|
checkItems.value = list;
|
|
checkItems.value = list;
|
|
|
} else {
|
|
} else {
|
|
@@ -337,12 +405,12 @@
|
|
|
|
|
|
|
|
const initFormData = async () => {
|
|
const initFormData = async () => {
|
|
|
if (isAddMode.value) {
|
|
if (isAddMode.value) {
|
|
|
- const { planName, checkVenue } = route.query;
|
|
|
|
|
formData.value = {
|
|
formData.value = {
|
|
|
- inspectedUnit: '', // planName ? String(planName) : '',
|
|
|
|
|
|
|
+ inspectedUnit: '',
|
|
|
|
|
+ checkedCompanyName: '',
|
|
|
inspector: '',
|
|
inspector: '',
|
|
|
checkTime: '',
|
|
checkTime: '',
|
|
|
- checkPlace: '', //checkVenue ? String(checkVenue) : '',
|
|
|
|
|
|
|
+ checkPlace: '',
|
|
|
overallDesc: '',
|
|
overallDesc: '',
|
|
|
signFile: '',
|
|
signFile: '',
|
|
|
};
|
|
};
|
|
@@ -366,31 +434,12 @@
|
|
|
try {
|
|
try {
|
|
|
const res = await queryAreaCheckPlanManageDeptDetail(currentId.value);
|
|
const res = await queryAreaCheckPlanManageDeptDetail(currentId.value);
|
|
|
viewDetailData.value = { ...res };
|
|
viewDetailData.value = { ...res };
|
|
|
- // 若是自查,则被检查单位默认就是本单位,不需要手动输入。
|
|
|
|
|
- if(checkType.value === 1){
|
|
|
|
|
- authority.value = true
|
|
|
|
|
- formData.value.inspectedUnit = res.responsibleDeptName || ''
|
|
|
|
|
- }
|
|
|
|
|
- formData.value.inspector = res.checkPersonName ?? res.checkPerson ?? ''
|
|
|
|
|
- formData.value.checkTime = res.checkTime || ''
|
|
|
|
|
- formData.value.checkPlace = res.checkAddress ?? res.checkPlace ?? ''
|
|
|
|
|
- formData.value.overallDesc = res.overallCheckDesc || ''
|
|
|
|
|
- if(res.checkedPersonSign){
|
|
|
|
|
- formData.value.signFile = JSON.stringify(convertSignFileToFileItems(String(res.checkedPersonSign || '')))
|
|
|
|
|
- }
|
|
|
|
|
- signFileList.value = convertSignFileToFileItems(String(res.checkedPersonSign || ''))
|
|
|
|
|
- // 如果主责部门责任人ID包含当前登录人ID,则直接回填(被检查单位、 检查人员、检查时间、检查地点),且不可更改
|
|
|
|
|
- let primaryResponsibleDeptPersonCode = res.primaryResponsibleDeptPersonCode?.split(',').map(Number)
|
|
|
|
|
- if(primaryResponsibleDeptPersonCode?.includes(id)){
|
|
|
|
|
- authority.value = true
|
|
|
|
|
- formData.value.inspectedUnit = res.responsibleDeptName || ''
|
|
|
|
|
- formData.value.inspector = String(res.primaryResponsibleDeptPersonName) || ''
|
|
|
|
|
- }
|
|
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
console.error('获取详情失败:', e);
|
|
console.error('获取详情失败:', e);
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
|
|
+ getDeptTreeData();
|
|
|
getDetail()
|
|
getDetail()
|
|
|
initFormData();
|
|
initFormData();
|
|
|
});
|
|
});
|