diff --git a/packages/screen/src/assets/RiskWarning_img/二级标题栏bg1@2x.png b/packages/screen/src/assets/RiskWarning_img/二级标题栏bg1@2x.png new file mode 100644 index 0000000..02defb9 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/二级标题栏bg1@2x.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/蓝色@2x (1).png b/packages/screen/src/assets/RiskWarning_img/蓝色@2x (1).png new file mode 100644 index 0000000..2e20542 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/蓝色@2x (1).png differ diff --git a/packages/screen/src/assets/RiskWarning_img/蓝色@2x1.png b/packages/screen/src/assets/RiskWarning_img/蓝色@2x1.png new file mode 100644 index 0000000..39aad1e Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/蓝色@2x1.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/队伍icon1@2x.png b/packages/screen/src/assets/RiskWarning_img/队伍icon1@2x.png new file mode 100644 index 0000000..5b21da9 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/队伍icon1@2x.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/队伍icon@2x.png b/packages/screen/src/assets/RiskWarning_img/队伍icon@2x.png new file mode 100644 index 0000000..d1df310 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/队伍icon@2x.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/队伍icon定位@2x.png b/packages/screen/src/assets/RiskWarning_img/队伍icon定位@2x.png new file mode 100644 index 0000000..78fc806 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/队伍icon定位@2x.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/隧洞icon定位@2x.png b/packages/screen/src/assets/RiskWarning_img/隧洞icon定位@2x.png new file mode 100644 index 0000000..2463a38 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/隧洞icon定位@2x.png differ diff --git a/packages/screen/src/assets/RiskWarning_img/项目@2x.png b/packages/screen/src/assets/RiskWarning_img/项目@2x.png new file mode 100644 index 0000000..618b949 Binary files /dev/null and b/packages/screen/src/assets/RiskWarning_img/项目@2x.png differ diff --git a/packages/screen/src/assets/css/flex.scss b/packages/screen/src/assets/css/flex.scss index 2f085e8..412dcc6 100644 --- a/packages/screen/src/assets/css/flex.scss +++ b/packages/screen/src/assets/css/flex.scss @@ -87,7 +87,9 @@ .f3 { flex: 3; } - +.mt_5{ + margin-top: 5px; +} .mt_10 { margin-top: 10px; } diff --git a/packages/screen/src/views/RiskWarning/bottom.vue b/packages/screen/src/views/RiskWarning/bottom.vue index e52882d..692fd1d 100644 --- a/packages/screen/src/views/RiskWarning/bottom.vue +++ b/packages/screen/src/views/RiskWarning/bottom.vue @@ -16,7 +16,7 @@ -
+
- - - + + + - +
@@ -98,12 +107,14 @@ import tunnelIconIcon from "../../assets/RiskWarning_img/隧道icon@2x.png"; import slopeIconIcon from "../../assets/RiskWarning_img/边坡icon@2x.png"; import bridgeIconIcon from "../../assets/RiskWarning_img/桥梁icon@2x.png"; import roadIconIcon from "../../assets/RiskWarning_img/线路路段icon@2x.png"; +import teamIconIcon from "../../assets/RiskWarning_img/队伍icon@2x.png"; import warningIconIcon1 from "../../assets/RiskWarning_img/风险预警icon1@2x.png"; import tunnelIconIcon1 from "../../assets/RiskWarning_img/隧道icon1@2x.png"; import slopeIconIcon1 from "../../assets/RiskWarning_img/边坡icon1@2x.png"; import bridgeIconIcon1 from "../../assets/RiskWarning_img/桥梁icon1@2x.png"; import roadIconIcon1 from "../../assets/RiskWarning_img/线路路段icon1@2x.png"; +import teamIconIcon1 from "../../assets/RiskWarning_img/队伍icon1@2x.png"; const activeIndex = ref(0); @@ -143,6 +154,13 @@ const menuItems = [ icon: roadIconIcon, icon1: roadIconIcon1, }, + { + label: "队伍", + icon: "icon-team", + iconClass: "team", + icon: teamIconIcon, + icon1: teamIconIcon1, + }, ]; // 筛选状态 @@ -205,15 +223,15 @@ const filteredData = computed(() => { // el-table 样式 const headerCellStyle = () => ({ - background: "transparent", + background: "#17466F", color: "rgba(255, 255, 255, 0.6)", fontWeight: "normal", borderBottom: "1px solid rgba(64, 169, 255, 0.2)", - padding: "10px 8px", + padding: "5px 20px", }); const cellStyle = () => ({ - background: "transparent", + background: "#142E49", color: "rgba(255, 255, 255, 0.9)", borderBottom: "1px solid rgba(64, 169, 255, 0.1)", padding: "5px 5px", @@ -232,7 +250,12 @@ const scrollStep = 1; // 每次滚动像素 // 检查是否有筛选条件 const hasFilter = computed(() => { - return filters.value.red || filters.value.blue || filters.value.orange || filters.value.yellow; + return ( + filters.value.red || + filters.value.blue || + filters.value.orange || + filters.value.yellow + ); }); // 开始自动滚动 @@ -242,7 +265,9 @@ const startAutoScroll = () => { } if (!isScrolling.value || hasFilter.value) return; - const tableBody = document.querySelector('.weather-warning-panel .el-table__body-wrapper .el-scrollbar__wrap'); + const tableBody = document.querySelector( + ".weather-warning-panel .el-table__body-wrapper .el-scrollbar__wrap", + ); if (!tableBody) return; scrollTimer.value = setInterval(() => { @@ -267,7 +292,9 @@ const stopAutoScroll = () => { // 重置滚动到顶部 const resetScrollToTop = () => { - const tableBody = document.querySelector('.weather-warning-panel .el-table__body-wrapper .el-scrollbar__wrap'); + const tableBody = document.querySelector( + ".weather-warning-panel .el-table__body-wrapper .el-scrollbar__wrap", + ); if (tableBody) { tableBody.scrollTop = 0; } @@ -305,20 +332,24 @@ onMounted(() => { nextTick(() => { startAutoScroll(); // 添加鼠标事件监听 - const tableContainer = document.querySelector('.weather-warning-panel .table-container'); + const tableContainer = document.querySelector( + ".weather-warning-panel .table-container", + ); if (tableContainer) { - tableContainer.addEventListener('mouseenter', handleMouseEnter); - tableContainer.addEventListener('mouseleave', handleMouseLeave); + tableContainer.addEventListener("mouseenter", handleMouseEnter); + tableContainer.addEventListener("mouseleave", handleMouseLeave); } }); }); onUnmounted(() => { stopAutoScroll(); - const tableContainer = document.querySelector('.weather-warning-panel .table-container'); + const tableContainer = document.querySelector( + ".weather-warning-panel .table-container", + ); if (tableContainer) { - tableContainer.removeEventListener('mouseenter', handleMouseEnter); - tableContainer.removeEventListener('mouseleave', handleMouseLeave); + tableContainer.removeEventListener("mouseenter", handleMouseEnter); + tableContainer.removeEventListener("mouseleave", handleMouseLeave); } }); @@ -334,27 +365,30 @@ onUnmounted(() => { position: relative; width: 100%; height: 100%; - padding: vw(10); box-sizing: border-box; display: flex; - // 小屏幕适配 @media (max-width: 1366px) { - padding: 8px; + padding: vw(8); } @media (max-width: 1024px) { - padding: 6px; + padding: vw(6); } } .nav-menu { width: vw(50); - min-width: 40px; + min-width: vw(40); + height: 100%; display: flex; flex-direction: column; justify-content: end; align-items: center; gap: vw(5); + z-index: 2; + position: absolute; + bottom: 0; + left: 0; .nav-item { display: flex; @@ -378,12 +412,12 @@ onUnmounted(() => { .nav-icon-box { width: vw(50); height: vw(50); - min-width: 36px; - min-height: 36px; + min-width: vw(36); + min-height: vw(36); margin-bottom: vw(5); background: rgba(64, 169, 255, 0.1); border: 1px solid rgba(64, 169, 255, 0.3); - border-radius: 8px; + border-radius: vw(8); display: flex; align-items: center; justify-content: center; @@ -391,8 +425,8 @@ onUnmounted(() => { img { width: vw(50); height: vw(50); - min-width: 32px; - min-height: 32px; + min-width: vw(32); + min-height: vw(32); } i { @@ -440,57 +474,48 @@ onUnmounted(() => { // 气象预警监测包装器 .weather-warning-wrapper { - flex: 1; display: flex; flex-direction: column; justify-content: flex-end; - width: 90%; + width: 92%; + height: 50%; + position: absolute; + z-index: 2; + right: 0px; + bottom: 0px; } // 气象预警监测面板样式 .weather-warning-panel { - height: 50%; - background: rgba(64, 169, 255, 0.1); - border: 1px solid rgba(64, 169, 255, 0.3); - border-radius: 8px; - padding: vw(15); + // border-radius: vw(8); display: flex; flex-direction: column; - position: relative; + height: 100%; + .clear-icon { position: absolute; top: vw(-50); right: 0px; width: vw(40) !important; height: vw(40) !important; - min-width: 28px; - min-height: 28px; + min-width: vw(28); + min-height: vw(28); } .panel-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: vw(15); + background-image: url("../../assets/RiskWarning_img/二级标题栏bg1@2x.png"); + background-size: 100% 100%; + background-position: left top; + padding: vw(15); .header-title { font-size: vw(18); - font-weight: bold; - color: #40a9ff; + font-weight: 500; + color: #fff; position: relative; - padding-left: vw(12); - - &::before { - content: ""; - position: absolute; - left: 0; - top: 50%; - transform: translateY(-50%); - width: vw(4); - height: vw(16); - background: linear-gradient(180deg, #40a9ff 0%, #1890ff 100%); - border-radius: 2px; - } } .filter-tags { @@ -506,8 +531,8 @@ onUnmounted(() => { input { width: vw(14); height: vw(14); - min-width: 12px; - min-height: 12px; + min-width: vw(12); + min-height: vw(12); accent-color: #40a9ff; } @@ -536,6 +561,7 @@ onUnmounted(() => { } .table-container { + background: rgb(20, 46, 74, 0.95); flex: 1; overflow: hidden; @@ -566,10 +592,28 @@ onUnmounted(() => { .el-table__header-wrapper { background: transparent; + + th.el-table__cell { + background: transparent; + font-size: vw(14); + color: rgba(255, 255, 255, 0.6); + padding: vw(10) vw(8); + } } .el-table__body-wrapper { background: transparent; + + td.el-table__cell { + background: transparent; + font-size: vw(12); + color: rgba(255, 255, 255, 0.9); + padding: vw(5) vw(5); + } + + &::-webkit-scrollbar { + display: none !important; + } } tr { @@ -579,33 +623,17 @@ onUnmounted(() => { background: rgba(64, 169, 255, 0.05) !important; } } - - th.el-table__cell { - background: transparent; - } - - td.el-table__cell { - background: transparent; - } } .warning-level { - // display: inline-flex; - // align-items: center; - // gap: 5px; - // padding: 4px 10px; - // border-radius: 4px; - // font-size: 12px; - // width: 15px; - // height: 15px; display: flex; align-items: center; justify-content: center; img { width: vw(15); height: vw(15); - min-width: 10px; - min-height: 10px; + min-width: vw(10); + min-height: vw(10); } // .level-icon { diff --git a/packages/screen/src/views/RiskWarning/component/ChongqingMap.vue b/packages/screen/src/views/RiskWarning/component/ChongqingMap.vue index e5bf689..4bdcd27 100644 --- a/packages/screen/src/views/RiskWarning/component/ChongqingMap.vue +++ b/packages/screen/src/views/RiskWarning/component/ChongqingMap.vue @@ -13,128 +13,382 @@ + + \ No newline at end of file + +// 区县高亮样式 +:deep(.leaflet-interactive) { + transition: all 0.3s; + cursor: pointer; +} + diff --git a/packages/screen/src/views/RiskWarning/component/aiWarningResultDialog.vue b/packages/screen/src/views/RiskWarning/component/aiWarningResultDialog.vue index 019880a..6879686 100644 --- a/packages/screen/src/views/RiskWarning/component/aiWarningResultDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/aiWarningResultDialog.vue @@ -160,7 +160,8 @@ watch( } .ai-dialog { - width: 1000px; + width: 80vw; + max-width: 1000px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; diff --git a/packages/screen/src/views/RiskWarning/component/clearanceSituationDialog.vue b/packages/screen/src/views/RiskWarning/component/clearanceSituationDialog.vue index fcce624..9f0affe 100644 --- a/packages/screen/src/views/RiskWarning/component/clearanceSituationDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/clearanceSituationDialog.vue @@ -51,16 +51,14 @@
-
序号
-
行政区域
-
线路编号
-
起止桩号
-
路况位置
-
发生时间
-
线路编号
-
类型
-
管控措施
-
操作
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close } from "@element-plus/icons-vue"; +import { regionOptions, typeOptions, controlMeasureOptions } from "./index.js"; const props = defineProps({ visible: { @@ -140,27 +139,26 @@ const filterForm = ref({ }); // 行政区域选项 -const regionOptions = ref([ - { label: "巫溪县", value: "巫溪县" }, - { label: "万州区", value: "万州区" }, - { label: "沙坪坝区", value: "沙坪坝区" }, - { label: "渝中区", value: "渝中区" }, -]); +// 已从 index.js 导入 // 类型选项 -const typeOptions = ref([ - { label: "边坡坍塌", value: "边坡坍塌" }, - { label: "路面塌陷", value: "路面塌陷" }, - { label: "桥梁损坏", value: "桥梁损坏" }, - { label: "隧道事故", value: "隧道事故" }, -]); +// 已从 index.js 导入 // 管控措施选项 -const controlMeasureOptions = ref([ - { label: "全幅封闭", value: "全幅封闭" }, - { label: "半幅封闭", value: "半幅封闭" }, - { label: "正常通行", value: "正常通行" }, - { label: "限制通行", value: "限制通行" }, +// 已从 index.js 导入 + +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "50px" }, + { label: "行政区域", width: "80px" }, + { label: "线路编号", width: "80px" }, + { label: "起止桩号", width: "100px" }, + { label: "路况位置", width: "100px" }, + { label: "发生时间", width: "140px" }, + { label: "线路编号", width: "80px" }, + { label: "类型", width: "80px" }, + { label: "管控措施", width: "100px" }, + { label: "操作", flex: "1" }, ]); // 表格数据 @@ -314,7 +312,8 @@ watch( } .clearance-dialog { - width: 1000px; + width: 80vw; + max-width: 1000px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -365,7 +364,8 @@ watch( .filter-row { display: flex; - gap: 24px; + gap: 12px; + flex-wrap: wrap; } .filter-item { diff --git a/packages/screen/src/views/RiskWarning/component/confirmDialog.vue b/packages/screen/src/views/RiskWarning/component/confirmDialog.vue index 7aad61b..f10fcc6 100644 --- a/packages/screen/src/views/RiskWarning/component/confirmDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/confirmDialog.vue @@ -88,12 +88,30 @@ const handleOverlayClick = () => { } .confirm-dialog { - width: 360px; + width: 80vw; + max-width: 400px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 8px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); overflow: hidden; + animation: dialogSlideIn 0.3s ease-out; + + @media (max-width: 768px) { + width: 90vw; + max-width: 90vw; + } +} + +@keyframes dialogSlideIn { + from { + opacity: 0; + transform: scale(0.8) translateY(-50px); + } + to { + opacity: 1; + transform: scale(1) translateY(0); + } } // 标题栏 @@ -109,18 +127,23 @@ const handleOverlayClick = () => { font-size: 16px; font-weight: 600; color: #fff; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } .close-btn { - width: 24px; - height: 24px; + width: 19px; + height: 19px; display: flex; align-items: center; justify-content: center; color: rgba(255, 255, 255, 0.6); cursor: pointer; - font-size: 16px; + font-size: 13px; transition: color 0.3s; + flex-shrink: 0; &:hover { color: #fff; @@ -132,12 +155,16 @@ const handleOverlayClick = () => { .dialog-content { padding: 24px 20px; text-align: center; + max-height: 40vh; + overflow-y: auto; .confirm-message { - font-size: 14px; + font-size: 16px; color: rgba(255, 255, 255, 0.9); line-height: 1.6; margin: 0; + word-wrap: break-word; + word-break: break-all; } } @@ -147,16 +174,20 @@ const handleOverlayClick = () => { justify-content: center; gap: 16px; padding: 0 20px 20px; + flex-wrap: wrap; .btn-cancel { min-width: 80px; - height: 32px; + height: 26px; + padding: 0 16px; background-color: transparent; border: 1px solid rgba(64, 169, 255, 0.4); color: rgba(255, 255, 255, 0.8); - font-size: 13px; + font-size: 10px; border-radius: 4px; transition: all 0.3s; + flex: 1; + min-flex: 64px; &:hover { background-color: rgba(64, 169, 255, 0.1); @@ -167,13 +198,16 @@ const handleOverlayClick = () => { .btn-confirm { min-width: 80px; - height: 32px; + height: 26px; + padding: 0 16px; background: linear-gradient(135deg, #40a9ff 0%, #1890ff 100%); border: none; color: #fff; - font-size: 13px; + font-size: 10px; border-radius: 4px; transition: all 0.3s; + flex: 1; + min-flex: 64px; &:hover { background: linear-gradient(135deg, #69c0ff 0%, #40a9ff 100%); diff --git a/packages/screen/src/views/RiskWarning/component/controlSituationDialog.vue b/packages/screen/src/views/RiskWarning/component/controlSituationDialog.vue index 03e9888..47f8cc8 100644 --- a/packages/screen/src/views/RiskWarning/component/controlSituationDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/controlSituationDialog.vue @@ -40,12 +40,14 @@
-
序号
-
行政区域
-
驻地名称
-
所属项目
-
驻地人数
-
驻地风险等级
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close } from "@element-plus/icons-vue"; +import { regionOptions, riskLevelOptions } from "./index.js"; const props = defineProps({ visible: { @@ -118,19 +121,19 @@ const filterForm = ref({ }); // 行政区域选项 -const regionOptions = ref([ - { label: "沙坪坝区", value: "沙坪坝区" }, - { label: "万州区", value: "万州区" }, - { label: "渝中区", value: "渝中区" }, - { label: "江北区", value: "江北区" }, -]); +// 已从 index.js 导入 // 风险等级选项 -const riskLevelOptions = ref([ - { label: "Ⅰ级", value: "Ⅰ级" }, - { label: "Ⅱ级", value: "Ⅱ级" }, - { label: "Ⅲ级", value: "Ⅲ级" }, - { label: "Ⅳ级", value: "Ⅳ级" }, +// 已从 index.js 导入 + +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "60px" }, + { label: "行政区域", width: "100px" }, + { label: "驻地名称", width: "200px" }, + { label: "所属项目", width: "200px" }, + { label: "驻地人数", width: "80px" }, + { label: "驻地风险等级", flex: "1" }, ]); // 表格数据 @@ -267,7 +270,8 @@ watch( } .control-dialog { - width: 900px; + width: 80vw; + max-width: 900px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -318,7 +322,8 @@ watch( .filter-row { display: flex; - gap: 24px; + gap: 12px; + flex-wrap: wrap; } .filter-item { diff --git a/packages/screen/src/views/RiskWarning/component/dispatchDetailDialog.vue b/packages/screen/src/views/RiskWarning/component/dispatchDetailDialog.vue index 7827e23..d97f269 100644 --- a/packages/screen/src/views/RiskWarning/component/dispatchDetailDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/dispatchDetailDialog.vue @@ -40,13 +40,14 @@
-
序号
-
区县/镇街
-
姓名
-
电话
-
类型
-
角色
-
调度时间
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close } from "@element-plus/icons-vue"; +import { regionOptions, typeOptions } from "./index.js"; const props = defineProps({ visible: { @@ -110,19 +112,20 @@ const filterForm = ref({ }); // 行政区域选项 -const regionOptions = ref([ - { label: "柏梓镇", value: "柏梓镇" }, - { label: "万州区", value: "万州区" }, - { label: "沙坪坝区", value: "沙坪坝区" }, - { label: "渝中区", value: "渝中区" }, -]); +// 已从 index.js 导入 // 类型选项 -const typeOptions = ref([ - { label: "交通主管部门", value: "交通主管部门" }, - { label: "公路机构", value: "公路机构" }, - { label: "养护站", value: "养护站" }, - { label: "护路员", value: "护路员" }, +// 已从 index.js 导入 + +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "50px" }, + { label: "区县/镇街", width: "100px" }, + { label: "姓名", width: "80px" }, + { label: "电话", width: "120px" }, + { label: "类型", width: "100px" }, + { label: "角色", width: "140px" }, + { label: "调度时间", flex: "1" }, ]); // 表格数据 @@ -252,7 +255,8 @@ watch( } .dispatch-detail-dialog { - width: 900px; + width: 80vw; + max-width: 900px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -303,7 +307,8 @@ watch( .filter-row { display: flex; - gap: 24px; + gap: 12px; + flex-wrap: wrap; } .filter-item { diff --git a/packages/screen/src/views/RiskWarning/component/dispatchDistrictDialog.vue b/packages/screen/src/views/RiskWarning/component/dispatchDistrictDialog.vue index f1d67d7..8dc2180 100644 --- a/packages/screen/src/views/RiskWarning/component/dispatchDistrictDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/dispatchDistrictDialog.vue @@ -29,10 +29,14 @@
-
序号
-
行政区域
-
调度数
-
最近调度时间
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close } from "@element-plus/icons-vue"; +import { regionOptions } from "./index.js"; const props = defineProps({ visible: { @@ -94,11 +99,14 @@ const filterForm = ref({ }); // 行政区域选项 -const regionOptions = ref([ - { label: "重庆市", value: "重庆市" }, - { label: "万州区", value: "万州区" }, - { label: "沙坪坝区", value: "沙坪坝区" }, - { label: "渝中区", value: "渝中区" }, +// 已从 index.js 导入 + +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "60px" }, + { label: "行政区域", width: "120px" }, + { label: "调度数", width: "100px" }, + { label: "最近调度时间", flex: "1" }, ]); // 表格数据 @@ -221,7 +229,8 @@ watch( } .dispatch-dialog { - width: 700px; + width: 80vw; + max-width: 700px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -272,7 +281,8 @@ watch( .filter-row { display: flex; - gap: 24px; + gap: 12px; + flex-wrap: wrap; } .filter-item { diff --git a/packages/screen/src/views/RiskWarning/component/eventDetailDialog.vue b/packages/screen/src/views/RiskWarning/component/eventDetailDialog.vue index 603eed9..66f8d54 100644 --- a/packages/screen/src/views/RiskWarning/component/eventDetailDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/eventDetailDialog.vue @@ -243,7 +243,8 @@ watch( } .event-dialog { - width: 700px; + width: 80vw; + max-width: 700px; max-height: 85vh; overflow-y: auto; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); diff --git a/packages/screen/src/views/RiskWarning/component/impactPointDetailDialog.vue b/packages/screen/src/views/RiskWarning/component/impactPointDetailDialog.vue index b36ab5d..f650f74 100644 --- a/packages/screen/src/views/RiskWarning/component/impactPointDetailDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/impactPointDetailDialog.vue @@ -234,7 +234,8 @@ watch( } .impact-detail-dialog { - width: 650px; + width: 80vw; + max-width: 650px; max-height: 90vh; overflow-y: auto; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); diff --git a/packages/screen/src/views/RiskWarning/component/impactPointDialog.vue b/packages/screen/src/views/RiskWarning/component/impactPointDialog.vue index 062842c..8bd8e67 100644 --- a/packages/screen/src/views/RiskWarning/component/impactPointDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/impactPointDialog.vue @@ -8,32 +8,59 @@
+
+ + +
+
+
影响桥梁
+
2933
+
+
+
影响边坡
+
2933
+
+
+
影响隧道
+
2933
+
+
+
影响项目
+
2933
+
+
- - - - - +
- - - +
- - - - +
@@ -47,16 +74,14 @@
-
序号
-
行政区域
-
影响点类型
-
影响点位置
-
影响点等级
-
交通主管部门负责人
-
公路机构责任人
-
养护站负责人
-
护路员
-
操作
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close, ArrowLeft, ArrowRight } from "@element-plus/icons-vue"; +import { pointTypeOptions, pointLevelOptions, regionOptionsWithAll } from "./index.js"; const props = defineProps({ visible: { @@ -148,6 +174,20 @@ const filterForm = ref({ region: "", }); +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "50px" }, + { label: "行政区域", width: "80px" }, + { label: "影响点类型", width: "80px" }, + { label: "影响点位置", width: "180px" }, + { label: "影响点等级", width: "90px" }, + { label: "交通主管部门负责人", width: "130px" }, + { label: "公路机构责任人", width: "110px" }, + { label: "养护站负责人", width: "110px" }, + { label: "护路员", width: "100px" }, + { label: "操作", width: "60px" }, +]); + // 表格数据 const tableData = ref([ { @@ -273,6 +313,11 @@ watch( diff --git a/packages/screen/src/views/RiskWarning/component/riskPointDetailDialog.vue b/packages/screen/src/views/RiskWarning/component/riskPointDetailDialog.vue index 8230fa0..1cd7ce1 100644 --- a/packages/screen/src/views/RiskWarning/component/riskPointDetailDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/riskPointDetailDialog.vue @@ -93,9 +93,14 @@
-
责任人类型
-
责任人
-
巡查频率
+
+ {{ column.label }} +
.section-header { - height: 50px; + height: 6.6667vw; display: flex; justify-content: space-between; align-items: center; @@ -35,20 +35,51 @@ defineProps({ .header-left { display: flex; align-items: center; - gap: 8px; - + gap: 1.0667vw; + font-size: 1.3333vw; .title { - margin-left: 35px; - font-size: 14px; - font-weight: bold; - color: #fff; - } + margin-left: 2.667vw; + font-weight: bold; + color: #fff; + font-size: 1vw; + } } .header-right { display: flex; align-items: center; - gap: 8px; + gap: 1.0667vw; + } + + @media (max-width: 768px) { + height: 10.6667vw; + + .header-left { + gap: 2.1333vw; + + .title { + margin-left: 8vw; + font-size: 1vw; + font-weight: bold; + color: #fff; + } + } + + .header-right { + gap: 2.1333vw; + } + } +} + +// 插槽内容自适应 +::v-deep(.header-left .title), +::v-deep(.header-left > span), +::v-deep(.header-left > div) { + font-weight: bold; + color: #fff; + + @media (max-width: 768px) { + font-size: 4vw; } } diff --git a/packages/screen/src/views/RiskWarning/component/tongnanInfoDialog.vue b/packages/screen/src/views/RiskWarning/component/tongnanInfoDialog.vue index 18e69d9..aed149b 100644 --- a/packages/screen/src/views/RiskWarning/component/tongnanInfoDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/tongnanInfoDialog.vue @@ -12,13 +12,14 @@
-
序号
-
区县/镇街
-
姓名
-
电话
-
驻地名称
-
类型
-
调度
+
+ {{ column.label }} +
-
序号
-
区县/镇街
-
总人数
-
吹哨人
-
建设单位包保责任人
-
施工单位包保责任人
-
驻地包保责任人
-
区县级包保责任人
-
市级包保责任人
-
操作
+
+ {{ column.label }} +
-
序号
-
区县
-
总人数
-
交通主管部门责任人
-
公路机构责任人
-
养护站道班责任人
-
护路员
-
操作
+
+ {{ column.label }} +
- {{ data.title }} - + {{ rescueTeamData.title }} +
-
+
-
+
{{ item.value }}
+
+ +
@@ -56,7 +69,6 @@ defineProps({ ], }), }, - }); // 边坡信息数据 @@ -123,6 +135,7 @@ const rescueTeamData = { { label: "地址", value: "重庆市江津区双福工业园区赵坪路 157 号" }, { label: "物资装备", value: "应急物资:8100 件;应急装备:33 台" }, ], + imgs: ["", "", "", "", ""], }; defineExpose({ @@ -145,22 +158,30 @@ const closeDialog = () => { @return calc($px / 1920 * 100vw); } .tunnel-info-dialog { + max-width: vw(300); width: vw(300); - width: 250px; + max-height: vw(600); + overflow-y: auto; + scrollbar-width: none; + -ms-overflow-style: none; background: rgba(64, 169, 255, 0.2); border: 1px solid rgba(64, 169, 255, 0.3); - border-radius: 8px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); backdrop-filter: blur(10px); position: fixed; top: 20%; left: 45%; + z-index: 1000; + + &::-webkit-scrollbar { + display: none; + } // 四个角的装饰 .corner { position: absolute; width: vw(20); height: vw(20); - border: 2px solid #40a9ff; + border: 1px solid #40a9ff; pointer-events: none; &.corner-top-left { @@ -168,7 +189,6 @@ const closeDialog = () => { left: 0; border-right: none; border-bottom: none; - border-top-left-radius: 6px; } &.corner-top-right { @@ -176,7 +196,6 @@ const closeDialog = () => { right: 0; border-left: none; border-bottom: none; - border-top-right-radius: 6px; } &.corner-bottom-left { @@ -184,7 +203,6 @@ const closeDialog = () => { left: 0; border-right: none; border-top: none; - border-bottom-left-radius: 6px; } &.corner-bottom-right { @@ -192,7 +210,6 @@ const closeDialog = () => { right: 0; border-left: none; border-top: none; - border-bottom-right-radius: 6px; } } @@ -264,4 +281,14 @@ const closeDialog = () => { } } } +.dialog-imgs { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: vw(6); + padding: vw(16) vw(20); + .dialog-img { + width: vw(75); + height: vw(75); + } +} diff --git a/packages/screen/src/views/RiskWarning/component/warningInfoDialog.vue b/packages/screen/src/views/RiskWarning/component/warningInfoDialog.vue index 1cdce80..ba34005 100644 --- a/packages/screen/src/views/RiskWarning/component/warningInfoDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/warningInfoDialog.vue @@ -14,35 +14,42 @@
- - - - - +
- - - - - - +
- - - +
- - - +
@@ -57,16 +64,14 @@
-
序号
-
预警等级
-
行政区域
-
预警时间
-
结束时间
-
影响点数量
-
已叫应
-
已回应
-
未回应
-
已催告
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close, Search, ArrowLeft, ArrowRight } from "@element-plus/icons-vue"; +import { warningLevelOptions, regionOptionsWithAll, isEndedOptions, isRespondedOptions } from "./index.js"; const props = defineProps({ visible: { @@ -137,6 +143,20 @@ const filterForm = ref({ isResponded: "", }); +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "60px" }, + { label: "预警等级", width: "100px" }, + { label: "行政区域", width: "100px" }, + { label: "预警时间", width: "160px" }, + { label: "结束时间", width: "160px" }, + { label: "影响点数量", width: "100px" }, + { label: "已叫应", width: "80px" }, + { label: "已回应", width: "80px" }, + { label: "未回应", width: "80px" }, + { label: "已催告", width: "80px" }, +]); + // 表格数据 const tableData = ref([ { @@ -204,6 +224,45 @@ const tableData = ref([ notResponded: 0, urged: 15, }, + { + id: 5, + warningLevel: "红色预警", + levelClass: "level-red", + region: "城口区", + warningTime: "2025-08-11 04:53:42", + endTime: "2025-08-11 04:53:42", + impactPoints: 0, + called: 0, + responded: 0, + notResponded: 0, + urged: 15, + }, + { + id: 5, + warningLevel: "红色预警", + levelClass: "level-red", + region: "城口区", + warningTime: "2025-08-11 04:53:42", + endTime: "2025-08-11 04:53:42", + impactPoints: 0, + called: 0, + responded: 0, + notResponded: 0, + urged: 15, + }, + { + id: 5, + warningLevel: "红色预警", + levelClass: "level-red", + region: "城口区", + warningTime: "2025-08-11 04:53:42", + endTime: "2025-08-11 04:53:42", + impactPoints: 0, + called: 0, + responded: 0, + notResponded: 0, + urged: 15, + }, ]); // 分页 @@ -305,7 +364,8 @@ watch( } .warning-dialog { - width: 1100px; + width: 80vw; + max-width: 1000px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -363,7 +423,7 @@ watch( .filter-item { .filter-select { - width: 140px; + width: 120px; :deep(.el-input__wrapper) { background-color: rgba(30, 70, 120, 0.4); diff --git a/packages/screen/src/views/RiskWarning/component/warningSituationDialog.vue b/packages/screen/src/views/RiskWarning/component/warningSituationDialog.vue index 31b558d..5309d5e 100644 --- a/packages/screen/src/views/RiskWarning/component/warningSituationDialog.vue +++ b/packages/screen/src/views/RiskWarning/component/warningSituationDialog.vue @@ -45,19 +45,35 @@ />
+
+ 时间范围 + +
-
序号
-
预警等级
-
气象类型
-
行政区域
-
预警时间
-
结束时间
-
影响点数量
+
+ {{ column.label }} +
import { ref, computed, watch } from "vue"; import { Close } from "@element-plus/icons-vue"; +import { warningLevelOptions, regionOptions, isEndedOptions } from "./index.js"; const props = defineProps({ visible: { @@ -123,28 +140,27 @@ const filterForm = ref({ warningLevel: "", region: "", isEnded: "", + dateRange: [], }); // 预警等级选项 -const warningLevelOptions = ref([ - { label: "红色预警", value: "红色预警" }, - { label: "橙色预警", value: "橙色预警" }, - { label: "黄色预警", value: "黄色预警" }, - { label: "蓝色预警", value: "蓝色预警" }, -]); +// 已从 index.js 导入 // 行政区域选项 -const regionOptions = ref([ - { label: "重庆市", value: "重庆市" }, - { label: "万州区", value: "万州区" }, - { label: "沙坪坝区", value: "沙坪坝区" }, - { label: "渝中区", value: "渝中区" }, -]); +// 已从 index.js 导入 // 是否结束选项 -const isEndedOptions = ref([ - { label: "是", value: "是" }, - { label: "否", value: "否" }, +// 已从 index.js 导入 + +// 表格列配置 +const tableColumns = ref([ + { label: "序号", width: "50px" }, + { label: "预警等级", width: "100px" }, + { label: "气象类型", width: "100px" }, + { label: "行政区域", width: "100px" }, + { label: "预警时间", width: "160px" }, + { label: "结束时间", width: "160px" }, + { label: "影响点数量", flex: "1" }, ]); // 表格数据 @@ -290,7 +306,8 @@ watch( } .warning-dialog { - width: 950px; + width: 80vw; + max-width: 900px; background: linear-gradient(135deg, rgba(20, 50, 90, 0.95) 0%, rgba(10, 30, 60, 0.98) 100%); border: 1px solid rgba(64, 169, 255, 0.3); border-radius: 12px; @@ -341,7 +358,8 @@ watch( .filter-row { display: flex; - gap: 24px; + flex-wrap: wrap; + gap: 12px; } .filter-item { @@ -363,6 +381,7 @@ watch( border: 1px solid rgba(64, 169, 255, 0.3); box-shadow: none; border-radius: 4px; + width: 210px !important; .el-input__inner { color: #fff; @@ -380,6 +399,47 @@ watch( } } } + + .date-range-picker { + :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; + width: 210px !important; + + .el-input__inner { + color: #fff; + font-size: 13px; + background: transparent; + + &::placeholder { + color: rgba(255, 255, 255, 0.4); + } + } + + .el-input__suffix { + .el-icon { + color: rgba(255, 255, 255, 0.6); + } + } + } + + :deep(.el-range-input) { + background: transparent; + color: #fff; + font-size: 13px; + + &::placeholder { + color: rgba(255, 255, 255, 0.4); + } + } + + :deep(.el-range-separator) { + color: rgba(255, 255, 255, 0.6); + font-size: 13px; + } + } } } @@ -555,3 +615,62 @@ watch( background: linear-gradient(180deg, #69c0ff 0%, #40a9ff 100%); } + + diff --git a/packages/screen/src/views/RiskWarning/index.vue b/packages/screen/src/views/RiskWarning/index.vue index 3455fc9..177e21a 100644 --- a/packages/screen/src/views/RiskWarning/index.vue +++ b/packages/screen/src/views/RiskWarning/index.vue @@ -7,7 +7,11 @@ alt="" />
- +
潼南 @@ -90,7 +96,6 @@ @openClearanceSituation="openDialog('clearanceSituation')" @openControlSituation="openDialog('controlSituation')" > -
@@ -245,8 +250,8 @@