<!-- Description: 闸井监测-详情 Author: 李亚光 Date: 2023-08-13 --> <script lang="ts" setup name="WellDetail"> import { ElMessage } from 'element-plus' import detailData from './detailData.vue' import { getDictByCode } from '@/api/system/dict' import showPosition from '@/views/home/device/device/components/showPosition.vue' import { getWellDetail } from '@/api/home/well/well' const $router = useRouter() const $route = useRoute() // 页面详情数据 const detailInfo = ref<{ [key: string]: string }>({}) // 描述列表数据 const descriptionsList = ref([ { text: '闸井位号', value: 'tagNumber', align: 'center', }, { text: '闸井编号', value: 'ledgerCode', align: 'center', }, { text: '闸井名称', value: 'ledgerName', align: 'center', }, { text: '是否直埋', value: 'buried', align: 'center', }, { text: '使用状态', value: 'onStateName', align: 'center', }, { text: '产权单位', value: 'propertyOwner', align: 'center', }, { text: '产权单位联系人', value: 'propertyPerson', align: 'center', }, { text: '产权单位联系电话', value: 'propertyPhone', align: 'center', }, { text: '管理方式', value: 'manageTypeName', align: 'center', }, { text: '管理单位', value: 'deptName', align: 'center', }, { text: '负责人', value: 'personName', align: 'center', }, { text: '负责人联系方式', value: 'telephone', align: 'center', }, { text: '监控状态', value: 'monitorStateName', align: 'center', }, { text: '启用日期', value: 'openDate', align: 'center', }, { text: '所在区域', value: 'area', align: 'center', }, { text: '详细位置', value: 'position', align: 'center', }, { text: '经度', value: 'lngGaode', align: 'center', }, { text: '纬度', value: 'latGaode', align: 'center', }, { text: '标签', value: 'marker', align: 'center', }, ]) // 页面loading const loading = ref(false) // 获取闸井详情数据 const fetchWellDetail = () => { loading.value = true // 设备在用情况 getDictByCode('useStatus').then((res1) => { // const data = JSON.parse($route.query.row as string) // detailInfo.value = data getWellDetail($route.query.id as string).then((res) => { detailInfo.value = res.data detailInfo.value.validName = res1.data[res1.data.findIndex((citem: any) => detailInfo.value.valid === citem.value)].name loading.value = false detailInfo.value.buried = detailInfo.value.buried === '1' ? '是' : detailInfo.value.buried === '0' ? '否' : '' // 处理所在区域字段 if (detailInfo.value.area && window.localStorage.getItem('areaCode')) { const areaCode = JSON.parse(localStorage.getItem('areaCode') as string) detailInfo.value.area = areaCode[detailInfo.value.area] ? areaCode[detailInfo.value.area] : '其他' } }).catch(() => { loading.value = false }) }).catch(() => { loading.value = false }) } // 点击经纬度展示地图 const mapRef = ref() const showMap = (data: any) => { if (data.text !== '详细位置' || !detailInfo.value[data.value]) { return } if (!detailInfo.value.lngGaode || !detailInfo.value.latGaode) { ElMessage.warning('该数据缺少坐标信息') return } mapRef.value.initDialog([detailInfo.value.lngGaode, detailInfo.value.latGaode]) } onMounted(() => { fetchWellDetail() }) const detailRef = ref() </script> <template> <!-- 布局 --> <app-container v-loading="loading" class="container"> <show-position ref="mapRef" /> <!-- <detail-page title="闸井详情"> <template #btns> <el-button type="info" @click="$router.back()"> 关闭 </el-button> </template> </detail-page> --> <detail-block-com> <el-descriptions :column="2" border> <el-descriptions-item v-for="item in descriptionsList" :key="item.text" :align="item.align"> <template #label> <span class="label"> {{ item.text }} </span> </template> <span :class="`${item.text === '详细位置' ? 'pointer' : ''}`" @click="showMap(item)"> {{ detailInfo[item.value] || '' }} </span> </el-descriptions-item> </el-descriptions> </detail-block-com> <detail-block-com> <detail-data ref="detailRef" /> </detail-block-com> </app-container> </template> <style lang="scss" scoped> ::v-deep(.el-descriptions__label) { width: 15%; } ::v-deep(.el-descriptions__content) { width: 35%; } .pointer { color: #0d76d4; &:hover { cursor: pointer; } } </style>