<template> <el-row class="shipping-ladingBill"> <el-row class="oper-button"> <el-button type="primary" @click="clickZipDownload">{{$t('打包下载')}}</el-button> <el-button type="primary" @click="handleCommand('downloadReceivableList')">{{$t('应收汇总表')}}</el-button> <el-button type="primary" @click="handleCommand('downloadLoadGoodsList')">{{$t('下载已装单')}}</el-button> </el-row> <el-row style="margin-top:15px"> <el-table :data="billData.list" border max-height="500px"> <el-table-column :label="$t('序号')" align="center" width="50" prop="tidanNo" /> <el-table-column :label="$t('订单号')" align="center" prop="orderNo"> <template slot-scope="scope"> <div> {{scope.row.orderNo}} </div> <div style="color:blue;fontWeight:bold;"> {{ scope.row.drawee? scope.row.drawee:''}} </div> <div style="color:red;fontWeight:bold;"> {{ scope.row.applicationInfo? scope.row.applicationInfo : ''}} </div> <div style="color:red;fontWeight:bold;"> {{ scope.row.customsTypeName? scope.row.customsTypeName : ''}} </div> </template> </el-table-column> <el-table-column :label="$t('货物信息')" align="center" prop=""> <template slot-scope="scope"> <section class="table-goodList"> <div v-for="(item, index) in scope.row.orderItemList" :key="index" class="goodList-div"> <p>{{$t('品名')}}:{{$l(item, 'prodTitle')}}</p> <p>{{$t('品牌')}}:【<template v-if="item.brandName">{{item.brandName}}</template> <dict-tag v-else :type="DICT_TYPE.ECW_IS_BRAND" :value="item.feeType" />{{ $t('】') }} </p> <p>{{$t('其他')}}:{{getTotlContent(item)}}</p> </div> </section> </template> </el-table-column> <el-table-column :label="$t('控货')" align="center" prop=""> <template slot-scope="scope"> {{scope.row.isCargoControl ? $t('是') : $t('否') }} </template> </el-table-column> <el-table-column :label="$t('计划箱数')" align="center" prop="num"> <template slot-scope="scope"> {{ scope.row.num }}{{$t('箱')}} </template> </el-table-column> <el-table-column :label="$t('实装箱数')" align="center" prop="loadNum"> <template slot-scope="scope"> {{ scope.row.loadNum }}{{$t('箱')}} </template> </el-table-column> <el-table-column :label="$t('提货点')" align="center" prop="destWarehouse" /> <el-table-column :label="$t('体积')" align="center" prop="loadVolume"> <template slot-scope="scope"> {{ scope.row.loadVolume }}m³ </template> </el-table-column> <el-table-column :label="$t('重量')" align="center" prop="loadWeight"> <template slot-scope="scope"> {{ scope.row.loadWeight }}kg </template> </el-table-column> <el-table-column :label="$t('客户经理')" align="center" prop="salesmanId" /> <el-table-column :label="$t('制作')" align="center" class-name="small-padding fixed-width"> <template slot-scope="scope"> <!-- 0 (未制作提货单) 1(审核中) 2(审核通过) 3(审核拒绝) --> <el-button v-if="scope.row.status === 0" type="text" size="small" @click="handleCommand('makeBill',scope.row)">{{$t('提单制作')}}</el-button> <el-button v-if="scope.row.status === 1" type="text" size="small" @click="handleCommand('queryBill',scope.row)">{{$t('审核中')}}</el-button> <template v-if="scope.row.status === 2"> <el-button type="text" size="small" @click="handleCommand('previewBill',scope.row)" style="color:green">{{$t('已审核通过')}}</el-button> <el-button type="text" size="small" @click="handleCommand('queryBill',scope.row)">{{$t('重新制作')}}</el-button> <el-button type="text" size="small" @click="handleCommand('resetBill',scope.row)" style="color:#333333">{{$t('重置')}}</el-button> </template> <template v-if="scope.row.status === 3"> {{$t('审核拒绝')}} <el-button type="text" size="small" @click="handleCommand('queryBill',scope.row)">{{$t('重新制作')}}</el-button> <el-button type="text" size="small" @click="handleCommand('resetBill',scope.row)" style="color:#333333">{{$t('重置')}}</el-button> </template> </template> </el-table-column> </el-table> </el-row> <el-row> <el-col class="totle-info"> <div>{{$t('总计')}}:{{getSumData}}</div> <div>{{$t('容量')}}:{{calcCapacity}}</div> </el-col> </el-row> <el-dialog :title="dialogCfg.title" :visible.sync="dialogCfg.visible" :width="dialogCfg.width" :fullscreen="dialogCfg.fullscreen" append-to-body class="shippingSea-dialog" @closed="dialogclosed"> <makeLadingBill v-if="dialogCfg.visible && ['makeBill','queryBill','resetBill'].includes(dialogCfg.type)" :currData="currData" :currRow="currRow" :dialogCfg="dialogCfg" @closeDialog="closeDialog" :selfNo="shipmentObj.selfNo" /> <previewBill v-if="dialogCfg.type === 'previewBill'" :contentHtml="currData.billContent" :currRow="currRow" :type="dialogCfg.type" /> </el-dialog> </el-row> </template> <script> import { getMakeBillList, makeBillService, getBillService, deleteBillService, } from "@/api/ecw/box"; import { getTotlContent, getCapacity, downloadFile, } from "../shippingSea/utils"; import makeLadingBill from "./makeLadingBill.vue"; import previewBill from "./previewBill.vue"; export default { name: "ladingBill", components: { makeLadingBill, previewBill }, props: { shipmentObj: Object, getCabinetName: Function, }, data() { return { billData: { list: [], }, // 提货单数据 currData: {}, // 当前行 currRow: {}, // 弹出类型 dialogCfg: { title: "", type: "", width: "100px", // 是否显示弹出层 visible: false, fullscreen: false, }, // 模板内容 billContent: "", handleType: "", }; }, created() { this.getBillList(); this.buildTitle(); }, methods: { getTotlContent, getBillList() { getMakeBillList({ shipmentId: this.shipmentObj.id }).then((res) => { this.billData = res.data; }); }, buildTitle() { const cabinetLabel = this.getCabinetName(this.shipmentObj.cabinetId); /* const title = `查看提单 ${this.shipmentObj.selfNo ?? ""} 柜号:${ this.shipmentObj.cubNo ?? "" } 柜型:${cabinetLabel}`; */ const title = this.$t( "查看提单 {selfNo} 柜号:{cubNo} 柜型:{cabinetLabel}", { selfNo: this.shipmentObj.selfNo, cubNo: this.shipmentObj.cubNo, cabinetLabel, } ); this.$set(this.dialogCfg, "title", title); }, closeDialog(type) { this.$set(this.dialogCfg, "visible", false); if (type === "query") { this.getBillList(); } if (type === "close") { this.$emit("closeDialog"); } }, dialogclosed() { if (this.handleType === "resetBill") { this.getBillList(); } }, handleCommand(type, row) { this.handleType = type; switch (type) { case "previewBill": this.getBill(row); break; case "makeBill": this.makeBill(row); break; case "queryBill": this.getBill(row); break; case "resetBill": // 先删除,在创建 deleteBillService(row.id).then((res) => { const { code } = res; if (code === 0) { this.makeBill(row); } }); break; case "downloadLoadGoodsList": downloadFile( type, { shipmentId: this.shipmentObj.id }, this.$t("已装单") + `(${this.shipmentObj.selfNo}).xlsx`, "xlsx" ); return; case "downloadReceivableList": downloadFile( type, { shipmentId: this.shipmentObj.id }, this.$t("应收汇总表") + `(${this.shipmentObj.selfNo}).xlsx`, "xlsx" ); return; } this.currRow = row; this.$set(this.dialogCfg, "type", type); this.$set(this.dialogCfg, "width", "1200px"); this.$set(this.dialogCfg, "visible", true); }, makeBill(row) { makeBillService({ orderId: row.orderId, shipmentId: this.shipmentObj.id, }).then((res) => { const { data } = res; const { titleZh = "", contentZh = "" } = data?.ladingTemplate ?? {}; let billContent = `${titleZh}${data.orderInfo}${contentZh}`; this.currData = { billContent, orderNo: this.currRow.orderNo, }; }); }, getBill(row) { getBillService({ id: row.id }).then((res) => { const { data } = res; this.currData = { billContent: data?.billContent ?? "", orderNo: this.currRow.orderNo, bpmProcessId: data.bpmProcessId, }; }); }, clickZipDownload() { downloadFile( "zipDownload", { shipmentId: this.shipmentObj.id }, this.shipmentObj.selfNo + ".zip", "zip" ); }, }, computed: { /* 总计 */ getSumData() { return `${this.billData.totalNum ?? 0}${this.$t("箱")} ${ this.billData.totalVolume ?? 0 }m³ ${this.billData.totalWeight ?? 0}kg`; }, /* 容量 */ calcCapacity() { const { cabinet } = this.billData; return getCapacity(cabinet); }, }, }; </script> <style lang="scss" scoped> .shipping-ladingBill { .oper-button { text-align: right; } .table-goodList { p { margin: 0; } .goodList-div { border-bottom: 1px solid #e6ebf5; > p { text-align: left; } > p:last-child { > span { margin-right: 5px; } } } > div:last-child { border-bottom: none; } } .totle-info { font-size: 20px; margin-top: 15px; } } </style>