派生自 wuyushui/SewerAndRainNetwork

陈泽平
2021-05-30 e3608132cc667c16ea10f450807e0feddaf55d1f
Merge branch 'develop' of http://xearth.cn:6600/r/wuyushui/SewerAndRainNetwork into develop
4个文件已添加
14个文件已修改
1136 ■■■■ 已修改文件
public/assets/images/map-pages/title_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/images/map-pages/title_bg2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/css/map/map-panel-style.less 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LayerController/modules/LcServiceLayer.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/PublicDataStandard.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterDayChart.vue 243 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterHoursChart.vue 227 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/WasteWater/WasteWaterIndex.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/DisposalEvent.vue 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/base-page/enterprise-emergency/event-handling/DisposalProposed.vue 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/helpers/MapManager.js 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/panel/RightSearchPanel.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/table/components/tabHandover.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Constants.js 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/conf/Topic.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/popup/DynamicHeader/DynamicTable.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/popup/DynamicHeader/TableColumn.vue 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/assets/images/map-pages/title_bg.png
public/assets/images/map-pages/title_bg2.png
src/App.vue
@@ -29,5 +29,9 @@
  -ms-overflow-style: none;
  font-size: 12px;
}
.popoverBoxStyle{
  border: 0.00521rem solid #00fff6;
  box-shadow: 0 0 0.03rem #00fff6;
  background-color: rgba(0, 16, 30, 0.7) !important;
}
</style>
src/assets/css/map/map-panel-style.less
@@ -829,6 +829,27 @@
  padding: 5px;
  color: #f2f2f2;
}
.el-collapse-item__header {
  display: flex;
  align-items: center;
  height: 48px;
  line-height: 48px;
  background-color: @background-color;
  color: @color;
  cursor: pointer;
  border-bottom: 1px solid @color;
  font-size: 13px;
  font-weight: 500;
  transition: border-bottom-color .3s;
  outline: 0;
}
.el-collapse-item__wrap{
  background-color: @background-color;
}
.el-collapse-item__content{
  color: @color;
}
/************搜索数据分页功能总数量样式添加************/
.page_total {
src/components/LayerController/modules/LcServiceLayer.vue
@@ -7,17 +7,17 @@
                    <i class="downUp el-icon-caret-bottom" @click="item.isShow=!item.isShow" :class="item.isShow?'':'active'" ></i><!-- el-icon-arrow-down -->
                    <!-- 一级图层遍历 -->
                    <div style="padding-left:25px;padding-top:10px;color:#fff;font-size: 16px;">
                        <input type="checkbox"  :class="item.type==1?'active':''" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code" @change="swAllLayers(item)"/>{{ item.name }}
                        <input type="checkbox" :class="{ 'active': item.type === 1 }" :name="'wmsLayer_'+item.code" :checked="item.checked" :value="item.code" @change="swAllLayers(item)"/>{{ item.name }}
                    </div>
                    <div class="layerbox-item" v-show="item.isShow" >
                        <!-- 二级图层遍历 -->
                        <div class="basemap-layer-item" v-for="(itm,index2) in item.layers" :key="index2" :class="!itm.layers?'felxs':''" >
                            <input type="checkbox" :class="itm.type==1?'active':''" :name="'wmsSublayers_'+item.code+'_'+itm.code" :checked="itm.checked" :value="itm.code" @change="swAllLayers(itm)"/>{{ itm.name }}
                            <input type="checkbox" :class="{ 'active': itm.type === 1 }" :name="'wmsSublayers_'+item.code+'_'+itm.code" :checked="itm.checked" :value="itm.code" @change="swAllLayers(itm)"/>{{ itm.name }}
                            <!-- 三级图层遍历 -->
                            <div class="layerbox-item-3" v-show="itm.layers">
                                <div class="basemap-layer-item" v-for="(layer,index3) in itm.layers" :key="index3">
                                    <input type="checkbox"
                                           :class="layer.type==1?'active':''"
                                           :class="{ 'active': layer.type === 1 }"
                                           :name="'wmsSublayers_'+item.code+'_'+layer.code"
                                           :checked="layer.checked"
                                           :value="layer.code"
@@ -36,7 +36,7 @@
<script>
import LcServiceLayerFilter from '@components/LayerController/modules/LcServiceLayerFilter'
import bus from '@/eventBus'
export default {
  name: 'LcServiceLayer',
  components: { LcServiceLayerFilter },
@@ -68,6 +68,8 @@
      } else {
        this.toggleLayer(item)
      }
      /* <<<<<<< HEAD
      bus.$emit('changeSearchBar', item)
      this.serviceLayers.forEach(function (item1, index1) {
        if (item1.layers) {
          item1.istrue = 0
@@ -112,6 +114,7 @@
          // console.log(item1.layers.length, item1.istrue, item1.isfalse, item1.type)
        }
      })
>>>>>>> de7390c66ef3e3fe316e804495a78d05a01f0160 */
      // console.log(this.serviceLayers)
    },
    swLayers (configs, checked) {
@@ -126,6 +129,30 @@
        }
      }
    },
    setLayerType (configs, checkedSum) {
      if (configs) {
        for (let i = 0, len = configs.length; i < len; ++i) {
          const config = configs[i]
          const checked = config.checked
          if (config.layers) {
            checkedSum = this.setLayerType(config.layers, checkedSum || 0)
            if (checkedSum === config.layers.length) {
              config.type = 2
              config.checked = true
            } else if (checkedSum === 0) {
              config.type = 0
              config.checked = false
            } else {
              config.type = 1
            }
            checkedSum = 0
            continue
          }
          checkedSum = checkedSum + (checked ? 1 : 0)
        }
        return checkedSum
      }
    },
    toggleLayer (itm) {
      if (itm.checked) {
        window.layerFactory.show(itm)
@@ -134,6 +161,15 @@
      }
      // this.updateWms()
    }
  },
  watch: {
    serviceLayers: {
      handler: function (val) {
        this.setLayerType(val, 0)
      },
      immediate: true,
      deep: true
    }
  }
}
</script>
src/components/base-page/PublicDataStandard.vue
@@ -7,7 +7,7 @@
      <!--      <span class="grid-content">废气流量 : <i style="color: #e8ee0b">120343.18</i></span>-->
      <span class="grid-content" v-for="item in dataStandard" :key="item.current.name">{{ item.current.name }} :
        <i style="color: #e8ee0b">{{ item.current.val }}</i>  {{
          item.standard.name ? item.standard.name + ':' : ''
          item.standard.name && item.current.name.indexOf('流量') === -1 ? item.standard.name + ':' : ''
        }} <i style="color: #fff">{{ item.standard.val }}</i></span>
    </div>
  </div>
@@ -16,6 +16,11 @@
<script>
export default {
  name: 'PublicDataStandard',
  watch: {
    dataStandard (val, oldVal) {
      this.dataStandard = val
    }
  },
  props: {
    dataStandard: {
      type: Array,
@@ -31,12 +36,12 @@
.animation {
  .information {
    .grid-content {
      padding: 0.02rem;
      background-color: #2e4967;
      padding: 0.03rem 0.08rem 0.03rem 0.08rem;
      text-align: center;
      border-radius: 0.02rem;
      line-height: 0.15rem;
      margin: 0 0.05rem;
      margin: 0 0.03rem;
      box-shadow: 0 0 10px rgba(129,211,248,.35) inset;
    }
  }
}
src/components/base-page/WasteWater/WasteWaterDayChart.vue
@@ -13,7 +13,14 @@
                <el-option v-for="(item,index) in formData.regionList" :key="index" :label="item" :value="item"></el-option>
            </el-select>
            <el-button @click="querySearch()">查询</el-button>
            <el-button>明细表</el-button>
            <el-popover
                placement="top"
                width="100%"
                popper-class="popoverBoxStyle"
                trigger="click">
              <dynamic-table :tableData="tableData" :tableHeader="tableConfig" v-if="tableData"></dynamic-table>
              <el-button slot="reference">明细表</el-button>
            </el-popover>
        </div>
        <div class="echarts-chart">
            <div ref="echartsDay"></div>
@@ -26,56 +33,19 @@
import dayjs from 'dayjs'
import PublicDataStandard from '../PublicDataStandard'
import mapApi from '@/api/mapApi'
import DynamicTable from '../../../views/popup/DynamicHeader/DynamicTable' // 多级表头
export default {
  name: 'WasteWaterDayChart',
  components: {
    PublicDataStandard
    PublicDataStandard,
    DynamicTable
  },
  data () {
    return {
      // tab栏传递接收数据
      dataStandard: [
        {
          current: {
            name: '氮氧化物',
            val: 29.93
          },
          standard: {
            name: '标准',
            val: 100
          }
        },
        {
          current: {
            name: '二氧化硫',
            val: 17.34
          },
          standard: {
            name: '标准',
            val: 50
          }
        },
        {
          current: {
            name: '烟尘',
            val: 6.93
          },
          standard: {
            name: '标准',
            val: 30
          }
        },
        {
          current: {
            name: '废气流量',
            val: 120
          },
          standard: {
            name: '',
            val: null
          }
        }],
      dataStandard: [],
      tableData: null,
      formData: {
        region: '25',
        regionList: [25, 50, 75, 100],
@@ -86,7 +56,98 @@
      dataType: 1,
      jcdID: 1,
      bzz: null,
      bzzList: []
      bzzList: [],
      // 表头数据
      tableConfig: [
        {
          id: 100,
          label: '排放点',
          prop: 'OnLineMonEmissPointName'
        },
        {
          id: 200,
          label: '监测时间',
          prop: 'MonTimeStr'
        },
        {
          id: 300,
          label: 'COD',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 310,
              label: '实测排放量(kg/h)',
              prop: 'COD_EmissQty'
            },
            {
              id: 320,
              label: '实测浓度(mg/l)',
              prop: 'COD_MonQty'
            },
            {
              id: 330,
              label: '标准值(mg/l)',
              prop: 'COD_StdValue'
            }
          ]
        },
        {
          id: 400,
          label: '氨氮',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 410,
              label: '实测排放量(kg/h)',
              prop: '氨氮_EmissQty'
            },
            {
              id: 420,
              label: '实测浓度(mg/l)',
              prop: '氨氮_MonQty'
            },
            {
              id: 430,
              label: '标准值(mg/l)',
              prop: '氨氮_StdValue'
            }
          ]
        },
        {
          id: 500,
          label: 'PH',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 510,
              label: '实测排放量(kg/h)',
              prop: 'pH_EmissQty'
            },
            {
              id: 520,
              label: '实测浓度(mg/l)',
              prop: 'pH_MonQty'
            },
            {
              id: 530,
              label: '标准值(mg/l)',
              prop: 'pH_StdValue'
            }
          ]
        },
        {
          id: 600,
          label: '废水流量',
          prop: '',
          children: [
            {
              id: 610,
              label: '实测流量(m³/h)',
              prop: '废水流量_MonQty'
            }
          ]
        }
      ]
    }
  },
  mounted () {
@@ -104,7 +165,7 @@
        poltMtrlId: '',
        emissTypeId: '',
        onLineMonEmissPointId: 23,
        monItemId: 28,
        monItemId: '28,31,35', // 监测项  COD、氨氮、PH
        beginTime: this.formData.timeStart,
        endTime: this.formData.timeEnd,
        dataType: this.dataType
@@ -114,6 +175,8 @@
    },
    get24HourDate (res) {
      if (res.length > 0) {
        this.dataStandard = []
        this.tableData = this.analysisResult(res) // 小时明细表解析结果
        // 处理数据开始
        const d = res
        const nameList = [] // 存放图例
@@ -148,19 +211,44 @@
          if (nameList.length === 0) {
            nameList.push(d[i].PoltmtrlName.trim())
            dateList.push(strDate)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: ''
              },
              standard: {
                name: '标准',
                val: ''
              }
            })
            bzh.push(d[i].StdValue)
            data = {
              name: d[i].PoltmtrlName.trim(),
              data: [d[i].MonQty]
              data: []
            }
            if (d[i].MonQty !== null) {
              data.data.push(d[i].MonQty)
            }
            dataList.push(data)
          } else if (nameList.indexOf(d[i].PoltmtrlName.trim()) < 0) {
            nameList.push(d[i].PoltmtrlName)
            bzh.push(d[i].StdValue)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: ''
              },
              standard: {
                name: '标准',
                val: ''
              }
            })
            data = {
              name: d[i].PoltmtrlName.trim(),
              data: [d[i].MonQty]
              data: []
            }
            if (d[i].MonQty !== null) {
              data.data.push(d[i].MonQty)
            }
            dataList.push(data)
          } else {
@@ -169,7 +257,7 @@
            }
            for (let j = 0; j < dataList.length; j++) {
              if (d[i].PoltmtrlName.trim() === dataList[j].name) {
                dataList[j].data.push(d[i].MonQty)
                if (d[i].MonQty !== null)dataList[j].data.push(d[i].MonQty)
              }
            }
          }
@@ -265,7 +353,10 @@
          }
          ydatas.push(ydata)
        }
        for (var t = 0; t < this.dataStandard.length; t++) {
          this.dataStandard[t].current.val = ydatas[t].data[ydatas[t].data.length - 1].toFixed(2)
          this.dataStandard[t].standard.val = ydatas[t].bzz
        }
        const yname = '浓度(mg/l)'
        this.effChartShow(legend, xdata, ydatas, yname, this.jcdID, this.datatype)
      }
@@ -273,7 +364,6 @@
    effChartShow (legend, xdata, ydatas, yname, jcdID, datatype) {
      this.chart = this.$echarts.init(this.$refs.echartsDay)
      this.chart.clear()
      // console.log(this.chart)
      this.chart.clear()
      let dataUnit = ''
      if (datatype === 1) {
@@ -302,12 +392,14 @@
                      biaozhuiz = bzzList[i].bzhui
                    }
                  }
                  if (c.value[1] > biaozhuiz) {
                    return zdcbcolor
                  } else if (c.value[1] > biaozhuiz * 0.9) {
                    return '#FFA500'
                  } else {
                    return '#33c95f'
                  if (c.value) {
                    if (c.value[1] > biaozhuiz) {
                      return zdcbcolor
                    } else if (c.value[1] > biaozhuiz * 0.9) {
                      return '#FFA500'
                    } else {
                      return '#33c95f'
                    }
                  }
                },
                lineStyle: { // 折线的颜色
@@ -544,6 +636,43 @@
      }
      this.chart.setOption(option)
      window.onresize = this.chart.resize
    },
    analysisResult (result) {
      // 处理表格头
      const json = {}
      const arr = []
      // 处理表格内容
      const bodyDataList = []
      const dataMap = {}
      for (let i = 0; i < result.length; i++) {
        json[result[i].PoltmtrlName] = result[i].PoltmtrlName
        const rgdata = result[i]
        const timeTag = rgdata.MonTimeStr
        if (!dataMap[timeTag]) {
          dataMap[timeTag] = { MonTimeStr: '' + rgdata.MonTimeStr }
        }
        // 往数据中添加属性数据
        const el = dataMap[timeTag]
        el.OnLineMonEmissPointName = rgdata.OnLineMonEmissPointName
        el[rgdata.PoltmtrlName + '_EmissQty'] = rgdata.EmissQty ? rgdata.EmissQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_MonQty'] = rgdata.MonQty ? rgdata.MonQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_StdValue'] = rgdata.StdValue ? rgdata.StdValue.toFixed(2) : '--'
      }
      let FSLLtemp = null
      for (var key in json) {
        if (key === '废水流量' || key === '废水') {
          FSLLtemp = key
        } else {
          arr.push(key)
        }
      }
      if (FSLLtemp != null) {
        arr.push(FSLLtemp)
      }
      for (var p in dataMap) {
        bodyDataList.push(dataMap[p])
      }
      return bodyDataList
    }
  }
}
src/components/base-page/WasteWater/WasteWaterHoursChart.vue
@@ -13,7 +13,14 @@
        <el-option v-for="(item,index) in formData.regionList" :key="index" :label="item" :value="item"></el-option>
      </el-select>
      <el-button @click="querySearch()">查询</el-button>
      <el-button>明细表</el-button>
      <el-popover
          placement="top"
          width="100%"
          popper-class="popoverBoxStyle"
          trigger="click">
        <dynamic-table :tableData="tableData" :tableHeader="tableConfig" v-if="tableData"></dynamic-table>
        <el-button slot="reference">明细表</el-button>
      </el-popover>
    </div>
    <div class="echarts-chart">
      <div ref="echartsHour"></div>
@@ -26,56 +33,21 @@
import PublicDataStandard from '../PublicDataStandard'
import dayjs from 'dayjs'
import mapApi from '../../../api/mapApi'
import DynamicTable from '../../../views/popup/DynamicHeader/DynamicTable' // 多级表头
export default {
  name: 'WasteWaterHoursChart',
  components: {
    PublicDataStandard
    PublicDataStandard,
    DynamicTable
  },
  data () {
    return {
      // tab栏传递接收数据
      dataStandard: [
        {
          current: {
            name: '氮氧化物',
            val: 29.93
          },
          standard: {
            name: '标准',
            val: 100
          }
        },
        {
          current: {
            name: '二氧化硫',
            val: 17.34
          },
          standard: {
            name: '标准',
            val: 50
          }
        },
        {
          current: {
            name: '烟尘',
            val: 6.93
          },
          standard: {
            name: '标准',
            val: 30
          }
        },
        {
          current: {
            name: '废气流量',
            val: 123
          },
          standard: {
            name: '',
            val: null
          }
        }],
      dataStandard: [],
      popUpName: '',
      tableData: null,
      mingxiBoxHtml: '',
      formData: {
        region: '25',
        regionList: [25, 50, 75, 100],
@@ -87,7 +59,98 @@
      dataType: 2,
      bzz: null,
      bzzList: [],
      bz: ''
      bz: '',
      // 表头数据
      tableConfig: [
        {
          id: 100,
          label: '排放点',
          prop: 'OnLineMonEmissPointName'
        },
        {
          id: 200,
          label: '监测时间',
          prop: 'MonTimeStr'
        },
        {
          id: 300,
          label: 'COD',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 310,
              label: '实测排放量(kg/h)',
              prop: 'COD_EmissQty'
            },
            {
              id: 320,
              label: '实测浓度(mg/l)',
              prop: 'COD_MonQty'
            },
            {
              id: 330,
              label: '标准值(mg/l)',
              prop: 'COD_StdValue'
            }
          ]
        },
        {
          id: 400,
          label: '氨氮',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 410,
              label: '实测排放量(kg/h)',
              prop: '氨氮_EmissQty'
            },
            {
              id: 420,
              label: '实测浓度(mg/l)',
              prop: '氨氮_MonQty'
            },
            {
              id: 430,
              label: '标准值(mg/l)',
              prop: '氨氮_StdValue'
            }
          ]
        },
        {
          id: 500,
          label: 'PH',
          prop: 'PoltmtrlName',
          children: [
            {
              id: 510,
              label: '实测排放量(kg/h)',
              prop: 'pH_EmissQty'
            },
            {
              id: 520,
              label: '实测浓度(mg/l)',
              prop: 'pH_MonQty'
            },
            {
              id: 530,
              label: '标准值(mg/l)',
              prop: 'pH_StdValue'
            }
          ]
        },
        {
          id: 600,
          label: '废水流量',
          prop: '',
          children: [
            {
              id: 610,
              label: '实测流量(m³/h)',
              prop: '废水流量_MonQty'
            }
          ]
        }
      ]
    }
  },
  mounted () {
@@ -105,18 +168,20 @@
        poltMtrlId: '',
        emissTypeId: '',
        onLineMonEmissPointId: 23,
        monItemId: 28,
        monItemId: '28,31,35', // 监测项  COD、氨氮、PH
        beginTime: this.formData.startTime,
        endTime: this.formData.endTime,
        dataType: this.dataType
      }
      const result = (await mapApi.getQueryOnlineMonData(data)).Result.DataInfo
      // console.log(result)
      this.popUpName = result[0].OnLineMonEmissPointName
      this.get24HourDate(result)
    },
    // 绘制小时数据折线图
    get24HourDate (result) {
      if (result.length > 0) {
        this.dataStandard = []
        this.tableData = this.analysisResult(result) // 小时明细表解析结果
        const d = result
        const nameList = [] // 存放图例
        const dateList = [] // 存放时间
@@ -170,24 +235,43 @@
              }
            }
          }
          if (nameList.length === 0) {
            nameList.push(d[i].PoltmtrlName.trim())
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: 29.93
              },
              standard: {
                name: '标准',
                val: 100
              }
            })
            dateList.push(strDate)
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
            bzh.push(d[i].StdValue)
          } else if (nameList.indexOf(d[i].PoltmtrlName.trim()) < 0) {
            nameList.push(d[i].PoltmtrlName)
            this.dataStandard.push({
              current: {
                name: d[i].PoltmtrlName.trim(),
                val: 29.93
              },
              standard: {
                name: '标准',
                val: 100
              }
            })
            bzh.push(d[i].StdValue)
            dataList.push(data)
            data = []
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
          } else if (i === d.length - 1) {
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
@@ -202,10 +286,9 @@
            if ((d[i].PoltmtrlName === '废水流量' || d[i].PoltmtrlName === '废水') && d[i].MonQty < 0) {
              d[i].MonQty = 0
            }
            data.push(d[i].MonQty)
            if (d[i].MonQty !== null)data.push(d[i].MonQty)
          }
        }
        const newList = []
        for (let i = 0; i < dataList.length; i++) {
@@ -291,7 +374,10 @@
        // console.log(ydatas)
        const yname = '浓度(mg/l)'
        for (var t = 0; t < this.dataStandard.length; t++) {
          this.dataStandard[t].current.val = ydatas[t].data[ydatas[t].data.length - 1].toFixed(2)
          this.dataStandard[t].standard.val = ydatas[t].bzz
        }
        this.effChartShow(legend, xdata, ydatas, yname, this.jcdID, this.datatype)
      }
    },
@@ -570,6 +656,43 @@
      }
      this.chart.setOption(option)
      window.onresize = this.chart.resize
    },
    analysisResult (result) {
      // 处理表格头
      const json = {}
      const arr = []
      // 处理表格内容
      const bodyDataList = []
      const dataMap = {}
      for (let i = 0; i < result.length; i++) {
        json[result[i].PoltmtrlName] = result[i].PoltmtrlName
        const rgdata = result[i]
        const timeTag = rgdata.MonTimeStr
        if (!dataMap[timeTag]) {
          dataMap[timeTag] = { MonTimeStr: '' + rgdata.MonTimeStr }
        }
        // 往数据中添加属性数据
        const el = dataMap[timeTag]
        el.OnLineMonEmissPointName = rgdata.OnLineMonEmissPointName
        el[rgdata.PoltmtrlName + '_EmissQty'] = rgdata.EmissQty ? rgdata.EmissQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_MonQty'] = rgdata.MonQty ? rgdata.MonQty.toFixed(2) : '--'
        el[rgdata.PoltmtrlName + '_StdValue'] = rgdata.StdValue ? rgdata.StdValue.toFixed(2) : '--'
      }
      let FSLLtemp = null
      for (var key in json) {
        if (key === '废水流量' || key === '废水') {
          FSLLtemp = key
        } else {
          arr.push(key)
        }
      }
      if (FSLLtemp != null) {
        arr.push(FSLLtemp)
      }
      for (var p in dataMap) {
        bodyDataList.push(dataMap[p])
      }
      return bodyDataList
    }
  }
}
src/components/base-page/WasteWater/WasteWaterIndex.vue
@@ -84,26 +84,26 @@
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 5px 0;
  padding-left: 0.07rem;
  border-bottom: 1px #243a55 solid;
  .navigation-left {
    display: flex;
    align-items: center;
    .uncheck {
      margin: 0 10px;
      cursor: pointer;
      padding: 5px;
      margin-left: -0.05rem;
      width: .8rem;
      padding: 6px 0;
      /*border: 1px solid #2b87c8;*/
      /*border-radius: 4px;*/
      background-position: 0 0;
      background-repeat: no-repeat;
      background-size: 100% 100%;
      background-image: url("../../../../public/assets/images/map-pages/title_bg.png");
      text-align: center;
      vertical-align: middle !important;
      color: #fff;
      -webkit-transform: skew(30deg);
      -moz-transform: skew(30deg);
      -o-transform: skew(30deg);
      transform: skew(15deg);
    }
    .default-uncheck {
@@ -113,15 +113,13 @@
    }
    .hover {
      background-color: #0e539e;
      background-image: url("../../../../public/assets/images/map-pages/title_bg2.png");
      color: #ffffff;
      cursor: pointer;
    }
    .hover:hover {
      cursor: pointer;
      padding: 5px;
      border: 1px solid #5F9EA0;
      border-radius: 4px;
      text-align: center;
      color: #F0FFFF;
@@ -129,7 +127,6 @@
  }
  .navigation-left :hover {
    background-color: #0e639e;
    color: #fff;
    cursor: pointer;
  }
src/components/base-page/enterprise-emergency/DisposalEvent.vue
@@ -1,72 +1,105 @@
<template>
  <div class="disposal-event">
    <h4 class="sub-title ">事件基本信息</h4>
    <div :model="form">
      <el-row>
        <el-col class="info-label" :span="6">事件名称:</el-col>
        <el-col class="info-text" :span="18">{{ form.nameOfEvent }}</el-col>
      </el-row>
      <el-row>
        <el-col class="info-label" :span="6">
          事件位置:
        </el-col>
        <el-col class="info-text" :span="18">
          <label>{{ form.eventLocation }}</label>
        </el-col>
      </el-row>
      <el-row>
        <el-col class="info-label" :span="6">
          位置描述:
        </el-col>
        <el-col class="info-text" :span="18">
          <label>{{ form.positionDesc }}</label>
        </el-col>
      </el-row>
      <el-row>
        <el-col class="info-label" :span="6">
          事件单位:
        </el-col>
        <el-col class="info-text" :span="18">
          {{ form.incidentUnit }}
        </el-col>
      </el-row>
      <el-row>
        <el-col class="info-label" :span="6">
          事发时间:
        </el-col>
        <el-col class="info-text" :span="18">
          {{ form.atTime }}
        </el-col>
      </el-row>
      <el-row>
        <el-col class="info-label" :span="6">事件描述:</el-col>
        <el-col class="info-text" :span="18">{{ form.eventDesc }}</el-col>
      </el-row>
      <el-row>
        <el-col class="info-label"  span="6">附件:</el-col>
        <el-col class="info-text" :span="18"><a class="link-btn" href="javascript:">附件</a>
          &nbsp;&nbsp;&nbsp;&nbsp;
          <a class="link-btn" href="javascript:">附件</a>
        </el-col>
      </el-row>
  <div>
    <el-scrollbar >
    <div class="disposal-event">
<!--      <el-collapse v-model="activeNames" @change="handleChange">-->
<!--        <el-collapse-item title="事件基本信息" name="1">-->
          <div>
            <h4 class="sub-title ">事件基本信息</h4>
            <div :model="form">
              <el-row>
                <el-col class="info-label" :span="6">事件名称:</el-col>
                <el-col class="info-text" :span="18">{{ form.nameOfEvent }}</el-col>
              </el-row>
              <el-row>
                <el-col class="info-label" :span="6">
                  事件位置:
                </el-col>
                <el-col class="info-text" :span="18">
                  <label>{{ form.eventLocation }}</label>
                </el-col>
              </el-row>
              <el-row>
                <el-col class="info-label" :span="6">
                  位置描述:
                </el-col>
                <el-col class="info-text" :span="18">
                  <label>{{ form.positionDesc }}</label>
                </el-col>
              </el-row>
              <el-row>
                <el-col class="info-label" :span="6">
                  事件单位:
                </el-col>
                <el-col class="info-text" :span="18">
                  {{ form.incidentUnit }}
                </el-col>
              </el-row>
              <el-row>
                <el-col class="info-label" :span="6">
                  事发时间:
                </el-col>
                <el-col class="info-text" :span="18">
                  {{ form.atTime }}
                </el-col>
              </el-row>
              <el-row>
                <el-col class="info-label" :span="6">事件描述:</el-col>
                <el-col class="info-text" :span="18">{{ form.eventDesc }}</el-col>
              </el-row>
              <el-row>
                <el-col class="info-label"  span="6">附件:</el-col>
                <el-col class="info-text" :span="18"><a class="link-btn" href="javascript:">附件</a>
                  &nbsp;&nbsp;&nbsp;&nbsp;
                  <a class="link-btn" href="javascript:">附件</a>
                </el-col>
              </el-row>
            </div>
          </div>
<!--        </el-collapse-item>-->
<!--        <el-collapse-item title="预案匹配" name="2">-->
          <div>
<!--            <h3 class="sub-title">预案匹配</h3>-->
            <el-table :data="tableData" style="width: 100%">
              <el-table-column prop="name" label="预案名称"></el-table-column>
              <el-table-column prop="define" label="预案定义"></el-table-column>
              <el-table-column prop="hierarchy" label="预案层级"></el-table-column>
              <el-table-column prop="classification" label="预案分类"></el-table-column>
              <el-table-column label="附件">
                <template>
                  <a class="link-btn" href="javascript:">预案</a>
                </template>
              </el-table-column>
            </el-table>
          </div>
<!--        </el-collapse-item>-->
<!--        <el-collapse-item title="环境分析报告" name="3">-->
          <div>
            <h3 class="sub-title">环境分析报告</h3>
            <el-table :data="envTableData" style="width: 100%">
              <el-table-column prop="no" label="序号"></el-table-column>
              <el-table-column prop="radius" label="查询半径"></el-table-column>
              <el-table-column prop="reporterTime" label="生成报告时间"></el-table-column>
              <el-table-column prop="classification" label="操作">
                <template slot-scope="scope" >
                  <el-button class="link-btn" @click="handleClickView(scope.row)" type="text" size="small">查看</el-button>
                  <el-button class="link-btn" @click="handleClickDownload(scope.row)" type="text" size="small">下载</el-button>
                </template>
              </el-table-column>
            </el-table>
          </div>
<!--        </el-collapse-item>-->
<!--      </el-collapse>-->
    </div>
    <h3 class="sub-title">预案匹配</h3>
    <el-table :data="tableData" style="width: 100%">
      <el-table-column prop="name" label="预案名称"></el-table-column>
      <el-table-column prop="define" label="预案定义"></el-table-column>
      <el-table-column prop="hierarchy" label="预案层级"></el-table-column>
      <el-table-column prop="classification" label="预案分类"></el-table-column>
      <el-table-column label="附件">
        <template>
          <a class="link-btn" href="javascript:">预案</a>
        </template>
      </el-table-column>
    </el-table>
    </el-scrollbar>
    <div class="event-management">
      <el-input></el-input>
      <el-button type="primary" size="mini" @click="ToManagement">开始分析</el-button>
      <!--            <el-button size="mini">关闭</el-button>-->
    </div>
  </div>
</template>
<script>
@@ -77,6 +110,7 @@
  name: 'DisposalEvent',
  data () {
    return {
      activeNames: ['1'],
      form: {
        nameOfEvent: '***************事件',
        eventLocation: '**********装置',
@@ -116,6 +150,23 @@
          hierarchy: '基层单位',
          classification: '生产'
        }
      ],
      envTableData: [
        {
          no: '1',
          radius: '500m',
          reporterTime: '2021-6-1 18:00:00',
          data: [],
          downloadUrl: ''
        },
        {
          no: '2',
          radius: '1km',
          reporterTime: '2021-6-1 18:00:00',
          data: [],
          downloadUrl: ''
        }
      ]
    }
  },
@@ -123,6 +174,15 @@
    // 开始分析
    ToManagement () {
      eventBus.$emit('event-handling', {})
    },
    handleClickView (item) {
      console.log(item)
    },
    handleClickDownload (item) {
      console.log(item)
    },
    handleChange (val) {
      console.log(val)
    }
  }
}
@@ -131,7 +191,7 @@
<style lang="less" scoped>
.disposal-event {
  padding: 5px;
height: 400px;
  .fixed-width {
    width: 3.2459893rem;
    min-width: 3.2459893rem;
@@ -144,11 +204,6 @@
  /deep/ .el-form-item__label {
    color: @color;
    font-size: 0.08rem;
  }
  .event-management {
    text-align: right;
    margin: 15px;
  }
  .sub-title {
@@ -170,5 +225,8 @@
    text-align: left;
  }
}
.event-management {
  text-align: right;
  margin: 15px;
}
</style>
src/components/base-page/enterprise-emergency/event-handling/DisposalProposed.vue
@@ -1,24 +1,59 @@
<template>
  <div>
<!--    <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%">-->
<!--      <el-table-column prop="define" label="建议处置措施" show-overflow-tooltip></el-table-column>-->
<!--      <el-table-column type="selection" label="预览" width="55"></el-table-column>-->
  <div class="">
    <!--    <el-table ref="multipleTable" :data="tableData" tooltip-effect="dark" style="width: 100%">-->
    <!--      <el-table-column prop="define" label="建议处置措施" show-overflow-tooltip></el-table-column>-->
    <!--      <el-table-column type="selection" label="预览" width="55"></el-table-column>-->
<!--    </el-table>-->
    <!--    </el-table>-->
    <div class="" style="padding: 5px;">
<!--      <div v-for="o in tableData" :key="o" class="text item">-->
<!--        {{ o.content }}-->
<!--      </div>-->
      <!--      <div v-for="o in tableData" :key="o" class="text item">-->
      <!--        {{ o.content }}-->
      <!--      </div>-->
      <div>
        1、关闭阀门B、阀门C,对上游管道进行截流;关闭阀门D,对下游管道进行截流
        <h4 class="sub-title ">管线基本信息</h4>
        <div>
          事件管线:
          <div class="report-con">
            生产1区管线A,介质为含油污水,埋设方式为直埋,材质为无缝钢管,附属设施阀门A。
          </div>
          上游管线
          <div class="report-con">
            生产2区管线B,介质为含油污水,埋设方式为直埋,材质为无缝钢管,附属设施阀门B
          </div>
          <div class="report-con">
            生产2区管线C,介质为含油污水,埋设方式为直埋,材质为无缝钢管,附属设施阀门C
          </div>
          下游管线
          <div class="report-con">
            生产2区管线D,介质为含油污水,埋设方式为直埋,材质为无缝钢管,附属设施阀门D
          </div>
          事件范围内
          <div class="report-con">
            装置区雨水线,介质为雨水管线,埋设方式为明沟 ,材质为无水泥,附属设施截流闸
          </div>
          <div class="report-con">
            装置区雨水线,介质为雨水管线,埋设方式为明沟 ,材质为无水泥,附属设施截流闸
          </div>
        </div>
        <div>
          <h3 class="sub-title">环境分析报告</h3>
          <el-table :data="envTableData" style="width: 100%">
            <el-table-column prop="process" label="建议处置措施"></el-table-column>
            <el-table-column prop="operation" label="操作">
              <template slot-scope="scope">
                <el-button class="link-btn" @click="handleClickView(scope.row)" type="text" size="mini">预览</el-button>
              </template>
            </el-table-column>
          </el-table>
        </div>
        <div>
        </div>
      </div>
    </div>
    <div >
</div>
    <div>
    </div>
  </div>
</template>
@@ -36,9 +71,25 @@
          type: 'closeFM',
          fmGxList: {
            // 上游阀门
            syfm: [{ name: '阀门B', lng: 114, lat: 32 }, { name: '阀门a', lng: 114, lat: 32 }],
            syfm: [{
              name: '阀门B',
              lng: 114,
              lat: 32
            }, {
              name: '阀门a',
              lng: 114,
              lat: 32
            }],
            // 下游阀门
            xyfm: [{ name: '阀门E', lng: 114, lat: 32 }, { name: '阀门F', lng: 114, lat: 32 }]
            xyfm: [{
              name: '阀门E',
              lng: 114,
              lat: 32
            }, {
              name: '阀门F',
              lng: 114,
              lat: 32
            }]
          }
        }, {
          no: 1,
@@ -47,9 +98,25 @@
          type: 'closeFM',
          fmGxList: {
            // 上游阀门
            syfm: [{ name: '阀门B', lng: 114, lat: 32 }, { name: '阀门a', lng: 114, lat: 32 }],
            syfm: [{
              name: '阀门B',
              lng: 114,
              lat: 32
            }, {
              name: '阀门a',
              lng: 114,
              lat: 32
            }],
            // 下游阀门
            xyfm: [{ name: '阀门E', lng: 114, lat: 32 }, { name: '阀门F', lng: 114, lat: 32 }]
            xyfm: [{
              name: '阀门E',
              lng: 114,
              lat: 32
            }, {
              name: '阀门F',
              lng: 114,
              lat: 32
            }]
          }
        }, {
          no: 1,
@@ -58,20 +125,54 @@
          type: 'closeFM',
          fmGxList: {
            // 上游阀门
            syfm: [{ name: '阀门B', lng: 114, lat: 32 }, { name: '阀门a', lng: 114, lat: 32 }],
            syfm: [{
              name: '阀门B',
              lng: 114,
              lat: 32
            }, {
              name: '阀门a',
              lng: 114,
              lat: 32
            }],
            // 下游阀门
            xyfm: [{ name: '阀门E', lng: 114, lat: 32 }, { name: '阀门F', lng: 114, lat: 32 }]
            xyfm: [{
              name: '阀门E',
              lng: 114,
              lat: 32
            }, {
              name: '阀门F',
              lng: 114,
              lat: 32
            }]
          }
        }]
        }],
      envTableData: [
        {
          process: '1、关闭阀门B、阀门C,对上游管道进行截流;关闭阀门D,对下游管道进行截流'
        },
        {
          process: '2.通过跨线/旁路(XXX污水管线)进行导流'
        }, {
          process: '3.展示受影响污水管线及外排口'
        }
      ]
    }
  },
  methods: {
    handleClickView (item) {
      console.log(item)
    },
    handleClickDownload (item) {
      console.log(item)
    }
  }
}
</script>
<style scoped>
<style lang="less" scoped>
.report-con{
  color: @color;
}
</style>
src/components/helpers/MapManager.js
@@ -44,7 +44,7 @@
      var point = this.map.latLngToContainerPoint(latlng, this.map.getZoom())
      const wmsLayerService = window.layerFactory.wmsLayerService
      const layers = wmsLayerService.wmsLayerList.getLayers()
      // const filters = wmsLayerService.wmsLayerList.getFilters()
      const filters = wmsLayerService.wmsLayerList.getFilters()
      const wmsParams = Object.assign({
        LAYERS: layers,
        QUERY_LAYERS: layers,
@@ -54,6 +54,9 @@
        Y: Math.round(point.y),
        BBOX: this.map.getBounds().toBBoxString()
      }, this.defaultWmsParams, params)
      if (filters) {
        wmsParams.CQL_FILTER = filters
      }
      AjaxUtils.get4JsonDataByUrl(WMS_URL, wmsParams, (res) => {
        resolve(res.data)
      })
src/components/panel/RightSearchPanel.vue
@@ -12,7 +12,7 @@
                    </div>
                </li>
            </ul> -->
            <ul v-for="item in topicList" :key="item.name"
            <ul v-for="item in list" :key="item.name"
                :class="item.checked?'module-wrap map-btn-active':'module-wrap map-btn-unactive'"
                @click="()=>{selected(item)}" v-show="item.isShow">
              <el-tooltip :popper-class="'map-tooltip'" effect="dark" :content="item.name" placement="left">
@@ -51,7 +51,7 @@
<script>
import EnvRiskSearch from './topicSearch/EnvRiskSearch'
import DischargeSearch from './topicSearch/DischargeSearch'
import { TopicList } from '../../conf/Topic'
import { topicList } from '../../conf/Topic'
import GasWasteSearch from '@components/panel/topicSearch/GasWasteSearch'
import WaterWasteSearch from '@components/panel/topicSearch/WaterWasteSearch'
@@ -61,8 +61,6 @@
import PipeChangesSearch from '@components/panel/topicSearch/pipeChangesSearch.vue'
import PipeInformationSearch from '@components/panel/topicSearch/pipeInformationSearch.vue'
import EnterpriseEmergencySearch from './topicSearch/EnterpriseEmergencySearch'
import bus from '@/eventBus'
export default {
  name: 'MonitorPanel',
@@ -78,7 +76,7 @@
    return {
      isShow: true,
      topicMenu: [],
      topicList: TopicList,
      list: topicList,
      topicCheckedList: [],
      isPanelVisible: false,
      gcComp: SewersSearch,
@@ -91,7 +89,11 @@
      selectGroup: false
    }
  },
  computed: {},
  computed: {
    serviceLayers () {
      return this.$store.state.map.serviceLayers.LayerSewersLine
    }
  }, /*
  watch: {
    '$store.state.map.topic.topicCheckedList': function (newVal, oldVal) {
      console.log(oldVal)
@@ -106,26 +108,46 @@
        })
      })
    }
  },
  }, */
  methods: {
    handleClose (done) {
      console.log(done)
    },
    setSearchPanelChange () {
      // 搜索面板没有显示时,将所有主题选择状态设置为false
      this.selectGroup = !this.selectGroup
      if (!this.selectGroup) {
        this.topicList.forEach((itm) => {
        this.list.forEach((itm) => {
          itm.checked = false
        })
      }
    },
    unselected (val) {
      // console.log(val)
      this.selectGroup = true
      this.list.forEach((itm) => {
        if (itm.name === val.name) {
          console.log(val.name)
          itm.checked = false
          itm.isShow = false
        }
      })
    },
    selected (val) {
      // console.log(val)
      this.title = val.name
      this.selectGroup = true
      this.topicList.forEach((itm) => {
        itm.checked = val.name === itm.name
      this.list.forEach((itm) => {
        if (itm.name === val.name) {
          itm.isShow = true
          itm.checked = true
        } else {
          itm.checked = false
        }
      })
      this.setComp(val)
    },
    setComp (val) {
      this.title = val.name
      switch (val.name) {
        case '污染源':
          this.gcComp = DischargeSearch
@@ -160,9 +182,6 @@
      }
    },
    handlePage (page) {
    },
    handleGd () {
      this.title = '管道信息查询'
    },
    toggleMonitorPanel () {
      this.isCollapse = !this.isCollapse
@@ -204,37 +223,60 @@
      //     })
      //   }
    },
    defaultLastOne () {
      let v = {}
      this.topicList.forEach((item) => {
        if (item.isShow) {
          v = item
    containsLayer (layer) {
      if (layer) {
        for (let i = 0; i < layer.length; i++) {
          const lay = layer[i]
          const checked = lay.checked
          for (let j = 0; j < this.list.length; j++) {
            const topic = this.list[j]
            if (lay.name === topic.name) {
              if (lay.layers) {
                const isChecked = this.isChecked(lay.layers)
                if (isChecked) {
                  this.selected(topic)
                } else {
                  this.unselected(topic)
                }
              } else if (checked) {
                this.selected(topic)
              }
              break
            }
          }
          this.containsLayer(lay.layers)
        }
      })
      this.selected(v)
      }
    },
    isChecked (layers) {
      for (let i = 0; i < layers.length; i++) {
        const layer = layers[i]
        const checked = layer.checked
        if (checked) {
          return true
        }
        if (layer.layers) {
          return this.isChecked(layer.layers)
        }
      }
      return false
    }
  },
  mounted () {
    const that = this
    bus.$on('changeSearchBar', function (obj) {
      that.gcComp = ''
      that.topicList.forEach((item) => {
        if (item.name === obj.name) {
          if (obj.type > 0) {
            item.isShow = true
          } else {
            item.isShow = false
          }
          // item.isShow = obj.checked
          if (item.isShow) {
            that.selected(item)
          } else {
            that.defaultLastOne()
          }
        }
      })
    })
  //  console.log(that.topicList)
    /* bus.$on('changeSearchBar', (obj) => {
      const topic = this.search(this.serviceLayers, obj)
      console.log('====' + JSON.stringify(topic))
    }) */
  },
  watch: {
    serviceLayers: {
      handler: function (newVal, oldVal) {
        this.containsLayer(newVal)
      },
      immediate: true,
      deep: true
    }
  }
}
</script>
src/components/table/components/tabHandover.vue
@@ -19,8 +19,7 @@
import EnvironmentalRisk from '@components/table/components/EnvironmentalRisk'
import Pipeline from '@components/table/components/Pipeline'
import CorporateEmergency from '@components/table/components/CorporateEmergency'
import { TopicList } from '../../../conf/Topic'
import { topicList } from '../../../conf/Topic'
export default {
  name: 'tabHandover',
  components: {
@@ -37,8 +36,8 @@
    return {
      titleProp: '',
      activeName: '污染源',
      topicList: TopicList, // tab项
      gcComp: PollutionSource // 默认显示污染源内容
      topicList: topicList, // tab项
      gcComp: PollutionSource
    }
  },
  methods: {
src/conf/Constants.js
@@ -65,7 +65,8 @@
  emergencyesources: '应急物资',
  firefightingunit: '消防单位',
  unitareaboundary: '装置区边界',
  sensitivetarget: '敏感目标'
  sensitivetarget: '敏感目标',
  chokevalve: '截流闸'
}
export const LAYERPROPS = {
@@ -92,6 +93,7 @@
    name: '管网名称',
    linenumtype: '管线类型',
    pipename: '管线名称',
    subchaname: '支线名称',
    mediumtype: '输送介质',
    length: '长度(m)',
    startposname: '起点位置名称',
@@ -414,5 +416,18 @@
    huncount: '常规人口数量',
    structureoridsitearea: '占地面积',
    adminzonename: '行政隶属'
  },
  // 截流闸
  chokevalve: {
    closurename: '名称',
    closurecode: '编码',
    pointnumber: '测点编号',
    mediumtype: '介质',
    size: '尺寸(m)',
    operatingtype: '控制方式',
    telephone: '联系电话',
    resperson: '负责人',
    startdate: '投用日期',
    operationalstatus: '运行状态'
  }
}
src/conf/Topic.js
@@ -12,10 +12,10 @@
  EnterpriseEmergencySearch: () => import('@components/panel/topicSearch/EnterpriseEmergencySearch.vue')
}
export const TopicList = [{
export const topicList = [{
  name: '污染源',
  id: 1,
  check: false,
  checked: false,
  isShow: false,
  icon: 'iconwuranyuan',
  comp: ''
src/views/popup/DynamicHeader/DynamicTable.vue
New file
@@ -0,0 +1,43 @@
<template>
  <el-table :data="tableData" border :height="height">
    <template v-for="item in tableHeader">
      <table-column v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></table-column>
      <el-table-column v-else :key="item.id" :label="item.label" :prop="item.prop" align="center"></el-table-column>
    </template>
  </el-table>
</template>
<script>
import TableColumn from './TableColumn'
export default {
  props: {
    // 表格的数据
    tableData: {
      type: Array,
      required: true
    },
    // 多级表头的数据
    tableHeader: {
      type: Array,
      required: true
    },
    // 表格的高度
    height: {
      type: String,
      default: '340'
    }
  },
  components: {
    TableColumn
  },
  watch: {
    tableData (val, oldVal) {
      this.tableData = val
    }
  }
}
</script>
<style scoped>
</style>
src/views/popup/DynamicHeader/TableColumn.vue
New file
@@ -0,0 +1,24 @@
<template>
  <el-table-column :label="coloumnHeader.label" :prop="coloumnHeader.label" align="center">
    <template v-for="item in coloumnHeader.children">
      <tableColumn v-if="item.children && item.children.length" :key="item.id" :coloumn-header="item"></tableColumn>
      <el-table-column v-else :key="item.name" :label="item.label" :prop="item.prop" align="center"></el-table-column>
    </template>
  </el-table-column>
</template>
<script>
export default {
  name: 'tableColumn',
  props: {
    coloumnHeader: {
      type: Object,
      required: true
    }
  }
}
</script>
<style scoped>
</style>