Newer
Older
smartwell_front / src / views / wellManage / infoWell.vue
<template>
  <el-dialog :visible.sync="dialogFormVisible" class="editDialog" title="井详情" width="70%" append-to-body>
    <el-descriptions class="margin-top" title="" :column="2" border>
      <el-descriptions-item v-for="config of formConfig" :key="config.value" :span="config.span">
        <template slot="label">
          {{ config.label }}
        </template>
        <template v-if="config.type=='text'">
          {{ wellForm[config.value]?wellForm[config.value]:config.placeholder }}
        </template>
        <template v-if="config.type=='areaName'">
          {{ areaName }}
        </template>
        <!--        <template v-if="config.type=='images'">-->
        <!--          <div v-if="imageList.length==0">-->
        <!--            无-->
        <!--          </div>-->
        <!--          <el-upload-->
        <!--            v-else-->
        <!--            ref="upload"-->
        <!--            :file-list="imageList"-->
        <!--            :on-preview="handlePictureCardPreview"-->
        <!--            class="hide"-->
        <!--            multiple-->
        <!--            accept=".jpg,.jpeg,.png "-->
        <!--            action="string"-->
        <!--            list-type="picture-card"-->
        <!--            disabled-->
        <!--          />-->
        <!--        </template>-->
      </el-descriptions-item>
    </el-descriptions>
    <div class="watch-div">
      <a-map-container
        ref="map"
        :center="center"
        :zoom="zoom"
        :base-layer="baseLayer"
        style="height: 300px"
        vid="info-well-map"
        class="map-demo"
      >
        <a-map-marker v-for="marker of markers" :position="marker.position" />
      </a-map-container>
    </div>
    <!--    </el-scrollbar>-->
  </el-dialog>
</template>

<script>
import { getAreaList, getAreaByDept, getAreaListPage } from '@/api/system/area'
import { getWellInfo } from '@/api/well/well'
import AMapContainer from '@/components/Amap/AMapContainer'
import AMapMarker from '@/components/Amap/AMapMarker'

export default {
  name: 'InfoWell',
  components: { AMapContainer, AMapMarker },
  data() {
    return {
      dialogFormVisible: false, // 对话框是否显示
      wellForm: {
        id: null, // 井id
        wellCode: '', // 点位编号
        wellName: '', // 点位名称
        wellType: '', // 点位类型
        wellTypeName: '', // 点位类型名称
        deptid: '', // 权属单位
        deptName: '', // 权属单位名称
        bfztName: '', // 布防状态
        deep: '', // 井深,
        position: '', // 位置描述
        coordinateX: '',
        coordinateY: '',
        latBaidu: '',
        lngBaidu: '',
        latGaode: '',
        lngGaode: '',
        photos: '', // 照片路径
        notes: '', // 备注,
        qu: '',
        area: '', // 街道
        road: '',
        responsibleDept: '' // 维护人员部门
      }, // 表单
      formConfig: [
        { type: 'text', label: '点位名称', value: 'wellName', placeholder: '未知' },
        { type: 'text', label: '点位编号', value: 'wellCode', placeholder: '未知' },
        { type: 'text', label: '点位类型', value: 'wellTypeName', placeholder: '未知' },
        { type: 'text', label: '权属单位', value: 'deptName', placeholder: '未知' },
        { type: 'text', label: '点位维护单位', value: 'responsibleDeptName', placeholder: '未知' },
        { type: 'text', label: '井深(m)', value: 'deep', placeholder: '--' },
        { type: 'text', label: '布防状态', value: 'bfztName', placeholder: '未知' },
        { type: 'areaName', label: '所在区域', value: 'areaName', placeholder: '未知', span: 2 },
        { type: 'text', label: '经度', value: 'coordinateX', placeholder: '未知' },
        { type: 'text', label: '纬度', value: 'coordinateY', placeholder: '未知' },
        { type: 'text', label: '所在道路', value: 'road', placeholder: '未知', span: 5 },
        { type: 'text', label: '详细地址', value: 'position', placeholder: '未知', span: 5 },
        { type: 'images', label: '路标图片', value: 'imageList', placeholder: '无', span: 5 }
      ], // 表单配置项
      center: [121.59996, 31.197646],
      zoom: 16,
      baseLayer: 'gaode_vec', // 底图图层
      markers: [],
      imageList: [],
      icon: require('@/assets/overview/pure-position-icon.png'), // 报警图标
      quList: [],
      jiedaoList: [],
      labelPosition: 'right',
      loading: true
    }
  },
  computed: {
    areaName() {
      if (this.wellForm.quName) {
        return this.wellForm.quName + this.wellForm.areaName
      } else {
        return ''
      }
    }
  },
  watch: {
    qu(val) { // 监控区变化
      this.fetchArea2()
    }
  },
  mounted: function() {
    // this.fetchArea1()
  },
  methods: {
    // 初始化对话框
    initDialog: function(wellId) {
      this.dialogFormVisible = true
      // this.fetchArea1()
      // 获取井数据
      getWellInfo(wellId).then(response => {
        this.markers = []
        this.listLoading = false
        const row = response.data
        this.wellForm = {
          id: row.id, // 井id
          wellCode: row.wellCode, // 点位编号
          wellName: row.wellName, // 点位名称
          wellType: row.wellType, // 点位类型
          wellTypeName: row.wellTypeName, // 点位类型
          deptid: row.deptid, // 权属单位
          deptName: row.deptName, // 权属单位
          deep: row.deep, // 井深,
          bfztName: row.bfztName, // 布防状态
          position: row.position, // 位置描述
          road: row.road,
          photos: row.photos, // 照片路径
          notes: row.notes, // 备注,
          coordinateX: row.coordinateX,
          coordinateY: row.coordinateY,
          latBaidu: row.latBaidu,
          lngBaidu: row.lngBaidu,
          latGaode: row.latGaode,
          lngGaode: row.lngGaode,
          qu: row.qu,
          area: row.area, // 街道
          responsibleDept: row.responsibleDept // 维护人员部门
        }
        this.center = [row.lngGaode, row.latGaode]
        this.markers.push({ position: [row.lngGaode, row.latGaode] })
        if (row.deptid && row.deptid !== '') {
          this.fetchArea1()
          this.fetchArea2()
        } else {
          this.loading = false
        }
        // 处理图片
        const urls = row.photos.split(';')
        const base_url = this.baseConfig.baseUrl + '/static/'
        for (const url of urls) {
          if (url) {
            this.imageList.push({ name: url, url: base_url + url })
          }
        }
      })
    },
    // 获取区域1
    fetchArea1() {
      const query = {
        keywords: this.wellForm.qu,
        offset: 1,
        limit: 20,
        sort: '',
        order: ''
      }
      getAreaListPage(query).then(response => {
        this.quList = response.data.rows.filter(item => item.id === this.wellForm.qu)
        this.wellForm.quName = this.quList.length > 0 ? this.quList[0].areaName : ''
      })
    },
    // 获取区域2
    fetchArea2() {
      const query = {
        keywords: this.wellForm.area,
        offset: 1,
        limit: 20,
        sort: '',
        order: ''
      }
      getAreaListPage(query).then(response => {
        this.jiedaoList = response.data.rows
        this.wellForm.areaName = this.jiedaoList.length > 0 ? this.jiedaoList[0].areaName : ''
      })
    },
    // 取消
    cancel() {
      this.imageList = []
      this.dialogFormVisible = false
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss">
  .hide .el-upload--picture-card {
    display: none;
  }
  .editDialog{
    .el-dialog {
      width: 900px;
      margin-top: 10vh !important;
      .el-dialog__body{
      }
      .el-scrollbar {
        height: 450px;
        width: 100%;
      }
      .el-scrollbar__wrap {
        /*overflow: scroll;*/
        overflow-x: auto;
        overflow-y: auto;
      }
      .el-scrollbar__view{
        width: 98%;
      }
      .el-form-item {
        margin-bottom: 12px;
      }
    }
  }
  .el-select{
    width: 100%;
  }
  .line{
    width: 50px;
    margin-left: 5px;
  }
  .hide .el-upload-–picture-card{
    display: none;
  }
  .imgBox{
    width: 100%;
    text-align: center;
  }
  .watch-div {
    margin: 10px 0px;
    .map-demo{
      height: 250px;
    }
  }
</style>