Blame view

src/views/jktj/cgltj/index.vue 8.92 KB
yangwei committed
1 2 3 4 5 6
<template>
  <!-- 监控日志 -->
  <div class="jktjDetail form-clues">
    <!-- 头部搜索 -->
    <div class="from-clues-header">
      <el-form ref="form" :model="form" label-width="100px">
任超 committed
7 8 9
        <el-form-item>
          <Breadcrumb />
        </el-form-item>
yangwei committed
10
        <el-row>
11
          <el-col :span="4">
yangwei committed
12 13
            <el-form-item label="行政区">
              <el-select
14
                v-model="form.qxdm"
yangwei committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28
                class="width100"
                clearable
                placeholder="行政区"
              >
                <el-option
                  v-for="item in dicData['A20']"
                  :key="item.DCODE"
                  :label="item.DNAME"
                  :value="item.DCODE"
                >
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
29 30
          <el-col :span="4">
            <el-form-item label="开始日期" prop="startTime">
yangwei committed
31
              <el-date-picker
yangwei committed
32
                type="date"
yangwei committed
33
                :clearable="false"
yangwei committed
34
                class="width100"
35 36 37
                placeholder="开始日期"
                :picker-options="pickerOptionsStart"
                v-model="form.startTime"
38
                value-format="yyyy-MM-dd HH:mm:ss"
39 40 41 42 43 44
              ></el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="结束日期" prop="endTime">
              <el-date-picker
yangwei committed
45
                type="date"
yangwei committed
46
                :clearable="false"
yangwei committed
47
                class="width100"
48 49 50
                placeholder="结束日期"
                :picker-options="pickerOptionsEnd"
                v-model="form.endTime"
51
                value-format="yyyy-MM-dd HH:mm:ss"
yangwei committed
52
                @change="endTimeChange"
53
              ></el-date-picker>
yangwei committed
54 55 56
            </el-form-item>
          </el-col>
          <!-- 操作按钮 -->
yangwei committed
57
          <el-col :span="12" class="btnColRight">
yangwei committed
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
            <btn nativeType="cz" @click="resetForm">重置</btn>
            <btn nativeType="cx" @click="getSuucessRate">查询</btn>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <!-- 图表 -->
    <div class="form-clues-content echarts-box" v-if="chartData.length">
      <div id="myChart" class="chart"></div>
    </div>
    <div class="form-clues-content echarts-box center" v-else>暂无数据</div>
  </div>
</template>

<script>
import { mapGetters } from "vuex";
import { getFirstDayOfSeason, timeFormat } from "@/utils/operation";
import business from "@/api/business";
export default {
  name: "jktj",
任超 committed
78
  data () {
yangwei committed
79
    return {
80
      // 开始日期限制
yangwei committed
81 82 83
      pickerOptionsStart: {
        disabledDate: (time) => {
          if (this.form.endTime) {
yangwei committed
84
            return time.getTime() > new Date(this.form.endTime).getTime();
yangwei committed
85 86 87 88 89 90 91
          }
        },
      },
      // 结束日期限制
      pickerOptionsEnd: {
        disabledDate: (time) => {
          if (this.form.startTime) {
yangwei committed
92
            return time.getTime() < new Date(this.form.startTime).getTime();
yangwei committed
93 94 95 96 97
          }
        },
      },
      recTypeArr: [],
      chartData: [],
98
      // 搜索表单
yangwei committed
99
      form: {
100 101
        startTime: getFirstDayOfSeason(),
        endTime: timeFormat(new Date(),true),
yangwei committed
102 103 104 105
        qxdm: "",
      },
    };
  },
任超 committed
106
  mounted () {
yangwei committed
107 108 109 110 111 112 113
    // 查询成功率
    this.getSuucessRate();
  },
  computed: {
    ...mapGetters(["dicData"]),
  },
  methods: {
yangwei committed
114 115 116
    endTimeChange(val){
      this.form.endTime = timeFormat(new Date(val),true)
    },
任超 committed
117
    async getSuucessRate () {
yangwei committed
118 119 120
      this.recTypeArr = [];
      this.chartData = [];
      let { result: res } = await business.getSuucessRate(
121 122 123
        this.form.startTime,
        this.form.endTime,
        this.form.qxdm
yangwei committed
124 125 126 127 128 129 130
      );
      this.chartData = res;
      //行政区代码过滤
      res.length > 0 &&
        res.forEach((item) => {
          this.recTypeArr.push(item.recTypeName);
        });
131 132
      this.$nextTick(() => {
        // 初始化图表 
yangwei committed
133
        this.chartData.length && this.echartInit();
134
      });
yangwei committed
135 136
    },
    // 重置
任超 committed
137
    resetForm () {
yangwei committed
138
      this.form = {
139 140
        startTime: getFirstDayOfSeason(),
        endTime: timeFormat(new Date(),true),
141
        qxdm: "",
yangwei committed
142 143 144
      };
      this.getSuucessRate();
    },
任超 committed
145
    echartInit () {
yangwei committed
146 147 148 149 150
      let _this = this;
      // 基于准备好的dom,初始化echarts实例
      let myChart = this.$echarts.init(document.getElementById("myChart"));
      // 绘制图表
      myChart.setOption({
151
        color: ["#13E5FF", "#C99E68", "#E873B2", "#ffaf48"],
yangwei committed
152 153
        tooltip: {
          trigger: "axis",
yangwei committed
154
          formatter: '{b}<br/>{a0}:{c0}个<br/>{a1}:{c1}个<br/>{a2}:{c2}%',
yangwei committed
155 156 157 158 159 160 161 162 163
          axisPointer: {
            type: "cross",
            crossStyle: {
              color: "#fff",
            },
          },
        },
        legend: {
          data: ["成功", "失败", "成功率"],
yangwei committed
164
          top: '16',
yangwei committed
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
          textStyle: {
            show: true,
            color: "#fff",
            fontSize: "16",
          },
        },
        xAxis: [
          {
            type: "category",
            data: _this.recTypeArr,
            axisPointer: {
              type: "shadow",
            },
            axisLabel: {
              textStyle: {
                show: true,
                color: "#fff",
                fontSize: "16",
              },
              formatter: function (val) {
                let c = document.createElement("canvas");
                const ctx = c.getContext("2d");
                const arr = val.split("");
                arr
                  .map((item) => ctx.measureText(item).width)
                  .reduce((pre, next, index) => {
                    const nLen = pre + next;
                    if (nLen > 40) {
                      arr[index - 1] += "...";
                      return next;
                    } else {
                      return nLen;
                    }
                  });
                c = null;
                let ind = arr.findIndex((i) => {
                  return i.indexOf("...") > -1;
                });
                let newArr = ind > 0 ? arr.splice(0, ind + 1) : arr;
                return newArr.join("");
              },
            },
          },
        ],
        yAxis: [
          {
            type: "value",
            name: "数量/个",
            nameTextStyle: {
              color: "#fff",
              fontSize: "16",
            },
            interval: 50,
            axisLabel: {
              formatter: "{value}",
              textStyle: {
                show: true,
                color: "#fff",
                fontSize: "16",
              },
            },
          },
          {
            type: "value",
yangwei committed
229
            name: "成功率",
yangwei committed
230 231 232 233
            nameTextStyle: {
              color: "#fff",
              fontSize: "16",
            },
yangwei committed
234
            splitNumber:2,
yangwei committed
235 236 237 238 239 240 241 242 243 244 245 246 247 248
            axisLabel: {
              formatter: "{value} %",
              textStyle: {
                show: true,
                color: "#fff",
                fontSize: "16",
              },
            },
          },
        ],
        series: [
          {
            name: "成功",
            type: "bar",
yangwei committed
249 250 251 252 253 254 255 256 257
            //显示数值
            itemStyle: {
              normal: {
                label: {
                  show: true, //开启显示
                  position: "top", //在上方显示
                },
              },
            },
258
            barMaxWidth: '60',
yangwei committed
259 260 261 262 263 264 265
            data: this.chartData.map((item) => {
              return item.success;
            }),
          },
          {
            name: "失败",
            type: "bar",
yangwei committed
266 267 268 269 270 271 272 273 274
            //显示数值
            itemStyle: {
              normal: {
                label: {
                  show: true, //开启显示
                  position: "top", //在上方显示
                },
              },
            },
275
            barMaxWidth: '60',
yangwei committed
276 277 278 279 280 281
            data: this.chartData.map((item) => {
              return item.failure;
            }),
          },
          {
            name: "成功率",
yangwei committed
282 283 284 285 286 287 288 289 290
            //显示数值
            itemStyle: {
              normal: {
                label: {
                  show: true, //开启显示
                  position: "top", //在上方显示
                },
              },
            },
yangwei committed
291
            type: "line",
292
            barMaxWidth: '60',
yangwei committed
293 294 295 296 297 298 299 300 301 302 303 304 305
            yAxisIndex: 1,
            data: this.chartData.map((item) => {
              return item.rate;
            }),
          },
        ],
      });
    },
  },
};
</script>
<style scoped lang="scss">
@import "~@/styles/public.scss";
任超 committed
306

yangwei committed
307 308 309 310
.jktjDetail {
  height: 100%;
  display: flex;
  flex-direction: column;
任超 committed
311

yangwei committed
312 313 314
  .rows {
    margin-left: 100px;
  }
任超 committed
315

yangwei committed
316 317 318
  .center {
    line-height: 50vh;
    text-align: center;
任超 committed
319
    color: #b6b5b5
yangwei committed
320
  }
任超 committed
321

yangwei committed
322 323 324 325
  .echarts-box {
    display: flex;
    justify-content: center;
    height: 500px;
任超 committed
326

yangwei committed
327 328 329 330 331
    .chart {
      width: 100%;
      height: 100%;
    }
  }
任超 committed
332

yangwei committed
333 334 335 336 337 338 339 340 341
  .form-clues-content {
    flex: 1;
    height: 100%;
  }
}
</style>
<style scoped lang="scss">
@import "~@/styles/public.scss";
</style>