Explorar el Código

fix: bug修复

sunqijun hace 3 meses
padre
commit
0c5fa8cd0a

+ 3 - 5
src/views/production-safety/implement-safety-duty/responsibility-agree-manage-dept.vue

@@ -116,10 +116,7 @@
                   签署
                 </el-button>
                 <el-button
-                  v-if="
-                    scope.row.status === 2 &&
-                    (scope.row.departmentName === '员工' || scope.row.departmentName === '常驻供应商')
-                  "
+                  v-if="scope.row.status === 2 && /员工|常驻供应商/.test(scope.row.departmentName)"
                   type="primary"
                   link
                   @click="handleConfirm(scope)"
@@ -128,6 +125,7 @@
                 </el-button>
                 <el-dropdown trigger="click">
                   <el-button
+                    v-if="scope.row.status === 3"
                     type="primary"
                     link
                     @click="
@@ -261,7 +259,7 @@
   const attachment = ref<any[]>([]);
 
   const selectable = (row) => {
-    return row.status === 2 && (row.departmentName !== '员工' || row.departmentName !== '常驻供应商');
+    return row.status === 2 && !/员工|常驻供应商/.test(row.departmentName);
   };
 
   const handleSelectionChange = (val) => {

+ 1 - 5
src/views/production-safety/implement-safety-duty/responsibility-feedback.vue

@@ -8,11 +8,7 @@
         <span>创建时间:{{ formData?.createdAt }} </span>
       </div>
     </header>
-    <el-alert
-      v-if="showAlertBar"
-      title="您提交的反馈材料审核不通过,请尽快查看并修改,再次提交进行审核,谢谢!"
-      type="warning"
-    />
+    <el-alert v-if="showAlertBar" :title="formData.rejection" type="warning" />
 
     <main class="safety-platform-container__main">
       <el-form ref="formRef" label-width="auto" :model="formData" :rules="rules">

+ 1 - 1
src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/components/SelectNotifyArea.vue

@@ -40,7 +40,7 @@
           <el-table-column type="selection" :reserve-selection="true" width="55" />
 
           <el-table-column type="index" label="序号" width="80" />
-          <el-table-column label="楼宇/区域" prop="buildingCode" width="180" />
+          <el-table-column label="楼宇/区域" prop="buildingNo" width="180" />
           <el-table-column label="房间/区域" prop="floorRoomNo" width="180" />
           <el-table-column label="功能名称" prop="nameFunction" width="120" />
           <el-table-column label="安全责任所/中心" prop="safetyResponsibleCenter" width="200" />

+ 2 - 2
src/views/production-safety/implement-safety-duty/responsibility-notice-manage-dept/list.vue

@@ -67,9 +67,9 @@
           <el-table-column label="责任书通知名称" prop="responsibilityName" width="180" />
           <el-table-column label="状态" prop="statusName" width="100" />
           <!-- <el-table-column label="类型" prop="safetyAreaName" width="130" /> -->
-          <el-table-column label="下发数" prop="issuedQuantity" width="120" />
+          <!-- <el-table-column label="下发数" prop="issuedQuantity" width="120" />
           <el-table-column label="反馈人数" prop="signedQuantity" width="120" />
-          <el-table-column label="反馈比例" prop="signedRatio" width="120" />
+          <el-table-column label="反馈比例" prop="signedRatio" width="120" /> -->
           <el-table-column label="计划开始时间" prop="planStartTime" width="200" />
           <el-table-column label="计划完成时间" prop="planEndTime" width="200" />
           <el-table-column fixed="right" min-width="300" label="操作">

+ 3 - 3
src/views/production-safety/implement-safety-duty/view-recipients.vue

@@ -19,7 +19,7 @@
     <main class="safety-platform-container__main">
       <div class="search-form">
         <el-form :inline="true">
-          <el-form-item label="状态" v-if="activeTab">
+          <el-form-item label="状态" v-if="!activeTab">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
               <el-option :value="1" label="未下发" />
               <el-option :value="2" label="待签署" />
@@ -245,11 +245,11 @@
   });
 
   onMounted(async () => {
-    activeTab.value = route.query.status;
+    // activeTab.value = route.query.status;
     Object.assign(queryParams, {
       queryParam: {
         ...queryParams.queryParam,
-        status: Number(activeTab.value),
+        // status: Number(activeTab.value),
       },
     });
     await handleQueryUserGroupPage();

+ 50 - 38
src/views/production-safety/risk-identification-and-control/construction-safety-manage/add.vue

@@ -85,15 +85,11 @@
 
         <el-form-item label="涉及工种" prop="involvedTrades" style="width: 87.2%">
           <el-checkbox-group v-model="tradeArray">
-            <el-checkbox label="水电" />
-            <el-checkbox label="泥瓦" />
-            <el-checkbox label="木工" />
-            <el-checkbox label="焊接" />
-            <el-checkbox label="气割" />
-            <el-checkbox label="登高" />
-            <el-checkbox label="密闭" />
-            <el-checkbox label="特种驾驶" />
-            <el-checkbox label="其他" />
+            <el-checkbox
+              v-for="t in ['水电', '泥瓦', '木工', '焊接', '气割', '登高', '密闭', '特种驾驶', '其他']"
+              :key="t"
+              :label="t"
+            />
           </el-checkbox-group>
         </el-form-item>
 
@@ -139,31 +135,47 @@
             :fileList="attachmentLists[item.prop]"
           />
         </el-form-item>
+
+        <div style="width: 100%; height: 1px; background: #eee; margin: 20px 0"></div>
+        <el-form-item label="审批流程" prop="templateId" style="width: 87.2%">
+          <el-select
+            v-model="formValue.templateId"
+            placeholder="请选择审批流程"
+            size="large"
+            style="width: 330px"
+            clearable
+          >
+            <el-option v-for="opt in approvalOptions" :key="opt.id" :label="opt.templateName" :value="opt.id" />
+          </el-select>
+        </el-form-item>
       </el-form>
     </main>
     <footer class="safety-platform-container__footer">
-      <el-button @click="$router.back()">返回</el-button>
-      <el-button type="primary" :loading="submiting" @click="handleSubmit">保存</el-button>
-      <el-button type="primary" :loading="submiting">提交</el-button>
+      <el-button @click="router.back()">返回</el-button>
+      <el-button type="primary" :loading="submiting" @click="handleSave(0)">保存</el-button>
+      <el-button type="primary" :loading="submiting" @click="handleSave(1)">提交</el-button>
     </footer>
   </div>
 </template>
 
 <script lang="ts" setup>
-  import { ref, reactive, watch } from 'vue';
+  import { ref, reactive, watch, onMounted } from 'vue';
   import { useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import dayjs from 'dayjs';
+
   import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
+  import { getAllApproval } from '@/api/approval/approval';
   import { constructionSafetySaveConstruction } from '@/api/production-safety/responsibility-implementation';
-  import { unformatAttachment, formatAttachmentList } from '@/components/UploadFiles/utils';
+  import { formatAttachmentList } from '@/components/UploadFiles/utils';
+  import { template } from 'lodash-es';
 
   const router = useRouter();
   const formRef = ref<any>(null);
   const submiting = ref(false);
   const tradeArray = ref<string[]>([]);
+  const approvalOptions = ref<any[]>([]);
 
-  // 12个附件全部配置为必填
   const attachmentConfigs = [
     { label: '施工安全交底', prop: 'safetyCommitmentAttachment' },
     { label: '安全管理协议', prop: 'safetyAgreementAttachment' },
@@ -198,14 +210,21 @@
     involvedTrades: '',
     otherTrade: '',
     otherDescription: '',
+    templateId: '',
     ...Object.fromEntries(attachmentConfigs.map((a) => [a.prop, ''])),
   });
 
+  // 获取审批流程
+  onMounted(async () => {
+    const res = await getAllApproval();
+    console.log('res:', res);
+    approvalOptions.value = res || [];
+  });
+
   const handleUploadSuccess = async (prop: string, fileList: any[]) => {
     attachmentLists[prop] = fileList;
-    // 后端接口通常需要字符串路径,这里将 file 数组转成字符串
-    // formValue[prop] = fileList;
-    formValue[prop] = JSON.stringify(await formatAttachmentList(fileList));
+    const formatted = await formatAttachmentList(fileList);
+    formValue[prop] = formatted.length > 0 ? JSON.stringify(formatted) : '';
     formRef.value?.validateField(prop);
   };
 
@@ -213,21 +232,20 @@
     formValue.involvedTrades = val.join(',');
   });
 
-  // 定义全字段规则
   const rules = reactive({
     projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
     constructionUnit: [{ required: true, message: '请输入施工单位', trigger: 'blur' }],
     constructionLocation: [{ required: true, message: '请输入施工地点', trigger: 'blur' }],
     workerCount: [{ required: true, message: '请输入人数', trigger: 'blur' }],
     projectManagerName: [{ required: true, message: '请输入项目负责人', trigger: 'blur' }],
-    projectManagerPhone1: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
+    projectManagerPhone1: [{ required: true, message: '请输入电话', trigger: 'blur' }],
     siteSafetyManagerName: [{ required: true, message: '请输入安全负责人', trigger: 'blur' }],
-    siteSafetyPhone1: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
+    siteSafetyPhone1: [{ required: true, message: '请输入电话', trigger: 'blur' }],
     projectStartTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
     projectEndTime: [
       { required: true, message: '请选择结束时间', trigger: 'change' },
       {
-        validator: (rule, value, callback) => {
+        validator: (_rule: any, value: any, callback: any) => {
           if (value && formValue.projectStartTime && dayjs(value).isBefore(dayjs(formValue.projectStartTime))) {
             callback(new Error('不能早于开始时间'));
           } else {
@@ -239,26 +257,24 @@
     ],
     involvedTrades: [{ required: true, message: '请选择工种', trigger: 'change' }],
     constructionContent: [{ required: true, message: '请输入简述', trigger: 'blur' }],
-    // 动态为 12 个附件添加必填校验
+    templateId: [{ required: true, message: '请选择审批流程', trigger: 'change' }],
     ...Object.fromEntries(
-      attachmentConfigs.map((a) => [a.prop, [{ required: true, message: '请上传' + a.label, trigger: 'change' }]]),
+      attachmentConfigs.map((a) => [a.prop, [{ required: true, message: `请上传${a.label}`, trigger: 'change' }]]),
     ),
   });
 
-  const handleSubmit = () => {
+  /**
+   * 统一保存逻辑
+   * @param status 0-保存草稿(通常不强校验附件),1-提交申请(强制校验)
+   */
+  const handleSave = (status: number) => {
     formRef.value?.validate(async (valid: boolean) => {
       if (valid) {
-        const postData = { ...formValue };
         submiting.value = true;
-
-        // for (const item of attachmentConfigs) {
-        //   const rawFileList = attachmentLists[item.prop];
-        //   const formatted = await formatAttachmentList(rawFileList);
-        //   postData[item.prop] = JSON.stringify(formatted);
-        // }
-        constructionSafetySaveConstruction(postData)
+        // 这里的 status 根据后端接口文档调整,通常提交需要带上业务状态
+        constructionSafetySaveConstruction({ ...formValue, submitStatus: status })
           .then(() => {
-            ElMessage.success('保存成功!');
+            ElMessage.success(status === 1 ? '提交成功!' : '保存成功!');
             router.push({ name: 'constructionSafetyManage' });
           })
           .finally(() => {
@@ -279,14 +295,10 @@
       padding: 24px;
       background-color: #fff;
     }
-
-    // 深度调整封装组件在 inline 模式下的表现
     :deep(.el-form-item) {
       margin-right: 20px;
       margin-bottom: 24px;
       vertical-align: top;
-
-      // 让附件标签宽度更有呼吸感
       .el-form-item__label {
         font-weight: bold;
       }

+ 79 - 186
src/views/production-safety/risk-identification-and-control/construction-safety-manage/view.vue

@@ -3,87 +3,60 @@
     <header class="safety-platform-container__header">
       <div class="breadcrumb-title">
         <BreadcrumbBack />
-        {{ pageTitle }}
+        查看施工安全申请
       </div>
     </header>
     <main class="safety-platform-container__main">
-      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :rules="rules" :disabled="isView">
-        <el-form-item label="项目名称" prop="projectName">
-          <el-input v-model="formValue.projectName" size="large" placeholder="请输入项目名称" style="width: 330px" />
+      <el-form ref="formRef" :inline="true" label-width="auto" :model="formValue" :disabled="true">
+        <el-form-item label="项目名称">
+          <el-input v-model="formValue.projectName" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="施工单位" prop="constructionUnit">
-          <el-input
-            v-model="formValue.constructionUnit"
-            size="large"
-            placeholder="请输入单位全称"
-            style="width: 330px"
-          />
+        <el-form-item label="施工单位">
+          <el-input v-model="formValue.constructionUnit" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="施工地点" prop="constructionLocation">
-          <el-input
-            v-model="formValue.constructionLocation"
-            size="large"
-            placeholder="楼宇名称/区域"
-            style="width: 330px"
-          />
+        <el-form-item label="施工地点">
+          <el-input v-model="formValue.constructionLocation" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="施工人数" prop="workerCount">
-          <el-input-number v-model="formValue.workerCount" size="large" :min="1" style="width: 330px" />
+        <el-form-item label="施工人数">
+          <el-input-number v-model="formValue.workerCount" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="项目负责人" prop="projectManagerName">
-          <el-input v-model="formValue.projectManagerName" size="large" placeholder="负责人姓名" style="width: 330px" />
+        <el-form-item label="项目负责人">
+          <el-input v-model="formValue.projectManagerName" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="负责人电话1" prop="projectManagerPhone1">
-          <el-input v-model="formValue.projectManagerPhone1" size="large" placeholder="必填" style="width: 330px" />
+        <el-form-item label="负责人电话1">
+          <el-input v-model="formValue.projectManagerPhone1" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="负责人电话2" prop="projectManagerPhone2">
-          <el-input v-model="formValue.projectManagerPhone2" size="large" placeholder="选填" style="width: 330px" />
+        <el-form-item label="负责人电话2">
+          <el-input v-model="formValue.projectManagerPhone2" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="现场安全员" prop="siteSafetyManagerName">
-          <el-input
-            v-model="formValue.siteSafetyManagerName"
-            size="large"
-            placeholder="安全员姓名"
-            style="width: 330px"
-          />
+        <el-form-item label="现场安全员">
+          <el-input v-model="formValue.siteSafetyManagerName" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="安全员电话1" prop="siteSafetyPhone1">
-          <el-input v-model="formValue.siteSafetyPhone1" size="large" placeholder="必填" style="width: 330px" />
+        <el-form-item label="安全员电话1">
+          <el-input v-model="formValue.siteSafetyPhone1" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="安全员电话2" prop="siteSafetyPhone2">
-          <el-input v-model="formValue.siteSafetyPhone2" size="large" placeholder="选填" style="width: 330px" />
+        <el-form-item label="安全员电话2">
+          <el-input v-model="formValue.siteSafetyPhone2" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="开始时间" prop="projectStartTime">
-          <el-date-picker
-            v-model="formValue.projectStartTime"
-            type="date"
-            value-format="YYYY-MM-DD"
-            size="large"
-            style="width: 330px"
-          />
+        <el-form-item label="开始时间">
+          <el-date-picker v-model="formValue.projectStartTime" type="date" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="结束时间" prop="projectEndTime">
-          <el-date-picker
-            v-model="formValue.projectEndTime"
-            type="date"
-            value-format="YYYY-MM-DD"
-            size="large"
-            style="width: 330px"
-          />
+        <el-form-item label="结束时间">
+          <el-date-picker v-model="formValue.projectEndTime" type="date" size="large" style="width: 330px" />
         </el-form-item>
 
-        <el-form-item label="涉及工种" prop="involvedTrades" style="width: 87.2%">
+        <el-form-item label="涉及工种" style="width: 87.2%">
           <el-checkbox-group v-model="tradeArray">
             <el-checkbox
               v-for="t in ['水电', '泥瓦', '木工', '焊接', '气割', '登高', '密闭', '特种驾驶', '其他']"
@@ -93,83 +66,52 @@
           </el-checkbox-group>
         </el-form-item>
 
-        <el-form-item v-if="tradeArray.includes('其他')" label="其他工种说明" prop="otherTrade">
-          <el-input v-model="formValue.otherTrade" size="large" placeholder="请补充工种类型" style="width: 330px" />
+        <el-form-item v-if="tradeArray.includes('其他')" label="其他工种说明" style="width: 330px">
+          <el-input v-model="formValue.otherTrade" size="large" />
         </el-form-item>
 
-        <el-form-item label="施工内容简述" prop="constructionContent" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.constructionContent"
-            size="large"
-            :rows="3"
-            placeholder="简要描述施工方案"
-          />
+        <el-form-item label="施工内容简述" style="width: 87.2%">
+          <el-input type="textarea" v-model="formValue.constructionContent" size="large" :rows="3" />
         </el-form-item>
 
-        <el-form-item label="备注说明" prop="otherDescription" style="width: 87.2%">
-          <el-input
-            type="textarea"
-            v-model="formValue.otherDescription"
-            size="large"
-            :rows="3"
-            placeholder="其他补充说明"
-          />
+        <el-form-item label="备注说明" style="width: 87.2%">
+          <el-input type="textarea" v-model="formValue.otherDescription" size="large" :rows="3" />
         </el-form-item>
 
         <div style="width: 100%; height: 1px; background: #eee; margin: 20px 0"></div>
-        <div style="width: 100%; margin-bottom: 20px; font-weight: bold; padding-left: 10px">附件清单(全项必填)</div>
+        <div style="width: 100%; margin-bottom: 20px; font-weight: bold; padding-left: 10px">附件清单</div>
 
-        <el-form-item
-          v-for="item in attachmentConfigs"
-          :key="item.prop"
-          :label="item.label"
-          :prop="item.prop"
-          style="width: 43.6%"
-        >
-          <UploadFiles
-            :disabled="isView"
-            @upload-success="(fileList) => handleUploadSuccess(item.prop, fileList)"
-            :fileList="attachmentLists[item.prop]"
-          />
+        <el-form-item v-for="item in attachmentConfigs" :key="item.prop" :label="item.label" style="width: 43.6%">
+          <UploadFiles label="上传附件" :disabled="true" :fileList="attachmentLists[item.prop]" />
+        </el-form-item>
+
+        <div style="width: 100%; height: 1px; background: #eee; margin: 20px 0"></div>
+        <el-form-item label="审批流程" style="width: 87.2%">
+          <el-select v-model="formValue.templateId" size="large" style="width: 330px">
+            <el-option v-for="opt in approvalOptions" :key="opt.id" :label="opt.templateName" :value="opt.id" />
+          </el-select>
         </el-form-item>
       </el-form>
     </main>
     <footer class="safety-platform-container__footer">
       <el-button @click="router.back()">返回</el-button>
-      <el-button v-if="!isView" type="primary" :loading="submiting" @click="handleSubmit">保存</el-button>
     </footer>
   </div>
 </template>
 
 <script lang="ts" setup>
-  import { ref, reactive, watch, onMounted, computed } from 'vue';
+  import { ref, reactive, onMounted } from 'vue';
   import { useRouter, useRoute } from 'vue-router';
-  import { ElMessage } from 'element-plus';
-  import dayjs from 'dayjs';
   import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
-  import {
-    constructionSafetySaveConstruction,
-    constructionSafetyQueryDetailConstruction,
-  } from '@/api/production-safety/responsibility-implementation';
-  import { unformatAttachment, formatAttachmentList } from '@/components/UploadFiles/utils';
+  import { getAllApproval } from '@/api/approval/approval';
+  import { constructionSafetyQueryDetailConstruction } from '@/api/production-safety/responsibility-implementation';
+  import { unformatAttachment } from '@/components/UploadFiles/utils';
 
   const router = useRouter();
   const route = useRoute();
-  const formRef = ref<any>(null);
-  const submiting = ref(false);
   const tradeArray = ref<string[]>([]);
+  const approvalOptions = ref<any[]>([]);
 
-  // 页面模式逻辑
-  const pageType = computed(() => route.query.type as string); // 'view', 'edit', 'add'
-  const businessId = computed(() => route.query.id as string);
-  const isView = computed(() => pageType.value === 'view');
-  const pageTitle = computed(() => {
-    if (isView.value) return '查看施工安全申请';
-    return businessId.value ? '编辑施工安全申请' : '新增施工安全申请';
-  });
-
-  // 附件项定义
   const attachmentConfigs = [
     { label: '施工安全交底', prop: 'safetyCommitmentAttachment' },
     { label: '安全管理协议', prop: 'safetyAgreementAttachment' },
@@ -185,10 +127,9 @@
     { label: '特种设备合格证', prop: 'specialEquipmentCertAttachment' },
   ];
 
-  // 响应式数据
   const attachmentLists = reactive<any>(Object.fromEntries(attachmentConfigs.map((a) => [a.prop, []])));
+
   const formValue = reactive<any>({
-    id: undefined,
     projectName: '',
     constructionContent: '',
     constructionLocation: '',
@@ -205,92 +146,44 @@
     involvedTrades: '',
     otherTrade: '',
     otherDescription: '',
-    ...Object.fromEntries(attachmentConfigs.map((a) => [a.prop, ''])),
+    templateId: '',
   });
 
-  // 详情回显逻辑
-  const initDetail = async () => {
-    if (!businessId.value) return;
+  const initData = async () => {
+    const id = route.query.id as string;
+    if (!id) return;
+
     try {
-      const res = await constructionSafetyQueryDetailConstruction(route.query.id);
-      if (res?.data) {
-        Object.assign(formValue, res.data);
-        // 处理多选框回显
-        tradeArray.value = res.data.involvedTrades ? res.data.involvedTrades.split(',') : [];
-        // 处理附件回显
+      // 1. 获取审批流选项(为了回显 label)
+      const approvals = await getAllApproval();
+      approvalOptions.value = approvals || [];
+
+      // 2. 获取详情
+      const res = await constructionSafetyQueryDetailConstruction(id);
+      if (res) {
+        // 基础数据回显
+        Object.assign(formValue, res);
+
+        // 工种回显
+        if (res.involvedTrades) {
+          tradeArray.value = res.involvedTrades.split(',');
+        }
+
+        // 附件回显还原
         attachmentConfigs.forEach((item) => {
-          if (res.data[item.prop]) {
-            attachmentLists[item.prop] = unformatAttachment(res.data[item.prop]);
+          if (res[item.prop]) {
+            attachmentLists[item.prop] = unformatAttachment(res[item.prop]);
           }
         });
       }
     } catch (error) {
-      console.error('Detail fetch error:', error);
+      console.error('获取详情数据失败:', error);
     }
   };
 
-  onMounted(initDetail);
-
-  // 附件变更处理
-  const handleUploadSuccess = async (prop: string, fileList: any[]) => {
-    attachmentLists[prop] = fileList;
-    // 直接转成 JSON 字符串存入表单对象,确保提交时格式正确
-    const formatted = await formatAttachmentList(fileList);
-    formValue[prop] = formatted && formatted.length > 0 ? JSON.stringify(formatted) : '';
-    formRef.value?.validateField(prop);
-  };
-
-  // 监听工种
-  watch(tradeArray, (val) => {
-    formValue.involvedTrades = val.join(',');
+  onMounted(() => {
+    initData();
   });
-
-  // 校验规则
-  const rules = reactive({
-    projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
-    constructionUnit: [{ required: true, message: '请输入施工单位', trigger: 'blur' }],
-    constructionLocation: [{ required: true, message: '请输入施工地点', trigger: 'blur' }],
-    workerCount: [{ required: true, message: '请输入人数', trigger: 'blur' }],
-    projectManagerName: [{ required: true, message: '请输入项目负责人', trigger: 'blur' }],
-    projectManagerPhone1: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
-    siteSafetyManagerName: [{ required: true, message: '请输入安全负责人', trigger: 'blur' }],
-    siteSafetyPhone1: [{ required: true, message: '请输入联系电话', trigger: 'blur' }],
-    projectStartTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
-    projectEndTime: [
-      { required: true, message: '请选择结束时间', trigger: 'change' },
-      {
-        validator: (_rule, value, callback) => {
-          if (value && formValue.projectStartTime && dayjs(value).isBefore(dayjs(formValue.projectStartTime))) {
-            callback(new Error('不能早于开始时间'));
-          } else {
-            callback();
-          }
-        },
-        trigger: 'change',
-      },
-    ],
-    involvedTrades: [{ required: true, message: '请选择工种', trigger: 'change' }],
-    constructionContent: [{ required: true, message: '请输入简述', trigger: 'blur' }],
-    ...Object.fromEntries(
-      attachmentConfigs.map((a) => [a.prop, [{ required: true, message: `请上传${a.label}`, trigger: 'change' }]]),
-    ),
-  });
-
-  const handleSubmit = () => {
-    formRef.value?.validate((valid: boolean) => {
-      if (valid) {
-        submiting.value = true;
-        constructionSafetySaveConstruction(formValue)
-          .then(() => {
-            ElMessage.success('保存成功!');
-            router.push({ name: 'constructionSafetyManage' });
-          })
-          .finally(() => {
-            submiting.value = false;
-          });
-      }
-    });
-  };
 </script>
 
 <style lang="scss" scoped>
@@ -302,17 +195,17 @@
       padding: 24px;
       background-color: #fff;
     }
-
-    // 深度调整封装组件在 inline 模式下的表现
     :deep(.el-form-item) {
       margin-right: 20px;
       margin-bottom: 24px;
       vertical-align: top;
-
-      // 让附件标签宽度更有呼吸感
       .el-form-item__label {
         font-weight: bold;
       }
     }
+    // :deep(.el-input.is-disabled .el-input__wrapper) {
+    //   background-color: #f8f9fb;
+    //   color: #606266;
+    // }
   }
 </style>