Blame view

src/views/jktj/ywltj/index.vue 7.01 KB
任超 committed
1
<template>
2 3 4
  <!-- 监控日志 -->
  <div class="jktjDetail form-clues">
    <!-- 头部搜索 -->
yangwei committed
5 6
    <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
            <el-form-item label="行政区">
任超 committed
13 14
              <el-select v-model="form.qxdm" class="width100" clearable placeholder="行政区">
                <el-option v-for="item in dicData['A20']" :key="item.DCODE" :label="item.DNAME" :value="item.DCODE">
yangwei committed
15 16 17 18
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
19
          <el-col :span="4">
yangwei committed
20
            <el-form-item label="开始日期">
任超 committed
21 22 23
              <el-date-picker class="width100" :clearable="false" type="date" placeholder="开始日期"
                :picker-options="pickerOptionsStart" v-model="form.startTime"
                value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
24 25 26
            </el-form-item>
          </el-col>
          <el-col :span="4">
yangwei committed
27
            <el-form-item label="结束日期">
任超 committed
28 29 30
              <el-date-picker class="width100" :clearable="false" type="date" placeholder="结束日期"
                :picker-options="pickerOptionsEnd" v-model="form.endTime" value-format="yyyy-MM-dd HH:mm:ss"
                @change="endTimeChange"></el-date-picker>
yangwei committed
31 32 33
            </el-form-item>
          </el-col>
          <!-- 操作按钮 -->
yangwei committed
34
          <el-col :span="12" class="btnColRight">
xiaomiao committed
35
            <btn nativeType="cz" @click="resetForm">重置</btn>
36
            <btn nativeType="cx" @click="getProcessCounts">查询</btn>
xiaomiao committed
37
          </el-col>
yangwei committed
38 39 40 41
        </el-row>
      </el-form>
    </div>
    <!-- 图表 -->
42
    <div class="form-clues-content echarts-box" v-if="chartData.length">
43
      <div id="myChart" class="chart"></div>
任超 committed
44
    </div>
45
    <div class="form-clues-content echarts-box center" v-else>暂无数据</div>
46
  </div>
任超 committed
47 48 49
</template>

<script>
xiaomiao committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63
  import { mapGetters } from "vuex";
  import efficient from "@/api/efficient";
  import { getFirstDayOfSeason, timeFormat } from "@/utils/operation";
  export default {
    name: "jktj",
    data () {
      return {
        // 开始日期限制
        pickerOptionsStart: {
          disabledDate: (time) => {
            if (this.form.endTime) {
              return time.getTime() > new Date(this.form.endTime).getTime();
            }
          },
64
        },
xiaomiao committed
65 66 67 68 69 70 71
        // 结束日期限制
        pickerOptionsEnd: {
          disabledDate: (time) => {
            if (this.form.startTime) {
              return time.getTime() < new Date(this.form.startTime).getTime();
            }
          },
72
        },
xiaomiao committed
73 74 75 76 77 78 79 80 81
        // 搜索表单
        valueTime: "",
        // 搜索表单
        form: {
          startTime: getFirstDayOfSeason(),
          endTime: timeFormat(new Date(), true),
          qxdm: "",
        },
        chartData: []
82
      };
xiaomiao committed
83 84 85
    },
    mounted () {
      // 查询业务量
86
      this.getProcessCounts();
任超 committed
87
    },
xiaomiao committed
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
    computed: {
      ...mapGetters(["dicData"]),
    },
    methods: {
      endTimeChange (val) {
        this.form.endTime = timeFormat(new Date(val), true)
      },
      async getProcessCounts () {
        this.chartData = [];
        let { result: res } = await efficient.getProcessCounts(
          this.form.startTime,
          this.form.endTime,
          this.form.qxdm
        );
        //获取图表配置项需要的数据
        this.chartData = res;
        this.$nextTick(() => {
          // 初始化图表
          this.chartData.length && this.echartInit(this.chartData)
        });

      },
      // 重置
      resetForm () {
        this.form = {
          startTime: getFirstDayOfSeason(),
          endTime: timeFormat(new Date(), true),
          qxdm: ""
        };
        this.getProcessCounts();
      },
      //图表渲染
      echartInit (chartArr) {
        // 基于准备好的dom,初始化echarts实例
        let myChart = this.$echarts.init(document.getElementById("myChart"));
        // 绘制图表
        myChart.setOption({
          color: ["#13E5FF"],
          tooltip: {
            show: true,
            trigger: "axis",
            textStyle: {
              fontSize: 16, // 字体大小
            },
yangwei committed
132
          },
xiaomiao committed
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
          grid: {
            top: 120,
            bottom: 100,
          },
          label: {
            color: 'inherit',
          },
          xAxis: [
            {
              type: "category",
              data: chartArr.map(item => item.recTypeName),
              axisLabel: {
                interval: 0,
                rotate: 40,
                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 > 60) {
                        arr[index - 1] += "...";
                        return next;
                      } else {
                        return nLen;
                      }
                    });
                  c = null;
                  let ind = arr.findIndex((i) => {
                    return i.indexOf("...") > -1;
yangwei committed
165
                  });
xiaomiao committed
166 167 168 169 170 171 172 173
                  let newArr = ind > 0 ? arr.splice(0, ind + 1) : arr;
                  return newArr.join("");
                },
                textStyle: {
                  show: true,
                  color: "#fff",
                  fontSize: "16",
                },
174 175
              },
            },
xiaomiao committed
176 177 178 179 180 181
          ],
          yAxis: [
            {
              type: "value",
              name: "数量/个",
              nameTextStyle: {
182
                color: "#fff",
yangwei committed
183
                fontSize: "16",
184
              },
xiaomiao committed
185 186 187 188 189 190 191
              axisLabel: {
                textStyle: {
                  show: true,
                  color: "#fff",
                  fontSize: "16",
                },
              },
192
            },
xiaomiao committed
193
          ],
任超 committed
194

xiaomiao committed
195 196 197 198 199 200 201 202 203 204
          series: [
            {
              type: "bar",
              //显示数值
              itemStyle: {
                normal: {
                  label: {
                    show: true, //开启显示
                    position: "top", //在上方显示
                  },
yangwei committed
205 206
                },
              },
xiaomiao committed
207 208
              barMaxWidth: '60',
              data: chartArr.map(item => item.counts),
yangwei committed
209
            },
xiaomiao committed
210 211 212
          ],
        });
      },
任超 committed
213
    },
xiaomiao committed
214
  };
任超 committed
215 216
</script>
<style scoped lang="scss">
xiaomiao committed
217 218 219 220
  .jktjDetail {
    height: 100%;
    display: flex;
    flex-direction: column;
任超 committed
221

xiaomiao committed
222 223 224
    .rows {
      margin-left: 100px;
    }
任超 committed
225

xiaomiao committed
226 227 228 229 230
    .center {
      line-height: 50vh;
      text-align: center;
      color: #b6b5b5;
    }
任超 committed
231

xiaomiao committed
232 233 234 235
    .echarts-box {
      display: flex;
      justify-content: center;
      height: 500px;
任超 committed
236

xiaomiao committed
237 238 239 240 241
      .chart {
        width: 100%;
        height: 100%;
      }
    }
任超 committed
242

xiaomiao committed
243 244
    .form-clues-content {
      flex: 1;
245
      height: 100%;
任超 committed
246
    }
247
  }
任超 committed
248
</style>