From a59b923ed105f0f75953b87346da645c5f6860a3 Mon Sep 17 00:00:00 2001
From: 1 <13958863+jayjiajun@user.noreply.gitee.com>
Date: Wed, 23 Jul 2025 17:03:15 +0800
Subject: [PATCH] =?UTF-8?q?=E6=98=BE=E5=8D=A1=E5=AE=8C=E5=96=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/iot/device/display.vue | 77 +++++++++++++++++++++++---------
1 file changed, 56 insertions(+), 21 deletions(-)
diff --git a/src/views/iot/device/display.vue b/src/views/iot/device/display.vue
index a0ab06b..77e3b42 100644
--- a/src/views/iot/device/display.vue
+++ b/src/views/iot/device/display.vue
@@ -328,17 +328,17 @@
$t('device.running-status.866086-12') }}
{{ firmware.firmwareName
- }}
+ }}
{{ firmware.productName
- }}
+ }}
Version {{ firmware.version
- }}
+ }}
{{
getDownloadUrl(firmware.filePath) }}
{{ firmware.remark
- }}
+ }}
@@ -1070,8 +1070,11 @@ export default {
zone.fontColor = item.txt.col || 0; // 文本颜色
zone.fontBold = item.txt.fW || 0; // 字体加粗
zone.fontStretch = item.txt.stch || 0; // 拉伸方向
- zone.hAlign = typeof item.txt.hPos === 'number' ? Math.max(item.txt.hPos - 1, 0) : 1; // 水平对齐
- zone.vAlign = typeof item.txt.vPos === 'number' ? Math.max(item.txt.vPos - 1, 0) : 1; // 垂直对齐
+ // 调试输出
+ console.log('编辑节目item.txt.hPos:', item.txt.hPos, 'item.txt.vPos:', item.txt.vPos);
+ zone.hAlign = typeof item.txt.hPos === 'number' ? (item.txt.hPos + 1) : 0; // 水平对齐(1左,2中,3右)
+ zone.vAlign = typeof item.txt.vPos === 'number' ? (item.txt.vPos + 1) : 0; // 垂直对齐(1顶,2中,3底)
+ console.log('zone.hAlign:', zone.hAlign, 'zone.vAlign:', zone.vAlign);
} else if (item.typ === 1 && item.img) {
// 图片类型
zone.playType = 1;
@@ -2362,8 +2365,8 @@ export default {
fEn: zone.fontEn + 1, // 英文字体
fW: zone.fontBold, // 字体加粗
stch: zone.fontStretch, // 拉伸方向
- hPos: zone.hAlign - 1, // 水平对齐
- vPos: zone.vAlign - 1 // 垂直对齐
+ hPos: zone.hAlign + 1, // 水平对齐(1左,2中,3右)
+ vPos: zone.vAlign + 1 // 垂直对齐(1顶,2中,3底)
}
};
area.pLst.push(textItem);
@@ -2506,13 +2509,19 @@ export default {
ctx.fillStyle = colors[zone.fontColor] || '#000000';
ctx.textBaseline = 'top';
// 这里根据zone.fontEn选择英文字体
- let fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun';
- if (zone.fontEn !== undefined && zone.fontEn !== null) {
- // 你可以根据实际需求映射到具体英文字体
- const enFontMap = [
- 'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman'
- ];
- fontFamily = enFontMap[zone.fontEn] || fontFamily;
+ const fontFamilies = [
+ 'SimSun, 宋体, Songti SC, serif',
+ 'SimHei, 黑体, Heiti SC, sans-serif',
+ 'KaiTi, 楷体, Kaiti SC, serif'
+ ];
+ const enFontMap = [
+ 'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman'
+ ];
+ let fontFamily;
+ if (/^[A-Za-z0-9\s]+$/.test(zone.displayText)) {
+ fontFamily = enFontMap[zone.fontEn] || fontFamilies[0];
+ } else {
+ fontFamily = fontFamilies[zone.font] || fontFamilies[0];
}
ctx.font = `${asset.fontWeight} ${asset.scaledFontSize}px ${fontFamily}`;
@@ -2528,6 +2537,8 @@ export default {
startY = zoneY + (zoneHeight - totalHeight) / 2;
} else if (verticalAlign === 2) { // 底部对齐
startY = zoneY + zoneHeight - totalHeight;
+ } else { // 顶部对齐
+ startY = zoneY;
}
// 绘制每一行文本
@@ -2540,6 +2551,8 @@ export default {
startX = zoneX + (zoneWidth - textWidth) / 2;
} else if (zone.hAlign === 2) { // 右对齐
startX = zoneX + zoneWidth - textWidth;
+ } else { // 左对齐
+ startX = zoneX;
}
// 计算动画偏移
@@ -2675,13 +2688,31 @@ export default {
// 计算缩放后的字体大小
const scaledFontSize = Math.max(10, Math.round(fontSize * scale * 0.8)); // 添加0.8缩放系数
- const fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun';
+ const fontFamily = [
+ 'SimSun, 宋体, Songti SC, serif',
+ 'SimHei, 黑体, Heiti SC, sans-serif',
+ 'KaiTi, 楷体, Kaiti SC, serif'
+ ];
const fontWeight = zone.fontBold ? 'bold' : 'normal';
// 创建临时canvas测量文本
const measureCanvas = document.createElement('canvas');
const measureCtx = measureCanvas.getContext('2d');
- measureCtx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily}`;
+ const fontFamilies2 = [
+ 'SimSun, 宋体, Songti SC, serif',
+ 'SimHei, 黑体, Heiti SC, sans-serif',
+ 'KaiTi, 楷体, Kaiti SC, serif'
+ ];
+ const enFontMap2 = [
+ 'Courier New', 'Arial Black', 'Arial Italic', 'Lucida Console', 'Impact', 'Gothic', 'Arial Narrow', 'Comic Sans MS', 'Brush Script MT', 'Century Gothic', 'Times New Roman'
+ ];
+ let fontFamily2;
+ if (/^[A-Za-z0-9\s]+$/.test(zone.displayText)) {
+ fontFamily2 = enFontMap2[zone.fontEn] || fontFamilies2[0];
+ } else {
+ fontFamily2 = fontFamilies2[zone.font] || fontFamilies2[0];
+ }
+ measureCtx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily2}`;
// 分行逻辑
const zoneRenderWidth = swapWH ? zone.height : zone.width;
@@ -2720,7 +2751,7 @@ export default {
pages,
isText: true,
scaledFontSize,
- fontFamily,
+ fontFamily: fontFamily2,
fontWeight,
lineHeight
};
@@ -2765,9 +2796,13 @@ export default {
const scale = Math.min(canvasW / screenW, canvasH / screenH);
let fontSize = parseInt(this.addProgramFontSizes[zone.fontSize] || '16px');
let scaledFontSize = Math.max(10, Math.round(fontSize * scale));
- const fontFamily = ['SimSun', 'SimHei', 'KaiTi'][zone.font] || 'SimSun';
+ const fontFamily = [
+ 'SimSun, 宋体, Songti SC, serif',
+ 'SimHei, 黑体, Heiti SC, sans-serif',
+ 'KaiTi, 楷体, Kaiti SC, serif'
+ ];
const fontWeight = zone.fontBold ? 'bold' : 'normal';
- ctx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily}`;
+ ctx.font = `${fontWeight} ${scaledFontSize}px ${fontFamily[zone.font]}`;
let lines = [];
let text = zone.displayText;
let zw = zone.width * scale;