1、新增图表看板
| 
		 Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB  | 
| 
		 Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB  | 
| 
		 Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB  | 
| 
		 After Width: | Height: | Size: 523 B  | 
| 
		 After Width: | Height: | Size: 5.7 KiB  | 
| 
		 After Width: | Height: | Size: 6.2 KiB  | 
| 
		 After Width: | Height: | Size: 34 KiB  | 
| 
						 | 
				
			
			@ -10,17 +10,99 @@
 | 
			
		|||
          90%
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="air-quality-trend"></div>
 | 
			
		||||
 | 
			
		||||
      <div class="air-quality-trend">
 | 
			
		||||
        <third-level-label :title="thirdLevelLabel"/>
 | 
			
		||||
        <div class="_charts">
 | 
			
		||||
          <air-quality-trend-charts :data-source="airQualityTrendDataSource"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import AirQualityTrendCharts from "@/components/charts/AirQualityTrendCharts";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "AirQuality",
 | 
			
		||||
  components: {AirQualityTrendCharts},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '空气质量指数'
 | 
			
		||||
      title: '空气质量指数',
 | 
			
		||||
      thirdLevelLabel: '空气质量变化趋势',
 | 
			
		||||
      airQualityTrendDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 3,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 6,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 2,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -33,7 +115,7 @@ export default {
 | 
			
		|||
  width: 100%;
 | 
			
		||||
  height: 601px;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
/*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
    border-image: linear-gradient(rgba(79, 182, 238, 0), rgba(39, 127, 216, 1)); !* 使用线性渐变作为边框图片 *!
 | 
			
		||||
    border-image-slice: 1; !* 指定切分边框图像的位置 *!*/
 | 
			
		||||
  .flex-column;
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +156,14 @@ export default {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    .air-quality-trend {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      .flex-column;
 | 
			
		||||
 | 
			
		||||
      ._charts {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        height: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,7 +82,7 @@ export default {
 | 
			
		|||
 | 
			
		||||
.device-run {
 | 
			
		||||
  margin-top: 43px;
 | 
			
		||||
  height: 416px;
 | 
			
		||||
  height: 516px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,11 @@
 | 
			
		|||
  <div class="energy-use">
 | 
			
		||||
    <secondary-title :title="title">
 | 
			
		||||
      <template>
 | 
			
		||||
        <div class="right-tip">
 | 
			
		||||
        <div class="right-tab">
 | 
			
		||||
          <div class="tab-type" v-for="item of tabDataList" :class="activeTab === item.value? 'active-tab':''"
 | 
			
		||||
               @click="tabChange(item.value)">
 | 
			
		||||
            {{ item.name }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </template>
 | 
			
		||||
    </secondary-title>
 | 
			
		||||
| 
						 | 
				
			
			@ -24,16 +28,101 @@
 | 
			
		|||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <third-level-label :title="thirdLevelLabel">
 | 
			
		||||
        <template>
 | 
			
		||||
          <div class="electricity-water-tab">
 | 
			
		||||
            <div class="_title" :class="electricityWaterTab === 0? 'activeTitle':''" @click="changeTitle(0)">用电</div>
 | 
			
		||||
            <div class="_line">|</div>
 | 
			
		||||
            <div class="_title" :class="electricityWaterTab === 1? 'activeTitle':''" @click="changeTitle(1)">用水</div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </template>
 | 
			
		||||
      </third-level-label>
 | 
			
		||||
      <div class="electricity-water-trends">
 | 
			
		||||
        <electricity-water-charts :data-source="electricityWaterDataSource"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
import ElectricityWaterCharts from "@/components/charts/ElectricityWaterCharts";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "EnergyUse",
 | 
			
		||||
  components: {ElectricityWaterCharts},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '能源使用情况'
 | 
			
		||||
      title: '能源使用情况',
 | 
			
		||||
      thirdLevelLabel: '水电使用趋势',
 | 
			
		||||
      tabDataList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '今日',
 | 
			
		||||
          value: '0'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '本月',
 | 
			
		||||
          value: '1'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '上月',
 | 
			
		||||
          value: '2'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      activeTab: '0',
 | 
			
		||||
      electricityWaterDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '00:00',
 | 
			
		||||
          value: '10'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '01:00',
 | 
			
		||||
          value: '30'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '02:00',
 | 
			
		||||
          value: '20',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '03:00',
 | 
			
		||||
          value: '20'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '04:00',
 | 
			
		||||
          value: '30'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '05:00',
 | 
			
		||||
          value: '10'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '06:00',
 | 
			
		||||
          value: '16'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          attr: '用电',
 | 
			
		||||
          name: '07:00',
 | 
			
		||||
          value: '30'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      electricityWaterTab: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    tabChange(val) {
 | 
			
		||||
      this.activeTab = val
 | 
			
		||||
    },
 | 
			
		||||
    //用电、用水tab切换
 | 
			
		||||
    changeTitle(val) {
 | 
			
		||||
      this.electricityWaterTab = val
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -43,7 +132,7 @@ export default {
 | 
			
		|||
@import "assets/styles/mixin";
 | 
			
		||||
 | 
			
		||||
.energy-use {
 | 
			
		||||
  height: 777px;
 | 
			
		||||
  height: 877px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
| 
						 | 
				
			
			@ -55,6 +144,7 @@ export default {
 | 
			
		|||
    flex: 1;
 | 
			
		||||
    height: 0;
 | 
			
		||||
    padding: 0 50px;
 | 
			
		||||
    .flex-column;
 | 
			
		||||
 | 
			
		||||
    .electricity-water-usage {
 | 
			
		||||
      height: 247px;
 | 
			
		||||
| 
						 | 
				
			
			@ -69,12 +159,13 @@ export default {
 | 
			
		|||
          height: 159px;
 | 
			
		||||
          background: url("assets/peakCoalImages/right/electricity-icon.png") no-repeat;
 | 
			
		||||
        }
 | 
			
		||||
        .electricity-info{
 | 
			
		||||
 | 
			
		||||
        .electricity-info {
 | 
			
		||||
          padding-left: 20px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      .water-usage{
 | 
			
		||||
      .water-usage {
 | 
			
		||||
        .flex-row;
 | 
			
		||||
 | 
			
		||||
        .water-icon {
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +173,8 @@ export default {
 | 
			
		|||
          height: 159px;
 | 
			
		||||
          background: url("assets/peakCoalImages/right/water-icon.png") no-repeat;
 | 
			
		||||
        }
 | 
			
		||||
        .water-info{
 | 
			
		||||
 | 
			
		||||
        .water-info {
 | 
			
		||||
          padding-left: 20px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +195,68 @@ export default {
 | 
			
		|||
        font-weight: 400;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .electricity-water-trends {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .right-tab {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    .flex-row;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    width: 480px;
 | 
			
		||||
 | 
			
		||||
    .tab-type {
 | 
			
		||||
      width: 144px;
 | 
			
		||||
      height: 59px;
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-default-bg.png") no-repeat;
 | 
			
		||||
      font-family: MicrosoftYaHei;
 | 
			
		||||
      font-size: 29.97px;
 | 
			
		||||
      color: rgba(216, 240, 255, 0.50);
 | 
			
		||||
      letter-spacing: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      line-height: 59px;
 | 
			
		||||
      text-shadow: 0 0 11px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .active-tab {
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-active-bg.png") no-repeat;
 | 
			
		||||
      color: #D8F0FF;
 | 
			
		||||
      text-shadow: 0 0 33px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .electricity-water-tab {
 | 
			
		||||
    width: 180px;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    .flex-row;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
    ._title {
 | 
			
		||||
      font-family: PingFangSC-Semibold;
 | 
			
		||||
      font-size: 30.01px;
 | 
			
		||||
      color: rgba(106, 196, 255, 0.60);
 | 
			
		||||
      letter-spacing: 0;
 | 
			
		||||
      text-align: right;
 | 
			
		||||
      line-height: 42px;
 | 
			
		||||
      font-weight: 600;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .activeTitle {
 | 
			
		||||
      color: #6AC4FF;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ._line {
 | 
			
		||||
      color: #6AC4FF;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,7 +3,11 @@
 | 
			
		|||
  <div class="enterprise-operations">
 | 
			
		||||
    <secondary-title :title="title">
 | 
			
		||||
      <template>
 | 
			
		||||
        <div class="right-tip">
 | 
			
		||||
        <div class="right-tab">
 | 
			
		||||
          <div class="tab-type" v-for="item of tabDataList" :class="activeTab === item.value? 'active-tab':''"
 | 
			
		||||
               @click="tabChange(item.value)">
 | 
			
		||||
            {{ item.name }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </template>
 | 
			
		||||
    </secondary-title>
 | 
			
		||||
| 
						 | 
				
			
			@ -25,16 +29,97 @@
 | 
			
		|||
          <div class="_icon"></div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <third-level-label :title="thirdLevelLabel"/>
 | 
			
		||||
 | 
			
		||||
      <div class="produce-trend-chart">
 | 
			
		||||
        <produce-trend-chart :data-source="produceTrendDataSource"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import ProduceTrendChart from "@/components/charts/ProduceTrendChart";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "EnterpriseOperations",
 | 
			
		||||
  components: {ProduceTrendChart},
 | 
			
		||||
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '企业运营情况'
 | 
			
		||||
      title: '企业运营情况',
 | 
			
		||||
      thirdLevelLabel: '生产趋势',
 | 
			
		||||
      produceTrendDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '00:00',
 | 
			
		||||
          value1: '10',
 | 
			
		||||
          value2: '30',
 | 
			
		||||
          value3: '20'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '01:00',
 | 
			
		||||
          value1: '30',
 | 
			
		||||
          value2: '20',
 | 
			
		||||
          value3: '10'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '02:00',
 | 
			
		||||
          value1: '20',
 | 
			
		||||
          value2: '10',
 | 
			
		||||
          value3: '20'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '03:00',
 | 
			
		||||
          value1: '20',
 | 
			
		||||
          value2: '30',
 | 
			
		||||
          value3: '60'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '04:00',
 | 
			
		||||
          value1: '30',
 | 
			
		||||
          value2: '40',
 | 
			
		||||
          value3: '50'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '05:00',
 | 
			
		||||
          value1: '10',
 | 
			
		||||
          value2: '20',
 | 
			
		||||
          value3: '30'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '06:00',
 | 
			
		||||
          value1: '16',
 | 
			
		||||
          value2: '17',
 | 
			
		||||
          value3: '18'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '07:00',
 | 
			
		||||
          value1: '30',
 | 
			
		||||
          value2: '20',
 | 
			
		||||
          value3: '10'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      tabDataList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '今日',
 | 
			
		||||
          value: '0'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '本月',
 | 
			
		||||
          value: '1'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '上月',
 | 
			
		||||
          value: '2'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      activeTab: '0'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    tabChange(val) {
 | 
			
		||||
      this.activeTab = val
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -44,7 +129,7 @@ export default {
 | 
			
		|||
@import "assets/styles/mixin";
 | 
			
		||||
 | 
			
		||||
.enterprise-operations {
 | 
			
		||||
  height: 777px;
 | 
			
		||||
  height: 877px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +141,7 @@ export default {
 | 
			
		|||
    flex: 1;
 | 
			
		||||
    height: 0;
 | 
			
		||||
    padding: 0 50px;
 | 
			
		||||
    .flex-column;
 | 
			
		||||
 | 
			
		||||
    .operational-value-info {
 | 
			
		||||
      height: 247px;
 | 
			
		||||
| 
						 | 
				
			
			@ -92,6 +178,41 @@ export default {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .produce-trend-chart {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 0;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .right-tab {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    .flex-row;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    width: 480px;
 | 
			
		||||
 | 
			
		||||
    .tab-type {
 | 
			
		||||
      width: 144px;
 | 
			
		||||
      height: 59px;
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-default-bg.png") no-repeat;
 | 
			
		||||
      font-family: MicrosoftYaHei;
 | 
			
		||||
      font-size: 29.97px;
 | 
			
		||||
      color: rgba(216, 240, 255, 0.50);
 | 
			
		||||
      letter-spacing: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      line-height: 59px;
 | 
			
		||||
      text-shadow: 0 0 11px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .active-tab {
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-active-bg.png") no-repeat;
 | 
			
		||||
      color: #D8F0FF;
 | 
			
		||||
      text-shadow: 0 0 33px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,16 @@
 | 
			
		|||
<!--最新预警-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="latest-warning">
 | 
			
		||||
    <secondary-title :title="title"/>
 | 
			
		||||
    <secondary-title :title="title">
 | 
			
		||||
      <template>
 | 
			
		||||
        <div class="right-tab">
 | 
			
		||||
          <div class="tab-type" v-for="item of tabDataList" :class="activeTab === item.value? 'active-tab':''"
 | 
			
		||||
               @click="tabChange(item.value)">
 | 
			
		||||
            {{ item.name }}
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </template>
 | 
			
		||||
    </secondary-title>
 | 
			
		||||
    <div class="latest-warning-info">
 | 
			
		||||
      <div class="warning-data-list">
 | 
			
		||||
        <vue-seamless-scroll
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +71,26 @@ export default {
 | 
			
		|||
          warningTime: '2023-12-12 12:32:45',
 | 
			
		||||
          state: 1
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
      ],
 | 
			
		||||
      tabDataList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '全部',
 | 
			
		||||
          value: '0'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '待研判',
 | 
			
		||||
          value: '1'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '待审批',
 | 
			
		||||
          value: '2'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '已归档',
 | 
			
		||||
          value: '3'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      activeTab: '0'
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +107,11 @@ export default {
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    tabChange(val) {
 | 
			
		||||
      this.activeTab = val
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +120,7 @@ export default {
 | 
			
		|||
 | 
			
		||||
.latest-warning {
 | 
			
		||||
  margin-top: 43px;
 | 
			
		||||
  height: 984px;
 | 
			
		||||
  height: 784px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
| 
						 | 
				
			
			@ -103,6 +136,7 @@ export default {
 | 
			
		|||
    .warning-data-list {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      padding-top: 20px;
 | 
			
		||||
 | 
			
		||||
      .seamless-scroll {
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
| 
						 | 
				
			
			@ -113,5 +147,34 @@ export default {
 | 
			
		|||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .right-tab {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    .flex-row;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    width: 580px;
 | 
			
		||||
 | 
			
		||||
    .tab-type {
 | 
			
		||||
      width: 144px;
 | 
			
		||||
      height: 59px;
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-default-bg.png") no-repeat;
 | 
			
		||||
      font-family: MicrosoftYaHei;
 | 
			
		||||
      font-size: 29.97px;
 | 
			
		||||
      color: rgba(216, 240, 255, 0.50);
 | 
			
		||||
      letter-spacing: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      line-height: 59px;
 | 
			
		||||
      text-shadow: 0 0 11px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .active-tab {
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-active-bg.png") no-repeat;
 | 
			
		||||
      color: #D8F0FF;
 | 
			
		||||
      text-shadow: 0 0 33px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,16 +16,27 @@
 | 
			
		|||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <div class="co-trend-info">
 | 
			
		||||
        <third-level-label :title="thirdLevelLabel"/>
 | 
			
		||||
        <div class="co-trend">
 | 
			
		||||
          <c-o-trend-charts :data-source="coTrendDataSource"/>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import COTrendCharts from "@/components/charts/COTrendCharts";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "OverviewPollutants",
 | 
			
		||||
  components: {COTrendCharts},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '污染物信息总览',
 | 
			
		||||
      thirdLevelLabel: '一氧化碳变化趋势',
 | 
			
		||||
      pollutantValuesDataList: [
 | 
			
		||||
        {
 | 
			
		||||
          pollutantName: '一氧化碳',
 | 
			
		||||
| 
						 | 
				
			
			@ -63,6 +74,78 @@ export default {
 | 
			
		|||
          actualValue: '9.0',
 | 
			
		||||
          unit: 'ug/m³'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      coTrendDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 3,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 6,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 2,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +172,7 @@ export default {
 | 
			
		|||
  height: 601px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
/*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
    border-image: linear-gradient(rgba(79, 182, 238, 0), rgba(39, 127, 216, 1)); !* 使用线性渐变作为边框图片 *!
 | 
			
		||||
    border-image-slice: 1; !* 指定切分边框图像的位置 *!*/
 | 
			
		||||
  .flex-column;
 | 
			
		||||
| 
						 | 
				
			
			@ -179,6 +262,17 @@ export default {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .co-trend-info {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      .flex-column;
 | 
			
		||||
 | 
			
		||||
      .co-trend {
 | 
			
		||||
        flex: 1;
 | 
			
		||||
        height: 0;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,27 +2,181 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <div class="pollutant-trends">
 | 
			
		||||
    <secondary-title :title="title"/>
 | 
			
		||||
    <div class="pollutant-type-list">
 | 
			
		||||
      <div class="pollutant-type" v-for="item of pollutantTypeList" :class="activeTab === item.value? 'active-tab':''"
 | 
			
		||||
           @click="tabChange(item.value)">
 | 
			
		||||
        {{ item.name }}
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="trend-charts">
 | 
			
		||||
      <pollutant-trend-charts :data-source="pollutantTrendsDataSource"/>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import PollutantTrendCharts from "@/components/charts/PollutantTrendCharts";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "PollutantTrends",
 | 
			
		||||
  components: {PollutantTrendCharts},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '首要污染物变化趋势'
 | 
			
		||||
      title: '首要污染物变化趋势',
 | 
			
		||||
      pollutantTypeList: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '一氧化碳',
 | 
			
		||||
          value: '1'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '二氧化碳',
 | 
			
		||||
          value: '2'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '氮氧化物',
 | 
			
		||||
          value: '3'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '臭氧',
 | 
			
		||||
          value: '4'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'PM10',
 | 
			
		||||
          value: '5'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'PM2.5',
 | 
			
		||||
          value: '6'
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      activeTab: '1',
 | 
			
		||||
      pollutantTrendsDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 3,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 6,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2021'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '1',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '2',
 | 
			
		||||
          value: 4,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '3',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '4',
 | 
			
		||||
          value: 8,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '5',
 | 
			
		||||
          value: 2,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '6',
 | 
			
		||||
          value: 7,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '7',
 | 
			
		||||
          value: 1,
 | 
			
		||||
          attr: '2022'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    tabChange(val) {
 | 
			
		||||
      this.activeTab = val
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
.pollutant-trends{
 | 
			
		||||
@import "assets/styles/mixin";
 | 
			
		||||
 | 
			
		||||
.pollutant-trends {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 601px;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8,31,55,0.10) 0%, rgba(18,50,81,0.10) 100%);
 | 
			
		||||
/*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
    border-image: linear-gradient(rgba(79,182,238,0), rgba(39,127,216,1)); !* 使用线性渐变作为边框图片 *!
 | 
			
		||||
    border-image-slice: 1; !* 指定切分边框图像的位置 *!*/
 | 
			
		||||
  .flex-column;
 | 
			
		||||
 | 
			
		||||
  .pollutant-type-list {
 | 
			
		||||
    padding: 0 50px;
 | 
			
		||||
    height: 100px;
 | 
			
		||||
    .flex-row;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
    .pollutant-type {
 | 
			
		||||
      width: 144px;
 | 
			
		||||
      height: 59px;
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-default-bg.png") no-repeat;
 | 
			
		||||
      font-family: MicrosoftYaHei;
 | 
			
		||||
      font-size: 29.97px;
 | 
			
		||||
      color: rgba(216, 240, 255, 0.50);
 | 
			
		||||
      letter-spacing: 0;
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      line-height: 59px;
 | 
			
		||||
      text-shadow: 0 0 11px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .active-tab {
 | 
			
		||||
      background: url("assets/peakCoalImages/left/pollutant-type-active-bg.png") no-repeat;
 | 
			
		||||
      color: #D8F0FF;
 | 
			
		||||
      text-shadow: 0 0 33px #0091FF;
 | 
			
		||||
      font-weight: 400;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .trend-charts {
 | 
			
		||||
    flex: 1;
 | 
			
		||||
    height: 0;
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,14 +30,14 @@ export default {
 | 
			
		|||
.secondary-title {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 84px;
 | 
			
		||||
  background: url("assets/peakCoalImages/coommon/small-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
  background: url("assets/peakCoalImages/common/small-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
  background-size: 100% 100%;
 | 
			
		||||
  .clear-fix;
 | 
			
		||||
 | 
			
		||||
  &.longBg {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 84px;
 | 
			
		||||
    background: url("assets/peakCoalImages/coommon/long-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
    background: url("assets/peakCoalImages/common/long-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
    background-size: 100% 100%;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -64,7 +64,7 @@ export default {
 | 
			
		|||
.longBg {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 84px;
 | 
			
		||||
  background: url("assets/peakCoalImages/coommon/long-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
  background: url("assets/peakCoalImages/common/long-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
  background-size: 100% 100%;
 | 
			
		||||
}*/
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,72 @@
 | 
			
		|||
<!--二级标题-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="secondary-title">
 | 
			
		||||
    <div class="_icon"></div>
 | 
			
		||||
    <div class="_title">{{ title }}</div>
 | 
			
		||||
    <div class="_right">
 | 
			
		||||
      <slot></slot>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: "ThirdLevelLabel",
 | 
			
		||||
  props: {
 | 
			
		||||
    longBg: {
 | 
			
		||||
      type: Boolean,
 | 
			
		||||
      default: false
 | 
			
		||||
    },
 | 
			
		||||
    title: {
 | 
			
		||||
      type: String,
 | 
			
		||||
      default: ''
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
@import "assets/styles/mixin";
 | 
			
		||||
 | 
			
		||||
.secondary-title {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 54px;
 | 
			
		||||
  .clear-fix;
 | 
			
		||||
 | 
			
		||||
  ._icon {
 | 
			
		||||
    width: 20px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    background: url("assets/peakCoalImages/common/third-level-label-icon.png") no-repeat;
 | 
			
		||||
    float: left;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    top: 50%;
 | 
			
		||||
    transform: translateY(-50%);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ._title {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    line-height: 54px;
 | 
			
		||||
    padding-left: 20px;
 | 
			
		||||
    float: left;
 | 
			
		||||
    font-family: PingFangSC-Medium;
 | 
			
		||||
    font-size: 38.59px;
 | 
			
		||||
    color: #D8F0FF;
 | 
			
		||||
    letter-spacing: 0;
 | 
			
		||||
    text-shadow: 0 0 11px #0091FF;
 | 
			
		||||
    font-weight: 500;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ._right {
 | 
			
		||||
    float: right;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
.longBg {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 84px;
 | 
			
		||||
  background: url("assets/peakCoalImages/common/long-seconfary-title-bg.png") no-repeat;
 | 
			
		||||
  background-size: 100% 100%;
 | 
			
		||||
}*/
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import noData from 'assets/peakCoalImages/coommon/no-data.png'
 | 
			
		||||
import noData from 'assets/peakCoalImages/common/no-data.png'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "WarningInfoItem",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,16 +10,43 @@
 | 
			
		|||
          <div class="_value">234</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
      <third-level-label :title="warningTypeTitle"/>
 | 
			
		||||
 | 
			
		||||
      <div class="warning-type-pie">
 | 
			
		||||
        <warning-type-chart :data-source="warningTypeDataSource"/>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import WarningTypeChart from "@/components/charts/WarningTypeChart";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "WarningStatistics",
 | 
			
		||||
  components: {WarningTypeChart},
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      title: '智能预警统计'
 | 
			
		||||
      title: '智能预警统计',
 | 
			
		||||
      warningTypeTitle: '报警类型分布',
 | 
			
		||||
      warningTypeDataSource: [
 | 
			
		||||
        {
 | 
			
		||||
          name: '断电掉线',
 | 
			
		||||
          value: 214,
 | 
			
		||||
          rate: '38%'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '区域入侵',
 | 
			
		||||
          value: 342,
 | 
			
		||||
          rate: '32%'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: '污染超标',
 | 
			
		||||
          value: 12,
 | 
			
		||||
          rate: '30%'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -30,7 +57,7 @@ export default {
 | 
			
		|||
 | 
			
		||||
.warning-statistics {
 | 
			
		||||
  margin-top: 43px;
 | 
			
		||||
  height: 984px;
 | 
			
		||||
  height: 784px;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  background-image: linear-gradient(62deg, rgba(8, 31, 55, 0.10) 0%, rgba(18, 50, 81, 0.10) 100%);
 | 
			
		||||
  /*  border: 1px solid transparent; !* 先将边框颜色设置为透明 *!
 | 
			
		||||
| 
						 | 
				
			
			@ -42,6 +69,7 @@ export default {
 | 
			
		|||
    flex: 1;
 | 
			
		||||
    height: 0;
 | 
			
		||||
    padding: 0 50px;
 | 
			
		||||
    .flex-column;
 | 
			
		||||
 | 
			
		||||
    .warning-total-info {
 | 
			
		||||
      height: 238px;
 | 
			
		||||
| 
						 | 
				
			
			@ -53,6 +81,7 @@ export default {
 | 
			
		|||
        background: rgba(1, 120, 198, 0.30);
 | 
			
		||||
        .flex-row;
 | 
			
		||||
        justify-content: space-around;
 | 
			
		||||
 | 
			
		||||
        .warning-icon {
 | 
			
		||||
          width: 194px;
 | 
			
		||||
          height: 114px;
 | 
			
		||||
| 
						 | 
				
			
			@ -76,6 +105,12 @@ export default {
 | 
			
		|||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .warning-type-pie {
 | 
			
		||||
      flex: 1;
 | 
			
		||||
      height: 0;
 | 
			
		||||
      background: url("assets/peakCoalImages/right/warning-type-pie-bg.png") no-repeat 20px center;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,180 @@
 | 
			
		|||
<!--空气质量变化趋势-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
const lodash = require('lodash')
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'AirQualityTrendCharts',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#FDBD00',
 | 
			
		||||
        '#00D5FF',
 | 
			
		||||
        '#1978E5'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
      let color = this.color;
 | 
			
		||||
      let chartData = this.dataSource;
 | 
			
		||||
      //将数据根据attr进行分组
 | 
			
		||||
      let dataSourceByAttrObj = lodash.groupBy(chartData, 'attr')
 | 
			
		||||
      //将不同对象的值转换成不同的数组
 | 
			
		||||
      let dataSource = Object.values(dataSourceByAttrObj)
 | 
			
		||||
      //过滤x轴名称
 | 
			
		||||
      let xAxisName = []
 | 
			
		||||
      let nameLengthMaxIndex = 0
 | 
			
		||||
      let nameLength = 0
 | 
			
		||||
      //找出name最多的数据
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let xAxisNameList = dataSource[index].map(item => item.name) || []
 | 
			
		||||
        if (xAxisNameList.length > nameLength) {
 | 
			
		||||
          nameLength = xAxisNameList.length
 | 
			
		||||
          nameLengthMaxIndex = index
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      //将挑选的name作为x轴数据
 | 
			
		||||
      xAxisName = dataSource[nameLengthMaxIndex].map(item => item.name) || []
 | 
			
		||||
      //获取y周值
 | 
			
		||||
      let attrNames = Object.keys(dataSourceByAttrObj)
 | 
			
		||||
      let seriesList = []
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let yAxisDataSource = dataSource[index].map(item => item.value)
 | 
			
		||||
        let series = {
 | 
			
		||||
          name: attrNames[index],
 | 
			
		||||
          type: 'line',
 | 
			
		||||
          smooth: false,
 | 
			
		||||
          zlevel: 3,
 | 
			
		||||
          symbol: 'none', //数据交叉点样式
 | 
			
		||||
          data: yAxisDataSource,
 | 
			
		||||
          yAxisIndex: 0, // 通过这个判断左右
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            width: 6,
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        seriesList.push(series)
 | 
			
		||||
      }
 | 
			
		||||
      let option = {
 | 
			
		||||
        color: color,
 | 
			
		||||
        legend: {
 | 
			
		||||
          top: 20,
 | 
			
		||||
          left: '30%',
 | 
			
		||||
          itemWidth: 22,
 | 
			
		||||
          itemHeight: 22,
 | 
			
		||||
          icon: 'circle',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
            fontSize: 30,
 | 
			
		||||
            padding: [0, 0, 0, 20]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 100,
 | 
			
		||||
          containLabel: true,
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'category',
 | 
			
		||||
            boundaryGap: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            data: xAxisName,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        yAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        series: seriesList,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,200 @@
 | 
			
		|||
<!--一氧化碳变化趋势-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
const lodash = require('lodash')
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'COTrendCharts',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#FDBD00',
 | 
			
		||||
        '#00D5FF',
 | 
			
		||||
        '#1978E5'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
      let color = this.color;
 | 
			
		||||
      let areaColorList = [
 | 
			
		||||
        ['rgba(253,189,0,0.5)', 'rgba(253,189,0,0)'],
 | 
			
		||||
        ['rgba(0,213,255,0.5)', 'rgba(0,213,255,0)'],
 | 
			
		||||
        ['rgba(25,120,229,0.5)', 'rgba(25,120,229,1)'],
 | 
			
		||||
      ]
 | 
			
		||||
      let chartData = this.dataSource;
 | 
			
		||||
      //将数据根据attr进行分组
 | 
			
		||||
      let dataSourceByAttrObj = lodash.groupBy(chartData, 'attr')
 | 
			
		||||
      //将不同对象的值转换成不同的数组
 | 
			
		||||
      let dataSource = Object.values(dataSourceByAttrObj)
 | 
			
		||||
      //过滤x轴名称
 | 
			
		||||
      let xAxisName = []
 | 
			
		||||
      let nameLengthMaxIndex = 0
 | 
			
		||||
      let nameLength = 0
 | 
			
		||||
      //找出name最多的数据
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let xAxisNameList = dataSource[index].map(item => item.name) || []
 | 
			
		||||
        if (xAxisNameList.length > nameLength) {
 | 
			
		||||
          nameLength = xAxisNameList.length
 | 
			
		||||
          nameLengthMaxIndex = index
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      //将挑选的name作为x轴数据
 | 
			
		||||
      xAxisName = dataSource[nameLengthMaxIndex].map(item => item.name) || []
 | 
			
		||||
      //获取y周值
 | 
			
		||||
      let attrNames = Object.keys(dataSourceByAttrObj)
 | 
			
		||||
      let seriesList = []
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let yAxisDataSource = dataSource[index].map(item => item.value)
 | 
			
		||||
        let series = {
 | 
			
		||||
          name: attrNames[index],
 | 
			
		||||
          type: 'line',
 | 
			
		||||
          smooth: true,
 | 
			
		||||
          zlevel: 3,
 | 
			
		||||
          symbol: 'none', //数据交叉点样式
 | 
			
		||||
          data: yAxisDataSource,
 | 
			
		||||
          yAxisIndex: 0, // 通过这个判断左右
 | 
			
		||||
          lineStyle: {
 | 
			
		||||
            width: 6,
 | 
			
		||||
          },
 | 
			
		||||
          areaStyle: {
 | 
			
		||||
            color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
 | 
			
		||||
                {
 | 
			
		||||
                  offset: 0,
 | 
			
		||||
                  color: areaColorList[index][0],
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                  offset: 1,
 | 
			
		||||
                  color: areaColorList[index][1],
 | 
			
		||||
                },
 | 
			
		||||
              ],
 | 
			
		||||
              false
 | 
			
		||||
            ),
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        seriesList.push(series)
 | 
			
		||||
      }
 | 
			
		||||
      let option = {
 | 
			
		||||
        color: color,
 | 
			
		||||
        legend: {
 | 
			
		||||
          top: 20,
 | 
			
		||||
          right: '10%',
 | 
			
		||||
          itemWidth: 22,
 | 
			
		||||
          itemHeight: 22,
 | 
			
		||||
          icon: 'circle',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
            fontSize: 30,
 | 
			
		||||
            padding: [0, 0, 0, 20]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 100,
 | 
			
		||||
          containLabel: true,
 | 
			
		||||
          left: 0
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'category',
 | 
			
		||||
            boundaryGap: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            data: xAxisName,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        yAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        series: seriesList,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,210 @@
 | 
			
		|||
<!--用电、用水使用趋势-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
const lodash = require('lodash')
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'ElectricityWaterCharts',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#00D5FF',
 | 
			
		||||
        '#FDBD00',
 | 
			
		||||
        '#1978E5'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
      let color = this.color;
 | 
			
		||||
      let chartData = this.dataSource;
 | 
			
		||||
      //将数据根据attr进行分组
 | 
			
		||||
      let dataSourceByAttrObj = lodash.groupBy(chartData, 'attr')
 | 
			
		||||
      //将不同对象的值转换成不同的数组
 | 
			
		||||
      let dataSource = Object.values(dataSourceByAttrObj)
 | 
			
		||||
      //过滤x轴名称
 | 
			
		||||
      let xAxisName = []
 | 
			
		||||
      let nameLengthMaxIndex = 0
 | 
			
		||||
      let nameLength = 0
 | 
			
		||||
      //找出name最多的数据
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let xAxisNameList = dataSource[index].map(item => item.name) || []
 | 
			
		||||
        if (xAxisNameList.length > nameLength) {
 | 
			
		||||
          nameLength = xAxisNameList.length
 | 
			
		||||
          nameLengthMaxIndex = index
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      //将挑选的name作为x轴数据
 | 
			
		||||
      xAxisName = dataSource[nameLengthMaxIndex].map(item => item.name) || []
 | 
			
		||||
      //获取y周值
 | 
			
		||||
      let attrNames = Object.keys(dataSourceByAttrObj)
 | 
			
		||||
      let seriesList = []
 | 
			
		||||
      console.log('dataSource:', dataSource)
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let yAxisDataSource = dataSource[index].map(item => item.value)
 | 
			
		||||
        let series = {
 | 
			
		||||
          name: attrNames[index],
 | 
			
		||||
          backgroundStyle: {
 | 
			
		||||
            color: 'rgba(180, 180, 180, 0.1)'
 | 
			
		||||
          },
 | 
			
		||||
          showBackground: true,
 | 
			
		||||
          type: 'bar',
 | 
			
		||||
          color: 'transparent',
 | 
			
		||||
          yAxisIndex: 0,
 | 
			
		||||
          barWidth: '60',
 | 
			
		||||
          data: yAxisDataSource,
 | 
			
		||||
        }
 | 
			
		||||
        let topBar =
 | 
			
		||||
          {
 | 
			
		||||
            data: yAxisDataSource,
 | 
			
		||||
            type: "pictorialBar",
 | 
			
		||||
            yAxisIndex: 0,
 | 
			
		||||
            color: color[index],
 | 
			
		||||
            symbol: 'rect',
 | 
			
		||||
            symbolPosition: 'end', // 在数据结尾显示
 | 
			
		||||
            symbolSize: [60, 20], // 「树叶大小」
 | 
			
		||||
            symbolOffset: ['0', '0'], //「偏移量」
 | 
			
		||||
 | 
			
		||||
          }
 | 
			
		||||
        seriesList.push(topBar)
 | 
			
		||||
        seriesList.push(series)
 | 
			
		||||
        console.log()
 | 
			
		||||
      }
 | 
			
		||||
      let option = {
 | 
			
		||||
        color: color,
 | 
			
		||||
        legend: {
 | 
			
		||||
          show: false,
 | 
			
		||||
          top: 20,
 | 
			
		||||
          left: '30%',
 | 
			
		||||
          itemWidth: 22,
 | 
			
		||||
          itemHeight: 22,
 | 
			
		||||
          icon: 'circle',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
            fontSize: 30,
 | 
			
		||||
            padding: [0, 0, 0, 20]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 60,
 | 
			
		||||
          containLabel: true,
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'category',
 | 
			
		||||
            boundaryGap: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            data: xAxisName,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        yAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            splitNumber: 4,
 | 
			
		||||
            type: 'value', scale: true, min: 0,
 | 
			
		||||
            nameTextStyle: {color: '#fff', fontSize: 12},
 | 
			
		||||
            // y轴线
 | 
			
		||||
            splitLine: {show: false},
 | 
			
		||||
            // y轴
 | 
			
		||||
            axisLine: {lineStyle: {color: 'rgba(255, 255, 255, .35)'}},
 | 
			
		||||
            // 文字
 | 
			
		||||
            axisLabel: {textStyle: {fontSize: 14, color: '#fff'}},
 | 
			
		||||
            // 刻度
 | 
			
		||||
            axisTick: {show: false}
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        series: seriesList,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,196 @@
 | 
			
		|||
<!--污染物趋势变化-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
const lodash = require('lodash')
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'PollutantTrendCharts',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#00D5FF',
 | 
			
		||||
        '#FDBD00',
 | 
			
		||||
        '#1978E5'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
      let color = this.color;
 | 
			
		||||
      let chartData = this.dataSource;
 | 
			
		||||
      //将数据根据attr进行分组
 | 
			
		||||
      let dataSourceByAttrObj = lodash.groupBy(chartData, 'attr')
 | 
			
		||||
      //将不同对象的值转换成不同的数组
 | 
			
		||||
      let dataSource = Object.values(dataSourceByAttrObj)
 | 
			
		||||
      //过滤x轴名称
 | 
			
		||||
      let xAxisName = []
 | 
			
		||||
      let nameLengthMaxIndex = 0
 | 
			
		||||
      let nameLength = 0
 | 
			
		||||
      //找出name最多的数据
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let xAxisNameList = dataSource[index].map(item => item.name) || []
 | 
			
		||||
        if (xAxisNameList.length > nameLength) {
 | 
			
		||||
          nameLength = xAxisNameList.length
 | 
			
		||||
          nameLengthMaxIndex = index
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      //将挑选的name作为x轴数据
 | 
			
		||||
      xAxisName = dataSource[nameLengthMaxIndex].map(item => item.name) || []
 | 
			
		||||
      console.log('xAxisName:', xAxisName)
 | 
			
		||||
      //获取y周值
 | 
			
		||||
      let attrNames = Object.keys(dataSourceByAttrObj)
 | 
			
		||||
      let seriesList = []
 | 
			
		||||
      for (const index in dataSource) {
 | 
			
		||||
        let yAxisDataSource = dataSource[index].map(item => item.value)
 | 
			
		||||
        let series = {}
 | 
			
		||||
        console.log('index:',index)
 | 
			
		||||
        if (index == 1) {
 | 
			
		||||
          series = {
 | 
			
		||||
            name: attrNames[index],
 | 
			
		||||
            type: 'line',
 | 
			
		||||
            smooth: false,
 | 
			
		||||
            zlevel: 3,
 | 
			
		||||
            color: color[index],
 | 
			
		||||
            symbol: 'none', //数据交叉点样式
 | 
			
		||||
            data: yAxisDataSource,
 | 
			
		||||
            yAxisIndex: 0, // 通过这个判断左右
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 6,
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        } else if (index == 0) {
 | 
			
		||||
          series = {
 | 
			
		||||
            name: attrNames[index],
 | 
			
		||||
            type: 'bar',
 | 
			
		||||
            color: color[index],
 | 
			
		||||
            barWidth: '50%',
 | 
			
		||||
            data: yAxisDataSource,
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        seriesList.push(series)
 | 
			
		||||
      }
 | 
			
		||||
      console.log('seriesList:', seriesList)
 | 
			
		||||
      let option = {
 | 
			
		||||
        color: color,
 | 
			
		||||
        legend: {
 | 
			
		||||
          show: false,
 | 
			
		||||
          top: 20,
 | 
			
		||||
          left: '30%',
 | 
			
		||||
          itemWidth: 22,
 | 
			
		||||
          itemHeight: 22,
 | 
			
		||||
          icon: 'circle',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
            fontSize: 30,
 | 
			
		||||
            padding: [0, 0, 0, 20]
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 60,
 | 
			
		||||
          containLabel: true,
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'category',
 | 
			
		||||
            boundaryGap: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            data: xAxisName,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        yAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        series: seriesList,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,219 @@
 | 
			
		|||
<!--生产趋势-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
const lodash = require('lodash')
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'ProduceTrendChart',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#AD7AFF',
 | 
			
		||||
        '#36FD00',
 | 
			
		||||
        '#FDBD00'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.$nextTick(() => {
 | 
			
		||||
      this.init()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
 | 
			
		||||
      let color = this.color;
 | 
			
		||||
 | 
			
		||||
      let xAxisData = this.dataSource.map(item => item.name);
 | 
			
		||||
      let yAxisData1 = this.dataSource.map(item => item.value1);
 | 
			
		||||
      let yAxisData2 = this.dataSource.map(item => item.value2);
 | 
			
		||||
      let yAxisData3 = this.dataSource.map(item => item.value3)
 | 
			
		||||
 | 
			
		||||
      let option = {
 | 
			
		||||
        color: color,
 | 
			
		||||
        legend: {
 | 
			
		||||
          top: 0,
 | 
			
		||||
          right: 0,
 | 
			
		||||
          itemWidth: 22,
 | 
			
		||||
          itemHeight: 22,
 | 
			
		||||
          icon: 'circle',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
            fontSize: 30,
 | 
			
		||||
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          trigger: 'axis',
 | 
			
		||||
        },
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 100,
 | 
			
		||||
          containLabel: true,
 | 
			
		||||
        },
 | 
			
		||||
        xAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'category',
 | 
			
		||||
            boundaryGap: true,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: true,
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            data: xAxisData,
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        yAxis: [
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            position: 'left',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            name: '单位:t',
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            position: 'right',
 | 
			
		||||
            name: '单位:m³',
 | 
			
		||||
            splitNumber: 5,
 | 
			
		||||
            axisLabel: {
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)'
 | 
			
		||||
            },
 | 
			
		||||
            nameTextStyle: {
 | 
			
		||||
              color: 'rgba(106,196,255,0.60)',
 | 
			
		||||
              fontSize: 30,
 | 
			
		||||
              lineHeight: 40,
 | 
			
		||||
            },
 | 
			
		||||
            // 分割线
 | 
			
		||||
            splitLine: {
 | 
			
		||||
              lineStyle: {
 | 
			
		||||
                color: 'rgba(176,215,255,0.40)',
 | 
			
		||||
                type: 'dashed'
 | 
			
		||||
              },
 | 
			
		||||
            },
 | 
			
		||||
            axisLine: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
            axisTick: {
 | 
			
		||||
              show: false,
 | 
			
		||||
            },
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '石油',
 | 
			
		||||
            type: 'line',
 | 
			
		||||
            smooth: false,
 | 
			
		||||
            zlevel: 3,
 | 
			
		||||
            symbol: 'none', //数据交叉点样式
 | 
			
		||||
            data: yAxisData1,
 | 
			
		||||
            yAxisIndex: 0, // 通过这个判断左右
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 6,
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: '氧气',
 | 
			
		||||
            type: 'line',
 | 
			
		||||
            smooth: false,
 | 
			
		||||
            zlevel: 3,
 | 
			
		||||
            symbol: 'none', //数据交叉点样式 (实心点)
 | 
			
		||||
            data: yAxisData2,
 | 
			
		||||
            yAxisIndex: 1, // 通过这个判断左右
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 6,
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            name: '氮气',
 | 
			
		||||
            type: 'line',
 | 
			
		||||
            smooth: false,
 | 
			
		||||
            zlevel: 3,
 | 
			
		||||
            symbol: 'none', //数据交叉点样式 (实心点)
 | 
			
		||||
            data: yAxisData3,
 | 
			
		||||
            yAxisIndex: 1, // 通过这个判断左右
 | 
			
		||||
            lineStyle: {
 | 
			
		||||
              width: 6,
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,180 @@
 | 
			
		|||
<!--预警类型分布饼图-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="charts" ref="charts">
 | 
			
		||||
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import {EleResize} from '@/utils/esresize';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'WarningTypeChart',
 | 
			
		||||
  props: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => []
 | 
			
		||||
    },
 | 
			
		||||
    color: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => [
 | 
			
		||||
        '#F8F661',
 | 
			
		||||
        '#61F8F6',
 | 
			
		||||
        '#1872FF'
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {}
 | 
			
		||||
  },
 | 
			
		||||
  watch: {
 | 
			
		||||
    dataSource: {
 | 
			
		||||
      deep: true,
 | 
			
		||||
      immediate: true,
 | 
			
		||||
      handler(value) {
 | 
			
		||||
        if (value.length) {
 | 
			
		||||
          this.$nextTick(() => {
 | 
			
		||||
            this.init()
 | 
			
		||||
          })
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  methods: {
 | 
			
		||||
    init() {
 | 
			
		||||
      let myCharts = echarts.init(this.$refs.charts)
 | 
			
		||||
      let barCharts = this.$refs.charts
 | 
			
		||||
      // 复制代码
 | 
			
		||||
      let chartData = this.dataSource;
 | 
			
		||||
      const colorList = this.color;
 | 
			
		||||
      const bgColorList = ['rgba(255,221,48,0.2)', 'rgba(84,255,210,0.2)', 'rgba(24,114,255,0.2)']
 | 
			
		||||
      const pieData1 = [];
 | 
			
		||||
      const sum = chartData.reduce((per, cur) => per + cur.value, 0);
 | 
			
		||||
      const gap = (1 * sum) / 100;
 | 
			
		||||
      const gapData = {
 | 
			
		||||
        name: '',
 | 
			
		||||
        value: gap,
 | 
			
		||||
        itemStyle: {
 | 
			
		||||
          color: 'transparent',
 | 
			
		||||
        },
 | 
			
		||||
      };
 | 
			
		||||
      //图标位置显示
 | 
			
		||||
      let lefts = ['40%', '40%', '40%', '40%'];
 | 
			
		||||
      let aligns = ['left', 'left', 'left', 'left'];
 | 
			
		||||
      let tops = ['15%', '40%', '65%', '90%'];
 | 
			
		||||
      let legendData = [];
 | 
			
		||||
      for (let i = 0; i < chartData.length; i++) {
 | 
			
		||||
        // 第一圈数据
 | 
			
		||||
        pieData1.push({
 | 
			
		||||
          ...chartData[i],
 | 
			
		||||
          itemStyle: {
 | 
			
		||||
            borderRadius: 0,
 | 
			
		||||
          },
 | 
			
		||||
        });
 | 
			
		||||
        pieData1.push(gapData);
 | 
			
		||||
 | 
			
		||||
        //  分散图例
 | 
			
		||||
        legendData.push({
 | 
			
		||||
          show: true,
 | 
			
		||||
          icon: 'rect', //'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
 | 
			
		||||
          left: lefts[i],
 | 
			
		||||
          top: tops[i],
 | 
			
		||||
          align: aligns[i],
 | 
			
		||||
          itemWidth: 19,
 | 
			
		||||
          itemHeight: 74,
 | 
			
		||||
          itemStyle: {
 | 
			
		||||
            color: colorList[i],
 | 
			
		||||
          },
 | 
			
		||||
          formatter:
 | 
			
		||||
            '{b|' + (chartData[i].name.length > 6 ? chartData[i].name.substr(0, 6) + '...' : chartData[i].name) + '}' + '{c|' + chartData[i].rate + '}' +'{a|' + chartData[i].value + '}',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            fontWeight: 'lighter',
 | 
			
		||||
            fontSize: 14,
 | 
			
		||||
            width: 460,
 | 
			
		||||
            height: 74,
 | 
			
		||||
            padding: [0, 10, 0, 10],
 | 
			
		||||
            backgroundColor: bgColorList[i],
 | 
			
		||||
            lineHeight: 74,
 | 
			
		||||
            rich: {
 | 
			
		||||
              a: {
 | 
			
		||||
                align: 'right',
 | 
			
		||||
                color: '#C1DEFF',
 | 
			
		||||
                fontSize: 42,
 | 
			
		||||
                fontWeight: 700
 | 
			
		||||
              },
 | 
			
		||||
              b: {
 | 
			
		||||
                align: 'left',
 | 
			
		||||
                color: '#C1DEFF',
 | 
			
		||||
                fontSize: 34,
 | 
			
		||||
                padding: [0, 0, 0, 10]
 | 
			
		||||
              },
 | 
			
		||||
              c:{
 | 
			
		||||
                align: 'center',
 | 
			
		||||
                color: '#C1DEFF',
 | 
			
		||||
                fontSize: 34,
 | 
			
		||||
                padding: [0, 0, 0, 10]
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          data: [chartData[i].name],
 | 
			
		||||
        });
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      let option = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
          show: true,
 | 
			
		||||
          backgroundColor: 'rgba(0, 0, 0,.8)',
 | 
			
		||||
          textStyle: {
 | 
			
		||||
            color: '#fff',
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        legend: legendData,
 | 
			
		||||
        grid: {
 | 
			
		||||
          top: 0,
 | 
			
		||||
          right: 0,
 | 
			
		||||
          bottom: 0,
 | 
			
		||||
          left: 0,
 | 
			
		||||
        },
 | 
			
		||||
        color: colorList,
 | 
			
		||||
        series: [
 | 
			
		||||
          {
 | 
			
		||||
            name: '',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            roundCap: true,
 | 
			
		||||
            radius: ['26%', '50%'],
 | 
			
		||||
            center: ['20%', '50%'],
 | 
			
		||||
            label: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            labelLine: {
 | 
			
		||||
              show: false
 | 
			
		||||
            },
 | 
			
		||||
            itemStyle: {
 | 
			
		||||
              borderRadius: 0,
 | 
			
		||||
              borderWidth: 10
 | 
			
		||||
            },
 | 
			
		||||
            data: pieData1
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      myCharts.setOption(option)
 | 
			
		||||
      let listener = function () {
 | 
			
		||||
        myCharts.resize()
 | 
			
		||||
      }
 | 
			
		||||
      EleResize.on(barCharts, listener)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style scoped lang="less">
 | 
			
		||||
#charts {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			@ -20,7 +20,8 @@
 | 
			
		|||
    "vue-echarts": "^4.1.0",
 | 
			
		||||
    "vue-seamless-scroll": "^1.1.23",
 | 
			
		||||
    "vue-server-renderer": "^2.7.10",
 | 
			
		||||
    "vue-template-compiler": "^2.7.10"
 | 
			
		||||
    "vue-template-compiler": "^2.7.10",
 | 
			
		||||
    "lodash": "^4.17.21"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "less": "^4.2.0",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,7 +106,6 @@ export default {
 | 
			
		|||
      const innerHeight = window.innerHeight
 | 
			
		||||
      const widthScale = innerWidth / baseWidth
 | 
			
		||||
      const scaleHeight = baseHeight * widthScale
 | 
			
		||||
      console.log('scaleHeight:', scaleHeight)
 | 
			
		||||
      if (scaleHeight <= innerHeight) {
 | 
			
		||||
        origin = 'left top'
 | 
			
		||||
        scale = widthScale
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
let EleResize = {
 | 
			
		||||
    _handleResize: function (e) {
 | 
			
		||||
        let ele = e.target || e.srcElement
 | 
			
		||||
        let trigger = ele.__resizeTrigger__
 | 
			
		||||
        if (trigger) {
 | 
			
		||||
            let handlers = trigger.__z_resizeListeners
 | 
			
		||||
            if (handlers) {
 | 
			
		||||
                let size = handlers.length
 | 
			
		||||
                for (let i = 0; i < size; i++) {
 | 
			
		||||
                    let h = handlers[i]
 | 
			
		||||
                    let handler = h.handler
 | 
			
		||||
                    let context = h.context
 | 
			
		||||
                    handler.apply(context, [e])
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    _removeHandler: function (ele, handler, context) {
 | 
			
		||||
        let handlers = ele.__z_resizeListeners
 | 
			
		||||
        if (handlers) {
 | 
			
		||||
            let size = handlers.length
 | 
			
		||||
            for (let i = 0; i < size; i++) {
 | 
			
		||||
                let h = handlers[i]
 | 
			
		||||
                if (h.handler === handler && h.context === context) {
 | 
			
		||||
                    handlers.splice(i, 1)
 | 
			
		||||
                    return
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    _createResizeTrigger: function (ele) {
 | 
			
		||||
        let obj = document.createElement('object')
 | 
			
		||||
        obj.setAttribute('style',
 | 
			
		||||
            'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden;opacity: 0; pointer-events: none; z-index: -1;')
 | 
			
		||||
        obj.onload = EleResize._handleObjectLoad
 | 
			
		||||
        obj.type = 'text/html'
 | 
			
		||||
        ele.appendChild(obj)
 | 
			
		||||
        obj.data = 'about:blank'
 | 
			
		||||
        return obj
 | 
			
		||||
    },
 | 
			
		||||
    _handleObjectLoad: function (evt) {
 | 
			
		||||
        this.contentDocument.defaultView.__resizeTrigger__ = this.__resizeElement__
 | 
			
		||||
        this.contentDocument.defaultView.addEventListener('resize', EleResize._handleResize)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
if (document.attachEvent) { // ie9-10
 | 
			
		||||
    EleResize.on = function (ele, handler, context) {
 | 
			
		||||
        let handlers = ele.__z_resizeListeners
 | 
			
		||||
        if (!handlers) {
 | 
			
		||||
            handlers = []
 | 
			
		||||
            ele.__z_resizeListeners = handlers
 | 
			
		||||
            ele.__resizeTrigger__ = ele
 | 
			
		||||
            ele.attachEvent('onresize', EleResize._handleResize)
 | 
			
		||||
        }
 | 
			
		||||
        handlers.push({
 | 
			
		||||
            handler: handler,
 | 
			
		||||
            context: context
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
    EleResize.off = function (ele, handler, context) {
 | 
			
		||||
        let handlers = ele.__z_resizeListeners
 | 
			
		||||
        if (handlers) {
 | 
			
		||||
            EleResize._removeHandler(ele, handler, context)
 | 
			
		||||
            if (handlers.length === 0) {
 | 
			
		||||
                ele.detachEvent('onresize', EleResize._handleResize)
 | 
			
		||||
                delete ele.__z_resizeListeners
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
} else {
 | 
			
		||||
    EleResize.on = function (ele, handler, context) {
 | 
			
		||||
        let handlers = ele.__z_resizeListeners
 | 
			
		||||
        if (!handlers) {
 | 
			
		||||
            handlers = []
 | 
			
		||||
            ele.__z_resizeListeners = handlers
 | 
			
		||||
 | 
			
		||||
            if (getComputedStyle(ele, null).position === 'static') {
 | 
			
		||||
                ele.style.position = 'relative'
 | 
			
		||||
            }
 | 
			
		||||
            let obj = EleResize._createResizeTrigger(ele)
 | 
			
		||||
            ele.__resizeTrigger__ = obj
 | 
			
		||||
            obj.__resizeElement__ = ele
 | 
			
		||||
        }
 | 
			
		||||
        handlers.push({
 | 
			
		||||
            handler: handler,
 | 
			
		||||
            context: context
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
    EleResize.off = function (ele, handler, context) {
 | 
			
		||||
        let handlers = ele.__z_resizeListeners
 | 
			
		||||
        if (handlers) {
 | 
			
		||||
            EleResize._removeHandler(ele, handler, context)
 | 
			
		||||
            if (handlers.length === 0) {
 | 
			
		||||
                let trigger = ele.__resizeTrigger__
 | 
			
		||||
                if (trigger) {
 | 
			
		||||
                    trigger.contentDocument.defaultView.removeEventListener('resize', EleResize._handleResize)
 | 
			
		||||
                    ele.removeChild(trigger)
 | 
			
		||||
                    delete ele.__resizeTrigger__
 | 
			
		||||
                }
 | 
			
		||||
                delete ele.__z_resizeListeners
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
export {EleResize}
 | 
			
		||||