增加重大事情弹窗,修改3d大屏的页面数据,修改ai弹窗数据,
This commit is contained in:
parent
1b08e596a0
commit
57fa628844
@ -1,17 +1,17 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="map-viewer">
|
<div class="map-viewer">
|
||||||
<!-- Cesium 地图容器 -->
|
<!-- Cesium 地图容器 -->
|
||||||
<MapViewport />
|
<!-- <MapViewport /> -->
|
||||||
|
|
||||||
<!-- 地图控制工具 - 使用 Teleport 传送到更高层级 -->
|
<!-- 地图控制工具 - 使用 Teleport 传送到更高层级 -->
|
||||||
<!-- 延迟渲染确保目标元素已存在 -->
|
<!-- 延迟渲染确保目标元素已存在 -->
|
||||||
<Teleport to="#sa-controls" v-if="isMounted">
|
<!-- <Teleport to="#sa-controls" v-if="isMounted">
|
||||||
<MapControls
|
<MapControls
|
||||||
:active-tool-key="activeToolKey"
|
:active-tool-key="activeToolKey"
|
||||||
@tool-change="handleToolChange"
|
@tool-change="handleToolChange"
|
||||||
@device-watch="handleDeviceWatch"
|
@device-watch="handleDeviceWatch"
|
||||||
/>
|
/>
|
||||||
</Teleport>
|
</Teleport> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@ -45,11 +45,7 @@
|
|||||||
<div class="hierarchy-left">
|
<div class="hierarchy-left">
|
||||||
<div v-for="(level, index) in hierarchyLevels" :key="level.key" class="level-item">
|
<div v-for="(level, index) in hierarchyLevels" :key="level.key" class="level-item">
|
||||||
<!-- 层级节点 -->
|
<!-- 层级节点 -->
|
||||||
<div
|
<div class="level-node" :class="[level.key, { active: activeLevel === level.key }]" @click="activeLevel = level.key">
|
||||||
class="level-node"
|
|
||||||
:class="[level.key, { active: activeLevel === level.key }]"
|
|
||||||
@click="activeLevel = level.key"
|
|
||||||
>
|
|
||||||
<img :src="level.icon" class="level-icon" alt="" />
|
<img :src="level.icon" class="level-icon" alt="" />
|
||||||
<span class="level-name">{{ level.name }}</span>
|
<span class="level-name">{{ level.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -69,14 +65,7 @@
|
|||||||
:key="tab.key"
|
:key="tab.key"
|
||||||
class="hierarchy-tab"
|
class="hierarchy-tab"
|
||||||
:class="{ active: activeHierarchyTab === tab.key }"
|
:class="{ active: activeHierarchyTab === tab.key }"
|
||||||
@click="
|
@click="handleHierarchyTabClick(tab.key)"
|
||||||
activeHierarchyTab = tab.key;
|
|
||||||
if (tab.key == 'city-dept') {
|
|
||||||
activeImpactTab = 'point';
|
|
||||||
} else {
|
|
||||||
activeImpactTab = 'aiiType';
|
|
||||||
}
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
{{ tab.label }}
|
{{ tab.label }}
|
||||||
</div>
|
</div>
|
||||||
@ -89,10 +78,7 @@
|
|||||||
:key="tab.key"
|
:key="tab.key"
|
||||||
class="hierarchy-tab"
|
class="hierarchy-tab"
|
||||||
:class="{ active: activeHierarchyTab === tab.key }"
|
:class="{ active: activeHierarchyTab === tab.key }"
|
||||||
@click="
|
@click="handleDistrictTabClick(tab.key)"
|
||||||
activeHierarchyTab = tab.key;
|
|
||||||
activeImpactTab = 'point';
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
{{ tab.label }}
|
{{ tab.label }}
|
||||||
</div>
|
</div>
|
||||||
@ -105,12 +91,7 @@
|
|||||||
:key="tab.key"
|
:key="tab.key"
|
||||||
class="hierarchy-tab"
|
class="hierarchy-tab"
|
||||||
:class="{ active: activeHierarchyTab === tab.key }"
|
:class="{ active: activeHierarchyTab === tab.key }"
|
||||||
@click="
|
@click="handleFrontlineTabClick(tab.key)"
|
||||||
activeHierarchyTab = tab.key;
|
|
||||||
if (tab.key == 'frontline-whistle' || tab.key == 'frontline-guard') {
|
|
||||||
activeImpactTab = 'project';
|
|
||||||
}
|
|
||||||
"
|
|
||||||
>
|
>
|
||||||
{{ tab.label }}
|
{{ tab.label }}
|
||||||
</div>
|
</div>
|
||||||
@ -145,7 +126,7 @@
|
|||||||
{{ currentWarningInfo.emergency }}
|
{{ currentWarningInfo.emergency }}
|
||||||
</div>
|
</div>
|
||||||
<div class="suggestion-content" v-else-if="'district-leader' == activeHierarchyTab">
|
<div class="suggestion-content" v-else-if="'district-leader' == activeHierarchyTab">
|
||||||
{{ currentWarningInfo.leader }}
|
{{ currentWarningInfo.districtLeader }}
|
||||||
</div>
|
</div>
|
||||||
<div class="suggestion-content" v-else-if="'district-person' == activeHierarchyTab">
|
<div class="suggestion-content" v-else-if="'district-person' == activeHierarchyTab">
|
||||||
{{ currentWarningInfo.person }}
|
{{ currentWarningInfo.person }}
|
||||||
@ -154,23 +135,14 @@
|
|||||||
<div class="suggestion-content" v-else-if="'frontline-guard' == activeHierarchyTab">
|
<div class="suggestion-content" v-else-if="'frontline-guard' == activeHierarchyTab">
|
||||||
{{ currentWarningInfo.guard }}
|
{{ currentWarningInfo.guard }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="suggestion-content" v-else-if="'frontline-whistle' == activeHierarchyTab">
|
||||||
class="suggestion-content"
|
|
||||||
v-else-if="'frontline-whistle' == activeHierarchyTab"
|
|
||||||
>
|
|
||||||
{{ currentWarningInfo.whistle }}
|
{{ currentWarningInfo.whistle }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="suggestion-content" v-else-if="'frontline-contractor' == activeHierarchyTab">
|
||||||
class="suggestion-content"
|
|
||||||
v-else-if="'frontline-contractor' == activeHierarchyTab"
|
|
||||||
>
|
|
||||||
{{ currentWarningInfo.contractor }}
|
{{ currentWarningInfo.contractor }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="suggestion-content" v-else-if="'frontline-person' == activeHierarchyTab">
|
||||||
class="suggestion-content"
|
{{ currentWarningInfo.frontlinePerson }}
|
||||||
v-else-if="'frontline-person' == activeHierarchyTab"
|
|
||||||
>
|
|
||||||
{{ currentWarningInfo.person }}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -188,14 +160,8 @@
|
|||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div class="display jc_sb ai_center">
|
<div class="display jc_sb ai_center">
|
||||||
<div class="section-label">影响范围:</div>
|
<div class="section-label">重点影响范围:</div>
|
||||||
<div
|
<div class="impact-tabs" v-if="'district-leader' == activeHierarchyTab || 'district-person' == activeHierarchyTab">
|
||||||
class="impact-tabs"
|
|
||||||
v-if="
|
|
||||||
'district-leader' == activeHierarchyTab ||
|
|
||||||
'district-person' == activeHierarchyTab
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
v-for="tab in impactTabs"
|
v-for="tab in impactTabs"
|
||||||
:key="tab.key"
|
:key="tab.key"
|
||||||
@ -228,58 +194,38 @@
|
|||||||
:header-cell-style="headerCellStyle"
|
:header-cell-style="headerCellStyle"
|
||||||
:cell-style="cellStyle"
|
:cell-style="cellStyle"
|
||||||
size="small"
|
size="small"
|
||||||
height="150"
|
|
||||||
>
|
>
|
||||||
<el-table-column prop="label" label="类型" width="" align="center" />
|
<el-table-column prop="label" label="类型" align="center" />
|
||||||
<el-table-column prop="number" label="数量" width="" align="center" />
|
<el-table-column prop="number" label="数量" align="center" />
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
v-if="activeImpactTab === 'point'"
|
v-if="activeImpactTab === 'point'"
|
||||||
:data="currentImpactData"
|
:data="currentImpactData"
|
||||||
style="background: transparent"
|
style="background: transparent; width: 368px"
|
||||||
:header-cell-style="headerCellStyle"
|
:header-cell-style="headerCellStyle"
|
||||||
:cell-style="cellStyle"
|
:cell-style="cellStyle"
|
||||||
size="small"
|
size="small"
|
||||||
height="150"
|
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" width="" align="center" />
|
<el-table-column type="index" label="序号" align="center" />
|
||||||
<el-table-column prop="area" label="影响区域" width="" align="center" />
|
<el-table-column prop="area" label="影响区域" align="center" />
|
||||||
<el-table-column prop="roadCode" label="线路编号" width="" align="center" />
|
<el-table-column prop="roadCode" label="线路编号" align="center" />
|
||||||
<el-table-column prop="type" label="类型" width="" align="center" />
|
<el-table-column prop="type" label="类型" align="center" />
|
||||||
<el-table-column
|
<el-table-column prop="stake" label="桩号" align="center" show-overflow-tooltip />
|
||||||
prop="stake"
|
|
||||||
label="桩号"
|
|
||||||
width=""
|
|
||||||
align="center"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
<el-table
|
<el-table
|
||||||
v-if="activeImpactTab === 'project'"
|
v-if="activeImpactTab === 'project'"
|
||||||
:data="impactProjectDataTable"
|
:data="impactProjectDataTable"
|
||||||
style="background: transparent"
|
style="background: transparent; width: 368px"
|
||||||
:header-cell-style="headerCellStyle"
|
:header-cell-style="headerCellStyle"
|
||||||
:cell-style="cellStyle"
|
:cell-style="cellStyle"
|
||||||
size="small"
|
size="small"
|
||||||
height="150"
|
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" width="" align="center" />
|
<el-table-column type="index" label="序号" align="center" />
|
||||||
<el-table-column prop="area" label="影响区域" width="" align="center" />
|
<el-table-column prop="area" label="影响区域" align="center" />
|
||||||
<el-table-column prop="projectName" label="项目名称" width="70" align="center" />
|
<el-table-column prop="projectName" label="项目名称" align="center" />
|
||||||
<el-table-column
|
<el-table-column prop="projectAddress" label="驻地地址" align="center" />
|
||||||
prop="projectAddress"
|
<el-table-column prop="lineNumber" label="线路编号" align="center" show-overflow-tooltip />
|
||||||
label="项目地址"
|
|
||||||
width=""
|
|
||||||
align="center"
|
|
||||||
/>
|
|
||||||
<el-table-column
|
|
||||||
prop="lineNumber"
|
|
||||||
label="线路编号"
|
|
||||||
width=""
|
|
||||||
align="center"
|
|
||||||
show-overflow-tooltip
|
|
||||||
/>
|
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -291,13 +237,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, watch } from 'vue';
|
import { ref, computed, watch } from 'vue'
|
||||||
import { DArrowRight, Folder } from '@element-plus/icons-vue';
|
import { DArrowRight, Folder } from '@element-plus/icons-vue'
|
||||||
import baseDialog from '../component/baseDialog.vue';
|
import baseDialog from '../component/baseDialog.vue'
|
||||||
import cityIcon from '../../../assets/RiskWarning_img/市级icon.png';
|
import cityIcon from '../../../assets/RiskWarning_img/市级icon.png'
|
||||||
import districtIcon from '../../../assets/RiskWarning_img/区县icon.png';
|
import districtIcon from '../../../assets/RiskWarning_img/区县icon.png'
|
||||||
import frontlineIcon from '../../../assets/RiskWarning_img/一线icon.png';
|
import frontlineIcon from '../../../assets/RiskWarning_img/一线icon.png'
|
||||||
import AIIcon from '../../../assets/RiskWarning_img/AI.png';
|
import AIIcon from '../../../assets/RiskWarning_img/AI.png'
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
visible: {
|
visible: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
@ -307,9 +253,9 @@ const props = defineProps({
|
|||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
|
|
||||||
const emit = defineEmits(['update:visible', 'close']);
|
const emit = defineEmits(['update:visible', 'close'])
|
||||||
|
|
||||||
// ==================== 数据定义 ====================
|
// ==================== 数据定义 ====================
|
||||||
|
|
||||||
@ -320,7 +266,7 @@ const warningData = ref({
|
|||||||
'黔江区气象台2026年4月16日01时00分发布“暴雨红色预警信号”,过去1小时,双槐雨量已达90毫米,预计6日1:00-7:00,濯水镇街强降水仍将持续,未来6小时累计雨量将达90~160毫米,最大小时雨强将达80~100毫米,局地伴有雷电、阵性大风,地质灾害、中小河流洪水、山洪、城乡积涝等灾害风险高,请注意防范。',
|
'黔江区气象台2026年4月16日01时00分发布“暴雨红色预警信号”,过去1小时,双槐雨量已达90毫米,预计6日1:00-7:00,濯水镇街强降水仍将持续,未来6小时累计雨量将达90~160毫米,最大小时雨强将达80~100毫米,局地伴有雷电、阵性大风,地质灾害、中小河流洪水、山洪、城乡积涝等灾害风险高,请注意防范。',
|
||||||
effectiveTime: '',
|
effectiveTime: '',
|
||||||
expireTime: '',
|
expireTime: '',
|
||||||
});
|
})
|
||||||
|
|
||||||
// 层级结构数据
|
// 层级结构数据
|
||||||
const hierarchyLevels = ref([
|
const hierarchyLevels = ref([
|
||||||
@ -342,27 +288,27 @@ const hierarchyLevels = ref([
|
|||||||
name: '一线',
|
name: '一线',
|
||||||
icon: frontlineIcon,
|
icon: frontlineIcon,
|
||||||
},
|
},
|
||||||
]);
|
])
|
||||||
|
|
||||||
// 右侧选项卡数据
|
// 右侧选项卡数据
|
||||||
const hierarchyTabs = ref([
|
const hierarchyTabs = ref([
|
||||||
{ key: 'city-leader', label: '中心领导', parentKey: 'city' },
|
{ key: 'city-leader', label: '中心领导', parentKey: 'city' },
|
||||||
{ key: 'city-dept', label: '处室负责人', parentKey: 'city' },
|
{ key: 'city-dept', label: '处室负责人', parentKey: 'city' },
|
||||||
{ key: 'city-emergency', label: '中心应急办', parentKey: 'city' },
|
{ key: 'city-emergency', label: '中心应急办', parentKey: 'city' },
|
||||||
]);
|
])
|
||||||
const districtTabsMap = ref([
|
const districtTabsMap = ref([
|
||||||
{ key: 'district-leader', label: '公路交通部门领导', parentKey: 'district' },
|
{ key: 'district-leader', label: '公路交通部门领导', parentKey: 'district' },
|
||||||
{ key: 'district-person', label: '养护站长/路长办', parentKey: 'district' },
|
{ key: 'district-person', label: '养护站长/路长办', parentKey: 'district' },
|
||||||
]);
|
])
|
||||||
const frontlineTabsMap = ref([
|
const frontlineTabsMap = ref([
|
||||||
{ key: 'frontline-guard', label: '护路员', parentKey: 'frontline' },
|
{ key: 'frontline-guard', label: '护路员', parentKey: 'frontline' },
|
||||||
{ key: 'frontline-whistle', label: '建设单位包保责任人', parentKey: 'frontline' },
|
{ key: 'frontline-whistle', label: '建设单位包保责任人', parentKey: 'frontline' },
|
||||||
{ key: 'frontline-contractor', label: '施工单位包保责任人', parentKey: 'frontline' },
|
{ key: 'frontline-contractor', label: '施工单位包保责任人', parentKey: 'frontline' },
|
||||||
{ key: 'frontline-person', label: '吹哨人', parentKey: 'frontline' },
|
{ key: 'frontline-person', label: '吹哨人', parentKey: 'frontline' },
|
||||||
]);
|
])
|
||||||
|
|
||||||
const activeHierarchyTab = ref('city-leader');
|
const activeHierarchyTab = ref('city-leader')
|
||||||
const activeLevel = ref('city');
|
const activeLevel = ref('city')
|
||||||
|
|
||||||
// 预警信息标签页
|
// 预警信息标签页
|
||||||
const warningTabs = ref([
|
const warningTabs = ref([
|
||||||
@ -371,15 +317,15 @@ const warningTabs = ref([
|
|||||||
label: '公路中心领导',
|
label: '公路中心领导',
|
||||||
content:
|
content:
|
||||||
'黔江区气象台2026年4月16日01时00分发布"暴雨红色预警信号",过去1小时,双槐雨量已达90毫米,预计6日1:00-7:00,濯水镇街强降水仍将持续,未来6小时累计雨量将达90~160毫米,最大小时雨强将达80~100毫米,局地伴有雷电、阵性大风,地质灾害、中小河流洪水、山洪、城乡积涝等灾害风险高,请注意防范。',
|
'黔江区气象台2026年4月16日01时00分发布"暴雨红色预警信号",过去1小时,双槐雨量已达90毫米,预计6日1:00-7:00,濯水镇街强降水仍将持续,未来6小时累计雨量将达90~160毫米,最大小时雨强将达80~100毫米,局地伴有雷电、阵性大风,地质灾害、中小河流洪水、山洪、城乡积涝等灾害风险高,请注意防范。',
|
||||||
leader:
|
leader: '按照相关指南,启动I级防御响应,请领导在岗值班,主持召开或参加部署调度会,及时跟踪、研究、部署灾害防范和应急保通工作,安排开展督导帮扶。',
|
||||||
'按照相关指南,启动I级防御响应,请领导在岗值班,主持召开或参加部署调度会,及时跟踪、研究、部署灾害防范和应急保通工作,安排开展督导帮扶。',
|
dept: '照相关指南,启动I级防御响应,请处室负责人和相关人员在岗值班,参加部署调度会,分析研判影响区县、重点路段和项目,部署本领域调度核查工作,督促本领域落实5个关口防御应对措施,参加工作组开展指导帮扶,及时收集分析、研究部署本领域防范应对、受灾和抢险救援保通工作。',
|
||||||
dept: '按照相关指南,启动I级防御响应,请处室负责人和相关人员在岗值班,参加部署调度会,分析研判影响区县、重点路段和项目,部署本领域调度核查工作,督促本领域落实5个关口防御应对措施,参加工作组开展指导帮扶,及时收集分析、研究部署本领域防范应对、受灾和抢险救援保通工作。',
|
|
||||||
emergency:
|
emergency:
|
||||||
'按照相关指南,启动I级防御响应,请相关人员在岗值班,准备并参加部署调度会,开展预警叫应,组织分析研判影响区县、重点路段和项目等风险要素,部署市级公路应急中心全员做好应急抢险准备,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
'按照相关指南,启动I级防御响应,请相关人员在岗值班,准备并参加部署调度会,开展预警叫应,组织分析研判影响区县、重点路段和项目等风险要素,部署市级公路应急中心全员做好应急抢险准备,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
||||||
leader:
|
|
||||||
|
districtLeader:
|
||||||
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,视情召开部署调度会,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危、告警阻拦、交通管控和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,视情召开部署调度会,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危、告警阻拦、交通管控和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
||||||
person:
|
person:
|
||||||
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,视情召开部署调度会,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危、告警阻拦、交通管控和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危、告警阻拦、交通管控等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
||||||
|
|
||||||
guard:
|
guard:
|
||||||
'按照相关要求,启动I级防御响应,并请及时关注地质、水文等风险提示信息,落实主动封闭管控措施,请立即按照2小时一次频率对你管养的重点路段进行巡查,重点巡查较高及以上风险路段、涉灾隐患点、地质条件复杂路段、临河临崖路段,重点关注涉水桥梁基础及墩台、不良地质隧道、隧道洞口边仰坡及侧切结构、高陡边坡支挡防护以及防排水设施,发现异常情况,立即向上报告,采取紧急排危、告警阻拦、交通管控等措施,并及时报送工作开展情况。',
|
'按照相关要求,启动I级防御响应,并请及时关注地质、水文等风险提示信息,落实主动封闭管控措施,请立即按照2小时一次频率对你管养的重点路段进行巡查,重点巡查较高及以上风险路段、涉灾隐患点、地质条件复杂路段、临河临崖路段,重点关注涉水桥梁基础及墩台、不良地质隧道、隧道洞口边仰坡及侧切结构、高陡边坡支挡防护以及防排水设施,发现异常情况,立即向上报告,采取紧急排危、告警阻拦、交通管控等措施,并及时报送工作开展情况。',
|
||||||
@ -387,30 +333,55 @@ const warningTabs = ref([
|
|||||||
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
||||||
contractor:
|
contractor:
|
||||||
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
'按照相关指南,请根据暴雨预警级别启动相应等级防御响应,请及时关注地质、水文等风险提示信息,做好会商研判,严格值班值守,落实预警叫应、部署调度、督导帮扶、力量预置、巡查排危和“关停撤转”等措施,及时跟踪分析、研究部署防范应对、受灾和抢险救援保通工作。',
|
||||||
},
|
|
||||||
|
|
||||||
{ key: 'dept', label: '处室负责人', content: '', suggestion: '' },
|
frontlinePerson:
|
||||||
{ key: 'emergency', label: '中心应急办', content: '', suggestion: '' },
|
'按照相关要求,启动I级防御响应,并请及时关注地质、水文等风险提示信息,落实主动“关停撤转”措施,应急抢险人员和吹哨人全员在岗值班,做好应急装备物资检修,并请立即对你项目的重点部位进行巡查,重点巡查两区三厂、大型设施设备、取弃土(渣)场、砂石料场、涉水桥梁、富水隧道、围堰、支架脚手架、高切坡、深基坑、滑坡处置等部位,发现异常情况,立即向上报告,采取紧急排危、吹哨撤转等措施,并及时报送工作开展情况。',
|
||||||
]);
|
},
|
||||||
const activeWarningTab = ref('leader');
|
])
|
||||||
|
const activeWarningTab = ref('leader')
|
||||||
|
|
||||||
// 当前选中的预警信息
|
// 当前选中的预警信息
|
||||||
const currentWarningInfo = computed(() => {
|
const currentWarningInfo = computed(() => {
|
||||||
const tab = warningTabs.value.find(t => t.key === activeWarningTab.value);
|
// const tab = warningTabs.value.find((t) => t.key === activeWarningTab.value)
|
||||||
return tab || warningTabs.value[0];
|
// console.log(tab)
|
||||||
});
|
return warningTabs.value[0]
|
||||||
|
})
|
||||||
|
|
||||||
// 影响范围标签页
|
// 影响范围标签页
|
||||||
const impactTabs = ref([
|
const impactTabs = ref([
|
||||||
{ key: 'point', label: '影响点' },
|
{ key: 'point', label: '影响点' },
|
||||||
{ key: 'project', label: '影响驻地' },
|
{ key: 'project', label: '影响驻地' },
|
||||||
]);
|
])
|
||||||
const activeImpactTab = ref('project');
|
const activeImpactTab = ref('project')
|
||||||
|
|
||||||
// 影响点数据
|
// 影响点数据
|
||||||
const impactPointData = ref([]);
|
const impactPointData = ref([])
|
||||||
// 影响项目数据
|
// 影响项目数据
|
||||||
const impactProjectData = ref([]);
|
const impactProjectData = ref([])
|
||||||
|
|
||||||
|
// 处理层级选项卡点击
|
||||||
|
const handleHierarchyTabClick = (key) => {
|
||||||
|
activeHierarchyTab.value = key
|
||||||
|
if (key == 'city-dept') {
|
||||||
|
activeImpactTab.value = 'point'
|
||||||
|
} else {
|
||||||
|
activeImpactTab.value = 'aiiType'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理区县级选项卡点击
|
||||||
|
const handleDistrictTabClick = (key) => {
|
||||||
|
activeHierarchyTab.value = key
|
||||||
|
activeImpactTab.value = 'point'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理一线选项卡点击
|
||||||
|
const handleFrontlineTabClick = (key) => {
|
||||||
|
activeHierarchyTab.value = key
|
||||||
|
if (key == 'frontline-whistle' || key == 'frontline-guard') {
|
||||||
|
activeImpactTab.value = 'project'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const aiiTypeArr = ref([
|
const aiiTypeArr = ref([
|
||||||
{ number: '2', label: '影响区县' },
|
{ number: '2', label: '影响区县' },
|
||||||
@ -418,7 +389,7 @@ const aiiTypeArr = ref([
|
|||||||
{ number: '21', label: '桥梁' },
|
{ number: '21', label: '桥梁' },
|
||||||
{ number: '21', label: '隧道' },
|
{ number: '21', label: '隧道' },
|
||||||
{ number: '21', label: '驻地' },
|
{ number: '21', label: '驻地' },
|
||||||
]);
|
])
|
||||||
// 影响项目
|
// 影响项目
|
||||||
const impactProjectDataTable = ref([
|
const impactProjectDataTable = ref([
|
||||||
{
|
{
|
||||||
@ -435,7 +406,7 @@ const impactProjectDataTable = ref([
|
|||||||
projectAddress: '',
|
projectAddress: '',
|
||||||
lineNumber: 'G318',
|
lineNumber: 'G318',
|
||||||
},
|
},
|
||||||
]);
|
])
|
||||||
|
|
||||||
// 当前影响范围数据
|
// 当前影响范围数据
|
||||||
const currentImpactData = computed(() => {
|
const currentImpactData = computed(() => {
|
||||||
@ -454,8 +425,8 @@ const currentImpactData = computed(() => {
|
|||||||
type: '隧道',
|
type: '隧道',
|
||||||
stake: '336.850-336.900',
|
stake: '336.850-336.900',
|
||||||
},
|
},
|
||||||
];
|
]
|
||||||
});
|
})
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
const headerCellStyle = () => ({
|
const headerCellStyle = () => ({
|
||||||
@ -464,7 +435,8 @@ const headerCellStyle = () => ({
|
|||||||
fontSize: '12px',
|
fontSize: '12px',
|
||||||
fontWeight: 'bold',
|
fontWeight: 'bold',
|
||||||
borderBottom: '1px solid rgba(24, 242, 249, 0.2)',
|
borderBottom: '1px solid rgba(24, 242, 249, 0.2)',
|
||||||
});
|
padding: '0',
|
||||||
|
})
|
||||||
|
|
||||||
const cellStyle = () => ({
|
const cellStyle = () => ({
|
||||||
background: '#1C659E',
|
background: '#1C659E',
|
||||||
@ -472,19 +444,19 @@ const cellStyle = () => ({
|
|||||||
fontSize: '12px',
|
fontSize: '12px',
|
||||||
borderBottom: '1px solid #175E91',
|
borderBottom: '1px solid #175E91',
|
||||||
textAlign: 'center',
|
textAlign: 'center',
|
||||||
});
|
})
|
||||||
|
|
||||||
// ==================== 方法 ====================
|
// ==================== 方法 ====================
|
||||||
|
|
||||||
// 关闭对话框
|
// 关闭对话框
|
||||||
const handleClose = () => {
|
const handleClose = () => {
|
||||||
emit('update:visible', false);
|
emit('update:visible', false)
|
||||||
emit('close');
|
emit('close')
|
||||||
};
|
}
|
||||||
|
|
||||||
// 初始化数据
|
// 初始化数据
|
||||||
const initData = data => {
|
const initData = (data) => {
|
||||||
if (!data) return;
|
if (!data) return
|
||||||
|
|
||||||
// 气象预警信息
|
// 气象预警信息
|
||||||
if (data.warning) {
|
if (data.warning) {
|
||||||
@ -493,56 +465,56 @@ const initData = data => {
|
|||||||
publishContent: data.warning.publishContent || '',
|
publishContent: data.warning.publishContent || '',
|
||||||
effectiveTime: data.warning.effectiveTime || '',
|
effectiveTime: data.warning.effectiveTime || '',
|
||||||
expireTime: data.warning.expireTime || '',
|
expireTime: data.warning.expireTime || '',
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 层级结构
|
// 层级结构
|
||||||
if (data.hierarchyLevels) {
|
if (data.hierarchyLevels) {
|
||||||
hierarchyLevels.value = data.hierarchyLevels;
|
hierarchyLevels.value = data.hierarchyLevels
|
||||||
}
|
}
|
||||||
|
|
||||||
// 右侧选项卡
|
// 右侧选项卡
|
||||||
if (data.hierarchyTabs) {
|
if (data.hierarchyTabs) {
|
||||||
hierarchyTabs.value = data.hierarchyTabs;
|
hierarchyTabs.value = data.hierarchyTabs
|
||||||
}
|
}
|
||||||
if (data.districtTabsMap) {
|
if (data.districtTabsMap) {
|
||||||
districtTabsMap.value = data.districtTabsMap;
|
districtTabsMap.value = data.districtTabsMap
|
||||||
}
|
}
|
||||||
if (data.frontlineTabsMap) {
|
if (data.frontlineTabsMap) {
|
||||||
frontlineTabsMap.value = data.frontlineTabsMap;
|
frontlineTabsMap.value = data.frontlineTabsMap
|
||||||
}
|
}
|
||||||
if (data.activeHierarchyTab) {
|
if (data.activeHierarchyTab) {
|
||||||
activeHierarchyTab.value = data.activeHierarchyTab;
|
activeHierarchyTab.value = data.activeHierarchyTab
|
||||||
}
|
}
|
||||||
if (data.activeLevel) {
|
if (data.activeLevel) {
|
||||||
activeLevel.value = data.activeLevel;
|
activeLevel.value = data.activeLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
// 预警信息标签页
|
// 预警信息标签页
|
||||||
if (data.warningTabs) {
|
if (data.warningTabs) {
|
||||||
warningTabs.value = data.warningTabs;
|
warningTabs.value = data.warningTabs
|
||||||
}
|
}
|
||||||
|
|
||||||
// 影响范围数据
|
// 影响范围数据
|
||||||
if (data.impactPointData) {
|
if (data.impactPointData) {
|
||||||
impactPointData.value = data.impactPointData;
|
impactPointData.value = data.impactPointData
|
||||||
}
|
}
|
||||||
if (data.impactProjectData) {
|
if (data.impactProjectData) {
|
||||||
impactProjectData.value = data.impactProjectData;
|
impactProjectData.value = data.impactProjectData
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
// ==================== 监听 ====================
|
// ==================== 监听 ====================
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.visible,
|
() => props.visible,
|
||||||
newVal => {
|
(newVal) => {
|
||||||
if (newVal && props.aiData) {
|
if (newVal && props.aiData) {
|
||||||
initData(props.aiData);
|
initData(props.aiData)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true },
|
||||||
);
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@ -895,11 +867,7 @@ watch(
|
|||||||
padding: 6px 16px;
|
padding: 6px 16px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: rgba(255, 255, 255, 0.8);
|
color: rgba(255, 255, 255, 0.8);
|
||||||
background: linear-gradient(
|
background: linear-gradient(180deg, rgba(102, 105, 255, 0.26) 0%, rgba(31, 201, 255, 0.23) 100%);
|
||||||
180deg,
|
|
||||||
rgba(102, 105, 255, 0.26) 0%,
|
|
||||||
rgba(31, 201, 255, 0.23) 100%
|
|
||||||
);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: all 0.3s;
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
|||||||
@ -180,8 +180,8 @@ const fetchData = async () => {
|
|||||||
district: district,
|
district: district,
|
||||||
name: commandData.userName || '-',
|
name: commandData.userName || '-',
|
||||||
phone: commandData.userPhone || '-',
|
phone: commandData.userPhone || '-',
|
||||||
type: commandData.type || '-',
|
type: commandData.x_type || '-',
|
||||||
role: commandData.role || '一般人员',
|
role: commandData.x_role || '一般人员',
|
||||||
dispatchTime: item.createdAt || '-',
|
dispatchTime: item.createdAt || '-',
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -179,24 +179,7 @@ watch(
|
|||||||
const photoList = ref([])
|
const photoList = ref([])
|
||||||
|
|
||||||
// 动态记录
|
// 动态记录
|
||||||
const dynamicRecords = ref([
|
const dynamicRecords = ref([])
|
||||||
// {
|
|
||||||
// type: '首报',
|
|
||||||
// patrolTime: '2026-03-28 14:30:00',
|
|
||||||
// patrolPerson: '刘伟',
|
|
||||||
// description: '设置警示标识,半幅通行',
|
|
||||||
// hasProblem: true,
|
|
||||||
// image: 'https://via.placeholder.com/80x60/40a9ff/ffffff?text=现场',
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// type: '续报',
|
|
||||||
// patrolTime: '2026-03-28 14:30:00',
|
|
||||||
// patrolPerson: '刘伟',
|
|
||||||
// description: '设置警示标识,半幅通行',
|
|
||||||
// hasProblem: false,
|
|
||||||
// image: null,
|
|
||||||
// },
|
|
||||||
])
|
|
||||||
|
|
||||||
// 状态样式
|
// 状态样式
|
||||||
const getStatusClass = (status) => {
|
const getStatusClass = (status) => {
|
||||||
@ -244,6 +227,7 @@ const getPatrolRecord = async (riskPointId) => {
|
|||||||
url: '/snow-ops-platform/risk-point/patrol-record',
|
url: '/snow-ops-platform/risk-point/patrol-record',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params: {
|
params: {
|
||||||
|
// riskPointId: '32be3f9caa034b37a174f0bd56ef6b11',
|
||||||
riskPointId,
|
riskPointId,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -285,14 +269,15 @@ const getPatrolRecord = async (riskPointId) => {
|
|||||||
// 点击遮罩关闭已由base-dialog组件处理
|
// 点击遮罩关闭已由base-dialog组件处理
|
||||||
// 处理影响点类型数据
|
// 处理影响点类型数据
|
||||||
const getAffectedObjectTypeId = (data) => {
|
const getAffectedObjectTypeId = (data) => {
|
||||||
let pointType = props.item.pointType
|
let poinTypeText = props.item.poinTypeText
|
||||||
basicInfo.value = {}
|
basicInfo.value = {}
|
||||||
photoList.value = []
|
photoList.value = []
|
||||||
dynamicRecords.value = []
|
dynamicRecords.value = []
|
||||||
if (!data) {
|
if (!data) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (pointType === '桥梁') {
|
console.log('data:', data, poinTypeText)
|
||||||
|
if (poinTypeText === '桥梁') {
|
||||||
// 更新基本信息 - 根据数据库字段映射
|
// 更新基本信息 - 根据数据库字段映射
|
||||||
basicInfo.value = {
|
basicInfo.value = {
|
||||||
district: data.GL1_QXMC || '-', // 区县名称
|
district: data.GL1_QXMC || '-', // 区县名称
|
||||||
@ -330,7 +315,7 @@ const getAffectedObjectTypeId = (data) => {
|
|||||||
// image: null,
|
// image: null,
|
||||||
// },
|
// },
|
||||||
// ];
|
// ];
|
||||||
} else if (pointType === '边坡') {
|
} else if (poinTypeText === '边坡') {
|
||||||
// 更新基本信息 - 根据边坡接口返回数据映射
|
// 更新基本信息 - 根据边坡接口返回数据映射
|
||||||
basicInfo.value = {
|
basicInfo.value = {
|
||||||
district: data.GL1_QXMC || '-', // 区县名称
|
district: data.GL1_QXMC || '-', // 区县名称
|
||||||
@ -360,7 +345,7 @@ const getAffectedObjectTypeId = (data) => {
|
|||||||
// image: null,
|
// image: null,
|
||||||
// },
|
// },
|
||||||
// ];
|
// ];
|
||||||
} else if (pointType === '隧道') {
|
} else if (poinTypeText === '隧道') {
|
||||||
// 更新基本信息 - 根据隧道数据库字段映射
|
// 更新基本信息 - 根据隧道数据库字段映射
|
||||||
basicInfo.value = {
|
basicInfo.value = {
|
||||||
district: data.GL1_QXMC || '-', // 区县名称
|
district: data.GL1_QXMC || '-', // 区县名称
|
||||||
@ -399,29 +384,30 @@ const getAffectedObjectTypeId = (data) => {
|
|||||||
// image: null,
|
// image: null,
|
||||||
// },
|
// },
|
||||||
// ];
|
// ];
|
||||||
} else if (pointType === '路段') {
|
} else if (poinTypeText === '路段') {
|
||||||
|
console.log('路段数据:', props.item?.rawData)
|
||||||
// 更新基本信息 - 根据路段数据库字段映射
|
// 更新基本信息 - 根据路段数据库字段映射
|
||||||
basicInfo.value = {
|
basicInfo.value = {
|
||||||
district: data.rawData.COUNTY_NAME || '-', // 起点名称(区县)
|
district: data?.rawData?.countyName || '-', // 起点名称(区县)
|
||||||
level: data.rawData.GL1_FXDJ || '未评定', // 技术等级
|
level: data?.rawData?.riskLevel || '未评定', // 技术等级
|
||||||
levelClass: data.rawData.GL1_FXDJ, // 一二级为一般,三四五级为重大
|
levelClass: data?.rawData?.riskLevel, // 一二级为一般,三四五级为重大
|
||||||
roadCode: data.rawData.GL1_LXBH || '-', // 路线编号
|
roadCode: data?.rawData?.roadId || '-', // 路线编号
|
||||||
location: data.pointLocation, // 起点到终点
|
location: data?.rawData?.stationStart + '至' + data?.rawData?.stationEnd, // 起点到终点
|
||||||
riskDesc: data.rawData.GL1_FXMS || '-', // 风险点
|
riskDesc: data?.rawData?.riskDescription || '-', // 风险点
|
||||||
discoverTime: data.rawData.GL1_SBSJ || '-', // 发现时间
|
discoverTime: data?.rawData?.riskFoundAt || '-', // 发现时间
|
||||||
}
|
}
|
||||||
const photos = []
|
const photos = []
|
||||||
// 更新照片列表 - 路段一般没有照片
|
// 更新照片列表 - 路段一般没有照片
|
||||||
if (getImageUrlList(data.item?.RISK_POINT?.GL1_TP).length > 0) {
|
if (getImageUrlList(data?.rawData?.roadImages || '').length > 0) {
|
||||||
photos.push(...getImageUrlList(data.item?.RISK_POINT?.GL1_TP || '')) // 图片
|
photos.push(...getImageUrlList(data?.rawData?.roadImages || '')) // 图片
|
||||||
}
|
}
|
||||||
photoList.value = photos.length > 0 ? photos : []
|
photoList.value = photos.length > 0 ? photos : []
|
||||||
|
|
||||||
console.log('照片列表:', photos)
|
console.log('照片列表:', photos)
|
||||||
|
|
||||||
// 获取巡查记录
|
// 获取巡查记录
|
||||||
const riskPointId = data.item?.RISK_POINT?.GL1_ID
|
const riskPointId = data.rawData?.id
|
||||||
if (riskPointId) {
|
if (riskPointId && data.rawData.type == 'risk-section') {
|
||||||
getPatrolRecord(riskPointId)
|
getPatrolRecord(riskPointId)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -444,18 +430,18 @@ const getAffectedObjectDetail = async () => {
|
|||||||
try {
|
try {
|
||||||
let id = ''
|
let id = ''
|
||||||
let apiUrl = ''
|
let apiUrl = ''
|
||||||
const pointType = props.item?.pointType
|
const poinTypeText = props.item?.poinTypeText
|
||||||
|
|
||||||
if (pointType === '桥梁') {
|
if (poinTypeText === '桥梁') {
|
||||||
id = props.item?.rawData?.GL1_ZJ || ''
|
id = props.item?.rawData?.GL1_ZJ || ''
|
||||||
apiUrl = `/snow-ops-platform/weather-warning/affected-object/bridge/${id}`
|
apiUrl = `/snow-ops-platform/weather-warning/affected-object/bridge/${id}`
|
||||||
} else if (pointType === '边坡') {
|
} else if (poinTypeText === '边坡') {
|
||||||
id = props.item?.rawData?.GL1_ID || ''
|
id = props.item?.rawData?.GL1_ID || ''
|
||||||
apiUrl = `/snow-ops-platform/weather-warning/affected-object/slope/${id}`
|
apiUrl = `/snow-ops-platform/weather-warning/affected-object/slope/${id}`
|
||||||
} else if (pointType === '隧道') {
|
} else if (poinTypeText === '隧道') {
|
||||||
id = props.item?.rawData?.GL1_ZJ || ''
|
id = props.item?.rawData?.GL1_ZJ || ''
|
||||||
apiUrl = `/snow-ops-platform/weather-warning/affected-object/tunnel/${id}`
|
apiUrl = `/snow-ops-platform/weather-warning/affected-object/tunnel/${id}`
|
||||||
} else if (pointType === '路段') {
|
} else if (poinTypeText === '路段') {
|
||||||
id = props.item?.rawData?.GL1ZJ || ''
|
id = props.item?.rawData?.GL1ZJ || ''
|
||||||
apiUrl = `/snow-ops-platform/weather-warning/affected-object/road-section/${id}`
|
apiUrl = `/snow-ops-platform/weather-warning/affected-object/road-section/${id}`
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,7 +52,7 @@
|
|||||||
clearable
|
clearable
|
||||||
@change="handleFilterChange"
|
@change="handleFilterChange"
|
||||||
>
|
>
|
||||||
<el-option v-for="option in pointLevelOptions" :key="option.value" :label="option.label" :value="option.value" />
|
<el-option v-for="option in pointLevelOptionsAll" :key="option.value" :label="option.label" :value="option.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
@ -194,7 +194,7 @@
|
|||||||
import { ref, computed, watch, onMounted, nextTick } from 'vue'
|
import { ref, computed, watch, onMounted, nextTick } from 'vue'
|
||||||
import { Close, ArrowLeft, ArrowRight } from '@element-plus/icons-vue'
|
import { Close, ArrowLeft, ArrowRight } from '@element-plus/icons-vue'
|
||||||
import { request } from '@/utils/request'
|
import { request } from '@/utils/request'
|
||||||
import { pointTypeOptions, pointLevelOptions, regionOptions, roadTypeOptions } from '../component/index.js'
|
import { pointTypeOptions, pointLevelOptionsAll, regionOptions, roadTypeOptions, pointLevelOptions } from '../component/index.js'
|
||||||
import baseDialog from '../component/baseDialog.vue'
|
import baseDialog from '../component/baseDialog.vue'
|
||||||
|
|
||||||
import respondedIcon from '../../../assets/xiangying/有回应@2x.png'
|
import respondedIcon from '../../../assets/xiangying/有回应@2x.png'
|
||||||
@ -414,7 +414,7 @@ const getApiUrlByType = (type) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 点击卡片切换
|
// 点击卡片切换
|
||||||
const handleClick = (index, item) => {
|
const handleClick = async (index, item) => {
|
||||||
tableData.value = []
|
tableData.value = []
|
||||||
cardType.value = index + ''
|
cardType.value = index + ''
|
||||||
cardTypeVal.value = item.type
|
cardTypeVal.value = item.type
|
||||||
@ -422,7 +422,7 @@ const handleClick = (index, item) => {
|
|||||||
tableColumns.value = getColumnsByType(item.type)
|
tableColumns.value = getColumnsByType(item.type)
|
||||||
// 重置分页并获取数据
|
// 重置分页并获取数据
|
||||||
currentPage.value = 1
|
currentPage.value = 1
|
||||||
fetchData()
|
await fetchData()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分页
|
// 分页
|
||||||
@ -540,7 +540,7 @@ const processUnifiedData = (item, type) => {
|
|||||||
// 影响区域
|
// 影响区域
|
||||||
region: item.GL1_QXMC || item.COUNTY || item.county || item.region || item.ADMINISTRATIVE_REGION || item.COUNTY_NAME || '-',
|
region: item.GL1_QXMC || item.COUNTY || item.county || item.region || item.ADMINISTRATIVE_REGION || item.COUNTY_NAME || '-',
|
||||||
// 影响点类型
|
// 影响点类型
|
||||||
pointType: impactData.value[type].type || '-',
|
poinTypeText: impactData.value[type].type || '-',
|
||||||
// 影响点位置(根据类型取不同字段)
|
// 影响点位置(根据类型取不同字段)
|
||||||
pointLocation: item.GL1_QLMC || item.NAME || item.GL1_SDMC || item.PROJECT_NAME || item.GL1_LXBH || item.name || '-',
|
pointLocation: item.GL1_QLMC || item.NAME || item.GL1_SDMC || item.PROJECT_NAME || item.GL1_LXBH || item.name || '-',
|
||||||
// 影响点等级
|
// 影响点等级
|
||||||
@ -668,39 +668,44 @@ const processUnifiedData = (item, type) => {
|
|||||||
return {
|
return {
|
||||||
...baseData,
|
...baseData,
|
||||||
// 影响区域 - 使用区县名称
|
// 影响区域 - 使用区县名称
|
||||||
region: item.COUNTY_NAME || '-',
|
region: item.countyName || '-',
|
||||||
|
pointType:
|
||||||
|
item.type == 'controlled-section'
|
||||||
|
? '国省道-管控路段'
|
||||||
|
: item.type == 'risk-section'
|
||||||
|
? '国省道-风险路段'
|
||||||
|
: item.type == 'controlled-rural-section' || item.type == 'rural-section'
|
||||||
|
? '农村路段'
|
||||||
|
: '-',
|
||||||
// 影响点位置 - 使用路线名称+起终点桩号
|
// 影响点位置 - 使用路线名称+起终点桩号
|
||||||
pointLocation:
|
pointLocation: (item.roadName || '') + '(' + item.stationStart + '至' + item.stationEnd + ')',
|
||||||
item.GL1_QDZH && item.GL1_ZDZH
|
|
||||||
? item.GL1_LXMC + '(k' + (item.GL1_QDZH + '').replace('.', '+') + '至k' + (item.GL1_ZDZH + '').replace('.', '+') + ')'
|
|
||||||
: item.GL1_LXMC,
|
|
||||||
// 影响点等级 - 使用风险等级
|
// 影响点等级 - 使用风险等级
|
||||||
pointLevel: item.GL1_FXDJ || '',
|
pointLevel: item.riskLevel || '-',
|
||||||
levelClass: getLevelClass(item.GL1_FXDJ),
|
levelClass: getLevelClass(item.riskLevel),
|
||||||
// 交通主管部门负责人 - 使用GL1_JTXM和GL1_JTDH
|
// 交通主管部门负责人 - 使用GL1_JTXM和GL1_JTDH
|
||||||
trafficDept: {
|
trafficDept: {
|
||||||
name: item.GL1_JTXM || '-',
|
name: item.transChiefName || '-',
|
||||||
phone: item.GL1_JTDH || '-',
|
phone: item.transChiefPhone || '-',
|
||||||
},
|
},
|
||||||
// 公路机构责任人 - 使用GL1_JGXM和GL1_JGDH
|
// 公路机构责任人 - 使用GL1_JGXM和GL1_JGDH
|
||||||
roadOrg: {
|
roadOrg: {
|
||||||
name: item.GL1_JGXM || '-',
|
name: item.roadChiefName || '-',
|
||||||
phone: item.GL1_JGDH || '-',
|
phone: item.roadChiefPhone || '-',
|
||||||
},
|
},
|
||||||
// 养护站负责人 - 使用GL1_YHXM和GL1_YHDH
|
// 养护站负责人 - 使用GL1_YHXM和GL1_YHDH
|
||||||
maintenance: {
|
maintenance: {
|
||||||
name: item.GL1_YHXM || '-',
|
name: item.maintStationChiefName || '-',
|
||||||
phone: item.GL1_YHDH || '-',
|
phone: item.maintStationChiefPhone || '-',
|
||||||
},
|
},
|
||||||
// 护路员 - 使用GL1_HLXM和GL1_HLDH
|
// 护路员 - 使用GL1_HLXM和GL1_HLDH
|
||||||
roadKeeper: {
|
roadKeeper: {
|
||||||
name: item.GL1_HLXM || item.ROAD_PATROL_WORKER_NAME || '-',
|
name: item.roadPatrolWorkerName || '-',
|
||||||
phone: item.GL1_HLDH || item.ROAD_PATROL_WORKER_PHONE || '-',
|
phone: item.roadPatrolWorkerPhone || '-',
|
||||||
},
|
},
|
||||||
// 一般人员(路长履职)
|
// 一般人员(路长履职)
|
||||||
generalStaff: {
|
generalStaff: {
|
||||||
name: item.ROAD_CAPTAIN_NAME || '-',
|
name: item.roadCaptainName || '-',
|
||||||
phone: item.ROAD_CAPTAIN_PHONE || '-',
|
phone: item.roadCaptainPhone || '-',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -822,7 +827,7 @@ watch(
|
|||||||
cardTypeVal.value = '路段'
|
cardTypeVal.value = '路段'
|
||||||
console.log('影响点情况=========newVal:', newVal)
|
console.log('影响点情况=========newVal:', newVal)
|
||||||
if (newVal) {
|
if (newVal) {
|
||||||
filterForm.value.region = newVal.countyName
|
// filterForm.value.region = newVal.countyName
|
||||||
currentPage.value = 1
|
currentPage.value = 1
|
||||||
} else {
|
} else {
|
||||||
filterForm.value = {
|
filterForm.value = {
|
||||||
|
|||||||
@ -0,0 +1,250 @@
|
|||||||
|
<template>
|
||||||
|
<base-dialog
|
||||||
|
:visible="props.visible"
|
||||||
|
title="重大事件"
|
||||||
|
:table-data="tableData"
|
||||||
|
:table-columns="tableColumns"
|
||||||
|
:table-height="300"
|
||||||
|
:total="total"
|
||||||
|
:current-page="currentPage"
|
||||||
|
:page-size="pageSize"
|
||||||
|
:max-width="1000"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
@close="handleClose"
|
||||||
|
>
|
||||||
|
<!-- 筛选区域 -->
|
||||||
|
<template #filter>
|
||||||
|
<div class="filter-row">
|
||||||
|
<div class="filter-item">
|
||||||
|
<span class="filter-label">影响区域</span>
|
||||||
|
<el-select
|
||||||
|
:teleported="false"
|
||||||
|
v-model="filterForm.district"
|
||||||
|
placeholder="请选择"
|
||||||
|
class="filter-select"
|
||||||
|
clearable
|
||||||
|
@change="handleFilterChange"
|
||||||
|
>
|
||||||
|
<el-option v-for="item in regionOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<div class="filter-item">
|
||||||
|
<span class="filter-label">类型</span>
|
||||||
|
<el-select :teleported="false" v-model="filterForm.type" placeholder="请选择" class="filter-select" clearable @change="handleFilterChange">
|
||||||
|
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
<div class="filter-item">
|
||||||
|
<span class="filter-label">管控措施</span>
|
||||||
|
<el-select
|
||||||
|
:teleported="false"
|
||||||
|
v-model="filterForm.controlMeasure"
|
||||||
|
placeholder="请选择"
|
||||||
|
class="filter-select"
|
||||||
|
clearable
|
||||||
|
@change="handleFilterChange"
|
||||||
|
>
|
||||||
|
<el-option v-for="item in controlMeasureOptions" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 操作列插槽 -->
|
||||||
|
<template #operation="{ row }">
|
||||||
|
<div class="operation-btn" @click="handleRescue(row)">抢险</div>
|
||||||
|
</template>
|
||||||
|
</base-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, watch } from 'vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
import BaseDialog from '../component/baseDialog.vue'
|
||||||
|
import { controlMeasureOptions, regionOptions, typeOptions } from '../component/index.js'
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
const emit = defineEmits(['update:visible', 'close'])
|
||||||
|
|
||||||
|
// 筛选表单
|
||||||
|
const filterForm = ref({
|
||||||
|
district: '',
|
||||||
|
type: '',
|
||||||
|
controlMeasure: '',
|
||||||
|
})
|
||||||
|
|
||||||
|
// 表格列配置
|
||||||
|
const tableColumns = ref([
|
||||||
|
{ prop: 'id', label: '序号', width: '60' },
|
||||||
|
{ prop: 'district', label: '影响区域', width: '' },
|
||||||
|
{ prop: 'location', label: '阻断小地名', width: '' },
|
||||||
|
{ prop: 'roadCode', label: '线路编号', width: '' },
|
||||||
|
{ prop: 'milepost', label: '起止桩号', width: '' },
|
||||||
|
{ prop: 'occurTime', label: '发生时间', width: '' },
|
||||||
|
{ prop: 'type', label: '类型', width: '' },
|
||||||
|
{ prop: 'controlMeasure', label: '管控措施', width: '' },
|
||||||
|
{ prop: 'operation', label: '操作', width: '', slot: 'operation' },
|
||||||
|
])
|
||||||
|
|
||||||
|
// 表格数据
|
||||||
|
const tableData = ref([
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
district: '巫溪县',
|
||||||
|
location: 'XXX拐弯处',
|
||||||
|
roadCode: 'G242',
|
||||||
|
milepost: '336.800-336.850',
|
||||||
|
occurTime: '2025-08-11 04:53:42',
|
||||||
|
type: '边坡坍塌',
|
||||||
|
controlMeasure: '全幅封闭',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
district: '万州区',
|
||||||
|
location: 'XXX路段',
|
||||||
|
roadCode: 'G242',
|
||||||
|
milepost: '336.800-336.850',
|
||||||
|
occurTime: '2025-08-11 04:53:42',
|
||||||
|
type: '边坡坍塌',
|
||||||
|
controlMeasure: '全幅封闭',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
|
||||||
|
// 分页
|
||||||
|
const currentPage = ref(1)
|
||||||
|
const pageSize = ref(10)
|
||||||
|
const total = ref(tableData.value.length)
|
||||||
|
|
||||||
|
// 关闭对话框
|
||||||
|
const handleClose = () => {
|
||||||
|
emit('update:visible', false)
|
||||||
|
emit('close')
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页操作
|
||||||
|
const handleSizeChange = (val) => {
|
||||||
|
pageSize.value = val
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCurrentChange = (val) => {
|
||||||
|
currentPage.value = val
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 筛选条件改变时触发
|
||||||
|
const handleFilterChange = () => {
|
||||||
|
currentPage.value = 1
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取数据
|
||||||
|
const fetchData = () => {
|
||||||
|
// 实际项目中调用API获取数据
|
||||||
|
console.log('获取重大事件数据,筛选条件:', filterForm.value)
|
||||||
|
|
||||||
|
// 这里可以添加筛选逻辑
|
||||||
|
let filteredData = [...tableData.value]
|
||||||
|
|
||||||
|
if (filterForm.value.district) {
|
||||||
|
filteredData = filteredData.filter((item) => item.district === filterForm.value.district)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterForm.value.type) {
|
||||||
|
filteredData = filteredData.filter((item) => item.type === filterForm.value.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filterForm.value.controlMeasure) {
|
||||||
|
filteredData = filteredData.filter((item) => item.controlMeasure === filterForm.value.controlMeasure)
|
||||||
|
}
|
||||||
|
|
||||||
|
total.value = filteredData.length
|
||||||
|
}
|
||||||
|
|
||||||
|
// 抢险操作
|
||||||
|
const handleRescue = (row) => {
|
||||||
|
console.log('抢险操作:', row)
|
||||||
|
// 跳转到3D态势感知页面
|
||||||
|
window.location.href = '/3DSituationalAwareness?id=1'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监听visible变化
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
(newVal) => {
|
||||||
|
if (newVal) {
|
||||||
|
currentPage.value = 1
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
// 筛选区域
|
||||||
|
.filter-row {
|
||||||
|
width: 900px;
|
||||||
|
display: flex;
|
||||||
|
gap: 12px;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 8px;
|
||||||
|
|
||||||
|
.filter-label {
|
||||||
|
font-size: 13px;
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-select {
|
||||||
|
width: 160px;
|
||||||
|
|
||||||
|
:deep(.el-input__wrapper) {
|
||||||
|
background-color: rgba(30, 70, 120, 0.4);
|
||||||
|
border: 1px solid rgba(64, 169, 255, 0.3);
|
||||||
|
box-shadow: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
|
||||||
|
.el-input__inner {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
|
||||||
|
&::placeholder {
|
||||||
|
color: rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input__suffix {
|
||||||
|
.el-icon {
|
||||||
|
color: rgba(255, 255, 255, 0.6);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 操作按钮
|
||||||
|
.operation-btn {
|
||||||
|
color: #ff6b6b;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.3s;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #ff8787;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -51,14 +51,14 @@
|
|||||||
class="filter-select"
|
class="filter-select"
|
||||||
@change="handleFilterChange"
|
@change="handleFilterChange"
|
||||||
>
|
>
|
||||||
<el-option v-for="option in pointLevelOptions" :key="option.value" :label="option.label" :value="option.value" />
|
<el-option v-for="option in pointLevelOptionsAll" :key="option.value" :label="option.label" :value="option.value" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div class="filter-item">
|
<div class="filter-item">
|
||||||
<span class="filter-label">是否回应</span>
|
<span class="filter-label">是否回应</span>
|
||||||
<el-select
|
<el-select
|
||||||
:teleported="false"
|
:teleported="false"
|
||||||
v-model="filterForm.isResponded"
|
v-model="filterForm.isReply"
|
||||||
placeholder="是否回应"
|
placeholder="是否回应"
|
||||||
clearable
|
clearable
|
||||||
class="filter-select"
|
class="filter-select"
|
||||||
@ -83,7 +83,7 @@
|
|||||||
<div class="person-info">
|
<div class="person-info">
|
||||||
<div class="person-name center" v-if="row.trafficDept.name != '-'">
|
<div class="person-name center" v-if="row.trafficDept.name != '-'">
|
||||||
<span style="margin-right: 5px">{{ row.trafficDept.name }}</span>
|
<span style="margin-right: 5px">{{ row.trafficDept.name }}</span>
|
||||||
<img class="response-icon" :src="row.trafficDept.isResponded ? row.trafficDept.img : row.trafficDept.img" alt />
|
<img class="response-icon" :src="row.trafficDept.isReply ? row.trafficDept.img : row.trafficDept.img" alt />
|
||||||
</div>
|
</div>
|
||||||
<span class="person-phone">{{ row.trafficDept.phone }}</span>
|
<span class="person-phone">{{ row.trafficDept.phone }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -158,7 +158,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, watch, onMounted } from 'vue'
|
import { ref, computed, watch, onMounted } from 'vue'
|
||||||
import { Close, ArrowLeft, ArrowRight } from '@element-plus/icons-vue'
|
import { Close, ArrowLeft, ArrowRight } from '@element-plus/icons-vue'
|
||||||
import { pointTypeOptions, pointLevelOptions, isRespondedOptions, formatDateTime } from '../component/index.js'
|
import { pointTypeOptions, pointLevelOptionsAll, isRespondedOptions, formatDateTime } from '../component/index.js'
|
||||||
import baseDialog from '../component/baseDialog.vue'
|
import baseDialog from '../component/baseDialog.vue'
|
||||||
import { request } from '@/utils/request.js'
|
import { request } from '@/utils/request.js'
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ const emit = defineEmits(['update:visible', 'close', 'detail'])
|
|||||||
const filterForm = ref({
|
const filterForm = ref({
|
||||||
pointType: '',
|
pointType: '',
|
||||||
pointLevel: '',
|
pointLevel: '',
|
||||||
isResponded: '',
|
isReply: '',
|
||||||
})
|
})
|
||||||
|
|
||||||
const cardType = ref('路段')
|
const cardType = ref('路段')
|
||||||
@ -331,7 +331,7 @@ const fetchData = async () => {
|
|||||||
limit: pageSize.value,
|
limit: pageSize.value,
|
||||||
warningId: props.responseStatusData.warningId || '',
|
warningId: props.responseStatusData.warningId || '',
|
||||||
riskLevel: filterForm.value.pointLevel || '',
|
riskLevel: filterForm.value.pointLevel || '',
|
||||||
isResponded: filterForm.value.isResponded,
|
isReply: filterForm.value.isReply,
|
||||||
}
|
}
|
||||||
if (props.dispatchDateRange && props.dispatchDateRange.length > 0) {
|
if (props.dispatchDateRange && props.dispatchDateRange.length > 0) {
|
||||||
params.start = formatDateTime(props.dispatchDateRange[0]) || ''
|
params.start = formatDateTime(props.dispatchDateRange[0]) || ''
|
||||||
@ -368,31 +368,31 @@ const fetchData = async () => {
|
|||||||
name: trafficDeptEvent.noticeName || '-',
|
name: trafficDeptEvent.noticeName || '-',
|
||||||
phone: trafficDeptEvent.noticePhone || '-',
|
phone: trafficDeptEvent.noticePhone || '-',
|
||||||
img: trafficDeptEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
img: trafficDeptEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
||||||
isResponded: trafficDeptEvent.replyState === 'read',
|
isReply: trafficDeptEvent.replyState === 'read',
|
||||||
},
|
},
|
||||||
roadOrg: {
|
roadOrg: {
|
||||||
name: roadOrgEvent.noticeName || '-',
|
name: roadOrgEvent.noticeName || '-',
|
||||||
phone: roadOrgEvent.noticePhone || '-',
|
phone: roadOrgEvent.noticePhone || '-',
|
||||||
img: roadOrgEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
img: roadOrgEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
||||||
isResponded: roadOrgEvent.replyState === 'read',
|
isReply: roadOrgEvent.replyState === 'read',
|
||||||
},
|
},
|
||||||
maintenance: {
|
maintenance: {
|
||||||
name: maintenanceEvent.noticeName || '-',
|
name: maintenanceEvent.noticeName || '-',
|
||||||
phone: maintenanceEvent.noticePhone || '-',
|
phone: maintenanceEvent.noticePhone || '-',
|
||||||
img: maintenanceEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
img: maintenanceEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
||||||
isResponded: maintenanceEvent.replyState === 'read',
|
isReply: maintenanceEvent.replyState === 'read',
|
||||||
},
|
},
|
||||||
roadKeeper: {
|
roadKeeper: {
|
||||||
name: roadKeeperEvent.noticeName || '-',
|
name: roadKeeperEvent.noticeName || '-',
|
||||||
phone: roadKeeperEvent.noticePhone || '-',
|
phone: roadKeeperEvent.noticePhone || '-',
|
||||||
img: roadKeeperEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
img: roadKeeperEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
||||||
isResponded: roadKeeperEvent.replyState === 'read',
|
isReply: roadKeeperEvent.replyState === 'read',
|
||||||
},
|
},
|
||||||
generalStaff: {
|
generalStaff: {
|
||||||
name: generalStaffEvent.noticeName || '-',
|
name: generalStaffEvent.noticeName || '-',
|
||||||
phone: generalStaffEvent.noticePhone || '-',
|
phone: generalStaffEvent.noticePhone || '-',
|
||||||
img: generalStaffEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
img: generalStaffEvent.replyState === 'read' ? respondedIcon : notRespondedIcon,
|
||||||
isResponded: generalStaffEvent.replyState === 'read',
|
isReply: generalStaffEvent.replyState === 'read',
|
||||||
},
|
},
|
||||||
|
|
||||||
urgeTime: {
|
urgeTime: {
|
||||||
@ -441,7 +441,7 @@ const handleFilterChange = () => {
|
|||||||
console.log(filterForm.value)
|
console.log(filterForm.value)
|
||||||
|
|
||||||
filterForm.value.pointLevel = filterForm.value.pointLevel || ''
|
filterForm.value.pointLevel = filterForm.value.pointLevel || ''
|
||||||
filterForm.value.isResponded = filterForm.value.isResponded
|
filterForm.value.isReply = filterForm.value.isReply
|
||||||
currentPage.value = 1
|
currentPage.value = 1
|
||||||
fetchData()
|
fetchData()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -132,6 +132,15 @@ export const pointLevelOptions = [
|
|||||||
{ label: '较高风险', value: '较高风险' },
|
{ label: '较高风险', value: '较高风险' },
|
||||||
{ label: '高风险', value: '高风险' },
|
{ label: '高风险', value: '高风险' },
|
||||||
]
|
]
|
||||||
|
export const pointLevelOptionsAll = [
|
||||||
|
{ label: '全部', value: '' },
|
||||||
|
{ label: '低风险', value: '低风险' },
|
||||||
|
{ label: '中风险', value: '中风险' },
|
||||||
|
{ label: '高风险', value: '高风险' },
|
||||||
|
{ label: '一般隐患', value: '一般隐患' },
|
||||||
|
{ label: '较大隐患', value: '较大隐患' },
|
||||||
|
{ label: '较高风险', value: '较高风险' },
|
||||||
|
]
|
||||||
|
|
||||||
// 是否回应选项
|
// 是否回应选项
|
||||||
export const isRespondedOptions = [
|
export const isRespondedOptions = [
|
||||||
|
|||||||
@ -46,6 +46,7 @@
|
|||||||
@openPatrolMileage="openDialog('patrolMileage')"
|
@openPatrolMileage="openDialog('patrolMileage')"
|
||||||
@openPatrolSituation="openDialog('patrolSituation')"
|
@openPatrolSituation="openDialog('patrolSituation')"
|
||||||
@update:filterForm="updateFilterForm"
|
@update:filterForm="updateFilterForm"
|
||||||
|
@open-major-event="() => (dialogVisible.majorEvent = true)"
|
||||||
></right>
|
></right>
|
||||||
</div>
|
</div>
|
||||||
<!-- 地图中心 -->
|
<!-- 地图中心 -->
|
||||||
@ -258,6 +259,9 @@
|
|||||||
|
|
||||||
<!-- 巡查情况对话框 -->
|
<!-- 巡查情况对话框 -->
|
||||||
<patrolSituationDialog v-model:visible="dialogVisible.patrolSituation" @close="closeDialog('patrolSituation')" />
|
<patrolSituationDialog v-model:visible="dialogVisible.patrolSituation" @close="closeDialog('patrolSituation')" />
|
||||||
|
|
||||||
|
<!-- 重大事件对话框 -->
|
||||||
|
<majorEventDialog v-model:visible="dialogVisible.majorEvent" @close="closeDialog('majorEvent')" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
@ -308,6 +312,7 @@ import offlineHelpDialog from './Dialog/offlineHelpDialog.vue'
|
|||||||
import imageInspectionDialog from './Dialog/imageInspectionDialog.vue'
|
import imageInspectionDialog from './Dialog/imageInspectionDialog.vue'
|
||||||
import patrolMileageDialog from './Dialog/patrolMileageDialog.vue'
|
import patrolMileageDialog from './Dialog/patrolMileageDialog.vue'
|
||||||
import patrolSituationDialog from './Dialog/patrolSituationDialog.vue'
|
import patrolSituationDialog from './Dialog/patrolSituationDialog.vue'
|
||||||
|
import majorEventDialog from './Dialog/majorEventDialog.vue'
|
||||||
|
|
||||||
import './component/el-select.scss'
|
import './component/el-select.scss'
|
||||||
import './component/date-picker-theme.scss'
|
import './component/date-picker-theme.scss'
|
||||||
@ -340,6 +345,7 @@ const dialogVisible = ref({
|
|||||||
imageInspection: false,
|
imageInspection: false,
|
||||||
patrolMileage: false,
|
patrolMileage: false,
|
||||||
patrolSituation: false,
|
patrolSituation: false,
|
||||||
|
majorEvent: false,
|
||||||
})
|
})
|
||||||
const activeitem = ref({})
|
const activeitem = ref({})
|
||||||
|
|
||||||
|
|||||||
@ -659,7 +659,7 @@ const getBarHeight = (value) => {
|
|||||||
const actualValue = value.count || value.value
|
const actualValue = value.count || value.value
|
||||||
if (!actualValue || actualValue == 0) return '0'
|
if (!actualValue || actualValue == 0) return '0'
|
||||||
// 确保最小高度为10%,最大高度为100%
|
// 确保最小高度为10%,最大高度为100%
|
||||||
const height = (actualValue / totalValue.value) * 300
|
const height = (actualValue / totalValue.value) * 100
|
||||||
// 确保高度差异明显,至少有3%的最小差异
|
// 确保高度差异明显,至少有3%的最小差异
|
||||||
// 最大高度为100% 最新高度为3%的最小差异
|
// 最大高度为100% 最新高度为3%的最小差异
|
||||||
console.log(height)
|
console.log(height)
|
||||||
|
|||||||
@ -173,7 +173,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 重大事件 -->
|
<!-- 重大事件 -->
|
||||||
<div class="event-section">
|
<div class="event-section" @click="$emit('open-major-event')">
|
||||||
<span class="event-title">重大事件:</span>
|
<span class="event-title">重大事件:</span>
|
||||||
<span class="event-num">{{ majorEvent }}</span>
|
<span class="event-num">{{ majorEvent }}</span>
|
||||||
</div>
|
</div>
|
||||||
@ -1256,6 +1256,7 @@ watch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
.event-section {
|
.event-section {
|
||||||
|
cursor: pointer;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: vw(12);
|
padding: vw(12);
|
||||||
// background: rgba(64, 169, 255, 0.1);
|
// background: rgba(64, 169, 255, 0.1);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user