Compare commits

...

2 Commits

9 changed files with 128 additions and 53 deletions

View File

@ -145,7 +145,7 @@ const tableColumns = ref([
{ prop: "stakeNo", label: "起止桩号", width: "", slot: "stakeNo" },
{ prop: "location", label: "路况位置", width: "", slot: "location" },
{ prop: "occurrenceTime", label: "发生时间", width: "" },
{ prop: "routeNo2", label: "线路编号", width: "" },
// { prop: "routeNo2", label: "线", width: "" },
{ prop: "type", label: "类型", width: "" },
{
prop: "roadConditionType",
@ -255,7 +255,7 @@ const fetchData = async () => {
stakeNo: `${item.startStakeNo}-${item.endStakeNo}` || "-",
location: item.occurLocation || "-",
occurrenceTime: item.occurTime || "-",
routeNo2: item.routeNo || "-",
// routeNo2: item.routeNo || "-",
type: item.roadConditionType || "-",
roadConditionType: item.roadConditionType || "-",
expectRecoverTime: item.expectRecoverTime || "-",

View File

@ -1,4 +1,4 @@
<template>
<template>
<base-dialog
v-model:visible="props.visible"
title="详情"
@ -37,7 +37,11 @@
</div>
<div class="info-item">
<span class="info-label">事件等级</span>
<span class="info-value level-tag" :class="eventInfo.levelClass">{{ eventInfo.eventLevel }}</span>
<span
class="info-value level-tag"
:class="eventInfo.levelClass"
>{{ eventInfo.eventLevel }}</span
>
</div>
</div>
<div class="info-row">
@ -76,7 +80,11 @@
处置反馈信息
</div>
<div class="feedback-list">
<div v-for="(item, index) in feedbackList" :key="item.id" class="feedback-item">
<div
v-for="(item, index) in feedbackList"
:key="item.id"
class="feedback-item"
>
<div class="feedback-header">
<div class="feedback-num">{{ index + 1 }}</div>
<div class="feedback-info">
@ -97,19 +105,25 @@
<div class="detail-row">
<span class="detail-label">预计开始时间</span>
<span class="detail-value">{{ item.estimatedStartTime }}</span>
<span class="detail-label" style="margin-left: 40px">预计结束时间</span>
<span class="detail-label" style="margin-left: 40px"
>预计结束时间</span
>
<span class="detail-value">{{ item.estimatedEndTime }}</span>
</div>
<div class="detail-row">
<span class="detail-label">实际开始时间</span>
<span class="detail-value">{{ item.actualStartTime }}</span>
<span class="detail-label" style="margin-left: 40px">实际结束时间</span>
<span class="detail-label" style="margin-left: 40px"
>实际结束时间</span
>
<span class="detail-value">{{ item.actualEndTime }}</span>
</div>
<div class="detail-row">
<span class="detail-label">处置人</span>
<span class="detail-value">{{ item.handlerName }}</span>
<span class="detail-label" style="margin-left: 40px">联系电话</span>
<span class="detail-label" style="margin-left: 40px"
>联系电话</span
>
<span class="detail-value">{{ item.contactPhone }}</span>
</div>
<div class="detail-row">
@ -124,7 +138,11 @@
</base-dialog>
<!-- 图片预览弹窗 -->
<div v-if="previewVisible" class="image-preview-overlay" @click="closePreview">
<div
v-if="previewVisible"
class="image-preview-overlay"
@click="closePreview"
>
<div class="image-preview-container" @click.stop>
<img :src="previewImageUrl" alt="预览" />
<div class="close-preview-btn" @click="closePreview">
@ -163,7 +181,8 @@ const eventInfo = ref({
reporter: "张三",
address: "万州区太白路123号附近",
reportTime: "2023-10-12 14:35:00",
description: "路面出现塌陷面积约2平方米深度约0.5米,已设置警示标志,请尽快处理。",
description:
"路面出现塌陷面积约2平方米深度约0.5米,已设置警示标志,请尽快处理。",
});
//
@ -226,7 +245,7 @@ watch(
//
Object.assign(eventInfo.value, props.eventData);
}
}
},
);
</script>
@ -327,6 +346,7 @@ watch(
display: flex;
flex-direction: column;
gap: 16px;
margin-bottom: 10px;
}
.feedback-item {

View File

@ -379,6 +379,7 @@ watch(
.timeline-list {
display: flex;
flex-direction: column;
margin-bottom: 10px;
gap: 16px;
}

View File

@ -1069,9 +1069,8 @@ watch(
// dateRange
watch(
() => props.dateRange,
async (newVal) => {
console.log("dateRange 变化:", newVal);
if (newVal && newVal.length === 2) {
async (newVal, oldVal) => {
console.log("dateRange 变化:", newVal, oldVal);
//
await getAffectedCountyData();
@ -1092,7 +1091,6 @@ watch(
default:
break;
}
}
},
{ deep: true },
);

View File

@ -34,8 +34,9 @@
<slot name="filter"></slot>
</div>
<!-- 数据表格 -->
<div class="table-section" v-if="props.tableData.length > 0">
<div class="table-section">
<el-table
v-if="props.tableData.length > 0"
:data="props.tableData"
:height="props.tableHeight"
style="width: 100%; min-height: 300px"
@ -59,11 +60,9 @@
</div>
<!-- 分页 -->
<div
class="pagination"
v-if="props.tableData.length > 0 && props.showPagination"
>
<div class="pagination">
<el-pagination
v-if="props.tableData.length > 0 && props.showPagination"
:current-page="props.currentPage"
:page-size="props.pageSize"
:page-sizes="props.pageSizes"

View File

@ -406,21 +406,32 @@ const handleCenterCardClickType = (item) => {
//
const refreshLeftData = ref(null);
const refreshRightData = ref(null);
//
const setRefreshLeftData = (callback) => {
refreshLeftData.value = callback;
};
// right.vue
const setRefreshRightData = (callback) => {
refreshRightData.value = callback;
};
//
const triggerRefreshLeftData = () => {
if (refreshLeftData.value) {
refreshLeftData.value();
}
// right.vue
if (refreshRightData.value) {
refreshRightData.value();
}
};
//
provide("setRefreshLeftData", setRefreshLeftData);
provide("setRefreshRightData", setRefreshRightData);
provide("triggerRefreshLeftData", triggerRefreshLeftData);
// ==================== ====================

View File

@ -116,7 +116,9 @@
<SectionHeader title="响应调度">
<template #right>
<div class="header-filters">
<span class="filter-item active">本轮</span>
<span class="filter-item active" @click="handleDateRangeClick()"
>本轮</span
>
<div class="date-range-wrapper">
<el-date-picker
v-model="dateRange"
@ -304,6 +306,11 @@ const handleDateChange = (val) => {
dateRange.value = val;
dispatchLoadLoad();
};
//
const handleDateRangeClick = (val) => {
dateRange.value = [];
dispatchLoadLoad();
};
//
const dateRange = ref([]);
//
@ -438,16 +445,20 @@ const scheduleStatisticsByCountyLoad = async () => {
//
const mergeLiangjiangNewArea = (arr) => {
const yubeiItems = arr.filter(item => item.countyName === "渝北区");
const jiangbeiItems = arr.filter(item => item.countyName === "江北区");
const yubeiItems = arr.filter((item) => item.countyName === "渝北区");
const jiangbeiItems = arr.filter(
(item) => item.countyName === "江北区",
);
if (yubeiItems.length > 0 || jiangbeiItems.length > 0) {
//
const mergedItem = {
countyName: "两江新区",
countyId: yubeiItems[0]?.countyId || jiangbeiItems[0]?.countyId || "",
countyId:
yubeiItems[0]?.countyId || jiangbeiItems[0]?.countyId || "",
type: yubeiItems[0]?.type || jiangbeiItems[0]?.type || "",
roadType: yubeiItems[0]?.roadType || jiangbeiItems[0]?.roadType || "",
roadType:
yubeiItems[0]?.roadType || jiangbeiItems[0]?.roadType || "",
//
noticeCount: 0,
replyCount: 0,
@ -456,7 +467,7 @@ const scheduleStatisticsByCountyLoad = async () => {
};
//
yubeiItems.forEach(item => {
yubeiItems.forEach((item) => {
mergedItem.noticeCount += item.noticeCount || 0;
mergedItem.replyCount += item.replyCount || 0;
mergedItem.population += item.population || 0;
@ -464,7 +475,7 @@ const scheduleStatisticsByCountyLoad = async () => {
});
//
jiangbeiItems.forEach(item => {
jiangbeiItems.forEach((item) => {
mergedItem.noticeCount += item.noticeCount || 0;
mergedItem.replyCount += item.replyCount || 0;
mergedItem.population += item.population || 0;
@ -472,8 +483,9 @@ const scheduleStatisticsByCountyLoad = async () => {
});
//
const filteredArr = arr.filter(item =>
item.countyName !== "渝北区" && item.countyName !== "江北区"
const filteredArr = arr.filter(
(item) =>
item.countyName !== "渝北区" && item.countyName !== "江北区",
);
filteredArr.push(mergedItem);
return filteredArr;

View File

@ -116,7 +116,9 @@
<SectionHeader title="受灾情况">
<template #right>
<div class="header-filters">
<span class="filter-item active">本轮</span>
<span class="filter-item active" @click="handleDateRangeClick()"
>1本轮</span
>
<div class="date-range-wrapper">
<el-date-picker
v-model="dateRange"
@ -128,6 +130,7 @@
popper-class="custom-date-picker"
:teleported="false"
:prefix-icon="Calendar"
@change="handleDateChange"
/>
</div>
</div>
@ -194,7 +197,7 @@
</template>
<script setup>
import { ref, computed, onMounted } from "vue";
import { ref, computed, onMounted, inject } from "vue";
import { request } from "@/utils/request";
import SectionHeader from "./component/sectionHeader.vue";
@ -223,14 +226,37 @@ const emit = defineEmits([
"openResourceDetail",
]);
//
onMounted(() => {
//
const setRefreshRightData = inject("setRefreshRightData");
//
const refreshData = () => {
console.log("right.vue 刷新数据");
getYhYjllList();
getYhYjllListMaterials();
getControlStats();
getRescueInputStats();
getDisasterStats();
};
//
onMounted(() => {
refreshData();
//
if (setRefreshRightData) {
setRefreshRightData(refreshData);
}
});
//
const handleDateChange = (val) => {
dateRange.value = val;
getDisasterStats();
};
//
const handleDateRangeClick = (val) => {
dateRange.value = [];
getDisasterStats();
};
//
const getYhYjllList = async () => {

View File

@ -1,7 +1,9 @@
<template>
<div class="filter-header">
<div class="filter-container">
<span class="filter-item active">本轮</span>
<span class="filter-item active" @click="handleDateRangeClick()"
>本轮</span
>
<div class="date-range-wrapper">
<el-date-picker
v-model="dateRange"
@ -38,12 +40,18 @@ const setEndOfDay = (date) => {
d.setHours(23, 59, 59, 999);
return d;
};
//
const handleDateRangeClick = () => {
dateRange.value = [];
triggerRefreshLeftData();
emit("dateRangeChange", []);
};
// dateRange
watch(
dateRange,
(newVal, oldVal) => {
//
console.log("dateRange 变化:", newVal, oldVal);
if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
console.log("dateRange 发生变化:", newVal);