马宇豪
2025-04-23 34ec919649adfefeecd0418284dd7b02e9ed49b8
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">
                <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>
@@ -185,6 +208,7 @@
                    </tr>
                    </template>
                </table>
                <div v-else style="text-align: center;font-size: 16px">暂无汇总数据</div>
                <area-form v-show="sheetStatus==3" ref="areaSheet"></area-form>
            </div>
        </div>
@@ -194,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",
@@ -254,7 +280,7 @@
    created() {
        const t = this
        t.getCheckUnitType()
        if(t.taskId){t.getDataStatistics()}
        // if(t.taskId){t.getDataStatistics()}
    },
    computed: {
        ...mapGetters([
@@ -283,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"){
@@ -325,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{
@@ -344,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()
@@ -355,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
@@ -367,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>
@@ -396,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{
@@ -410,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{
@@ -437,11 +486,8 @@
        }
        .point-item{
            cursor: pointer;
            &:hover{
                text-decoration: underline;
                color: #409EFF;
            }
            text-decoration: underline;
            color: #034ea2;
        }
        .warning{
            color: red;