From 7b52f30bc471b7f433eea950f77ecb74a87d867c Mon Sep 17 00:00:00 2001 From: riku <risaku@163.com> Date: 星期三, 05 三月 2025 17:33:02 +0800 Subject: [PATCH] 污染溯源模块编写中 --- src/api/index.js | 2 src/components/grid/GridSearch.vue | 34 +++-------- src/components.d.ts | 3 + src/components/scene/SceneSearch.vue | 51 +++++++++++++--- src/components/grid/GridTool.vue | 0 src/components/list/DescriptionsList.vue | 31 ++++++++++ src/components/list/DescriptionsListItem.vue | 37 ++++++++++++ 7 files changed, 122 insertions(+), 36 deletions(-) diff --git a/src/api/index.js b/src/api/index.js index b7a1bfb..fd8d2c9 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -1,7 +1,7 @@ import axios from 'axios'; import { ElMessage } from 'element-plus'; -const debug = true; +const debug = false; let ip1 = 'http://47.100.191.150:9029/'; // console.log(import.meta.env); diff --git a/src/components.d.ts b/src/components.d.ts index 2431e7a..86cdcb5 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -16,6 +16,8 @@ CoreMenu: typeof import('./components/core/CoreMenu.vue')['default'] DataSummary: typeof import('./components/monitor/DataSummary.vue')['default'] DataTable: typeof import('./components/monitor/DataTable.vue')['default'] + DescriptionsList: typeof import('./components/list/DescriptionsList.vue')['default'] + DescriptionsListItem: typeof import('./components/list/DescriptionsListItem.vue')['default'] DeviceCreate: typeof import('./components/device/DeviceCreate.vue')['default'] DeviceManage: typeof import('./components/device/DeviceManage.vue')['default'] ElButton: typeof import('element-plus/es')['ElButton'] @@ -51,6 +53,7 @@ FactorTrend: typeof import('./components/monitor/FactorTrend.vue')['default'] GaugeChart: typeof import('./components/chart/GaugeChart.vue')['default'] GridSearch: typeof import('./components/grid/GridSearch.vue')['default'] + GridTool: typeof import('./components/grid/GridTool.vue')['default'] HistoricalTrajectory: typeof import('./components/animation/HistoricalTrajectory.vue')['default'] MapLocation: typeof import('./components/map/MapLocation.vue')['default'] MapScene: typeof import('./components/map/MapScene.vue')['default'] diff --git a/src/components/grid/GridSearch.vue b/src/components/grid/GridSearch.vue index c9d90a6..3026b45 100644 --- a/src/components/grid/GridSearch.vue +++ b/src/components/grid/GridSearch.vue @@ -7,31 +7,15 @@ width="300px" > <template #default> - <el-form - :inline="false" - ref="formRef" - label-position="right" - label-width="100px" - > - <el-form-item label="缃戞牸缂栧彿锛�"> - <div> - {{ data.cellIndex }} - </div> - </el-form-item> - <el-form-item label="缁忕含搴︼細"> - <div> - {{ data.longitude + ', ' + data.latitude }} - </div> - </el-form-item> - <el-form-item label="PM2.5锛�"> - <div> - {{ data.pm25 + ' 渭g/m鲁' }} - </div> - </el-form-item> - <el-form-item label="鍥涜嚦鑼冨洿锛�"> - <div>/</div> - </el-form-item> - </el-form> + <DescriptionsList v-if="data"> + <DescriptionsListItem label="缃戞牸缂栧彿" :content="data.cellIndex" /> + <DescriptionsListItem + label="缁忕含搴�" + :content="data.longitude + ', ' + data.latitude" + /> + <DescriptionsListItem label="PM2.5" :content="data.pm25 + ' 渭g/m鲁'" /> + <DescriptionsListItem label="鍥涜嚦鑼冨洿" content="/" /> + </DescriptionsList> </template> <template #footer> </template> </CardDialog> diff --git a/src/components/grid/GridTool.vue b/src/components/grid/GridTool.vue new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/components/grid/GridTool.vue diff --git a/src/components/list/DescriptionsList.vue b/src/components/list/DescriptionsList.vue new file mode 100644 index 0000000..4afb85a --- /dev/null +++ b/src/components/list/DescriptionsList.vue @@ -0,0 +1,31 @@ +<template> + <div class="title-wrapper"> + <div v-if="title" class="fy-h2">{{ title }}</div> + <slot name="extra"></slot> + </div> + <table> + <tbody> + <slot></slot> + </tbody> + </table> +</template> + +<script> +export default { + props: { + title: String + } +}; +</script> + +<style scoped> +.title-wrapper { + display: flex; + justify-content: space-between; + align-items: center; +} + +table { + width: 100%; +} +</style> diff --git a/src/components/list/DescriptionsListItem.vue b/src/components/list/DescriptionsListItem.vue new file mode 100644 index 0000000..2aeb245 --- /dev/null +++ b/src/components/list/DescriptionsListItem.vue @@ -0,0 +1,37 @@ +<template> + <tr> + <td v-if="label" class="td-1">{{ label }}</td> + <td v-else class="td-1"><slot name="label"></slot></td> + <td v-if="content" class="td-2">{{ content }}</td> + <td v-else class="td-2"><slot name="content"></slot></td> + </tr> +</template> + +<script> +export default { + props: { + label: String, + content: String + } +}; +</script> + +<style scoped> +tr { + font-size: var(--el-font-size-small); +} +td { + border: 1px solid rgba(255, 255, 255, 0.616); + padding: 2px 6px; +} +.td-1 { + width: 68px; + background-color: var(--bg-color-2); + color: white; +} + +.td-2 { + color: white; + /* background-color: var(--el-fill-color-light); */ +} +</style> diff --git a/src/components/scene/SceneSearch.vue b/src/components/scene/SceneSearch.vue index 965f216..e17973c 100644 --- a/src/components/scene/SceneSearch.vue +++ b/src/components/scene/SceneSearch.vue @@ -15,7 +15,7 @@ width="400px" > <template #default> - <div v-show="nextPage"> + <div v-show="!nextPage"> <div> <el-text size="small" type="warning"> 鍏辫{{ sceneStore.sceneList.length }}涓偣浣嶏紝鍏朵腑{{ @@ -82,13 +82,41 @@ <!-- </el-col> --> </el-row> </div> - <div v-show="!nextPage"> - <el-button - @click="nextPage = false" - type="primary" - class="el-button-custom p-events-auto" - >杩斿洖</el-button - > + <div v-show="nextPage"> + <DescriptionsList v-if="selectedScene" title="鍦烘櫙璇︽儏"> + <template #extra> + <el-button + @click="nextPage = false" + icon="back" + type="primary" + size="small" + class="el-button-custom p-events-auto" + >杩斿洖</el-button + > + </template> + <DescriptionsListItem label="鍚嶇О" :content="selectedScene.name" /> + <DescriptionsListItem label="绫诲瀷" :content="selectedScene.type" /> + <DescriptionsListItem + label="鍖哄幙" + :content="selectedScene.districtName" + /> + <DescriptionsListItem + label="鍦板潃" + :content="selectedScene.location" + /> + <DescriptionsListItem + label="缁忕含搴�" + :content="selectedScene.longitude + ', ' + selectedScene.latitude" + /> + <DescriptionsListItem + label="闈犺繎绔欑偣" + :content="selectedScene.closestDevice.name" + /> + <DescriptionsListItem + label="鐩歌窛绔欑偣" + :content="selectedScene.closestDevice.dis + '绫�'" + /> + </DescriptionsList> </div> </template> <template #footer> @@ -157,7 +185,8 @@ dialogVisible: false, onConfirm: undefined, showSceneTypes: [], - nextPage: false + nextPage: false, + selectedScene: undefined }; }, computed: { @@ -218,7 +247,7 @@ if (!s.closestDevice || dis < s.closestDevice.dis) { s.closestDevice = { name: d.name, - dis: dis + dis: Math.round(dis) }; } }); @@ -254,6 +283,7 @@ // }, showSceneList(nV, oV) { if (nV != oV) { + this.nextPage = false; this.dialogVisible = true; this.drawMarks(nV); } @@ -283,6 +313,7 @@ }, handleRowClick(row, col, event) { this.nextPage = true; + this.selectedScene = row; MapUtil.setCenter([row.longitude, row.latitude], true); }, filterHandler(value, row, column) { -- Gitblit v1.9.3