浏览代码

打印优化

lilei 3 年之前
父节点
当前提交
7fc2f7f1f1

+ 68 - 10
src/libs/JGPrint.js

@@ -1,4 +1,5 @@
 import confirm from 'ant-design-vue/es/modal/confirm'
+import { Modal } from 'ant-design-vue'
 import notification from 'ant-design-vue/es/notification'
 import store from '@/store'
 import { getLodop } from '@/libs/LodopFuncs'
@@ -13,6 +14,7 @@ export const JGPrintTag = function (html, width, height, data) {
       okText: '立即下载',
       okType: 'danger',
       cancelText: '暂不打印',
+      zIndex: 100000,
       onOk () {
         var agent = navigator.userAgent.toLowerCase();
         if (agent.indexOf("win32") >= 0 || agent.indexOf("wow32") >= 0) {
@@ -100,7 +102,8 @@ export const hdPrint = function (printerType, type, url, params, fileName, callb
       if (type == 'export') { //  导出
         downloadExcel(res, fileName)
       } else { // 打印
-        jGPrint(res, type, printerType, fileName)
+        const taskName = fileName+'-'+(params.sn||params.checkWarehouseSn||params.settleClientSn)+'-'
+        jGPrint(res, type, printerType, taskName)
       }
     }
     callback()
@@ -144,6 +147,17 @@ export const getPrintList = function(){
   }
   return printList
 }
+// 获取打印机状态
+export const getStatusValue = function (ValueType,ValueIndex,callback){
+		const LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'))
+		if (LODOP.CVERSION) {
+      LODOP.On_Return=function(TaskID,Value){
+        callback(Value)
+      };
+    }
+		var strResult=LODOP.GET_VALUE(ValueType,ValueIndex);
+		if (!LODOP.CVERSION) return callback(strResult); else return callback('');
+	}
 // pdf 直接打印
 export const pdfPrint = function (data,index){
   const LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'))
@@ -151,7 +165,9 @@ export const pdfPrint = function (data,index){
   // LODOP.SET_PRINT_MODE('POS_BASEON_PAPER', true) // 可使输出以纸张边缘为基点
   // 开始打印
   const dlen = data.length
-  LODOP.PRINT_INIT(store.state.app.printTaskName +index+'-')
+  // 打印进入队列开始
+  store.commit('SET_printLoading',true)
+  LODOP.PRINT_INIT(store.state.app.printTaskName + (dlen>1 ? ('第'+(index+1)+'页') : ''))
   //这个语句设置网络共享打印机连接不通时是否提示一下
   LODOP.SET_PRINT_MODE("TRYLINKPRINTER_NOALERT",true);
   //执行该语句之后,PRINT指令不再返回那个所谓“打印成功”,才能获取到打印状态
@@ -162,6 +178,9 @@ export const pdfPrint = function (data,index){
      store.commit('SET_printTaskID',Value)
      if(index+1 < dlen){
        pdfPrint(data,index+1)
+     }else{
+       // 打印进入队列结束
+       store.commit('SET_printLoading',false)
      }
   };
   // 指定打印机
@@ -170,7 +189,47 @@ export const pdfPrint = function (data,index){
   LODOP.SET_PRINT_PAGESIZE(3, 2090, (index==dlen-1)?50:0, '')
   LODOP.PRINT()
 }
- 
+// 判断当前单据是否已存在打印任务列表中
+ export const hasExitTaskByName = function(noCallback){
+   const printTaskID = store.state.app.printTaskID
+   const printLoading = store.state.app.printLoading
+   if(printLoading){
+     Modal.info({
+       title: '提示',
+       content: '打印机正在打印中...',
+       okText: '知道了',
+       okType: 'danger',
+       centered: true,
+       zIndex: 100000
+     })
+   }else{
+     if(printTaskID){
+       getStatusValue('PRINT_STATUS_BUSY',printTaskID,function(isExist){
+         console.log(isExist)
+         if(isExist.length){
+           if(isExist != '0'){
+             confirm({
+               title: '提示',
+               content: h => <div style='font-size:14px;'><div>打印机正在打印中...</div><div>或者有未完成的打印任务</div><div>是否继续添加打印任务?</div></div>,
+               okText: '继续打印',
+               okType: 'danger',
+               cancelText: '取消',
+               centered: true,
+               zIndex: 100000,
+               onOk () {
+                 noCallback()
+               }
+             })
+           }else{
+             noCallback()
+           }
+         }
+       })
+     }else{
+       noCallback()
+     }
+   }
+ }
 // 打印控件
 export const jGPrint = function (data, type, printerType, taskName) {
   if (!data) {
@@ -203,13 +262,12 @@ export const jGPrint = function (data, type, printerType, taskName) {
       store.commit('SET_showPdfPrint', data.data)
       store.commit('SET_printTaskName', taskName)
     } else if (type == 'print') { //  pdf 打印
-      // console.log(store.state.app.printTaskID)
-      // PRINT_STATUS_BUSY
-      // LODOP.GET_VALUE("PRINT_STATUS_OK",store.state.app.printTaskID);
-      // 先选择打印机
-      store.commit('SET_pdfPrintList', data.data)
-      store.commit('SET_showSelectPrint', true)
-      store.commit('SET_printTaskName', taskName)
+      hasExitTaskByName(function(){
+        // 选择打印机
+        store.commit('SET_pdfPrintList', data.data)
+        store.commit('SET_showSelectPrint', true)
+        store.commit('SET_printTaskName', taskName)
+      })
     }
   } else {
     // 喷墨打印

+ 4 - 0
src/store/modules/app.js

@@ -42,6 +42,7 @@ const app = {
     defaultPrint: undefined, // 已选的打印机
     printTaskName: '', // 打印任务名称
     printTaskID: '', // 打印任务id列表
+    printLoading: false, // 正在打印中
   },
   mutations: {
     SET_SIDEBAR_TYPE: (state, type) => {
@@ -126,6 +127,9 @@ const app = {
     SET_printTaskID: (state, val) => {
       state.printTaskID = val
     },
+    SET_printLoading: (state, val) => {
+      state.printLoading = val
+    },
   },
   actions: {
     setSidebar ({

+ 16 - 6
src/views/common/pdfViewModal.vue

@@ -1,11 +1,13 @@
 <template>
   <a-modal
     centered
-    class="common-modal"
+    class="common-pdfView-modal"
     :footer="null"
     :maskClosable="false"
     v-model="isShow"
     :title="modalTit"
+    :zIndex="1001"
+    destroyOnClose
     :bodyStyle="{padding: modalTit?'15px 15px 20px':'50px 32px 15px',background: '#f2f2f2'}"
     @cancel="handleCommonCancel"
     width="1024px">
@@ -30,7 +32,9 @@
       </div>
       <div class="btn-box">
         <a-button size="large" style="margin-right: 25px;" @click="handleCommonCancel" v-if="isCancel">{{ cancelText }}</a-button>
-        <a-button size="large" type="primary" @click="handleCommonOk">{{ okText }}</a-button>
+        <a-button size="large" type="primary" :loading="$store.state.app.printLoading" @click="handleCommonOk">
+          {{ $store.state.app.printLoading?'打印中...':okText }}
+        </a-button>
       </div>
     </a-spin>
   </a-modal>
@@ -39,6 +43,7 @@
 <script>
 import pdf from 'vue-pdf'
 import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js'
+import { hasExitTaskByName } from '@/libs/JGPrint'
 export default {
   components: {
     pdf
@@ -104,7 +109,7 @@ export default {
       return pdf.createLoadingTask({ url: item, CMapReaderFactory })
     },
     setData (data) {
-      console.log(data)
+      // console.log(data)
       this.pdfList = data
       this.src = data[0]
       this.curpage = 1
@@ -115,8 +120,13 @@ export default {
     },
     // 确定
     handleCommonOk () {
-      this.$store.commit('SET_showSelectPrint', true)
-      this.$emit('ok')
+      const _this = this
+      // 判断当前单据是否已经正在打印中
+      hasExitTaskByName(function () {
+        // 选择打印机
+        _this.$store.commit('SET_showSelectPrint', true)
+        _this.$emit('ok')
+      })
     },
     // 取消
     handleCommonCancel () {
@@ -147,7 +157,7 @@ export default {
 </script>
 
 <style lang="less">
-  .common-modal{
+  .common-pdfView-modal{
     .common-main{
     }
     .btn-box{

+ 9 - 1
src/views/common/print.vue

@@ -5,7 +5,15 @@
       <a-radio value="INK">喷墨</a-radio>
     </a-radio-group>
     <a-button key="3" id="print-preview-btn" v-if="printerType=='NEEDLE'" :disabled="disabled" @click="handlePrint('preview')">打印预览</a-button>
-    <a-button key="2" type="primary" id="print-print-btn" :disabled="disabled" @click="handlePrint('print')">快捷打印</a-button>
+    <a-button
+      key="2"
+      type="primary"
+      id="print-print-btn"
+      :disabled="disabled"
+      :loading="$store.state.app.printLoading"
+      @click="handlePrint('print')">
+      {{ $store.state.app.printLoading?'打印中...':'快捷打印' }}
+    </a-button>
     <a-button
       key="1"
       type="primary"

+ 3 - 16
src/views/common/selectPrint.vue

@@ -1,10 +1,10 @@
 <template>
   <a-modal
     centered
-    class="common-modal"
+    class="common-selectPrint-modal"
     :footer="null"
     :maskClosable="false"
-    :z-index="1001"
+    :zIndex="1002"
     v-model="isShow"
     :title="modalTit"
     :bodyStyle="{padding: modalTit?'25px 32px 20px':'50px 32px 15px'}"
@@ -116,24 +116,11 @@ export default {
 </script>
 
 <style lang="less">
-  .common-modal{
+  .common-selectPrint-modal{
     .common-main{
       display: flex;
       line-height: 24px;
       .common-cont{
-        .common-tit{
-          color: rgba(0, 0, 0);
-          font-weight: 500;
-          font-size: 16px;
-          line-height: 1.4;
-          margin: 0;
-        }
-        .common-txt{
-          margin: 8px 0 0;
-          color: rgba(0, 0, 0);
-          font-size: 14px;
-          line-height: 1.5;
-        }
       }
     }
     .btn-box{

+ 3 - 1
src/views/inventoryManagement/inventoryChecking/printModal.vue

@@ -42,7 +42,9 @@
       </a-form-model>
       <div class="btn-cont">
         <a-button type="primary" id="inventoryChecking-print-save" @click="handleSave()">打印预览</a-button>
-        <a-button id="inventoryChecking-print-back" @click="handleCancel" style="margin-left: 15px;">快捷打印</a-button>
+        <a-button id="inventoryChecking-print-back" @click="handleCancel" :loading="$store.state.app.printLoading" style="margin-left: 15px;">
+          {{ $store.state.app.printLoading?'打印中...':'快捷打印' }}
+        </a-button>
       </div>
     </a-spin>
   </a-modal>