退件统计
Showing
4 changed files
with
180 additions
and
75 deletions
src/api/tjfx.js
0 → 100644
| 1 | /* | ||
| 2 | * @Description: 信息备案 | ||
| 3 | * @Autor: | ||
| 4 | * @LastEditTime: 2023-09-11 11:25:22 | ||
| 5 | */ | ||
| 6 | |||
| 7 | import request from '@/utils/request' | ||
| 8 | let SERVER = window.config ? window.config : JSON.parse(localStorage.getItem('ApiUrl')) | ||
| 9 | |||
| 10 | /** | ||
| 11 | * @description: cstj | ||
| 12 | * @author: | ||
| 13 | * @param params | ||
| 14 | */ | ||
| 15 | export function cstj (params) { | ||
| 16 | return request({ | ||
| 17 | url: SERVER.SERVERAPI + '/rest/tjfx/xn/cstj?startAt='+params.startAt + '&endAt=' + params.endAt, | ||
| 18 | method: 'post' | ||
| 19 | }) | ||
| 20 | } | ||
| 21 | |||
| 22 | /** | ||
| 23 | * @description: exportCstj | ||
| 24 | * @author: | ||
| 25 | * @param params | ||
| 26 | */ | ||
| 27 | export function exportCstj (params) { | ||
| 28 | return request({ | ||
| 29 | url: SERVER.SERVERAPI + '/rest/tjfx/xn/exportCstj?startAt='+params.startAt + '&endAt=' + params.endAt, | ||
| 30 | method: 'post', | ||
| 31 | responseType: 'blob' | ||
| 32 | }) | ||
| 33 | } | ||
| 34 | |||
| 35 | /** | ||
| 36 | * @description: tjtj | ||
| 37 | * @author: | ||
| 38 | * @param data | ||
| 39 | */ | ||
| 40 | export function tjtj (data) { | ||
| 41 | return request({ | ||
| 42 | url: SERVER.SERVERAPI + '/rest/tjfx/xn/tjtj', | ||
| 43 | method: 'post', | ||
| 44 | data | ||
| 45 | }) | ||
| 46 | } | ||
| 47 | |||
| 48 | /** | ||
| 49 | * @description: exportTjtj | ||
| 50 | * @author: | ||
| 51 | * @param data | ||
| 52 | */ | ||
| 53 | export function exportTjtj (data) { | ||
| 54 | return request({ | ||
| 55 | url: SERVER.SERVERAPI + '/rest/tjfx/xn/exportTjtj', | ||
| 56 | method: 'post', | ||
| 57 | data, | ||
| 58 | responseType: 'blob' | ||
| 59 | }) | ||
| 60 | } | 
| ... | @@ -50,6 +50,7 @@ | ... | @@ -50,6 +50,7 @@ | 
| 50 | </template> | 50 | </template> | 
| 51 | <script> | 51 | <script> | 
| 52 | import * as echarts from "echarts"; | 52 | import * as echarts from "echarts"; | 
| 53 | import {cstj, exportCstj} from "@/api/tjfx.js"; | ||
| 53 | import XLSX from "xlsx"; | 54 | import XLSX from "xlsx"; | 
| 54 | export default { | 55 | export default { | 
| 55 | components: {}, | 56 | components: {}, | 
| ... | @@ -69,50 +70,62 @@ export default { | ... | @@ -69,50 +70,62 @@ export default { | 
| 69 | chooseIndex: 0, // 日期快捷选择项索引 | 70 | chooseIndex: 0, // 日期快捷选择项索引 | 
| 70 | dateRange: [], // 自定义列表 - 日期范围 | 71 | dateRange: [], // 自定义列表 - 日期范围 | 
| 71 | queryForm: {}, | 72 | queryForm: {}, | 
| 72 | data1: [12, 10, 15, 12, 15, 19, 15], | 73 | data1: [], | 
| 73 | data2: [1, 2, 2, 3, 2, 3, 2], | 74 | data2: [], | 
| 74 | data3: [], | 75 | data3: [], | 
| 76 | selectDate : { | ||
| 77 | startAt:'2020-01-03 02:57:57', | ||
| 78 | endAt:'2025-01-03 02:57:57' | ||
| 79 | }, | ||
| 75 | xAxisData: [ | 80 | xAxisData: [ | 
| 76 | "赵龙龙", | 81 | |
| 77 | "刘刚", | ||
| 78 | "任启亮", | ||
| 79 | "梁亚博", | ||
| 80 | "李含", | ||
| 81 | "周路", | ||
| 82 | ], | 82 | ], | 
| 83 | }; | 83 | }; | 
| 84 | }, | 84 | }, | 
| 85 | mounted() { | 85 | mounted() { | 
| 86 | this.setdata(); | 86 | this.setdata(); | 
| 87 | // 创建一个 ECharts 实例 | 87 | |
| 88 | this.chart = echarts.init(this.$refs.chart); | ||
| 89 | // 在 ECharts 实例中配置图表 | ||
| 90 | this.chart.setOption(this.getOption()); | ||
| 91 | this.chooseDateQuick(0); | ||
| 92 | }, | 88 | }, | 
| 93 | methods: { | 89 | methods: { | 
| 90 | |||
| 91 | cstj () { | ||
| 92 | cstj(this.selectDate).then(res => { | ||
| 93 | if (res.code == 200) { | ||
| 94 | let dataSource = res.result; | ||
| 95 | if (dataSource != null) { | ||
| 96 | this.xAxisData = dataSource.map(item => item.assignee) | ||
| 97 | this.data1 = dataSource.map(item => item.total) | ||
| 98 | this.data2 = dataSource.map(item => item.count) | ||
| 99 | this.data3 = dataSource.map(item => item.cumulativeTimeout) | ||
| 100 | } | ||
| 101 | console.log(this.xAxisData) | ||
| 102 | console.log(this.data1) | ||
| 103 | console.log(this.data2) | ||
| 104 | console.log(this.data3) | ||
| 105 | // 创建一个 ECharts 实例 | ||
| 106 | this.chart = echarts.init(this.$refs.chart); | ||
| 107 | // 在 ECharts 实例中配置图表 | ||
| 108 | this.chart.setOption(this.getOption()); | ||
| 109 | } | ||
| 110 | }) | ||
| 111 | }, | ||
| 112 | |||
| 94 | setdata() { | 113 | setdata() { | 
| 95 | for (let i = 0; i < this.data1.length; i++) { | 114 | this.chooseDateQuick(7) | 
| 96 | let sum = (this.data2[i] / this.data1[i]) * 100; | 115 | this.cstj() | 
| 97 | this.data3.push(Number(sum).toFixed(0)); | ||
| 98 | } | ||
| 99 | }, | 116 | }, | 
| 100 | // 导出 | 117 | // 导出 | 
| 101 | derive() { | 118 | derive() { | 
| 102 | this.exdata = [["受理人员", "收件数", "退件数", "推荐率"]]; | 119 | exportCstj(this.selectDate).then(res => { | 
| 103 | this.xAxisData.forEach((item, index) => { | 120 | const link=document.createElement("a"); | 
| 104 | console.log("this.exdata[index+1]", this.exdata[index + 1]); | 121 | let blob=new Blob([res], { type: "application/vnd.ms-excel" }); //类型excel | 
| 105 | this.exdata.push([]); | 122 | link.style.display="none"; | 
| 106 | this.exdata[index + 1].push(item); | 123 | link.href=URL.createObjectURL(blob); | 
| 107 | this.exdata[index + 1].push(this.data1[index]); | 124 | link.setAttribute("download", this.dateRange[0]+'~'+ this.dateRange[1] +'超时统计'); | 
| 108 | this.exdata[index + 1].push(this.data2[index]); | 125 | document.body.appendChild(link); | 
| 109 | this.exdata[index + 1].push(this.data3[index]); | 126 | link.click(); | 
| 110 | }); | 127 | document.body.removeChild(link); | 
| 111 | console.log("this.exdata", this.exdata); | 128 | }) | 
| 112 | const ws = XLSX.utils.aoa_to_sheet(this.exdata); | ||
| 113 | const wb = XLSX.utils.book_new(); | ||
| 114 | XLSX.utils.book_append_sheet(wb, ws, "Sheet1"); | ||
| 115 | XLSX.writeFile(wb, "收件与超时统计情况.xlsx"); | ||
| 116 | }, | 129 | }, | 
| 117 | // 查询 | 130 | // 查询 | 
| 118 | chchch() { | 131 | chchch() { | 
| ... | @@ -140,15 +153,21 @@ export default { | ... | @@ -140,15 +153,21 @@ export default { | 
| 140 | }, | 153 | }, | 
| 141 | // 如果需要自定义 tooltip样式,需要使用formatter | 154 | // 如果需要自定义 tooltip样式,需要使用formatter | 
| 142 | formatter: (params) => { | 155 | formatter: (params) => { | 
| 143 | console.log("paramsssssssssssssssssss", params); | 156 | if (params.seriesName == '超时时间') { | 
| 157 | return `<div font-size: 14px;line-height: 24px> | ||
| 158 | ${params.seriesName} | ||
| 159 | <br> | ||
| 160 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | ||
| 161 | Number(params.value).toFixed(2) + "小时" | ||
| 162 | } </span> | ||
| 163 | </div>`; | ||
| 164 | } | ||
| 144 | return `<div font-size: 14px;line-height: 24px> | 165 | return `<div font-size: 14px;line-height: 24px> | 
| 145 | ${params.seriesName} | 166 | ${params.seriesName} | 
| 146 | <br> | 167 | <br> | 
| 147 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | 168 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | 
| 148 | Number(params.value).toFixed(2) + "%" | 169 | Number(params.value).toFixed(2) + "件" | 
| 149 | } </span> | 170 | } </span> | 
| 150 | |||
| 151 | |||
| 152 | </div>`; | 171 | </div>`; | 
| 153 | }, | 172 | }, | 
| 154 | }, | 173 | }, | 
| ... | @@ -279,6 +298,9 @@ export default { | ... | @@ -279,6 +298,9 @@ export default { | 
| 279 | this.formatDate(new Date(year - 1, 11, 31)) | 298 | this.formatDate(new Date(year - 1, 11, 31)) | 
| 280 | ); | 299 | ); | 
| 281 | } | 300 | } | 
| 301 | this.selectDate.startAt = this.dateRange[0] + " 00:00:00" | ||
| 302 | this.selectDate.endAt = this.dateRange[1] + " 00:00:00" | ||
| 303 | this.cstj() | ||
| 282 | }, | 304 | }, | 
| 283 | // 日期范围选择器事件 | 305 | // 日期范围选择器事件 | 
| 284 | chooseDateRange() { | 306 | chooseDateRange() { | ... | ... | 
| ... | @@ -53,6 +53,7 @@ | ... | @@ -53,6 +53,7 @@ | 
| 53 | </template> | 53 | </template> | 
| 54 | <script> | 54 | <script> | 
| 55 | import * as echarts from "echarts"; | 55 | import * as echarts from "echarts"; | 
| 56 | import {tjtj, exportTjtj} from "@/api/tjfx.js"; | ||
| 56 | import XLSX from 'xlsx'; | 57 | import XLSX from 'xlsx'; | 
| 57 | export default { | 58 | export default { | 
| 58 | components: {}, | 59 | components: {}, | 
| ... | @@ -69,62 +70,68 @@ export default { | ... | @@ -69,62 +70,68 @@ export default { | 
| 69 | { code: "7", name: "今年" }, | 70 | { code: "7", name: "今年" }, | 
| 70 | { code: "8", name: "去年" }, | 71 | { code: "8", name: "去年" }, | 
| 71 | ], | 72 | ], | 
| 73 | selectDate : { | ||
| 74 | startAt:'2020-01-03 02:57:57', | ||
| 75 | endAt:'2025-01-03 02:57:57' | ||
| 76 | }, | ||
| 72 | chooseIndex: 0, // 日期快捷选择项索引 | 77 | chooseIndex: 0, // 日期快捷选择项索引 | 
| 73 | dateRange: [], // 自定义列表 - 日期范围 | 78 | dateRange: [], // 自定义列表 - 日期范围 | 
| 74 | queryForm: {}, | 79 | queryForm: {}, | 
| 75 | data1: [23, 45, 23, 11, 15, 19, 35], | 80 | data1: [], | 
| 76 | data2: [1, 4, 1, 3, 2, 3, 4], | 81 | data2: [], | 
| 77 | data3: [], | 82 | data3: [], | 
| 78 | xAxisData: [ | 83 | xAxisData: [], | 
| 79 | "任超", | ||
| 80 | "杨威", | ||
| 81 | "魏娜", | ||
| 82 | "张祎旋", | ||
| 83 | "苗菁", | ||
| 84 | "王文刚", | ||
| 85 | "单帅旗", | ||
| 86 | ], | ||
| 87 | }; | 84 | }; | 
| 88 | }, | 85 | }, | 
| 89 | mounted() { | 86 | mounted() { | 
| 90 | this.setdata(); | 87 | this.setdata(); | 
| 91 | // 创建一个 ECharts 实例 | ||
| 92 | this.chart = echarts.init(this.$refs.chart); | ||
| 93 | // 在 ECharts 实例中配置图表 | ||
| 94 | this.chart.setOption(this.getOption()); | ||
| 95 | this.chooseDateQuick(0); | ||
| 96 | |||
| 97 | }, | 88 | }, | 
| 98 | methods: { | 89 | methods: { | 
| 90 | |||
| 91 | tjtj () { | ||
| 92 | tjtj(this.selectDate).then(res => { | ||
| 93 | if (res.code == 200) { | ||
| 94 | let dataSource = res.result; | ||
| 95 | if (dataSource != null) { | ||
| 96 | this.xAxisData = dataSource.map(item => item.assignee) | ||
| 97 | this.data1 = dataSource.map(item => item.sj) | ||
| 98 | this.data2 = dataSource.map(item => item.tj) | ||
| 99 | this.data3 = dataSource.map(item => item.tjl) | ||
| 100 | } | ||
| 101 | console.log(this.xAxisData) | ||
| 102 | console.log(this.data1) | ||
| 103 | console.log(this.data2) | ||
| 104 | console.log(this.data3) | ||
| 105 | // 创建一个 ECharts 实例 | ||
| 106 | this.chart = echarts.init(this.$refs.chart); | ||
| 107 | // 在 ECharts 实例中配置图表 | ||
| 108 | this.chart.setOption(this.getOption()); | ||
| 109 | } | ||
| 110 | }) | ||
| 111 | }, | ||
| 112 | |||
| 99 | setdata() { | 113 | setdata() { | 
| 100 | for (let i = 0; i < this.data1.length; i++) { | 114 | this.chooseDateQuick(7) | 
| 101 | let sum = (this.data2[i] / this.data1[i]) * 100; | 115 | this.tjtj() | 
| 102 | this.data3.push(Number(sum).toFixed(0)); | ||
| 103 | } | ||
| 104 | }, | 116 | }, | 
| 105 | // 导出 | 117 | // 导出 | 
| 106 | // 导出 | 118 | // 导出 | 
| 107 | derive() { | 119 | derive() { | 
| 108 | this.exdata = [ | 120 | exportTjtj(this.selectDate).then(res => { | 
| 109 | ['受理人员', '收件数','退件数','推荐率'] | 121 | const link=document.createElement("a"); | 
| 110 | ]; | 122 | let blob=new Blob([res], { type: "application/vnd.ms-excel" }); //类型excel | 
| 111 | this.xAxisData.forEach((item,index) => { | 123 | link.style.display="none"; | 
| 112 | console.log("this.exdata[index+1]",this.exdata[index+1]); | 124 | link.href=URL.createObjectURL(blob); | 
| 113 | this.exdata.push([]) | 125 | link.setAttribute("download", this.dateRange[0]+'~'+ this.dateRange[1] +'收件退件统计'); | 
| 114 | this.exdata[index+1].push(item) | 126 | document.body.appendChild(link); | 
| 115 | this.exdata[index+1].push(this.data1[index]) | 127 | link.click(); | 
| 116 | this.exdata[index+1].push(this.data2[index]) | 128 | document.body.removeChild(link); | 
| 117 | this.exdata[index+1].push(this.data3[index]) | 129 | }) | 
| 118 | }) | ||
| 119 | console.log("this.exdata",this.exdata); | ||
| 120 | const ws = XLSX.utils.aoa_to_sheet(this.exdata); | ||
| 121 | const wb = XLSX.utils.book_new(); | ||
| 122 | XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); | ||
| 123 | XLSX.writeFile(wb, '收件与退件统计情况.xlsx'); | ||
| 124 | }, | 130 | }, | 
| 125 | // 查询 | 131 | // 查询 | 
| 126 | chchch() { | 132 | chchch() { | 
| 127 | console.log("dateRange", this.dateRange); | 133 | console.log("dateRange", this.dateRange); | 
| 134 | this.setdata() | ||
| 128 | }, | 135 | }, | 
| 129 | getOption() { | 136 | getOption() { | 
| 130 | return { | 137 | return { | 
| ... | @@ -148,11 +155,20 @@ console.log("this.exdata",this.exdata); | ... | @@ -148,11 +155,20 @@ console.log("this.exdata",this.exdata); | 
| 148 | }, | 155 | }, | 
| 149 | // 如果需要自定义 tooltip样式,需要使用formatter | 156 | // 如果需要自定义 tooltip样式,需要使用formatter | 
| 150 | formatter: (params) => { | 157 | formatter: (params) => { | 
| 158 | if (params.seriesName == '退件率') { | ||
| 159 | return `<div font-size: 14px;line-height: 24px> | ||
| 160 | ${params.seriesName} | ||
| 161 | <br> | ||
| 162 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | ||
| 163 | Number(params.value).toFixed(2) + "%" | ||
| 164 | } </span> | ||
| 165 | </div>`; | ||
| 166 | } | ||
| 151 | return `<div font-size: 14px;line-height: 24px> | 167 | return `<div font-size: 14px;line-height: 24px> | 
| 152 | ${params.seriesName} | 168 | ${params.seriesName} | 
| 153 | <br> | 169 | <br> | 
| 154 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | 170 | <span font-size: 16px; font-weight: 600;"> ${params.name}: ${ | 
| 155 | Number(params.value).toFixed(2) + "%" | 171 | Number(params.value).toFixed(2) + "件" | 
| 156 | } </span> | 172 | } </span> | 
| 157 | </div>`; | 173 | </div>`; | 
| 158 | }, | 174 | }, | 
| ... | @@ -284,6 +300,9 @@ console.log("this.exdata",this.exdata); | ... | @@ -284,6 +300,9 @@ console.log("this.exdata",this.exdata); | 
| 284 | this.formatDate(new Date(year - 1, 11, 31)) | 300 | this.formatDate(new Date(year - 1, 11, 31)) | 
| 285 | ); | 301 | ); | 
| 286 | } | 302 | } | 
| 303 | this.selectDate.startAt = this.dateRange[0] + " 00:00:00" | ||
| 304 | this.selectDate.endAt = this.dateRange[1] + " 00:00:00" | ||
| 305 | this.tjtj() | ||
| 287 | }, | 306 | }, | 
| 288 | // 日期范围选择器事件 | 307 | // 日期范围选择器事件 | 
| 289 | chooseDateRange() { | 308 | chooseDateRange() { | ... | ... | 
| 1 | <!-- | 1 | <!-- | 
| 2 | * @Description: | 2 | * @Description: | 
| 3 | * @Autor: renchao | 3 | * @Autor: renchao | 
| 4 | * @LastEditTime: 2023-12-29 16:35:50 | 4 | * @LastEditTime: 2023-12-29 16:35:50 | 
| 5 | --> | 5 | --> | 
| ... | @@ -113,6 +113,10 @@ | ... | @@ -113,6 +113,10 @@ | 
| 113 | label: "收费人员", | 113 | label: "收费人员", | 
| 114 | }, | 114 | }, | 
| 115 | { | 115 | { | 
| 116 | prop: "sfkmmc", | ||
| 117 | label: "收费科目名称", | ||
| 118 | }, | ||
| 119 | { | ||
| 116 | prop: "sjffr", | 120 | prop: "sjffr", | 
| 117 | label: "实际付费人", | 121 | label: "实际付费人", | 
| 118 | }, | 122 | }, | 
| ... | @@ -227,4 +231,4 @@ | ... | @@ -227,4 +231,4 @@ | 
| 227 | margin-left: 10px; | 231 | margin-left: 10px; | 
| 228 | } | 232 | } | 
| 229 | } | 233 | } | 
| 230 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | 
| 234 | </style> | ... | ... | 
- 
Please register or sign in to post a comment