From 34ec919649adfefeecd0418284dd7b02e9ed49b8 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 23 四月 2025 15:42:17 +0800 Subject: [PATCH] 添加批发仓库监测预警 --- src/views/specialCheck/components/sumSheet.vue | 153 +++++++++++++++++++++++++++++++++------------------ 1 files changed, 99 insertions(+), 54 deletions(-) diff --git a/src/views/specialCheck/components/sumSheet.vue b/src/views/specialCheck/components/sumSheet.vue index 39231e3..e40fb51 100644 --- a/src/views/specialCheck/components/sumSheet.vue +++ b/src/views/specialCheck/components/sumSheet.vue @@ -9,15 +9,14 @@ </div> <div style="display: flex;justify-content: space-between;align-items: center;margin: 10px 0 20px;height: 40px"> <div style="width: 140px"></div> - <h2 style="text-align: center;margin: 0">{{taskName}}{{ activeTab==1?'批发':'零售' }}环节信息报送汇总表({{sheetStatus==1?'省级层面':(sheetStatus==2?'市级层面':'区县级')}})</h2> - <el-button icon="el-icon-download" v-if="sheetStatus==1||sheetStatus==2" style="width: 140px" size="medium" type="primary" @click="exportSheet()" id="export">导出汇总表</el-button> - <div v-else style="width: 140px"></div> + <h2 style="text-align: center;margin: 0">{{taskName}}{{ activeTab==1?'批发':'零售' }}环节信息报送汇总表({{sheetStatus==1?'省级层面':(sheetStatus==2?'地(州、市)级层面':'区县级')}})</h2> + <el-button icon="el-icon-download" style="width: 140px" size="medium" type="primary" @click="exportSheet()" id="export">导出汇总表</el-button> </div> <div class="tabpanel"> <table v-show="sheetStatus==1||sheetStatus==2" class="data-table" id="tableExcel" v-if="thisLevelStatistic && institutionalData && institutionalData.length>0"> <tr> <th rowspan="3">序号</th> - <th rowspan="3">{{sheetStatus==1?'地市':'区县'}}</th> + <th rowspan="3">{{sheetStatus==1?'地(州、市)':'区县'}}</th> <th colspan="2">企业基本情况</th> <th colspan="11">企业自查及整改</th> <th colspan="9">检查及整改情况</th> @@ -30,8 +29,8 @@ <th rowspan="2">自查覆盖率要求</th> <th rowspan="2">已完成覆盖率</th> <th rowspan="2">当前有效期内企业数量</th> - <th rowspan="2">企业库存数量/万箱</th> - <th rowspan="2">企业库容量/万箱</th> + <th rowspan="2">企业库存数量/箱</th> + <th rowspan="2">企业库容量/箱</th> <th colspan="2">隐患问题情况</th> <th colspan="3">整改情况</th> <th rowspan="2">检查层级</th> @@ -43,7 +42,7 @@ <th rowspan="2">吊销许可证数量</th> <th rowspan="2">暂扣许可证数量</th> <th rowspan="2">罚款企业数量</th> - <th rowspan="2">罚款金额</th> + <th rowspan="2">罚款金额(万元)</th> </tr> <tr> <th>隐患总数</th> @@ -93,7 +92,7 @@ <td>{{sum.amerceMoneySum}}</td> </tr> <tr> - <td colspan="2">{{ sheetStatus==1?'省本级':'市本级' }}</td> + <td colspan="2">{{ sheetStatus==1?'省本级':'地(州、市)本级' }}</td> <td>{{thisLevelStatistic.enterpriseSum?thisLevelStatistic.enterpriseSum: '--'}}</td> <td>{{thisLevelStatistic.validEnterpriseNum?thisLevelStatistic.validEnterpriseNum: '--'}}</td> <td>{{thisLevelStatistic.selfCheckEnterpriseNum?thisLevelStatistic.selfCheckEnterpriseNum: '--'}}</td> @@ -107,7 +106,7 @@ <td>{{thisLevelStatistic.completedRectifyHiddendangerSum?thisLevelStatistic.completedRectifyHiddendangerSum:'--'}}</td> <td>{{thisLevelStatistic.completedRectifyMajorHiddendangerNum?thisLevelStatistic.completedRectifyMajorHiddendangerNum:'--'}}</td> <td>{{thisLevelStatistic.hiddendangerRectifyRate?thisLevelStatistic.hiddendangerRectifyRate:'--'}}</td> - <td>{{sheetStatus==1?'省级':'市级'}}</td> + <td>{{sheetStatus==1?'省级':'地(州、市)级'}}</td> <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckEnterpriseNum}}</td> <td> {{typeof thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire=="string"?thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire:thisLevelStatistic.thisLevelSpotCheckinfo.spotCheckRateRequire + '%'}} @@ -127,8 +126,8 @@ <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.amerceEnterpriseNum}}</td> <td>{{thisLevelStatistic.thisLevelSpotCheckinfo.amerceMoneySum}}</td> </tr> - <template v-for="(item,index) in institutionalData"> - <tr> + <template v-if="institutionalData && institutionalData.length>0" v-for="(item,index) in institutionalData"> + <tr v-if="item.citySpotCheckinfo || item.areaSpotCheckinfo"> <td :rowspan="sheetStatus==1?2:1">{{ index + 1}}</td> <td :rowspan="sheetStatus==1?2:1" class="point-item" @click="toDig(item.enterpriseCity,item.enterpriseArea)"> {{sheetStatus==1?item.enterpriseCity:item.enterpriseArea }} @@ -147,32 +146,56 @@ <td :rowspan="sheetStatus==1?2:1">{{ item.majorHiddendangerNum }}</td> <td :rowspan="sheetStatus==1?2:1">{{ item.completedRectifyHiddendangerSum }}</td> <td :rowspan="sheetStatus==1?2:1">{{ item.completedRectifyMajorHiddendangerNum }}</td> - <td :rowspan="sheetStatus==1?2:1">{{ item.hiddendangerRectifyRate==null?'--':item.hiddendangerRectifyRate + '%' }}</td> - <td>{{ sheetStatus==1?'设立区级':'县级' }}</td> - <td class="point-item" @click="checkEnterprise(item.enterpriseCity,item.enterpriseArea)">{{sheetStatus==1?item.citySpotCheckinfo.spotCheckEnterpriseNum:item.areaSpotCheckinfo.spotCheckEnterpriseNum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckinfo.spotCheckRateRequire + '%':item.areaSpotCheckinfo.spotCheckRateRequire + '%'}}</td> - <td v-if="sheetStatus==1" :class="item.citySpotCheckinfo.spotCheckCompleteRate<item.citySpotCheckinfo.spotCheckRateRequire?'warning':''"> - {{item.citySpotCheckinfo.spotCheckCompleteRate + '%'}} + <td :rowspan="sheetStatus==1?2:1">{{ item.hiddendangerRectifyRate==null?'--':(item.hiddendangerRectifyRate + '%') }}</td> + <td>{{ sheetStatus==1?'设区地(州、市)级':'县级' }}</td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.spotCheckEnterpriseNum !== undefined)|| (item.areaSpotCheckinfo && item.areaSpotCheckinfo.spotCheckEnterpriseNum !== undefined)" class="point-item" @click="checkEnterprise(item.enterpriseCity,item.enterpriseArea)"> + {{sheetStatus==1?item.citySpotCheckinfo.spotCheckEnterpriseNum:item.areaSpotCheckinfo.spotCheckEnterpriseNum}} + </td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.spotCheckRateRequire !== undefined)|| (item.areaSpotCheckinfo && item.areaSpotCheckinfo.spotCheckRateRequire !== undefined)"> + {{sheetStatus==1?(item.citySpotCheckinfo.spotCheckRateRequire + '%'):(item.areaSpotCheckinfo.spotCheckRateRequire + '%')}} + </td> + <td v-if="sheetStatus==1 && item.citySpotCheckinfo && item.citySpotCheckinfo.spotCheckCompleteRate!== undefined" :class="item.citySpotCheckinfo.spotCheckCompleteRate<item.citySpotCheckinfo.spotCheckRateRequire?'warning':''"> + {{item.citySpotCheckinfo.spotCheckCompleteRate==null?'--':(item.citySpotCheckinfo.spotCheckCompleteRate + '%')}} </td> <td v-else :class="item.areaSpotCheckinfo.spotCheckCompleteRate<item.areaSpotCheckinfo.spotCheckRateRequire?'warning':''"> - {{item.areaSpotCheckinfo.spotCheckCompleteRate + '%'}} + {{item.areaSpotCheckinfo.spotCheckCompleteRate==null?'--':(item.areaSpotCheckinfo.spotCheckCompleteRate + '%')}} </td> - <td>{{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerSum:item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerSum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum:item.areaSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum:item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum:item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum}}</td> - <td> - {{sheetStatus==1?(item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate==null?'--':item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%'):(item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate==null?'--':item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%')}}</td> - <td>{{sheetStatus==1?item.citySpotCheckinfo.revokeLicenseEnterpriseSum:item.areaSpotCheckinfo.revokeLicenseEnterpriseSum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckinfo.detainLicenseSum:item.areaSpotCheckinfo.detainLicenseSum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckinfo.amerceEnterpriseNum:item.areaSpotCheckinfo.amerceEnterpriseNum}}</td> - <td>{{sheetStatus==1?item.citySpotCheckinfo.amerceMoneySum:item.areaSpotCheckinfo.amerceMoneySum}}</td> + <td v-if="(item.citySpotCheckHiddendangerinfo && item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerSum!== undefined)|| (item.areaSpotCheckHiddendangerinfo && item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerSum!== undefined)"> + {{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerSum:item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerSum}} + </td> + <td v-if="(item.citySpotCheckHiddendangerinfo && item.citySpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum !== undefined)|| (item.areaSpotCheckHiddendangerinfo && item.areaSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum:item.areaSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}} + </td> + <td v-if="(item.citySpotCheckHiddendangerinfo && item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum !== undefined)|| (item.areaSpotCheckHiddendangerinfo && item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum:item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}} + </td> + <td v-if="(item.citySpotCheckHiddendangerinfo && item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum !== undefined)|| (item.areaSpotCheckHiddendangerinfo && item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum:item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyMajorHiddendangerNum}} + </td> + <td v-if="sheetStatus==1 && item.citySpotCheckHiddendangerinfo && item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate !== undefined"> + {{item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate == null ? '--' : (item.citySpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%') }} + </td> + <td v-else> + {{item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate==null?'--': (item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerRectifyRate + '%')}} + </td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.revokeLicenseEnterpriseSum !== undefined)|| (item.areaSpotCheckinfo && item.areaSpotCheckinfo.revokeLicenseEnterpriseSum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckinfo.revokeLicenseEnterpriseSum:item.areaSpotCheckinfo.revokeLicenseEnterpriseSum}} + </td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.detainLicenseSum !== undefined)|| (item.areaSpotCheckinfo && item.areaSpotCheckinfo.detainLicenseSum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckinfo.detainLicenseSum:item.areaSpotCheckinfo.detainLicenseSum}} + </td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.amerceEnterpriseNum !== undefined)|| (item.areaSpotCheckinfo && item.areaSpotCheckinfo.amerceEnterpriseNum !== undefined)"> + {{sheetStatus==1?item.citySpotCheckinfo.amerceEnterpriseNum:item.areaSpotCheckinfo.amerceEnterpriseNum}} + </td> + <td v-if="(item.citySpotCheckinfo && item.citySpotCheckinfo.amerceMoneySum !==undefined) || (item.areaSpotCheckinfo && item.areaSpotCheckinfo.amerceMoneySum!==undefined)"> + {{sheetStatus==1?item.citySpotCheckinfo.amerceMoneySum:item.areaSpotCheckinfo.amerceMoneySum}} + </td> </tr> <tr v-if="sheetStatus==1"> <td>县级</td> <td class="point-item" @click="checkEnterprise(item.enterpriseCity,'all')">{{item.areaSpotCheckinfo.spotCheckEnterpriseNum}}</td> - <td>{{item.areaSpotCheckinfo.spotCheckRateRequire + '%'}}</td> - <td :class="item.areaSpotCheckinfo.spotCheckCompleteRate<item.areaSpotCheckinfo.spotCheckRateRequire?'warning':''">{{item.areaSpotCheckinfo.spotCheckCompleteRate + '%'}}</td> + <td>{{item.areaSpotCheckinfo.spotCheckRateRequire==null?'--':item.areaSpotCheckinfo.spotCheckRateRequire + '%'}}</td> + <td :class="item.areaSpotCheckinfo.spotCheckCompleteRate<item.areaSpotCheckinfo.spotCheckRateRequire?'warning':''">{{item.areaSpotCheckinfo.spotCheckCompleteRate==null?'--':item.areaSpotCheckinfo.spotCheckCompleteRate + '%'}}</td> <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckHiddendangerSum}}</td> <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckMajorHiddendangerNum}}</td> <td>{{item.areaSpotCheckHiddendangerinfo.spotCheckCompletedRectifyHiddendangerSum}}</td> @@ -195,13 +218,15 @@ <script> import {mapGetters} from "vuex"; -import Cookies from "_js-cookie@2.2.0@js-cookie"; +import Cookies from "js-cookie"; import {paramList} from "../../../api/contract"; import {computePageCount} from "../../../utils"; import {parseError} from "../../../utils/messageDialog"; import { getCheckUnitType,getDataStatistics, getSpecialCheckTask } from "@/api/specialCheck" import areaForm from "./areaForm" import checkEnterprises from "./checkEnterprises" +import FileSaver from 'file-saver' +import XLSX from 'xlsx' export default { name: "sumSheet", @@ -255,7 +280,7 @@ created() { const t = this t.getCheckUnitType() - if(t.taskId){t.getDataStatistics()} + // if(t.taskId){t.getDataStatistics()} }, computed: { ...mapGetters([ @@ -284,6 +309,13 @@ }, async getDataStatistics(){ const t = this + const loading = this.$loading({ + lock: true, + target: document.querySelector('.tabpanel'), + text: '正在获取汇总数据', + spinner: 'el-icon-loading', + fullscreen: false + }); const data = {id: t.taskId,enterpriseType: t.activeTab,enterpriseCity: t.enterpriseCity,enterpriseArea: t.enterpriseArea,pageIndex: t.currentPage,pageSize: t.pageSize} const res = await getDataStatistics(data) if(res.data.code === "200"){ @@ -326,10 +358,10 @@ message:res.data.message }) } + loading.close(); }, switchSheet() { const t = this - console.log(t.sheetStatus,'status') if(t.sheetStatus == 1 || t.sheetStatus == 2){ t.getDataStatistics() }else{ @@ -345,8 +377,14 @@ t.$refs.enterprises.enterpriseArea = area if(t.sheetStatus == 1){ t.$refs.enterprises.enterpriseCity = city + if(area == 'all'){ + t.$refs.enterprises.checkUnitType = 3 + }else{ + t.$refs.enterprises.checkUnitType = 2 + } }else{ t.$refs.enterprises.enterpriseCity = null + t.$refs.enterprises.checkUnitType = 3 } t.$refs.enterprises.dialogVisible = true t.$refs.enterprises.getEnterprises() @@ -356,8 +394,8 @@ const t = this if(t.sheetStatus==1){ t.enterpriseCity = city - t.getDataStatistics() t.sheetStatus = 2 + t.getDataStatistics() }else{ t.sheetStatus = 3 t.$refs.areaSheet.taskId = t.taskId @@ -368,23 +406,32 @@ } }, tableToExcel(tableid,btnname,sheetname) { - var uri = 'data:application/vnd.ms-excel;base64,' + let uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta charset="UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) } //根据ID获取table表格HTML - var table = document.getElementById(tableid); - var ctx = { worksheet: 'Worksheet', table: table.innerHTML }; - var alink = document.createElement("a"); + let table = document.getElementById(tableid); + let ctx = { worksheet: 'Worksheet', table: table.innerHTML }; + let alink = document.createElement("a"); alink.href = uri + base64(format(template, ctx)); alink.download = sheetname + ').xls'; alink.click(); }, exportSheet(){ const t = this - const sheetName = t.taskName + (t.activeTab==1 ?'批发':'零售') + '环节信息报送汇总表(' + (t.sheetStatus==1?'省级层面':(t.sheetStatus==2?'市级层面':'区县级')) - t.tableToExcel("tableExcel", "export",sheetName); - } + const sheetName = t.taskName + (t.activeTab==1 ?'批发':'零售') + '环节信息报送汇总表(' + (t.sheetStatus==1?'省级层面':(t.sheetStatus==2?'地(州、市)级层面':'区县级')) + if(t.sheetStatus==1||t.sheetStatus==2){ + t.tableToExcel("tableExcel", "export",sheetName); + }else{ + let wb = XLSX.utils.table_to_book(document.querySelector('#' + 'areaSheet')) + let wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' }) + try { + FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), sheetName + ').xlsx') + } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) } + // return wbout + } + }, } } </script> @@ -397,12 +444,12 @@ } .data-table{ border-collapse: collapse; - border: 1px solid #ccc; + border: 1px solid #eee; margin: 0 0 20px; background: #fff; box-shadow: 0 3px 12px rgba(0,0,0,.2); tr{ - border-bottom: 1px solid #ccc; + border-bottom: 1px solid #eee; white-space: nowrap; font-size: 12px; &:last-of-type{ @@ -411,25 +458,26 @@ th{ padding: 6px 4px; - border: 1px solid #ccc; + border: 1px solid #eee; border-left: none; font-weight: bolder; text-align: center; - color: #409EFF; + color: #333; + background: #F1F4F7; &:first-of-type{ - border-top: 1px solid #ccc; - border-left: 1px solid #ccc; + border-top: 1px solid #eee; + border-left: 1px solid #eee; } &.dark-bg{ - background: #409EFF; + background: #034ea2; color: #fff; } } td{ padding: 6px 4px; - border-right: 1px solid #ccc; + border-right: 1px solid #eee; text-align: center; &:last-of-type{ @@ -438,11 +486,8 @@ } .point-item{ cursor: pointer; - - &:hover{ - text-decoration: underline; - color: #409EFF; - } + text-decoration: underline; + color: #034ea2; } .warning{ color: red; -- Gitblit v1.9.2