<template> <div class="billWay_container"> <div class="title"> <el-row> <el-col :span="24"> <div class="demo-input-suffix" style="margin-left: 10px;margin-top: 15px;"> <el-upload :action="url" :http-request="importExcel" list-type="text" :show-file-list="false" > <el-button type="primary">导入参数</el-button> <el-select style="margin-left: 120px;" v-model="noCarWayBill.billwayStatus" placeholder="运单状态"> <el-option v-for="item in tradeStatus" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-upload> </div> <div class="demo-input-suffix" style="margin-top: 5px;"> <el-input placeholder="公司名称" class="input-demo" v-model="noCarWayBill.companyName"></el-input> <el-input placeholder="运单编号" class="input-demo" v-model="noCarWayBill.billNum"></el-input> <el-input placeholder="税号" class="input-demo" v-model="noCarWayBill.taxplayerCode"></el-input> <el-button style="margin-right: 1%;" @click="DownloadTemplate">查询模板下载</el-button> <el-button type="primary" style="margin-left: 1%;" @click="exportExcel">导出报表</el-button> </div> <div class="demo-input-suffix" style="margin-top: 5px;margin-left: 10px;"> <el-date-picker v-model="noCarWayBill.startBegin" type="daterange" value-format="yyyy-MM-dd HH:mm:SS" range-separator="至" start-placeholder="运单上传开始指令始" end-placeholder="运单上传开始指令止"></el-date-picker> <el-date-picker v-model="noCarWayBill.endBegin" type="daterange" value-format="yyyy-MM-dd HH:mm:SS" range-separator="至" start-placeholder="运单上传结束指令始" end-placeholder="运单上传结束指令止"></el-date-picker> <!-- <el-date-picker v-model="noCarWayBill.startEnd" type="date" placeholder="开始指令上传时间止"></el-date-picker> <el-date-picker v-model="noCarWayBill.startBegin" type="date" placeholder="开始指令上传时间始"></el-date-picker> --> <!-- <el-date-picker v-model="noCarWayBill.endBegin" type="date" placeholder="结束指令上传时间始"></el-date-picker> <el-date-picker v-model="noCarWayBill.endEnd" type="date" placeholder="结束指令上传时间止"></el-date-picker> --> <el-button type="success" style="margin-left: 1%;" @click="firstLoadData">查询</el-button> <el-button type="success" style="margin-left: 1%;" @click="updateStatus">更新状态</el-button> </div> </el-col> </el-row> </div> <!-- 表格部分 --> <template> <el-table class="table" v-loading="loading" ref="multipleTable" :data="billWayTable" :height="heightt" border tooltip-effect="dark" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"> </el-table-column> <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="billNum" label="运单编号" show-overflow-tooltip> </el-table-column> <el-table-column prop="taxplayerCode" label="税号" show-overflow-tooltip> </el-table-column> <el-table-column prop="startTime" label="运单开始时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="intfaceStartTime" label="开始指令时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="predictEndTime" label="运单结束时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="interfaceEndTime" label="结束指令时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="sourceAddr" label="运单开始地址" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="destAddr" label="运单结束地址" width="120" 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 label="运单状态" show-overflow-tooltip> <template slot-scope="scope"> <span v-if="scope.row.billwayStatus == 1" style="color: green">未结束</span> <span v-else-if="scope.row.billwayStatus == -2" style="color: red">上传失败</span> <span v-else-if="scope.row.billwayStatus == -3" style="color: red">结束指令上传失败</span> <span v-else-if="scope.row.billwayStatus == 2" style="color: green">开票中</span> <span v-else-if="scope.row.billwayStatus == 3" style="color: green">开票完成</span> <span v-else-if="scope.row.billwayStatus == 4" style="color: red">超时运单</span> </template> </el-table-column> <el-table-column label="是否成功" show-overflow-tooltip> <template slot-scope="scope"> <span v-if="scope.row.billwayStatus == -2 || scope.row.billwayStatus == -3" style="color: red">失败</span> <span v-else-if="scope.row.billwayStatus != -2 && scope.row.billwayStatus != -3" style="color: green">成功</span> </template> </el-table-column> <el-table-column prop="failReason" label="失败原因" show-overflow-tooltip> </el-table-column> <el-table-column prop="updateTime" label="最后更新时间" width="120" show-overflow-tooltip> </el-table-column> <el-table-column prop="hisFlag" label="运单类型" show-overflow-tooltip> <template slot-scope="scope"> <span v-if="scope.row.hisFlag == 0" >实时运单</span> <span v-else-if="scope.row.hisFlag == 1">历史运单</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{ noCarWayBill:{ billNum:'' }, formUserList: { "file": "" }, tradeStatus:[ {"label":"上传失败","value":"-2"}, {"label":"结束指令上传失败","value":"-3"}, {"label":"未结束","value":"1"}, {"label":"开票中","value":"2"}, {"label":"开票完成","value":"3"}, {"label":"超时运单","value":"4"}], multipleSelection: [], optionone: [{ value: 0, label: '实时运单' }, { value: 1, label: '历史运单' }], billWayTable:[], current: 1, pagesize: 8, hightt:'0px', total:'' } }, created() { //设置表格高度 this.heightt = '300px'; 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.noCarWayBill){ formData.append(i,this.noCarWayBill[i]); } const response = await this.$http.post(`noCar/findBillWay`, formData); if (response.data.code === 0) { this.billWayTable = response.data.data.records; this.total = response.data.data.total; } }, importExcel (content) { debugger 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('格式错误!请重新选择') return } this.file2Xce(file).then(tabJson => { var billNums = ''; 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(billNums!=''){ this.noCarWayBill.billNum =billNums.substring(0,billNums.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=5" window.location.href= url; }, handleRemove(file, fileList) { console.log(file, fileList); }, handlePreview(file) { console.log(file); }, handleSuccess (a) { this.formUserList.file = a.raw; }, handleSelectionChange(value){ this.multipleSelection = value; console.log(this.multipleSelection); }, async updateStatus(){ const formData = new FormData(); formData.append('noCarWayBillStr', JSON.stringify(this.multipleSelection)); const response = await this.$http.post(`noCar/updateStatus`,formData); if(response.data.code === 0) { this.loadData(); this.$message({ type: 'success', message: '更新成功' }); }else { this.$message({ type: 'error', message: '更新失败' }); } }, // 分页方法 handleSizeChange(val) { this.pagesize = val; this.loadData(); console.log(`每页 ${val} 条`); }, handleCurrentChange(val) { this.current = val; this.loadData(); // console.log(`当前页: ${val}`); }, // 批量上传模板信息 async batchUpload() { this.fullscreenLoading = true; const formData = new FormData(); formData.append('file', this.formUserList.file); const response = await this.$http.post(`noCar/batchImportNocarBillWay`,formData); var {data: { code, msg, data }} = response; debugger if(code === 0 && msg === '1') { this.fullscreenLoading = false; this.billWayTable = response.data.data; this.total = response.data.data.length; }else { this.fullscreenLoading = false; this.$message.error('数据存在错误,请检查文件中数据'); } }, 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 }); /* 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> .billWay_container { border: 1px solid #d9d9d9; border-radius: 10px; } .billWay_container .title { font-size: 5px; margin-bottom: 20px; } .billWay_container .top { padding-top: 20px; padding-left: 20px; } .billWay_container .text { display: inline-block; color: #000; font-size: 16px ; margin-left: 1%; } .billWay_container .input-demo { display: inline-block; width: 20%; margin-left: 1%; } .billWay_container .block { font-size: 5px; text-align: center; margin-top: 25px; margin-bottom: 25px; } .billWay_container .el-dialog { width: 60%; } .billWay_container .el-dialog__header, .el-dialog__body { padding: 0 20px; } .billWay_container .tou { font-size: 20px; height: 30px; line-height: 30px; padding-top: 15px; } .billWay_container .line { margin-top: 15px; margin-bottom: 15px; width: 100%; height: 2px; background-color: #d9d9d9; } .billWay_container .xinxi { text-align: center; margin: 15px auto; font-size: 18px; } </style>