From f3d4db769ba9b51b799d981511a710fd443d0e08 Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 21 四月 2025 12:18:03 +0800
Subject: [PATCH] Merge branch 'master' into positec

---
 src/views/printTemplate/print.js |   98 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 73 insertions(+), 25 deletions(-)

diff --git a/src/views/printTemplate/print.js b/src/views/printTemplate/print.js
index f6b5be1..7089c83 100644
--- a/src/views/printTemplate/print.js
+++ b/src/views/printTemplate/print.js
@@ -4,7 +4,7 @@
    * @param  {Object}    configs      閰嶇疆淇℃伅
    * @param  {Boolean}   selectId     缂栬緫鍏冪礌
    */
-  static sketch (configs, selectId) {
+  static sketch (configs, selectId, debug = false) {
     if (!configs.height || !configs.width) return
 
     if (configs.height / configs.width > 10 || configs.width / configs.height > 10) return
@@ -22,6 +22,8 @@
       elements.forEach(element => {
         element.left = element.left * ratio
         element.top = element.top * ratio
+        element.oriwidth = element.width
+        element.oriheight = element.height
         element.width = element.width * ratio
         element.height = element.height * ratio
 
@@ -34,13 +36,21 @@
           element.fontSize = element.fontSize * sizeradio
         } else if (element.type === 'qrcode') {
           element.qrcodeWidth = element.qrcodeWidth * ratio
+
+          if (element.qrcodeWidth > element.height) {
+            element.qrcodeWidth = element.height
+          }
+          if (element.qrcodeWidth > element.width) {
+            element.qrcodeWidth = element.width
+          }
         } else if (element.type === 'image') {
           element.imgWidth = element.imgWidth * ratio
           element.imgHeight = element.imgHeight * ratio
         }
       })
+
       return new Promise(resolve => {
-        this.sketchothers(context, elements, selectId, ratio, resolve)
+        this.sketchothers(context, elements, selectId, debug, ratio, resolve)
       })
     } else {
       return new Promise(resolve => {
@@ -54,30 +64,37 @@
    * @param  {Object}    context    鐢诲竷瀵硅薄
    * @param  {Object}    elements   鍥剧墖鏂囧瓧淇℃伅
    */
-  static sketchothers (context, elements, selectId, ratio, resolve) {
+  static sketchothers (context, elements, selectId, debug, ratio, resolve) {
     let element = elements.splice(0, 1)[0] // 閫愪釜缁樺埗鍥剧墖鏂囧瓧
     let textLineSpace = 5 // 缁樺埗鏃惰闂磋窛锛岄槻姝㈡枃瀛楅噸鍙�
     context.save()
 
-    if (element.rotate) { // 鍏冪礌鏃嬭浆鏃讹紝璁剧疆鐢诲竷鏃嬭浆瑙掑害
-      let _cx = element.left + element.width / 2
-      let _cy = element.top + element.height / 2
-      context.translate(_cx, _cy) // 绉诲姩鍘熺偣
-      context.rotate(element.rotate * Math.PI / 180)
-      context.translate(-_cx, -_cy) // 鎭㈠鍘熺偣
-    }
+    // if (element.rotate) { // 鍏冪礌鏃嬭浆鏃讹紝璁剧疆鐢诲竷鏃嬭浆瑙掑害
+    //   let _cx = element.left + element.width / 2
+    //   let _cy = element.top + element.height / 2
+    //   context.translate(_cx, _cy) // 绉诲姩鍘熺偣
+    //   context.rotate(element.rotate * Math.PI / 180)
+    //   context.translate(-_cx, -_cy) // 鎭㈠鍘熺偣
+    // }
 
     if (selectId === element.uuid) { // 閫変腑鍏冪礌锛岃缃閮ㄩ槾褰�
-      context.shadowBlur = 10
-      context.shadowColor = '#757575'
+      context.shadowBlur = 5
+      context.shadowColor = '#1890ff'
       context.fillStyle = 'white'
-      context.fillRect(element.left, element.top, element.width, element.height)
+      context.fillRect(element.left, element.top, element.width || 1, element.height || 1)
+      context.shadowBlur = 0
+    } else if (debug) {
+      context.shadowBlur = 3
+      context.shadowColor = 'orange'
+      context.fillStyle = 'white'
+      context.fillRect(element.left, element.top, element.width || 1, element.height || 1)
       context.shadowBlur = 0
     }
 
     // 缁樺埗杈规
     // context.rect(element.left + element.borderSize / 2, element.top + element.borderSize / 2, element.width - element.borderSize, element.height - element.borderSize)
     if (element.borderSize >= 1) {
+      context.beginPath()
       context.strokeStyle = element.borderColor
       context.lineWidth = element.borderSize
       context.rect(element.left, element.top, element.width, element.height)
@@ -85,13 +102,24 @@
     }
 
     // 璁剧疆鑳屾櫙鑹�
-    if (element.background && element.background !== 'white') {
+    if (!element.borderSize && (element.oriwidth === 1 || element.oriheight === 1)) { // 绾�
+      context.strokeStyle = element.background
+      context.beginPath()
+      if (element.oriwidth === 1) {
+        context.moveTo(element.left, element.top)
+        context.lineTo(element.left, element.top + element.height)
+      } else {
+        context.moveTo(element.left, element.top + element.height)
+        context.lineTo(element.left + element.width, element.top + element.height)
+      }
+      context.stroke()
+    } else if (element.background && element.background !== 'white') {
       context.fillStyle = element.background
       context.fillRect(element.left, element.top, element.width, element.height)
     }
 
     if (selectId === element.uuid && element.width > 3 * ratio && element.height > 3 * ratio) { // 閫変腑鍏冪礌锛岃缃閮ㄩ槾褰�
-      context.strokeStyle = 'black'
+      context.strokeStyle = '#1890ff'
       context.beginPath()
       context.moveTo(element.left + element.width - 7, element.top + element.height - 2)
       context.lineTo(element.left + element.width - 2, element.top + element.height - 7)
@@ -103,7 +131,7 @@
     if (!element.width || !element.height) {
       context.restore() // 閲嶇疆鐢诲竷
       if (elements.length > 0) {
-        this.sketchothers(context, elements, selectId, ratio, resolve)
+        this.sketchothers(context, elements, selectId, debug, ratio, resolve)
       } else {
         this.cachesketch(context, resolve)
       }
@@ -117,6 +145,14 @@
       context.fillStyle = element.fontColor
 
       let lines = element.value.split('\n')
+
+      if (!element.value && element.field) {
+        if (element.field === 'other_field') {
+          lines = [element.cusfield || '']
+        } else {
+          lines = [element.field]
+        }
+      }
       let _y = element.top + element.padding + element.fontSize + element.borderSize
       let _left = element.left + element.borderSize + element.padding
       let _right = element.left + element.width - element.padding - element.borderSize
@@ -244,7 +280,7 @@
 
       context.restore() // 閲嶇疆鐢诲竷
       if (elements.length > 0) {
-        this.sketchothers(context, elements, selectId, ratio, resolve)
+        this.sketchothers(context, elements, selectId, debug, ratio, resolve)
       } else {
         this.cachesketch(context, resolve)
       }
@@ -287,7 +323,7 @@
 
         context.restore() // 閲嶇疆鐢诲竷
         if (elements.length > 0) {
-          this.sketchothers(context, elements, selectId, ratio, resolve)
+          this.sketchothers(context, elements, selectId, debug, ratio, resolve)
         } else {
           this.cachesketch(context, resolve)
         }
@@ -300,7 +336,7 @@
   
           context.restore() // 閲嶇疆鐢诲竷
           if (elements.length > 0) {
-            this.sketchothers(context, elements, selectId, ratio, resolve)
+            this.sketchothers(context, elements, selectId, debug, ratio, resolve)
           } else {
             this.cachesketch(context, resolve)
           }
@@ -329,7 +365,7 @@
 
         context.restore() // 閲嶇疆鐢诲竷
         if (elements.length > 0) {
-          this.sketchothers(context, elements, selectId, ratio, resolve)
+          this.sketchothers(context, elements, selectId, debug, ratio, resolve)
         } else {
           this.cachesketch(context, resolve)
         }
@@ -339,7 +375,7 @@
   
           context.restore() // 閲嶇疆鐢诲竷
           if (elements.length > 0) {
-            this.sketchothers(context, elements, selectId, ratio, resolve)
+            this.sketchothers(context, elements, selectId, debug, ratio, resolve)
           } else {
             this.cachesketch(context, resolve)
           }
@@ -361,14 +397,17 @@
       }
 
       let image = new Image()
-      image.src = element.value || element.url
+      image.src = element.url
+      if (element.value && element.value.indexOf(window.location.hostname) > -1) {
+        image.src = element.value
+      }
 
       if (image.complete) {
         context.drawImage(image, _left, _top, element.imgWidth, element.imgHeight)
-
+        
         context.restore() // 閲嶇疆鐢诲竷
         if (elements.length > 0) {
-          this.sketchothers(context, elements, selectId, ratio, resolve)
+          this.sketchothers(context, elements, selectId, debug, ratio, resolve)
         } else {
           this.cachesketch(context, resolve)
         }
@@ -378,10 +417,18 @@
   
           context.restore() // 閲嶇疆鐢诲竷
           if (elements.length > 0) {
-            this.sketchothers(context, elements, selectId, ratio, resolve)
+            this.sketchothers(context, elements, selectId, debug, ratio, resolve)
           } else {
             this.cachesketch(context, resolve)
           }
+        }
+      }
+      image.onerror = () => {
+        context.restore() // 閲嶇疆鐢诲竷
+        if (elements.length > 0) {
+          this.sketchothers(context, elements, selectId, debug, ratio, resolve)
+        } else {
+          this.cachesketch(context, resolve)
         }
       }
     }
@@ -394,6 +441,7 @@
   static cachesketch (context, resolve) {
     let cacheCanvas = context.canvas
     let canvas = document.getElementById('darea')
+
     canvas.width = cacheCanvas.width
     canvas.height = cacheCanvas.height
     let ctx = canvas.getContext('2d')

--
Gitblit v1.8.0