From fd679126018e59262e3c03c0849f453c4e114711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Thu, 13 Aug 2026 16:01:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=89=8D=E7=AB=AF=E5=89=A7=E6=9C=AC?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=20parseScript=20+=20RubyText=20=E9=80=90?= =?UTF-8?q?=E5=AD=97=E9=AB=98=E4=BA=AE=20highlight=20prop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui-src/src/components/RubyText.vue | 8 ++++++-- ui-src/src/utils/theater.js | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ui-src/src/components/RubyText.vue b/ui-src/src/components/RubyText.vue index 30674a0..01b2b26 100644 --- a/ui-src/src/components/RubyText.vue +++ b/ui-src/src/components/RubyText.vue @@ -2,7 +2,7 @@ {{ ch.p }} - {{ ch.c }} + {{ ch.c }} @@ -16,7 +16,8 @@ export default { text: { type: String, default: '' }, pinyin: { type: String, default: '' }, // 后端原始 JSON 字符串 show: { type: Boolean, default: true }, // 4-6 档显示,6-8 档可关 - dark: { type: Boolean, default: false } + dark: { type: Boolean, default: false }, + highlight: { type: Number, default: -1 } // >=0 逐字高亮到该下标;-1 不启用 }, computed: { pairs() { @@ -51,4 +52,7 @@ export default { .dark .ruby-ch { color: #5b4636; } +.ruby-hl { color: #ff6b35; font-weight: 700; } +.ruby-cur { color: #ff6b35; font-weight: 800; animation: cur-pop 0.3s ease; } +@keyframes cur-pop { 0% { transform: scale(1.35); } 100% { transform: scale(1.15); } } diff --git a/ui-src/src/utils/theater.js b/ui-src/src/utils/theater.js index d79529f..02430e9 100644 --- a/ui-src/src/utils/theater.js +++ b/ui-src/src/utils/theater.js @@ -27,3 +27,14 @@ export function entryProps(entry) { export function entryCharacter(entry) { return entry && entry.character ? entry.character : null } + +// parseScript 解析节点剧本(JSON 台词流),非法/为空返回 null(调用方回退 v1 呈现) +export function parseScript(raw) { + if (!raw) return null + try { + const arr = JSON.parse(raw) + return Array.isArray(arr) && arr.length > 0 ? arr : null + } catch (e) { + return null + } +}