Ver código fonte

fix: bug fix

sunqijun 3 meses atrás
pai
commit
602ad7a540
34 arquivos alterados com 712 adições e 294 exclusões
  1. 16 2
      src/components/UploadFiles/UploadFiles.vue
  2. 1 0
      src/components/UploadImages/UploadImages.vue
  3. 22 1
      src/views/disaster/components/PreviewOnline.vue
  4. 41 10
      src/views/production-safety/implement-safety-duty/components/IssueSafetyResponsibility.vue
  5. 45 0
      src/views/production-safety/implement-safety-duty/components/ShowImages.vue
  6. 0 3
      src/views/production-safety/implement-safety-duty/non-public-area-responsibilities/add.vue
  7. 64 39
      src/views/production-safety/implement-safety-duty/non-public-area-responsibilities/list.vue
  8. 0 3
      src/views/production-safety/implement-safety-duty/non-public-list-responsibilities/add.vue
  9. 64 39
      src/views/production-safety/implement-safety-duty/non-public-list-responsibilities/list.vue
  10. 0 3
      src/views/production-safety/implement-safety-duty/public-area-responsibilities/add.vue
  11. 61 54
      src/views/production-safety/implement-safety-duty/public-area-responsibilities/list.vue
  12. 0 3
      src/views/production-safety/implement-safety-duty/public-list-responsibilities/add.vue
  13. 64 39
      src/views/production-safety/implement-safety-duty/public-list-responsibilities/list.vue
  14. 12 2
      src/views/production-safety/implement-safety-duty/responsibility-agree-manage-dept.vue
  15. 29 16
      src/views/production-safety/implement-safety-duty/responsibility-agree-manage.vue
  16. 35 16
      src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/list.vue
  17. 20 7
      src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/notice-view.vue
  18. 17 6
      src/views/production-safety/implement-safety-duty/responsibility-notice-manage-dept/list.vue
  19. 4 1
      src/views/production-safety/implement-safety-duty/review-responsibility-agree.vue
  20. 27 13
      src/views/production-safety/implement-safety-duty/sign-agree-dept.vue
  21. 22 21
      src/views/production-safety/implement-safety-duty/view-recipients.vue
  22. 1 1
      src/views/production-safety/risk-identification-and-control/construction-safety-manage/audit.vue
  23. 1 1
      src/views/production-safety/risk-identification-and-control/construction-safety-manage/list.vue
  24. 40 3
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/add.vue
  25. 2 2
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/edit.vue
  26. 1 1
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/list.vue
  27. 2 2
      src/views/production-safety/risk-identification-and-control/hazard-approval-manage/view.vue
  28. 1 1
      src/views/production-safety/risk-identification-and-control/hazard-manage/create-plan.vue
  29. 1 1
      src/views/production-safety/risk-identification-and-control/hazard-manage/list.vue
  30. 1 1
      src/views/production-safety/risk-identification-and-control/labor-products-manage/list.vue
  31. 1 1
      src/views/production-safety/risk-identification-and-control/labor-products-requisition-manage/list.vue
  32. 115 0
      src/views/production-safety/risk-identification-and-control/risk-manage/_search-form .code-search
  33. 1 1
      src/views/production-safety/risk-identification-and-control/risk-manage/list.vue
  34. 1 1
      src/views/production-safety/risk-identification-and-control/special-equipment-manage/list.vue

+ 16 - 2
src/components/UploadFiles/UploadFiles.vue

@@ -6,14 +6,14 @@
         <el-icon><UploadFilled /></el-icon>
         <span>{{ label }}</span>
       </label>
-      <span class="upload-button-support">支持pdf、docx、xlsx、pptx文件</span>
+      <span class="upload-button-support">支持pdf、docx、xlsx、pptx, image文件</span>
     </div>
     <input
       type="file"
       :id="inputId"
       class="upload-input"
       multiple
-      accept=".pdf,.docx,.doc,.xlsx,.pptx"
+      :accept="accept || '.pdf,.docx,.doc,.xlsx,.pptx'"
       @change="handleFileSelect"
       :disabled="isUploadDisabled"
     />
@@ -61,6 +61,7 @@
     maxSize?: number;
     maxCount?: number;
     disabled?: boolean;
+    accept?: string;
   }>();
 
   const inputId = `upload-file-${Math.random().toString(36).slice(2, 10)}`;
@@ -105,6 +106,15 @@
     if (fileType.includes('powerpoint') || fileType.includes('presentationml') || fileType.includes('ms-powerpoint'))
       return 'ppt';
 
+    if (
+      fileType.includes('image/jpeg') ||
+      fileType.includes('image/png') ||
+      fileType.includes('image/gif') ||
+      fileType.includes('image/svg+xml')
+    ) {
+      return 'image';
+    }
+    console.log('file:', file);
     // 默认返回
     return 'pdf';
   };
@@ -175,6 +185,10 @@
       'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
       'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
       'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+      'image/jpeg',
+      'image/png',
+      'image/gif',
+      'image/svg+xml',
     ];
     return allowedTypes.includes(file.type);
   };

+ 1 - 0
src/components/UploadImages/UploadImages.vue

@@ -177,6 +177,7 @@
 
   const removeImage = (index: number) => {
     // 释放对象URL以避免内存泄漏
+    alert(index);
     URL.revokeObjectURL(uploadedImages[index].url);
     uploadedImages.splice(index, 1);
     ElMessage.success('删除成功');

+ 22 - 1
src/views/disaster/components/PreviewOnline.vue

@@ -1,7 +1,16 @@
 <template>
   <div class="preview-online-container" v-if="showPreviewOnline">
     <el-icon class="close-icon" @click="close"><CloseBold /></el-icon>
-    <component :is="dynamicComponent[documentType as keyof typeof dynamicComponent]" :src="documentUrl" />
+    <component
+      v-if="dynamicComponent[documentType as keyof typeof dynamicComponent]"
+      :is="dynamicComponent[documentType as keyof typeof dynamicComponent]"
+      :src="documentUrl"
+    />
+    <template v-else>
+      <div class="preview-img">
+        <img :alt="documentUrl" :src="documentUrl" />
+      </div>
+    </template>
   </div>
 </template>
 
@@ -55,6 +64,18 @@
     color: $text-color;
     z-index: 9999;
   }
+  .preview-img {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100vw;
+    height: 100vh;
+    background-color: rgba(0, 0, 0, 0.3);
+    z-index: 9998;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+  }
   :deep(.docx-wrapper) {
     background: $white-color;
     padding: 0;

+ 41 - 10
src/views/production-safety/implement-safety-duty/components/IssueSafetyResponsibility.vue

@@ -19,6 +19,7 @@
           :show-all-levels="false"
           placeholder="请选择下发部门"
           clearable
+          @remove-tag="(val) => handleRemoveTag(val, 'deptId', originDeptId)"
         />
       </el-form-item>
 
@@ -29,6 +30,7 @@
           v-model="formData.userGroupId"
           placeholder="请选择下发分组"
           style="width: 100%"
+          @remove-tag="(val) => handleRemoveTag(val, 'userGroupId', originUserGroupId)"
         >
           <el-option v-for="group in groupList" :key="group.id" :label="group.name" :value="group.id" />
         </el-select>
@@ -193,17 +195,20 @@
 </template>
 
 <script setup lang="ts">
-  import { ref, reactive, watch } from 'vue';
-  import type { FormInstance } from 'element-plus';
+  import { ref, reactive, watch, onMounted } from 'vue';
+  import { ElMessage, type FormInstance } from 'element-plus';
   import dayjs from 'dayjs';
-  import { queryAvailableUserList } from '@/api/production-safety/responsibility-implementation';
-  import { de } from 'element-plus/es/locale';
+  import {
+    queryAvailableUserList,
+    safetyResponsibilityAdminQueryDetail,
+  } from '@/api/production-safety/responsibility-implementation';
 
   const props = defineProps<{
     modelValue: boolean;
     currentDepartmentKey: string;
     groupList: any[];
     departmentOptions: any[];
+    currentRowData: any;
   }>();
 
   const emit = defineEmits(['close', 'submit', 'update:modelValue']);
@@ -256,6 +261,26 @@
       immediate: true,
     },
   );
+  const originDeptId = ref<any>([]);
+  const originUserGroupId = ref<any>([]);
+  onMounted(() => {
+    safetyResponsibilityAdminQueryDetail({
+      id: props.currentRowData.id,
+    }).then((res) => {
+      console.log('res:', res);
+      for (let key in res) {
+        formData[key] = res[key];
+        Object.assign(formData, {
+          [key]: res[key],
+          deptId: res.deptId ? JSON.parse(res.deptId) : [],
+          userGroupId: res.userGroupId.split(',').map((id) => Number(id)),
+        });
+        originDeptId.value = res.deptId ? JSON.parse(res.deptId) : [];
+        originUserGroupId.value = res.userGroupId ? res.userGroupId.split(',').map((id) => Number(id)) : [];
+      }
+      console.log('formData:', formData);
+    });
+  });
 
   const handleClose = () => {
     emit('update:modelValue', false);
@@ -267,11 +292,17 @@
     getUserData(dataName, query);
   };
 
-  // const handleChangeDept = (val) => {
-  //   const cascader = cascaderRef.value;
-  //   const deptInfo = cascader?.getCheckedNodes();
-  //   console.log(deptInfo);
-  // };
+  const handleRemoveTag = (val, field, originData) => {
+    console.log('has:', originData, val);
+
+    const currentId = new Set(originData.flat());
+    const has = Array.isArray(val) ? val.every((v) => currentId.has(v)) : currentId.has(val);
+    if (has) {
+      ElMessage.error('不能删除已有下发部门');
+      formData[field] = [...originData, ...formData[field]];
+      return;
+    }
+  };
 
   const rules = reactive({
     deptId: [{ required: true, message: '请选择下发部门', trigger: 'change' }],
@@ -280,7 +311,7 @@
     signOrder: [
       {
         validator: (_: any, value: any, callback: any) => {
-          if (formData.signPerson === 1 && (!value || value.length === 0)) {
+          if (formData?.signPerson === 1 && (!value || value.length === 0)) {
             return callback(new Error('请选择签署人顺序'));
           }
           callback();

+ 45 - 0
src/views/production-safety/implement-safety-duty/components/ShowImages.vue

@@ -0,0 +1,45 @@
+<template>
+  <div class="show-box-container">
+    <div v-for="(image, index) in imageList" :key="index" class="image-preview">
+      <el-image
+        :src="image"
+        :zoom-rate="1.2"
+        :max-scale="7"
+        :min-scale="0.2"
+        :preview-src-list="imageList"
+        show-progress
+        :initial-index="index"
+        fit="contain"
+      />
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+  // import type { ImageItem } from '@/types/disaster-control';
+  // import { computed } from 'vue';
+
+  const props = defineProps<{
+    imageList?: string[];
+  }>();
+
+  // const images = computed(() => {
+  //   if (!props.imageList) return [];
+  //   return JSON.parse(props.imageList);
+  // });
+</script>
+
+<style scoped>
+  .show-box-container {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 5px;
+    width: 100%;
+  }
+
+  .image-preview {
+    width: 100px;
+    height: 100px;
+    border-radius: 4px;
+  }
+</style>

+ 0 - 3
src/views/production-safety/implement-safety-duty/non-public-area-responsibilities/add.vue

@@ -39,7 +39,6 @@
 
         <el-form-item label="安全责任所/中心负责人" prop="safetyCenterManager">
           <el-select
-            :disabled="!safetyCenterManagerOptions.length"
             v-model="formValue.safetyCenterManager"
             placeholder="请选择"
             size="large"
@@ -88,7 +87,6 @@
 
         <el-form-item label="安全责任部门负责人" prop="safetyDepartmentManager">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetyDepartmentManager"
             placeholder="请选择"
             size="large"
@@ -102,7 +100,6 @@
 
         <el-form-item label="安全具体责任人" prop="safetySpecificPerson">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetySpecificPerson"
             placeholder="请选择"
             size="large"

+ 64 - 39
src/views/production-safety/implement-safety-duty/non-public-area-responsibilities/list.vue

@@ -1,20 +1,28 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <el-tabs v-model="activeTab" @tab-change="handleTabChange">
+      <div class="breadcrumb-title">{{ $route.meta.title }}</div>
+      <!-- <el-tabs v-model="activeTab" @tab-change="handleTabChange">
         <el-tab-pane label="公共区域" :name="1" />
         <el-tab-pane label="非公共区域" :name="2" />
-      </el-tabs>
+      </el-tabs> -->
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px">
+        <el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'areaAddResponsibilities:nonPublic',
+            })
+          "
+          >添加
+        </el-button>
+      </div>
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="功能名称">
-            <el-input
-              v-model="queryParams.queryParam.nameFunction"
-              placeholder="搜索安全责任书名称"
-              style="width: 170px"
-            />
+            <el-input v-model="queryParams.queryParam.nameFunction" placeholder="搜索功能名称" style="width: 170px" />
           </el-form-item>
           <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
@@ -28,15 +36,7 @@
         <div>
           <!-- <el-button @click="batchImportVisible = true">导入</el-button>
           <el-button type="primary" @click="handleDownload">导出</el-button> -->
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'areaAddResponsibilities:nonPublic',
-              })
-            "
-            >添加
-          </el-button>
+
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -59,7 +59,7 @@
           <el-table-column label="状态" prop="statusName" width="100" />
           <el-table-column fixed="right" min-width="240" label="操作">
             <template #default="scope">
-              <div v-if="scope.row.status === 1">
+              <template v-if="scope.row.status === 1">
                 <el-button
                   type="primary"
                   link
@@ -79,19 +79,6 @@
                   </template>
                 </el-popconfirm>
 
-                <el-button
-                  type="primary"
-                  link
-                  @click="
-                    $router.push({
-                      name: 'areaViewResponsibilities:nonPublic',
-                      query: {
-                        id: scope.row.id,
-                      },
-                    })
-                  "
-                  >查看</el-button
-                >
                 <el-button
                   type="primary"
                   link
@@ -105,15 +92,35 @@
                   "
                   >变更</el-button
                 >
-              </div>
-              <div v-if="scope.row.canChange === true">
+              </template>
+              <template v-if="scope.row.canChange === true">
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 1)">确认</el-button>
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 0)">拒绝</el-button>
-              </div>
-              <div v-if="scope.row.status === 3">
+              </template>
+              <template v-if="scope.row.status === 3">
                 <el-button type="primary" link>变更</el-button>
-                <el-button type="primary" link>查看</el-button>
-              </div>
+              </template>
+              <el-button
+                type="primary"
+                link
+                @click="
+                  $router.push({
+                    name: 'areaViewResponsibilities:nonPublic',
+                    query: {
+                      id: scope.row.id,
+                    },
+                  })
+                "
+                >查看</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="scope.row.safetySpecificPerson === id"
+                @click="handleAreaCheckListApprove(scope, 0)"
+              >
+                撤回
+              </el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -121,9 +128,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -220,12 +229,19 @@
       approveType,
       refuseReason: null,
     }).then(() => {
-      ElMessage.success('操作成功!');
+      if (approveType === 1) {
+        ElMessage.success('请尽快修改该责任清单的安全责任所/中心、安全责任部门及相关负责人信息');
+      } else {
+        ElMessage.success('操作成功!');
+      }
       queryTableList();
     });
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -297,7 +313,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -313,4 +329,13 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    display: flex;
+    justify-content: flex-end;
+  }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 0 - 3
src/views/production-safety/implement-safety-duty/non-public-list-responsibilities/add.vue

@@ -39,7 +39,6 @@
 
         <el-form-item label="安全责任所/中心负责人" prop="safetyCenterManager">
           <el-select
-            :disabled="!safetyCenterManagerOptions.length"
             v-model="formValue.safetyCenterManager"
             placeholder="请选择"
             size="large"
@@ -88,7 +87,6 @@
 
         <el-form-item label="安全责任部门负责人" prop="safetyDepartmentManager">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetyDepartmentManager"
             placeholder="请选择"
             size="large"
@@ -102,7 +100,6 @@
 
         <el-form-item label="安全具体责任人" prop="safetySpecificPerson">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetySpecificPerson"
             placeholder="请选择"
             size="large"

+ 64 - 39
src/views/production-safety/implement-safety-duty/non-public-list-responsibilities/list.vue

@@ -1,25 +1,34 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <el-tabs v-model="activeTab" @tab-change="handleTabChange">
+      <div class="breadcrumb-title">{{ $route.meta.title }}</div>
+      <!-- <el-tabs v-model="activeTab" @tab-change="handleTabChange">
         <el-tab-pane label="公共区域" :name="1" />
         <el-tab-pane label="非公共区域" :name="2" />
-      </el-tabs>
+      </el-tabs> -->
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px">
+        <el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'addResponsibilities:nonPublic',
+            })
+          "
+          >添加
+        </el-button>
+      </div>
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="功能名称">
-            <el-input
-              v-model="queryParams.queryParam.nameFunction"
-              placeholder="搜索安全责任书名称"
-              style="width: 170px"
-            />
+            <el-input v-model="queryParams.queryParam.nameFunction" placeholder="搜索功能名称" style="width: 170px" />
           </el-form-item>
           <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
               <el-option :value="1" label="正常" />
               <el-option :value="2" label="待确认" />
+              <el-option :value="3" label="已拒绝" />
             </el-select>
           </el-form-item>
 
@@ -51,15 +60,7 @@
         <div>
           <!-- <el-button @click="batchImportVisible = true">导入</el-button>
           <el-button type="primary" @click="handleDownload">导出</el-button> -->
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'addResponsibilities:nonPublic',
-              })
-            "
-            >添加
-          </el-button>
+
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -82,7 +83,7 @@
           <el-table-column label="状态" prop="statusName" width="100" />
           <el-table-column fixed="right" min-width="240" label="操作">
             <template #default="scope">
-              <div v-if="scope.row.status === 1">
+              <template v-if="scope.row.status === 1">
                 <el-button
                   type="primary"
                   link
@@ -102,19 +103,6 @@
                   </template>
                 </el-popconfirm>
 
-                <el-button
-                  type="primary"
-                  link
-                  @click="
-                    $router.push({
-                      name: 'viewResponsibilities:nonPublic',
-                      query: {
-                        id: scope.row.id,
-                      },
-                    })
-                  "
-                  >查看</el-button
-                >
                 <el-button
                   type="primary"
                   link
@@ -128,15 +116,35 @@
                   "
                   >变更</el-button
                 >
-              </div>
-              <div v-if="scope.row.canChange === true">
+              </template>
+              <template v-if="scope.row.canChange === true">
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 1)">确认</el-button>
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 0)">拒绝</el-button>
-              </div>
-              <div v-if="scope.row.status === 3">
+              </template>
+              <template v-if="scope.row.status === 3">
                 <el-button type="primary" link>变更</el-button>
-                <el-button type="primary" link>查看</el-button>
-              </div>
+              </template>
+              <el-button
+                type="primary"
+                link
+                @click="
+                  $router.push({
+                    name: 'viewResponsibilities:nonPublic',
+                    query: {
+                      id: scope.row.id,
+                    },
+                  })
+                "
+                >查看</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="scope.row.safetySpecificPerson === id"
+                @click="handleAreaCheckListApprove(scope, 0)"
+              >
+                撤回
+              </el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -144,9 +152,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -181,6 +191,9 @@
   import { useGlobSetting } from '@/hooks/setting';
   import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
   import { getAllDepartments } from '@/api/auth/dept';
+  import { useUserInfoHook } from '@/views/disaster/hooks';
+
+  const { id: userId } = useUserInfoHook();
   const router = useRouter();
   const activeTab = ref(2);
   const queryParams = reactive<any>({
@@ -266,7 +279,11 @@
       approveType,
       refuseReason: null,
     }).then(() => {
-      ElMessage.success('操作成功!');
+      if (approveType === 1) {
+        ElMessage.success('请尽快修改该责任清单的安全责任所/中心、安全责任部门及相关负责人信息');
+      } else {
+        ElMessage.success('操作成功!');
+      }
       queryTableList();
     });
   };
@@ -286,7 +303,10 @@
     });
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -362,7 +382,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -378,4 +398,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 0 - 3
src/views/production-safety/implement-safety-duty/public-area-responsibilities/add.vue

@@ -39,7 +39,6 @@
 
         <el-form-item label="安全责任所/中心负责人" prop="safetyCenterManager">
           <el-select
-            :disabled="!safetyCenterManagerOptions.length"
             v-model="formValue.safetyCenterManager"
             placeholder="请选择"
             size="large"
@@ -88,7 +87,6 @@
 
         <el-form-item label="安全责任部门负责人" prop="safetyDepartmentManager">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetyDepartmentManager"
             placeholder="请选择"
             size="large"
@@ -102,7 +100,6 @@
 
         <el-form-item label="安全具体责任人" prop="safetySpecificPerson">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetySpecificPerson"
             placeholder="请选择"
             size="large"

+ 61 - 54
src/views/production-safety/implement-safety-duty/public-area-responsibilities/list.vue

@@ -1,20 +1,28 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <el-tabs v-model="activeTab" @tab-change="handleTabChange">
+      <div class="breadcrumb-title">{{ $route.meta.title }}</div>
+      <!-- <el-tabs v-model="activeTab" @tab-change="handleTabChange">
         <el-tab-pane label="公共区域" :name="1" />
         <el-tab-pane label="非公共区域" :name="2" />
-      </el-tabs>
+      </el-tabs> -->
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px">
+        <el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'areaAddResponsibilities:public',
+            })
+          "
+          >添加
+        </el-button>
+      </div>
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="功能名称">
-            <el-input
-              v-model="queryParams.queryParam.nameFunction"
-              placeholder="搜索安全责任书名称"
-              style="width: 170px"
-            />
+            <el-input v-model="queryParams.queryParam.nameFunction" placeholder="搜索功能名称" style="width: 170px" />
           </el-form-item>
           <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
@@ -28,15 +36,7 @@
         <div>
           <!-- <el-button @click="batchImportVisible = true">导入</el-button>
           <el-button type="primary" @click="handleDownload">导出</el-button> -->
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'areaAddResponsibilities:public',
-              })
-            "
-            >添加
-          </el-button>
+
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -58,7 +58,7 @@
           <el-table-column label="状态" prop="statusName" width="100" />
           <el-table-column fixed="right" min-width="240" label="操作">
             <template #default="scope">
-              <div v-if="scope.row.status === 1">
+              <template v-if="scope.row.status === 1">
                 <el-button
                   type="primary"
                   link
@@ -77,42 +77,35 @@
                     <el-button type="primary" link>删除</el-button>
                   </template>
                 </el-popconfirm>
-
-                <el-button
-                  type="primary"
-                  link
-                  @click="
-                    $router.push({
-                      name: 'areaViewResponsibilities:public',
-                      query: {
-                        id: scope.row.id,
-                      },
-                    })
-                  "
-                  >查看</el-button
-                >
-                <el-button
-                  type="primary"
-                  link
-                  @click="
-                    $router.push({
-                      name: 'areaChangeResponsibilities:public',
-                      query: {
-                        id: scope.row.id,
-                      },
-                    })
-                  "
-                  >变更</el-button
-                >
-              </div>
-              <div v-if="scope.row.canChange === true">
+              </template>
+              <template v-if="scope.row.canChange === true">
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 1)">确认</el-button>
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 0)">拒绝</el-button>
-              </div>
-              <div v-if="scope.row.status === 3">
+              </template>
+              <template v-if="scope.row.status === 3">
                 <el-button type="primary" link>变更</el-button>
-                <el-button type="primary" link>查看</el-button>
-              </div>
+              </template>
+              <el-button
+                type="primary"
+                link
+                @click="
+                  $router.push({
+                    name: 'areaViewResponsibilities:public',
+                    query: {
+                      id: scope.row.id,
+                    },
+                  })
+                "
+                >查看</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="scope.row.safetySpecificPerson === id"
+                @click="handleAreaCheckListApprove(scope, 0)"
+              >
+                撤回
+              </el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -120,9 +113,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -218,13 +213,20 @@
       id: scope.row.id,
       approveType,
       refuseReason: null,
-    }).then(() => {
-      ElMessage.success('操作成功!');
+    }).then((res) => {
+      if (approveType === 1) {
+        ElMessage.success('请尽快修改该责任清单的安全责任所/中心、安全责任部门及相关负责人信息');
+      } else {
+        ElMessage.success('操作成功!');
+      }
       queryTableList();
     });
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -296,7 +298,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -312,4 +314,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 0 - 3
src/views/production-safety/implement-safety-duty/public-list-responsibilities/add.vue

@@ -39,7 +39,6 @@
 
         <el-form-item label="安全责任所/中心负责人" prop="safetyCenterManager">
           <el-select
-            :disabled="!safetyCenterManagerOptions.length"
             v-model="formValue.safetyCenterManager"
             placeholder="请选择"
             size="large"
@@ -88,7 +87,6 @@
 
         <el-form-item label="安全责任部门负责人" prop="safetyDepartmentManager">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetyDepartmentManager"
             placeholder="请选择"
             size="large"
@@ -102,7 +100,6 @@
 
         <el-form-item label="安全具体责任人" prop="safetySpecificPerson">
           <el-select
-            :disabled="!userOptions.length"
             v-model="formValue.safetySpecificPerson"
             placeholder="请选择"
             size="large"

+ 64 - 39
src/views/production-safety/implement-safety-duty/public-list-responsibilities/list.vue

@@ -1,25 +1,34 @@
 <template>
   <div class="safety-platform-container">
     <header class="safety-platform-container__header">
-      <el-tabs v-model="activeTab" @tab-change="handleTabChange">
+      <div class="breadcrumb-title">{{ $route.meta.title }}</div>
+      <!-- <el-tabs v-model="activeTab" @tab-change="handleTabChange">
         <el-tab-pane label="公共区域" :name="1" />
         <el-tab-pane label="非公共区域" :name="2" />
-      </el-tabs>
+      </el-tabs> -->
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px">
+        <el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'addResponsibilities:public',
+            })
+          "
+          >添加
+        </el-button>
+      </div>
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="功能名称">
-            <el-input
-              v-model="queryParams.queryParam.nameFunction"
-              placeholder="搜索安全责任书名称"
-              style="width: 170px"
-            />
+            <el-input v-model="queryParams.queryParam.nameFunction" placeholder="搜索功能名称" style="width: 170px" />
           </el-form-item>
           <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
               <el-option :value="1" label="正常" />
               <el-option :value="2" label="待确认" />
+              <el-option :value="3" label="已拒绝" />
             </el-select>
           </el-form-item>
           <el-form-item label="安全责任部门">
@@ -50,15 +59,7 @@
         <div>
           <!-- <el-button @click="batchImportVisible = true">导入</el-button>
           <el-button type="primary" @click="handleDownload">导出</el-button> -->
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'addResponsibilities:public',
-              })
-            "
-            >添加
-          </el-button>
+
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -81,7 +82,7 @@
           <el-table-column label="状态" prop="statusName" width="100" />
           <el-table-column fixed="right" min-width="240" label="操作">
             <template #default="scope">
-              <div v-if="scope.row.status === 1">
+              <template v-if="scope.row.status === 1">
                 <el-button
                   type="primary"
                   link
@@ -101,19 +102,6 @@
                   </template>
                 </el-popconfirm>
 
-                <el-button
-                  type="primary"
-                  link
-                  @click="
-                    $router.push({
-                      name: 'viewResponsibilities:public',
-                      query: {
-                        id: scope.row.id,
-                      },
-                    })
-                  "
-                  >查看</el-button
-                >
                 <el-button
                   type="primary"
                   link
@@ -127,15 +115,35 @@
                   "
                   >变更</el-button
                 >
-              </div>
-              <div v-if="scope.row.canChange === true">
+              </template>
+              <template v-if="scope.row.canChange === true">
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 1)">确认</el-button>
                 <el-button type="primary" link @click="handleAreaCheckListApprove(scope, 0)">拒绝</el-button>
-              </div>
-              <div v-if="scope.row.status === 3">
+              </template>
+              <template v-if="scope.row.status === 3">
                 <el-button type="primary" link>变更</el-button>
-                <el-button type="primary" link>查看</el-button>
-              </div>
+              </template>
+              <el-button
+                type="primary"
+                link
+                @click="
+                  $router.push({
+                    name: 'viewResponsibilities:public',
+                    query: {
+                      id: scope.row.id,
+                    },
+                  })
+                "
+                >查看</el-button
+              >
+              <el-button
+                link
+                type="primary"
+                v-if="scope.row.safetySpecificPerson === id"
+                @click="handleAreaCheckListApprove(scope, 0)"
+              >
+                撤回
+              </el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -143,9 +151,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -179,6 +189,8 @@
   import { useGlobSetting } from '@/hooks/setting';
   import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
   import { getAllDepartments } from '@/api/auth/dept';
+  import { useUserInfoHook } from '@/views/disaster/hooks';
+  const { id } = useUserInfoHook();
 
   const router = useRouter();
   const activeTab = ref(1);
@@ -278,12 +290,20 @@
       approveType,
       refuseReason: null,
     }).then(() => {
-      ElMessage.success('操作成功!');
+      if (approveType === 1) {
+        ElMessage.success('请尽快修改该责任清单的安全责任所/中心、安全责任部门及相关负责人信息');
+      } else {
+        ElMessage.success('操作成功!');
+      }
+
       queryTableList();
     });
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -364,7 +384,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -380,4 +400,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 12 - 2
src/views/production-safety/implement-safety-duty/responsibility-agree-manage-dept.vue

@@ -178,9 +178,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -372,7 +374,10 @@
   //   issueSafetyResponsibilityRef.value.dialogShow();
   // };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -484,7 +489,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -500,4 +505,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 29 - 16
src/views/production-safety/implement-safety-duty/responsibility-agree-manage.vue

@@ -13,6 +13,17 @@
       </el-tabs>
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px">
+        <el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'createResponsibilityAgree',
+            })
+          "
+          >添加责任书
+        </el-button>
+      </div>
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="责任书名称">
@@ -22,7 +33,7 @@
               style="width: 170px"
             />
           </el-form-item>
-          <el-form-item label="状态">
+          <!-- <el-form-item label="状态">
             <el-select v-model="queryParams.queryParam.status" clearable placeholder="状态" style="width: 170px">
               <el-option :value="1" label="未下发" />
               <el-option :value="2" label="待签署" />
@@ -46,7 +57,7 @@
               <el-option value="员工">员工</el-option>
               <el-option value="常驻供应商">常驻供应商</el-option>
             </el-select>
-          </el-form-item>
+          </el-form-item> -->
           <el-form-item label="计划日期">
             <el-date-picker
               v-model="queryParams.queryParam.date"
@@ -62,15 +73,6 @@
         <div>
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'createResponsibilityAgree',
-              })
-            "
-            >添加责任书
-          </el-button>
         </div>
       </div>
 
@@ -112,7 +114,7 @@
                 </template>
               </el-popconfirm>
               <el-button
-                v-if="scope.row.status === 1"
+                v-if="scope.row.status === 1 || scope.row.status === 2"
                 type="primary"
                 link
                 @click="handleIssueSafetyResponsibility(scope)"
@@ -146,9 +148,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -161,6 +165,7 @@
     :groupList="groupList"
     :currentDepartmentKey="currentDepartmentKey"
     :departmentOptions="departmentOptions"
+    :currentRowData="currentRowData"
     @submit="handleSubmit"
   />
 </template>
@@ -273,7 +278,10 @@
     dialogOpen.value = true;
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -329,9 +337,9 @@
     safetyResponsibilityAdminIssuedSafety({
       ...formData,
       adminId: currentRowData.value.id,
-      userGroupId: formData.userGroupId.join(','),
+      userGroupId: formData?.userGroupId?.join(',') ?? undefined,
       deptId: JSON.stringify(formData.deptId),
-      signPerson: formData.signPerson.join(','),
+      signPerson: Array.isArray(formData.signPerson) ? formData.signPerson.join(',') : undefined,
       departmentId: formData.deptId.map((item) => (Array.isArray(item) ? item[item.length - 1] : item)).join(','),
     })
       .then(() => {
@@ -394,7 +402,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -410,4 +418,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 35 - 16
src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/list.vue

@@ -9,6 +9,20 @@
       </el-tabs>
     </header>
     <main class="safety-platform-container__main">
+      <div style="margin-bottom: 20px"
+        ><el-button
+          type="primary"
+          @click="
+            $router.push({
+              name: 'responsibilityNoticeAdd:admin',
+              query: {
+                areaType: activeTab,
+              },
+            })
+          "
+          >添加
+        </el-button></div
+      >
       <div class="search-form">
         <el-form :inline="true">
           <el-form-item label="安全责任书">
@@ -46,18 +60,6 @@
         </el-form>
 
         <div>
-          <el-button
-            type="primary"
-            @click="
-              $router.push({
-                name: 'responsibilityNoticeAdd:admin',
-                query: {
-                  areaType: activeTab,
-                },
-              })
-            "
-            >添加
-          </el-button>
           <el-button type="primary" @click="queryTableList">查询</el-button>
           <el-button @click="handleRestParams">重置</el-button>
         </div>
@@ -147,9 +149,16 @@
                 "
                 >审核</el-button
               >
-              <el-button v-if="scope.row.status === 1" type="primary" link @click="handleConfirmDeleteRow(scope)"
-                >删除</el-button
+
+              <el-popconfirm
+                title="确定要删除吗?"
+                v-if="scope.rows.status === 1"
+                @confirm="handleConfirmDeleteRow(scope)"
               >
+                <template #reference>
+                  <el-button type="primary" link>删除</el-button>
+                </template>
+              </el-popconfirm>
               <!-- <el-button type="primary" link @click="handleScrap(scope)">作废</el-button> -->
               <el-button type="primary" link @click="handleDownloadLink(scope)">下载</el-button>
             </template>
@@ -159,9 +168,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -272,7 +283,10 @@
     });
   };
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -365,7 +379,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -396,4 +410,9 @@
       cursor: pointer;
     }
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 20 - 7
src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/notice-view.vue

@@ -12,10 +12,10 @@
       </div>
       <el-tabs v-model="activeTab">
         <el-tab-pane label="全部" name="" />
-        <el-tab-pane label="待反馈材料" name="3" />
-        <el-tab-pane label="待审核" name="4" />
-        <el-tab-pane label="已完成" name="5" />
-        <el-tab-pane label="已作废" name="6" />
+        <el-tab-pane label="待反馈材料" :name="2" />
+        <el-tab-pane label="待审核" :name="3" />
+        <el-tab-pane label="已完成" :name="4" />
+        <el-tab-pane label="已作废" :name="5" />
       </el-tabs>
     </header>
     <main class="safety-platform-container__main">
@@ -104,9 +104,11 @@
       <div class="pagination-container">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -169,8 +171,14 @@
     });
   };
 
-  const handleSizeChange = () => {};
-  const handleCurrentChange = () => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
+  const handleCurrentChange = (value) => {
+    queryParams.pageNumber = value;
+    queryTableList();
+  };
   const handleDownloadLink = (scope) => {
     const attachment = unformatAttachment(scope.row.attachment);
     attachment?.forEach((item: any) => {
@@ -318,7 +326,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -334,4 +342,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

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

@@ -64,15 +64,16 @@
 
       <div class="table-content">
         <el-table :data="tableData.data">
-          <el-table-column label="责任书通知名称" prop="responsibilityName" width="180" />
+          <el-table-column label="责任书通知名称" prop="responsibilityName" />
           <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="signedQuantity" 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="操作">
+          <!-- <el-table-column label="安全责任人" prop="responsibilityPersonName" /> -->
+          <el-table-column label="计划开始时间" prop="planStartTime" />
+          <el-table-column label="计划完成时间" prop="planEndTime" />
+          <el-table-column min-width="300" label="操作">
             <template #default="scope">
               <el-button
                 type="primary"
@@ -95,9 +96,11 @@
       <div class="pagination-container" v-if="tableData.total > 0">
         <el-pagination
           background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -137,7 +140,10 @@
     total: 0,
   });
 
-  const handleSizeChange = (value) => {};
+  const handleSizeChange = (value) => {
+    queryParams.pageSize = value;
+    queryTableList();
+  };
   const handleCurrentChange = (value) => {
     queryParams.pageNumber = value;
     queryTableList();
@@ -222,7 +228,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 
@@ -238,4 +244,9 @@
     display: flex;
     justify-content: flex-end;
   }
+  .pagination-container {
+    margin-top: 20px;
+    display: flex;
+    justify-content: flex-end;
+  }
 </style>

+ 4 - 1
src/views/production-safety/implement-safety-duty/review-responsibility-agree.vue

@@ -122,9 +122,12 @@
       </div>
       <div class="page-content">
         <el-pagination
+          background
+          layout="prev, pager, next, jumper,sizes, total"
           :current-page="queryParams.pageNumber"
           :page-size="queryParams.pageSize"
           :total="tableData.total"
+          :page-sizes="[10, 20, 50, 100]"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
@@ -238,7 +241,7 @@
     min-width: 800px;
     display: flex;
     justify-content: space-between;
-    align-items: self-end;
+    align-items: flex-end;
   }
 
   .button-content {

+ 27 - 13
src/views/production-safety/implement-safety-duty/sign-agree-dept.vue

@@ -75,6 +75,7 @@
             </div>
           </div>
         </div>
+
         <template v-if="signRecords.level1.length">
           <h4 v-if="currentDepartmentKey === 'A'"> 副院长签署 </h4>
           <h4 v-if="currentDepartmentKey === 'B'"> 负责人签署 </h4>
@@ -88,12 +89,13 @@
                   <el-form-item>
                     <UploadFiles
                       :disabled="!item.signFlag"
+                      accept=".jpeg,.jpg,.png,.svg"
                       label="上传文件"
                       :fileList="item.attachment"
                       @upload-success="(fileList) => handleUploadSignsUploadSuccess(item, fileList)"
                     />
                   </el-form-item>
-                  <!-- <div class="file-list">
+                  <div class="file-list">
                     <div class="file-item" v-for="file in item.attachment" :key="file.fileId">
                       <span class="file-item--name">{{ file.fileName }}</span>
                       <div class="file-item--footer">
@@ -105,7 +107,7 @@
                         >
                       </div>
                     </div>
-                  </div> -->
+                  </div>
                 </div>
               </div>
             </div>
@@ -124,12 +126,13 @@
                   <el-form-item>
                     <UploadFiles
                       :disabled="!item.signFlag"
+                      accept=".jpeg,.jpg,.png,.svg"
                       label="上传文件"
                       :fileList="item.attachment"
                       @upload-success="(fileList) => handleUploadSignsUploadSuccess(item, fileList)"
                     />
                   </el-form-item>
-                  <!-- <div class="file-list">
+                  <div class="file-list">
                     <div class="file-item" v-for="file in item.attachment" :key="file.fileId">
                       <span class="file-item--name">{{ file.fileName }}</span>
                       <div class="file-item--footer">
@@ -141,7 +144,7 @@
                         >
                       </div>
                     </div>
-                  </div> -->
+                  </div>
                 </div>
               </div>
             </div>
@@ -159,12 +162,13 @@
                   <el-form-item>
                     <UploadFiles
                       :disabled="!item.signFlag"
+                      accept=".jpeg,.jpg,.png,.svg"
                       label="上传文件"
                       :fileList="item.attachment"
                       @upload-success="(fileList) => handleUploadSignsUploadSuccess(item, fileList)"
                     />
                   </el-form-item>
-                  <!-- <div class="file-list">
+                  <div class="file-list">
                     <div class="file-item" v-for="file in item.attachment" :key="file.fileId">
                       <span class="file-item--name">{{ file.fileName }}</span>
                       <div class="file-item--footer">
@@ -176,7 +180,7 @@
                         >
                       </div>
                     </div>
-                  </div> -->
+                  </div>
                 </div>
               </div>
             </div>
@@ -222,8 +226,8 @@
 
   import { unformatAttachment, formatAttachmentList } from '@/components/UploadFiles/utils';
   import PreviewOnline from '@/views/disaster/components/PreviewOnline.vue';
-  import { sign } from 'crypto';
 
+  const uploadImagesRef = ref<InstanceType<typeof UploadFiles>>();
   const router = useRouter();
   const route = useRoute();
   const formRef = ref<any>(null);
@@ -247,6 +251,8 @@
     signRecords: [],
   });
 
+  const recordImageList = ref<string[]>([]);
+
   const rules = reactive({
     signsUpload: [
       {
@@ -256,6 +262,14 @@
     ],
   });
 
+  const handleUploadChange = (fileList) => {
+    // console.log('files', val);
+    // console.log('files', uploadImagesRef.value!.getUploadedImages());
+    // ruleFormData.drillImagesFile = uploadImagesRef.value!.getUploadedImages();
+    recordImageList.value = uploadImagesRef.value!.getUploadedImages();
+    console.log('@recordImageList:', recordImageList.value);
+  };
+
   const signRecords = computed(() => {
     return {
       level1: formData.signRecords.filter((item) => item.signLevel === 1),
@@ -291,7 +305,6 @@
     return route.query.status === '3' && formData.rejection !== null;
   });
   const previewOnlineRef = ref<InstanceType<typeof PreviewOnline>>();
-  const isSignsUpload = computed(() => route.query.status === '2');
   const signerId = ref('');
   const currentLabel = ref('');
   const previewOnline = (url: string | undefined, type) => {
@@ -299,8 +312,10 @@
       previewOnlineRef.value?.open(url, type);
     }
   };
-  const handleUploadSignsUploadSuccess = (item, fileList) => {
-    item.attachment = fileList;
+  const handleUploadSignsUploadSuccess = async (item, fileList) => {
+    const attachment = await formatAttachmentList(fileList);
+    item.attachment = attachment;
+
     formData.signRecords = [...signRecords.value.level1, ...signRecords.value.level2, ...signRecords.value.level3];
   };
 
@@ -376,13 +391,12 @@
       });
   };
 
-  const handleSubmitSign = async (firstItem) => {
+  const handleSubmitSign = (firstItem) => {
     submiting.value = true;
     try {
-      const attachment = await formatAttachmentList(firstItem?.attachment);
       const params = {
         ids: [route.query.id],
-        attachment: JSON.stringify(attachment),
+        attachment: JSON.stringify(firstItem?.attachment),
       };
 
       safetyResponsibilityDeptBatchSign(params)

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

@@ -58,7 +58,8 @@
           <el-table-column label="责任书名称" prop="responsibilityName" width="180" />
           <el-table-column label="状态" prop="statusName" width="100" />
           <el-table-column label="类别名称" prop="departmentName" />
-
+          <el-table-column label="查看下发对象" prop="responsibilityPersonName" />
+          <el-table-column label="是否并签" prop="signConfigName" />
           <el-table-column label="分组名称" prop="userGroupName" />
           <el-table-column label="计划完成时间" prop="planEndTime" />
           <el-table-column fixed="right" width="200" label="操作">
@@ -72,7 +73,7 @@
                   <el-button type="primary" link>删除</el-button>
                 </template>
               </el-popconfirm>
-              <el-popconfirm v-if="scope.row.status === 6">
+              <el-popconfirm v-if="scope.row.status !== 6">
                 <el-button type="primary" link @click="handleScrap(scope)">作废</el-button>
               </el-popconfirm>
 
@@ -177,24 +178,24 @@
     });
   };
 
-  const handleExport = () => {
-    safetyResponsibilityAdminExportIssuedObject({
-      ...omit(queryParams.queryParam, 'date'),
-      adminId: Number(queryParams.queryParam.adminId),
-      startTime: queryParams.queryParam.date?.[0]
-        ? dayjs(queryParams.queryParam.date?.[0]).format('YYYY-MM-DD')
-        : undefined,
-      endTime: queryParams.queryParam.date?.[1]
-        ? dayjs(queryParams.queryParam.date?.[1]).format('YYYY-MM-DD')
-        : undefined,
-    }).then((res) => {
-      if (!res) {
-        throw new Error('下载文件失败');
-      }
-      downloadByData(res, `${Date.now()}.xlsx`);
-      ElMessage.success('导出文件成功');
-    });
-  };
+  // const handleExport = () => {
+  //   safetyResponsibilityAdminExportIssuedObject({
+  //     ...omit(queryParams.queryParam, 'date'),
+  //     adminId: Number(queryParams.queryParam.adminId),
+  //     startTime: queryParams.queryParam.date?.[0]
+  //       ? dayjs(queryParams.queryParam.date?.[0]).format('YYYY-MM-DD')
+  //       : undefined,
+  //     endTime: queryParams.queryParam.date?.[1]
+  //       ? dayjs(queryParams.queryParam.date?.[1]).format('YYYY-MM-DD')
+  //       : undefined,
+  //   }).then((res) => {
+  //     if (!res) {
+  //       throw new Error('下载文件失败');
+  //     }
+  //     downloadByData(res, `${Date.now()}.xlsx`);
+  //     ElMessage.success('导出文件成功');
+  //   });
+  // };
   const handleConfirmDeleteRow = (scope) => {
     safetyResponsibilityAdminDeleteIssuedObject(scope.row.id).then(() => {
       ElMessage.success('删除成功!');
@@ -317,7 +318,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 1 - 1
src/views/production-safety/risk-identification-and-control/construction-safety-manage/audit.vue

@@ -288,7 +288,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
     :deep(.el-form) {
       flex: 1;

+ 1 - 1
src/views/production-safety/risk-identification-and-control/construction-safety-manage/list.vue

@@ -363,7 +363,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
     :deep(.el-form) {
       flex: 1;

+ 40 - 3
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/add.vue

@@ -88,8 +88,8 @@
           </div>
 
           <div class="sub-group-box">
-            <div class="sub-label is-required-manual">环境当前浓度指标 (初始评估)</div>
-            <el-table :data="[formValue.space]" border class="density-table">
+            <div class="sub-label is-required-manual section-title-flex">环境当前浓度指标 (初始评估)</div>
+            <el-table :data="[formValue.space]" border class="density-table" style="margin-bottom: 20px">
               <el-table-column label="有毒有害物质 (toxicHazardous)">
                 <template #default="scope">
                   <el-form-item prop="space.toxicHazardous" :rules="r" label-width="0" class="m-0"
@@ -417,10 +417,33 @@
       <el-button type="primary" size="large" :loading="loading" @click="handleSave">提交</el-button>
     </footer>
   </div>
+  <el-dialog v-model="hotWorkDialogVisible" title="">
+    <div
+      v-html="
+        `备注1:
+    1.【重要】申请部门联络人手机号需与企业微信中登记的手机号一致,系統根据申请部门联络人手机号推送审批单及相关信息。
+    2.一级动火,由动火部门申请,须由院消防安全麦任人南批;二级动火,由动火都门申清,须由消防安全分管院领导南批;三级动火,由动火部门申请,须由消防安全管理部门领导南批。
+    3.申请动火时需提供动火地点具体位置的照片,否则不子以办理动火证。
+    4,一级动火区域为:一级危险点、油库、燃油试验室、燃气区域等高危场所;二级动火区域为:二级危险点、35KV变电站、高处作业场所、试验场所、仓库。堆场、待建区等;三级动火区域为:三级危险点、10KV交电站、空压机房、办公室、室外区域(除待建区外)
+    等。 备注2: 1.填写动火开始时间及截止时间,一级动火和二级动火有效期不应超过1天,三级动火有效期不应超过6天:
+    2.动火作业需提前三天开始申请;
+    3.申请部门完成申请后,将动火作业表打印纸质版本及动火申请材料放置于动火现场,消防值班人员将进行现场检查,现场若无紙质动火作业表及动火申请材料不予动火。
+    备注3: 1,电煌 气割,严格道守“十不烧”规程操作: 2.操作前检查动火人员的工具、电焊机、电源开关及线路是否良好;
+    3.注意安全用电,检查电线是否有乱拖乱拉现象,电源线是否架空扎车; 4.检查人员在动火期间不得离开现场,应当留下监护, 5.
+    动火结束后,督促动火人员清理现场,不得留下残渣; 6.现场配备灭火器: 7.现场专人看护, 8.清理周边易燃物:
+    9.现场动火人员持证上岗;`
+      "
+    ></div>
+    <template #footer>
+      <div class="dialog-footer">
+        <el-button type="primary" @click="handleCancel">我已阅读并确认</el-button>
+      </div>
+    </template>
+  </el-dialog>
 </template>
 
 <script lang="ts" setup>
-  import { ref, reactive, onMounted } from 'vue';
+  import { ref, reactive, onMounted, watch } from 'vue';
   import { useRouter } from 'vue-router';
   import { ElMessage } from 'element-plus';
   import UploadFiles from '@/components/UploadFiles/UploadFiles.vue';
@@ -435,6 +458,7 @@
   const loading = ref(false);
   const approvalOptions = ref<any[]>([]);
   const firstLevelDepts = ref<any[]>([]);
+  const hotWorkDialogVisible = ref(false);
   const cascaderRef = ref<any>(null);
   const cascaderProp = {
     expandTrigger: 'click',
@@ -667,6 +691,19 @@
       firstLevelDepts.value = formatDeptTree(res);
     });
   };
+  watch(
+    () => formValue.hazardOperationType,
+    (newVal: number) => {
+      if (newVal === 4 && sessionStorage.getItem('hazardOperationType') !== '4') {
+        hotWorkDialogVisible.value = true;
+      }
+    },
+  );
+
+  const handleCancel = () => {
+    hotWorkDialogVisible.value = false;
+    sessionStorage.setItem('hazardOperationType', '4');
+  };
 
   onMounted(async () => {
     await getDeptData();

+ 2 - 2
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/edit.vue

@@ -88,8 +88,8 @@
           </div>
 
           <div class="sub-group-box">
-            <div class="sub-label is-required-manual">环境当前浓度指标 (初始评估)</div>
-            <el-table :data="[formValue.space]" border class="density-table">
+            <div class="sub-label is-required-manual section-title-flex">环境当前浓度指标 (初始评估)</div>
+            <el-table :data="[formValue.space]" border class="density-table" style="margin-bottom: 20px">
               <el-table-column label="有毒有害物质 (toxicHazardous)">
                 <template #default="scope">
                   <el-form-item prop="space.toxicHazardous" :rules="r" label-width="0" class="m-0"

+ 1 - 1
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/list.vue

@@ -364,7 +364,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
     :deep(.el-form) {
       flex: 1;

+ 2 - 2
src/views/production-safety/risk-identification-and-control/hazard-approval-manage/view.vue

@@ -88,8 +88,8 @@
           </div>
 
           <div class="sub-group-box">
-            <div class="sub-label is-required-manual">环境当前浓度指标 (初始评估)</div>
-            <el-table :data="[formValue.space]" border class="density-table">
+            <div class="sub-label is-required-manual section-title-flex">环境当前浓度指标 (初始评估)</div>
+            <el-table :data="[formValue.space]" border class="density-table" style="margin-bottom: 20px">
               <el-table-column label="有毒有害物质 (toxicHazardous)">
                 <template #default="scope">
                   <el-form-item prop="space.toxicHazardous" :rules="r" label-width="0" class="m-0"

+ 1 - 1
src/views/production-safety/risk-identification-and-control/hazard-manage/create-plan.vue

@@ -309,7 +309,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 1 - 1
src/views/production-safety/risk-identification-and-control/hazard-manage/list.vue

@@ -273,7 +273,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 1 - 1
src/views/production-safety/risk-identification-and-control/labor-products-manage/list.vue

@@ -272,7 +272,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 1 - 1
src/views/production-safety/risk-identification-and-control/labor-products-requisition-manage/list.vue

@@ -272,7 +272,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 115 - 0
src/views/production-safety/risk-identification-and-control/risk-manage/_search-form .code-search

@@ -0,0 +1,115 @@
+# Query: .search-form 
+# Flags: RegExp
+# ContextLines: 1
+
+22 个结果 - 22 文件
+
+src/views/production-safety/implement-safety-duty/responsibility-agree-manage-dept.vue:
+  481    }
+  482:   .search-form {
+  483      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/responsibility-agree-manage.vue:
+  393    }
+  394:   .search-form {
+  395      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/review-responsibility-agree.vue:
+  236    }
+  237:   .search-form {
+  238      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/view-recipients.vue:
+  314    }
+  315:   .search-form {
+  316      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/non-public-area-responsibilities/list.vue:
+  294    }
+  295:   .search-form {
+  296      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/non-public-list-responsibilities/list.vue:
+  359    }
+  360:   .search-form {
+  361      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/public-area-responsibilities/list.vue:
+  293    }
+  294:   .search-form {
+  295      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/public-list-responsibilities/list.vue:
+  361    }
+  362:   .search-form {
+  363      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/list.vue:
+  362    }
+  363:   .search-form {
+  364      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/responsibility-notice-manage-admin/notice-view.vue:
+  315    }
+  316:   .search-form {
+  317      min-width: 800px;
+
+src/views/production-safety/implement-safety-duty/responsibility-notice-manage-dept/list.vue:
+  219    }
+  220:   .search-form {
+  221      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/construction-safety-manage/audit.vue:
+  285    }
+  286:   .search-form {
+  287      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/construction-safety-manage/list.vue:
+  360  
+  361:   .search-form {
+  362      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/hazard-approval-manage/audit.vue:
+  284    }
+  285:   .search-form {
+  286      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/hazard-approval-manage/list.vue:
+  361  
+  362:   .search-form {
+  363      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/hazard-manage/create-plan.vue:
+  306    }
+  307:   .search-form {
+  308      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/hazard-manage/list.vue:
+  270    }
+  271:   .search-form {
+  272      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/labor-products-manage/list.vue:
+  269    }
+  270:   .search-form {
+  271      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/labor-products-requisition-manage/list.vue:
+  269    }
+  270:   .search-form {
+  271      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/risk-manage/list.vue:
+  269    }
+  270:   .search-form {
+  271      min-width: 800px;
+
+src/views/production-safety/risk-identification-and-control/special-equipment-manage/list.vue:
+  269    }
+  270:   .search-form {
+  271      min-width: 800px;
+
+src/views/system/dictionary/dictionary.vue:
+  173      margin: 20px;
+  174:     .search-form {
+  175        margin-bottom: 16px;

+ 1 - 1
src/views/production-safety/risk-identification-and-control/risk-manage/list.vue

@@ -272,7 +272,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }
 

+ 1 - 1
src/views/production-safety/risk-identification-and-control/special-equipment-manage/list.vue

@@ -272,7 +272,7 @@
     display: flex;
 
     justify-content: space-between;
-    align-items: center;
+    align-items: flex-end;
     margin-bottom: 20px;
   }