add: 增加转关运抵统计界面
change: echarts组件版本适配从5.0降级到4.9.0
正在显示
7 个修改的文件
包含
641 行增加
和
3 行删除
@@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
14 | "@xkeshi/vue-barcode": "^1.0.0", | 14 | "@xkeshi/vue-barcode": "^1.0.0", |
15 | "axios": "^0.19.0", | 15 | "axios": "^0.19.0", |
16 | "common": "^0.2.5", | 16 | "common": "^0.2.5", |
17 | - "echarts": "^5.0.1", | 17 | + "echarts": "^4.9.0", |
18 | "echarts-liquidfill": "^3.0.0", | 18 | "echarts-liquidfill": "^3.0.0", |
19 | "element-ui": "^2.13.2", | 19 | "element-ui": "^2.13.2", |
20 | "eslint": "^5.14.1", | 20 | "eslint": "^5.14.1", |
1 | import http from './http.js' | 1 | import http from './http.js' |
2 | -let baseUrl = 'wlpt-nmms-manage/trans' | 2 | +let baseUrl = 'wlpt-nmms-manage-trans-arrive/trans' |
3 | let baseUrl1 = 'cloud-user-center/perm' | 3 | let baseUrl1 = 'cloud-user-center/perm' |
4 | 4 | ||
5 | 5 | ||
@@ -14,6 +14,7 @@ export const addTrans = params => { return http.post(`${baseUrl}/addTrans`, par | @@ -14,6 +14,7 @@ export const addTrans = params => { return http.post(`${baseUrl}/addTrans`, par | ||
14 | export const ediTrans = params => { return http.post(`${baseUrl}/ediTrans`, params); }; | 14 | export const ediTrans = params => { return http.post(`${baseUrl}/ediTrans`, params); }; |
15 | export const send = params => { return http.post(`${baseUrl}/send`, params); }; | 15 | export const send = params => { return http.post(`${baseUrl}/send`, params); }; |
16 | export const role = params => { return http.get(`${baseUrl1}/getPermission`, params); }; | 16 | export const role = params => { return http.get(`${baseUrl1}/getPermission`, params); }; |
17 | +export const analysisAPI = params => { return http.post(`${baseUrl}/totalAnalysis`, params); }; | ||
17 | 18 | ||
18 | 19 | ||
19 | 20 |
@@ -68,7 +68,7 @@ import WaybillQuerys from './views/nmms_fast/WaybillQuerys.vue' | @@ -68,7 +68,7 @@ import WaybillQuerys from './views/nmms_fast/WaybillQuerys.vue' | ||
68 | 68 | ||
69 | 69 | ||
70 | 70 | ||
71 | -import echarts from './views/charts/echarts.vue' | 71 | +import echarts from './views/charts/dataEcharts.vue' |
72 | import earthCharts from './views/charts/earthCharts.vue' | 72 | import earthCharts from './views/charts/earthCharts.vue' |
73 | 73 | ||
74 | import SecrityInspection from './views/staff/security_inspection.vue' | 74 | import SecrityInspection from './views/staff/security_inspection.vue' |
@@ -103,6 +103,7 @@ import queryConfirmatory from './views/airtransport/queryConfirmatory.vue' | @@ -103,6 +103,7 @@ import queryConfirmatory from './views/airtransport/queryConfirmatory.vue' | ||
103 | import configure from './views/airtransport/configure.vue' | 103 | import configure from './views/airtransport/configure.vue' |
104 | import queryConfigure from './views/airtransport/queryConfigure.vue' | 104 | import queryConfigure from './views/airtransport/queryConfigure.vue' |
105 | import transit from './views/transit/transit.vue' | 105 | import transit from './views/transit/transit.vue' |
106 | +import transitCharts from './views/transit/transitCharts.vue' | ||
106 | import technological from './views/technological/technological.vue' | 107 | import technological from './views/technological/technological.vue' |
107 | import example from './views/technological/example.vue' | 108 | import example from './views/technological/example.vue' |
108 | import task from './views/technological/task.vue' | 109 | import task from './views/technological/task.vue' |
@@ -530,6 +531,7 @@ let routes = [ | @@ -530,6 +531,7 @@ let routes = [ | ||
530 | iconCls: 'el-icon-delete-location', | 531 | iconCls: 'el-icon-delete-location', |
531 | children: [ | 532 | children: [ |
532 | {path:'/transit',component:transit,name:'转关运抵申报'}, | 533 | {path:'/transit',component:transit,name:'转关运抵申报'}, |
534 | + {path:'/transitCharts',component:transitCharts,name:'转关运抵统计'} | ||
533 | ] | 535 | ] |
534 | }, | 536 | }, |
535 | { | 537 | { |
src/views/transit/dashboard/TodoList.vue
0 → 100644
1 | +<template> | ||
2 | + <section class="todoapp"> | ||
3 | + <!-- header --> | ||
4 | + <header class="header"> | ||
5 | + <input class="new-todo" autocomplete="off" placeholder="今日申报" @keyup.enter="addTodo"> | ||
6 | + </header> | ||
7 | + <!-- main section --> | ||
8 | + <section v-show="todos.length" class="main"> | ||
9 | + <input id="toggle-all" :checked="allChecked" class="toggle-all" type="checkbox" @change="toggleAll({ done: !allChecked })"> | ||
10 | + <label for="toggle-all" /> | ||
11 | + <ul class="todo-list"> | ||
12 | + <todo | ||
13 | + v-for="(todo, index) in filteredTodos" | ||
14 | + :key="index" | ||
15 | + :todo="todo" | ||
16 | + @toggleTodo="toggleTodo" | ||
17 | + @editTodo="editTodo" | ||
18 | + @deleteTodo="deleteTodo" | ||
19 | + /> | ||
20 | + </ul> | ||
21 | + </section> | ||
22 | + <!-- footer --> | ||
23 | + <footer v-show="todos.length" class="footer"> | ||
24 | + <span class="todo-count"> | ||
25 | + <strong>{{ remaining }}</strong> | ||
26 | + {{ remaining | pluralize('个转关运抵申请') }} 未申报 | ||
27 | + </span> | ||
28 | + <ul class="filters"> | ||
29 | + <li v-for="(val, key) in filters" :key="key"> | ||
30 | + <a :class="{ selected: visibility === key }" @click.prevent="visibility = key">{{ key | capitalize }}</a> | ||
31 | + </li> | ||
32 | + </ul> | ||
33 | + <!-- <button class="clear-completed" v-show="todos.length > remaining" @click="clearCompleted"> | ||
34 | + Clear completed | ||
35 | + </button> --> | ||
36 | + </footer> | ||
37 | + </section> | ||
38 | +</template> | ||
39 | + | ||
40 | +<script> | ||
41 | +import Todo from '@/views/dashboard/components/TodoList/Todo.vue' | ||
42 | +import {selectTrans} from "@/api/trn"; | ||
43 | + | ||
44 | +const STORAGE_KEY = 'todos' | ||
45 | +const filters = { | ||
46 | + all: todos => todos, | ||
47 | + active: todos => todos.filter(todo => !todo.done), | ||
48 | + completed: todos => todos.filter(todo => todo.done) | ||
49 | +} | ||
50 | +const defalutList = [ | ||
51 | + { text: '78406346432', done: false }, | ||
52 | + { text: '78406305165_JHJ42194', done: false }, | ||
53 | + { text: '78406347272', done: false }, | ||
54 | + { text: '78406346782_DIM896002168', done: true }, | ||
55 | + { text: 'vue', done: true }, | ||
56 | + { text: 'element-ui', done: true }, | ||
57 | + { text: 'axios', done: true }, | ||
58 | + { text: 'webpack', done: true } | ||
59 | +] | ||
60 | +export default { | ||
61 | + components: { Todo }, | ||
62 | + filters: { | ||
63 | + pluralize: (n, w) => n === 1 ? w : w + ' ', | ||
64 | + capitalize: s => s.charAt(0).toUpperCase() + s.slice(1) | ||
65 | + }, | ||
66 | + data() { | ||
67 | + return { | ||
68 | + visibility: 'all', | ||
69 | + filters, | ||
70 | + // todos: JSON.parse(window.localStorage.getItem(STORAGE_KEY)) || defalutList | ||
71 | + todos: [] | ||
72 | + } | ||
73 | + }, | ||
74 | + computed: { | ||
75 | + allChecked() { | ||
76 | + return this.todos.every(todo => todo.done) | ||
77 | + }, | ||
78 | + filteredTodos() { | ||
79 | + return filters[this.visibility](this.todos) | ||
80 | + }, | ||
81 | + remaining() { | ||
82 | + return this.todos.filter(todo => !todo.done).length | ||
83 | + } | ||
84 | + }, | ||
85 | + mounted:function () { | ||
86 | + this.trnList(); | ||
87 | + }, | ||
88 | + methods: { | ||
89 | + setLocalStorage() { | ||
90 | + window.localStorage.setItem(STORAGE_KEY, JSON.stringify(this.todos)) | ||
91 | + }, | ||
92 | + addTodo(e) { | ||
93 | + const text = e.target.value | ||
94 | + if (text.trim()) { | ||
95 | + this.todos.push({ | ||
96 | + text, | ||
97 | + done: false | ||
98 | + }) | ||
99 | + this.setLocalStorage() | ||
100 | + } | ||
101 | + e.target.value = '' | ||
102 | + }, | ||
103 | + toggleTodo(val) { | ||
104 | + val.done = !val.done | ||
105 | + this.setLocalStorage() | ||
106 | + }, | ||
107 | + deleteTodo(todo) { | ||
108 | + this.todos.splice(this.todos.indexOf(todo), 1) | ||
109 | + this.setLocalStorage() | ||
110 | + }, | ||
111 | + editTodo({ todo, value }) { | ||
112 | + todo.text = value | ||
113 | + this.setLocalStorage() | ||
114 | + }, | ||
115 | + clearCompleted() { | ||
116 | + this.todos = this.todos.filter(todo => !todo.done) | ||
117 | + this.setLocalStorage() | ||
118 | + }, | ||
119 | + toggleAll({ done }) { | ||
120 | + this.todos.forEach(todo => { | ||
121 | + todo.done = done | ||
122 | + this.setLocalStorage() | ||
123 | + }) | ||
124 | + }, | ||
125 | + // 获取消息标签列表 | ||
126 | + trnList() { | ||
127 | + const loading = this.$loading({ | ||
128 | + lock: true, | ||
129 | + text: 'Loading', | ||
130 | + spinner: 'el-icon-loading', | ||
131 | + background: 'rgba(0, 0, 0, 0.7)' | ||
132 | + }); | ||
133 | + const _this = this | ||
134 | + let para = { | ||
135 | + billno: '', | ||
136 | + customscode:'', | ||
137 | + username:'', | ||
138 | + trnmode:'', | ||
139 | + unloadcode:'', | ||
140 | + creattime:'', | ||
141 | + startDate:'', | ||
142 | + endDate:'', | ||
143 | + pageNum: 1, | ||
144 | + pageSize: 10 | ||
145 | + } | ||
146 | + selectTrans(para).then((response) => { | ||
147 | + const res = response.data | ||
148 | + if (res.code !== '200') { | ||
149 | + return _this.$message.error('获取消息收发记录,失败!') | ||
150 | + } | ||
151 | + // // 获取列表数据 | ||
152 | + let tableData = res.data.list | ||
153 | + if (tableData){ | ||
154 | + for (let item of tableData) { | ||
155 | + let todoListItem = {text: item.billno, done: false} | ||
156 | + if (item.dstatus === '001') { | ||
157 | + todoListItem.done = true; | ||
158 | + }else{ | ||
159 | + todoListItem.done = false; | ||
160 | + } | ||
161 | + _this.todos.push(todoListItem) | ||
162 | + } | ||
163 | + } | ||
164 | + // // 获取列表的总记录数 | ||
165 | + // _this.total = res.data.total | ||
166 | + _this.$message.success('获取消息收发记录,成功!') | ||
167 | + }).catch(error => { | ||
168 | + // 关闭加载 | ||
169 | + _this.$message.error(error.toString()) | ||
170 | + }).finally(()=>{ | ||
171 | + loading.close(); | ||
172 | + }) | ||
173 | + }, | ||
174 | + } | ||
175 | +} | ||
176 | +</script> | ||
177 | + | ||
178 | +<style lang="scss"> | ||
179 | + @import '~@/views/dashboard/components/TodoList/index.scss'; | ||
180 | +</style> |
1 | +<template> | ||
2 | + <div :class="className" :style="{height:height,width:width}" /> | ||
3 | +</template> | ||
4 | + | ||
5 | +<script> | ||
6 | +import echarts from 'echarts' | ||
7 | +require('echarts/theme/macarons') // echarts theme | ||
8 | +import resize from '@/views/dashboard/components/mixins/resize' | ||
9 | + | ||
10 | +export default { | ||
11 | + mixins: [resize], | ||
12 | + props: { | ||
13 | + className: { | ||
14 | + type: String, | ||
15 | + default: 'chart' | ||
16 | + }, | ||
17 | + width: { | ||
18 | + type: String, | ||
19 | + default: '100%' | ||
20 | + }, | ||
21 | + height: { | ||
22 | + type: String, | ||
23 | + default: '350px' | ||
24 | + }, | ||
25 | + autoResize: { | ||
26 | + type: Boolean, | ||
27 | + default: true | ||
28 | + }, | ||
29 | + chartData: { | ||
30 | + type: Object, | ||
31 | + required: true | ||
32 | + } | ||
33 | + }, | ||
34 | + data() { | ||
35 | + return { | ||
36 | + chart: null | ||
37 | + } | ||
38 | + }, | ||
39 | + watch: { | ||
40 | + chartData: { | ||
41 | + deep: true, | ||
42 | + handler(val) { | ||
43 | + this.setOptions(val) | ||
44 | + } | ||
45 | + } | ||
46 | + }, | ||
47 | + mounted() { | ||
48 | + this.$nextTick(() => { | ||
49 | + this.initChart() | ||
50 | + }) | ||
51 | + }, | ||
52 | + beforeDestroy() { | ||
53 | + if (!this.chart) { | ||
54 | + return | ||
55 | + } | ||
56 | + this.chart.dispose() | ||
57 | + this.chart = null | ||
58 | + }, | ||
59 | + methods: { | ||
60 | + initChart() { | ||
61 | + this.chart = echarts.init(this.$el, 'macarons') | ||
62 | + this.setOptions(this.chartData) | ||
63 | + }, | ||
64 | + setOptions({ lastWeek, thisWeek, lastYear,thisYear} = {}) { | ||
65 | + this.chart.setOption({ | ||
66 | + xAxis: { | ||
67 | + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], | ||
68 | + boundaryGap: true, | ||
69 | + type: 'category', | ||
70 | + axisTick: { | ||
71 | + show: true | ||
72 | + } | ||
73 | + }, | ||
74 | + grid: { | ||
75 | + left: 10, | ||
76 | + right: 10, | ||
77 | + bottom: 20, | ||
78 | + top: 30, | ||
79 | + containLabel: true | ||
80 | + }, | ||
81 | + tooltip: { | ||
82 | + trigger: 'axis', | ||
83 | + axisPointer: { | ||
84 | + type: 'cross' | ||
85 | + }, | ||
86 | + padding: [5, 10] | ||
87 | + }, | ||
88 | + yAxis: { | ||
89 | + type: 'value', | ||
90 | + axisTick: { | ||
91 | + show: false | ||
92 | + } | ||
93 | + }, | ||
94 | + legend: { | ||
95 | + data: ['本周总申报单量', '上周总申报单量','本周总申报货量','上周总申报货量'] | ||
96 | + }, | ||
97 | + series: [{ | ||
98 | + name: '本周总申报单量', itemStyle: { | ||
99 | + normal: { | ||
100 | + color: '#FF005A', | ||
101 | + lineStyle: { | ||
102 | + color: '#FF005A', | ||
103 | + width: 2 | ||
104 | + } | ||
105 | + } | ||
106 | + }, | ||
107 | + smooth: true, | ||
108 | + type: 'line', | ||
109 | + data: thisWeek.totalCount, | ||
110 | + animationDuration: 2800, | ||
111 | + animationEasing: 'cubicInOut' | ||
112 | + }, | ||
113 | + { | ||
114 | + name: '上周总申报单量', | ||
115 | + smooth: true, | ||
116 | + type: 'line', | ||
117 | + data: lastWeek.totalCount, | ||
118 | + animationDuration: 2800, | ||
119 | + animationEasing: 'cubicInOut' | ||
120 | + }, | ||
121 | + { | ||
122 | + name: '本周总申报货量', | ||
123 | + smooth: true, | ||
124 | + type: 'bar', | ||
125 | + itemStyle: { | ||
126 | + normal: { | ||
127 | + color: '#3888fa', | ||
128 | + lineStyle: { | ||
129 | + color: '#3888fa', | ||
130 | + width: 2 | ||
131 | + }, | ||
132 | + areaStyle: { | ||
133 | + color: '#f3f8ff' | ||
134 | + } | ||
135 | + } | ||
136 | + }, | ||
137 | + data: thisWeek.totalWeight, | ||
138 | + animationDuration: 2800, | ||
139 | + animationEasing: 'quadraticOut' | ||
140 | + }, | ||
141 | + { | ||
142 | + name: '上周总申报货量', | ||
143 | + smooth: true, | ||
144 | + type: 'bar', | ||
145 | + stack: 'Ad', | ||
146 | + emphasis: { | ||
147 | + focus: 'series' | ||
148 | + }, | ||
149 | + data: lastWeek.totalWeight, | ||
150 | + animationDuration: 2800, | ||
151 | + animationEasing: 'quadraticOut' | ||
152 | + }, | ||
153 | + ] | ||
154 | + }) | ||
155 | + } | ||
156 | + } | ||
157 | +} | ||
158 | +</script> |
1 | +<template> | ||
2 | + <div :class="className" :style="{height:height,width:width}" /> | ||
3 | +</template> | ||
4 | + | ||
5 | +<script> | ||
6 | +import echarts from 'echarts' | ||
7 | +require('echarts/theme/macarons') // echarts theme | ||
8 | +import resize from '@/views/dashboard/components/mixins/resize' | ||
9 | + | ||
10 | +export default { | ||
11 | + mixins: [resize], | ||
12 | + props: { | ||
13 | + className: { | ||
14 | + type: String, | ||
15 | + default: 'chart' | ||
16 | + }, | ||
17 | + width: { | ||
18 | + type: String, | ||
19 | + default: '100%' | ||
20 | + }, | ||
21 | + height: { | ||
22 | + type: String, | ||
23 | + default: '350px' | ||
24 | + }, | ||
25 | + autoResize: { | ||
26 | + type: Boolean, | ||
27 | + default: true | ||
28 | + }, | ||
29 | + chartData: { | ||
30 | + type: Object, | ||
31 | + required: true | ||
32 | + } | ||
33 | + }, | ||
34 | + data() { | ||
35 | + return { | ||
36 | + chart: null | ||
37 | + } | ||
38 | + }, | ||
39 | + watch: { | ||
40 | + chartData: { | ||
41 | + deep: true, | ||
42 | + handler(val) { | ||
43 | + this.setOptions(val) | ||
44 | + } | ||
45 | + } | ||
46 | + }, | ||
47 | + mounted() { | ||
48 | + this.$nextTick(() => { | ||
49 | + this.initChart() | ||
50 | + }) | ||
51 | + }, | ||
52 | + beforeDestroy() { | ||
53 | + if (!this.chart) { | ||
54 | + return | ||
55 | + } | ||
56 | + this.chart.dispose() | ||
57 | + this.chart = null | ||
58 | + }, | ||
59 | + methods: { | ||
60 | + initChart() { | ||
61 | + this.chart = echarts.init(this.$el, 'macarons') | ||
62 | + this.setOptions(this.chartData) | ||
63 | + }, | ||
64 | + setOptions({ lastWeek, thisWeek, lastYear,thisYear} = {}) { | ||
65 | + this.chart.setOption({ | ||
66 | + xAxis: { | ||
67 | + data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月','八月','九月','十月','十一月','十二月'], | ||
68 | + boundaryGap: true, | ||
69 | + type: 'category', | ||
70 | + axisTick: { | ||
71 | + show: true | ||
72 | + } | ||
73 | + }, | ||
74 | + grid: { | ||
75 | + left: 10, | ||
76 | + right: 10, | ||
77 | + bottom: 20, | ||
78 | + top: 30, | ||
79 | + containLabel: true | ||
80 | + }, | ||
81 | + tooltip: { | ||
82 | + trigger: 'axis', | ||
83 | + axisPointer: { | ||
84 | + type: 'cross' | ||
85 | + }, | ||
86 | + padding: [5, 10] | ||
87 | + }, | ||
88 | + yAxis: { | ||
89 | + type: 'value', | ||
90 | + axisTick: { | ||
91 | + show: false | ||
92 | + } | ||
93 | + }, | ||
94 | + legend: { | ||
95 | + data: ['本年总申报单量', '去年总申报单量','本年总申报货量','去年总申报货量'] | ||
96 | + }, | ||
97 | + series: [{ | ||
98 | + name: '本年总申报单量', itemStyle: { | ||
99 | + normal: { | ||
100 | + color: '#FF005A', | ||
101 | + lineStyle: { | ||
102 | + color: '#FF005A', | ||
103 | + width: 2 | ||
104 | + } | ||
105 | + } | ||
106 | + }, | ||
107 | + smooth: true, | ||
108 | + type: 'line', | ||
109 | + data: thisYear.totalCount, | ||
110 | + animationDuration: 2800, | ||
111 | + animationEasing: 'cubicInOut' | ||
112 | + }, | ||
113 | + { | ||
114 | + name: '去年总申报单量', | ||
115 | + smooth: true, | ||
116 | + type: 'line', | ||
117 | + data: lastYear.totalCount, | ||
118 | + animationDuration: 2800, | ||
119 | + animationEasing: 'cubicInOut' | ||
120 | + }, | ||
121 | + { | ||
122 | + name: '本年总申报货量', | ||
123 | + smooth: true, | ||
124 | + type: 'bar', | ||
125 | + itemStyle: { | ||
126 | + normal: { | ||
127 | + color: '#3888fa', | ||
128 | + lineStyle: { | ||
129 | + color: '#3888fa', | ||
130 | + width: 2 | ||
131 | + }, | ||
132 | + areaStyle: { | ||
133 | + color: '#f3f8ff' | ||
134 | + } | ||
135 | + } | ||
136 | + }, | ||
137 | + data: thisYear.totalWeight, | ||
138 | + animationDuration: 2800, | ||
139 | + animationEasing: 'quadraticOut' | ||
140 | + }, | ||
141 | + { | ||
142 | + name: '去年总申报货量', | ||
143 | + smooth: true, | ||
144 | + type: 'bar', | ||
145 | + stack: 'Ad', | ||
146 | + emphasis: { | ||
147 | + focus: 'series' | ||
148 | + }, | ||
149 | + data: lastYear.totalWeight, | ||
150 | + animationDuration: 2800, | ||
151 | + animationEasing: 'quadraticOut' | ||
152 | + }, | ||
153 | + ] | ||
154 | + }) | ||
155 | + } | ||
156 | + } | ||
157 | +} | ||
158 | +</script> |
src/views/transit/transitCharts.vue
0 → 100644
1 | +<template> | ||
2 | + <div class="dashboard-editor-container"> | ||
3 | + <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;"> | ||
4 | + <line-chart :chart-data="lineChartData" /> | ||
5 | + </el-row> | ||
6 | + <el-row :gutter="8"> | ||
7 | + <el-col :xs="{span: 6}" :sm="{span: 6}" :md="{span: 6}" :lg="{span: 6}" :xl="{span: 6}" style="margin-bottom:30px;"> | ||
8 | + <todo-list /> | ||
9 | + </el-col> | ||
10 | + <el-col :xs="{span: 18}" :sm="{span: 18}" :md="{span: 18}" :lg="{span: 18}" :xl="{span: 18}" style="margin-bottom:30px;background:#fff"> | ||
11 | + <week-line-chart :chart-data="lineChartData" /> | ||
12 | + </el-col> | ||
13 | + </el-row> | ||
14 | + </div> | ||
15 | +</template> | ||
16 | + | ||
17 | +<script> | ||
18 | + import LineChart from './dashboard/YearLineChart' | ||
19 | + import WeekLineChart from './dashboard/WeekLineChart' | ||
20 | + import TodoList from './dashboard/TodoList' | ||
21 | + import {analysisAPI} from "@/api/trn"; | ||
22 | + | ||
23 | + export default { | ||
24 | + name: 'transDashboard', | ||
25 | + components: { | ||
26 | + LineChart, | ||
27 | + TodoList, | ||
28 | + WeekLineChart | ||
29 | + }, | ||
30 | + data() { | ||
31 | + return { | ||
32 | + lineChartData: { | ||
33 | + lastWeek:{totalCount:[],totalWeight:[]}, | ||
34 | + thisWeek:{totalCount:[],totalWeight:[]}, | ||
35 | + lastYear:{totalCount:[],totalWeight:[]}, | ||
36 | + thisYear:{totalCount:[],totalWeight:[]} | ||
37 | + } | ||
38 | + } | ||
39 | + }, | ||
40 | + methods: { | ||
41 | + getAnalysis:function () { | ||
42 | + const loading = this.$loading({ | ||
43 | + lock: true, | ||
44 | + text: '正在加载统计数据', | ||
45 | + spinner: 'el-icon-loading', | ||
46 | + background: 'rgba(0, 0, 0, 0.6)' | ||
47 | + }); | ||
48 | + analysisAPI().then(res =>{ | ||
49 | + const result = res.data; | ||
50 | + if (result.code === '200') { | ||
51 | + this.lineChartData = this.formatAnalysisData(result) | ||
52 | + this.$message.success('获取数据成功') | ||
53 | + } else { | ||
54 | + this.$message.error('获取数据成功失败,请稍后重试') | ||
55 | + } | ||
56 | + }).catch(err => { | ||
57 | + this.$message.error(err.toString()) | ||
58 | + }).finally(()=>{ | ||
59 | + loading.close() | ||
60 | + }) | ||
61 | + }, | ||
62 | + formatAnalysisData:function transformData(originalData) { | ||
63 | + const analysisData = { | ||
64 | + thisWeek: { totalWeight: [], totalCount: [] }, | ||
65 | + lastWeek: { totalWeight: [], totalCount: [] }, | ||
66 | + lastYear: { totalWeight: [], totalCount: [] }, | ||
67 | + thisYear: { totalWeight: [], totalCount: [] }, | ||
68 | + }; | ||
69 | + | ||
70 | + originalData.data.forEach(item => { | ||
71 | + switch (item.type) { | ||
72 | + case 'thisWeek': | ||
73 | + analysisData.thisWeek.totalWeight.push(item.totalWeight); | ||
74 | + analysisData.thisWeek.totalCount.push(item.totalCount); | ||
75 | + break; | ||
76 | + case 'lastWeek': | ||
77 | + analysisData.lastWeek.totalWeight.push(item.totalWeight); | ||
78 | + analysisData.lastWeek.totalCount.push(item.totalCount); | ||
79 | + break; | ||
80 | + case 'lastYear': | ||
81 | + analysisData.lastYear.totalWeight.push(item.totalWeight); | ||
82 | + analysisData.lastYear.totalCount.push(item.totalCount); | ||
83 | + break; | ||
84 | + case 'thisYear': | ||
85 | + analysisData.thisYear.totalWeight.push(item.totalWeight); | ||
86 | + analysisData.thisYear.totalCount.push(item.totalCount); | ||
87 | + break; | ||
88 | + default: | ||
89 | + console.warn(`Unknown type encountered: ${item.type}`); | ||
90 | + } | ||
91 | + }); | ||
92 | + | ||
93 | + // Ensure that each array in 'lastYear' and 'thisYear' has 12 elements for consistency. | ||
94 | + // Fill missing months with zeros if necessary. | ||
95 | + // const months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']; | ||
96 | + // months.forEach(month => { | ||
97 | + // if (!analysisData.lastYear[month]) { | ||
98 | + // analysisData.lastYear[month] = { totalWeight: Array(12).fill(0), totalCount: Array(12).fill(0) }; | ||
99 | + // } | ||
100 | + // if (!analysisData.thisYear[month]) { | ||
101 | + // analysisData.thisYear[month] = { totalWeight: Array(12).fill(0), totalCount: Array(12).fill(0) }; | ||
102 | + // } | ||
103 | + // }); | ||
104 | + console.log(JSON.stringify(analysisData)) | ||
105 | + return analysisData; | ||
106 | + } | ||
107 | + }, | ||
108 | + mounted:function () { | ||
109 | + this.getAnalysis(); | ||
110 | + } | ||
111 | + } | ||
112 | +</script> | ||
113 | + | ||
114 | +<style lang="scss" scoped> | ||
115 | + .dashboard-editor-container { | ||
116 | + padding: 32px; | ||
117 | + background-color: rgb(240, 242, 245); | ||
118 | + position: relative; | ||
119 | + | ||
120 | + .github-corner { | ||
121 | + position: absolute; | ||
122 | + top: 0px; | ||
123 | + border: 0; | ||
124 | + right: 0; | ||
125 | + } | ||
126 | + | ||
127 | + .chart-wrapper { | ||
128 | + background: #fff; | ||
129 | + padding: 16px 16px 0; | ||
130 | + margin-bottom: 32px; | ||
131 | + } | ||
132 | + } | ||
133 | + | ||
134 | + @media (max-width:1024px) { | ||
135 | + .chart-wrapper { | ||
136 | + padding: 6px; | ||
137 | + } | ||
138 | + } | ||
139 | +</style> |
-
请 注册 或 登录 后发表评论