Newer
Older
smartwell_front / src / views / home / well / components / detail.vue
liyaguang on 22 Jan 4 KB 场站视频
<!--
  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>