Explorar o código

采购订单列表选中数据打印功能

hezhanp hai 9 meses
pai
achega
43c75c8961

+ 520 - 476
src/views/purchasingManage/purchaseOrder/index.vue

@@ -9,7 +9,7 @@
               :key="item.key"
               :class="{ active: activeComp == item.key }"
               @click="activeComp = item.key"
-              style="height: 42px;line-height: 38px;"
+              style="height: 42px; line-height: 38px"
             >
               <el-badge :value="toDoReminder[item.reminder] || 0" class="item">
                 {{ item.name }}
@@ -71,6 +71,24 @@
                   apiUrl="/eom/purchaseorder/export"
                   :params="params"
                 ></exportButton>
+                <el-dropdown
+                  trigger="click"
+                  :disabled="selection?.length === 0"
+                >
+                  <el-button
+                    type="primary"
+                    class="el-icon-printer"
+                    size="small"
+                  >
+                    打印<i class="el-icon-arrow-down el-icon--right"></i>
+                  </el-button>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item
+                      @click.native="handlePrint('printPurchaseOrderRef')"
+                      >采购订单</el-dropdown-item
+                    >
+                  </el-dropdown-menu>
+                </el-dropdown>
               </template>
 
               <!-- 查看详情列 -->
@@ -263,512 +281,538 @@
       fileName="采购订单导入模板"
       apiUrl="/eom/purchaseorder/importFile"
     />
+    <printPurchaseOrder
+      ref="printPurchaseOrderRef"
+      :groupName="groupName"
+    ></printPurchaseOrder>
   </div>
 </template>
 
 <script>
-  import searchTable from './components/searchTable.vue';
-  import addDialog from './components/addDialog.vue';
-  import invoice from './invoice/index.vue';
-  import invoiceConfirm from './invoiceConfirm/index.vue';
-  import detailDialog from './components/detailDialog.vue';
-  import contractrDetail from '@/views/contractManage/contractBook/components/detailDialog.vue';
-  import purchasingDetail from '@/views/purchasingManage/purchaseNeedManage/components/detailDialog.vue';
-  import purchasePlanDetail from '@/views/purchasingManage/purchasePlanManage/components/detailDialog.vue';
-  import inquiryDetail from '@/views/purchasingManage/inquiryManage/components/detailDialog.vue';
-  import addInvoiceDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog';
-  import addReturnGoodsDialog from '@/views/purchasingManage/purchaseOrder/returnGoods/components/addReturnGoodsDialog';
-  import addOutSourceSend from '@/views/purchasingManage/purchaseOrder/outSourceSend/components/addOrEditDialog';
-  import popModal from '@/components/pop-modal';
-  import accountstatement from './accountstatement/index.vue';
-  import returnGoods from './returnGoods/index.vue';
-  import addInvoiceManage from '@/views/financialManage/invoiceManage/components/addOrEditDialog.vue';
-  import outSourceSend from './outSourceSend/index';
-  import {
-    getTableList,
-    deleteInformation,
-    getExport
-  } from '@/api/purchasingManage/purchaseOrder';
-  import dictMixins from '@/mixins/dictMixins';
-  import { purchaseOrderProgressStatusEnum, reviewStatus } from '@/enum/dict';
-  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
-  import tabMixins from '@/mixins/tableColumnsMixin';
-  import importDialog from '@/components/upload/import-dialog.vue';
-  import exportButton from '@/components/upload/exportButton.vue';
-  import { parameterGetByCode } from '@/api/main/index.js';
-  import exceptionList from '@/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue';
-  import { getToDoReminder } from '@/api/common/index';
-  import { exportTable } from '@/api/system/file/index.js';
-
-  export default {
-    mixins: [dictMixins, tabMixins],
-    components: {
-      processSubmitDialog,
-      exportButton,
-      searchTable,
-      returnGoods,
-      accountstatement,
-      popModal,
-      contractrDetail,
-      addReturnGoodsDialog,
-      addInvoiceDialog,
-      invoice,
-      addDialog,
-      detailDialog,
-      outSourceSend,
-      addOutSourceSend,
-      addInvoiceManage,
-      importDialog,
-      invoiceConfirm,
-      exceptionList,
-      purchasingDetail,
-      purchasePlanDetail,
-      inquiryDetail
-    },
-    data() {
-      return {
-        activeComp: 'saleorder',
-        tabOptions: [
-          { key: 'saleorder', name: '采购订单', reminder: 'purchaseOrderNum' },
-          {
-            key: 'outsourceSend',
-            name: '委外发货单',
-            reminder: 'outsourcingDeliveryNoteNum'
-          },
-          { key: 'invoice', name: '收货单', reminder: 'receiptNum' },
-          {
-            key: 'invoiceConfirm',
-            name: '收货确认单',
-            reminder: 'receiptConfirmationFormNum'
-          },
-          {
-            key: 'exceptionList',
-            name: '异常列表',
-            reminder: 'purchaseExceptionListNum'
-          },
-          {
-            key: 'returnorder',
-            name: '退货单',
-            reminder: 'purchaseReturnOrderNum'
-          },
-          {
-            key: 'accountstatement',
-            name: '对账单',
-            reminder: 'purchaseStatementAccountNum'
-          }
-        ],
-
-        selection: [], //单选中集合
-        delVisible: false, //批量删除弹框状态
-        loading: false, // 加载状态
-        processSubmitDialogFlag: false,
-        addOrEditDialogFlag: false,
-        addOrEditDialogFlag1: false,
-        params: {},
-        columns: [
-          {
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center'
-          },
-          {
-            columnKey: 'index',
-            label: '序号',
-            type: 'index',
-            width: 55,
-            align: 'center',
-            showOverflowTooltip: true,
-            fixed: 'left'
-          },
-          {
-            prop: 'orderNo',
-            label: '订单编码',
-            align: 'center',
-            sortable: true,
-            slot: 'orderNo',
-            showOverflowTooltip: true,
-            minWidth: 200,
-            fixed: 'left'
-          },
-          {
-            prop: 'sourceTypeName',
-            label: '订单类型',
-            align: 'center',
-            sortable: true,
-            showOverflowTooltip: true,
-            minWidth: 200,
-            fixed: 'left'
-          },
-          {
-            prop: 'progress',
-            label: '订单进度',
-            align: 'center',
-            showOverflowTooltip: true,
-            formatter: (_row, _column, cellValue) => {
-              return purchaseOrderProgressStatusEnum.find(
-                (val) => val.value == _row.progress
-              )?.label;
-            },
-            minWidth: 120
-          },
+import searchTable from './components/searchTable.vue';
+import addDialog from './components/addDialog.vue';
+import invoice from './invoice/index.vue';
+import invoiceConfirm from './invoiceConfirm/index.vue';
+import detailDialog from './components/detailDialog.vue';
+import contractrDetail from '@/views/contractManage/contractBook/components/detailDialog.vue';
+import purchasingDetail from '@/views/purchasingManage/purchaseNeedManage/components/detailDialog.vue';
+import purchasePlanDetail from '@/views/purchasingManage/purchasePlanManage/components/detailDialog.vue';
+import inquiryDetail from '@/views/purchasingManage/inquiryManage/components/detailDialog.vue';
+import addInvoiceDialog from '@/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog';
+import addReturnGoodsDialog from '@/views/purchasingManage/purchaseOrder/returnGoods/components/addReturnGoodsDialog';
+import addOutSourceSend from '@/views/purchasingManage/purchaseOrder/outSourceSend/components/addOrEditDialog';
+import popModal from '@/components/pop-modal';
+import accountstatement from './accountstatement/index.vue';
+import returnGoods from './returnGoods/index.vue';
+import addInvoiceManage from '@/views/financialManage/invoiceManage/components/addOrEditDialog.vue';
+import outSourceSend from './outSourceSend/index';
+import {
+  getTableList,
+  deleteInformation,
+  getExport
+} from '@/api/purchasingManage/purchaseOrder';
+import dictMixins from '@/mixins/dictMixins';
+import { purchaseOrderProgressStatusEnum, reviewStatus } from '@/enum/dict';
+import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
+import tabMixins from '@/mixins/tableColumnsMixin';
+import importDialog from '@/components/upload/import-dialog.vue';
+import exportButton from '@/components/upload/exportButton.vue';
+import { parameterGetByCode } from '@/api/main/index.js';
+import exceptionList from '@/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue';
+import { getToDoReminder } from '@/api/common/index';
+import { exportTable } from '@/api/system/file/index.js';
+import printPurchaseOrder from '@/views/purchasingManage/purchaseOrder/invoice/components/print-PurchaseOrder.vue';
+  import { enterprisePage } from '@/api/contractManage/contractBook';
 
-          {
-            prop: 'relationType',
-            label: '来源单据类型',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 150,
-            formatter: (_row, _column, cellValue) => {
-              return _row.relationType == 1
-                ? '采购需求单'
-                : _row.relationType == 2
-                ? '采购计划单'
-                : _row.relationType == 3
-                ? '采购核价单'
-                : _row.relationType == 4
-                ? '采购合同'
-                : '';
-            }
-          },
-          {
-            prop: 'relationName',
-            label: '来源单据',
-            align: 'center',
-            slot: 'relationName',
-            showOverflowTooltip: true,
-            minWidth: 250
-          },
-          // {
-          //   prop: 'deliveryDate',
-          //   label: '交货日期',
-          //   align: 'center',
-          //   showOverflowTooltip: true,
-          //   minWidth: 200
-          // },
-          // {
-          //   prop: 'purchaseTypeName',
-          //   label: '采购订单类型',
-          //   align: 'center',
-          //   showOverflowTooltip: true,
-          //   minWidth: 140
-          // },
-          {
-            prop: 'partaName',
-            label: '采购方名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'partaLinkName',
-            label: '采购方联系人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 130
-          },
+export default {
+  mixins: [dictMixins, tabMixins],
+  components: {
+    processSubmitDialog,
+    exportButton,
+    searchTable,
+    returnGoods,
+    accountstatement,
+    popModal,
+    contractrDetail,
+    addReturnGoodsDialog,
+    addInvoiceDialog,
+    invoice,
+    addDialog,
+    detailDialog,
+    outSourceSend,
+    addOutSourceSend,
+    addInvoiceManage,
+    importDialog,
+    invoiceConfirm,
+    exceptionList,
+    purchasingDetail,
+    purchasePlanDetail,
+    inquiryDetail,
+    printPurchaseOrder
+  },
+  data() {
+    return {
+      activeComp: 'saleorder',
+      tabOptions: [
+        { key: 'saleorder', name: '采购订单', reminder: 'purchaseOrderNum' },
+        {
+          key: 'outsourceSend',
+          name: '委外发货单',
+          reminder: 'outsourcingDeliveryNoteNum'
+        },
+        { key: 'invoice', name: '收货单', reminder: 'receiptNum' },
+        {
+          key: 'invoiceConfirm',
+          name: '收货确认单',
+          reminder: 'receiptConfirmationFormNum'
+        },
+        {
+          key: 'exceptionList',
+          name: '异常列表',
+          reminder: 'purchaseExceptionListNum'
+        },
+        {
+          key: 'returnorder',
+          name: '退货单',
+          reminder: 'purchaseReturnOrderNum'
+        },
+        {
+          key: 'accountstatement',
+          name: '对账单',
+          reminder: 'purchaseStatementAccountNum'
+        }
+      ],
 
-          {
-            prop: 'partaTel',
-            label: '采购方联系电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 130
-          },
-          {
-            prop: 'productNames',
-            label: '名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'productCodes',
-            label: '编码',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'batchNos',
-            label: '批次号',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'productCount',
-            label: '数量',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
+      selection: [], //单选中集合
+      delVisible: false, //批量删除弹框状态
+      loading: false, // 加载状态
+      processSubmitDialogFlag: false,
+      addOrEditDialogFlag: false,
+      addOrEditDialogFlag1: false,
+      params: {},
 
-          {
-            prop: 'partbName',
-            label: '供应商名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 250
+      groupName: '',
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center'
+        },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'orderNo',
+          label: '订单编码',
+          align: 'center',
+          sortable: true,
+          slot: 'orderNo',
+          showOverflowTooltip: true,
+          minWidth: 200,
+          fixed: 'left'
+        },
+        {
+          prop: 'sourceTypeName',
+          label: '订单类型',
+          align: 'center',
+          sortable: true,
+          showOverflowTooltip: true,
+          minWidth: 200,
+          fixed: 'left'
+        },
+        {
+          prop: 'progress',
+          label: '订单进度',
+          align: 'center',
+          showOverflowTooltip: true,
+          formatter: (_row, _column, cellValue) => {
+            return purchaseOrderProgressStatusEnum.find(
+              (val) => val.value == _row.progress
+            )?.label;
           },
-          {
-            prop: 'partbLinkName',
-            label: '供应商联系人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
-          {
-            prop: 'partbTel',
-            label: '供应商联系电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 130
-          },
-          {
-            prop: 'payAmount',
-            label: '金额(元)',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'createUserName',
-            label: '创建人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 170
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 170
-          },
-          {
-            prop: 'orderStatus',
-            label: '审核状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return reviewStatus[_row.orderStatus];
-            }
-          },
-          {
-            columnKey: 'action',
-            label: '操作',
-            width: 260,
-            align: 'center',
-            resizable: false,
-            slot: 'action',
-            showOverflowTooltip: true,
-            fixed: 'right'
+          minWidth: 120
+        },
+
+        {
+          prop: 'relationType',
+          label: '来源单据类型',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 150,
+          formatter: (_row, _column, cellValue) => {
+            return _row.relationType == 1
+              ? '采购需求单'
+              : _row.relationType == 2
+              ? '采购计划单'
+              : _row.relationType == 3
+              ? '采购核价单'
+              : _row.relationType == 4
+              ? '采购合同'
+              : '';
+          }
+        },
+        {
+          prop: 'relationName',
+          label: '来源单据',
+          align: 'center',
+          slot: 'relationName',
+          showOverflowTooltip: true,
+          minWidth: 250
+        },
+        // {
+        //   prop: 'deliveryDate',
+        //   label: '交货日期',
+        //   align: 'center',
+        //   showOverflowTooltip: true,
+        //   minWidth: 200
+        // },
+        // {
+        //   prop: 'purchaseTypeName',
+        //   label: '采购订单类型',
+        //   align: 'center',
+        //   showOverflowTooltip: true,
+        //   minWidth: 140
+        // },
+        {
+          prop: 'partaName',
+          label: '采购方名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'partaLinkName',
+          label: '采购方联系人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+
+        {
+          prop: 'partaTel',
+          label: '采购方联系电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'productNames',
+          label: '名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'productCodes',
+          label: '编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'batchNos',
+          label: '批次号',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'productCount',
+          label: '数量',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+
+        {
+          prop: 'partbName',
+          label: '供应商名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 250
+        },
+        {
+          prop: 'partbLinkName',
+          label: '供应商联系人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'partbTel',
+          label: '供应商联系电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 130
+        },
+        {
+          prop: 'payAmount',
+          label: '金额(元)',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170
+        },
+        {
+          prop: 'orderStatus',
+          label: '审核状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return reviewStatus[_row.orderStatus];
           }
-        ],
-        cacheKeyUrl: 'eos-5f2ac512-purchaseOrder-saleorder',
-        isRequired: true,
-        timeR: null,
-        toDoReminder: {}
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 260,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ],
+      cacheKeyUrl: 'eos-5f2ac512-purchaseOrder-saleorder',
+      isRequired: true,
+      timeR: null,
+      toDoReminder: {}
+    };
+  },
+  computed: {},
+  created() {
+    this.requestDict('客户状态');
+    parameterGetByCode({
+      code: 'order_person_info'
+    }).then((res) => {
+      if (res.value) {
+        this.isRequired = res.value === '1';
+      }
+    });
+    this.getToDoReminder();
+    this.timeR = setInterval(() => {
+      this.getToDoReminder();
+    }, 60000);
+  },
+  beforeDestroy() {
+    clearInterval(this.timeR);
+  },
+  methods: {
+    getToDoReminder() {
+      getToDoReminder().then((res) => {
+        this.toDoReminder = res;
+      });
+    },
+    //更多菜单
+    handleCommand(command, row) {
+      console.log(command, row);
+      if (command === 'invoice') {
+        this.$refs.invoiceDialogRef.open('add', {}, row.id);
+      }
+      if (command === 'returnOrder') {
+        this.$refs.addReturnGoodsRef.open('add', {});
+      }
+      if (command === 'outsourceSend') {
+        this.addOrEditDialogFlag = true;
+
+        this.$nextTick(() => {
+          this.$refs.addOrEditDialogRef.open('add', {}, row.id);
+        });
+      }
+      if (command === 'invoiceManage') {
+        this.addOrEditDialogFlag1 = true;
+
+        this.$nextTick(() => {
+          this.$refs.addOrEditDialogRef.createInvoice1(row, 2, 3);
+        });
+      }
+    },
+
+    //点击左边分类
+    handleNodeClick(data, node) {
+      // this.curNodeData = data;
+      this.reload({ categoryId: data.id });
+    },
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      this.params = {
+        pageNum: page,
+        size: limit,
+        ...where
       };
+      return getTableList(this.params);
+    },
+
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where });
     },
-    computed: {},
-    created() {
-      this.requestDict('客户状态');
-      parameterGetByCode({
-        code: 'order_person_info'
+
+    //新增编辑
+    openEdit(type, row) {
+      this.$refs.addDialogRef.open(type, row, row.id);
+      this.$refs.addDialogRef.$refs.form &&
+        this.$refs.addDialogRef.$refs.form.clearValidate();
+    },
+    uploadFile() {
+      this.$refs.importDialogRef.open();
+    },
+    //打印采购订单
+    handlePrint(ref) {
+        if (this.selection.length > 1)
+          return this.$message.warning('暂不支持批量打印,请选择一条');
+      // let flag = this.selection.some((item) => [2].includes(item.reviewStatus));
+      // if (!flag)
+      //   return this.$message.warning('抱歉需要已审核的发货单才能打印,请检查');
+
+      enterprisePage({
+        pageNum: 1,
+        size: 200
       }).then((res) => {
-        if (res.value) {
-          this.isRequired = res.value === '1';
+        console.log(res.list);
+        if (res.list?.length > 0) {
+          this.groupName = res.list[0].name;
         }
       });
-      this.getToDoReminder();
-      this.timeR = setInterval(() => {
-        this.getToDoReminder();
-      }, 60000);
+      this.$refs[ref].open(this.selection[0].id);
     },
-    beforeDestroy() {
-      clearInterval(this.timeR);
+    //批量删除
+    allDelBtn() {
+      if (this.selection.length === 0) return;
+      let flag = this.selection.some((item) =>
+        [1, 2].includes(item.orderStatus)
+      );
+      if (flag)
+        return this.$message.warning('抱歉已审核、审核中的数据不能删除,请检查');
+      this.delVisible = true;
     },
-    methods: {
-      getToDoReminder() {
-        getToDoReminder().then((res) => {
-          this.toDoReminder = res;
-        });
-      },
-      //更多菜单
-      handleCommand(command, row) {
-        console.log(command, row);
-        if (command === 'invoice') {
-          this.$refs.invoiceDialogRef.open('add', {}, row.id);
-        }
-        if (command === 'returnOrder') {
-          this.$refs.addReturnGoodsRef.open('add', {});
-        }
-        if (command === 'outsourceSend') {
-          this.addOrEditDialogFlag = true;
 
-          this.$nextTick(() => {
-            this.$refs.addOrEditDialogRef.open('add', {}, row.id);
-          });
-        }
-        if (command === 'invoiceManage') {
-          this.addOrEditDialogFlag1 = true;
+    //删除接口
+    remove(delData) {
+      deleteInformation(delData).then((res) => {
+        this.$message.success('删除成功!');
+        this.reload();
+      });
+    },
 
-          this.$nextTick(() => {
-            this.$refs.addOrEditDialogRef.createInvoice1(row, 2, 3);
-          });
-        }
-      },
-
-      //点击左边分类
-      handleNodeClick(data, node) {
-        // this.curNodeData = data;
-        this.reload({ categoryId: data.id });
-      },
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        this.params = {
-          pageNum: page,
-          size: limit,
-          ...where
-        };
-        return getTableList(this.params);
-      },
-
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ page: 1, where });
-      },
-
-      //新增编辑
-      openEdit(type, row) {
-        this.$refs.addDialogRef.open(type, row, row.id);
-        this.$refs.addDialogRef.$refs.form &&
-          this.$refs.addDialogRef.$refs.form.clearValidate();
-      },
-      uploadFile() {
-        this.$refs.importDialogRef.open();
-      },
-      //批量删除
-      allDelBtn() {
-        if (this.selection.length === 0) return;
-        let flag = this.selection.some((item) =>
-          [1, 2].includes(item.orderStatus)
-        );
-        if (flag)
-          return this.$message.warning(
-            '抱歉已审核、审核中的数据不能删除,请检查'
-          );
-        this.delVisible = true;
-      },
-
-      //删除接口
-      remove(delData) {
-        deleteInformation(delData).then((res) => {
-          this.$message.success('删除成功!');
-          this.reload();
-        });
-      },
-
-      //删除弹框确定
-      commitBtn() {
-        const dataId = this.selection.map((v) => v.id);
-        this.remove(dataId);
-      },
-
-      //查看详情
-      openorderDetail(row) {
-        this.$refs.contactDetailDialogRef.open(row);
-      },
-      saleOrderSubmit(res) {
-        this.processSubmitDialogFlag = true;
-        this.$nextTick(() => {
-          let params = {
-            businessId: res.id,
-            businessKey: 'purchase_order_approve',
-            formCreateUserId: res.createUserId,
-            variables: {
-              businessCode: res.orderNo,
-              businessName: res.partaName,
-              businessType: res.sourceTypeName
-            }
-          };
-
-          this.$refs.processSubmitDialogRef.init(params);
-        });
-      },
-      //查看合同详情
-      opencontractDetail(row) {
-        let data = {
-          id: row.relationId
+    //删除弹框确定
+    commitBtn() {
+      const dataId = this.selection.map((v) => v.id);
+      this.remove(dataId);
+    },
+
+    //查看详情
+    openorderDetail(row) {
+      this.$refs.contactDetailDialogRef.open(row);
+    },
+    saleOrderSubmit(res) {
+      this.processSubmitDialogFlag = true;
+      this.$nextTick(() => {
+        let params = {
+          businessId: res.id,
+          businessKey: 'purchase_order_approve',
+          formCreateUserId: res.createUserId,
+          variables: {
+            businessCode: res.orderNo,
+            businessName: res.partaName,
+            businessType: res.sourceTypeName
+          }
         };
-        if (row.relationType == 1) {
-          this.$refs.purchasingDetailRef.open(data);
-        }
-        if (row.relationType == 2) {
-          this.$refs.purchasePlanDetailRef.open(data);
-        }
-        if (row.relationType == 3) {
-          this.$refs.inquiryDetailRef.open(data);
-        }
-        if (row.relationType == 4) {
-          this.$refs.contractDetailRef.open(data);
-        }
-      },
-      // 导出
-      exportRowInfo(row) {
-        console.log(row);
-        getExport(row.id);
+
+        this.$refs.processSubmitDialogRef.init(params);
+      });
+    },
+    //查看合同详情
+    opencontractDetail(row) {
+      let data = {
+        id: row.relationId
+      };
+      if (row.relationType == 1) {
+        this.$refs.purchasingDetailRef.open(data);
+      }
+      if (row.relationType == 2) {
+        this.$refs.purchasePlanDetailRef.open(data);
+      }
+      if (row.relationType == 3) {
+        this.$refs.inquiryDetailRef.open(data);
       }
+      if (row.relationType == 4) {
+        this.$refs.contractDetailRef.open(data);
+      }
+    },
+    // 导出
+    exportRowInfo(row) {
+      console.log(row);
+      getExport(row.id);
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  :deep .el-card__body {
-    padding: 0;
-  }
+:deep .el-card__body {
+  padding: 0;
+}
 
-  :deep(.el-link--inner) {
-    margin-left: 0px !important;
-  }
+:deep(.el-link--inner) {
+  margin-left: 0px !important;
+}
 
-  .sys-organization-list {
-    height: calc(100vh - 264px);
-    box-sizing: border-box;
-    border-width: 1px;
-    border-style: solid;
-    overflow: auto;
-  }
+.sys-organization-list {
+  height: calc(100vh - 264px);
+  box-sizing: border-box;
+  border-width: 1px;
+  border-style: solid;
+  overflow: auto;
+}
 
-  .sys-organization-list :deep(.el-tree-node__content) {
-    height: 40px;
+.sys-organization-list :deep(.el-tree-node__content) {
+  height: 40px;
 
-    & > .el-tree-node__expand-icon {
-      margin-left: 10px;
-    }
+  & > .el-tree-node__expand-icon {
+    margin-left: 10px;
   }
+}
 
-  .switch_left ul .active {
-    border-top: 4px solid var(--color-primary);
-    color: var(--color-primary-5);
-  }
+.switch_left ul .active {
+  border-top: 4px solid var(--color-primary);
+  color: var(--color-primary-5);
+}
 
-  .switch {
-    padding-bottom: 20px;
-  }
+.switch {
+  padding-bottom: 20px;
+}
 
-  .el-dropdown-link {
-    cursor: pointer;
-    color: var(--color-primary-5);
-  }
+.el-dropdown-link {
+  cursor: pointer;
+  color: var(--color-primary-5);
+}
 
-  .el-icon-arrow-down {
-    font-size: 12px;
-  }
-  :deep(.el-badge__content.is-fixed) {
-    top: 4px;
-  }
+.el-icon-arrow-down {
+  font-size: 12px;
+}
+:deep(.el-badge__content.is-fixed) {
+  top: 4px;
+}
 </style>

+ 241 - 0
src/views/purchasingManage/purchaseOrder/invoice/components/print-PurchaseOrder.vue

@@ -0,0 +1,241 @@
+<template>
+  <ele-modal
+    title="采购单"
+    :visible.sync="PurchaseOrdervisible"
+    v-if="PurchaseOrdervisible"
+    width="60%"
+  >
+    <div
+      id="printSection"
+      style="
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        flex-direction: column;
+        width: 100%;
+      "
+    >
+      <!-- 标题区域 -->
+      <div style="text-align: center; font-size: 20px; font-weight: 800">
+        {{ groupName || '湖南万隆智能科技有限公司采购入库单' }}
+      </div>
+      <div style="text-align: center; font-size: 18px">
+        {{
+          formData.createTime
+            ? formData.createTime.substring(0, 7) + '月份采购单'
+            : ''
+        }}
+      </div>
+
+      <!-- 供应商、日期、编号行 -->
+      <div
+        style="
+          display: flex;
+          justify-content: space-between;
+          width: 100%;
+          margin: 8px 0;
+        "
+      >
+        <span>供应商:{{ formData?.partbName || '' }}</span>
+        <span
+          >日期:{{
+            formData.createTime ? formData.createTime.split(' ')[0] : ''
+          }}</span
+        >
+        <span>编号:{{ formData?.orderNo || '' }}</span>
+      </div>
+
+      <!-- 合并后的唯一表格(基于原核心表格9列结构,用colspan适配后续内容) -->
+      <table
+        cellspacing="0"
+        border="1"
+        style="
+          width: 100%;
+          table-layout: fixed;
+          word-break: break-all;
+          word-wrap: break-word;
+          font-size: 12px;
+          border-collapse: collapse;
+        "
+      >
+        <tbody>
+          <!-- 第一部分:核心采购物料表格(保持原9列结构) -->
+          <!-- 表头 -->
+          <tr align="center">
+            <td style="padding: 5px">序号</td>
+            <td style="padding: 5px">物料名称</td>
+            <td style="padding: 5px">规格</td>
+            <td style="padding: 5px">数量单位</td>
+            <td style="padding: 5px">单价(元/KG)</td>
+            <td style="padding: 5px">数量</td>
+            <td style="padding: 5px">金额(元)</td>
+            <td style="padding: 5px">到货日期</td>
+            <td style="padding: 5px">备注</td>
+          </tr>
+
+          <!-- 物料数据行 -->
+          <tr
+            align="center"
+            v-for="(item, index) in formData?.productList || []"
+            :key="index"
+          >
+            <td style="padding: 5px">{{ index + 1 }}</td>
+            <td style="padding: 5px">{{ item.productName || '' }}</td>
+            <td style="padding: 5px">{{ item.specification || '' }}</td>
+            <td style="padding: 5px">{{ item.purchaseUnit || '' }}</td>
+            <td style="padding: 5px">{{ item.singlePrice || 0 }}</td>
+            <td style="padding: 5px">{{ item.purchaseCount || 0 }}</td>
+            <td style="padding: 5px">{{ item.totalPrice || 0 }}</td>
+            <td style="padding: 5px">{{ item.deliveryDeadline || '' }}</td>
+            <td style="padding: 5px">{{ item.remark || '' }}</td>
+          </tr>
+
+          <!-- 合计行 -->
+          <tr align="center">
+            <td style="padding: 5px" colspan="6">合计:</td>
+            <td style="padding: 5px" colspan="3">{{
+              formData?.totalAmount || '0.00'
+            }}</td>
+          </tr>
+
+          <!-- 第二部分:供应商/采购单位信息(用colspan适配9列:5列+4列=9列,布局更均匀) -->
+          <tr align="left"> <!-- 文字信息左对齐更易读 -->
+            <td style="padding: 5px; vertical-align: top" colspan="5">
+              供应商:{{ formData?.partbName || '' }}
+            </td>
+            <td style="padding: 5px; vertical-align: top" colspan="4">
+              采购单位:{{ formData?.partaName || '' }}
+            </td>
+          </tr>
+          <tr align="left">
+            <td style="padding: 5px; vertical-align: top" colspan="5">
+              供应商联系人:{{ formData?.partbLinkName || '' }}
+            </td>
+            <td style="padding: 5px; vertical-align: top" colspan="4">
+              采购单位联系人:{{ formData?.partaLinkName || '' }}
+            </td>
+          </tr>
+          <tr align="left">
+            <td style="padding: 5px; vertical-align: top" colspan="5">
+              供应商电话:{{ formData?.partbTel || '' }}
+            </td>
+            <td style="padding: 5px; vertical-align: top" colspan="4">
+              采购单位电话:{{ formData?.partaTel || '' }}
+            </td>
+          </tr>
+          <tr align="left">
+            <td style="padding: 5px; vertical-align: top" colspan="5">
+              供应商传真:{{ formData?.partbFax || '' }}
+            </td>
+            <td style="padding: 5px; vertical-align: top" colspan="4">
+              采购单位传真:{{ formData?.partaFax || '' }}
+            </td>
+          </tr>
+          <tr align="left">
+            <td style="padding: 5px; vertical-align: top" colspan="5">
+              备注:
+            </td>
+            <td style="padding: 5px; vertical-align: top" colspan="4">
+              收货人:{{ formData?.makerName }} {{ formData?.partaTel || '' }}
+            </td>
+          </tr>
+
+          <!-- 第三部分:核准/审核/作成(用colspan适配9列:3列+3列+3列=9列,均匀分布) -->
+          <tr align="center">
+            <td style="padding: 5px" colspan="3">核准:</td>
+            <td style="padding: 5px" colspan="3">审核:</td>
+            <td style="padding: 5px" colspan="3">作成:{{ formData?.makerName || '' }}</td>
+          </tr>
+        </tbody>
+      </table>
+    </div>
+
+    <div slot="footer">
+      <el-button @click="print">打印预览</el-button>
+      <el-button @click="close">关闭</el-button>
+    </div>
+  </ele-modal>
+</template>
+
+<script>
+import { getpurchaseorderDetail } from '@/api/purchasingManage/purchaseOrder';
+
+export default {
+  name: 'PurchaseOrderPrint',
+  data() {
+    return {
+      PurchaseOrdervisible: false,
+      formData: {
+        productList: [],
+        createTime: ''
+      }
+    };
+  },
+  props: {
+    groupName: {
+      type: String,
+      default: '湖南万隆智能科技有限公司采购入库单'
+    }
+  },
+  methods: {
+    async open(id) {
+      try {
+        this.formData = await getpurchaseorderDetail(id);
+        if (!Array.isArray(this.formData.productList)) {
+          this.formData.productList = [];
+        }
+      } catch (error) {
+        console.error('获取采购单详情失败:', error);
+        this.formData = { productList: [], createTime: '' };
+      } finally {
+        this.PurchaseOrdervisible = true;
+      }
+    },
+    close() {
+      this.PurchaseOrdervisible = false;
+    },
+    print() {
+      const printSection = document.getElementById('printSection');
+      if (!printSection) return;
+
+      const printWindow = window.open('', '_blank');
+      if (!printWindow) {
+        alert('请允许浏览器弹出窗口,以正常显示打印预览');
+        return;
+      }
+
+      printWindow.document.open();
+      // 打印样式确保合并后表格统一
+      printWindow.document.write(`
+        <html>
+          <head>
+            <title>采购单打印预览</title>
+            <style>
+              body { margin: 20px; font-family: "Microsoft YaHei", sans-serif; }
+              table { 
+                border-collapse: collapse; 
+                width: 100%; 
+                table-layout: fixed; 
+                word-break: break-all; 
+                word-wrap: break-word; 
+                font-size: 12px;
+              }
+              td { padding: 5px; box-sizing: border-box; border: 1px solid #000; }
+            </style>
+          </head>
+          <body>
+            ${printSection.innerHTML}
+          </body>
+        </html>
+      `);
+      printWindow.document.close();
+
+      printWindow.onload = function () {
+        printWindow.print();
+      };
+    }
+  }
+};
+</script>
+
+<style lang="scss"></style>