This commit is contained in:
2026-08-06 19:03:13 +08:00
parent 7034a40aa8
commit 8695eee8c8
28 changed files with 1100 additions and 162 deletions
@@ -69,6 +69,7 @@ const queryFields = computed<QueryField[]>(() => [
{
key: 'warehouseId',
type: 'select',
label: '所属仓库',
width: 300,
placeholder: warehouseLoading.value ? '仓库加载中' : '全部仓库',
props: {
@@ -81,10 +82,10 @@ const queryFields = computed<QueryField[]>(() => [
label: `${warehouse.warehouseName}(${warehouse.warehouseCode})`,
})),
},
{ key: 'zoneCode', type: 'input', width: 210, placeholder: '库区编码', props: { maxlength: 50, 'aria-label': '库区编码' } },
{ key: 'locationCode', type: 'input', width: 220, placeholder: '库位编码', props: { maxlength: 50, 'aria-label': '库位编码' } },
{ key: 'zoneCode', type: 'input', width: 210, label: '库区编码', placeholder: '库区编码', props: { maxlength: 50, 'aria-label': '库区编码' } },
{ key: 'locationCode', type: 'input', width: 220, label: '库位编码', placeholder: '库位编码', props: { maxlength: 50, 'aria-label': '库位编码' } },
{
key: 'locationType', type: 'select', width: 170, placeholder: '全部类型', props: { 'aria-label': '库位类型' },
key: 'locationType', type: 'select', width: 170, label: '库位类型', placeholder: '全部类型', props: { 'aria-label': '库位类型' },
options: [
{ label: '货架位', value: 'SHELF' },
{ label: '托盘位', value: 'PALLET' },
@@ -93,7 +94,7 @@ const queryFields = computed<QueryField[]>(() => [
],
},
{
key: 'status', type: 'select', width: 160, placeholder: '全部状态', props: { 'aria-label': '库位状态' },
key: 'status', type: 'select', width: 160, label: '库位状态', placeholder: '全部状态', props: { 'aria-label': '库位状态' },
options: [
{ label: '可用', value: 'AVAILABLE' },
{ label: '已预占', value: 'RESERVED' },
@@ -492,6 +493,7 @@ onMounted(() => {
v-model="filters"
ariaLabel="库位筛选"
:fields="queryFields"
preference-key="locations-query"
@search="applyFilters"
/>
@@ -525,6 +527,7 @@ onMounted(() => {
v-model:page-size="pageSize"
:data="rows"
:columns="columns"
preference-key="locations-table"
:loading="loading"
:total="total"
:page-sizes="[20, 50, 100, 200]"
@@ -48,6 +48,7 @@ const queryFields = computed<QueryField[]>(() => [
{
key: 'warehouseId',
type: 'select',
label: '所属仓库',
width: 300,
placeholder: warehouseLoading.value ? '正在加载所属仓库' : warehouseError.value ? '所属仓库加载失败' : '全部仓库',
options: domesticWarehouses.value.map((warehouse) => ({
@@ -60,10 +61,11 @@ const queryFields = computed<QueryField[]>(() => [
'aria-label': '所属仓库',
},
},
{ key: 'palletCode', type: 'input', width: 240, placeholder: '托盘编码(模糊查询)', props: { maxlength: 50, 'aria-label': '托盘编码' } },
{ key: 'palletCode', type: 'input', width: 240, label: '托盘编码', placeholder: '托盘编码(模糊查询)', props: { maxlength: 50, 'aria-label': '托盘编码' } },
{
key: 'palletType',
type: 'select',
label: '托盘类型',
width: 180,
placeholder: '全部托盘类型',
options: palletTypeOptions.map((value) => ({ label: value, value })),
@@ -120,10 +122,10 @@ const { captureBaseline } = useUnsavedWorkRegistration({
const columns: DataTableColumn[] = [
{ key: 'actions', label: '操作', minWidth: 224, fixed: 'left', slotName: 'actions' },
{ key: 'pallet', label: '托盘编码', minWidth: 190, slotName: 'pallet' },
{ prop: 'palletType', label: '托盘类型', minWidth: 140 },
{ key: 'palletType', prop: 'palletType', label: '托盘类型', minWidth: 140 },
{ key: 'capacity', label: '托盘容积(m³)', minWidth: 160, slotName: 'capacity' },
{ key: 'weight', label: '托盘重量(kg)', minWidth: 160, slotName: 'weight' },
{ prop: 'color', label: '颜色', minWidth: 120 },
{ key: 'color', prop: 'color', label: '颜色', minWidth: 120 },
{ key: 'remark', label: '备注', minWidth: 220, slotName: 'remark' },
]
@@ -355,6 +357,7 @@ onMounted(() => {
class="surface-panel pallet-filter-toolbar"
ariaLabel="托盘筛选"
:fields="queryFields"
preference-key="pallets-query"
:search-on-reset="false"
@search="applyFilters"
@reset="resetFilters"
@@ -386,6 +389,7 @@ onMounted(() => {
v-model:page-size="pageSize"
:data="rows"
:columns="columns"
preference-key="pallets-table"
:loading="loading || warehouseLoading"
:total="total"
row-key="id"
@@ -536,7 +540,7 @@ onMounted(() => {
.pallet-cell > span, .detail-hero > span { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 auto; border-radius: 8px; background: var(--el-color-primary-light-9); color: var(--cc-primary); }
.pallet-cell > span { width: 34px; height: 34px; }
.remark-text { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-height: 1.55; }
.detail-body { min-height: 180px; }
.detail-body { min-height: 180px; padding: 24px; box-sizing: border-box; overflow-x: hidden; }
.detail-hero { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
.detail-hero > span { width: 46px; height: 46px; }
.detail-hero h2, .detail-hero p { margin: 0; }
@@ -574,6 +578,7 @@ onMounted(() => {
.pallet-editor-footer > div :deep(.el-button + .el-button) { margin-left: 0; }
@media (max-width: 720px) {
.detail-body { padding: 16px; }
.panel-heading { align-items: stretch; flex-direction: column; }
.panel-heading > .el-button { width: 100%; min-height: 44px; }
.pallet-row-actions :deep(.el-button) { min-height: 36px; padding-inline: 5px; }