优化订单列表,多单号查询,支持几万单号查询

This commit is contained in:
luojiaquan
2026-10-16 09:22:13 +08:00
parent 0a7f639138
commit 02481b102c
10 changed files with 655 additions and 32 deletions
+2 -1
View File
@@ -8,7 +8,8 @@ export function listOrderSource(query) {
// 分页参数保持在 URL 上供 TableSupport 读取;筛选条件放请求体,尤其是多单号列表。
params: { pageNum, pageSize },
data: filters,
timeout: 60000
// 单号可能多达数万个,后端分批走 Oracle 索引,留足收集时间
timeout: 300000
})
}
@@ -131,7 +131,7 @@ const searchColumns = [
label: '单号',
prop: 'orderIdentifiers',
component: 'textarea',
placeholder: '订单号/运单号/转单号,一行一个',
placeholder: '订单号/运单号/转单号,一行一个,支持数万个',
props: {
rows: 2,
autosize: { minRows: 1, maxRows: 4 },
@@ -215,6 +215,11 @@ function rowKey(row) {
return (row && (row.orderId || row.transferOrderId || row.orgOrderId)) || ''
}
/** 单次查询可接受的单号上限(后端按 900/批分批走索引,过高会明显增加等待时间) */
const MAX_ORDER_IDENTIFIERS = 50000
/** 产品检测走单条 SQL(Oracle IN 上限 1000),与后端保持一致 */
const MAX_PRODUCT_CHECK_IDENTIFIERS = 1000
/** 长文本拆成数组:一行一条,兼容逗号/分号/顿号分隔;不按空格拆(客户名称可能含空格) */
function splitLines(text) {
return String(text || '')
@@ -240,7 +245,8 @@ function buildFilterQuery(params) {
function queryList(params) {
const query = buildFilterQuery(params)
const hasIdentifier = !!(query.orderIdentifiers && query.orderIdentifiers.length)
const identifierCount = (query.orderIdentifiers || []).length
const hasIdentifier = identifierCount > 0
const hasCustomer = !!(query.customerKeywords && query.customerKeywords.length)
const hasTime = !!query.beginTime && !!query.endTime
// 有任一单号即可查询;无单号时必须客户+提货时间
@@ -248,6 +254,10 @@ function queryList(params) {
ElMessage.warning('请输入单号,或选择客户和提货时间')
return Promise.resolve({ rows: [], total: 0 })
}
if (identifierCount > MAX_ORDER_IDENTIFIERS) {
ElMessage.warning(`单次最多查询 ${MAX_ORDER_IDENTIFIERS} 个单号,当前 ${identifierCount} 个,请减少后再查`)
return Promise.resolve({ rows: [], total: 0 })
}
query.pageNum = params.pageNum
query.pageSize = params.pageSize
return listOrderSource(query)
@@ -314,6 +324,11 @@ function handleCheckProducts() {
ElMessage.warning('检测产品需先输入客户并选择提货时间')
return
}
const identifierCount = (q.orderIdentifiers || []).length
if (identifierCount > MAX_PRODUCT_CHECK_IDENTIFIERS) {
ElMessage.warning(`检测产品最多支持 ${MAX_PRODUCT_CHECK_IDENTIFIERS} 个单号,请减少单号或直接在列表勾选同步`)
return
}
checkLoading.value = true
productCheckDrawerRef.value?.open(q)
window.setTimeout(() => { checkLoading.value = false }, 300)