From f5062c2c10b26a50e9cc38bf37d02b3ce4603206 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期三, 07 十二月 2022 19:00:16 +0800
Subject: [PATCH] 2022-12-07

---
 src/tabviews/zshare/actionList/printbutton/index.jsx |  295 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 254 insertions(+), 41 deletions(-)

diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index 0e665c5..988c039 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -183,11 +183,7 @@
       // 鏁版嵁閫夋嫨绫诲瀷鏍¢獙
       this.actionSettingError()
       return
-    } else if (
-      !btn.verify ||
-      (btn.verify.printMode === 'normal' && (!btn.verify.Template || !btn.verify.linkUrl)) ||
-      (btn.verify.printMode === 'custom' && (!btn.verify.printFunc || !btn.verify.linkUrl))
-    ) {
+    } else if (!btn.verify || !btn.verify.printMode) {
       notification.warning({
         top: 92,
         message: '璇峰畬鍠勬墦鍗伴獙璇佷俊鎭紒',
@@ -232,10 +228,20 @@
     }
   }
 
+  triggerPrint = (data, formlist = []) => {
+    const { btn } = this.props
+
+    if (btn.verify.printMode === 'RFID') {
+      this.triggerRFIDPrint(data, formlist)
+    } else {
+      this.triggerNormalPrint(data, formlist)
+    }
+  }
+
   /**
    * @description 瑙﹀彂鎵撳嵃
    */
-  triggerPrint = (data, formlist = []) => {
+  triggerNormalPrint = (data, formlist) => {
     const { btn } = this.props
     let formdata = {}
     let baseCount = 1
@@ -378,7 +384,7 @@
             param.rduri = window.GLOB.mainSystemApi
           }
     
-          Api.genericInterface(param).then(result => {
+          Api.getSystemCacheConfig(param).then(result => {
             result.tempId = tempId
             resolve(result)
           })
@@ -448,6 +454,109 @@
         }
       } else {
         this.execError(errorMsg)
+      }
+    })
+  }
+
+  /**
+   * @description 瑙﹀彂RFID鎵撳嵃
+   */
+  triggerRFIDPrint = (data, formlist) => {
+    const { btn } = this.props
+    let formdata = {}
+    let list = []
+    
+    formlist.forEach(_data => {
+      formdata[_data.key] = _data.value
+    })
+
+    new Promise(resolve => {
+      if (btn.intertype === 'system') { // 浣跨敤绯荤粺鏃讹紝鐩存帴浠庤〃鏍兼垨琛ㄥ崟涓�夊彇鏁版嵁
+        if (btn.Ot === 'notRequired') {
+          if (formlist.length > 0) {
+            list = [formdata]
+          }
+        } else {
+          data.forEach(cell => {
+            let _cell = {...cell, ...formdata}
+            list.push(_cell)
+          })
+        }
+
+        resolve(true)
+      } else {
+        this.getprintdata(btn, data, formdata, formlist).then(result => {
+          if (result.next) {
+            result.list.forEach(cell => {
+              // 绯荤粺鎵撳嵃鏁版嵁锛屾牎楠宒ata瀛楁
+              if (!cell.data || cell.data.length === 0) return
+
+              cell.data.forEach(m => {
+                let _cell = {...m, ...formdata}
+                list.push(_cell)
+              })
+            })
+          }
+          
+          resolve(result.next)
+        })
+      }
+    }).then(res => {
+      // 鑾峰彇鎵撳嵃妯℃澘 getTemp
+      if (!res) return false
+
+      if (list.length === 0) {
+        notification.warning({
+          top: 92,
+          message: '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
+          duration: 5
+        })
+        return false
+      }
+
+      let param = {
+        func: 's_PrintTemplateMGetData',
+        Type: 'Y',
+        // ID: tempId, // 娣诲姞妯℃澘鏃讹紝淇濆瓨鍙婃煡璇娇鐢ㄦā鏉垮弬鏁�
+        PrintTempNO: btn.verify.Template
+      }
+
+      if (window.GLOB.mainSystemApi) { // 浠庡崟鐐圭櫥褰曟湇鍔″櫒鍙栨墦鍗伴厤缃俊鎭�
+        param.rduri = window.GLOB.mainSystemApi
+      }
+
+      return Api.getSystemCacheConfig(param)
+    }).then(result => {
+      if (!result) {
+        this.setState({ loading: false })
+        return
+      }
+
+      if (!result.ConfigParam) {
+        notification.warning({
+          top: 92,
+          message: '鏈幏鍙栧埌鎵撳嵃妯℃澘淇℃伅锛�',
+          duration: 5
+        })
+        this.setState({ loading: false })
+      } else {
+        let configParam = ''
+        try {
+          configParam = JSON.parse(window.decodeURIComponent(window.atob(result.ConfigParam)))
+        } catch (e) {
+          configParam = ''
+        }
+  
+        if (!configParam) {
+          notification.warning({
+            top: 92,
+            message: '鎵撳嵃妯℃澘瑙f瀽閿欒锛�',
+            duration: 5
+          })
+          this.setState({ loading: false })
+        } else {
+          this.execRfidPrint(list, configParam)
+        }
       }
     })
   }
@@ -1087,48 +1196,152 @@
     }
   }
 
-  // execRfidPrint = () => {
-  //   let type = 'HF'
-  //   let printparamsJsonArray = []
+  execRfidPrint = (list, template) => {
+    const { btn } = this.props
 
-  //   let mm = 12
-  //   if (type === 'HF') {
-  //     printparamsJsonArray.push({PTK_OpenUSBPort: 255}); // 鎵撳紑鎵撳嵃鏈篣SB绔彛
-  //     printparamsJsonArray.push({PTK_ClearBuffer: ''}); // 娓呯┖缂撳瓨
-  //     printparamsJsonArray.push({PTK_SetDarkness: 10}); // 璁剧疆鎵撳嵃榛戝害 鍙栧�艰寖鍥� 0-20
-  //     printparamsJsonArray.push({PTK_SetPrintSpeed: 4}); // 璁剧疆鎵撳嵃閫熷害
-  //     printparamsJsonArray.push({PTK_SetDirection: 'B'}); // 璁剧疆鎵撳嵃鏂瑰悜
-  //     printparamsJsonArray.push({PTK_SetLabelHeight: 25*mm + ","+ 10*mm +","+ 0 +","+ false}); // 璁剧疆鏍囩楂樺害銆侀棿闅欏強鍋忕Щ
-  //     printparamsJsonArray.push({PTK_SetLabelWidth: 60*mm}); // 璁剧疆鏍囩瀹藉害
-  //     printparamsJsonArray.push({PTK_SetRFID: 0+","+0+","+0+","+0+","+0}); // UHF RFID鎵撳嵃璁剧疆
-  //     printparamsJsonArray.push({PTK_RWRFIDLabel: 1+","+0+","+0+","+4+","+1+',EEBA99192945C746'});
-  //     printparamsJsonArray.push({PTK_DrawText_TrueType: "50,10,36,0,寰蒋闆呴粦,1,700,0,0,0,鍖椾含鏄庣鏈夐檺鍏徃"});
-  //     // printparamsJsonArray.push({PTK_DrawText_TrueType: x+","+y+","+FHeight+","+FWidth+","+FType+","+Fspin+","+FWeight+","+FItalic+","+FUnline+","+FStrikeOut+","+data});
-  //     // printparamsJsonArray.push({PTK_EncodeRFIDPC:'mkA040'});
-  //     printparamsJsonArray.push({PTK_PrintLabel:1+","+1});
-  //     printparamsJsonArray.push({PTK_CloseUSBPort: ""}); // 鍏抽棴USB閫氳绔彛
-  //   }
+    list = list.filter(item => !!item[btn.verify.valueField])
 
-  //   let data = {
-  //     reqParam: '1',
-  //     printparams: JSON.stringify(printparamsJsonArray)
-  //     // printparams: JSON.stringify([{PTK_OpenUSBPort: 255},{PTK_ErrorReport_USBInterrupt: 'status:'},{PTK_GetPrinterDPI: 'DPI:'},{PTK_CloseUSBPort: ''}])
-  //     // printparams: JSON.stringify([{PTK_OpenUSBPort: 255},{PTK_RFIDCalibrate: ''},{PTK_CloseUSBPort: ''}])
-  //   }
+    if (list.length === 0) {
+      notification.warning({
+        top: 92,
+        message: '鏈幏鍙栧埌鎵撳嵃鏁版嵁锛�',
+        duration: 5
+      })
+      this.setState({ loading: false })
+      return
+    }
 
-  //   Api.postekPrint(data).then(result => {
+    let width = template.width
+    let height = template.height
+    let gap = template.gap || 0
+    let mm = 12
 
-  //   })
-  // }
+    if (btn.verify.DPI === '203') {
+      mm = 8
+    } else if (btn.verify.DPI === '600') {
+      mm = 24
+    }
+
+    let items = []
+    template.elements.forEach(element => {
+      if (!['text', 'barcode', 'qrcode'].includes(element.type)) return
+
+      let _field = element.field
+
+      if (_field === 'other_field') {
+        _field = element.cusfield || ''
+      }
+
+      let item = {
+        type: element.type,
+        value: element.value || '',
+        field: _field
+      }
+
+      if (item.type === 'text') {
+        let size = Math.floor(4 * mm * (element.fontSize || 12) / 12)
+        let fontWeight = 400
+        if (element.fontWeight === 'bold') {
+          fontWeight = 600
+        } else if (element.fontWeight === 'bolder') {
+          fontWeight = 800
+        } else if (element.fontWeight === 'lighter') {
+          fontWeight = 300
+        }
+        item.draw = `${element.left * mm},${element.top * mm},${size},0,${element.fontFamily || '寰蒋闆呴粦'},${element.align === 'center' ? 5 : 1},${fontWeight},0,0,0,`
+      } else if (item.type === 'barcode') {
+        let codeType = 1
+        if (element.barcodeType === 'EAN13') {
+          codeType = 'E30'
+        }
+        let narrowWidth = element.narrowWidth || 2
+        let horizontal = element.narrowWidth || 2
+        let vertical = Math.ceil(element.barcodeHeight * mm)
+
+        item.draw = `${element.left * mm},${element.top * mm},0,${codeType},${narrowWidth},${horizontal},${vertical},${element.barcodeLabel === 'true' ? 'B' : 'N'},`
+      } else if (item.type === 'qrcode') {
+        let r = Math.ceil(element.qrcodeWidth / 2)
+
+        item.draw = `${element.left * mm},${element.top * mm},0,0,0,${r},0,0,8,`
+      }
+
+      items.push(item)
+    })
+
+    let ip = '192.168.1.2'
+    let params = list.map(cell => {
+      let array = []
+      let value = cell[btn.verify.valueField]
+
+      if (btn.verify.linkType !== 'USB') {
+        array.push({PTK_Connect_Timer: `${ip},${btn.verify.port},5`}); // 鎵撳紑鎵撳嵃鏈虹綉缁滅鍙�
+      } else {
+        array.push({PTK_OpenUSBPort: btn.verify.port}); // 鎵撳紑鎵撳嵃鏈篣SB绔彛
+      }
+
+      array.push({PTK_ClearBuffer: ''}); // 娓呯┖缂撳瓨
+      array.push({PTK_SetDirection: 'B'}); // 璁剧疆鎵撳嵃鏂瑰悜
+      array.push({PTK_SetLabelHeight: height * mm + ',' + gap * mm + ',' + 0 + ',' + false}); // 璁剧疆鏍囩楂樺害銆侀棿闅欏強鍋忕Щ
+      array.push({PTK_SetLabelWidth: width * mm}); // 璁剧疆鏍囩瀹藉害
+      array.push({PTK_SetRFID: '0,0,0,0,0'}); // UHF RFID鎵撳嵃璁剧疆
+      array.push({PTK_RWRFIDLabel: '1,0,0,4,1,' + value});
+
+      items.forEach(m => {
+        let val = ''
+        if (m.field) {
+          val = cell[m.field]
+        } else {
+          val = m.value
+        }
+
+        if (!val && val !== 0) return
+
+        if (m.type === 'text') {
+          array.push({PTK_DrawText_TrueType: m.draw + val});
+        } else if (m.type === 'barcode') {
+          array.push({PTK_DrawBarcode: m.draw + val});
+        } else if (m.type === 'qrcode') {
+          array.push({PTK_DrawBar2D_QR: m.draw + val});
+        }
+      })
+      
+      array.push({PTK_PrintLabel: '1,1'});
+      array.push({PTK_CloseUSBPort: ''}); // 鍏抽棴USB閫氳绔彛
+
+      return {
+        reqParam: '1',
+        printparams: JSON.stringify(array)
+      }
+    })
+
+    this.loopRFIDPrint(params)
+  }
+
+  loopRFIDPrint = (params) => {
+    let param = params.shift()
+
+    Api.postekPrint(param).then(res => {
+      if (res.retval === '0') {
+        if (params.length === 0) {
+          this.execSuccess({ ErrCode: 'S', message: '', ErrMesg: '鎵撳嵃璇锋眰宸插彂鍑恒��', status: true })
+        } else {
+          setTimeout(() => {
+            this.loopRFIDPrint(params)
+          }, 200)
+        }
+      } else {
+        if (res.retval === '30021') {
+          res.msg = res.msg.replace(/PTK_ClearBuffer[\s\S]*/, '')
+        }
+        
+        this.execError({ErrCode: 'N', message: res.msg})
+      }
+    })
+  }
 
   execPrint = (list, template, formdata) => {
     const { btn } = this.props
     let _errors = []
-    
-    // if (btn) {
-    //   this.execRfidPrint()
-    //   return
-    // }
 
     let defaultPrinter = btn.verify.defaultPrinter || 'lackprinter'
     let printers = {}

--
Gitblit v1.8.0