diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js index 02b681f..19d7018 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/data-pages.js @@ -1229,14 +1229,6 @@ function svgCut(text, maxU) { /* 超宽截断加省略号 */ const s = String(text || ''); return _uLen(s) <= maxU ? s : (svgWrap(s, maxU - 1)[0] + '…'); } -/* —— 配色:按拆解文本情绪调性选 深色系/浅色系(复用 F6 配色规范;赛道标签歧义时以情绪锚点为准) —— */ -function vkPalette(analysis) { - const blob = ['赛道', '账号核心定位', '内容核心', '内容风格', '可复用的爆款内容体系'].map((k) => String((analysis || {})[k] || '')).join(' '); - const deep = /深沉|催泪|怀旧|忧郁|厚重|悲情|救赎|泪目|旧时光|岁月|思念|遗憾|守护/.test(blob); - const light = /明快|欢乐|治愈|解压|暖心|温馨|可爱|元气|清新|甜蜜|宠溺|搞笑|积极/.test(blob); - /* 深色词命中 → 深色系(如催泪向治愈);否则浅色系(默认) */ - return deep && !light ? 'deep' : 'light'; -} /* 抽取拆解为「关键信息模块数据」→ [{ title, kind:'kv', rows:[[k,v]...] } | { title, kind:'blocks', blocks:[[b, [[k,v]...]]] }](无内容模块不返回) */ function vkCollect(analysis) { if (!analysis || typeof analysis !== 'object') return []; @@ -1290,23 +1282,18 @@ function vkCollect(analysis) { } /* SVG 生成器:analysis=拆解 dict,vt=视频标题(含话题标签原样,卡内自行清理),acc=账号名。 排版模型:全宽 680,白色画布(用户定稿:白底简洁版,非账号设定卡式渐变大底),头部标题框 520×170, - 其下逐模块排版——模块标题(accent 色书写)→ 浅 tint 圆角内容卡;深/浅调性只作用于 accent 与卡片 tint。 + 其下逐模块排版——模块标题(棕红 accent 书写)→ 米色圆角内容板块(#FAEEDA,参照账号设定卡内容板块规范,09-04 去粉红定稿)。 文本折行按「全角单位」计算:中文 1u≈字号宽、ASCII 0.55u;行 y 均为 text 基线,行高按字号 + 视觉间距直接给出(无字符串后处理)。 */ function renderVideoKeySvg(analysis, vt, acc) { const D = vkCollect(analysis); if (!D || !D.mods || !D.mods.length) return ''; - const deep = vkPalette(analysis) === 'deep'; - /* 色板:白底 + tint 卡;deep=暖米棕红系(深沉向)/ light=粉白玫瑰金系(明快向) */ - const P = deep ? { - bgA: '#FFFFFF', bgB: '#FFFFFF', /* 纯白底(09-04 用户定稿) */ - box: '#FBF3E7', boxBd: '#EBD9BC', boxTitle: '#7B2D1B', boxText: '#6A5644', boxTag: '#C13B2F', - headBox: '#FBF3E7', headBd: '#EBD9BC', headTitleA: '#8C2F1E', headTitleB: '#C05A32', headSub: '#C13B2F', headDim: '#A08B76', - secTitle: '#8C2F1E', deco: '#EBD9BC', - } : { - bgA: '#FFFFFF', bgB: '#FFFFFF', - box: '#FDF1F5', boxBd: '#F0D3E0', boxTitle: '#A13D6B', boxText: '#6E4A5C', boxTag: '#D84A8A', - headBox: '#FDF1F5', headBd: '#F0D3E0', headTitleA: '#B03E76', headTitleB: '#E0579A', headSub: '#D84A8A', headDim: '#B193A5', - secTitle: '#A13D6B', deco: '#F0D3E0', + /* 色板(09-04 用户定稿:统一参照账号设定卡米色系——旧梦留声机账号卡内容板块 #FAEEDA,去掉粉色系); + 纯白底 + 米色内容板块 + 暖棕文字 + 棕红 accent(与 F6 账号设定卡 deep 系规范一致) */ + const P = { + bgA: '#FFFFFF', bgB: '#FFFFFF', /* 纯白底 */ + box: '#FAEEDA', boxBd: '#EDCBA4', boxTitle: '#7B2D1B', boxText: '#6F5B4A', boxTag: '#C13B2F', + headBox: '#FAEEDA', headBd: '#EDCBA4', headTitleA: '#8C2F1E', headTitleB: '#C05A32', headSub: '#8C2F1E', headDim: '#A88770', + secTitle: '#8C2F1E', deco: '#EDCBA4', }; const W = 680, LX = 40, CW = W - LX * 2; /* 内容区:x 40,宽 600 */ const X = (u) => Math.max(4, Math.floor(u)); /* 全角单位 → 字数 */ @@ -1326,7 +1313,7 @@ function renderVideoKeySvg(analysis, vt, acc) { const tl = svgWrap(titleRaw, 20).slice(0, 2); /* 主标题最多 2 行,每行 ≤20 全角字 */ const tlMore = svgWrap(titleRaw, 20).length > 2; const ty = tl.length === 2 ? headY0 + 52 : headY0 + 84; - tl.forEach((ln, i) => { T(340, ty + i * 32, (i === 1 && tlMore) ? ln + '…' : ln, 21, `url(#vkT${deep ? 'D' : 'L'})`, 700, 'middle'); }); + tl.forEach((ln, i) => { T(340, ty + i * 32, (i === 1 && tlMore) ? ln + '…' : ln, 21, 'url(#vkT)', 700, 'middle'); }); T(340, headY0 + 146, '视频拆解 · 关键信息', 11, P.headSub, 600, 'middle'); T(340, headY0 + 162, `${acc ? acc + ' · ' : ''}赛道:${D.track || '未知'}`, 9.5, P.headDim, null, 'middle'); @@ -1418,7 +1405,7 @@ function renderVideoKeySvg(analysis, vt, acc) { - + diff --git a/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html b/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html index cda5f1b..160504b 100644 --- a/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html +++ b/project/短视频脚本创作/V1.0/mcn-work-shop/public/index.html @@ -43,6 +43,6 @@ - +