|
|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<main class="safety-platform-container__main">
|
|
|
- <el-form ref="formRef" :model="formData" :rules="isAddMode ? formRules : undefined" 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-input v-model="formData.inspectedUnit" :disabled="!isAddMode" placeholder="请输入被检查单位" clearable />
|
|
|
</el-form-item>
|
|
|
@@ -22,7 +22,7 @@
|
|
|
<el-form-item label="检查地点:" prop="checkPlace">
|
|
|
<el-input v-model="formData.checkPlace" :disabled="!isAddMode" placeholder="请输入检查地点" clearable />
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="整体检查情况描述:" prop="overallDesc">
|
|
|
+ <el-form-item v-if="needOverallDesc === '1'" label="整体检查情况描述:" prop="overallDesc" :required="needOverallDesc === '1' && isAddMode">
|
|
|
<el-input
|
|
|
v-model="formData.overallDesc"
|
|
|
type="textarea"
|
|
|
@@ -33,16 +33,31 @@
|
|
|
:placeholder="isAddMode ? '请输入整体检查情况描述(限300字)' : '整体检查情况描述(限300字)'"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="被检查人签字文件:" prop="signFile">
|
|
|
- <div v-if="!isAddMode" class="upload-files-disabled">
|
|
|
- <UploadFiles label="上传附件" :file-list="displayFileList" />
|
|
|
- </div>
|
|
|
+ <el-form-item v-if="needSigneeSign === '1'" label="被检查人签字文件:" prop="signFile" :required="needSigneeSign === '1' && isAddMode">
|
|
|
<UploadFiles
|
|
|
- v-else
|
|
|
- label="上传附件"
|
|
|
- :file-list="displayFileList"
|
|
|
- @uploadSuccess="handleUploadSuccess"
|
|
|
+ v-if="!isViewMode"
|
|
|
+ label="上传文件"
|
|
|
+ :maxCount="1"
|
|
|
+ :file-list="signFileList"
|
|
|
+ :disabled="isViewMode"
|
|
|
+ :allow-all-file-types="true"
|
|
|
+ :accept="'.jpg,.jpeg,.png'"
|
|
|
+ :desc="'支持.jpg,.jpeg,.png'"
|
|
|
+ @uploadSuccess="(list: FileItem[]) => handleUploadSuccess(list)"
|
|
|
/>
|
|
|
+ <div class="file-list" v-else>
|
|
|
+ <div class="file-item" v-for="file in signFileList" :key="file.fileId">
|
|
|
+ <span class="file-item--name">{{ file.fileName }}</span>
|
|
|
+ <div class="file-item--footer">
|
|
|
+ <el-button link type="primary" @click="previewOnline(file.fileUrl, file.fileType)"
|
|
|
+ >预览</el-button
|
|
|
+ >
|
|
|
+ <el-button link type="primary" @click.stop="downloadFile(file.fileUrl, file.fileName)"
|
|
|
+ >下载</el-button
|
|
|
+ >
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
|
|
|
@@ -77,6 +92,9 @@
|
|
|
<el-button @click="handleBack">返回</el-button>
|
|
|
<el-button type="primary" @click="handleSubmit">提交</el-button>
|
|
|
</footer>
|
|
|
+
|
|
|
+ <PreviewOnline ref="previewOnlineRef" />
|
|
|
+
|
|
|
</main>
|
|
|
</template>
|
|
|
|
|
|
@@ -92,15 +110,21 @@
|
|
|
saveAreaCheckPlanDetailDept,
|
|
|
type AreaCheckRecordTemplateItem,
|
|
|
} from '@/api/production-safety-system';
|
|
|
+ import { formatAttachmentList } from '@/components/UploadFiles/utils';
|
|
|
+ import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
|
|
|
+ import { downloadFile } from '@/views/disaster/utils';
|
|
|
|
|
|
+ const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
|
|
|
const router = useRouter();
|
|
|
const route = useRoute();
|
|
|
|
|
|
const operate = computed(() => (route.query.operate as string) || '');
|
|
|
const isAddMode = computed(() => operate.value === 'area-check-plan-record-add');
|
|
|
+ const isViewMode = computed(() => operate.value === 'area-check-plan-record-view');
|
|
|
const recordId = computed(() => Number(route.query.recordId));
|
|
|
const planId = computed(() => Number(route.query.planId));
|
|
|
-
|
|
|
+ const needOverallDesc = computed(() => route.query.needOverallDesc);
|
|
|
+ const needSigneeSign = computed(() => route.query.needSigneeSign);
|
|
|
const formRef = ref();
|
|
|
const formData = ref({
|
|
|
inspectedUnit: '',
|
|
|
@@ -116,6 +140,16 @@
|
|
|
inspector: [{ required: true, message: '请输入检查人员', trigger: 'blur' }],
|
|
|
checkTime: [{ required: true, message: '请选择检查时间', trigger: 'change' }],
|
|
|
checkPlace: [{ required: true, message: '请输入检查地点', trigger: 'blur' }],
|
|
|
+ overallDesc: [{
|
|
|
+ required: needOverallDesc.value === '1',
|
|
|
+ message: '请输入整体检查情况描述',
|
|
|
+ trigger: 'blur'
|
|
|
+ }],
|
|
|
+ signFile: [{
|
|
|
+ required: needSigneeSign.value === '1',
|
|
|
+ message: '请上传被检查人签字文件',
|
|
|
+ trigger: 'change'
|
|
|
+ }],
|
|
|
};
|
|
|
|
|
|
interface CheckItem {
|
|
|
@@ -152,11 +186,9 @@
|
|
|
});
|
|
|
|
|
|
const handleUploadSuccess = (files: FileItem[]) => {
|
|
|
+ debugger
|
|
|
signFileList.value = files;
|
|
|
- formData.value.signFile = files
|
|
|
- .map((f) => f.fileUrl || f.fileName)
|
|
|
- .filter(Boolean)
|
|
|
- .join(',');
|
|
|
+ formData.value.signFile = JSON.stringify(files);
|
|
|
};
|
|
|
|
|
|
const handleBack = () => {
|
|
|
@@ -172,16 +204,19 @@
|
|
|
return;
|
|
|
}
|
|
|
try {
|
|
|
+
|
|
|
+ const uploadedFileList = await formatAttachmentList(signFileList.value);
|
|
|
+
|
|
|
await saveAreaCheckPlanDetailDept({
|
|
|
- areaPlanId: planId.value,
|
|
|
- checkedCompanyName: formData.value.inspectedUnit,
|
|
|
- checkTime: formData.value.checkTime,
|
|
|
- checkPersonName: formData.value.inspector,
|
|
|
- // 暂无人员 code 来源,前端先不传或由后端根据名称解析
|
|
|
- checkAddress: formData.value.checkPlace,
|
|
|
- overallCheckDesc: formData.value.overallDesc,
|
|
|
- checkedPersonSign: formData.value.signFile,
|
|
|
- areaCheckRecords: checkItems.value.map((item) => ({
|
|
|
+ areaPlanId: planId.value,
|
|
|
+ checkedCompanyName: formData.value.inspectedUnit,
|
|
|
+ checkTime: formData.value.checkTime,
|
|
|
+ checkPersonName: formData.value.inspector,
|
|
|
+ // 暂无人员 code 来源,前端先不传或由后端根据名称解析
|
|
|
+ checkAddress: formData.value.checkPlace,
|
|
|
+ overallCheckDesc: formData.value.overallDesc,
|
|
|
+ checkedPersonSign: JSON.stringify(uploadedFileList),
|
|
|
+ areaCheckRecords: checkItems.value.map((item) => ({
|
|
|
checkContent: item.checkContent || '',
|
|
|
checkStandard: item.checkStandard || '',
|
|
|
// 新增检查日志时,检查结果和问题直接使用接口返回的数据
|
|
|
@@ -209,8 +244,9 @@
|
|
|
checkTime: String(r?.checkTime ?? ''),
|
|
|
checkPlace: String(r?.checkAddress ?? r?.checkPlace ?? ''),
|
|
|
overallDesc: String(r?.overallCheckDesc ?? ''),
|
|
|
- signFile: String(r?.checkedPersonSign ?? ''),
|
|
|
+ signFile: JSON.stringify(convertSignFileToFileItems(String(r?.checkedPersonSign ?? ''))),
|
|
|
};
|
|
|
+ signFileList.value = JSON.parse(r.checkedPersonSign || '[]');
|
|
|
const records = (r?.areaCheckRecords ?? []) as Array<Record<string, unknown>>;
|
|
|
checkItems.value = records.map((item) => ({
|
|
|
checkContent: (item.checkContent ?? '') as string,
|
|
|
@@ -276,6 +312,12 @@
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+ const previewOnline = (url: string | undefined, type) => {
|
|
|
+ if (url) {
|
|
|
+ previewOnlineRef.value?.open(url, type);
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
initFormData();
|
|
|
});
|