<template> <div class="table-container"> <div> <el-form :inline="true" :model="queryInfo" class="demo-form-inline"> <el-form-item label=""> <el-input size="medium" v-model="queryInfo.clientCode" class="" placeholder="客户编码"></el-input> </el-form-item> <el-form-item label=""> <el-input size="medium" v-model="queryInfo.billNo" class="" placeholder="主单号"></el-input> </el-form-item> <el-form-item label=""> <el-input size="medium" v-model="queryInfo.orderNo" placeholder="订单号"></el-input> </el-form-item> <el-form-item label=""> <el-select size="medium" :clearable='true' v-model="queryInfo.orderType" placeholder="订单类型"> <el-option v-for="item in ordertypes" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <!-- <el-form-item label=""> <el-select size="medium" v-model="queryInfo.apptype" placeholder="报送类型"> <el-option v-for="item in apptypes" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label=""> <el-select size="medium" v-model="queryInfo.appstatus" placeholder="报关状态"> <el-option v-for="item in appstatuss" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> --> <el-form-item> <div class="block"> <el-date-picker style="background: none" size="medium" v-model="value2" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss" :picker-options="pickerOptions"> </el-date-picker> </div> </el-form-item> <el-form-item> <el-button size="medium" @click="getList" style="background: none">查询</el-button> </el-form-item> <!-- <el-form-item> <el-upload class="upload-demo" action="" :before-upload="beforeUpload" :http-request="uploadFile" :show-file-list="false"> <el-button size="medium" type="primary">导入订单</el-button> </el-upload> </el-form-item>--> <el-form-item> <el-button size="medium" @click="batchDelOrderByBeans" type="danger">批量删除</el-button> </el-form-item> <el-form-item> <el-button size="medium" @click="batchDelExt2" type="danger">主单号批量删除</el-button> </el-form-item> </el-form> </div> <div> <el-radio-group v-model="cebType"> <el-radio :label="303">订单申报</el-radio> <el-radio :label="505">运单申报</el-radio> <el-radio :label="603">清单申报</el-radio> <el-radio :label="607">总分单申报</el-radio> </el-radio-group> </div> <div style="margin-bottom: 20px"> <el-row :gutter="24"> <el-col :span="3"> <el-button size="medium" @click="batchDecList" style="background: none">列表申报</el-button> </el-col> <el-col :span="3"> <el-upload class="upload-demo" action="" :before-upload="beforeUpload" :http-request="batchDecImport" :show-file-list="false"> <el-button size="medium" style="background: none">导入申报</el-button> </el-upload> </el-col> <el-col :span="3"> <el-button size="medium" @click="batchDecBillNo" style="background: none">主单申报</el-button> </el-col> </el-row> </div> <el-table :data="tableData" style="width: 100%" row-key="guid" :expand-row-keys="expandedRowKeys" @selection-change="handleSelectionChange" border stripe > <el-table-column type="expand" label="详细信息"> <template v-slot:default="{ row }"> <el-table :data="row.exportBodyList" style="width: 85%;margin-left: 45px" row-key="id" stripe > <el-table-column type="index" label="序号" width="50" align="center"/> <el-table-column prop="itemNo" label="企业商品货号" /> <el-table-column prop="itemName" label="企业商品名称" /> <el-table-column prop="itemDescribe" label="企业商品描述" /> <el-table-column prop="barCode" label="条形码" /> <el-table-column prop="unit" label="计量单位" /> <el-table-column prop="currency" label="币制" /> <el-table-column prop="qty" label="数量" /> <el-table-column prop="price" label="单价" /> <el-table-column prop="totalPrice" label="总价" /> <el-table-column prop="note" label="备注" /> </el-table> </template> </el-table-column> <el-table-column type="selection" width="55"></el-table-column> <el-table-column prop="clientCode" label="客户编号" width="180"></el-table-column> <el-table-column prop="billNo" label="主单号" width="180"></el-table-column> <el-table-column prop="orderNo" label="订单编号" width="180"></el-table-column> <el-table-column prop="orderType" label="订单类型" width="120"> <template slot-scope="scope"> <span v-if="scope.row.orderType==='E'"> B2C </span> <span v-else-if="scope.row.orderType==='B'"> B2B </span> <span v-else> 海外仓 </span> </template> </el-table-column> <!-- <el-table-column prop="apptype" label="报送类型" width="120"> <template slot-scope="scope"> <span v-if="scope.row.apptype==='1'"> 新增 </span> <span v-else> 变更 </span> </template> </el-table-column> <el-table-column prop="apptime" label="报送时间" width="180"></el-table-column> <el-table-column prop="appstatus" label="报送状态" width="120"> <template slot-scope="scope"> <span v-if="scope.row.appstatus==='1'"> 暂存 </span> <span v-else> 申报 </span> </template> </el-table-column> --> <el-table-column prop="baseCustomerConfig.ebpname" label="电商平台" width="180"></el-table-column> <el-table-column prop="goodsValue" label="商品金额" width="120"></el-table-column> <el-table-column prop="freight" label="运杂费" width="120"></el-table-column> <el-table-column prop="note" label="备注" width="180"></el-table-column> <el-table-column fixed="right" label="操作" width="200" show-overflow-tooltip> <template slot-scope="scope"> <el-button type="text" size="small" @click="sendorder(scope.row)">申报</el-button> <el-button type="text" size="small" @click="deleteOrder(scope.row)">删除</el-button> <el-button type="text" @click="selectDecRec(scope.row)">申请回执查询</el-button> </template> </el-table-column> </el-table> <el-dialog :visible.sync="dialogTableVisible"> <template slot="title"> {{ decRecOrderNo }} </template> <el-table :data="decRecData"> <el-table-column property="cebType" label="申报类型"> <template slot-scope="scope"> <span v-if="scope.row.cebType==='303'"> 订单 </span> <span v-else-if="scope.row.cebType==='505'"> 运单 </span> <span v-else-if="scope.row.cebType==='603'"> 清单 </span> <span v-else-if="scope.row.cebType==='607'"> 总分单 </span> <span v-else></span> </template> </el-table-column> <el-table-column property="appType" label="订单报送类型"> <template slot-scope="scope"> <span v-if="scope.row.appType==='1'"> 新增 </span> <span v-else-if="scope.row.appType==='2'"> 变更 </span> <span v-else></span> </template> </el-table-column> <el-table-column property="appTime" label="订单报送时间"> <template slot-scope="scope"> {{ formatDate(scope.row.appTime) }} </template> </el-table-column> <el-table-column property="appStatus" label="订单报送状态"> <template slot-scope="scope"> <span v-if="scope.row.appStatus==='1'"> 暂存 </span> <span v-else-if="scope.row.appStatus==='2'"> 申报 </span> <span v-else></span> </template> </el-table-column> <el-table-column property="returnStatus" label="回执状态"> <template slot-scope="scope"> <span v-if="scope.row.returnStatus === '1'"> 电子口岸已暂存 </span> <span v-else-if="scope.row.returnStatus === '2'"> 电子口岸申报中 </span> <span v-else-if="scope.row.returnStatus === '3'"> 发送海关成功 </span> <span v-else-if="scope.row.returnStatus === '4'"> 发送海关失败 </span> <span v-else-if="scope.row.returnStatus === '100'"> 海关退单 </span> <span v-else-if="scope.row.returnStatus === '399'"> 海关退单 </span> <span v-else></span> </template> </el-table-column> <el-table-column property="returnTime" label="回执时间"> <template slot-scope="scope"> <span v-if="scope.row.returnTime !==null && scope.row.returnTime !==''"> {{ formatDate(scope.row.returnTime) }} </span> <span v-else></span> </template> </el-table-column> <el-table-column property="returnInfo" label="回执信息" show-overflow-tooltip></el-table-column> </el-table> </el-dialog> <div class="block"> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="queryInfo.pageNum" :page-sizes="[20, 30, 40, 100]" :page-size="queryInfo.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> </div> </template> <script> import {sendOrder,selectLists,deleteOrder,batchDelOrderByBeans,batchDelBillNo, batchDecImport,batchDecList,batchDecBillNo,selectDecRec} from '../../api/consigner/exportOrder' export default { data() { return { // apptypes: [ // { // value: '1', // label: '新增' // }, { // value: '2', // label: '变更' // } // ], // appstatuss: [ // { // value: '1', // label: '暂存' // }, { // value: '2', // label: '申报' // } // ], ordertypes: [ { value: 'E', label: 'B2C出口订单' }, { value: 'B', label: 'B2B出口订单' }, { value: 'W', label: '海外仓订仓单' } ], tableData: [], selectedRows: [], expandedRowKeys: [], queryInfo:{ // appstatus:'', // apptype:'', orderNo:'', orderType:'', clientCode:'', billNo:'', startTime:'', endTime:'', pageNum:1, pageSize:20 }, total:0, pickerOptions: { shortcuts: [{ text: '最近一周', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); picker.$emit('pick', [start, end]); } }, { text: '最近一个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); picker.$emit('pick', [start, end]); } }, { text: '最近三个月', onClick(picker) { const end = new Date(); const start = new Date(); start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); picker.$emit('pick', [start, end]); } }] }, value2:'', transformedData:'', cebType:'', decRecData:[], dialogTableVisible: false, decRecOrderNo:'' }; }, mounted() { // this.expandedRowKeys = this.tableData.map(item => item.guid); this.getList(); }, methods: { // 批量申报 batchDecList(){ if(this.selectedRows.length!==0){ if(this.cebType.length !== 0){ this.transformedData = this.selectedRows.map(item => ({ orderNo: item.orderNo, clientCode: item.clientCode, cebType: this.cebType })); batchDecList(this.transformedData).then((response)=>{ const res=response.data; if (res.code !== '200') { return this.$message.error('总分单批量申报失败!') } this.$message.success(res.msg); this.getList(); }).catch(error=>{ this.$message.error(error.toString()) }) }else{ this.$message.error('请选勾取需要申报的类型!'); } }else{ this.$message.error('请选勾取需要申报的信息!'); } }, // 导入申报 batchDecImport({ file, onSuccess, onError }){ if(this.cebType.length === 0){ this.$message.error('请选勾取需要申报的类型!'); return; } // 生成 FormData 对象 const formData = new FormData(); formData.append('file', file); formData.append('cebType', this.cebType); batchDecImport(formData).then((response) => { const res = response.data if (res.code !== '200') { return this.$message.error(res.msg); } this.$message.success(res.msg); this.getList(); onSuccess(response.data); // 调用 onSuccess 回调通知上传成功 }).catch(error => { // 关闭加载 this.$message.error(error.toString()) onError(error); // 调用 onError 回调通知上传失败 }) }, // 主单申报 batchDecBillNo(){ if(this.cebType.length === 0){ this.$message.error("请选勾取需要申报的类型"); return; } if (this.queryInfo.billNo.length === 0){ this.$message.error("请在主单号栏输入主单号"); return; } const billNo = this.queryInfo.billNo; const cebType = this.cebType; batchDecBillNo({billNo, cebType}).then((response)=>{ const res=response.data; if (res.code !== '200') { return this.$message.error(res.msg) } this.$message.success(res.msg); this.getList(); }).catch(error=>{ this.$message.error(error.toString()) }) }, //导入订单excel beforeUpload(file) { // 检查文件类型 const isExcel = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel'; if (!isExcel) { this.$message.error('上传文件只能是 Excel 格式!'); return false; // 取消文件上传 } return true; // 允许上传 }, //订单申报 sendorder(row){ if(this.cebType.length === 0){ this.$message.error('请选勾取需要申报的类型!'); return; } const clientCode = row.clientCode; const orderNo = row.orderNo; this.transformedData = [{ clientCode: clientCode, orderNo: orderNo, cebType: this.cebType }]; batchDecList(this.transformedData).then((response)=>{ const res=response.data; if (res.code !== '200') { return this.$message.error(res.msg) } this.$message.success(res.msg); this.getList(); }).catch(error=>{ this.$message.error(error.toString()) }) }, // 订单删除 deleteOrder(row){ this.$confirm('此操作将永久删除该订单, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const clientCode = row.clientCode; const orderNo = row.orderNo; deleteOrder({clientCode,orderNo}).then((response) => { const res = response.data; const code = res.code; const msg = res.msg; if (code !== '200'){ return this.$message.error(msg); } this.$message.success(`订单删除成功`); this.getList(); }).catch(error => { this.$message.error(error.toString()) }) }).catch(() => { }); }, // 根据主单号删除数据 batchDelExt2(){ if (this.queryInfo.billNo.length === 0){ this.$message.error("请在主单号栏输入主单号"); return; } this.$confirm('此操作将永久批量删除所选主单号订单, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { const billNo = this.queryInfo.billNo; console.log(billNo) batchDelBillNo({billNo}).then((response) => { const res = response.data; const code = res.code; const msg = res.msg; if (code !== '200'){ this.$message.error(msg); return; } this.$message.success("批量删除成功"); this.getList(); }).catch(error=>{ this.$message.error(error.toString()) }) }).catch(() => { }) }, // 订单批量删除 batchDelOrderByBeans(){ if (this.selectedRows.length===0){ this.$message.error('请勾选需要删除的订单信息!'); return; } this.$confirm('此操作将永久删除所选订单, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { batchDelOrderByBeans(this.selectedRows).then((response) => { const res = response.data; const code = res.code; const msg = res.msg; const data = res.data; if (code !== '200'){ this.$message.error(msg); return; } this.$message.success("订单批量删除成功"); this.getList(); }).catch(error => { this.$message.error(error.toString()); }) }) }, //订单列表查询 getList(){ if(this.value2 !== null && this.value2 !== ""){ this.queryInfo.startTime = this.value2[0]; this.queryInfo.endTime = this.value2[1]; } if(this.value2 === null){ this.queryInfo.startTime = '', this.queryInfo.endTime = '' } selectLists(this.queryInfo).then((response) => { const res = response.data if (res.code !== '200') { return this.$message.error('获取消息收发记录,失败!') } // 获取列表数据 this.tableData = res.data.list // 获取列表的总记录数 this.total = res.data.total this.$message.success('获取消息收发记录,成功!'); }).catch(error => { // 关闭加载 this.$message.error(error.toString()) }) }, // 申请回执查询 selectDecRec(row){ const guid = row.guid selectDecRec({guid}).then((response) => { const res = response.data if(res.code !== '200'){ return this.$message.error(res.msg) } this.decRecOrderNo = row.orderNo this.decRecData = res.data this.dialogTableVisible = true this.$message.success(res.msg) }).catch(error => { this.$message.error(error.toString) }) }, // 日期格式化 formatDate(isoString) { const date = new Date(isoString); // 获取年、月、日 const year = date.getFullYear(); const month = ('0' + (date.getMonth() + 1)).slice(-2); // 月份从0开始,需要加1 const day = ('0' + date.getDate()).slice(-2); // 获取小时、分钟、秒 const hours = ('0' + date.getHours()).slice(-2); const minutes = ('0' + date.getMinutes()).slice(-2); const seconds = ('0' + date.getSeconds()).slice(-2); // 返回格式化的日期字符串 return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, //分页 handleSizeChange(val) { this.queryInfo.pageSize=val; this.getList(); }, //分页 handleCurrentChange(val) { this.queryInfo.pageNum=val; this.getList(); }, //多选 handleSelectionChange(selection) { this.selectedRows = selection; } } }; </script> <style scoped> .el-input__inner{ background-color: #f5f7fd; } .el-table { border: 1px solid #ddd; } .el-table th { background-color: #f0f0f0; } .el-table tr.el-table__row--striped > td { background-color: #f8f8f8; } .el-table td, .el-table th { border: 1px solid #ddd; padding: 8px; } </style>