Blame view

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

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

192 193 194
        series: [
          {
            type: "bar",
yangwei committed
195 196 197 198 199 200 201 202 203
            //显示数值
            itemStyle: {
              normal: {
                label: {
                  show: true, //开启显示
                  position: "top", //在上方显示
                },
              },
            },
204
            barMaxWidth: '60',
任超 committed
205
            data: chartArr.map(item => item.counts),
206 207 208
          },
        ],
      });
任超 committed
209
    },
210
  },
任超 committed
211 212 213
};
</script>
<style scoped lang="scss">
任超 committed
214
// @import "~@/styles/public.scss";
任超 committed
215

任超 committed
216
.jktjDetail {
217 218 219
  height: 100%;
  display: flex;
  flex-direction: column;
任超 committed
220

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

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

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

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

242 243 244 245
  .form-clues-content {
    flex: 1;
    height: 100%;
  }
任超 committed
246 247 248
}
</style>
<style scoped lang="scss">
任超 committed
249
// @import "~@/styles/public.scss";
任超 committed
250
</style>