tend.vue 5.28 KB
Newer Older
xulili's avatar
xulili committed
1 2
/* 点播趋势图 */
<template>
xulili's avatar
xulili committed
3
  <div class="trend-wrapper height100 overview-detail">
xulili's avatar
xulili committed
4
    <div class="btn-group" v-if="isExport">
xulili's avatar
xulili committed
5 6 7 8 9 10 11
      <el-button
        class="export"
        type="primary"
        icon="el-icon-download"
        @click="handleExport"
        >导出文件</el-button
      >
xulili's avatar
xulili committed
12
    </div>
xulili's avatar
xulili committed
13
    <div id="bodyCanvas" :class="isExport ? '' : 'export'">
xulili's avatar
xulili committed
14 15 16
      <div class="ecahrts-panel-box">
        <div class="panel-box-header">
          <span class="title">趋势图</span>
xulili's avatar
xulili committed
17 18 19 20 21 22 23 24 25 26 27 28 29
          <el-date-picker
            v-model="monthVal"
            value-format="yyyyMM"
            type="monthrange"
            align="right"
            unlink-panels
            range-separator="至"
            start-placeholder="开始月份"
            end-placeholder="结束月份"
            :picker-options="pickerOptions"
            @change="handleChange"
          >
          </el-date-picker>
xulili's avatar
xulili committed
30 31 32
          <div class="tip">
            <span class="tip-title">页面说明:</span>
            <span
xulili's avatar
xulili committed
33
              >默认展示当月点播总量趋势图及详情表格,可按照时间段进行检索,图表可以联动变化。。</span
xulili's avatar
xulili committed
34 35 36 37 38 39
            >
          </div>
        </div>
        <div class="panel-box-content">
          <trend-line ref="echarts" :data="echartsData" />
        </div>
xulili's avatar
xulili committed
40
      </div>
xulili's avatar
xulili committed
41 42 43 44 45 46 47
      <div class="rank-panel-box">
        <div class="panel-box-header">
          <span class="title">点播趋势排行</span>
        </div>
        <div class="panel-box-content">
          <rank-table :tList="tList" :data="data" />
        </div>
xulili's avatar
xulili committed
48
      </div>
xulili's avatar
xulili committed
49
    </div>
xulili's avatar
xulili committed
50
  </div>
xulili's avatar
xulili committed
51 52
</template>
<script>
xulili's avatar
xulili committed
53
import { trendLine, rankTable } from "./components";
xulili's avatar
xulili committed
54
import { getCurDate } from "@/utils/util.time";
xulili's avatar
xulili committed
55
export default {
xulili's avatar
xulili committed
56 57 58 59
  data() {
    return {
      value1: "",
      tList: ["排名", "统计时间", "点播总量"],
xulili's avatar
xulili committed
60
      playDate: "1",
xulili's avatar
xulili committed
61
      data: [],
xulili's avatar
xulili committed
62
      echartsData: {},
xulili's avatar
xulili committed
63 64
      value2: "",
      monthVal: "",
xulili's avatar
xulili committed
65
      timer: null,
xulili's avatar
xulili committed
66
      isExport: false,
xulili's avatar
xulili committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
       pickerOptions: {
          disabledDate(time) {
            return time.getTime() > Date.now();
          },
          shortcuts: [{
            text: '本月',
            onClick(picker) {
              picker.$emit('pick', [new Date(), new Date()]);
            }
          }, {
            text: '今年至今',
            onClick(picker) {
              const end = new Date();
              const start = new Date(new Date().getFullYear(), 0);
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '最近六个月',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setMonth(start.getMonth() - 6);
              picker.$emit('pick', [start, end]);
            }
          }]
        },
xulili's avatar
xulili committed
93 94 95
    };
  },
  components: { trendLine, rankTable },
xulili's avatar
xulili committed
96
  mounted() {
xulili's avatar
xulili committed
97 98 99 100
    let roleList = localStorage.getItem("roleList");
    if (roleList) {
      this.isExport = localStorage.getItem("roleList").includes("1");
    }
xulili's avatar
xulili committed
101
    this.getList()
xulili's avatar
xulili committed
102
  },
xulili's avatar
xulili committed
103
  methods: {
xulili's avatar
xulili committed
104
    getList(frequencyDate) {
xulili's avatar
xulili committed
105
      let _this = this;
xulili's avatar
xulili committed
106 107 108 109
      let url = `tBoardStatistic/getBoardPageList`
      if(frequencyDate){
          url +=`?beginDate=${frequencyDate[0]}&endDate=${frequencyDate[1]}`
      }
xulili's avatar
xulili committed
110 111 112
      _this
        .$https({
          method: "post",
xulili's avatar
xulili committed
113
          url:url,
xulili's avatar
xulili committed
114 115 116 117 118 119
          authType: this.backToken,
        })
        .then((res) => {
          if (res.status == 200) {
            if (res.data.resultCode == 200) {
              _this.echartsData = {};
xulili's avatar
xulili committed
120
              _this.echartsData.xAxisData = res.data.data.dateList;
xulili's avatar
xulili committed
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
              _this.echartsData.yAxisData = res.data.data.cntList;
              _this.data = res.data.data.page.records;
            } else {
              _this.echartsData = {};
              _this.data = [];
            }
          } else {
            _this.echartsData = {};
            _this.data = [];
          }
          setTimeout(() => {
            _this.init();
          }, 100);
        })
        .catch((err) => {
          _this.$message.error(err.message);
          _this.echartsData = {};
          _this.data = [];
        });
    },
xulili's avatar
xulili committed
141
    handleChange(val) {
xulili's avatar
xulili committed
142
      this.getList(val);
xulili's avatar
xulili committed
143
    },
xulili's avatar
xulili committed
144 145
    init() {
      this.$refs.echarts.init();
xulili's avatar
xulili committed
146
    },
xulili's avatar
xulili committed
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
    handleExport() {
      let _this = this;
      if (this.timer) {
        return false;
      }
      this.timer = setTimeout(() => {
        clearTimeout(_this.timer);
        _this.timer = null;
      }, 30000);
      _this.getPdf("#bodyCanvas", "趋势分析");
      const loading = this.$loading({
        lock: true,
        text: "Loading",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      setTimeout(() => {
        loading.close();
      }, 2000);
    },
xulili's avatar
xulili committed
167 168
  },
};
xulili's avatar
xulili committed
169 170 171
</script>

<style lang="less" scoped>
xulili's avatar
xulili committed
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
.trend-wrapper {
  .btn-group {
    margin-bottom: 20px;
    height: 36px;
  }
  /deep/ .el-button.export {
    width: 128px;
    float: right;
    .el-icon-download {
      font-size: 18px;
      font-weight: bold;
    }
  }
  .el-select {
    margin-left: 40px;
    /deep/.el-input__inner {
      border-radius: 22px;
      background-color: @party-bg-gray;
      border-color: @party-border-color;
    }
  }
  #bodyCanvas {
    height: calc(100% - 56px);
xulili's avatar
xulili committed
195 196 197
    &.export {
      height: 100%;
    }
xulili's avatar
xulili committed
198 199 200 201 202
  }
  .ul-wrapper {
    background-color: @party-white;
  }
}
xulili's avatar
xulili committed
203
</style>