feat(stocktake): 活跃天数可编辑(默认 90 天)并补充勾选提示

- 把写死的 30 天改为响应式 recommendDays(默认 90,范围 1~365),
  界面上是一个 el-input-number;【获取推荐】按 ?days=<recommendDays>&top_n=<N>
  动态传参,不再固定 30。
- 推荐条数默认由 50 调整为 10(与「前 N 个」的实际使用节奏一致)。
- el-tree 上方加一行灰色小字提示:
  「💡 提示:勾选父级货架,将自动涵盖其下属的所有末级库位及库存。」
  对应已确认的决策——保持 el-tree 原生级联、后端精确匹配,
  勾父节点时其全部子孙 full_path 都会进入提交范围,故提示属实。

已确认的两项决策(本轮无代码改动,记录备查):
- 不使用 check-strictly,保留原生级联;右侧计数已足以提示规模
- 后端保持精确匹配,不做前缀匹配
This commit is contained in:
yueli
2026-09-11 14:29:13 +08:00
parent 80bd45d5d4
commit 709aeefeda

View File

@ -98,7 +98,16 @@
<!-- 抽盘范围系统推荐 + 人工在库位树上勾选微调最终范围以勾选结果为准 -->
<div v-if="newScopeType === 'active'" class="scope-panel">
<div class="scope-recommend-row">
<span class="scope-recommend-text"> {{ RECOMMEND_DAYS }} 天最活跃的前</span>
<span class="scope-recommend-text"></span>
<el-input-number
v-model="recommendDays"
:min="1"
:max="365"
size="small"
controls-position="right"
class="scope-days-input"
/>
<span class="scope-recommend-text">天最活跃的前</span>
<el-input-number
v-model="recTopN"
:min="1"
@ -122,6 +131,9 @@
<!-- 库位树勾选 已选明细可关闭与左侧强同步 -->
<div class="scope-columns">
<div class="scope-col-left">
<div class="scope-hint">
💡 提示勾选父级货架将自动涵盖其下属的所有末级库位及库存
</div>
<el-tree
ref="locTreeRef"
v-loading="treeLoading"
@ -753,8 +765,8 @@ const modeLabel = (m?: string | null) => (m ? MODE_LABELS[m] || m : '')
const scopeLabel = (s?: string | null) => (s ? SCOPE_LABELS[s] || s : '')
// ★ 抽盘范围:系统推荐 + 人工在库位树上微调
const RECOMMEND_DAYS = 30
const recTopN = ref(50) // 推荐「近 N 天最活跃的前 X 个库位」中的 X
const recommendDays = ref(90) // 推荐「近 N 天最活跃的前 X 个库位」中的 N可编辑
const recTopN = ref(10) // 同上,X
const recLoading = ref(false) // 获取推荐中
const treeLoading = ref(false) // 库位树加载中
const locTreeData = ref<any[]>([]) // 库位树(已按当前公司前缀过滤)
@ -825,11 +837,11 @@ const fetchRecommendLocations = async () => {
const res: any = await request({
url: '/v1/inbound/stock/stocktake/recommend-locations',
method: 'get',
params: withCompany({ days: RECOMMEND_DAYS, top_n: recTopN.value })
params: withCompany({ days: recommendDays.value, top_n: recTopN.value })
})
const locs: string[] = res?.data?.locations || []
if (!locs.length) {
ElMessage.warning(`最近 ${RECOMMEND_DAYS} 天没有找到活跃库位`)
ElMessage.warning(`最近 ${recommendDays.value} 天没有找到活跃库位`)
return
}
@ -860,7 +872,7 @@ const buildScopeConfig = () => {
const nodes = locTreeRef.value?.getCheckedNodes() || []
return {
locations: nodes.map((n: any) => n.full_path).filter(Boolean),
recommend_days: RECOMMEND_DAYS,
recommend_days: recommendDays.value,
recommend_top_n: recTopN.value
}
}
@ -1868,7 +1880,15 @@ const goToVarianceReview = () => {
margin-bottom: 8px;
}
.scope-recommend-text { font-size: 12px; color: #606266; }
.scope-topn-input { width: 100px; }
.scope-topn-input { width: 96px; }
.scope-days-input { width: 96px; }
/* 操作提示:柔和的灰色小字 */
.scope-hint {
font-size: 12px;
color: #909399;
line-height: 1.5;
margin-bottom: 6px;
}
/* 左右双栏:左 60% 库位树 右 40% 已选明细 */
.scope-columns {