From 029559f7cedded183bd1fbd09a5ebb576a9fa21d Mon Sep 17 00:00:00 2001
From: zhou zhou <zozhouo3o@gmail.com>
Date: 星期五, 17 四月 2026 12:34:23 +0800
Subject: [PATCH] #条码自定义

---
 rsf-design/src/views/basic-info/wh-mat/matnrPrintTemplate.helpers.js |   58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/rsf-design/src/views/basic-info/wh-mat/matnrPrintTemplate.helpers.js b/rsf-design/src/views/basic-info/wh-mat/matnrPrintTemplate.helpers.js
index df53418..f40f917 100644
--- a/rsf-design/src/views/basic-info/wh-mat/matnrPrintTemplate.helpers.js
+++ b/rsf-design/src/views/basic-info/wh-mat/matnrPrintTemplate.helpers.js
@@ -75,6 +75,25 @@
   return color || fallback
 }
 
+function getImageNaturalSize(element = {}) {
+  const naturalWidth = normalizeNumber(element?.naturalWidth, 0)
+  const naturalHeight = normalizeNumber(element?.naturalHeight, 0)
+  return {
+    naturalWidth,
+    naturalHeight
+  }
+}
+
+export function getImageMinHeight(width, element = {}, fallback = 8) {
+  const { naturalWidth, naturalHeight } = getImageNaturalSize(element)
+  if (naturalWidth > 0 && naturalHeight > 0) {
+    return Number(
+      ((Math.max(1, normalizeNumber(width, 1)) * naturalHeight) / naturalWidth).toFixed(2)
+    )
+  }
+  return Math.max(8, normalizeNumber(fallback, 8))
+}
+
 function createElementId(prefix = 'el') {
   return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`
 }
@@ -197,6 +216,14 @@
 
   if (base.type === 'qrcode') {
     base.resolvedValue = resolveTemplatePlaceholders(base.valueTemplate, record)
+    return base
+  }
+
+  if (base.type === 'image') {
+    base.resolvedSrc = normalizeText(base.src)
+    base.objectFit = ['contain', 'cover', 'fill'].includes(base.objectFit)
+      ? base.objectFit
+      : 'contain'
     return base
   }
 
@@ -383,6 +410,21 @@
     return normalized
   }
 
+  if (normalized.type === 'image') {
+    normalized.src = normalizeText(element?.src)
+    normalized.objectFit = ['contain', 'cover', 'fill'].includes(element?.objectFit)
+      ? element.objectFit
+      : 'contain'
+    normalized.naturalWidth = Math.max(0, normalizeNumber(element?.naturalWidth, 0))
+    normalized.naturalHeight = Math.max(0, normalizeNumber(element?.naturalHeight, 0))
+    normalized.w = Math.max(8, normalizeNumber(element?.w, 20))
+    normalized.h = Math.max(
+      getImageMinHeight(normalized.w, element, normalizeNumber(element?.h, 20)),
+      normalizeNumber(element?.h, 20)
+    )
+    return normalized
+  }
+
   if (normalized.type === 'line') {
     normalized.direction = element?.direction === 'vertical' ? 'vertical' : 'horizontal'
     normalized.borderWidth = Math.max(0.2, normalizeNumber(element?.borderWidth, 0.4))
@@ -431,6 +473,10 @@
     }
     normalized.columns = normalizeTableColumns(element?.columns, normalized.w)
     normalized.rows = normalizeTableRows(element?.rows)
+    normalized.w = Math.max(
+      normalizeNumber(normalized.w, 0),
+      normalized.columns.reduce((total, column) => total + normalizeNumber(column?.width, 0), 0)
+    )
     normalized.h = Math.max(
       normalizeNumber(normalized.h, 0),
       normalized.rows.reduce((total, row) => total + normalizeNumber(row?.height, 0), 0)
@@ -645,6 +691,18 @@
     })
   }
 
+  if (type === 'image') {
+    return normalizeElement({
+      ...common,
+      w: 20,
+      h: 20,
+      src: '',
+      naturalWidth: 0,
+      naturalHeight: 0,
+      objectFit: 'contain'
+    })
+  }
+
   if (type === 'line') {
     return normalizeElement({
       ...common,

--
Gitblit v1.9.1