feat(web-admin): add stockRole variant to transport plan list page

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
wuzilongandCursor committed 2026-10-14 23:32:35 +08:00
1 parent c4ee338c3a
commit ce06f0f4e8
1 file changed
+100 -63
+100 -63
View File
@@ -3,51 +3,69 @@
<div class="page-container">
<section class="panel">
<PlPlanTypeTabs
v-if="!isStockList"
:model-value="activePlanTypeTab"
:tabs="PL_PLAN_LIST_TABS"
@change="handlePlanTypeTabChange"
/>
<!-- 工具栏(单行:日期下拉 + 检索 + 主操作 + 溢出收纳 + 刷新/列设置) -->
<!-- 工具栏:运输计划完整工具栏;库存入库/出库变体仅导出 -->
<div class="list-toolbar">
<div class="list-toolbar-row pl-plan-list-toolbar-row">
<ListToolbarDateShortcuts
variant="pills"
:active="activeDateShortcut"
aria-label="计划日期快捷筛选"
@change="handleDateShortcut"
/>
<ListQuickSearchInput
v-model="quickSearch"
placeholder="计划编号/供方/需方/产品名称/车牌号"
@search="handleQuickSearch"
@clear="handleQuickSearchClear"
/>
<el-button class="btn-main" type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>新增计划
</el-button>
<template v-if="!isStockList">
<ListToolbarDateShortcuts
variant="pills"
:active="activeDateShortcut"
aria-label="计划日期快捷筛选"
@change="handleDateShortcut"
/>
<ListQuickSearchInput
v-model="quickSearch"
placeholder="计划编号/供方/需方/产品名称/车牌号"
@search="handleQuickSearch"
@clear="handleQuickSearchClear"
/>
<el-button class="btn-main" type="primary" @click="handleAdd">
<el-icon><Plus /></el-icon>新增计划
</el-button>
<ListToolbarOverflow :items="toolbarOverflowItems">
<template #export>
<ListExportDropdown
:export-fn="planApi.export"
:get-filter-params="getPlanExportFilterParams"
:has-selection="true"
:selected-ids="selectedRows.map((r) => r.id)"
:visible-columns="planExportColumns"
filename="计划列表.xlsx"
/>
</template>
</ListToolbarOverflow>
<ListToolbarOverflow :items="toolbarOverflowItems">
<template #export>
<ListExportDropdown
:export-fn="planApi.export"
:get-filter-params="getPlanExportFilterParams"
:has-selection="true"
:selected-ids="selectedRows.map((r) => r.id)"
:visible-columns="planExportColumns"
filename="计划列表.xlsx"
/>
</template>
</ListToolbarOverflow>
<ListToolbarEndActions
:loading="loading"
:column-defs="listColumnDefs"
v-model:visible-columns="visibleColumns"
v-model:check-all="checkAll"
:is-indeterminate="isIndeterminate"
@refresh="fetchData"
@reset-columns="handleResetColumns"
<ListToolbarEndActions
:loading="loading"
:column-defs="listColumnDefs"
v-model:visible-columns="visibleColumns"
v-model:check-all="checkAll"
:is-indeterminate="isIndeterminate"
@refresh="fetchData"
@reset-columns="handleResetColumns"
/>
</template>
<ListExportDropdown
v-else
:export-fn="planApi.export"
:get-filter-params="getPlanExportFilterParams"
:has-selection="true"
:selected-ids="selectedRows.map((r) => r.id)"
:visible-columns="planExportColumns"
:filename="
stockRole === 'inbound'
? '入库计划.xlsx'
: stockRole === 'outbound'
? '出库计划.xlsx'
: '计划列表.xlsx'
"
/>
</div>
</div>
@@ -57,7 +75,7 @@
<div ref="planTableWrapRef" class="table-scroll bx-list-table-wrap">
<ListTable
ref="planTableRef"
table-key="pl-plan"
:table-key="isStockList ? `pl-stock-${stockRole}-plan` : 'pl-plan'"
:height="tableHeight"
class="list-table pl-plan-merge-list-table"
:data="displayRows"
@@ -323,7 +341,7 @@
<template #default="{ row }">{{ row.plan.followUserName || '—' }}</template>
</el-table-column>
<el-table-column
v-if="isColumnVisible('arrangeCopy')"
v-if="!isStockList && isColumnVisible('arrangeCopy')"
prop="arrangeCopy"
label="链接复制"
min-width="88"
@@ -1154,6 +1172,18 @@ import { useColumnFacetOptions } from '@/composables/useColumnFacetOptions'
import { useColumnSort } from '@/composables/useColumnSort'
import { plPlanColumnFilterDefs } from './columnFilterDefs'
const props = withDefaults(
defineProps<{
/** 库存管理入库/出库列表变体;不传则为运输计划主列表 */
stockRole?: 'inbound' | 'outbound'
}>(),
{ stockRole: undefined }
)
const isStockList = computed(
() => props.stockRole === 'inbound' || props.stockRole === 'outbound'
)
/** 计划区可合并列(顺序须与表格左侧列一致,不含勾选/序号/计划编号) */
const PLAN_MERGE_COLUMN_PROPS = [
'belongsCompany',
@@ -1477,36 +1507,43 @@ tableEl: planTableWrapRef,
function buildListQueryParams(): Record<string, any> {
const colParams = { ...toQueryParams(), ...toSortQueryParams() }
const keyword = quickSearch.value.trim()
const tabFilters = plPlanListTabToFilters(activePlanTypeTab.value)
const params: Record<string, any> = { ...colParams }
if (keyword) params.q = keyword
if (!isStockList.value) {
const keyword = quickSearch.value.trim()
const tabFilters = plPlanListTabToFilters(activePlanTypeTab.value)
// Tab 优先:跟进状态
if (tabFilters.followStatus) {
params.followStatus = tabFilters.followStatus
delete params.followStatusIn
} else if (colParams.followStatusIn) {
params.followStatus = colParams.followStatusIn
delete params.followStatusIn
if (keyword) params.q = keyword
// Tab 优先:跟进状态
if (tabFilters.followStatus) {
params.followStatus = tabFilters.followStatus
delete params.followStatusIn
} else if (colParams.followStatusIn) {
params.followStatus = colParams.followStatusIn
delete params.followStatusIn
}
// Tab 优先:单据类型
if (tabFilters.planType) {
params.planType = tabFilters.planType
delete params.planTypeIn
}
// 日期快捷 pills → dateRange;列头 planDate 优先
if (!params.planDateFrom && !params.planDateTo) {
if (dateRange.value?.[0]) params.planDateFrom = dateRange.value[0]
if (dateRange.value?.[1]) params.planDateTo = dateRange.value[1]
}
// 列表「复制给司机/现场/磅单」需要服务端批量标志;默认关闭以降低其它页耗时
params.includeArrangeCopyFlags = 1
} else {
// 库存变体:无 Tab / 无快捷搜(工具栏已隐藏);列头漏斗仍走 colParams
params.stockRole = props.stockRole
// 不传 includeArrangeCopyFlags
}
// Tab 优先:单据类型
if (tabFilters.planType) {
params.planType = tabFilters.planType
delete params.planTypeIn
}
// 日期快捷 pills → dateRange;列头 planDate 优先
if (!params.planDateFrom && !params.planDateTo) {
if (dateRange.value?.[0]) params.planDateFrom = dateRange.value[0]
if (dateRange.value?.[1]) params.planDateTo = dateRange.value[1]
}
// 列表「复制给司机/现场/磅单」需要服务端批量标志;默认关闭以降低其它页耗时
params.includeArrangeCopyFlags = 1
applyMergedCustomerQueryParams(params)
applyContractSideQueryParams(
params,