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:
@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user