Explorar el Código

完成损失上报 查看

chauncey hace 10 meses
padre
commit
080e84e659

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

@@ -207,7 +207,7 @@ export interface DisposalRectificationCreateQuery extends DisposalRectificationF
 
 export interface DisasterLossDetailQuery {
   handleTaskId: number;
-  reportDeptId?: number;
+  reporterId?: number;
   fixerId?: number;
   reportRecordId?: number;
 }

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

@@ -23,16 +23,20 @@
   import { ElMessage } from 'element-plus';
   import UploadLoading from '@/components/UploadLoading.vue';
   import TaskInfoSection from './src/components/TaskInfoSection.vue';
+  import { useUserInfoHook } from '@/views/disaster/hooks';
+  import { exportLossRecord } from '@/views/disaster/disaster-control/src/util';
   import type { LossRecordFormData } from '@/types/disaster-control';
   import { createLossRecord, editLossRecord } from '@/api/disaster-control';
   import { uploadFileApi, UPLOAD_BIZ_TYPE } from '@/api/minio';
   import BackIcon from 'assets/svg/back.svg';
 
+  const { id: reporterId } = useUserInfoHook();
   const router = useRouter();
   const route = useRoute();
   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(() => {
@@ -45,8 +49,27 @@
       return `查看${fixedTitle}`;
     }
   });
-  const exportLossDetail = () => {
-    ElMessage.warning('暂未开放');
+  const exportLossDetail = async () => {
+    let name;
+    const params = {
+      handleTaskId: reportTaskId,
+      reporterId,
+    };
+    if (viewType === 'task') {
+      name = taskName;
+      await exportLossRecord(params, name);
+    } else {
+      const { id, name: lossRecordName } = dynamicComponentRef.value?.getLossRecordListInfo();
+      name = lossRecordName;
+      await exportLossRecord(
+        {
+          ...params,
+          reportRecordId: id,
+        },
+        name,
+      );
+    }
+    ElMessage.success(`导出${name}损失明细成功`);
   };
   const dynamicComponent = computed(() => {
     if (operate === 'create') {

+ 0 - 25
src/views/disaster/disaster-control/PageViewDisposalRectification.vue

@@ -169,29 +169,4 @@
   @use '../style/disaster.scss' as *;
   @use './src/style/common.scss' as *;
   @use '@/views/disaster/style/info-container.scss' as *;
-  .rectification-info {
-    font-size: 16px;
-    font-family: 0;
-    .num {
-      color: $primary-color;
-    }
-  }
-  .collapse-item__header--right {
-    font-size: 16px;
-    color: $primary-color;
-  }
-  .rectification-table {
-    display: flex;
-    gap: 10px;
-    width: 100%;
-  }
-  .damaged-list-container {
-    width: 200px;
-  }
-  .disaster-info-container {
-    display: flex;
-    flex-direction: column;
-    gap: 10px;
-    width: calc(100% - 220px);
-  }
 </style>

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

@@ -46,7 +46,10 @@
                     'collapse-item__icon',
                     { 'collapse-item__icon--disabled': !item.tableData[0].disasterReportRecordDetailList.length },
                   ]"
-                  @click="handleView(item.handleTaskId, item.taskName)"
+                  @click.stop="
+                    item.tableData[0].disasterReportRecordDetailList.length &&
+                      handleView(item.handleTaskId, item.taskName, 'task')
+                  "
                 />
               </el-tooltip>
             </template>
@@ -100,7 +103,10 @@
                         v-if="isOverdue(item.dueCompleteTime) && scope.row.fixStatus === FIX_STATUS.TO_BE_RECTIFIED"
                         @click="handleEdit(item.handleTaskId, scope.row.reportTaskId, scope.row.id)"
                       />
-                      <ActionButton text="查看" @click="handleView(item.handleTaskId, item.taskName)" />
+                      <ActionButton
+                        text="查看"
+                        @click="handleView(item.handleTaskId, item.taskName, 'item', scope.row.fixTaskId)"
+                      />
                       <ActionButton
                         text="删除"
                         v-if="scope.row.fixStatus === FIX_STATUS.TO_BE_RECTIFIED"
@@ -111,7 +117,7 @@
                       <ActionButton
                         text="查看"
                         v-if="scope.row.fixStatus === FIX_STATUS.TEMPORARY_CLOSED"
-                        @click="handleView(item.handleTaskId, item.taskName)"
+                        @click="handleView(item.handleTaskId, item.taskName, 'item', scope.row.fixTaskId)"
                       />
                       <ActionButton
                         text="编辑"
@@ -284,11 +290,11 @@
     });
   };
 
-  const handleView = (id: number, taskName: string) => {
+  const handleView = (id: number, taskName: string, type: 'task' | 'item', fixTaskId?: number) => {
     router.push({
       name: defaultName,
       params: { id },
-      query: { taskName },
+      query: { taskName, fixTaskId, type },
     });
   };
 

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

@@ -38,7 +38,7 @@
             scope.row.taskStage === TASK_STAGE.REPORTED_LOSS || scope.row.taskStage === TASK_STAGE.REPORTED_NO_LOSS
           "
         >
-          <ActionButton text="查看记录" @click="handleView(scope.row.id, scope.row.taskName)" />
+          <ActionButton text="查看记录" @click="handleView(scope.row.handleTaskId, scope.row.taskName, 'task')" />
         </div>
         <div class="action-container" v-else-if="scope.row.taskStage === TASK_STAGE.OVERDUE">
           <span>--</span>
@@ -129,11 +129,11 @@
       query: { taskName, operation: 'create' },
     });
   };
-  const handleView = (id: number, taskName: string) => {
+  const handleView = (id: number, taskName: string, type: 'task' | 'item') => {
     router.push({
       name: defaultName,
       params: { id },
-      query: { taskName },
+      query: { taskName, type },
     });
   };
   const userInfo = ref(false);

+ 61 - 7
src/views/disaster/disaster-control/src/components/ViewLossReportItem.vue

@@ -1,13 +1,13 @@
 <template>
   <div class="info-container">
-    <!-- <CollapseItem
+    <CollapseItem
       v-for="reportTask in disasterLossDetailList?.reportTaskList"
       :key="reportTask.reportDeptId"
       :name="reportTask.reportDeptName"
       :isActive="activeId === reportTask.reportDeptId"
       @toggle="handleCollapseToggle(reportTask.reportDeptId)"
-    > -->
-      <!-- <template #view-operation>
+    >
+      <template #view-operation>
         <div class="rectification-info">
           <span class="num">{{ reportTask.lossRecordCount }}</span>
           <span>条,整改完成{{ reportTask.fixFinishCount }}条</span>
@@ -38,28 +38,82 @@
             />
           </section>
         </div>
-      </template> -->
-    <!-- </CollapseItem> -->
+      </template>
+    </CollapseItem>
   </div>
 </template>
 
 <script setup lang="ts">
   import { useRoute } from 'vue-router';
-  import { onMounted } from 'vue';
+  import { onMounted, ref } from 'vue';
   import CollapseItem from './CollapseItem.vue';
+  import DamagedList from './DamagedList.vue';
+  import DisasterInfo from './DisasterInfo.vue';
+  import Rectification from './Rectification.vue';
   import { useDisasterControlHook } from '../hook';
   import { useUserInfoHook } from '@/views/disaster/hooks';
+  import type { PersonGroupItem } from '@/types/person-group/type';
+  import type { ReportTaskListDetail, LossRecordListDetail } from '@/types/disaster-control';
+  import { queryUserInfoByIds } from '@/api/system/person-group';
 
   const route = useRoute();
   const handleTaskId = Number(route.params.id);
+  const fixTaskId = Number(route.query.fixTaskId);
   const { id: reporterId } = useUserInfoHook();
   const { getDisasterLossDetailList, disasterLossDetailList } = useDisasterControlHook();
+  const activeId = ref<number | null>(null);
+  const activeTaskId = ref<number>(fixTaskId);
+  const handleCollapseToggle = (itemId: number) => {
+    if (activeId.value === itemId) {
+      activeId.value = null;
+    } else {
+      activeId.value = itemId;
+    }
+  };
+  const handleActiveTask = (fixTaskId: number) => {
+    activeTaskId.value = fixTaskId;
+    if (!lossRecordList.value.length) return;
+    lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
+    getFixUserList(lossRecordListInfo.value?.fixPrincipals);
+  };
+  const reportTaskList = ref<ReportTaskListDetail[]>([]);
+  const lossRecordList = ref<LossRecordListDetail[]>([]);
+  const reportTaskListInfo = ref<ReportTaskListDetail>();
+  const lossRecordListInfo = ref<LossRecordListDetail>();
+  const rectificationResponsibleUserList = ref<PersonGroupItem[]>([]);
+  const getFixUserList = async (userIds: string | undefined) => {
+    if (!userIds) return;
+    const ids = JSON.parse(userIds);
+    const res = await queryUserInfoByIds(ids);
+    rectificationResponsibleUserList.value = res;
+  };
+  const getLossRecordListInfo = () => {
+    if (!lossRecordListInfo.value) return;
+    return {
+      id: lossRecordListInfo.value.id,
+      name: lossRecordListInfo.value.affectedItems,
+    };
+  };
   onMounted(async () => {
     await getDisasterLossDetailList({ handleTaskId, reporterId });
-    console.log(disasterLossDetailList.value);
+    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 (isNaN(activeTaskId.value)) {
+      activeTaskId.value = lossRecordList.value[0].fixTaskId;
+    }
+    lossRecordListInfo.value = lossRecordList.value.find((item) => item.fixTaskId === activeTaskId.value);
+    getFixUserList(lossRecordListInfo.value?.fixPrincipals);
+  });
+  defineExpose({
+    getLossRecordListInfo,
   });
 </script>
 
 <style lang="scss" scoped>
   @use '@/views/disaster/style/info-container.scss' as *;
+  @use '../style/common.scss' as *;
 </style>

+ 27 - 0
src/views/disaster/disaster-control/src/style/common.scss

@@ -1,3 +1,4 @@
+@use '@/styles/variables.scss' as *;
 .disaster-precaution-container__header {
   flex-direction: row !important;
   justify-content: flex-start !important;
@@ -12,3 +13,29 @@
     overflow-y: auto;
   }
 }
+
+.rectification-info {
+  font-size: 16px;
+  font-family: 0;
+  .num {
+    color: $primary-color;
+  }
+}
+.collapse-item__header--right {
+  font-size: 16px;
+  color: $primary-color;
+}
+.rectification-table {
+  display: flex;
+  gap: 10px;
+  width: 100%;
+}
+.damaged-list-container {
+  width: 200px;
+}
+.disaster-info-container {
+  display: flex;
+  flex-direction: column;
+  gap: 10px;
+  width: calc(100% - 220px);
+}