<template> <div class="invoice_container"> <div class="title"> <el-row> <el-col :span="24"> <div class="top" > <el-upload style="margin-left: 10px;" :action="url" :http-request="importExcel" list-type="text" :show-file-list="false" > <el-button type="primary">导入参数</el-button> </el-upload> <div class="demo-input-suffix" style="margin-top: 5px;"> <el-input placeholder="公司名称" class="input-demo" v-model="formCondition.companyName"></el-input> <el-input placeholder="运单编号" class="input-demo" v-model="formCondition.waybillNum"></el-input> <el-input placeholder="税号" class="input-demo" v-model="formCondition.buyerTaxpayerCode"></el-input> <el-input placeholder="车牌号" class="input-demo" v-model="formCondition.plateNum"></el-input> </div> <div class="demo-input-suffix" style="margin-top: 5px;margin-left: 10px;"> <el-date-picker v-model="formCondition.invoiceMakeTime" type="daterange" value-format="yyyy-MM-dd HH:mm:SS" range-separator="至" start-placeholder="开票时间始" end-placeholder="开票时间止"></el-date-picker> <el-date-picker v-model="formCondition.calculateTime" type="daterange" value-format="yyyy-MM-dd HH:mm:SS" range-separator="至" start-placeholder="扣费时间始" end-placeholder="扣费时间止"></el-date-picker> </div> <div class="demo-input-suffix" style="margin-top: 5px;margin-right: 10px;"> <el-input placeholder="发票代码" class="input-demo" v-model="formCondition.invoiceCode"></el-input> <el-input placeholder="发票号码" class="input-demo" v-model="formCondition.invoiceNum"></el-input> <el-button type="success" style="margin-right: 1%;" @click="firstLoadData">查询</el-button> <el-button style="margin-left: 1%;" @click="DownloadTemplate">查询模板下载</el-button> <el-button type="primary" style="margin-right: 1%;" @click="exportExcel">导出报表</el-button> </div> </div> </el-col> </el-row> </div> <!-- 表格部分 --> <template> <el-table class="table" v-loading="loading" ref="multipleTable" :data="invoiceTable" :height="heightt" border tooltip-effect="dark"> <el-table-column label="企业编号" prop="companyNum" show-overflow-tooltip> </el-table-column> <el-table-column prop="companyName" label="公司名称" show-overflow-tooltip> </el-table-column> <el-table-column prop="waybillNum" label="运单号" show-overflow-tooltip> </el-table-column> <el-table-column prop="buyerTaxpayerCode" label="购方税号" show-overflow-tooltip> </el-table-column> <el-table-column prop="plateNum" label="车牌号" show-overflow-tooltip> </el-table-column> <el-table-column prop="waybillStartTime" label="运单开始时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="waybillEndTime" label="运单结束时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="enStation" label="入口收费站" width="100" show-overflow-tooltip> </el-table-column> <el-table-column prop="sellerTaxpayerCode" label="销方税号" show-overflow-tooltip> </el-table-column> <el-table-column prop="sellerName" label="销方名称" show-overflow-tooltip> </el-table-column> <el-table-column prop="exStation" label="出口收费站" width="100" show-overflow-tooltip> </el-table-column> <el-table-column prop="invoiceCode" label="发票代码" show-overflow-tooltip> </el-table-column> <el-table-column prop="invoiceNum" label="发票号码" show-overflow-tooltip> </el-table-column> <el-table-column prop="transactionId" label="交易Id" show-overflow-tooltip> </el-table-column> <el-table-column prop="invoiceMakeTime" label="开票时间" show-overflow-tooltip> </el-table-column> <el-table-column prop="exTime" label="交易时间" show-overflow-tooltip> </el-table-column> <el-table-column prop="fee" label="交易金额" show-overflow-tooltip> <template slot-scope="scope"> <span>{{scope.row.fee/100| rounding}}</span> </template> </el-table-column> <el-table-column prop="totalAmount" label="价税合计" show-overflow-tooltip> <template slot-scope="scope"> <span>{{scope.row.totalAmount/100| rounding}}</span> </template> </el-table-column> <el-table-column prop="totalTaxAmount" label="税额" show-overflow-tooltip> <template slot-scope="scope"> <span>{{scope.row.totalTaxAmount/100| rounding}}</span> </template> </el-table-column> <el-table-column prop="amount" label="金额" show-overflow-tooltip> <template slot-scope="scope"> <span>{{scope.row.amount/100| rounding}}</span> </template> </el-table-column> <el-table-column prop="taxRate" label="税率" show-overflow-tooltip> <template slot-scope="scope"> <span>{{scope.row.taxRate| rounding}}</span> </template> </el-table-column> <el-table-column prop="invoiceHtmlUrl" label="预览地址" show-overflow-tooltip> </el-table-column> <el-table-column prop="invoiceUrl" label="下载地址" show-overflow-tooltip> </el-table-column> <el-table-column prop="calculateTime" label="扣费时间" show-overflow-tooltip> </el-table-column> <el-table-column prop="billStatus" label="运单状态" show-overflow-tooltip> <template slot-scope="scope"> <span v-if="scope.row.billStatus == 1" style="color: green">未结束</span> <span v-else-if="scope.row.billStatus == 2" style="color: green">开票中</span> <span v-else-if="scope.row.billStatus == 3" style="color: green">开票完成</span> <span v-else-if="scope.row.billStatus == 4" style="color: red">超时运单</span> </template> </el-table-column> </el-table> </template> <!-- 分页 --> <div class="block"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="current" :page-sizes="[6, 8, 10, 20, 50, 100]" :page-size="pagesize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </div> </template> <script type="text/javascript"> import FileSaver from "file-saver"; import XLSX from "xlsx"; export default { data(){ return{ formCondition:{ invoiceCode:'', invoiceNum:'', waybillNum:'' }, formUserList: { "file": "" }, invoiceTable:[], hightt:'0px', current: 1, pagesize: 8, total:'' } }, created() { this.heightt = tableHeight-110; this.loadData(); }, filters: { rounding (value) { return value.toFixed(2) } }, methods:{ firstLoadData(){ this.current = 1; this.pagesize = 8; this.loadData(); }, // 列表展示 async loadData() { const formData = new FormData(); formData.append('current', this.current); formData.append('size', this.pagesize); for(var i in this.formCondition){ formData.append(i,this.formCondition[i]); } const response = await this.$http.post('noCar/findNocarInvoices', formData); if (response.data.code === 0) { this.invoiceTable = response.data.data.records; this.total = response.data.data.total; } }, importExcel (content) { const file = content.file // let file = file.files[0] // 使用传统的input方法需要加上这一步 const filename = file.name if(!filename||typeof filename!='string'){ this.$message('格式错误!请按照模板中格式') return } let a = filename.split('').reverse().join(''); let types = a.substring(0,a.search(/\./)).split('').reverse().join(''); const fileType = ['xlsx', 'xlc', 'xlm', 'xls', 'xlt', 'xlw', 'csv'].some(item => item === types) if (!fileType) { this.$message(types+'格式错误!请按照模板中格式') return } this.file2Xce(file).then(tabJson => { debugger var billNums = ''; var invoiceCodes = ''; var invoiceNums = ''; if (tabJson && tabJson.length > 0) { this.xlsxJson = tabJson this.fileList = this.xlsxJson[0].sheet this.fileList.forEach((item, index, arr) => { if(item['运单编号']!=null && item['运单编号']!='' && typeof item['运单编号']!='undefined'){ billNums+= item['运单编号']+','; } if(item['发票号码']!=null && item['发票号码']!='' && typeof item['发票号码']!='undefined'){ invoiceNums+= item['发票号码']+','; } if(item['发票代码']!=null && item['发票代码']!='' && typeof item['发票代码']!='undefined'){ invoiceCodes+= item['发票代码']+','; } }); } if(billNums!=''){ this.formCondition.waybillNum =billNums.substring(0,billNums.length-1); } if(invoiceNums!=null || invoiceNums!=''){ this.formCondition.invoiceCode =invoiceCodes.substring(0,invoiceCodes.length-1); } if(invoiceCodes!=''){ this.formCondition.invoiceNum =invoiceNums.substring(0,invoiceNums.length-1); } }) }, file2Xce (file) { return new Promise(function (resolve, reject) { const reader = new FileReader() reader.onload = function (e) { const data = e.target.result this.wb = XLSX.read(data, { type: 'binary' }) const result = [] console.log((this.wb.Sheets.Sheet1)['!ref']) var are = (this.wb.Sheets.Sheet1)['!ref']; var areRe = are.replace('A1','A2'); (this.wb.Sheets.Sheet1)['!ref'] = areRe; this.wb.SheetNames.forEach((sheetName) => { result.push({ sheetName: sheetName, sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName]) }) }) resolve(result) } // reader.readAsBinaryString(file.raw) reader.readAsBinaryString(file) // 传统input方法 }) }, // 下载模板 DownloadTemplate() { var url = hostUrl+"noCar/templateDownload?fileName=4" window.location.href= url; }, handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { console.log(file); }, handleSuccess (a) { this.formUserList.file = a.raw; }, // 批量上传模板信息 async batchUpload() { const isLt50M = this.formUserList.file.size / 1024 / 1024 < 50; let extName = this.formUserList.file.name.substring(this.formUserList.file.name.lastIndexOf(".")).toLowerCase(); let AllUpExt = ".xlsx"; if( extName != AllUpExt){ this.$message.error('格式错误!请重新选择'); return false; } if (!isLt50M) { this.$message.error('上传文件大小不能超过50MB!'); return false; } const loading = this.$loading({ lock: true, text: '系统正在努力接收中,过程大概需要几分钟的时间,请您耐心等待...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }); const formData = new FormData(); formData.append('file', this.formUserList.file); const response = await this.$http.post(`noCar/batchImportNocarInvoices`,formData); var {data: { code, msg, data }} = response; if(code === 0 && msg === '1') { loading.close(); this.invoiceTable = response.data.data; this.total = response.data.data.length; }else { loading.close(); this.$message.error('数据存在错误,请检查文件中数据'); } }, // 分页方法 handleSizeChange(val) { this.pagesize = val; this.loadData(); console.log(`每页 ${val} 条`); }, handleCurrentChange(val) { this.current = val; this.loadData(); // console.log(`当前页: ${val}`); }, formartNum(wb){ var sheet = wb['Sheets']['Sheet1']; var replaceTemp = []; debugger; for(var i in sheet){ if(sheet[i]['v'] == '交易金额'||sheet[i]['v'] == "价税合计"||sheet[i]['v'] == "税额"||sheet[i]['v'] == "金额"||sheet[i]['v'] == "税率"){ replaceTemp.push(i.replace(/[0-9]/g,'')); continue; } if(replaceTemp.includes(i.replace(/[0-9]/g,''))){ sheet[i]['t']='n'; } } }, async exportExcel() { let curr = this.current; let pagesize1 = this.pagesize; this.current = 1; this.pagesize = this.total; await this.loadData(); // 设置当前日期 let time = new Date(); //console.log(time); let year = time.getFullYear(); let month = time.getMonth() + 1; let day = time.getDate(); let name = "无车发票查询列表_"+year + "" + month + "" + day; // console.log(name) /* generate workbook object from table */ // .table要导出的是哪一个表格 var wb = XLSX.utils.table_to_book(document.querySelector(".table"),{ raw: true }); this.formartNum(wb); console.log(wb); /* get binary string as output */ var wbout = XLSX.write(wb, { bookType: "xlsx", bookSST: true, type: "array" }); try { // name+'.xlsx'表示导出的excel表格名字 FileSaver.saveAs( new Blob([wbout], { type: "application/octet-stream" }), name + ".xlsx" ); } catch (e) { if (typeof console !== "undefined") console.log(e, wbout); } this.current = curr; this.pagesize = pagesize1; this.loadData(); return wbout; }, } }; </script> <style> .invoice_container { border: 1px solid #d9d9d9; border-radius: 10px; } .invoice_container .title { font-size: 5px; margin-bottom: 20px; } .invoice_container .top { padding-top: 20px; padding-left: 20px; } .invoice_container .text { display: inline-block; color: #000; font-size: 16px ; margin-left: 1%; } .invoice_container .input-demo { display: inline-block; width: 20%; margin-left: 1%; } .invoice_container .block { font-size: 5px; text-align: center; margin-top: 25px; margin-bottom: 25px; } .invoice_container .el-dialog { width: 60%; } .invoice_container .el-dialog__header, .el-dialog__body { padding: 0 20px; } .invoice_container .tou { font-size: 20px; height: 30px; line-height: 30px; padding-top: 15px; } .invoice_container .line { margin-top: 15px; margin-bottom: 15px; width: 100%; height: 2px; background-color: #d9d9d9; } .invoice_container .xinxi { text-align: center; margin: 15px auto; font-size: 18px; } </style>