Compare commits
No commits in common. "7a523278190125ce61718da2d5f838f5d92a433d" and "bf5be8782329913f4e5589ebdeab46dfc4a65e30" have entirely different histories.
7a52327819
...
bf5be87823
@ -369,55 +369,6 @@ export async function postOrderDownstreamForwardCreateOne(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** getFile type:下游面单 / 末端面单 / POD */
|
|
||||||
export const DOWNSTREAM_GET_FILE_TYPES = [
|
|
||||||
{ value: 21, labelKey: 'order.myOrders.actions.getDownstreamFileType.downstreamLabel' },
|
|
||||||
{ value: 31, labelKey: 'order.myOrders.actions.getDownstreamFileType.lastMileLabel' },
|
|
||||||
{ value: 180, labelKey: 'order.myOrders.actions.getDownstreamFileType.pod' },
|
|
||||||
] as const
|
|
||||||
|
|
||||||
export type DownstreamGetFileType = (typeof DOWNSTREAM_GET_FILE_TYPES)[number]['value']
|
|
||||||
|
|
||||||
export interface OrderDownstreamGetFileResult {
|
|
||||||
success?: boolean
|
|
||||||
supplierCode?: string
|
|
||||||
type?: number
|
|
||||||
fileType?: string
|
|
||||||
url?: string
|
|
||||||
requestJson?: string
|
|
||||||
statusCode?: number
|
|
||||||
responseBody?: string
|
|
||||||
storedFileUrl?: string
|
|
||||||
downstreamServiceNo?: string
|
|
||||||
trackNo?: string
|
|
||||||
}
|
|
||||||
|
|
||||||
/** POST /order/downstream-forward-get-file → standardCode=getFile,转存 COS 并回写单号 */
|
|
||||||
export async function postOrderDownstreamGetFile(body: {
|
|
||||||
id: number | string
|
|
||||||
type: DownstreamGetFileType
|
|
||||||
}): Promise<OrderDownstreamGetFileResult> {
|
|
||||||
const res = await axiosInstance.post(orderUrl('/order/downstream-forward-get-file'), {
|
|
||||||
id: body.id,
|
|
||||||
type: body.type,
|
|
||||||
})
|
|
||||||
assertBusinessOk(res.data)
|
|
||||||
const d = res.data?.data ?? res.data?.Data ?? res.data ?? {}
|
|
||||||
return {
|
|
||||||
success: d.success ?? d.Success,
|
|
||||||
supplierCode: d.supplierCode ?? d.SupplierCode,
|
|
||||||
type: d.type ?? d.Type,
|
|
||||||
fileType: d.fileType ?? d.FileType,
|
|
||||||
url: d.url ?? d.Url,
|
|
||||||
requestJson: d.requestJson ?? d.RequestJson,
|
|
||||||
statusCode: d.statusCode ?? d.StatusCode,
|
|
||||||
responseBody: d.responseBody ?? d.ResponseBody,
|
|
||||||
storedFileUrl: d.storedFileUrl ?? d.StoredFileUrl,
|
|
||||||
downstreamServiceNo: d.downstreamServiceNo ?? d.DownstreamServiceNo,
|
|
||||||
trackNo: d.trackNo ?? d.TrackNo,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface OrderBatchActionFailure {
|
export interface OrderBatchActionFailure {
|
||||||
orderId?: number
|
orderId?: number
|
||||||
OrderId?: number
|
OrderId?: number
|
||||||
|
|||||||
@ -82,7 +82,6 @@ export const PERMISSION_ACTION_LABELS: Record<string, string> = {
|
|||||||
ChainPull: '串联拉取',
|
ChainPull: '串联拉取',
|
||||||
CreateTrack: '创建轨迹',
|
CreateTrack: '创建轨迹',
|
||||||
ForwardDownstream: '预报下游',
|
ForwardDownstream: '预报下游',
|
||||||
GetDownstreamFile: '获取下游文件',
|
|
||||||
MarkProblematic: '创建问题件',
|
MarkProblematic: '创建问题件',
|
||||||
MarkClaimed: '创建理赔件',
|
MarkClaimed: '创建理赔件',
|
||||||
MarkProcessed: '标记已处理',
|
MarkProcessed: '标记已处理',
|
||||||
@ -556,7 +555,6 @@ const CORE_GROUPS: PageButtonGroup[] = [
|
|||||||
{ code: 'PreDeclare', name: '预报' },
|
{ code: 'PreDeclare', name: '预报' },
|
||||||
{ code: 'CreateTrack', name: '创建轨迹订单' },
|
{ code: 'CreateTrack', name: '创建轨迹订单' },
|
||||||
{ code: 'ForwardDownstream', name: '预报下游订单' },
|
{ code: 'ForwardDownstream', name: '预报下游订单' },
|
||||||
{ code: 'GetDownstreamFile', name: '获取下游文件' },
|
|
||||||
{ code: 'Print', name: '单个打印' },
|
{ code: 'Print', name: '单个打印' },
|
||||||
{ code: 'BatchPrint', name: '批量打印' },
|
{ code: 'BatchPrint', name: '批量打印' },
|
||||||
{ code: 'Intercept', name: '拦截' },
|
{ code: 'Intercept', name: '拦截' },
|
||||||
|
|||||||
@ -1743,14 +1743,7 @@ export default {
|
|||||||
'order.myOrders.actions.predeclare': 'Re-predeclare',
|
'order.myOrders.actions.predeclare': 'Re-predeclare',
|
||||||
'order.myOrders.actions.createTrackOrder': 'Create track order',
|
'order.myOrders.actions.createTrackOrder': 'Create track order',
|
||||||
'order.myOrders.actions.forwardDownstreamCreate': 'Forward Downstream',
|
'order.myOrders.actions.forwardDownstreamCreate': 'Forward Downstream',
|
||||||
'order.myOrders.actions.getDownstreamFile': 'Get Downstream File',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.downstreamLabel': 'Get Downstream Label',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.lastMileLabel': 'Get Last-mile Label',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.pod': 'Get POD',
|
|
||||||
'order.myOrders.modal.downstreamForwardTitle': 'Downstream forward result',
|
'order.myOrders.modal.downstreamForwardTitle': 'Downstream forward result',
|
||||||
'order.myOrders.modal.getDownstreamFileTitle': 'Get Downstream File Result',
|
|
||||||
'order.myOrders.message.getDownstreamFileNeedSelect': 'Please select orders first',
|
|
||||||
|
|
||||||
'order.myOrders.modal.payTitle': 'Payment confirmation',
|
'order.myOrders.modal.payTitle': 'Payment confirmation',
|
||||||
'order.myOrders.modal.payOrderTotal': 'Amount due',
|
'order.myOrders.modal.payOrderTotal': 'Amount due',
|
||||||
'order.myOrders.modal.payGrandTotal': 'Total due',
|
'order.myOrders.modal.payGrandTotal': 'Total due',
|
||||||
|
|||||||
@ -73,18 +73,4 @@ export async function initPreferredLocale(): Promise<void> {
|
|||||||
i18n.global.locale.value = 'en-US';
|
i18n.global.locale.value = 'en-US';
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 开发态:语言包热更新后立即灌入 i18n,避免按钮显示 key */
|
|
||||||
if (import.meta.hot) {
|
|
||||||
import.meta.hot.accept('./zh-CN', (mod) => {
|
|
||||||
if (!mod?.default) return;
|
|
||||||
i18n.global.setLocaleMessage('zh-CN', mod.default);
|
|
||||||
fullLocaleLoaded.add('zh-CN-full');
|
|
||||||
});
|
|
||||||
import.meta.hot.accept('./en-US', (mod) => {
|
|
||||||
if (!mod?.default) return;
|
|
||||||
i18n.global.setLocaleMessage('en-US', mod.default);
|
|
||||||
fullLocaleLoaded.add('en-US-full');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
export default i18n;
|
export default i18n;
|
||||||
|
|||||||
@ -1571,14 +1571,7 @@ export default {
|
|||||||
'order.myOrders.actions.predeclare': '重新预报',
|
'order.myOrders.actions.predeclare': '重新预报',
|
||||||
'order.myOrders.actions.createTrackOrder': '创建轨迹订单',
|
'order.myOrders.actions.createTrackOrder': '创建轨迹订单',
|
||||||
'order.myOrders.actions.forwardDownstreamCreate': '预报下游',
|
'order.myOrders.actions.forwardDownstreamCreate': '预报下游',
|
||||||
'order.myOrders.actions.getDownstreamFile': '获取下游文件',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.downstreamLabel': '获取下游面单',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.lastMileLabel': '获取末端面单',
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.pod': '获取POD',
|
|
||||||
'order.myOrders.modal.downstreamForwardTitle': '下游预报结果',
|
'order.myOrders.modal.downstreamForwardTitle': '下游预报结果',
|
||||||
'order.myOrders.modal.getDownstreamFileTitle': '获取下游文件结果',
|
|
||||||
'order.myOrders.message.getDownstreamFileNeedSelect': '请先选择订单',
|
|
||||||
|
|
||||||
'order.myOrders.modal.payTitle': '支付确认',
|
'order.myOrders.modal.payTitle': '支付确认',
|
||||||
'order.myOrders.modal.payOrderTotal': '应付合计',
|
'order.myOrders.modal.payOrderTotal': '应付合计',
|
||||||
'order.myOrders.modal.payGrandTotal': '合计应付',
|
'order.myOrders.modal.payGrandTotal': '合计应付',
|
||||||
|
|||||||
@ -1824,7 +1824,7 @@ function getFeeCellValue(row: any, col: { key: string }) {
|
|||||||
|
|
||||||
// 加载轨迹(复用 track/order 的接口)
|
// 加载轨迹(复用 track/order 的接口)
|
||||||
async function loadTrackTimeline() {
|
async function loadTrackTimeline() {
|
||||||
const orderNumber = detail.value?.waybillNo;
|
const orderNumber = detail.value?.trackingNo || detail.value?.waybillNo || detail.value?.customerOrderNo;
|
||||||
if (!orderNumber) {
|
if (!orderNumber) {
|
||||||
trackTimeline.value = [];
|
trackTimeline.value = [];
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -2311,7 +2311,7 @@ function getFeeCellValue(row: any, col: { key: string }) {
|
|||||||
|
|
||||||
// 加载轨迹(复用 track/order 的接口)
|
// 加载轨迹(复用 track/order 的接口)
|
||||||
async function loadTrackTimeline() {
|
async function loadTrackTimeline() {
|
||||||
const orderNumber = detail.value?.waybillNo;
|
const orderNumber = detail.value?.trackingNo || detail.value?.waybillNo || detail.value?.customerOrderNo;
|
||||||
if (!orderNumber) {
|
if (!orderNumber) {
|
||||||
trackTimeline.value = [];
|
trackTimeline.value = [];
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -42,8 +42,6 @@
|
|||||||
postOrderExport,
|
postOrderExport,
|
||||||
postOrderTrackUpsertSmallBag,
|
postOrderTrackUpsertSmallBag,
|
||||||
postOrderDownstreamForwardCreateOne,
|
postOrderDownstreamForwardCreateOne,
|
||||||
postOrderDownstreamGetFile,
|
|
||||||
DOWNSTREAM_GET_FILE_TYPES,
|
|
||||||
postOrderBatchJob,
|
postOrderBatchJob,
|
||||||
waitOrderBatchJob,
|
waitOrderBatchJob,
|
||||||
formatBatchJobTrackUpsertResultText,
|
formatBatchJobTrackUpsertResultText,
|
||||||
@ -55,8 +53,6 @@
|
|||||||
postOrderHandleStatusUpdate,
|
postOrderHandleStatusUpdate,
|
||||||
type OrderTrackUpsertResult,
|
type OrderTrackUpsertResult,
|
||||||
type OrderDownstreamForwardResult,
|
type OrderDownstreamForwardResult,
|
||||||
type OrderDownstreamGetFileResult,
|
|
||||||
type DownstreamGetFileType,
|
|
||||||
} from '@/api/order';
|
} from '@/api/order';
|
||||||
import { notifyCustomerBalanceChanged } from '@/api/customer/accountFlow';
|
import { notifyCustomerBalanceChanged } from '@/api/customer/accountFlow';
|
||||||
import { buildFailGuideFromReason } from '@/utils/parcelCreateFailGuide';
|
import { buildFailGuideFromReason } from '@/utils/parcelCreateFailGuide';
|
||||||
@ -941,87 +937,6 @@
|
|||||||
}).catch(() => undefined);
|
}).catch(() => undefined);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getDownstreamFileType = ref<DownstreamGetFileType>(21);
|
|
||||||
const getDownstreamFileModalVisible = ref(false);
|
|
||||||
const getDownstreamFileResultText = ref('');
|
|
||||||
|
|
||||||
function tx(key: string, fallback: string) {
|
|
||||||
return te(key) ? t(key) : fallback;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getDownstreamFileTypeFallback(type: DownstreamGetFileType) {
|
|
||||||
if (type === 31) return '获取末端面单';
|
|
||||||
if (type === 180) return '获取POD';
|
|
||||||
return '获取下游面单';
|
|
||||||
}
|
|
||||||
|
|
||||||
const getDownstreamFileTypeLabel = computed(() => {
|
|
||||||
const hit = DOWNSTREAM_GET_FILE_TYPES.find((x) => x.value === getDownstreamFileType.value);
|
|
||||||
if (!hit) {
|
|
||||||
return tx(
|
|
||||||
'order.myOrders.actions.getDownstreamFileType.downstreamLabel',
|
|
||||||
'获取下游面单',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return tx(hit.labelKey, getDownstreamFileTypeFallback(hit.value));
|
|
||||||
});
|
|
||||||
|
|
||||||
function formatGetDownstreamFileResult(
|
|
||||||
waybillNo: string,
|
|
||||||
result: OrderDownstreamGetFileResult,
|
|
||||||
type: DownstreamGetFileType,
|
|
||||||
): string {
|
|
||||||
const lines = [
|
|
||||||
`【${waybillNo || '-'}】`,
|
|
||||||
result.success ? '成功' : '失败',
|
|
||||||
`standardCode:getFile`,
|
|
||||||
`type:${result.type ?? type}`,
|
|
||||||
];
|
|
||||||
if (result.supplierCode) {
|
|
||||||
lines.push(`supplierCode:${result.supplierCode}`);
|
|
||||||
}
|
|
||||||
if (result.downstreamServiceNo) {
|
|
||||||
lines.push(`服务商单号:${result.downstreamServiceNo}`);
|
|
||||||
}
|
|
||||||
if (result.trackNo) {
|
|
||||||
lines.push(`跟踪号:${result.trackNo}`);
|
|
||||||
}
|
|
||||||
if (result.storedFileUrl) {
|
|
||||||
lines.push(`已存文件:${result.storedFileUrl}`);
|
|
||||||
}
|
|
||||||
lines.push(`请求:${result.url || '-'}`);
|
|
||||||
if (result.requestJson) {
|
|
||||||
lines.push(`请求体:\n${result.requestJson}`);
|
|
||||||
}
|
|
||||||
lines.push(`HTTP:${result.statusCode ?? '-'}`);
|
|
||||||
if (result.responseBody) {
|
|
||||||
lines.push(`响应:\n${result.responseBody}`);
|
|
||||||
}
|
|
||||||
return lines.join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleGetDownstreamFile = async (type: DownstreamGetFileType) => {
|
|
||||||
const rows = requireSelectedRows();
|
|
||||||
if (!rows.length) return;
|
|
||||||
getDownstreamFileType.value = type;
|
|
||||||
await withOrderActionLoading('getDownstreamFile', async () => {
|
|
||||||
const resultBlocks: string[] = [];
|
|
||||||
for (const row of rows) {
|
|
||||||
const id = getOrderRowId(row)!;
|
|
||||||
const waybillNo = row.waybillNo || row.serviceNo || String(id);
|
|
||||||
try {
|
|
||||||
const result = await postOrderDownstreamGetFile({ id, type });
|
|
||||||
resultBlocks.push(formatGetDownstreamFileResult(waybillNo, result, type));
|
|
||||||
} catch (err: any) {
|
|
||||||
resultBlocks.push(`【${waybillNo}】失败:${err?.message || '请求异常'}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
getDownstreamFileResultText.value = resultBlocks.join('\n\n');
|
|
||||||
getDownstreamFileModalVisible.value = true;
|
|
||||||
await refreshListAndTabCounts();
|
|
||||||
}).catch(() => undefined);
|
|
||||||
};
|
|
||||||
|
|
||||||
function getOrderRowId(row: any): number | string | undefined {
|
function getOrderRowId(row: any): number | string | undefined {
|
||||||
if (row == null) return undefined;
|
if (row == null) return undefined;
|
||||||
const id = row.id ?? row.Id;
|
const id = row.id ?? row.Id;
|
||||||
@ -2071,28 +1986,6 @@
|
|||||||
:disabled="selectedRowCount === 0 || isActionBusy('batchPrint')"
|
:disabled="selectedRowCount === 0 || isActionBusy('batchPrint')"
|
||||||
@click="handleBatchPrint"
|
@click="handleBatchPrint"
|
||||||
>{{ t('order.myOrders.actions.batchPrint') }}</a-button>
|
>{{ t('order.myOrders.actions.batchPrint') }}</a-button>
|
||||||
<a-dropdown
|
|
||||||
trigger="click"
|
|
||||||
position="bl"
|
|
||||||
:disabled="selectedRowCount === 0 || !!actionLoadingKey"
|
|
||||||
>
|
|
||||||
<a-button
|
|
||||||
class="app-btn-toolbar btn-more"
|
|
||||||
:loading="isActionLoading('getDownstreamFile')"
|
|
||||||
:disabled="selectedRowCount === 0 || isActionBusy('getDownstreamFile')"
|
|
||||||
>
|
|
||||||
{{ getDownstreamFileTypeLabel }}
|
|
||||||
<icon-down class="btn-more-arrow" />
|
|
||||||
</a-button>
|
|
||||||
<template #content>
|
|
||||||
<a-doption
|
|
||||||
v-for="opt in DOWNSTREAM_GET_FILE_TYPES"
|
|
||||||
:key="opt.value"
|
|
||||||
:disabled="selectedRowCount === 0 || isActionBusy('getDownstreamFile')"
|
|
||||||
@click="handleGetDownstreamFile(opt.value)"
|
|
||||||
>{{ tx(opt.labelKey, getDownstreamFileTypeFallback(opt.value)) }}</a-doption>
|
|
||||||
</template>
|
|
||||||
</a-dropdown>
|
|
||||||
<a-dropdown trigger="click" position="bl" :disabled="!!actionLoadingKey">
|
<a-dropdown trigger="click" position="bl" :disabled="!!actionLoadingKey">
|
||||||
<a-button
|
<a-button
|
||||||
class="app-btn-toolbar btn-more"
|
class="app-btn-toolbar btn-more"
|
||||||
@ -2293,15 +2186,6 @@
|
|||||||
<pre class="track-upsert-result">{{ downstreamForwardResultText }}</pre>
|
<pre class="track-upsert-result">{{ downstreamForwardResultText }}</pre>
|
||||||
</a-modal>
|
</a-modal>
|
||||||
|
|
||||||
<a-modal
|
|
||||||
v-model:visible="getDownstreamFileModalVisible"
|
|
||||||
:title="tx('order.myOrders.modal.getDownstreamFileTitle', '获取下游文件结果')"
|
|
||||||
:width="800"
|
|
||||||
:footer="false"
|
|
||||||
>
|
|
||||||
<pre class="track-upsert-result">{{ getDownstreamFileResultText }}</pre>
|
|
||||||
</a-modal>
|
|
||||||
|
|
||||||
<MarkProblematicModal
|
<MarkProblematicModal
|
||||||
v-if="problematicModalVisible"
|
v-if="problematicModalVisible"
|
||||||
v-model:visible="problematicModalVisible"
|
v-model:visible="problematicModalVisible"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user