|
|
@@ -44,7 +44,7 @@ const availableDestinationWarehouses = computed(() => store.warehouses.filter((w
|
|
|
|
const filters = ref<QueryModel>({ keyword: '', status: '', createdRange: [] })
|
|
|
|
const filters = ref<QueryModel>({ keyword: '', status: '', createdRange: [] })
|
|
|
|
const appliedFilters = ref<QueryModel>({ ...filters.value })
|
|
|
|
const appliedFilters = ref<QueryModel>({ ...filters.value })
|
|
|
|
const queryFields: QueryField[] = [
|
|
|
|
const queryFields: QueryField[] = [
|
|
|
|
{ key: 'keyword', type: 'input', placeholder: '订单号、渠道或仓库', props: { 'aria-label': '订单关键词' } },
|
|
|
|
{ key: 'keyword', type: 'input', placeholder: '订单号、入仓码、渠道或仓库', props: { 'aria-label': '订单关键词' } },
|
|
|
|
{ key: 'status', type: 'select', placeholder: '全部状态', options: FIRST_LEG_ORDER_STATUSES.map((item) => ({ label: item.label, value: item.code })), props: { 'aria-label': '订单状态' } },
|
|
|
|
{ key: 'status', type: 'select', placeholder: '全部状态', options: FIRST_LEG_ORDER_STATUSES.map((item) => ({ label: item.label, value: item.code })), props: { 'aria-label': '订单状态' } },
|
|
|
|
{ key: 'createdRange', type: 'daterange', placeholder: '订单创建日期', props: { 'aria-label': '订单创建日期' } },
|
|
|
|
{ key: 'createdRange', type: 'daterange', placeholder: '订单创建日期', props: { 'aria-label': '订单创建日期' } },
|
|
|
|
]
|
|
|
|
]
|
|
|
@@ -264,7 +264,7 @@ const filteredOrders = computed(() => store.orders.filter((order) => {
|
|
|
|
const keyword = typeof keywordValue === 'string' ? keywordValue.trim().toLowerCase() : ''
|
|
|
|
const keyword = typeof keywordValue === 'string' ? keywordValue.trim().toLowerCase() : ''
|
|
|
|
const status = typeof statusValue === 'string' ? statusValue as FirstLegOrderStatus | '' : ''
|
|
|
|
const status = typeof statusValue === 'string' ? statusValue as FirstLegOrderStatus | '' : ''
|
|
|
|
const createdRange = Array.isArray(createdRangeValue) ? createdRangeValue.filter((value): value is string => typeof value === 'string') : []
|
|
|
|
const createdRange = Array.isArray(createdRangeValue) ? createdRangeValue.filter((value): value is string => typeof value === 'string') : []
|
|
|
|
const matchesKeyword = !keyword || [order.orderNo, order.referenceNo, order.origin, order.destination, order.items.map((item) => item.cargoNameCn).join(' ')]
|
|
|
|
const matchesKeyword = !keyword || [order.orderNo, order.businessSummary.inboundCode, order.referenceNo, order.origin, order.destination, order.items.map((item) => item.cargoNameCn).join(' ')]
|
|
|
|
.filter(Boolean)
|
|
|
|
.filter(Boolean)
|
|
|
|
.some((value) => String(value).toLowerCase().includes(keyword))
|
|
|
|
.some((value) => String(value).toLowerCase().includes(keyword))
|
|
|
|
const matchesStatus = !status || order.status === status
|
|
|
|
const matchesStatus = !status || order.status === status
|
|
|
@@ -874,6 +874,7 @@ async function searchOrders(model: QueryModel) {
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<template #order="{ row }">
|
|
|
|
<template #order="{ row }">
|
|
|
|
<button class="order-number-link" type="button" @click="openDetail(row as FirstLegOrder)">{{ (row as FirstLegOrder).orderNo || '未提交草稿' }}</button>
|
|
|
|
<button class="order-number-link" type="button" @click="openDetail(row as FirstLegOrder)">{{ (row as FirstLegOrder).orderNo || '未提交草稿' }}</button>
|
|
|
|
|
|
|
|
<span v-if="(row as FirstLegOrder).businessSummary.inboundCode" class="order-reference">入仓码 {{ (row as FirstLegOrder).businessSummary.inboundCode }}</span>
|
|
|
|
<span class="order-reference">{{ (row as FirstLegOrder).referenceNo || '无客户参考号' }}</span>
|
|
|
|
<span class="order-reference">{{ (row as FirstLegOrder).referenceNo || '无客户参考号' }}</span>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<template #route="{ row }"><strong>{{ (row as FirstLegOrder).destination || '目的地待更新' }}</strong><span class="order-reference">{{ (row as FirstLegOrder).transportMode ? getFirstLegTransportModeLabel((row as FirstLegOrder).transportMode) : (row as FirstLegOrder).channelName || '渠道待更新' }}</span></template>
|
|
|
|
<template #route="{ row }"><strong>{{ (row as FirstLegOrder).destination || '目的地待更新' }}</strong><span class="order-reference">{{ (row as FirstLegOrder).transportMode ? getFirstLegTransportModeLabel((row as FirstLegOrder).transportMode) : (row as FirstLegOrder).channelName || '渠道待更新' }}</span></template>
|
|
|
@@ -891,6 +892,7 @@ async function searchOrders(model: QueryModel) {
|
|
|
|
<div v-if="filteredOrders.length" class="mobile-order-list">
|
|
|
|
<div v-if="filteredOrders.length" class="mobile-order-list">
|
|
|
|
<article v-for="order in filteredOrders" :key="order.id" class="mobile-order-card">
|
|
|
|
<article v-for="order in filteredOrders" :key="order.id" class="mobile-order-card">
|
|
|
|
<header><button type="button" @click="openDetail(order)">{{ order.orderNo || '未提交草稿' }}</button><el-tag :type="getFirstLegStatusTone(order.status)" effect="light">{{ getFirstLegStatusLabel(order.status) }}</el-tag></header>
|
|
|
|
<header><button type="button" @click="openDetail(order)">{{ order.orderNo || '未提交草稿' }}</button><el-tag :type="getFirstLegStatusTone(order.status)" effect="light">{{ getFirstLegStatusLabel(order.status) }}</el-tag></header>
|
|
|
|
|
|
|
|
<span v-if="order.businessSummary.inboundCode" class="order-reference">入仓码 {{ order.businessSummary.inboundCode }}</span>
|
|
|
|
<span class="order-reference">{{ order.referenceNo || '无客户参考号' }}</span>
|
|
|
|
<span class="order-reference">{{ order.referenceNo || '无客户参考号' }}</span>
|
|
|
|
<dl><div><dt>目的地</dt><dd>{{ order.destination || '待更新' }}</dd></div><div><dt>收货仓</dt><dd>{{ order.receivingWarehouseName || '待更新' }}</dd></div><div><dt>货物摘要</dt><dd>{{ getOrderCargoSummary(order) }}</dd></div><div><dt>运输渠道</dt><dd>{{ order.transportMode ? getFirstLegTransportModeLabel(order.transportMode) : order.channelName || '待更新' }}</dd></div></dl>
|
|
|
|
<dl><div><dt>目的地</dt><dd>{{ order.destination || '待更新' }}</dd></div><div><dt>收货仓</dt><dd>{{ order.receivingWarehouseName || '待更新' }}</dd></div><div><dt>货物摘要</dt><dd>{{ getOrderCargoSummary(order) }}</dd></div><div><dt>运输渠道</dt><dd>{{ order.transportMode ? getFirstLegTransportModeLabel(order.transportMode) : order.channelName || '待更新' }}</dd></div></dl>
|
|
|
|
<footer><span>更新于 {{ formatDateTime(order.updatedAt) }}</span><div><el-button link type="primary" @click="openDetail(order)"><Eye :size="15" />详情</el-button><el-button v-if="canEditOrder && canClientEditFirstLegOrder(order.status)" link type="primary" :loading="openingEditor" @click="openEdit(order)"><Pencil :size="15" />编辑</el-button></div></footer>
|
|
|
|
<footer><span>更新于 {{ formatDateTime(order.updatedAt) }}</span><div><el-button link type="primary" @click="openDetail(order)"><Eye :size="15" />详情</el-button><el-button v-if="canEditOrder && canClientEditFirstLegOrder(order.status)" link type="primary" :loading="openingEditor" @click="openEdit(order)"><Pencil :size="15" />编辑</el-button></div></footer>
|
|
|
@@ -1008,6 +1010,7 @@ async function searchOrders(model: QueryModel) {
|
|
|
|
<section class="detail-section">
|
|
|
|
<section class="detail-section">
|
|
|
|
<h3>订单与运输</h3>
|
|
|
|
<h3>订单与运输</h3>
|
|
|
|
<dl class="order-detail-grid">
|
|
|
|
<dl class="order-detail-grid">
|
|
|
|
|
|
|
|
<div v-if="detailOrder.businessSummary.inboundCode"><dt>入仓码</dt><dd>{{ detailOrder.businessSummary.inboundCode }}</dd></div>
|
|
|
|
<div><dt>客户参考号</dt><dd>{{ displayValue(detailOrder.referenceNo) }}</dd></div>
|
|
|
|
<div><dt>客户参考号</dt><dd>{{ displayValue(detailOrder.referenceNo) }}</dd></div>
|
|
|
|
<div><dt>创建时间</dt><dd>{{ formatDateTime(detailOrder.createdAt) }}</dd></div>
|
|
|
|
<div><dt>创建时间</dt><dd>{{ formatDateTime(detailOrder.createdAt) }}</dd></div>
|
|
|
|
<div><dt>运输方式</dt><dd>{{ getFirstLegTransportModeLabel(detailOrder.transportMode) }}</dd></div>
|
|
|
|
<div><dt>运输方式</dt><dd>{{ getFirstLegTransportModeLabel(detailOrder.transportMode) }}</dd></div>
|
|
|
|