diff --git a/seller/src/views/order/order/orderDetail.vue b/seller/src/views/order/order/orderDetail.vue index 638c4cb3..5364d3d8 100644 --- a/seller/src/views/order/order/orderDetail.vue +++ b/seller/src/views/order/order/orderDetail.vue @@ -1,210 +1,294 @@ @@ -592,79 +692,70 @@ import * as API_Logistics from "@/api/logistics"; import * as RegExp from "@/libs/RegExp.js"; import multipleMap from "@/views/my-components/map/multiple-map"; - - +import vueQr from "vue-qr"; +import { printElement } from "@/utils/print"; export default { name: "orderDetail", components: { multipleMap, + "vue-qr": vueQr, }, data () { return { - loading:false, typeList: [], showPrices: false, - printHiddenFlag: false,//隐藏信息 - printInfoObj: { - id: "printInfo",//要打印的id名 无#号 - popTitle: ' ',//页眉标题 默认浏览器标题 空字符串时显示undefined 使用html语言 - extraHead: '',//头部文字 默认空 - }, - submitLoading: false, // 添加或编辑提交状态 - logisticsType: 'KUAIDINIAO', //物流类型 - - someJSONdata: '', + printHiddenFlag: false, + loading: false, + logisticsType: "KUAIDINIAO", + someJSONdata: "", faceSheetForm: { - logisticsId: '', + logisticsId: "", }, faceSheetFormValidate: { - logisticsId: [ - { required: true, message: "请选择物流公司" }, - ], + logisticsId: [{ required: true, message: "请选择物流公司" }], }, - facesheetFlag: false, //电子面单标识 - orderLogModal: false, //弹出调整价格框 - logisticsModal: false, //弹出查询物流框 - orderDeliverModal: false, //订单发货弹出框 - orderTakeModal: false, //订单核销弹出框 - checkedLogistics: [], //选中的物流公司集合 - allowOperation: {}, //订单可才做选项 + facesheetFlag: false, + logisticsModal: false, + orderDeliverModal: false, logisticsInfo: { shipper: "", - }, //物流信息 + }, + packageTraceList: [], + sellerRemarkModal: false, + addr: "", + regionId: "", + + orderLogModal: false, + checkedLogistics: [], //选中的物流公司集合 + allowOperation: {}, //订单可才做选项 sn: "", //订单编号 orderInfo: { - // 订单信息 order: { priceDetailDTO: {}, }, }, - modal: false, //弹出调整价格框 - printModal: false,//弹出打印发货单 - sellerRemarkModal: false,//弹出编辑订单备注 + modal: false, //调整价格表单 modifyPriceForm: { orderPrice: 0, }, - //修改订单备注表单 modifyRemarkForm: { - sellerRemark: 0, - }, - //订单核销表单 - orderTakeForm: { - qrCode: "", - }, - //验证要调整的订单金额 - orderTakeValidate: { - qrCode: [ - { required: true, message: "订单核销码不能为空", trigger: "blur" }, - ], + sellerRemark: "", }, //订单发货 orderDeliveryForm: { logisticsNo: "", //发货单号 logisticsId: "", //物流公司 }, + partDeliveryModal: false, + partDeliverySubmitting: false, + partDeliveryForm: { + logisticsNo: "", + logisticsId: "", + selectedOrderItemIds: [], + deliveryNumMap: {}, + }, + orderPackages: [], //验证要调整的订单金额 modifyPriceValidate: { orderPrice: [ @@ -676,7 +767,16 @@ export default { }, ], }, - addressModal: false, //弹出修改收件信息框 + + addressModal: false, + printModal: false, + orderTakeModal: false, + orderTakeForm: { + qrCode: "", + }, + orderTakeValidate: { + qrCode: [{ required: true, message: "订单核销码不能为空", trigger: "blur" }], + }, //收件地址表单 addressForm: { consigneeName: "", @@ -686,9 +786,12 @@ export default { consigneeAddressIdPath: "", }, orderDeliverFormValidate: { - logisticsNo: [ - { required: true, message: "发货单号不能为空", trigger: "change" }, - ] + logisticsNo: [{ required: true, message: "发货单号不能为空", trigger: "change" }], + logisticsId: [{ required: true, message: "请选择物流公司", trigger: "blur" }], + }, + partDeliveryRules: { + logisticsNo: [{ required: true, message: "发货单号不能为空", trigger: "change" }], + logisticsId: [{ required: true, message: "请选择物流公司", trigger: "change" }], }, addressRule: { consigneeName: [ @@ -707,262 +810,428 @@ export default { ], }, - columns: [ - { - title: "商品", - key: "goodsName", - minWidth: 400, - slot: "goodsSlot", - }, - { - title: "优惠", - key: "num", - minWidth: 100, - render: (h, params) => { - let resultText = ""; - if (params.row.promotionType) { - let type = params.row.promotionType.split(","); - if (type.indexOf("PINTUAN") != -1) { - resultText += "拼团 "; - } - if (type.indexOf("SECKILL") != -1) { - resultText += "秒杀 "; - } - if (type.indexOf("COUPON") != -1) { - resultText += "优惠券 "; - } - if (type.indexOf("FULL_DISCOUNT") != -1) { - resultText += "满减 "; - } - if (type.indexOf("POINTS_GOODS") != -1) { - resultText += "积分商品 "; - } - } - if (resultText === "") { - resultText = "暂无未参与任何促销"; - } - return h("div", resultText); - }, - }, - { - title: "单价", - key: "unitPrice", - minWidth: 100, - render: (h, params) => { - if (!params.row.unitPrice) { - return h("div", this.$options.filters.unitPrice(0, "¥")); - } - return h( - "div", - this.$options.filters.unitPrice( - params.row.unitPrice, - "¥" - ) - ); - }, - }, - - { - title: "数量", - key: "num", - minWidth: 80, - }, - { - title: "小计", - key: "subTotal", - minWidth: 100, - render: (h, params) => { - return h( - "div", - this.$options.filters.unitPrice(params.row.flowPrice, "¥") - ); - }, - }, - ], - data: [], // 商品表单数据 - orderLogColumns: [ - // 表头 - { - title: "时间", - key: "createTime", - minWidth: 120, - }, - { - title: "操作者", - key: "operatorName", - minWidth: 120, - }, - { - title: "操作类型", - key: "operatorType", - minWidth: 120, - }, - { - title: "日志", - key: "message", - minWidth: 200, - }, - ], - // 订单日志数据 - orderLogData: [], - - // 分包裹发货 - groupShipModal: false, - shipLoading: true, - groupOrderDeliveryForm: { - logisticsNo: "", //发货单号 - logisticsId: "", //物流公司 - }, - groupOrderDeliverFormValidate: { - logisticsNo: [{ required: true, message: "发货单号不能为空", trigger: "change" },], - logisticsId: [{ required: true, message: "请选择物流公司", trigger: "blur" },], - }, - // 选择要发货的商品 - selectGroupShipGoods: [], - groupShipColumns: [ - {type: "selection", width: 60, align: "center",}, - {title: "商品", key: "goodsName", width: 300, slot: "goodsSlot",}, - { - title: "单价", - key: "unitPrice", - slot: "priceSlot", - width: 100, - render: (h, params) => { - if (!params.row.unitPrice) { - return h("div", this.$options.filters.unitPrice(0, "¥")); - } - return h("div", this.$options.filters.unitPrice(params.row.unitPrice, "¥")); - }, - }, - {title: "数量", key: "num", slot: "numSlot", width: 120,}, - { - title: "已发包裹", - key: "deliverNumber", - render: (h, params) => { - return h("div", params.row.deliverNumber ? params.row.deliverNumber : 0); - }, - }, - { - title: "小计", - key: "subTotal", - width: 120, - render: (h, params) => { - return h("div", this.$options.filters.unitPrice(params.row.subTotal, "¥")); - }, - }, - ], - orderPackage: [], - packageTraceList: [] + data: [], // 表单数据 }; }, + computed: { + canPartDelivery() { + if (!this.allowOperation.ship) return false; + const status = this.orderInfo.order && this.orderInfo.order.orderStatus; + return ( + this.$route.query.orderType !== "VIRTUAL" && + ["UNDELIVERED", "PARTS_DELIVERED"].includes(status) && + this.deliverableOrderItems.length > 0 + ); + }, + deliverableOrderItems() { + return (this.data || []).filter((item) => { + if (!this.getOrderItemId(item)) return false; + return this.getRemainingDeliveryNum(item) > 0; + }); + }, + canOrderTake() { + if (this.allowOperation.take) return true; + const order = this.orderInfo?.order; + if (!order) return false; + const isVirtual = + this.$route.query.orderType === "VIRTUAL" || + order.orderType === "VIRTUAL"; + return isVirtual && order.orderStatus === "TAKE"; + }, + }, + watch: { + $route (to, from) { + this.$router.go(0); + }, + }, methods: { - // 选中 - selectGroupShipGoodsMethods (selected) { - this.selectGroupShipGoods = selected; + getPromotionText(row) { + let resultText = ""; + if (row && row.promotionType) { + const type = row.promotionType.split(","); + if (type.indexOf("PINTUAN") != -1) resultText += "拼团 "; + if (type.indexOf("SECKILL") != -1) resultText += "秒杀 "; + if (type.indexOf("COUPON") != -1) resultText += "优惠券 "; + if (type.indexOf("FULL_DISCOUNT") != -1) resultText += "满减 "; + if (type.indexOf("POINTS_GOODS") != -1) resultText += "积分商品 "; + } + return resultText === "" ? "暂无未参与任何促销" : resultText; }, - // 分包裹发货 - groupShip () { - this.groupShipModal = true; - this.getLogisticsList(); + gotoHomes () { + return false }, - // 分页获取物流公司 - getLogisticsList () { + getOrderItemId(item) { + return item && (item.id || item.orderItemId || item.sn); + }, + getLogisticsId(item) { + return item && (item.logisticsId || item.id); + }, + getLogisticsName(item) { + return item && (item.logisticsName || item.name || item.logisticsCompany || item.logisticsId || item.id); + }, + parseOrderItemSpecs(specs) { + if (!specs) return {}; + try { + return JSON.parse(specs); + } catch (e) { + return {}; + } + }, + getShippedPackageNum(item) { + if (item != null && item.deliverNumber != null && item.deliverNumber !== "") { + const direct = Number(item.deliverNumber); + if (Number.isFinite(direct)) return direct; + } + const orderItemId = this.getOrderItemId(item); + if (!orderItemId || !this.orderPackages.length) return 0; + let total = 0; + this.orderPackages.forEach((pkg) => { + (pkg.orderPackageItemList || []).forEach((pkgItem) => { + if (this.isPackageItemMatch(item, pkgItem)) { + total += Number(pkgItem.deliverNumber ?? pkgItem.num ?? 0); + } + }); + }); + return total; + }, + isPackageItemMatch(orderItem, pkgItem) { + const orderKeys = [ + this.getOrderItemId(orderItem), + orderItem?.sn, + orderItem?.id, + orderItem?.orderItemId, + ] + .filter(Boolean) + .map(String); + const pkgKeys = [ + pkgItem.orderItemSn, + pkgItem.orderItemId, + pkgItem.orderItemsId, + pkgItem.id, + pkgItem.sn, + ] + .filter(Boolean) + .map(String); + return pkgKeys.some((key) => orderKeys.includes(key)); + }, + getRemainingDeliveryNum(item) { + const total = Number(item && item.num) || 0; + return Math.max(total - this.getShippedPackageNum(item), 0); + }, + getPartDeliverySubtotal(row) { + const id = this.getOrderItemId(row); + const qty = Number(this.partDeliveryForm.deliveryNumMap[id]) || 0; + const unitPrice = Number(row.unitPrice) || 0; + return unitPrice * qty; + }, + initPartDeliveryNumMap() { + const map = {}; + this.deliverableOrderItems.forEach((item) => { + const id = this.getOrderItemId(item); + if (id) { + map[id] = this.getRemainingDeliveryNum(item); + } + }); + this.partDeliveryForm.deliveryNumMap = map; + }, + refreshPartDeliveryAfterSubmit() { + this.partDeliveryModal = false; + this.loading = true; + return Promise.all([ + API_Order.getOrderDetail(this.sn).then((res) => { + if (res.success) { + this.orderInfo = res.result; + this.allowOperation = res.result.allowOperationVO; + this.data = res.result.orderItems; + this.typeList = res.result.order.priceDetailDTO.discountPriceDetail + ? JSON.parse(JSON.stringify(res.result.order.priceDetailDTO.discountPriceDetail)) + : []; + this.getContentPrice(); + this.getOrderPrice(); + } + }), + this.getOrderPackages(), + ]).finally(() => { + this.loading = false; + this.partDeliveryForm.logisticsNo = ""; + this.partDeliveryForm.logisticsId = ""; + this.partDeliveryForm.selectedOrderItemIds = []; + this.initPartDeliveryNumMap(); + this.$nextTick(() => { + this.$refs.partDeliveryTable?.clearSelection(); + this.$refs.partDeliveryForm?.clearValidate(); + }); + }); + }, + handlePartDeliveryNumChange(row, value) { + const id = this.getOrderItemId(row); + if (!id) return; + const num = Number(value); + if (!Number.isFinite(num) || num < 1) return; + if (!this.partDeliveryForm.selectedOrderItemIds.includes(id)) { + this.partDeliveryForm.selectedOrderItemIds = [ + ...this.partDeliveryForm.selectedOrderItemIds, + id, + ]; + this.$nextTick(() => { + this.$refs.partDeliveryTable?.toggleRowSelection(row, true); + }); + } + }, + isPartDeliveryRowSelectable(row) { + return this.getRemainingDeliveryNum(row) > 0; + }, + handlePartDeliverySelectionChange(selection) { + const selectedIds = []; + selection.forEach((item) => { + const id = this.getOrderItemId(item); + if (!id) return; + selectedIds.push(id); + if (this.partDeliveryForm.deliveryNumMap[id] == null) { + this.partDeliveryForm.deliveryNumMap[id] = this.getRemainingDeliveryNum(item); + } + }); + this.partDeliveryForm.selectedOrderItemIds = selectedIds; + }, + isPartDeliveryItemSelected(item) { + const id = this.getOrderItemId(item); + return !!id && this.partDeliveryForm.selectedOrderItemIds.includes(id); + }, + buildPartDeliveryDTOList() { + return this.partDeliveryForm.selectedOrderItemIds + .map((orderItemId) => ({ + orderItemId, + deliveryNum: Number(this.partDeliveryForm.deliveryNumMap[orderItemId]), + })) + .filter((item) => item.orderItemId && item.deliveryNum > 0); + }, + resetPartDeliveryForm() { + this.partDeliveryForm = { + logisticsNo: "", + logisticsId: "", + selectedOrderItemIds: [], + deliveryNumMap: {}, + }; + this.$nextTick(() => { + if (this.$refs.partDeliveryForm) { + this.$refs.partDeliveryForm.clearValidate(); + } + if (this.$refs.partDeliveryTable) { + this.$refs.partDeliveryTable.clearSelection(); + } + }); + }, + openPartDelivery() { + this.resetPartDeliveryForm(); + this.partDeliveryModal = true; + this.getCheckedLogistics(); + this.getOrderPackages(); + }, + getCheckedLogistics() { API_Order.getLogisticsChecked().then((res) => { if (res.success) { - this.checkedLogistics = res.result; + this.checkedLogistics = Array.isArray(res.result) ? res.result : []; } }); }, - changeNum(number, index) { - const current = this.data[index] - if (this.selectGroupShipGoods.length) { - this.selectGroupShipGoods.forEach(item => { - if (item.skuId === current.skuId) { - item.canNum = number - } + getOrderPackages() { + return API_Order.getPackage(this.sn).then((res) => { + if (res.success) { + this.orderPackages = Array.isArray(res.result) ? res.result : []; + } + this.initPartDeliveryNumMap(); + }); + }, + submitPartDelivery() { + this.$refs.partDeliveryForm.validate((valid) => { + if (!valid) return; + const partDeliveryDTOList = this.buildPartDeliveryDTOList(); + if (!partDeliveryDTOList.length) { + this.$Message.error("请选择本次发货商品并填写发货数量"); + return; + } + this.partDeliverySubmitting = true; + API_Order.partDelivery(this.sn, { + orderSn: this.sn, + logisticsNo: this.partDeliveryForm.logisticsNo, + logisticsId: this.partDeliveryForm.logisticsId, + partDeliveryDTOList, }) - } - }, - // 分包裹发货 - confirmShipGroupGoods () { - this.$refs.groupOrderDeliveryForm.validate(async (valid) => { - if (valid) { - if (this.selectGroupShipGoods.length) { - let submit = { - ...this.groupOrderDeliveryForm, - orderSn: this.sn, - partDeliveryDTOList: this.selectGroupShipGoods.map((item) => { - return { - orderItemId: item.id, - deliveryNum: item.canNum ? item.canNum : item.num, - }; - }), - }; - const res = await API_Order.partDelivery(this.sn, submit); + .then((res) => { if (res.success) { - this.$Message.success("发货成功!"); - this.shipLoading = false; - this.getDataDetail(); - this.getOrderPackage(); - this.groupShipModal = false; - this.groupOrderDeliveryForm = [] - } else { - this.shipLoading = false; - this.groupShipModal = true; + this.$Message.success("发货成功"); + this.refreshPartDeliveryAfterSubmit(); } - } else { - this.shipLoading = false; - this.groupShipModal = true; - this.$Message.error("请选择要发货的商品"); - } - } else { - this.shipLoading = false; - } + }) + .finally(() => { + this.partDeliverySubmitting = false; + }); }); }, - // 回调地址信息 - getAddress(val){ - if(val.type === 'select'){ - const paths = val.data.map(item => item.name).join(',') - const ids = val.data.map(item => item.id).join(',') - this.$set(this.addressForm, 'consigneeAddressPath', paths) - this.$set(this.addressForm, 'consigneeAddressIdPath', ids) - } - else{ - this.$set(this.addressForm, 'consigneeAddressPath', val.data.addr) - this.$set(this.addressForm, 'consigneeAddressIdPath', val.data.addrId) - } + // 获取订单详情 + getDataDetail () { + this.loading = true; + API_Order.getOrderDetail(this.sn).then((res) => { + this.loading = false; + if (res.success) { + this.orderInfo = res.result; + this.allowOperation = res.result.allowOperationVO; + this.data = res.result.orderItems || []; + const discountDetail = res.result.order.priceDetailDTO?.discountPriceDetail; + this.typeList = discountDetail + ? JSON.parse(JSON.stringify(discountDetail)) + : []; + this.getContentPrice(); + this.getOrderPrice(); + } + }); }, - - //弹出订单核销框 - orderTake () { - this.orderTakeForm.qrCode = this.orderInfo.order.verificationCode; - this.orderTakeModal = true; + modifyPrice () { + this.modifyPriceForm.orderPrice = this.orderInfo.order.flowPrice; + this.modal = true; }, - //打印发货单 - printOrder () { - this.printModal = true; - }, - printHiddenInfo () { - this.printHiddenFlag = !this.printHiddenFlag; - }, - printCancel () { - // this.printHiddenFlag = false; - }, - //订单核销提交 - orderTakeSubmit () { - this.$refs.orderTakeForm.validate((valid) => { + modifyPriceSubmit () { + this.$refs.modifyPriceForm.validate((valid) => { if (valid) { - API_Order.orderTake(this.sn, this.orderTakeForm.qrCode).then( - (res) => { + API_Order.modifyOrderPrice(this.sn, this.modifyPriceForm).then((res) => { + if (res.success) { + this.$Message.success("修改订单金额成功"); + this.modal = false; + this.getDataDetail(); + } + }); + } + }); + }, + modifyRemark () { + this.modifyRemarkForm.sellerRemark = this.orderInfo.order.sellerRemark || ""; + this.sellerRemarkModal = true; + }, + modifyRemarkSubmit () { + this.$refs.modifyRemarkForm.validate((valid) => { + if (valid) { + API_Order.modifyOrderRemark(this.sn, this.modifyRemarkForm).then((res) => { + if (res.success) { + this.$Message.success("编辑订单备注成功"); + this.sellerRemarkModal = false; + this.getDataDetail(); + } + }); + } + }); + }, + checkLogistics () { + this.logisticsModal = true; + if (this.orderPackages.length > 0) { + this.logisticsList(); + } else { + this.logistics(); + } + }, + logisticsList () { + API_Order.getPackage(this.sn).then((res) => { + if (res.success && res.result != null) { + this.packageTraceList = res.result; + } + }); + }, + logistics () { + API_Order.getTraces(this.sn).then((res) => { + if (res.success && res.result != null) { + this.logisticsInfo = res.result; + } + }); + }, + toPrint () { + this.facesheetFlag = true; + API_Logistics.getCheckedOn().then((res) => { + if (res.success) { + this.checkedLogistics = res.result; + this.orderDeliverModal = true; + } + }); + }, + sfPrint () { + API_Order.getOrderFaceSheet(this.sn, this.faceSheetForm).then((res) => { + if (res.success) { + const headers = { + "X-Auth-token": res.result.token, + }; + API_Logistics.getShunFengFaceSheet(res.result.url, headers).then((sheetRes) => { + const blob = new Blob([sheetRes], { + type: "application/pdf;charset=utf-8", + }); + if ("download" in document.createElement("a")) { + const link = document.createElement("a"); + link.download = `${this.orderInfo.order.sn}.pdf`; + link.style.display = "none"; + link.href = URL.createObjectURL(blob); + document.body.appendChild(link); + link.click(); + URL.revokeObjectURL(link.href); + document.body.removeChild(link); + } else { + navigator.msSaveBlob(blob, `${this.orderInfo.order.sn}.pdf`); + } + }); + } + }); + }, + toPrints (printWindow) { + this.orderDeliverModal = false; + if (!this.someJSONdata) { + printWindow && printWindow.close(); + return; + } + const win = printWindow || window.open("", "_blank"); + if (!win) { + this.$Message.error("无法打开打印窗口,请允许浏览器弹窗"); + return; + } + win.document.write(this.someJSONdata); + win.document.close(); + win.focus(); + this.$Message.success("电子面单发货成功"); + this.getDataDetail(); + }, + orderDeliverySubmit () { + if (this.facesheetFlag) { + this.$refs.faceSheetForm.validate((valid) => { + if (valid) { + const printWindow = window.open("", "_blank"); + API_Order.getOrderFaceSheet(this.sn, this.faceSheetForm).then((res) => { + if (res.success && res.result.printTemplate) { + this.someJSONdata = res.result.printTemplate; + this.toPrints(printWindow); + } else { + printWindow && printWindow.close(); + this.$Message.error("电子面单发货失败!"); + } + }).catch(() => { + printWindow && printWindow.close(); + this.$Message.error("电子面单发货失败!"); + }); + } + }); + } else { + this.$refs.orderDeliveryForm.validate((valid) => { + if (valid) { + API_Order.orderDelivery(this.sn, this.orderDeliveryForm).then((res) => { if (res.success) { - this.$Message.success("订单核销成功"); - this.orderTakeModal = false; + this.$Message.success("订单发货成功"); + this.orderDeliverModal = false; this.getDataDetail(); } - } - ); + }); + } + }); + } + }, + getLogisticsSetting () { + API_Logistics.getLogisticsSetting().then((res) => { + if (res.success) { + this.logisticsType = res.result; } }); }, @@ -982,303 +1251,122 @@ export default { } } } - if (this.typeList.length >= 3) { - - this.getContentPrice() + this.getContentPrice(); } }, - //获取订单详细信息 - getDataDetail () { - this.loading = true; - API_Order.getOrderDetail(this.sn).then((res) => { - this.loading = false; - if (res.success) { - this.orderInfo = res.result; - this.allowOperation = res.result.allowOperationVO; - if (res.result.orderItems.length) { - this.data = res.result.orderItems.map((item) => { - return { - ...item, - ___num: item.num, - _disabled: item.deliverNumber >= item.num, - canNum: item.num - item.deliverNumber - }; - }); - } - this.orderLogData = res.result.orderLogs; - this.typeList = JSON.parse(JSON.stringify(res.result.order.priceDetailDTO.discountPriceDetail)); - this.getContentPrice() - this.getOrderPrice() - } - }); - }, - toPrint () { - this.facesheetFlag = true; - API_Logistics.getCheckedOn().then(res => { - if (res.success) { - this.checkedLogistics = res.result; - this.orderDeliverModal = true; - } - }); - }, - // 修改订单金额 - modifyPrice () { - //默认要修改的金额为订单总金额 - this.modifyPriceForm.orderPrice = this.orderInfo.order.flowPrice; - this.modal = true; - }, - //修改订单金额提交 - modifyPriceSubmit () { - this.$refs.modifyPriceForm.validate((valid) => { - if (valid) { - API_Order.modifyOrderPrice(this.sn, this.modifyPriceForm).then( - (res) => { - if (res.success) { - this.$Message.success("修改订单金额成功"); - this.modal = false; - this.getDataDetail(); - } - } - ); - } - }); - }, - modifyRemark () { - this.modifyRemarkForm.sellerRemark = this.orderInfo.order.sellerRemark; - this.sellerRemarkModal = true; - }, - //修改订单备注提交 - modifyRemarkSubmit () { - this.$refs.modifyRemarkForm.validate((valid) => { - if (valid) { - API_Order.modifyOrderRemark(this.sn, this.modifyRemarkForm).then( - (res) => { - if (res.success) { - this.$Message.success("编辑订单备注成功"); - this.sellerRemarkModal = false; - this.getDataDetail(); - } - } - ); - } - }); - }, - getOrderPackage() { - API_Order.getPackage(this.sn).then(res => { - if (res.success) { - this.orderPackage = res.result; - console.log('this.orderPackage',this.orderPackage); - } - }) - }, - //查询物流 - checkLogistics () { - this.logisticsModal = true; - if (this.orderPackage.length > 0) { - this.logisticsList(); + selectedRegion (val) { + if (val.type === "select") { + const paths = val.data.map((item) => item.name).join(","); + const ids = val.data.map((item) => item.id).join(","); + this.addr = paths; + this.regionId = ids; + this.addressForm.consigneeAddressPath = paths; + this.addressForm.consigneeAddressIdPath = ids; } else { - this.logistics(); + this.addr = val.data.addr; + this.regionId = val.data.addrId; + this.addressForm.consigneeAddressPath = val.data.addr; + this.addressForm.consigneeAddressIdPath = val.data.addrId; } }, - logisticsList () { - this.logisticsModal = true; - API_Order.getPackage(this.sn).then((res) => { - if (res.success && res.result != null) { - this.packageTraceList = res.result; - } + //订单日志 + orderLog () { + this.orderLogModal = true; + }, + //订单日志取消 + handelCancel () { + this.orderLogModal = false; + }, + orderTake() { + this.orderTakeForm.qrCode = this.orderInfo.order.verificationCode || ""; + this.orderTakeModal = true; + this.$nextTick(() => { + this.$refs.orderTakeForm?.clearValidate(); }); }, - logistics () { - this.logisticsModal = true; - API_Order.getTraces(this.sn).then((res) => { - if (res.success && res.result != null) { - this.logisticsInfo = res.result; - } - }); - }, - //订单发货 - orderDeliver () { - this.facesheetFlag = false - if (this.logisticsType == 'SHUNFENG') { - this.$Modal.confirm({ - title: "确认发货", - content: "您确认使用顺丰发货 " + this.sn + " 订单?", - loading: true, - onOk: () => { - API_Order.orderShunFengDelivery(this.sn).then((res) => { - if (res.success) { - this.$Modal.remove(); - this.$Message.success("订单发货成功"); - this.getDataDetail() - } - }) - } - }) - } else { - API_Order.getLogisticsChecked().then((res) => { + orderTakeSubmit() { + this.$refs.orderTakeForm.validate((valid) => { + if (!valid) return; + API_Order.orderTake(this.sn, this.orderTakeForm.qrCode).then((res) => { if (res.success) { - this.checkedLogistics = res.result; - this.orderDeliverModal = true; + this.$Message.success("订单核销成功"); + this.orderTakeModal = false; + this.getDataDetail(); } }); - } + }); }, - //顺丰打印面单 - sfPrint () { - API_Order.getOrderFaceSheet(this.sn, this.faceSheetForm).then(res => { - if (res.success) { - let headers = { - 'X-Auth-token': res.result.token - } - API_Logistics.getShunFengFaceSheet(res.result.url, headers).then(res => { - const blob = new Blob([res], { - type: "application/pdf;charset=utf-8", - }); - - //对于标签,只有 Firefox 和 Chrome(内核) 支持 download 属性 - //IE10以上支持blob但是依然不支持download - if ("download" in document.createElement("a")) { - //支持a标签download的浏览器 - const link = document.createElement("a"); //创建a标签 - link.download = this.orderInfo.order.sn + ".pdf"; //a标签添加属性 - link.style.display = "none"; - link.href = URL.createObjectURL(blob); - document.body.appendChild(link); - link.click(); //执行下载 - URL.revokeObjectURL(link.href); //释放url - document.body.removeChild(link); //释放标签 - } else { - navigator.msSaveBlob(blob, fileName); - } - }) - } - }) + //打印发货单 + printOrder () { + this.printModal = true; }, - toPrints (printWindow) { - this.orderDeliverModal = false; - if (!this.someJSONdata) { - printWindow && printWindow.close(); - return; - } - const win = printWindow || window.open('', '_blank'); - if (!win) { - this.$Message.error('无法打开打印窗口,请允许浏览器弹窗'); - return; - } - win.document.write(this.someJSONdata); - win.document.close(); - win.focus(); - this.$Message.success('电子面单发货成功'); - this.getDataDetail(); + printHiddenInfo () { + this.printHiddenFlag = !this.printHiddenFlag; }, - //订单发货提交 - orderDeliverySubmit () { - if (this.facesheetFlag) { - this.$refs['faceSheetForm'].validate((valid) => { - if (valid) { - const printWindow = window.open('', '_blank'); - API_Order.getOrderFaceSheet(this.sn, this.faceSheetForm).then(res => { - if (res.success && res.result.printTemplate) { - this.someJSONdata = res.result.printTemplate; - this.toPrints(printWindow); - } else { - printWindow && printWindow.close(); - this.$Message.error('电子面单发货失败!'); - } - }).catch(() => { - printWindow && printWindow.close(); - this.$Message.error('电子面单发货失败!'); - }); - } - }) - } else { - console.log("this.orderDeliveryForm",this.orderDeliveryForm) - this.$refs['orderDeliveryForm'].validate((valid) => { - if (valid) { - API_Order.orderDelivery(this.sn, this.orderDeliveryForm).then( - (res) => { - if (res.success) { - this.$Message.success("订单发货成功"); - this.orderDeliverModal = false; - this.getDataDetail(); - } - } - ); - } - }); - } + printCancel () { + // this.printHiddenFlag = false; + }, + handlePrintInvoice() { + printElement("printInfo", "发货单"); }, //弹出修改收货地址框 editAddress () { this.addressModal = true; + this.addr = this.orderInfo.order.consigneeAddressPath; + this.regionId = this.orderInfo.order.consigneeAddressIdPath; this.addressForm.consigneeName = this.orderInfo.order.consigneeName; this.addressForm.consigneeMobile = this.orderInfo.order.consigneeMobile; this.addressForm.consigneeDetail = this.orderInfo.order.consigneeDetail; - this.addressForm.consigneeAddressPath = - this.orderInfo.order.consigneeAddressPath; - this.addressForm.consigneeAddressIdPath = - this.orderInfo.order.consigneeAddressIdPath; + this.addressForm.consigneeAddressPath = this.orderInfo.order.consigneeAddressPath; + this.addressForm.consigneeAddressIdPath = this.orderInfo.order.consigneeAddressIdPath; }, //修改收货地址 editAddressSubmit () { + if (this.regionId == "") { + this.$Message.error("请选择地址"); + return; + } + this.addressForm.consigneeAddressPath = this.addr; + this.addressForm.consigneeAddressIdPath = this.regionId; this.$refs.addressForm.validate((valid) => { if (valid) { - API_Order.editOrderConsignee(this.sn, this.addressForm).then( - (res) => { - if (res.success) { - this.$Message.success("收货地址修改成功"); - this.addressModal = false; - this.getDataDetail(); - } + API_Order.editOrderConsignee(this.sn, this.addressForm).then((res) => { + if (res.success) { + this.$Message.success("收货地址修改成功"); + this.addressModal = false; + this.getDataDetail(); } - ); + }); } }); }, - - getLogisticsSetting () { - API_Logistics.getLogisticsSetting().then(res => { - if (res.success) { - this.logisticsType = res.result; - } - }) - }, - }, mounted () { this.sn = this.$route.query.sn; this.getDataDetail(); this.getLogisticsSetting(); - this.getOrderPackage(); + this.getOrderPackages(); }, - // 如果是从详情页返回列表页,修改列表页keepAlive为true,确保不刷新页面 beforeRouteLeave (to, from, next) { - if (to.name === 'orderList' || to.name === 'virtualOrderList') { - to.meta.keepAlive = true + if (to.name === "orderList" || to.name === "virtualOrderList") { + to.meta.keepAlive = true; } - next() - } + next(); + }, }; -