Browse Source

总体进度

maxiaoxiao 2 months ago
parent
commit
bfc59179af
2 changed files with 438 additions and 6 deletions
  1. 2 6
      src/components/echarts/EchartsMap.vue
  2. 436 0
      src/views/pageCode/statistic/index.vue

+ 2 - 6
src/components/echarts/EchartsMap.vue

@@ -149,11 +149,7 @@ export default {
 </script>
 <style lang="scss" scoped>
 .map {
-  position: relative;
-  width: 100vw;
-  height: calc(100vh - 80px);
-  z-index: 1;
-  left: -451px;
-  top: -130px;
+  width: 100%;
+  height: 100%;
 }
 </style>

+ 436 - 0
src/views/pageCode/statistic/index.vue

@@ -0,0 +1,436 @@
+<template>
+  <div class="box">
+    <top :active="1"></top>
+    <div class="box-data">
+      <DatePicker type="year" placeholder="Select year" style="width: 200px" v-model="saleDate" format="yyyy" @on-change="timeChange" />
+      <Select v-model="model" style="width: 200px; margin-left: 20px" @on-change="changeModel">
+        <Option v-for="item in nowmonth" :value="item.value" :key="item.value">{{ item.label }}</Option>
+      </Select>
+    </div>
+    <div class="box-left">
+      <div class="box-left-content" style="position: relative; z-index: 99998"><left :regionCode="regionCode" :year="year" :month="model" ref="leftTop"></left></div>
+      <div class="box-center-content">
+        <div class="box-center-content-top">
+          <div class="back-button" @click="backClick" v-if="regionLevel === '3' && userRegionLevel !== '3'"> 
+            <!-- <img src="@/assets/images/back.png" /> -->
+          </div>
+          <div class="num">
+            <div class="num-item">
+              <div class="num-item-title">总数</div>
+              <div class="num-item-text">{{ numParam.total ? numParam.total : 0 }}</div>
+              <!-- <img src="@/assets/images/sign-blue.png" /> -->
+            </div>
+            <div class="num-item">
+              <div class="num-item-title">待办数</div>
+              <div class="num-item-text">{{ numParam.toDoQuantity ? numParam.toDoQuantity : 0 }}</div>
+              <!-- <img src="@/assets/images/sign-blue.png" /> -->
+            </div>
+            <div class="num-item">
+              <div class="num-item-title">办结数</div>
+              <div class="num-item-text">{{ numParam.completedQuantity ? numParam.completedQuantity : 0 }}</div>
+              <!-- <img src="@/assets/images/sign-blue.png" /> -->
+            </div>
+            <div class="num-item">
+              <div class="num-item-title">重复反映事项数</div>
+              <div class="num-item-text color1">{{ numParam.repeatReactionNum ? numParam.repeatReactionNum : 0 }}</div>
+              <!-- <img src="@/assets/images/sign-red.png" /> -->
+            </div>
+            <div class="num-item">
+              <div class="num-item-title">逾期事项数</div>
+              <div class="num-item-text color2">{{ numParam.overdueNum ? numParam.overdueNum : 0 }}</div>
+              <!-- <img src="@/assets/images/sign-yellow.png" /> -->
+            </div>
+            <div class="num-item">
+              <div class="num-item-title">满意率</div>
+              <div class="num-item-text color3">{{ numParam.satisfactionRate ? numParam.satisfactionRate : 0 }}%</div>
+              <!-- <img src="@/assets/images/sign-green.png" /> -->
+            </div>
+          </div>
+        </div>
+        <echarts-map ref="echartsMap" :mapData="mapGeoJson" :regionLevel="regionLevel" @mapClick="mapClick" @mapClicker="mapClicker"></echarts-map>
+        <div class="box-center-content-bottom" v-if="regionLevel === '2'">
+          <div class="region-item" v-for="item in regionList" :key="item.code">
+            <span class="region-item-legend"></span>
+            <span class="region-item-text" @click="changeRegion(item)">{{ item.name }}</span>
+          </div>
+        </div>
+      </div>
+      <div class="box-left-content" style="position: relative; z-index: 9999"><right :regionCode="regionCode" :year="year" :month="model" :monthStr="modelStr" ref="rightTop"></right></div>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { waterMark } from '@/mixins';
+  import top from '../WarningAnalysis/components/top';
+  import left from './components/left';
+  import right from './components/right';
+  import CommandMap from '@/api/commandMap';
+  export default {
+    name: 'index',
+    mixins: [waterMark],
+    data() {
+      return {
+        residentsChart: {
+          legend: [['学生数量'], ['学校数量']],
+          category: ['2017年', '2018年', '2019年', '2020年'],
+          list: [[[70512, 78512, 70512, 74512]], [[9841, 12000, 10101, 10451]]],
+        },
+        residentsCharta: {
+          legend: [],
+          category: ['2017年', '2018年', '2019年', '2020年'],
+          list: [[9841, 12000, 10101, 10451]],
+        },
+        saleDate: '',
+        nowmonth: [
+          {
+            value: 1,
+            label: '1月',
+          },
+          {
+            value: 2,
+            label: '2月',
+          },
+          {
+            value: 3,
+            label: '3月',
+          },
+          {
+            value: 4,
+            label: '4月',
+          },
+          {
+            value: 5,
+            label: '5月',
+          },
+          {
+            value: 6,
+            label: '6月',
+          },
+          {
+            value: 7,
+            label: '7月',
+          },
+          {
+            value: 8,
+            label: '8月',
+          },
+          {
+            value: 9,
+            label: '9月',
+          },
+          {
+            value: 10,
+            label: '10月',
+          },
+          {
+            value: 11,
+            label: '11月',
+          },
+          {
+            value: 12,
+            label: '12月',
+          },
+        ],
+        model: '',
+        modelStr: '',
+        originChart: [
+          { name: '小于10岁', value: 349 },
+          { name: '11-18岁', value: 246 },
+          { name: '19-35岁', value: 190 },
+          { name: '36-60岁', value: 150 },
+          { name: '60岁以上', value: 50 },
+        ],
+        mapGeoJson: {},
+        regionCode: '',
+        regionLevel: '',
+        regionList: [
+          {
+            name: '经开区',
+            code: '360986',
+          },
+          {
+            name: '明月山',
+            code: '360985',
+          },
+          {
+            name: '宜阳新区',
+            code: '360984',
+          },
+        ],
+        year: '',
+        numParam: {},
+        userRegionLevel: '',
+        userRegionCode: '',
+        backDataFlag: false,
+      };
+    },
+    components: {
+      top,
+      left,
+      right,
+    },
+    mounted() {
+      const myDate = new Date();
+      const year = myDate.getFullYear(); // 获取当前年份
+      this.year = year;
+      const month = myDate.getMonth() + 1; // 获取当前月份(0-11,0代表1月所以要加1);
+      const day = myDate.getDate(); // 获取当前日(1-31)
+      this.saleDate = `${year}/${month}/${day}`;
+      myDate.setMonth(myDate.getMonth() - 1);
+      this.model = myDate.getMonth() + 1;
+      if (this.model < 10) {
+        this.modelStr = '0' + this.model;
+      } else {
+        this.modelStr = this.model + '';
+      }
+      this.regionCode = JSON.parse(sessionStorage.getItem('userInfo')).regionCode;
+      this.regionLevel = JSON.parse(sessionStorage.getItem('userInfo')).regionLevel;
+      this.userRegionLevel = JSON.parse(sessionStorage.getItem('userInfo')).regionLevel;
+      this.userRegionCode = JSON.parse(sessionStorage.getItem('userInfo')).regionCode;
+      this.getRegion();
+      this.init();
+    },
+    methods: {
+      init() {
+        this.rightClick();
+        this.leftClick();
+        this.getNum();
+      },
+      timeChange(val) {
+        this.saleDate = val;
+        this.year = val;
+        this.init();
+      },
+      changeModel(val) {
+        console.log(val);
+        this.model = val;
+        if (this.model < 10) {
+          this.modelStr = '0' + this.model;
+        } else {
+          this.modelStr = this.model + '';
+        }
+        this.init();
+      },
+      rightClick() {
+        const param = {
+          regionCode: this.regionCode,
+          dateString: this.year + '-' + this.modelStr,
+          regionType: '02',
+        };
+        this.$refs.rightTop.totalNum(param);
+      },
+      leftClick() {
+        const param = {
+          regionCode: this.regionCode,
+          time: this.year + '-' + this.modelStr,
+        };
+        this.$refs.leftTop.totalNum(param);
+      },
+      changeRegion(item) {
+        this.regionCode = item.code;
+        this.regionLevel = '2';
+        this.init();
+      },
+      getNum() {
+        const params = {
+          regionCode: this.regionCode,
+          dateString: this.year + '-' + this.modelStr,
+        };
+        CommandMap.CommandMapClass.queryVolumeStatistics(params).then((res) => {
+          const { status, message } = res.data;
+          if (status === 0) {
+            this.numParam = res.data.data;
+          } else {
+            this.$Notice.error({
+              title: message,
+            });
+          }
+        });
+      },
+      backClick() {
+        this.regionCode = this.userRegionCode;
+        this.regionLevel = '2';
+        this.$refs.echartsMap.chart.dispose();
+        this.getRegion();
+        this.init();
+      },
+      mapClick(event) {
+        const properties = this.mapGeoJson.features[event.target.dataIndex].properties;
+        this.regionCode = properties.code;
+        this.regionLevel = properties.level;
+        this.init();
+        if (this.regionLevel === '4') {
+          return;
+        }
+        this.getRegion();
+      },
+      mapClicker(event) {
+        const properties = this.mapGeoJson.features[event.target.dataIndex].properties;
+        this.regionCode = properties.code;
+        this.regionLevel = '3';
+        if (!(this.regionLevel === '3' && this.userRegionLevel !== '3')) {
+          this.backDataFlag = !this.backDataFlag;
+          if (this.backDataFlag) {
+            this.regionCode = properties.code;
+            this.regionLevel = '3';
+          } else {
+            this.regionCode = this.userRegionCode;
+            this.regionLevel = '2';
+          }
+        }
+        this.init();
+      },
+      getRegion() {
+        const params = {
+          regionCode: this.regionCode,
+        };
+        CommandMap.CommandMapClass.epidemic(params).then((res) => {
+          const { status, message } = res.data;
+          if (status === 0) {
+            this.mapGeoJson = res.data.data;
+          } else {
+            this.$Notice.error({
+              title: message,
+            });
+          }
+        });
+      },
+    },
+  };
+</script>
+
+<style scoped lang="less">
+  .box {
+    // background: url('~@/assets/images/command/bg.png') no-repeat center;
+    background-size: 100% 100%;
+    width: 100%;
+    height: 100%;
+    &-data {
+      margin-bottom: 10px;
+      margin-left: 22px;
+      position: relative;
+      z-index: 99999;
+    }
+    &-left {
+      height: 84vh;
+      display: flex;
+      justify-content: space-between;
+      align-items: flex-start;
+      margin-right: 22px;
+      margin-left: 22px;
+      &-content {
+        width: 451px;
+        height: 100%;
+        z-index: 3;
+      }
+    }
+  }
+  .box-center-content {
+    width: calc(100% - 451px - 451px);
+    height: 100%;
+    position: relative;
+    z-index: 9999;
+    &-top {
+      position: relative;
+      .back-button {
+        position: absolute;
+        left: 10px;
+        cursor: pointer;
+        z-index: 3;
+      }
+      .num {
+        width: 80%;
+        margin: 0 auto;
+        display: flex;
+        justify-content: space-between;
+        &-item {
+          text-align: center;
+          &-title {
+            font-size: 14px;
+            font-weight: 400;
+            color: #ffffff;
+            line-height: 20px;
+            padding-bottom: 5px;
+          }
+          &-text {
+            font-size: 30px;
+            font-weight: 700;
+            color: #ffffff;
+            line-height: 30px;
+          }
+          img {
+            margin-top: -29px;
+          }
+          .color1 {
+            color: #ff4141;
+          }
+          .color2 {
+            color: #fbca38;
+          }
+          .color3 {
+            color: #8cf347;
+          }
+        }
+      }
+    }
+    &-bottom {
+      float: right;
+      margin-right: 20px;
+      position: relative;
+      z-index: 9999;
+    }
+  }
+  .region-item {
+    color: #fff;
+    line-height: 35px;
+    &-legend {
+      display: inline-block;
+      width: 14px;
+      height: 14px;
+      background: #dd7a3d;
+      opacity: 1;
+      border-radius: 50%;
+      vertical-align: middle;
+    }
+    &-text {
+      display: inline-block;
+      cursor: pointer;
+      margin-left: 10px;
+    }
+  }
+  /deep/ .ivu-input {
+    display: inline-block;
+    width: 100%;
+    line-height: 1.5;
+    padding: 10px 12px;
+    font-size: 14px;
+    border: 1px solid #0b6bc0;
+    border-radius: 8px;
+    color: #fff;
+    background-color: #071d49;
+    background-image: none;
+    position: relative;
+    cursor: text;
+    transition: border 0.2s ease-in-out, background 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
+  }
+  /deep/ .ivu-select-selection {
+    display: block;
+    box-sizing: border-box;
+    outline: none;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    cursor: pointer;
+    z-index: 3;
+    position: relative;
+    background-color: #071d49;
+    border-radius: 4px;
+    border: 1px solid #0b6bc0;
+    transition: all 0.2s ease-in-out;
+  }
+  /deep/ .ivu-select-selected-value {
+    color: #fff;
+  }
+</style>