Jelajahi Sumber

完成所有table页面 准备子页面

chauncey 11 bulan lalu
induk
melakukan
81ed8fc045

+ 145 - 0
mock/disaster-control/table.ts

@@ -258,6 +258,143 @@ const lossReportReportTaskList = {
   ],
   totalRow: 4,
 };
+const lossRecordItemList = [
+  {
+    handleTaskId: 1,
+    disasterReportRecordDetailList: [
+      {
+        id: 1,
+        buildingNo: '1号楼',
+        floorNo: '1层',
+        roomNo: '101',
+        affectedItems: '树木10棵、房屋100平方米、道路100米、桥梁1座',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '广东省应急管理厅',
+        priority: 2,
+        fixStatus: 1,
+        isLoss: 1,
+      },
+      {
+        id: 2,
+        buildingNo: '2号楼',
+        floorNo: '2层',
+        roomNo: '201',
+        affectedItems: '',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '湖北省应急管理厅',
+        priority: 1,
+        fixStatus: 2,
+        isLoss: 0,
+      },
+      {
+        id: 3,
+        buildingNo: '3号楼',
+        floorNo: '3层',
+        roomNo: '301',
+        affectedItems: '树木30棵、房屋300平方米、道路300米、桥梁3座',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '海南省应急管理厅',
+        priority: 2,
+        fixStatus: 3,
+        isLoss: 1,
+      },
+      {
+        id: 4,
+        buildingNo: '4号楼',
+        floorNo: '4层',
+        roomNo: '401',
+        affectedItems: '树木40棵',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '湖南省应急管理厅',
+        priority: 1,
+        fixStatus: 4,
+        isLoss: 1,
+      },
+      {
+        id: 5,
+        buildingNo: '5号楼',
+        floorNo: '5层',
+        roomNo: '501',
+        affectedItems: '树木50棵、房屋500平方米、道路500米、桥梁5座',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '黑龙江省应急管理厅',
+        priority: 2,
+        fixStatus: 5,
+        isLoss: 1,
+      },
+    ],
+  },
+  {
+    handleTaskId: 2,
+    disasterReportRecordDetailList: [
+      {
+        id: 6,
+        buildingNo: '6号楼',
+        floorNo: '6层',
+        roomNo: '601',
+        affectedItems: '',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '天津市应急管理厅',
+        priority: 1,
+        fixStatus: 3,
+        isLoss: 0,
+      },
+    ],
+  },
+  {
+    handleTaskId: 3,
+    disasterReportRecordDetailList: [],
+  },
+  {
+    handleTaskId: 4,
+    disasterReportRecordDetailList: [],
+  },
+  {
+    handleTaskId: 5,
+    disasterReportRecordDetailList: [
+      {
+        id: 7,
+        buildingNo: '7号楼',
+        floorNo: '7层',
+        roomNo: '701',
+        affectedItems: '树木70棵、房屋700平方米、道路700米、桥梁7座',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '黑龙江省应急管理厅',
+        priority: 1,
+        fixStatus: 5,
+        isLoss: 1,
+      },
+      {
+        id: 8,
+        buildingNo: '8号楼',
+        floorNo: '8层',
+        roomNo: '801',
+        affectedItems: '树木80棵',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '黑龙江省应急管理厅',
+        priority: 2,
+        fixStatus: 1,
+        isLoss: 1,
+      },
+      {
+        id: 9,
+        buildingNo: '9号楼',
+        floorNo: '9层',
+        roomNo: '901',
+        affectedItems: '树木90棵',
+        updatedAt: '2025-05-23 10:00',
+        responsibleDeptName: '黑龙江省应急管理厅',
+        priority: 1,
+        fixStatus: 2,
+        isLoss: 1,
+      },
+    ],
+  },
+  {
+    handleTaskId: 6,
+    disasterReportRecordDetailList: [],
+  },
+];
 export default [
   {
     url: '/safety_mock_api/disasterHandle/queryDisasterHandleTaskPage',
@@ -283,4 +420,12 @@ export default [
       return resultSuccess(lossReportReportTaskList);
     },
   },
+  {
+    url: '/safety_mock_api/disasterHandle/queryLossRecordPage',
+    timeout: 500,
+    method: 'post',
+    response: () => {
+      return resultSuccess(lossRecordItemList);
+    },
+  },
 ];

+ 10 - 0
src/api/disaster-control/index.ts

@@ -6,6 +6,8 @@ import type {
   DisposalManagementTableResponse,
   LossReportReportTaskQuery,
   LossReportReportTaskResponse,
+  LossRecordTableQuery,
+  LossRecordTableResponse,
 } from '@/types/disaster-control';
 import type { QueryPageResponse, QueryPageRequest } from '@/types/disaster';
 /**
@@ -37,3 +39,11 @@ export const getReportTaskList = (query: QueryPageRequest<LossReportReportTaskQu
     data: query,
   });
 };
+
+export const getLossRecordTableData = (query: LossRecordTableQuery) => {
+  return http.request<LossRecordTableResponse[]>({
+    url: '/disasterHandle/queryLossRecordPage',
+    method: 'post',
+    data: query,
+  });
+};

+ 1 - 0
src/constant/dict.ts

@@ -2,4 +2,5 @@ export const DICT_CODE = {
   WEATHER_WARNING: 'weather_warning',
   DISASTER_LEVEL: 'disaster_level',
   DISASTER_TYPE: 'disaster_type',
+  PRIORITY: 'disaster_fix_priority',
 };

+ 24 - 0
src/types/disaster-control/index.ts

@@ -14,6 +14,12 @@ export interface DisposalManagementTableQuery extends DisposalManagementListQuer
   status?: string;
 }
 
+export interface LossRecordTableQuery {
+  handleTaskIds: number[];
+  handleDeptIds?: number[];
+  fixStatus?: string;
+}
+
 interface BasicResponse {
   deptName: string;
   taskStage: number;
@@ -36,11 +42,29 @@ export interface disasterReportTaskInfoListResponse extends BasicResponse {
   reportPrincipalInfoList: PersonGroupItem[];
 }
 
+export interface disasterReportRecordDetailListResponse {
+  id: number;
+  buildingNo: string;
+  floorNo: string;
+  roomNo: string;
+  affectedItems: string;
+  updatedAt: string;
+  responsibleDeptName: string;
+  priority: number;
+  fixStatus: number;
+  isLoss: number;
+}
+
 export interface DisposalManagementTableResponse {
   handleTaskId: number;
   disasterReportTaskInfoList: disasterReportTaskInfoListResponse[];
 }
 
+export interface LossRecordTableResponse {
+  handleTaskId: number;
+  disasterReportRecordDetailList: disasterReportRecordDetailListResponse[];
+}
+
 export interface LossReportReportTaskResponse extends BasicResponse {
   handleTaskId: number;
   handleTaskName: string;

+ 2 - 13
src/views/disaster/disaster-control/PageDisposalManagement.vue

@@ -174,10 +174,9 @@
   import { onMounted, reactive, ref } from 'vue';
   import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
   import type { DeptTree } from '@/types/dept/type';
-  import { TASK_STAGE } from './src/constant';
   import { getDisasterControlCollapseData, getDisasterControlTableData } from '@/api/disaster-control';
   import type { disasterReportTaskInfoListResponse } from '@/types/disaster-control';
-  import { DEFAULT_PAGE_SIZE, DISASTER_CONTROL_PAGE_SIZE_CONFIG } from './src/constant';
+  import { DEFAULT_PAGE_SIZE, DISASTER_CONTROL_PAGE_SIZE_CONFIG, TASK_STAGE } from './src/constant';
   import type {
     DisposalManagementCollapseListResponse,
     DisposalManagementTableResponse,
@@ -346,16 +345,9 @@
 <style scoped lang="scss">
   @use '../style/disaster.scss' as *;
   @use './src/style/collapse.scss' as *;
+  @use './src/style/common.scss' as *;
   $collapse-container-height-default: calc(68vh - 13cpx);
   $collapse-container-height-permission: calc(63vh - 15cpx);
-  .custom-select {
-    width: 200cpx;
-    :deep(.el-select__selection) {
-      min-height: 24px;
-      max-height: 24px;
-      overflow-y: auto;
-    }
-  }
   .collapse-container {
     &--permission {
       height: $collapse-container-height-permission;
@@ -373,7 +365,4 @@
       opacity: 0.5;
     }
   }
-  .main-table__button {
-    margin-bottom: 10cpx;
-  }
 </style>

+ 214 - 7
src/views/disaster/disaster-control/PageDisposalRectification.vue

@@ -1,13 +1,220 @@
 <template>
-    <div>
-        this is disposal rectification
-    </div>
+  <div class="disaster-precaution-container">
+    <header class="disaster-precaution-container__header">
+      <span class="disaster-precaution-container__title">灾害损失处置整改</span>
+    </header>
+    <main class="disaster-precaution-container__main">
+      <div class="disaster-precaution">
+        <header class="disaster-precaution__header">
+          <Search
+            :searchConfig="DISPOSAL_RECTIFICATION_SEARCH_CONFIG"
+            :searchData="searchData"
+            @update:searchData="handleSearch"
+          />
+        </header>
+        <div class="collapse-container" v-loading="collapseLoading">
+          <div class="empty-container" v-if="collapseList.length === 0">
+            <img :src="Empty" />
+            <span>暂无数据</span>
+          </div>
+          <template v-else>
+            <CollapseItem
+              v-for="item in collapseList"
+              :key="item.id"
+              :name="item.taskName"
+              :defaultOpen="item.id === 1"
+            >
+              <template #viewOperation> <img :src="ViewDocument" class="collapse-item__icon" /> </template>
+              <template #main-table>
+                <BasicTable :tableData="item.tableData[0].disasterReportRecordDetailList" :tableConfig="tableConfig">
+                  <template #affectedArea="scope">
+                    <div class="affected-area-container">
+                      <span>{{ scope.row.buildingNo + scope.row.floorNo + scope.row.roomNo }}</span>
+                    </div>
+                  </template>
+                  <template #affectedItems="scope">
+                    <el-tooltip :content="scope.row.affectedItems" placement="top-start" effect="light">
+                      <div class="affected-items-container">
+                        <span>{{ scope.row.affectedItems }}</span>
+                      </div>
+                    </el-tooltip>
+                  </template>
+                  <template #priority="scope">
+                    <div
+                      class="priority-container"
+                      :class="
+                        scope.row.priority === PRIORITY_STATUS.URGENT
+                          ? 'priority-container--urgent'
+                          : 'priority-container--normal'
+                      "
+                    >
+                      <span>{{ getPriorityStatus(scope.row.priority) }}</span>
+                    </div>
+                  </template>
+                  <template #fixStatus="scope">
+                    <div class="fix-status-container">
+                      <span>{{ getfixStatus(scope.row.fixStatus) }}</span>
+                    </div>
+                  </template>
+                  <template #action="scope">
+                    <div class="action-container" v-if="scope.row.fixStatus === FIX_STATUS.TO_BE_RECTIFIED">
+                      <ActionButton text="查看" />
+                      <ActionButton text="去整改" />
+                      <ActionButton text="添加整改人" />
+                    </div>
+                    <div class="action-container" v-else>
+                      <ActionButton text="查看" />
+                      <ActionButton text="去整改" />
+                    </div>
+                  </template>
+                </BasicTable>
+              </template>
+            </CollapseItem>
+          </template>
+        </div>
+        <div class="pagination-container" v-if="collapseList.length > 0">
+          <el-pagination
+            :current-page="currentPage"
+            :page-size="pageSize"
+            :page-sizes="DISASTER_CONTROL_PAGE_SIZE_CONFIG"
+            layout="prev, pager, next, jumper, sizes, total"
+            background
+            :total="total"
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+          />
+        </div>
+      </div>
+    </main>
+  </div>
 </template>
 
-<script lang="ts" setup>
+<script setup lang="ts">
+  import Search from '@/views/disaster/components/Search.vue';
+  import CollapseItem from './src/components/CollapseItem.vue';
+  import BasicTable from '@/components/BasicTable.vue';
+  import { onMounted, reactive, ref } from 'vue';
+  import { getDisasterControlCollapseData, getLossRecordTableData } from '@/api/disaster-control';
+  import type { disasterReportTaskInfoListResponse } from '@/types/disaster-control';
+  import { DEFAULT_PAGE_SIZE, DISASTER_CONTROL_PAGE_SIZE_CONFIG, PRIORITY_STATUS, FIX_STATUS } from './src/constant';
+  import type { DisposalManagementCollapseListResponse, LossRecordTableResponse } from '@/types/disaster-control';
+  import useTableConfig from '@/hooks/useTableConfigHook';
+  import {
+    DISPOSAL_RECTIFICATION_SEARCH_CONFIG,
+    LOSS_RECORD_TABLE_COLUMNS,
+    DISPOSAL_MANAGEMENT_TABLE_OPTIONS,
+  } from './src/config';
+  import { getPriorityStatus, getfixStatus } from './src/util';
+  import { ACTIVE_STATUS } from '@/views/disaster/constant';
+  import ActionButton from '@/components/ActionButton.vue';
+  import { useRouter } from 'vue-router';
+  import Empty from 'assets/images/empty@1X.png';
+  import ViewDocument from './src/svg/view-document.svg';
 
-</script>
+  const searchData = reactive({
+    priority: '',
+    fixStatus: '',
+  });
+
+  const currentPage = ref(1);
+  const pageSize = ref(DEFAULT_PAGE_SIZE);
+  const total = ref(0);
+
+  const collapseLoading = ref(false);
+  const collapseList = ref<DisposalManagementCollapseListResponse<LossRecordTableResponse>[]>([]);
+
+  const { tableConfig } = useTableConfig(LOSS_RECORD_TABLE_COLUMNS, DISPOSAL_MANAGEMENT_TABLE_OPTIONS, false);
+
+  const handleSizeChange = async (size: number) => {
+    pageSize.value = size;
+    await getDisposalData();
+    await getDisposalTableData();
+  };
+
+  const handleCurrentChange = async (page: number) => {
+    currentPage.value = page;
+    await getDisposalData();
+    await getDisposalTableData();
+  };
+
+  const handleSearch = () => {
+    getDisposalTableData();
+  };
 
-<style lang="scss" scoped>
+  const taskIds = ref<number[]>([]);
+  const router = useRouter();
+  const Table_RouterName = 'disaster-control-disposal-management-item';
+  const handleEditDisposalManagement = (id: number) => {
+    router.push({
+      name: Table_RouterName,
+      query: {
+        id,
+        operate: 'edit',
+      },
+    });
+  };
+
+  const getDisposalData = async () => {
+    collapseLoading.value = true;
+    const res = await getDisasterControlCollapseData({
+      pageNumber: currentPage.value,
+      pageSize: pageSize.value,
+      queryParam: {},
+    });
+    collapseList.value = res.records.map((item) => ({
+      ...item,
+      tableData: [
+        {
+          handleTaskId: item.id,
+          disasterReportRecordDetailList: [],
+        },
+      ],
+    }));
+    taskIds.value = collapseList.value.map((item) => item.id);
+    total.value = res.totalRow;
+    collapseLoading.value = false;
+  };
+
+  const getDisposalTableData = async () => {
+    tableConfig.loading = true;
+    const res = await getLossRecordTableData({
+      handleTaskIds: taskIds.value,
+      ...searchData,
+    });
+    collapseList.value.forEach((item) => {
+      item.tableData = res.filter((tableItem) => tableItem.handleTaskId === item.id);
+    });
+    tableConfig.loading = false;
+  };
+
+  const isViewTask = (disasterReportTaskInfoList: disasterReportTaskInfoListResponse[]) => {
+    return disasterReportTaskInfoList.some((item) => item.status === ACTIVE_STATUS.ACTIVE);
+  };
+
+  const handleViewTask = (id: number) => {
+    console.log('查看任务ID' + id);
+  };
+
+  onMounted(async () => {
+    await getDisposalData();
+    await getDisposalTableData();
+  });
+</script>
 
-</style>
+<style scoped lang="scss">
+  @use '../style/disaster.scss' as *;
+  @use './src/style/collapse.scss' as *;
+  @use './src/style/common.scss' as *;
+  $collapse-container-height-default: calc(68vh - 13cpx);
+  .collapse-container {
+    height: $collapse-container-height-default;
+    max-height: $collapse-container-height-default;
+  }
+  .collapse-item__icon {
+    width: 20cpx;
+    &--disabled {
+      cursor: not-allowed;
+      opacity: 0.5;
+    }
+  }
+</style>

+ 77 - 25
src/views/disaster/disaster-control/src/components/LossRecord.vue

@@ -33,7 +33,43 @@
             </div>
           </template>
           <template #main-table>
-            <!-- <BasicTable :tableData="item.tableData" :tableConfig="tableConfig" /> -->
+            <el-button type="primary" :icon="Plus" class="main-table__button">新增</el-button>
+            <BasicTable :tableData="item.tableData[0].disasterReportRecordDetailList" :tableConfig="tableConfig">
+              <template #affectedArea="scope">
+                <div class="affected-area-container">
+                  <span>{{ scope.row.buildingNo + scope.row.floorNo + scope.row.roomNo }}</span>
+                </div>
+              </template>
+              <template #affectedItems="scope">
+                <el-tooltip :content="scope.row.affectedItems" placement="top-start" effect="light">
+                  <div class="affected-items-container">
+                    <span>{{ scope.row.affectedItems }}</span>
+                  </div>
+                </el-tooltip>
+              </template>
+              <template #priority="scope">
+                <div
+                  class="priority-container"
+                  :class="
+                    scope.row.priority === PRIORITY_STATUS.URGENT
+                      ? 'priority-container--urgent'
+                      : 'priority-container--normal'
+                  "
+                >
+                  <span>{{ getPriorityStatus(scope.row.priority) }}</span>
+                </div>
+              </template>
+              <template #fixStatus="scope">
+                <div class="fix-status-container">
+                  <span>{{ getfixStatus(scope.row.fixStatus) }}</span>
+                </div>
+              </template>
+              <template #action="scope">
+                <ActionButton text="编辑" v-if="scope.row.fixStatus === FIX_STATUS.TO_BE_RECTIFIED" />
+                <ActionButton text="查看" v-if="scope.row.isLoss === IS_LOSS.NO_LOSS" />
+                <ActionButton text="删除" />
+              </template>
+            </BasicTable>
           </template>
         </CollapseItem>
       </template>
@@ -58,14 +94,18 @@
   import { Plus } from '@element-plus/icons-vue';
   import Search from '@/views/disaster/components/Search.vue';
   import BasicTable from '@/components/BasicTable.vue';
+  import ActionButton from '@/components/ActionButton.vue';
   import { getAllDepartments } from '@/api/auth/dept';
   import CollapseItem from './CollapseItem.vue';
-  import { DEFAULT_PAGE_SIZE, DISASTER_CONTROL_PAGE_SIZE_CONFIG } from '../constant';
-  import type {
-    DisposalManagementCollapseListResponse,
-    DisposalManagementTableResponse,
-  } from '@/types/disaster-control';
-  import { getDisasterControlCollapseData } from '@/api/disaster-control';
+  import {
+    DEFAULT_PAGE_SIZE,
+    DISASTER_CONTROL_PAGE_SIZE_CONFIG,
+    PRIORITY_STATUS,
+    IS_LOSS,
+    FIX_STATUS,
+  } from '../constant';
+  import type { DisposalManagementCollapseListResponse, LossRecordTableResponse } from '@/types/disaster-control';
+  import { getDisasterControlCollapseData, getLossRecordTableData } from '@/api/disaster-control';
   import {
     LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG,
     LOSS_RECORD_TABLE_COLUMNS,
@@ -75,6 +115,7 @@
   import useTableConfig from '@/hooks/useTableConfigHook';
   import { formatDeptTree } from '@/views/disaster/utils/formatDeptTree';
   import type { DeptTree } from '@/types/dept/type';
+  import { getPriorityStatus, getfixStatus } from '../util';
 
   const firstLevelDepts = ref<DeptTree[]>([]);
 
@@ -84,15 +125,15 @@
   const collapseLoading = ref(false);
   const { tableConfig } = useTableConfig(LOSS_RECORD_TABLE_COLUMNS, DISPOSAL_MANAGEMENT_TABLE_OPTIONS, false);
   const searchData = reactive({
-    handleDeptIds: '',
+    handleDeptIds: [],
     fixStatus: '',
   });
   const handleSearch = () => {
-    console.log(searchData);
+    getDisposalTableData();
   };
 
   const taskIds = ref<number[]>([]);
-  const collapseList = ref<DisposalManagementCollapseListResponse<DisposalManagementTableResponse>[]>([]);
+  const collapseList = ref<DisposalManagementCollapseListResponse<LossRecordTableResponse>[]>([]);
   const getDisposalData = async () => {
     collapseLoading.value = true;
     const res = await getDisasterControlCollapseData({
@@ -105,7 +146,7 @@
       tableData: [
         {
           handleTaskId: item.id,
-          disasterReportTaskInfoList: [],
+          disasterReportRecordDetailList: [],
         },
       ],
     }));
@@ -114,36 +155,41 @@
     collapseLoading.value = false;
   };
 
-  // const getDisposalTableData = async () => {
-  //   tableConfig.loading = true;
-  //   const res = await getLossRecordTableData({
-  //     handleTaskIds: taskIds.value,
-  //     ...searchData,
-  //   });
-  //   collapseList.value.forEach((item) => {
-  //     item.tableData = res;
-  //   });
-  //   tableConfig.loading = false;
-  // };
-  const handleSizeChange = (size: number) => {
+  const getDisposalTableData = async () => {
+    tableConfig.loading = true;
+    const res = await getLossRecordTableData({
+      handleTaskIds: taskIds.value,
+      ...searchData,
+    });
+    collapseList.value.forEach((item) => {
+      item.tableData = res.filter((tableItem) => tableItem.handleTaskId === item.id);
+    });
+    tableConfig.loading = false;
+  };
+  const handleSizeChange = async (size: number) => {
     pageSize.value = size;
+    await getDisposalData();
+    await getDisposalTableData();
   };
 
-  const handleCurrentChange = (page: number) => {
+  const handleCurrentChange = async (page: number) => {
     currentPage.value = page;
+    await getDisposalData();
+    await getDisposalTableData();
   };
 
   onMounted(async () => {
     const result = await getAllDepartments();
     firstLevelDepts.value = formatDeptTree(result);
     await getDisposalData();
-    // await getDisposalTableData();
+    await getDisposalTableData();
   });
 </script>
 
 <style lang="scss" scoped>
   @use '@/views/disaster/style/disaster.scss' as *;
   @use '../style/collapse.scss' as *;
+  @use '../style/common.scss' as *;
   $collapse-container-height: calc(60vh - 20cpx);
   .collapse-container {
     height: $collapse-container-height;
@@ -154,4 +200,10 @@
     color: #999;
     font-weight: 400;
   }
+  .affected-items-container {
+    width: 100%;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
 </style>

+ 2 - 0
src/views/disaster/disaster-control/src/config/index.ts

@@ -2,6 +2,7 @@ import {
   DISPOSAL_MANAGEMENT_SEARCH_CONFIG,
   LOSS_REPORT_REPORT_TASK_SEARCH_CONFIG,
   LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG,
+  DISPOSAL_RECTIFICATION_SEARCH_CONFIG,
 } from './search';
 import {
   DISPOSAL_MANAGEMENT_TABLE_COLUMNS,
@@ -36,4 +37,5 @@ export {
   DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_CREATE,
   DISPOSAL_MANAGEMENT_ITEM_FROM_CONFIG_EDIT,
   DISPOSAL_MANAGEMENT_ITEM_FROM_RULES_EDIT,
+  DISPOSAL_RECTIFICATION_SEARCH_CONFIG,
 };

+ 22 - 5
src/views/disaster/disaster-control/src/config/search.ts

@@ -7,10 +7,21 @@ import {
   TASK_STAGE_OPTIONS_DISPOSAL_MANAGEMENT,
   TASK_STAGE_OPTIONS_REPORT_TASK,
   FIX_STATUS_OPTIONS,
+  PRIORITY_STATUS_OPTIONS,
 } from '../constant';
 
 // 通用搜索配置
-const BASIC_SEARCH_CONFIG = {};
+const BASIC_SEARCH_CONFIG = {
+  FIX_STATUS: {
+    label: '整改进度',
+    prop: 'fixStatus',
+    component: 'ElSelect',
+    selectOptions: FIX_STATUS_OPTIONS,
+    componentProps: {
+      placeholder: '请选择整改进度',
+    },
+  },
+};
 
 // 灾害处理搜索配置
 export const DISPOSAL_MANAGEMENT_SEARCH_CONFIG: SearchConfig[] = [
@@ -59,13 +70,19 @@ export const LOSS_RECORD_LOSS_RECORD_SEARCH_CONFIG: SearchConfig[] = [
     prop: 'handleDeptIds',
     slot: 'handleDeptIds',
   },
+  BASIC_SEARCH_CONFIG.FIX_STATUS,
+];
+
+// 处置整改搜索配置
+export const DISPOSAL_RECTIFICATION_SEARCH_CONFIG: SearchConfig[] = [
   {
-    label: '整改进度',
-    prop: 'fixStatus',
+    label: '优先级',
+    prop: 'priority',
     component: 'ElSelect',
-    selectOptions: FIX_STATUS_OPTIONS,
+    selectOptions: PRIORITY_STATUS_OPTIONS,
     componentProps: {
-      placeholder: '请选择整改进度',
+      placeholder: '请选择优先级',
     },
   },
+  BASIC_SEARCH_CONFIG.FIX_STATUS,
 ];

+ 10 - 3
src/views/disaster/disaster-control/src/config/table.ts

@@ -100,31 +100,38 @@ export const LOSS_RECORD_TABLE_COLUMNS: TableColumnProps[] = [
     label: '受灾地点',
     prop: 'affectedArea',
     align: 'center',
+    slot: 'affectedArea',
+    width: '180cpx',
   },
   {
     label: '受灾物品',
     prop: 'affectedItems',
     align: 'center',
+    slot: 'affectedItems',
+    width: '200cpx',
   },
   {
     label: '上报时间',
-    prop: 'reportTime',
+    prop: 'updatedAt',
     align: 'center',
+    width: '200cpx',
   },
   {
     label: '整改部门',
-    prop: 'department',
+    prop: 'responsibleDeptName',
     align: 'center',
   },
   {
     label: '优先级',
     prop: 'priority',
     align: 'center',
+    slot: 'priority',
   },
   {
     label: '整改进度',
-    prop: 'progress',
+    prop: 'fixStatus',
     align: 'center',
+    slot: 'fixStatus',
   },
   BASIC_TABLE_COLUMNS.ACTION,
 ];

+ 21 - 0
src/views/disaster/disaster-control/src/constant.ts

@@ -19,6 +19,16 @@ export enum FIX_STATUS {
   TEMPORARY_CLOSED,
 }
 
+export enum PRIORITY_STATUS {
+  NORMAL = 1,
+  URGENT,
+}
+
+export enum IS_LOSS {
+  NO_LOSS = 0,
+  LOSS,
+}
+
 const TASK_STAGE_OPTIONS_BASIC = [
   {
     label: '待上报',
@@ -46,6 +56,17 @@ export const TASK_STAGE_OPTIONS_DISPOSAL_MANAGEMENT = [
   ...TASK_STAGE_OPTIONS_BASIC,
 ];
 
+export const PRIORITY_STATUS_OPTIONS = [
+  {
+    label: '优先处理',
+    value: PRIORITY_STATUS.URGENT,
+  },
+  {
+    label: '正常处理',
+    value: PRIORITY_STATUS.NORMAL,
+  },
+];
+
 export const TASK_STAGE_OPTIONS_REPORT_TASK = [...TASK_STAGE_OPTIONS_BASIC];
 
 export const FIX_STATUS_OPTIONS = [

+ 9 - 0
src/views/disaster/disaster-control/src/style/collapse.scss

@@ -1,10 +1,14 @@
 @use '@/styles/variables.scss' as *;
+$priority-urgent-color: #ff4d4f;
 .collapse-container {
   display: flex;
   flex-direction: column;
   gap: 10cpx;
   width: 100%;
   overflow-y: auto;
+  .main-table__button {
+    margin-bottom: 10cpx;
+  }
 }
 .empty-container {
   width: 100%;
@@ -17,3 +21,8 @@
   display: flex;
   justify-content: flex-end;
 }
+.priority-container {
+  &--urgent {
+    color: $priority-urgent-color;
+  }
+}

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

@@ -3,3 +3,12 @@
   justify-content: flex-start !important;
   gap: 8cpx !important;
 }
+
+.custom-select {
+  width: 200cpx;
+  :deep(.el-select__selection) {
+    min-height: 24px;
+    max-height: 24px;
+    overflow-y: auto;
+  }
+}

+ 9 - 1
src/views/disaster/disaster-control/src/util.ts

@@ -1,6 +1,14 @@
-import { TASK_STAGE_OPTIONS_DISPOSAL_MANAGEMENT } from './constant';
+import { TASK_STAGE_OPTIONS_DISPOSAL_MANAGEMENT, PRIORITY_STATUS_OPTIONS, FIX_STATUS_OPTIONS } from './constant';
 
 // 获取任务阶段
 export const getTaskStage = (taskStage: number) => {
   return TASK_STAGE_OPTIONS_DISPOSAL_MANAGEMENT.find((item) => item.value === taskStage)?.label;
 };
+
+export const getfixStatus = (fixStatus: number) => {
+  return FIX_STATUS_OPTIONS.find((item) => item.value === fixStatus)?.label;
+};
+
+export const getPriorityStatus = (priorityStatus: number) => {
+  return PRIORITY_STATUS_OPTIONS.find((item) => item.value === priorityStatus)?.label;
+};