refactor(workshop): 删需求字段『共鸣/共情』8→5 行,共鸣由 AI 依痛点爽点发挥 v20

- REQ_FIELDS 6→5:删 relate;idea→blow→pain→form→note
- w 初值同步删 relate;空态/注释同步(共鸣与情节结尾由 AI 依痛点爽点发挥)
- clarify 模板同步 5 行 + 提示共鸣/共情不收集由创作自然发挥
- 复盘评分维度「共鸣和共情」(1134/1232/1312)属复盘技能结构,不在需求表单,未动
This commit is contained in:
maogeigei committed 2026-09-02 18:53:22 +08:00
1 parent f421311595
commit cbb0ea7eb1
2 files changed
+9 -8

No files matched your search

@@ -174,8 +174,9 @@ function bindBatchBar(container, opts) {
// 09-02 v17:选题落点要素(痛点/爽点、共鸣/共情、爆点)加入需求框——创作流程需要但不是必填,空值由 AI 按账号设定与选题自决
// 09-02 v18:叙事形态→叙事结构;删核心情节/结尾落点(情节与结尾由 AI 创作阶段自决,无需用户填写)
// 09-02 v19:爆点→创新/爆点,字段序调整至「一句话创意」之后
// 09-02 v20:删共鸣/共情(由 AI 按痛点/爽点自然发挥,无需用户单独填写)
const REQ_FIELDS = [
['idea', '一句话创意'], ['blow', '创新 / 爆点'], ['pain', '痛点/爽点'], ['relate', '共鸣/共情'],
['idea', '一句话创意'], ['blow', '创新 / 爆点'], ['pain', '痛点/爽点'],
['form', '叙事结构'], ['note', '其他约束'],
];
// 需求 md 行 → 向导字段映射(parseReqSheet 用)
@@ -216,11 +217,11 @@ function buildCreatePrompt(accountName, w, personaBlock, hasPersona, attachText)
}
/* AI创作 弹窗(09-02 v2:需求框 + 输入框 对话式打磨)——
顶部=创作需求(6 行选题字段:创意+创新爆点+落点要素(痛点爽点/共鸣,可空)+叙事结构/其他约束,随对话逐轮被 AI 更新,空值标「待完善」)+ 下方时长选项条
顶部=创作需求(5 行选题字段:创意/创新爆点/痛点爽点/叙事结构/其他约束,共鸣共情由 AI 按痛点爽点发挥,随对话逐轮被 AI 更新,空值标「待完善」)+ 下方时长选项条
中部=对话流(用户输入 vs AI 整理/追问),底部=输入框 + 提交创作 */
async function confirmAiScript(accountName, btn) {
const accId = btn && btn.dataset.accId ? btn.dataset.accId : '';
const w = { idea: '', pain: '', relate: '', blow: '', form: '', dur: '', note: '' };
const w = { idea: '', pain: '', blow: '', form: '', dur: '', note: '' };
const convo = []; // 对话流 { role: 'u' | 'ai', text }
let pHas = false, pContent = '';
let attach = { name: '', text: '' }; // 已上传需求附件(解析后的纯文本,打磨与创作共用)
@@ -283,7 +284,7 @@ async function confirmAiScript(accountName, btn) {
mask.querySelector('[data-x]').addEventListener('click', close);
const q = (s) => mask.querySelector(s);
/* —— 需求框渲染:6 个选题字段(含落点要素可空;情节/结尾由 AI 创作自决),维度名作标题、内容在下方 —— */
/* —— 需求框渲染:5 个选题字段(落点要素可空;共鸣/情节/结尾由 AI 按痛点爽点自决),维度名作标题、内容在下方 —— */
const renderSheet = () => {
const rows = REQ_FIELDS.map(([k, label]) => {
const v = String(w[k] || '').trim();
@@ -326,7 +327,7 @@ async function confirmAiScript(accountName, btn) {
? convo.map((c) => (c.role === 'u'
? `<div class="req-msg mine"><div class="req-bubble">${esc(c.text)}</div></div>`
: `<div class="req-msg ai"><div class="req-bubble">${esc(c.text)}</div></div>`)).join('')
: `<div class="req-dialog-empty">在这里输入一个初步想法,AI 会引导你补齐创意 / 创新·爆点 / 痛点爽点 / 共鸣 / 叙事结构等需求(落点要素可留空,由 AI 按账号设定与选题补齐,情节与结尾由 AI 创作);每条输入都会即时更新上方的创作需求框。支持上传附件。Enter 发送,Shift+Enter 换行。</div>`;
: `<div class="req-dialog-empty">在这里输入一个初步想法,AI 会引导你补齐创意 / 创新·爆点 / 痛点爽点 / 叙事结构等需求(落点要素可留空,由 AI 按账号设定与选题补齐,共鸣与情节结尾由 AI 依痛点爽点发挥);每条输入都会即时更新上方的创作需求框。支持上传附件。Enter 发送,Shift+Enter 换行。</div>`;
el.scrollTop = el.scrollHeight;
};
const setBusy = (b) => {