Explorar o código

修复预防检查bug

chauncey hai 11 meses
pai
achega
4d131f8fa9

+ 1 - 1
src/api/disaster-control/index.ts

@@ -118,7 +118,7 @@ export const getReportTaskList = (query: QueryPageRequest<LossReportReportTaskQu
 
 export const getLossRecordTableData = (query: LossRecordTableQuery) => {
   return http.request<LossRecordTableResponse[]>({
-    url: '/disasterHandle/queryLossRecordPage',
+    url: '/disasterHandle/queryLossRecord',
     method: 'post',
     data: query,
   });

+ 20 - 0
src/router/full-routes.ts

@@ -381,6 +381,26 @@ export const disasterPreventionRoute = {
           path: 'loss-report',
           redirect: '',
         },
+        {
+          component: '/disaster/disaster-control/PageLossReportItem',
+          id: 1043,
+          meta: {
+            activeMenu: '/disaster-prevention/disaster-control/loss-report',
+            alwaysShow: false,
+            frameSrc: '',
+            hidden: false,
+            icon: '',
+            isFrame: 0,
+            isRoot: false,
+            noCache: false,
+            query: '',
+            title: '创建损失记录',
+          },
+          name: 'disaster-control-loss-report-item',
+          parentId: 1027,
+          path: 'loss-report-item/:id',
+          redirect: '',
+        },
         {
           component: '/disaster/disaster-control/PageDisposalRectification',
           id: 1040,

+ 5 - 2
src/styles/common.scss

@@ -15,7 +15,6 @@
   --el-table-header-text-color: rgb(31, 34, 37) !important;
 }
 
-
 .el-table thead {
   background-color: rgb(31, 34, 37);
 }
@@ -28,4 +27,8 @@
   .el-button {
     font-weight: 400;
   }
-}
+}
+
+.el-button--primary {
+  --el-button-bg-color: #1890ff !important;
+}

+ 2 - 2
src/types/disaster-control/index.ts

@@ -41,7 +41,6 @@ export interface disasterReportTaskInfoListResponse extends BasicResponse {
   status: number;
   reportPrincipalInfoList: { reportPrincipalId: number; reportPrincipalName: string; reportPrincipalStaffNo: string }[];
   userGroupList: string;
-  deptName: string;
 }
 
 export interface disasterReportRecordDetailListResponse {
@@ -69,7 +68,8 @@ export interface LossRecordTableResponse {
 
 export interface LossReportReportTaskResponse extends BasicResponse {
   handleTaskId: number;
-  handleTaskName: string;
+  taskName: string;
+  isReportPrincipal: boolean; //是否上报责任人
 }
 
 export interface DisposalManagementCreateQuery {

+ 28 - 0
src/views/disaster/disaster-control/PageLossReportItem.vue

@@ -0,0 +1,28 @@
+<template>
+  <div class="disaster-precaution-container">
+    <header class="disaster-precaution-container__header">
+      <img :src="BackIcon" alt="back" class="back-icon" @click="router.back()" />
+      <span class="disaster-precaution-container__title">创建损失记录</span>
+    </header>
+    <main class="disaster-precaution-container__main"> </main>
+    <footer class="disaster-precaution-container__footer">
+      <el-button @click="router.back()">取消</el-button>
+      <el-button type="primary">提交,并创建下一条</el-button>
+      <el-button type="primary">提交</el-button>
+    </footer>
+  </div>
+</template>
+
+<script lang="ts" setup>
+  import { useRoute, useRouter } from 'vue-router';
+  import BackIcon from 'assets/svg/back.svg';
+  const route = useRoute();
+  const router = useRouter();
+  const taskName = route.query.taskName;
+  const id = Number(route.params.id);
+</script>
+
+<style lang="scss" scoped>
+  @use '../style/disaster.scss' as *;
+  @use './src/style/common.scss' as *;
+</style>

+ 9 - 7
src/views/disaster/disaster-control/src/components/LossRecord.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="disaster-precaution">
     <header class="disaster-precaution__header">
-      <el-button type="primary" class="disaster-precaution__header--button" :icon="Plus"> 创建灾害损失记录 </el-button>
+      <!-- <el-button type="primary" class="disaster-precaution__header--button" :icon="Plus"> 创建灾害损失记录 </el-button> -->
       <Search
         :searchConfig="LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG"
         :searchData="searchData"
@@ -107,7 +107,7 @@
     FIX_STATUS,
   } from '../constant';
   import type { DisposalManagementCollapseListResponse, LossRecordTableResponse } from '@/types/disaster-control';
-  import { getDisasterControlCollapseData, getLossRecordTableData } from '@/api/disaster-control';
+  import { getReportTaskList, getLossRecordTableData } from '@/api/disaster-control';
   import {
     LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG,
     LOSS_RECORD_TABLE_COLUMNS,
@@ -138,21 +138,23 @@
   const collapseList = ref<DisposalManagementCollapseListResponse<LossRecordTableResponse>[]>([]);
   const getDisposalData = async () => {
     collapseLoading.value = true;
-    const res = await getDisasterControlCollapseData({
+    const res = await getReportTaskList({
       pageNumber: currentPage.value,
       pageSize: pageSize.value,
       queryParam: {},
     });
     collapseList.value = res.records.map((item) => ({
-      ...item,
+      id: item.handleTaskId,
+      taskName: item.taskName,
+      updatedAt: item.dueCompleteTime,
       tableData: [
         {
-          handleTaskId: item.id,
+          handleTaskId: item.handleTaskId,
           disasterReportRecordDetailList: [],
         },
       ],
     }));
-    taskIds.value = res.records.map((item) => item.id);
+    taskIds.value = res.records.map((item) => item.handleTaskId);
     total.value = res.totalRow;
     collapseLoading.value = false;
   };
@@ -194,7 +196,7 @@
   @use '@/views/disaster/style/disaster.scss' as *;
   @use '../style/collapse.scss' as *;
   @use '../style/common.scss' as *;
-  $collapse-container-height: calc(60vh - 50px);
+  $collapse-container-height: calc(68vh - 43px);
   .collapse-container {
     height: $collapse-container-height;
     max-height: $collapse-container-height;

+ 46 - 3
src/views/disaster/disaster-control/src/components/ReportTask.vue

@@ -20,8 +20,12 @@
       <template #action="scope">
         <!-- 待上报任务阶段 -->
         <div class="action-container" v-if="scope.row.taskStage === TASK_STAGE.TO_BE_REPORTED">
-          <ActionButton text="去上报" />
-          <ActionButton text="添加上报人" />
+          <ActionButton
+            text="去上报"
+            v-if="isOverdue(scope.row.dueCompleteTime)"
+            @click="handleReport(scope.row.handleTaskId, scope.row.taskName)"
+          />
+          <ActionButton text="添加上报人" v-if="scope.row.isReportPrincipal" />
         </div>
         <!-- 已上报任务阶段 -->
         <div
@@ -41,7 +45,7 @@
 </template>
 
 <script setup lang="ts">
-  import { ref, reactive, onMounted } from 'vue';
+  import { ref, reactive, onMounted, onUnmounted } from 'vue';
   import Search from '@/views/disaster/components/Search.vue';
   import BasicTable from '@/components/BasicTable.vue';
   import ActionButton from '@/components/ActionButton.vue';
@@ -56,7 +60,9 @@
   import type { QueryPageRequest } from '@/types/disaster';
   import { TASK_STAGE } from '../constant';
   import { getTaskStage } from '../util';
+  import { useRouter } from 'vue-router';
 
+  const router = useRouter();
   const searchData = reactive({
     taskStage: '',
   });
@@ -88,13 +94,50 @@
     getTableData();
   };
   const handleSearch = () => {
+    ReportTaskListQuery.queryParam = {};
     if (searchData.taskStage !== '') {
       ReportTaskListQuery.queryParam.taskStage = searchData.taskStage;
     }
+    if (Object.keys(ReportTaskListQuery.queryParam).length > 0) {
+      pagination.pageNumber = 1;
+      ReportTaskListQuery.pageNumber = 1;
+    }
     getTableData();
   };
+  const handleReport = (handleTaskId: number, taskName: string) => {
+    router.push({
+      name: 'disaster-control-loss-report-item',
+      params: {
+        id: handleTaskId,
+      },
+      query: { taskName },
+    });
+  };
+  // 添加刷新时间变量,用于触发视图更新
+  const refreshTime = ref(Date.now());
+  let refreshTimer: number | null = null;
+  // 判断是否超过应完成时间
+  const isOverdue = (dueCompleteTime: string) => {
+    if (!dueCompleteTime) return false;
+
+    const dueTime = new Date(dueCompleteTime).getTime();
+    const currentTime = refreshTime.value;
+
+    return currentTime < dueTime;
+  };
   onMounted(() => {
     getTableData();
+
+    // 设置定时器,每秒更新一次时间
+    refreshTimer = window.setInterval(() => {
+      refreshTime.value = Date.now();
+    }, 1000);
+  });
+  onUnmounted(() => {
+    if (refreshTimer !== null) {
+      clearInterval(refreshTimer);
+      refreshTimer = null;
+    }
   });
 </script>
 

+ 1 - 1
src/views/disaster/disaster-control/src/config/table.ts

@@ -85,7 +85,7 @@ export const LOSS_REPORT_REPORT_TASK_TABLE_COLUMNS: TableColumnProps[] = [
   BASIC_TABLE_COLUMNS.INDEX,
   {
     label: '任务名称',
-    prop: 'handleTaskName',
+    prop: 'taskName',
     align: 'center',
   },
   BASIC_TABLE_COLUMNS.DEPT_NAME,

+ 1 - 1
src/views/disaster/disaster-control/src/constant.ts

@@ -20,7 +20,7 @@ export enum FIX_STATUS {
 }
 
 export enum PRIORITY_STATUS {
-  NORMAL = 1,
+  NORMAL = 0,
   URGENT,
 }
 

+ 5 - 2
src/views/disaster/disaster-precaution/PageTaskExecution.vue

@@ -184,12 +184,15 @@
     });
   };
   const handleWithdrawTask = async (id: number, state: number) => {
+    let message;
     if (state === TASK_STAGE.PENDING_APPROVAL) {
       await withdrawTaskInspect(id);
+      message = '已成功撤回检查';
     } else if (state === TASK_STAGE.COMPLETED) {
       await withdrawTaskApproval(id);
+      message = '已成功撤回审批';
     }
-    ElMessage.success('已取消发布');
+    ElMessage.success(message);
     getTableData();
   };
   const getTableData = async () => {
@@ -212,7 +215,7 @@
   onMounted(() => {
     getTableData();
 
-    // 设置定时器,每分钟更新一次时间
+    // 设置定时器,每更新一次时间
     refreshTimer = window.setInterval(() => {
       refreshTime.value = Date.now();
     }, 1000);

+ 1 - 1
src/views/disaster/disaster-precaution/src/components/ActualSituation.vue

@@ -3,7 +3,7 @@
     v-model="textareaModel"
     v-bind="$attrs"
     maxlength="200"
-    placeholder="必填,请输入实际情况,1-200字"
+    placeholder="不符合时必填,请输入实际情况,1-200字"
     type="textarea"
     :rows="3"
   />

+ 2 - 2
src/views/disaster/disaster-precaution/src/components/TemplateTableMerge.vue

@@ -35,7 +35,7 @@
                 <div class="execute-person">
                   <span>检查人员:{{ resultData.executeName }}</span>
                   <span>时间:{{ resultData.inspectTime }}</span>
-                  <div class="execute-images" v-if="resultData.executeImages">
+                  <div class="execute-images" v-if="resultData.executeImages.length > 0">
                     <el-tooltip content="图片查看" effect="light">
                       <el-image
                         :src="ImageIcon"
@@ -71,7 +71,7 @@
                 <div class="execute-person">
                   <span>审批人员:{{ opinionData.executeName }}</span>
                   <span>时间:{{ opinionData.inspectTime }}</span>
-                  <div class="execute-images" v-if="opinionData.executeImages">
+                  <div class="execute-images" v-if="opinionData.executeImages.length > 0">
                     <el-tooltip content="图片查看" effect="light">
                       <el-image
                         :src="ImageIcon"