ソースを参照

feat: 新增根据销售订单ID获取发货单详情的接口,并优化打印功能以支持出库单打印

xieyong 2 週間 前
親
コミット
7bd5f6d523

+ 11 - 0
src/api/saleManage/saleordersendrecord.js

@@ -53,6 +53,17 @@ export async function getSendSaleOrderCordDetailByIds(data) {
   return Promise.reject(new Error(res.data.message));
 }
 
+/**
+ * 根据销售订单ID获取全部发货单详情(含拆单 children)
+ */
+export async function getSendRecordByOrderIds(data) {
+  const res = await request.post(`/eom/saleorder/getSendRecordByOrderIds`, data);
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}
+
 /**
  * 获取多发货单信息详情
  */

+ 14 - 0
src/views/saleManage/saleOrder/index.vue

@@ -148,6 +148,11 @@
                         @click.native="handleSaleOrderPrint"
                         >打印(销售订单)</el-dropdown-item
                       >
+                      <el-dropdown-item
+                        v-if="$hasPermission('eom:saleorder:print')"
+                        @click.native="handleOutboundPrint"
+                        >打印(出库单)</el-dropdown-item
+                      >
                     </el-dropdown-menu>
                   </el-dropdown>
 
@@ -430,6 +435,10 @@
       ref="printTemplateSaleOrderSimpleRef"
       :groupName="groupName"
     ></printTemplateSaleOrderSimple>
+    <printTemplateHt1
+      ref="printTemplateHt1Ref"
+      :groupName="groupName"
+    ></printTemplateHt1>
     <add-adjust-dialog
       v-if="addAdjustDialogFlag"
       :addAdjustDialogFlag.sync="addAdjustDialogFlag"
@@ -495,6 +504,7 @@ import printTemplateRt from './components/printTemplateRt.vue';
 import printTemplateHtBatch from './components/printTemplateHtBatch.vue';
 import printTemplateHtStock from './components/printTemplateHtStock.vue';
 import printTemplateSaleOrderSimple from './components/printTemplateSaleOrderSimple.vue';
+import printTemplateHt1 from './invoice/components/print-template-ht-1.vue';
 import stockUnlock from './components/stockUnlock.vue';
 
 
@@ -536,6 +546,7 @@ export default {
     printTemplateHtBatch,
     printTemplateHtStock,
     printTemplateSaleOrderSimple,
+    printTemplateHt1,
     stockUnlock
   },
   //客户管理数据
@@ -1389,6 +1400,9 @@ export default {
     },
     handleSaleOrderPrint() {
       this.$refs.printTemplateSaleOrderSimpleRef.open(this.selection.map((v) => v.id));
+    },
+    handleOutboundPrint() {
+      this.$refs.printTemplateHt1Ref.open(this.selection.map((v) => v.id), false, 'saleOrder');
     }
   }
 };

+ 28 - 3
src/views/saleManage/saleOrder/invoice/components/print-template-ht-1.vue

@@ -176,7 +176,7 @@
 </template>
 
 <script>
-  import { getSendSaleOrderCordDetailByIds } from '@/api/saleManage/saleordersendrecord';
+  import { getSendSaleOrderCordDetailByIds, getSendRecordByOrderIds } from '@/api/saleManage/saleordersendrecord';
   import { mapGetters } from 'vuex';
   import { saveAs } from 'file-saver';
   import dictMixins from '@/mixins/dictMixins';
@@ -217,8 +217,16 @@
       this.requestDict('送货方式');
     },
     methods: {
-      async open(ids) {
-        const list = await getSendSaleOrderCordDetailByIds(ids);
+      async open(ids, isPreview, groupName) {
+        let list = [];
+        if(groupName === 'saleOrder') {
+          // 销售订单 ID 入参:调用 /eom/saleorder/getSendRecordByOrderIds,
+          // 返回的树形结构中包含拆单 children,需要逐层展平后逐单打印
+          const tree = await getSendRecordByOrderIds(ids);
+          list = this.flattenSendTree(tree);
+        } else {
+          list = await getSendSaleOrderCordDetailByIds(ids);
+        }
         // 处理每条发货单:查询出库单信息并匹配盘具字段
         this.formData = await Promise.all(list.map(async (rowItem) => {
           // 根据发货单编码查询出库单信息
@@ -256,6 +264,23 @@
         this.formData = [];
         this.QRvisible = false;
       },
+      /**
+       * 将销售订单发货记录的树形结构(主发货单 + 拆单 children)展平为一维数组
+       * 每个节点都有自己的 docNo / productList 等,作为独立打印页
+       */
+      flattenSendTree(tree) {
+        const result = [];
+        const walk = (nodes) => {
+          (nodes || []).forEach((node) => {
+            result.push(node);
+            if (node.children?.length) {
+              walk(node.children);
+            }
+          });
+        };
+        walk(tree);
+        return result;
+      },
       getDeliveryTypeName(rowItem) {
         return rowItem.deliveryTypeName || this.getDictValue('送货方式', rowItem.deliveryTypeId) || '';
       },