chauncey 10 месяцев назад
Родитель
Сommit
50a9e2064c
23 измененных файлов с 200 добавлено и 132 удалено
  1. 1 1
      src/router/full-routes.ts
  2. 1 0
      src/styles/custom-component.scss
  3. 7 3
      src/types/disaster-control/index.ts
  4. 2 1
      src/views/disaster/components/GroupSelect.vue
  5. 6 10
      src/views/disaster/components/UploadFiles.vue
  6. 1 1
      src/views/disaster/disaster-control/PageDisposalManagementItem.vue
  7. 1 1
      src/views/disaster/disaster-control/PageDisposalManagementTaskItem.vue
  8. 2 4
      src/views/disaster/disaster-control/PageDisposalRectification.vue
  9. 1 2
      src/views/disaster/disaster-control/PageLossReportItem.vue
  10. 3 2
      src/views/disaster/disaster-control/PageViewDisposalRectification.vue
  11. 6 5
      src/views/disaster/disaster-control/src/components/CollapseItem.vue
  12. 10 9
      src/views/disaster/disaster-control/src/components/DamagedList.vue
  13. 1 1
      src/views/disaster/disaster-control/src/components/DisasterInfo.vue
  14. 1 1
      src/views/disaster/disaster-control/src/components/EditLossReportItem.vue
  15. 23 11
      src/views/disaster/disaster-control/src/components/LossRecord.vue
  16. 8 1
      src/views/disaster/disaster-control/src/components/Rectification.vue
  17. 16 3
      src/views/disaster/disaster-control/src/components/ReportTask.vue
  18. 5 11
      src/views/disaster/disaster-control/src/components/UploadImages.vue
  19. 68 58
      src/views/disaster/disaster-control/src/components/ViewDisposalControlItem.vue
  20. 22 3
      src/views/disaster/disaster-control/src/components/ViewDisposalControlTaskItem.vue
  21. 10 2
      src/views/disaster/disaster-control/src/components/ViewLossReportItem.vue
  22. 1 1
      src/views/disaster/disaster-control/src/config/table.ts
  23. 4 1
      src/views/disaster/disaster-control/src/style/view-item.scss

+ 1 - 1
src/router/full-routes.ts

@@ -395,7 +395,7 @@ export const disasterPreventionRoute = {
             isRoot: false,
             noCache: false,
             query: '',
-            title: '创建损失记录',
+            title: '损失记录明细',
           },
           name: 'disaster-control-loss-report-item',
           parentId: 1027,

+ 1 - 0
src/styles/custom-component.scss

@@ -9,6 +9,7 @@
 }
 
 .customDialog--pushObject {
+  height: 50vh;
   max-height: 60vh;
   border-radius: 8px !important;
   overflow-y: hidden;

+ 7 - 3
src/types/disaster-control/index.ts

@@ -27,6 +27,7 @@ export interface LossRecordTableQuery {
   fixStatus?: string | null;
   isLoss?: number;
   fixerId?: number;
+  reporterId?: number;
 }
 
 interface BasicResponse {
@@ -41,6 +42,7 @@ export interface DisposalManagementListResponse {
   taskName: string;
   updatedAt: string;
   dueCompleteTime: string;
+  deptId: number;
 }
 
 export interface DisposalManagementCollapseListResponse<T> extends DisposalManagementListResponse {
@@ -76,6 +78,7 @@ export interface disasterReportRecordDetailListResponse {
   description: string;
   remark: string;
   fixTaskId: number;
+  responsibleDeptId: number;
 }
 
 export interface DisposalManagementTableResponse {
@@ -95,6 +98,7 @@ export interface LossReportReportTaskResponse extends BasicResponse {
   isReportPrincipal: boolean; //是否上报责任人
   updatedAt: string;
   reporterList: string; //上报责任人列表
+  deptId: number;
 }
 
 export interface DisposalManagementCreateQuery {
@@ -147,6 +151,7 @@ export interface LossReportItemFormData
     | 'fixerList'
     | 'isFixPrincipal'
     | 'fixTaskId'
+    | 'responsibleDeptId'
   > {
   reportTaskName: string;
   responsibleDeptId: number | null;
@@ -207,9 +212,8 @@ export interface DisposalRectificationCreateQuery extends DisposalRectificationF
 
 export interface DisasterLossDetailQuery {
   handleTaskId: number;
-  reporterId?: number;
-  fixerId?: number;
-  reportRecordId?: number;
+  userIdByLossFix?: number;
+  reportDeptId?: number;
 }
 
 export interface LossRecordListDetail {

+ 2 - 1
src/views/disaster/components/GroupSelect.vue

@@ -13,6 +13,7 @@
     <span @click="showGroupInfo" v-if="selectedGroups.length > 0" class="group-info-span"> 人员详情 </span>
 
     <el-dialog
+      width="500"
       v-model="groupInfo"
       title="人员详情"
       align-center
@@ -87,7 +88,7 @@
     left: 0;
     bottom: -30px;
     cursor: pointer;
-    font-size: 10px;
+    font-size: 14px;
     color: $primary-color;
   }
 </style>

+ 6 - 10
src/views/disaster/components/UploadFiles.vue

@@ -192,15 +192,11 @@
   };
 
   const removeFile = (id: number) => {
-    msgConfirm('确定删除该文件吗?', '提示', {
-      type: 'warning',
-    }).then(() => {
-      const index = fileList.value.findIndex((item) => item.fileId === id);
-      if (index !== -1) {
-        fileList.value.splice(index, 1);
-      }
-      ElMessage.success('文件删除成功');
-    });
+    const index = fileList.value.findIndex((item) => item.fileId === id);
+    if (index !== -1) {
+      fileList.value.splice(index, 1);
+    }
+    ElMessage.success('文件删除成功');
   };
 
   const removeAllFiles = () => {
@@ -348,7 +344,7 @@
   .file-item {
     @include flex-center;
     justify-content: space-between;
-    width: 200px;
+    gap: 10px;
     height: 32px;
     border: 1px solid #e5e7eb;
     border-radius: 6px;

+ 1 - 1
src/views/disaster/disaster-control/PageDisposalManagementItem.vue

@@ -40,7 +40,7 @@
     } else if (operate === 'edit') {
       return `编辑${fixedTitle}`;
     }
-    return `查看${fixedTitle}`;
+    return '灾害损失记录明细';
   });
   const dynamicComponent = computed(() => {
     if (operate === 'create') {

+ 1 - 1
src/views/disaster/disaster-control/PageDisposalManagementTaskItem.vue

@@ -48,7 +48,7 @@
     if (operate === 'create') {
       return `创建${fixedTitle}`;
     }
-    return `查看${fixedTitle}`;
+    return '灾害损失记录明细';
   });
   const dynamicComponent = computed(() => {
     if (operate === 'create') {

+ 2 - 4
src/views/disaster/disaster-control/PageDisposalRectification.vue

@@ -39,13 +39,11 @@
               >
                 <template #view-operation>
                   <el-tooltip
-                    :content="item.tableData[0].disasterReportRecordDetailList.length ? '' : '任务无损失'"
+                    :content="item.tableData[0].disasterReportRecordDetailList.length ? '' : '暂无损失记录'"
                     placement="top"
                     effect="light"
                     :popper-class="
-                      item.tableData[0].disasterReportRecordDetailList.length
-                        ? 'custom-tooltip--opacity0'
-                        : ''
+                      item.tableData[0].disasterReportRecordDetailList.length ? 'custom-tooltip--opacity0' : ''
                     "
                   >
                     <img

+ 1 - 2
src/views/disaster/disaster-control/PageLossReportItem.vue

@@ -36,7 +36,6 @@
   const reportTaskId = Number(route.params.id);
   const id = Number(route.query.id);
   const taskName = String(route.query.taskName);
-  const viewType = String(route.query.type);
   const dynamicComponentRef = ref();
   const operate = route.query.operation;
   const headerTitle = computed(() => {
@@ -46,7 +45,7 @@
     } else if (operate === 'edit') {
       return `编辑${fixedTitle}`;
     } else {
-      return `查看${fixedTitle}`;
+      return '灾害损失记录明细';
     }
   });
   const exportLossDetail = async () => {

+ 3 - 2
src/views/disaster/disaster-control/PageViewDisposalRectification.vue

@@ -13,6 +13,7 @@
           :name="`上报单位:${reportTask.reportDeptName}`"
           :isActive="activeId === reportTask.reportDeptId"
           @toggle="handleCollapseToggle(reportTask.reportDeptId)"
+          opacityIcon
         >
           <template #view-operation>
             <div class="rectification-info">
@@ -115,7 +116,7 @@
       await exportLossRecord(
         {
           ...params,
-          reportRecordId: activeReportRecordId.value,
+          userIdByLossFix: activeReportRecordId.value,
         },
         name,
       );
@@ -171,7 +172,7 @@
   onMounted(async () => {
     await getDisasterLossDetailList({
       handleTaskId,
-      fixerId,
+      userIdByLossFix:fixerId,
     });
     if (!disasterLossDetailList.value?.reportTaskList.length) return;
     reportTaskList.value = disasterLossDetailList.value?.reportTaskList;

+ 6 - 5
src/views/disaster/disaster-control/src/components/CollapseItem.vue

@@ -2,7 +2,7 @@
   <div class="collapse-item">
     <div class="collapse-item__header" @click="toggle">
       <div class="collapse-item__header--left">
-        <el-icon class="collapse-item__icon">
+        <el-icon class="collapse-item__icon" v-if="!opacityIcon">
           <component :is="isActive ? ArrowUp : ArrowDown" />
         </el-icon>
         <span style="font-weight: 550">{{ name }}</span>
@@ -24,6 +24,7 @@
   defineProps<{
     name: string;
     isActive?: boolean;
+    opacityIcon?: boolean;
   }>();
 
   const emit = defineEmits(['toggle']);
@@ -37,15 +38,15 @@
   .collapse-item {
     width: 100%;
     background: #f2f8ff;
-    padding: 10px;
     border-radius: 4px;
     margin-bottom: 8px;
+    padding-bottom: 20px;
     &__header {
       display: flex;
       align-items: center;
       justify-content: space-between;
-      padding: 10px 14px;
-      font-size: 20px;
+      padding: 20px 25px 0 25px;
+      font-size: 18px;
       color: rgba($text-color, 0.85);
       cursor: pointer;
       &--left {
@@ -54,7 +55,7 @@
       }
     }
     &__main {
-      padding-top: 20px;
+      padding: 20px 10px 0 10px;
     }
   }
 </style>

+ 10 - 9
src/views/disaster/disaster-control/src/components/DamagedList.vue

@@ -2,15 +2,16 @@
   <div class="damaged-list">
     <header class="header"> 受灾物品 </header>
     <nav class="nav">
-      <div
-        class="nav-item"
-        v-for="damagedItem in damagedList"
-        :key="damagedItem.fixTaskId"
-        :class="{ active: activeTaskId === damagedItem.fixTaskId }"
-        @click="handleActiveTask(damagedItem.fixTaskId, damagedItem.id)"
-      >
-        <span class="nav-item__name">{{ damagedItem.affectedItems }}</span>
-      </div>
+      <template v-for="damagedItem in damagedList" :key="damagedItem.fixTaskId">
+        <div
+          v-if="damagedItem.isLoss"
+          class="nav-item"
+          :class="{ active: activeTaskId === damagedItem.fixTaskId }"
+          @click="handleActiveTask(damagedItem.fixTaskId, damagedItem.id)"
+        >
+          <span class="nav-item__name">{{ damagedItem.affectedItems }}</span>
+        </div>
+      </template>
     </nav>
   </div>
 </template>

+ 1 - 1
src/views/disaster/disaster-control/src/components/DisasterInfo.vue

@@ -119,7 +119,7 @@
               :preview-src-list="JSON.parse(LossReportItemFormData?.images)"
               show-progress
               :initial-index="index"
-              fit="contain"
+              fit="cover"
             />
           </div>
         </div>

+ 1 - 1
src/views/disaster/disaster-control/src/components/EditLossReportItem.vue

@@ -183,7 +183,7 @@
       if (key in res) {
         ruleFormData[key] = res[key];
         ruleFormData.userGroupList = JSON.parse(res.userGroupList) || [];
-        ruleFormData.createdBy = userInfo[0].realname;
+        ruleFormData.createdBy = userInfo[0]?.realname || '';
         ruleFormData.images = JSON.parse(res.images) || [];
       }
     }

+ 23 - 11
src/views/disaster/disaster-control/src/components/LossRecord.vue

@@ -22,7 +22,7 @@
     </header>
     <section class="disaster-precaution__section">
       <div class="collapse-container" v-loading="collapseLoading">
-        <div class="empty-container" v-if="collapseList.length === 0">
+        <div class="empty-container" v-if="collapseList.length === 0 || isEmpty">
           <img :src="Empty" />
           <span>暂无数据</span>
         </div>
@@ -36,7 +36,7 @@
           >
             <template #view-operation>
               <el-tooltip
-                :content="item.tableData[0].disasterReportRecordDetailList.length ? '' : '任务无损失'"
+                :content="item.tableData[0].disasterReportRecordDetailList.length ? '' : '暂无损失记录'"
                 placement="top"
                 effect="light"
                 :popper-class="
@@ -51,7 +51,7 @@
                   ]"
                   @click.stop="
                     item.tableData[0].disasterReportRecordDetailList.length &&
-                      handleView(item.handleTaskId, item.taskName, 'task')
+                      handleView(item.handleTaskId, item.taskName, item.deptId)
                   "
                 />
               </el-tooltip>
@@ -109,19 +109,22 @@
                       />
                       <ActionButton
                         text="查看"
-                        @click="handleView(item.handleTaskId, item.taskName, 'item', scope.row.fixTaskId)"
+                        @click="handleView(item.handleTaskId, item.taskName, item.deptId, scope.row.fixTaskId)"
                       />
                       <ActionButton
                         text="删除"
                         v-if="scope.row.fixStatus === FIX_STATUS.TO_BE_RECTIFIED"
-                        @click="handleDelete(scope.row.id)"
+                        :popconfirm="{
+                          title: '确定删除吗?',
+                        }"
+                        @confirm="handleDelete(scope.row.id)"
                       />
                     </div>
                     <div class="action-container" v-else>
                       <ActionButton
                         text="查看"
                         v-if="scope.row.fixStatus === FIX_STATUS.TEMPORARY_CLOSED"
-                        @click="handleView(item.handleTaskId, item.taskName, 'item', scope.row.fixTaskId)"
+                        @click="handleView(item.handleTaskId, item.taskName, item.deptId, scope.row.fixTaskId)"
                       />
                       <ActionButton
                         text="编辑"
@@ -130,7 +133,10 @@
                       />
                       <ActionButton
                         text="删除"
-                        @click="handleDelete(scope.row.id)"
+                        :popconfirm="{
+                          title: '确定删除吗?',
+                        }"
+                        @confirm="handleDelete(scope.row.id)"
                         v-if="scope.row.fixStatus !== FIX_STATUS.TEMPORARY_CLOSED"
                       />
                     </div>
@@ -159,7 +165,7 @@
 
 <script lang="ts" setup>
   import { useRouter } from 'vue-router';
-  import { ref, reactive, onMounted, onUnmounted } from 'vue';
+  import { ref, reactive, onMounted, onUnmounted, computed } from 'vue';
   import { Plus } from '@element-plus/icons-vue';
   import { ElMessage } from 'element-plus';
   import Search from '@/views/disaster/components/Search.vue';
@@ -168,7 +174,7 @@
   import CollapseItem from './CollapseItem.vue';
   import useTableConfig from '@/hooks/useTableConfigHook';
   import { useDisasterControlHook } from '../hook';
-  import { useDeptInfoHook } from '@/views/disaster/hooks';
+  import { useDeptInfoHook, useUserInfoHook } from '@/views/disaster/hooks';
   import { getfixStatus, isToolTip } from '../util';
   import type { DisposalManagementCollapseListResponse, LossRecordTableResponse } from '@/types/disaster-control';
   import { getReportTaskList, getLossRecordTableData, deleteLossRecord } from '@/api/disaster-control';
@@ -183,6 +189,7 @@
 
   const { getPriority, getPriorityDict } = useDisasterControlHook();
   const { getFirstLevelDepts, firstLevelDepts } = useDeptInfoHook();
+  const { id: reporterId } = useUserInfoHook();
 
   const router = useRouter();
   const currentPage = ref(1);
@@ -208,6 +215,9 @@
 
   const taskIds = ref<number[]>([]);
   const collapseList = ref<DisposalManagementCollapseListResponse<LossRecordTableResponse>[]>([]);
+  const isEmpty = computed(() => {
+    return collapseList.value.every((item) => item.tableData[0].disasterReportRecordDetailList.length === 0);
+  });
   const handleCollapseToggle = (itemId: number) => {
     if (activeId.value === itemId) {
       activeId.value = null;
@@ -228,6 +238,7 @@
       taskName: item.taskName,
       updatedAt: item.updatedAt,
       dueCompleteTime: item.dueCompleteTime,
+      deptId: item.deptId,
       tableData: [
         {
           handleTaskId: item.handleTaskId,
@@ -249,6 +260,7 @@
     tableConfig.loading = true;
     const res = await getLossRecordTableData({
       handleTaskIds: taskIds.value,
+      reporterId,
       ...searchData,
     });
     collapseList.value.forEach((item) => {
@@ -294,11 +306,11 @@
     });
   };
 
-  const handleView = (id: number, taskName: string, type: 'task' | 'item', fixTaskId?: number) => {
+  const handleView = (id: number, taskName: string, deptId: number, fixTaskId?: number) => {
     router.push({
       name: defaultName,
       params: { id },
-      query: { taskName, fixTaskId, type },
+      query: { taskName, fixTaskId, deptId },
     });
   };
 

+ 8 - 1
src/views/disaster/disaster-control/src/components/Rectification.vue

@@ -55,7 +55,7 @@
               :preview-src-list="JSON.parse(scope.row.fixImages)"
               :initial-index="0"
               show-progress
-              fit="contain"
+              fit="cover"
               preview-teleported
             />
             <span class="image-count"> 共{{ JSON.parse(scope.row.fixImages).length }}张 </span>
@@ -152,6 +152,11 @@
     &--title {
       display: flex;
       gap: 100px;
+      font-size: 14px;
+      font-weight: 0;
+      p {
+        color: rgba($text-color, 0.85);
+      }
       span {
         color: rgba($text-color, 0.65);
       }
@@ -168,6 +173,8 @@
   .el-image {
     display: block !important;
     position: relative;
+    width: 100%;
+    height: 100px;
   }
   .image-count {
     position: absolute;

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

@@ -19,7 +19,7 @@
       </template>
       <template #action="scope">
         <!-- 待上报任务阶段 -->
-        <div class="action-container" v-if="scope.row.taskStage !== TASK_STAGE.OVERDUE">
+        <div class="action-container" v-if="scope.row.taskStage === TASK_STAGE.TO_BE_REPORTED">
           <ActionButton
             text="去上报"
             v-if="isOverdue(scope.row.dueCompleteTime)"
@@ -31,6 +31,19 @@
             @click="handleAddReporter(scope.row.id, scope.row.reporterList)"
           />
         </div>
+        <div
+          class="action-container"
+          v-else-if="
+            scope.row.taskStage === TASK_STAGE.REPORTED_LOSS || scope.row.taskStage === TASK_STAGE.REPORTED_NO_LOSS
+          "
+        >
+          <ActionButton
+            text="去上报"
+            v-if="isOverdue(scope.row.dueCompleteTime)"
+            @click="handleReport(scope.row.id, scope.row.taskName)"
+          />
+          <ActionButton text="查看记录" @click="handleView(scope.row.handleTaskId, scope.row.taskName, scope.row.deptId)" />
+        </div>
         <div class="action-container" v-else>
           <span>--</span>
         </div>
@@ -120,11 +133,11 @@
       query: { taskName, operation: 'create' },
     });
   };
-  const handleView = (id: number, taskName: string, type: 'task' | 'item') => {
+  const handleView = (id: number, taskName: string, deptId: number) => {
     router.push({
       name: defaultName,
       params: { id },
-      query: { taskName, type },
+      query: { taskName, deptId },
     });
   };
   const userInfo = ref(false);

+ 5 - 11
src/views/disaster/disaster-control/src/components/UploadImages.vue

@@ -176,17 +176,11 @@
   };
 
   const removeImage = (index: number) => {
-    ElMessageBox.confirm('确定删除该图片吗?', '提示', {
-      confirmButtonText: '确定',
-      cancelButtonText: '取消',
-      customClass: 'customMessageBox--warning',
-    }).then(() => {
-      // 释放对象URL以避免内存泄漏
-      URL.revokeObjectURL(uploadedImages[index].url);
-      uploadedImages.splice(index, 1);
-      ElMessage.success('删除成功');
-      emitChange();
-    });
+    // 释放对象URL以避免内存泄漏
+    URL.revokeObjectURL(uploadedImages[index].url);
+    uploadedImages.splice(index, 1);
+    ElMessage.success('删除成功');
+    emitChange();
   };
 
   const removeAllImages = () => {

+ 68 - 58
src/views/disaster/disaster-control/src/components/ViewDisposalControlItem.vue

@@ -1,54 +1,57 @@
 <template>
-  <div class="info-container">
-    <template v-for="reportTask in disasterLossDetailList?.reportTaskList" :key="reportTask.reportDeptId">
-      <CollapseItem
-        v-if="reportTask.lossRecordList.length"
-        :name="`上报单位:${reportTask.reportDeptName}`"
-        :isActive="activeId === reportTask.reportDeptId"
-        @toggle="handleCollapseToggle(reportTask.reportDeptId)"
-      >
-        <template #view-operation>
-          <div class="rectification-info">
-            <span class="num">{{ reportTask.lossRecordCount }}</span>
-            <span>条,整改完成{{ reportTask.fixFinishCount }}条</span>
-          </div>
-        </template>
-        <template #right-header>
-          <span class="collapse-item__header--right">
-            {{ activeId === reportTask.reportDeptId ? '收起' : '展开' }}
-          </span>
-        </template>
-        <template #main-table>
-          <div class="rectification-table">
-            <section class="damaged-list-container">
-              <DamagedList
-                :damagedList="reportTask.lossRecordList"
-                :active-id="activeTaskId || reportTask.lossRecordList[0].fixTaskId"
-                @update:activeId="handleActiveTask"
-              />
-            </section>
-            <section class="disaster-info-container">
-              <DisasterInfo :LossReportItemFormData="lossRecordListInfo" rectification v-if="lossRecordListInfo" />
-              <Rectification
-                v-if="lossRecordListInfo?.fixRecordList"
-                :rectification-list="lossRecordListInfo?.fixRecordList"
-                :rectification-dept-name="lossRecordListInfo?.responsibleDeptName"
-                :rectification-responsible-user-list="rectificationResponsibleUserList"
-                :rectification-priority="lossRecordListInfo?.priority"
-              />
-            </section>
-          </div>
-        </template>
-      </CollapseItem>
-      <NoCollapseItem v-else :name="`上报单位:${reportTask.reportDeptName}`">
-        <template #view-operation>
-          <div class="rectification-info">
-            <span class="num">{{ reportTask.lossRecordCount }}</span>
-            <span class="info-text">条,上报时间:{{ reportTask.reportTime }}</span>
-          </div>
-        </template>
-      </NoCollapseItem>
-    </template>
+  <div class="empty-container" v-if="!reportTaskListInfo">
+    <img :src="Empty" alt="暂无数据" />
+    <span>暂无上报数据</span>
+  </div>
+  <div class="info-container" v-else>
+    <CollapseItem
+      v-if="reportTaskListInfo.lossRecordList.length"
+      :name="`上报单位:${reportTaskListInfo.reportDeptName}`"
+      :isActive="activeId === reportTaskListInfo.reportDeptId"
+      opacityIcon
+      @toggle="handleCollapseToggle(reportTaskListInfo.reportDeptId)"
+    >
+      <template #view-operation>
+        <div class="rectification-info">
+          <span class="num">{{ reportTaskListInfo.lossRecordCount }}</span>
+          <span>条,整改完成{{ reportTaskListInfo.fixFinishCount }}条</span>
+        </div>
+      </template>
+      <template #right-header>
+        <span class="collapse-item__header--right">
+          {{ activeId === reportTaskListInfo.reportDeptId ? '收起' : '展开' }}
+        </span>
+      </template>
+      <template #main-table>
+        <div class="rectification-table">
+          <section class="damaged-list-container">
+            <DamagedList
+              :damagedList="reportTaskListInfo.lossRecordList"
+              :active-id="activeTaskId || reportTaskListInfo.lossRecordList[0].fixTaskId"
+              @update:activeId="handleActiveTask"
+            />
+          </section>
+          <section class="disaster-info-container">
+            <DisasterInfo :LossReportItemFormData="lossRecordListInfo" rectification v-if="lossRecordListInfo" />
+            <Rectification
+              v-if="lossRecordListInfo?.fixRecordList"
+              :rectification-list="lossRecordListInfo?.fixRecordList"
+              :rectification-dept-name="lossRecordListInfo?.responsibleDeptName"
+              :rectification-responsible-user-list="rectificationResponsibleUserList"
+              :rectification-priority="lossRecordListInfo?.priority"
+            />
+          </section>
+        </div>
+      </template>
+    </CollapseItem>
+    <NoCollapseItem v-else :name="`上报单位:${reportTaskListInfo.reportDeptName}`">
+      <template #view-operation>
+        <div class="rectification-info">
+          <span class="num">{{ reportTaskListInfo.lossRecordCount }}</span>
+          <span class="info-text">条,上报时间:{{ reportTaskListInfo.reportTime }}</span>
+        </div>
+      </template>
+    </NoCollapseItem>
   </div>
 </template>
 
@@ -64,6 +67,7 @@
   import type { PersonGroupItem } from '@/types/person-group/type';
   import type { ReportTaskListDetail, LossRecordListDetail } from '@/types/disaster-control';
   import { queryUserInfoByIds } from '@/api/system/person-group';
+  import Empty from '@/assets/images/empty@1X.png';
 
   const route = useRoute();
   const handleTaskId = Number(route.params.id);
@@ -76,13 +80,6 @@
       activeId.value = null;
     } else {
       activeId.value = itemId;
-      reportTaskListInfo.value = reportTaskList.value.find((item) => item.reportDeptId === activeId.value);
-      if (!reportTaskListInfo.value) return;
-      lossRecordList.value = reportTaskListInfo.value?.lossRecordList;
-      activeTaskId.value = lossRecordList.value[0].fixTaskId;
-      lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
-      getFixUserList(lossRecordListInfo.value?.fixPrincipals);
-      getFixRecordUser();
     }
   };
   const handleActiveTask = (fixTaskId: number) => {
@@ -132,7 +129,13 @@
     if (!reportTaskListInfo.value) return;
     lossRecordList.value = reportTaskListInfo.value?.lossRecordList;
     if (!lossRecordList.value.length) return;
-    activeTaskId.value = lossRecordList.value[0].fixTaskId;
+    let index = 0;
+    while (index < lossRecordList.value.length && !activeTaskId.value) {
+      if (lossRecordList.value[index].fixTaskId) {
+        activeTaskId.value = lossRecordList.value[index].fixTaskId;
+      }
+      index++;
+    }
     lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
     getFixUserList(lossRecordListInfo.value?.fixPrincipals);
     getFixRecordUser();
@@ -142,4 +145,11 @@
 <style lang="scss" scoped>
   @use '@/views/disaster/style/info-container.scss' as *;
   @use '../style/common.scss' as *;
+  .empty-container {
+    @include flex-center;
+    flex-direction: column;
+    gap: 8px;
+    width: 100%;
+    height: 100%;
+  }
 </style>

+ 22 - 3
src/views/disaster/disaster-control/src/components/ViewDisposalControlTaskItem.vue

@@ -1,10 +1,15 @@
 <template>
-  <div class="info-container">
+  <div class="empty-container" v-if="!disasterLossDetailList?.reportTaskList.length">
+    <img :src="Empty" alt="暂无数据" />
+    <span>暂无上报数据</span>
+  </div>
+  <div class="info-container" v-else>
     <template v-for="reportTask in disasterLossDetailList?.reportTaskList" :key="reportTask.reportDeptId">
       <CollapseItem
         v-if="reportTask.lossRecordList.length"
         :name="`上报单位:${reportTask.reportDeptName}`"
         :isActive="activeId === reportTask.reportDeptId"
+        opacityIcon
         @toggle="handleCollapseToggle(reportTask.reportDeptId)"
       >
         <template #view-operation>
@@ -64,6 +69,7 @@
   import type { PersonGroupItem } from '@/types/person-group/type';
   import type { ReportTaskListDetail, LossRecordListDetail, OverviewLossRecordInfo } from '@/types/disaster-control';
   import { queryUserInfoByIds } from '@/api/system/person-group';
+  import Empty from '@/assets/images/empty@1X.png';
 
   const route = useRoute();
   const handleTaskId = Number(route.query.id);
@@ -139,15 +145,21 @@
   }>();
   onMounted(async () => {
     await getDisasterLossDetailList({ handleTaskId });
-    if (!disasterLossDetailList.value?.reportTaskList.length) return;
     emit('overviewLossRecordInfo', overviewLossRecordInfo());
+    if (!disasterLossDetailList.value?.reportTaskList.length) return;
     reportTaskList.value = disasterLossDetailList.value?.reportTaskList;
     activeId.value = reportTaskList.value[0].reportDeptId;
     reportTaskListInfo.value = reportTaskList.value.find((item) => item.reportDeptId === activeId.value);
     if (!reportTaskListInfo.value) return;
     lossRecordList.value = reportTaskListInfo.value?.lossRecordList;
     if (!lossRecordList.value.length) return;
-    activeTaskId.value = lossRecordList.value[0].fixTaskId;
+    let index = 0;
+    while (index < lossRecordList.value.length && !activeTaskId.value) {
+      if (lossRecordList.value[index].fixTaskId) {
+        activeTaskId.value = lossRecordList.value[index].fixTaskId;
+      }
+      index++;
+    }
     lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
     getFixUserList(lossRecordListInfo.value?.fixPrincipals);
     getFixRecordUser();
@@ -157,4 +169,11 @@
 <style lang="scss" scoped>
   @use '@/views/disaster/style/info-container.scss' as *;
   @use '../style/common.scss' as *;
+  .empty-container {
+    @include flex-center;
+    flex-direction: column;
+    gap: 8px;
+    width: 100%;
+    height: 100%;
+  }
 </style>

+ 10 - 2
src/views/disaster/disaster-control/src/components/ViewLossReportItem.vue

@@ -6,6 +6,7 @@
         :name="`上报单位:${reportTask.reportDeptName}`"
         :isActive="activeId === reportTask.reportDeptId"
         @toggle="handleCollapseToggle(reportTask.reportDeptId)"
+        opacityIcon
       >
         <template #view-operation>
           <div class="rectification-info">
@@ -69,6 +70,7 @@
   const route = useRoute();
   const handleTaskId = Number(route.params.id);
   const fixTaskId = Number(route.query.fixTaskId);
+  const deptId = Number(route.query.deptId);
   const { id: reporterId } = useUserInfoHook();
   const { getDisasterLossDetailList, disasterLossDetailList } = useDisasterControlHook();
   const activeId = ref<number | null>(null);
@@ -119,7 +121,7 @@
     }
   };
   onMounted(async () => {
-    await getDisasterLossDetailList({ handleTaskId, reporterId });
+    await getDisasterLossDetailList({ handleTaskId, reportDeptId: deptId });
     if (!disasterLossDetailList.value?.reportTaskList.length) return;
     reportTaskList.value = disasterLossDetailList.value?.reportTaskList;
     activeId.value = reportTaskList.value[0].reportDeptId;
@@ -128,7 +130,13 @@
     lossRecordList.value = reportTaskListInfo.value?.lossRecordList;
     if (!lossRecordList.value.length) return;
     if (isNaN(activeTaskId.value)) {
-      activeTaskId.value = lossRecordList.value[0].fixTaskId;
+      let index = 0;
+      while (index < lossRecordList.value.length && isNaN(activeTaskId.value)) {
+        if (lossRecordList.value[index].fixTaskId) {
+          activeTaskId.value = lossRecordList.value[index].fixTaskId;
+        }
+        index++;
+      }
     }
     lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
     getFixUserList(lossRecordListInfo.value?.fixPrincipals);

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

@@ -135,7 +135,7 @@ export const LOSS_RECORD_TABLE_COLUMNS: TableColumnProps[] = [
 
 export const RECTIFICATION_INFO_TABLE_COLUMNS: TableColumnProps[] = [
   {
-    label: '整改次',
+    label: '整改次',
     prop: 'index',
     type: 'index',
     align: 'center',

+ 4 - 1
src/views/disaster/disaster-control/src/style/view-item.scss

@@ -12,6 +12,8 @@
   }
   &__content--item {
     display: flex;
+    font-size: 14px;
+    font-weight: 0;
     .label {
       flex-shrink: 0;
       color: rgba(0, 0, 0, 0.85);
@@ -29,7 +31,8 @@
       flex: 1;
       gap: 8px;
       .el-image {
-        max-width: 160px;
+        width: 160px;
+        height: 90px;
         background: #f5f7fa;
       }
     }