Browse Source

备份

备份
烬玊 1 year ago
parent
commit
60ef8f6704

+ 182 - 0
src/pages/index/components/arrears_total.vue

@@ -0,0 +1,182 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">欠费总分析</h2>
4
+    <br>
5
+    <div style="width: 100%; height: 300px;display: flex; justify-content: space-between;">
6
+
7
+
8
+      <div style="width: 33%;height: 300px">
9
+      <h4 style="color: white">欠费金额占比</h4>
10
+        <piechart
11
+          class="model-pie-body"
12
+          id="chart11"
13
+          :roseType="false"
14
+          :radiusArr="['30%', '70%']"
15
+          :colorArr="modelPieColor1"
16
+          :labelFormat="['{name|{b}}', '{sub|{@value}元 {d}%}', '{hr|}']"
17
+          :dataset="modelData.list1"
18
+          :encode="{ itemName: 'name', value: 'value' }"
19
+        />
20
+      </div>
21
+      <div style="width: 33%;height: 300px">
22
+        <h4 style="color: white">欠费条数占比</h4>
23
+        <piechart
24
+          class="model-pie-body"
25
+          id="chart12"
26
+          :roseType="false"
27
+          :radiusArr="['30%', '70%']"
28
+          :colorArr="modelPieColor1"
29
+          :labelFormat="['{name|{b}}', '{sub|{@value}元 {d}%}', '{hr|}']"
30
+          :dataset="modelData.list1"
31
+          :encode="{ itemName: 'name', value: 'value' }"
32
+        />
33
+      </div>
34
+      <div style="width: 33%;height: 300px">
35
+        <h4 style="color: white">欠费车场排行</h4>
36
+        <barchart
37
+          class="side-chart"
38
+          :autoStop="false"
39
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
40
+          legendIcon="react"
41
+          :bottom="30"
42
+          :xlabelFormat="xLabelFormat"
43
+          :top="60"
44
+          yAxisName="(个)"
45
+          :tooltip="tooltipFormat"
46
+          :dataset="bardata"
47
+          :encode="[
48
+            {x: 'month', y: 'hs', seriesName: '接入数量'},
49
+            {x: 'month', y: 'cs', seriesName: '异常数量'}]"
50
+          :labelSize="15"
51
+          id="fxdqhszzt"
52
+        />
53
+      </div>
54
+    </div>
55
+    <div style="display: flex; justify-content: space-between; margin-top: 7%">
56
+      <div style="width: 50%; height: 300px">
57
+        <h4 style="color: white">欠费车牌排行榜</h4>
58
+        <barchart
59
+          class="side-chart"
60
+          :autoStop="false"
61
+          :colorArr="['#ffd201', '#00eacb', '#01b4ff', '#5d78ff']"
62
+          legendIcon="react"
63
+          :bottom="30"
64
+          :xlabelFormat="xLabelFormat"
65
+          :top="60"
66
+          yAxisName="(个)"
67
+          :tooltip="tooltipFormat"
68
+          :dataset="bardata"
69
+          :encode="[
70
+            {x: 'month', y: 'hs', seriesName: '接入数量'},
71
+            {x: 'month', y: 'cs', seriesName: '异常数量'}]"
72
+          :labelSize="15"
73
+          id="fxdqhszz2"
74
+        />
75
+      </div>
76
+      <div style="width: 50%; height: 300px">
77
+        <h4 style="color: white">催缴情况分析</h4>
78
+        <linechart
79
+          :autoStop="false"
80
+          :top="30"
81
+          :bottom="30"
82
+          :left="40"
83
+          :legendTop="0"
84
+          yAxisName="(元)"
85
+          :dataset="linedata"
86
+          :tooltipFormat="lineTooltipFormat"
87
+          :encode="[
88
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
89
+            ]"
90
+          id="axstj"
91
+        />
92
+      </div>
93
+    </div>
94
+  </div>
95
+</template>
96
+<script>
97
+import piechart from "@/components/pieChart";
98
+import linechart from "@/components/lineChart";
99
+import barchart from "@/components/barChart";
100
+import api from "@/api/article_liao";
101
+
102
+export default {
103
+  components: {
104
+    piechart,
105
+    barchart,
106
+    linechart
107
+  },
108
+  data() {
109
+    return {
110
+      modelPieColor: ["#4382f6","#9078f8", "#79a7db", "#FF9800", "#9C27B0"],
111
+      modelPieColor1: ["#4382f6","#9078f8", "#6aa1e1", "#FF9800", "#9C27B0"],
112
+      modelData: {
113
+        list: [],
114
+        list1: []
115
+      },
116
+      bardata: [],
117
+      linedata: []
118
+    }
119
+  },
120
+  mounted() {
121
+    this.businessAnalysisStat()
122
+    this.businessAnalysisStat2()
123
+    this.businessAnalysisStat3()
124
+  },
125
+  watch: {
126
+
127
+  },
128
+  methods: {
129
+    tooltipFormat(params) {
130
+      const type = params[0].seriesType;
131
+      const data = params[0].data;
132
+      return `<div class="line-tooltip">
133
+<div>${params[0].seriesName}: ${
134
+        params[0].data.hs || "--"}元</div>
135
+<div>${params[1].seriesName}: ${
136
+        params[0].data.cs || "--"}元</div>
137
+</div>`;
138
+    },
139
+    lineTooltipFormat(params) {
140
+      return `<div class="line-tooltip">
141
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
142
+        params[0].data.lastAmount  || "--"
143
+      }元</div>`;
144
+    },
145
+    businessAnalysisStat(){
146
+      api.businessAnalysisStat().then(res =>{
147
+        this.bardata = res.data
148
+      })
149
+    },
150
+    businessAnalysisStat2(){
151
+      api.businessAnalysisStat2().then(res =>{
152
+        this.modelData.list = res.data
153
+      })
154
+    },
155
+    businessAnalysisStat3(){
156
+      api.businessAnalysisStat3().then(res =>{
157
+        this.modelData.list1 = res.data
158
+      })
159
+    },
160
+    xLabelFormat(name) {
161
+      const nameArr = []
162
+      for(let i=0; i<name.length; i+=7) {
163
+        nameArr.push(name.substring(i, i+7))
164
+      }
165
+      return nameArr.join('\n');
166
+    }
167
+  }
168
+}
169
+</script>
170
+<style  lang="scss" scoped>
171
+.body-wrapper {
172
+  width: 100%;
173
+  height: 100%;
174
+  box-sizing: border-box;
175
+  background: #0c0c0c;
176
+
177
+}
178
+.model-pie-body {
179
+  width: 100%;
180
+  height: 99%;
181
+}
182
+</style>

+ 110 - 0
src/pages/index/components/arrears_trend.vue

@@ -0,0 +1,110 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">欠费历史分析</h2>
4
+    <br>
5
+
6
+      <div style="width: 100%; height: 600px">
7
+        <linechart
8
+          :autoStop="false"
9
+          :top="30"
10
+          :bottom="30"
11
+          :left="40"
12
+          :legendTop="0"
13
+          yAxisName="(元)"
14
+          :dataset="linedata"
15
+          :tooltipFormat="lineTooltipFormat"
16
+          :encode="[
17
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
18
+            ]"
19
+          id="axstj"
20
+        />
21
+      </div>
22
+  </div>
23
+</template>
24
+<script>
25
+import piechart from "@/components/pieChart";
26
+import linechart from "@/components/lineChart";
27
+import barchart from "@/components/barChart";
28
+import api from "@/api/article_liao";
29
+
30
+export default {
31
+  components: {
32
+    piechart,
33
+    barchart,
34
+    linechart
35
+  },
36
+  data() {
37
+    return {
38
+      modelPieColor: ["#4382f6","#9078f8", "#79a7db", "#FF9800", "#9C27B0"],
39
+      modelPieColor1: ["#4382f6","#9078f8", "#6aa1e1", "#FF9800", "#9C27B0"],
40
+      modelData: {
41
+        list: [],
42
+        list1: []
43
+      },
44
+      bardata: [],
45
+      linedata: []
46
+    }
47
+  },
48
+  mounted() {
49
+    this.businessAnalysisStat()
50
+    this.businessAnalysisStat2()
51
+    this.businessAnalysisStat3()
52
+  },
53
+  watch: {
54
+
55
+  },
56
+  methods: {
57
+    tooltipFormat(params) {
58
+      const type = params[0].seriesType;
59
+      const data = params[0].data;
60
+      return `<div class="line-tooltip">
61
+<div>${params[0].seriesName}: ${
62
+        params[0].data.hs || "--"}元</div>
63
+<div>${params[1].seriesName}: ${
64
+        params[0].data.cs || "--"}元</div>
65
+</div>`;
66
+    },
67
+    lineTooltipFormat(params) {
68
+      return `<div class="line-tooltip">
69
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
70
+        params[0].data.lastAmount  || "--"
71
+      }元</div>`;
72
+    },
73
+    businessAnalysisStat(){
74
+      api.businessAnalysisStat().then(res =>{
75
+        this.bardata = res.data
76
+      })
77
+    },
78
+    businessAnalysisStat2(){
79
+      api.businessAnalysisStat2().then(res =>{
80
+        this.modelData.list = res.data
81
+      })
82
+    },
83
+    businessAnalysisStat3(){
84
+      api.businessAnalysisStat3().then(res =>{
85
+        this.modelData.list1 = res.data
86
+      })
87
+    },
88
+    xLabelFormat(name) {
89
+      const nameArr = []
90
+      for(let i=0; i<name.length; i+=7) {
91
+        nameArr.push(name.substring(i, i+7))
92
+      }
93
+      return nameArr.join('\n');
94
+    }
95
+  }
96
+}
97
+</script>
98
+<style  lang="scss" scoped>
99
+.body-wrapper {
100
+  width: 100%;
101
+  height: 100%;
102
+  box-sizing: border-box;
103
+  background: #0c0c0c;
104
+
105
+}
106
+.model-pie-body {
107
+  width: 100%;
108
+  height: 99%;
109
+}
110
+</style>

+ 140 - 0
src/pages/index/components/city_arrears.vue

@@ -0,0 +1,140 @@
1
+<template>
2
+  <div class="body-wrapper">
3
+    <h2 style="color: #3498db;">欠费历史分析</h2>
4
+    <br>
5
+    <el-form class="form-wrapper" :inline="true" :model="formInline">
6
+      <el-form-item label="">
7
+        <el-select clearable v-model="formInline.comType" placeholder="全部" popper-class="cur-select">
8
+          <el-option label="全部" value=""></el-option>
9
+          <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>
10
+          <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>
11
+          <el-option label="不提供税票" value="不提供税票"></el-option>
12
+          <el-option label="设备问题" value="设备问题"></el-option>
13
+        </el-select>
14
+      </el-form-item>
15
+      <el-form-item>
16
+        <el-button type="primary" @click="onSubmit">查询</el-button>
17
+      </el-form-item>
18
+    </el-form>
19
+    <br>
20
+    <br>
21
+      <div style="width: 100%; height: 600px">
22
+        <linechart
23
+          :autoStop="false"
24
+          :top="30"
25
+          :bottom="30"
26
+          :left="40"
27
+          :legendTop="0"
28
+          yAxisName="(元)"
29
+          :dataset="linedata"
30
+          :tooltipFormat="lineTooltipFormat"
31
+          :encode="[
32
+              { x: 'mouth', y: 'lastAmount', seriesName: '',bool:'true' },
33
+            ]"
34
+          id="axstj"
35
+        />
36
+      </div>
37
+  </div>
38
+</template>
39
+<script>
40
+import piechart from "@/components/pieChart";
41
+import linechart from "@/components/lineChart";
42
+import barchart from "@/components/barChart";
43
+import api from "@/api/article_liao";
44
+
45
+export default {
46
+  components: {
47
+    piechart,
48
+    barchart,
49
+    linechart
50
+  },
51
+  data() {
52
+    return {
53
+      formInline: {
54
+        comType: ''
55
+      },
56
+      modelPieColor: ["#4382f6","#9078f8", "#79a7db", "#FF9800", "#9C27B0"],
57
+      modelPieColor1: ["#4382f6","#9078f8", "#6aa1e1", "#FF9800", "#9C27B0"],
58
+      modelData: {
59
+        list: [],
60
+        list1: []
61
+      },
62
+      bardata: [],
63
+      linedata: []
64
+    }
65
+  },
66
+  mounted() {
67
+    this.businessAnalysisStat()
68
+    this.businessAnalysisStat2()
69
+    this.businessAnalysisStat3()
70
+  },
71
+  watch: {
72
+
73
+  },
74
+  methods: {
75
+    tooltipFormat(params) {
76
+      const type = params[0].seriesType;
77
+      const data = params[0].data;
78
+      return `<div class="line-tooltip">
79
+<div>${params[0].seriesName}: ${
80
+        params[0].data.hs || "--"}元</div>
81
+<div>${params[1].seriesName}: ${
82
+        params[0].data.cs || "--"}元</div>
83
+</div>`;
84
+    },
85
+    lineTooltipFormat(params) {
86
+      return `<div class="line-tooltip">
87
+        <div style="color: ${params[0].color}">${params[0].data.mouth} : ${
88
+        params[0].data.lastAmount  || "--"
89
+      }元</div>`;
90
+    },
91
+    onSubmit() {
92
+      this.pageNum = 1
93
+      this.getTableData()
94
+    },
95
+    businessAnalysisStat(){
96
+      api.businessAnalysisStat().then(res =>{
97
+        this.bardata = res.data
98
+      })
99
+    },
100
+    businessAnalysisStat2(){
101
+      api.businessAnalysisStat2().then(res =>{
102
+        this.modelData.list = res.data
103
+      })
104
+    },
105
+    businessAnalysisStat3(){
106
+      api.businessAnalysisStat3().then(res =>{
107
+        this.modelData.list1 = res.data
108
+      })
109
+    },
110
+    xLabelFormat(name) {
111
+      const nameArr = []
112
+      for(let i=0; i<name.length; i+=7) {
113
+        nameArr.push(name.substring(i, i+7))
114
+      }
115
+      return nameArr.join('\n');
116
+    }
117
+  }
118
+}
119
+</script>
120
+<style  lang="scss" scoped>
121
+.body-wrapper {
122
+  width: 100%;
123
+  height: 100%;
124
+  box-sizing: border-box;
125
+  background: #0c0c0c;
126
+
127
+}
128
+.model-pie-body {
129
+  width: 100%;
130
+  height: 99%;
131
+}
132
+/deep/ .el-select {
133
+  height: 40px;
134
+
135
+  .el-input__inner {
136
+    height: 40px;
137
+  }
138
+}
139
+
140
+</style>

+ 5 - 5
src/pages/index/components/customer_complaint.vue

@@ -16,7 +16,6 @@
16 16
       </el-form-item>
17 17
       <el-form-item>
18 18
         <el-button type="primary" @click="onSubmit">查询</el-button>
19
-        <el-button type="primary" @click="handleAdd">客诉登记</el-button>
20 19
       </el-form-item>
21 20
     </el-form>
22 21
     <br>
@@ -56,10 +55,11 @@
56 55
       <el-form  class="form-div"  style="height: 120px"   ref="formLabelAlign" label-position="left" label-width="120px" :model="formLabelAlign" >
57 56
         <el-form-item label="投诉类型" required>
58 57
           <el-select clearable v-model="formLabelAlign.comType" placeholder="请选择">
59
-            <el-option label="经营服务类停车问题" value="经营服务类停车问题"></el-option>
60
-            <el-option label="非法经营停车问题" value="非法经营停车问题"></el-option>
61
-            <el-option label="不提供税票" value="不提供税票"></el-option>
62
-            <el-option label="设备问题" value="设备问题"></el-option>
58
+            <el-option label="源汇区" value="源汇区"></el-option>
59
+            <el-option label="郾城区" value="郾城区"></el-option>
60
+            <el-option label="召陵区" value="召陵区"></el-option>
61
+            <el-option label="舞阳县" value="舞阳县"></el-option>
62
+            <el-option label="临颍县" value="临颍县"></el-option>
63 63
           </el-select>
64 64
         </el-form-item>
65 65
         <el-form-item label="投诉停车场" required>

+ 0 - 28
src/pages/index/components/temp_parking-statistics.vue

@@ -53,15 +53,9 @@ export default {
53 53
   data() {
54 54
     return {
55 55
       linedata: [],
56
-      linedata2: [],
57 56
       formInline1: {
58 57
         plateNo: ''
59 58
       },
60
-      tableData: [{"publicTitle":'预警提示',"publicTime":'2023-12-29 10:00:00',"publicPerson":'李玉'},
61
-        {"publicTitle":'停车时限',"publicTime":'2023-12-31 11:00:00',"publicPerson":'张玮'},
62
-        {"publicTitle":'设备故障',"publicTime":'2023-12-30 10:00:00',"publicPerson":'李玉'},],
63
-      tableData2:[{"noticeTitle":'预警提示',"createTime":'2023-12-29 10:00:00',"noticeTitle2":'李玉'}],
64
-      tableData3:[],
65 59
       modelData:[],
66 60
       modelPieColor: ["#4382f6","#9078f8"],
67 61
       total: 3,
@@ -104,28 +98,6 @@ export default {
104 98
       this.formLabelAlign.publicPerson = ''
105 99
       this.dialogVisible = true
106 100
     },
107
-    handleConfirm(formName) {
108
-      this.$refs[formName].validate((valid) => {
109
-        if (valid) {
110
-          if (this.title === '发布公告') {
111
-            api.announcementSave(this.formLabelAlign).then(res => {
112
-              if(res.code === 200) {
113
-                this.dialogVisible = false
114
-                this.$message({
115
-                  message: '发布成功!',
116
-                  type: 'success'
117
-                })
118
-                this.getTableData()
119
-              }
120
-            })
121
-          } else {
122
-            this.dialogVisible = false;
123
-          }
124
-        } else {
125
-          return false
126
-        }
127
-      })
128
-    },
129 101
     getTableData() {
130 102
       const {pageNum, pageSize, searchWords} = this
131 103
       api.announcementListByPage({current: pageNum, size: pageSize}).then(res => {

+ 3 - 0
src/pages/index/layouts/indexLayout.vue

@@ -101,6 +101,9 @@ export default {
101 101
         {name: '停车场泊位分析 ', url: '/parking_lot'},
102 102
         {name: '夜间停车统计 ', url: '/night_parking_statistics'},
103 103
         {name: '车辆类型 ', url: '/vehicle_type'},
104
+        {name: '欠费总分析 ', url: '/arrears_total'},
105
+        {name: '欠费历史分析 ', url: '/arrears_trend'},
106
+        {name: '城市欠费分析 ', url: '/city_arrears'},
104 107
       ]
105 108
     }
106 109
   },

+ 15 - 0
src/router/index.js

@@ -343,6 +343,21 @@ export default new Router({
343 343
           path: "/vehicle_type",
344 344
           component: () => import("../pages/index/components/vehicle_type.vue")
345 345
         },
346
+        {
347
+          name: "arrears_total",
348
+          path: "/arrears_total",
349
+          component: () => import("../pages/index/components/arrears_total.vue")
350
+        },
351
+        {
352
+          name: "arrears_trend",
353
+          path: "/arrears_trend",
354
+          component: () => import("../pages/index/components/arrears_trend.vue")
355
+        },
356
+        {
357
+          name: "city_arrears",
358
+          path: "/city_arrears",
359
+          component: () => import("../pages/index/components/city_arrears.vue")
360
+        },
346 361
       ]
347 362
     }
348 363
   ]