feat(frontend): 策略生成表单与成稿目录结构对齐

重组 fieldset 顺序与文案(策略范围与前提、四~八章对应、业务备注);更新顶部说明与矩阵细类标签;补充 fieldset 提示样式。

Made-with: Cursor
This commit is contained in:
hub-gif 2026-04-21 17:12:29 +08:00
parent b7056fe627
commit 42caa06013

View File

@ -235,12 +235,12 @@ watch(
<section class="ma-card">
<h2>策略生成</h2>
<p class="hint-top">
选择<strong>已成功</strong>任务在下方选择<strong>策略类目</strong>与竞品矩阵细类一致全部分类则与全关键词样本一致其余填空与勾选<strong>默认</strong>使用大模型在规则底稿与同任务数据摘要基础上成稿需服务端已配置网关若需更快不调用智能服务可勾选本次仅生成规则稿策略配置与分析报告生成<strong>报告配置</strong>相互独立策略稿与宿主报告第九章的归纳<strong>默认对齐</strong>收窄类目时另并入该细类在报告中的大模型归纳节选提交后跳转
选择<strong>已成功</strong>任务在下方选择<strong>策略类目</strong>与竞品矩阵细类一致对应成稿中的主推细类全部分类则与全关键词样本一致<strong>默认</strong>使用大模型在规则底稿与同任务监测摘要基础上润色成稿需服务端已配置网关可勾选本次仅生成规则稿跳过智能润色策略配置与分析报告生成<strong>报告配置</strong>相互独立收窄类目时成稿会并入该细类在宿主报告<strong>第五第八章</strong>的大模型归纳节选提交后跳转
<RouterLink to="/jd/strategy-view">策略稿预览</RouterLink>
<strong>决策在本页完成</strong>已填项会写入底稿并由大模型落实为执行句未填项由大模型结合数据补全成稿不再重复请再选式表述
<strong>已填项</strong>写入底稿并由大模型落实<strong>未填项</strong>可由大模型结合监测数据推断仍受禁止编造约束
</p>
<p class="hint-top hint-flow">
<strong>成稿章节顺序</strong> 目标与边界 战场与样本 竞争与本品态势 价格带与定位 用户与评论侧由报告 §8/摘要支撑本页无单独表单项 营销与总体方向 4P 支柱 风险 业务约束 下一步
<strong>与成稿目录对齐</strong>对应下载策略稿 Markdown策略范围与前提摘要顾客是谁针对痛点要怎么做主要由数据与模型归纳购买理由 / 品牌 / 竞品 / 阶段路径 / 品牌四线 / 战术支柱风险下一步业务约束与备注附录下方表单按<strong>同一条目顺序</strong>分组便于逐项填写
</p>
<div class="toolbar">
@ -267,18 +267,21 @@ watch(
</button>
</div>
<div v-if="selectedId" class="toolbar toolbar-stack">
<label class="sel-label">策略类目</label>
<label class="sel-label">主推类目矩阵细类</label>
<select
v-model="strategyMatrixScope"
class="job-select"
:disabled="briefMatrixLoading || strategyGeneratingAny"
>
<option value="">全部分类不收窄 · 全关键词样本</option>
<option value="">全部分类不收窄 · 全关键词监测样本一致</option>
<option v-for="g in matrixGroups" :key="g.index" :value="g.group">
{{ g.group }}{{ g.sku_count }}
</option>
</select>
<span v-if="briefMatrixLoading" class="ma-muted">正在加载矩阵分组</span>
<span v-else class="ma-muted ma-hint-sub"
>与成稿策略范围与前提中的主推细类及报告第五章矩阵一致收窄后监测摘要与报告节选仅针对该细类</span
>
</div>
<p v-if="briefMatrixErr" class="ma-err">{{ briefMatrixErr }}</p>
<p v-if="strategyGeneratingOtherTask" class="ma-warn-banner">
@ -288,29 +291,28 @@ watch(
<p v-if="!successJobs.length" class="ma-muted">暂无成功任务请先在搜索采集跑通一条流水线</p>
<fieldset class="fieldset">
<legend>战略背景与目标</legend>
<legend>策略范围与前提 · 摘要依据</legend>
<p class="fieldset-hint">
对应成稿章节<strong>策略范围与前提</strong><strong>顾客是谁 · 本品聚焦</strong>表格监测词与批次由任务自动带出
</p>
<label class="fld">
<span>本品角色</span>
<input v-model="decisions.product_role" type="text" placeholder="如:追赶 / 新品 / 防守" />
</label>
<label class="fld">
<span>时间范围</span>
<input v-model="decisions.time_horizon" type="text" placeholder="如:本季度 / 未来 12 周" />
<span>本品角色策略服务对象</span>
<input v-model="decisions.product_role" type="text" placeholder="如:追赶型 / 新品 / 防守 / 拓品类" />
</label>
<label class="fld fld-block">
<span>成功标准可量化</span>
<textarea v-model="decisions.success_criteria" rows="2" placeholder="如:搜索位次、转化率…" />
<span>一句话战场</span>
<textarea
v-model="decisions.battlefield_one_line"
rows="2"
placeholder="在哪个需求场景、与谁争夺同一批检索与购买用户?"
/>
</label>
<label class="fld fld-block">
<span>非目标</span>
<textarea v-model="decisions.non_goals" rows="2" placeholder="明确不做什么(可选)" />
</label>
<label class="fld fld-block">
<span>目标客群</span>
<span>目标客群 / 场景</span>
<input
v-model="decisions.audience_segment"
type="text"
placeholder="一句话:为谁、什么场景(可选)"
placeholder="为谁、什么场景(可选)"
/>
</label>
<label class="fld fld-block">
@ -321,44 +323,33 @@ watch(
placeholder="品牌或价位带参照(可选)"
/>
</label>
<label class="fld">
<span>时间范围</span>
<input v-model="decisions.time_horizon" type="text" placeholder="如:本季度 / 未来 12 周" />
</label>
<label class="fld fld-block">
<span>成功标准可量化</span>
<textarea v-model="decisions.success_criteria" rows="2" placeholder="如:搜索位次、转化、复购等(对应「本阶段策略目标」)" />
</label>
<label class="fld fld-block">
<span>非目标</span>
<textarea v-model="decisions.non_goals" rows="2" placeholder="明确本阶段不做什么(可选)" />
</label>
<label class="fld fld-block">
<span>资源与预算备注</span>
<textarea
v-model="decisions.resource_notes"
rows="2"
placeholder="人力、投放、产能等量级(可选)"
placeholder="人力、投放、产能等(可选;亦进入「六、阶段目标与路径」"
/>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>战场一句话</legend>
<legend>为什么要选这个品牌 主定位</legend>
<p class="fieldset-hint">对应成稿<strong>为什么要选这个品牌</strong>中与价位带相关的定位勾选</p>
<label class="fld fld-block">
<span>一句话战场</span>
<textarea
v-model="decisions.battlefield_one_line"
rows="2"
placeholder="在哪个需求场景、与谁抢同一批用户?"
/>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>竞争态势自判</legend>
<label class="fld fld-block">
<span>本品倾向</span>
<select v-model="decisions.competitive_stance" class="job-select full">
<option v-for="o in stanceOptions" :key="o.value || 'empty'" :value="o.value">
{{ o.label }}
</option>
</select>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>价格带定位选项勾选一条</legend>
<label class="fld fld-block">
<span>主定位</span>
<span>主定位选一条</span>
<select v-model="decisions.positioning_choice" class="job-select full">
<option v-for="o in positioningOptions" :key="o.value || 'empty'" :value="o.value">
{{ o.label }}
@ -368,13 +359,29 @@ watch(
</fieldset>
<fieldset class="fieldset">
<legend>营销策略与总体策略</legend>
<legend>与其它品牌有何不同 竞争倾向</legend>
<p class="fieldset-hint">对应成稿<strong>与其它品牌有何不同 · 竞争应对</strong></p>
<label class="fld fld-block">
<span>本品竞争倾向</span>
<select v-model="decisions.competitive_stance" class="job-select full">
<option v-for="o in stanceOptions" :key="o.value || 'empty'" :value="o.value">
{{ o.label }}
</option>
</select>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>阶段目标与路径</legend>
<p class="fieldset-hint">
对应<strong>阶段目标与路径</strong>针对痛点要怎么做表格主要由监测与模型归纳本页不单独列项
</p>
<label class="fld fld-block">
<span>营销策略</span>
<textarea
v-model="decisions.marketing_strategy"
rows="3"
placeholder="传播、活动、投放、内容主线等(可选)"
placeholder="传播、活动、投放、内容主线(可选)"
/>
</label>
<label class="fld fld-block">
@ -382,33 +389,36 @@ watch(
<textarea
v-model="decisions.general_strategy"
rows="3"
placeholder="增长 / 品类 / 经营总原则,可与下方 4P 支柱呼应(可选)"
placeholder="增长 / 品类 / 经营总原则(可选)"
/>
</label>
</fieldset>
<fieldset class="fieldset">
<legend>策略支柱4P 本品打算怎么做可先填一列</legend>
<legend> · 品牌四线与战术支柱4P</legend>
<p class="fieldset-hint">
对应成稿<strong>品牌四线</strong><strong>战术支柱</strong>产品 / 定价 / 渠道与传播
</p>
<label class="fld fld-block">
<span>产品</span>
<textarea v-model="decisions.pillar_product" rows="2" />
<textarea v-model="decisions.pillar_product" rows="2" placeholder="产品侧动作或差异(可选)" />
</label>
<label class="fld fld-block">
<span></span>
<textarea v-model="decisions.pillar_price" rows="2" />
<span></span>
<textarea v-model="decisions.pillar_price" rows="2" placeholder="价格与价值呈现(可选)" />
</label>
<label class="fld fld-block">
<span>渠道 / 触点</span>
<textarea v-model="decisions.pillar_channel" rows="2" />
<span>渠道触点</span>
<textarea v-model="decisions.pillar_channel" rows="2" placeholder="渠道、货架与触点(可选)" />
</label>
<label class="fld fld-block">
<span>传播与内容</span>
<textarea v-model="decisions.pillar_comm" rows="2" />
<textarea v-model="decisions.pillar_comm" rows="2" placeholder="传播、内容、沟通(可选)" />
</label>
</fieldset>
<fieldset class="fieldset">
<legend>风险确认已知晓则勾选</legend>
<legend>风险假设与待验证确认知晓</legend>
<label class="chk">
<input v-model="decisions.ack_risk_keywords" type="checkbox" />
关注词 / 场景可能以偏概全需原评论抽样
@ -424,13 +434,16 @@ watch(
</fieldset>
<fieldset class="fieldset">
<legend>业务约束与内部判断</legend>
<legend>业务约束与备注</legend>
<p class="fieldset-hint">
对应成稿<strong>下一步与节奏</strong>下的<strong>业务约束与备注</strong>供法务渠道红线内部判断等补充
</p>
<label class="fld fld-block">
<span>业务备注</span>
<textarea
v-model="businessNotes"
rows="4"
placeholder="渠道红线、价位策略、竞品对标、预算量级等"
placeholder="渠道红线、价位策略、竞品对标、预算与组织约束等"
/>
</label>
</fieldset>
@ -514,6 +527,18 @@ watch(
font-weight: 600;
color: #1f2937;
}
.fieldset-hint {
margin: 0 0 0.5rem;
font-size: 0.8rem;
line-height: 1.5;
color: #6b7280;
}
.ma-hint-sub {
display: block;
margin-top: 0.35rem;
font-size: 0.8rem;
line-height: 1.45;
}
.fld {
display: flex;
flex-direction: column;