|
@@ -33,6 +33,11 @@
|
|
|
{{ parseInt(row.totalQuantity || 0) }}
|
|
|
</template>
|
|
|
|
|
|
+ <!-- 明细条数显示 -->
|
|
|
+ <template slot="detailCount" slot-scope="{row}">
|
|
|
+ {{ (Array.isArray(row.pcBladeOrderItemList) ? row.pcBladeOrderItemList.length : (typeof row.detailCount === 'number' ? row.detailCount : 0)) }}
|
|
|
+ </template>
|
|
|
+
|
|
|
<!-- 订单状态显示 -->
|
|
|
<template slot="status" slot-scope="{row}">
|
|
|
<el-tag :type="getOrderStatusTagType(row.status)">
|
|
@@ -68,6 +73,7 @@ import { getList } from '@/api/order/order'
|
|
|
import { getOrderTypeLabel, getOrderTypeTagType, getOrderStatusLabel, getOrderStatusTagType } from '@/constants'
|
|
|
import OrderItemTable from '@/components/order-item-table/index.vue'
|
|
|
import { safeBigInt } from '@/util/util'
|
|
|
+import { getList as getOrderItemList } from '@/api/order/order-item'
|
|
|
|
|
|
export default {
|
|
|
name: 'FactoryOrderList',
|
|
@@ -86,9 +92,11 @@ export default {
|
|
|
|
|
|
return {
|
|
|
option: opt,
|
|
|
+ /** @type {FactoryOrderRecord[]} */
|
|
|
data: [],
|
|
|
form: {},
|
|
|
loading: true,
|
|
|
+ /** @type {FactoryOrderRecord[]} */
|
|
|
selectionList: [],
|
|
|
page: { pageSize: 10, currentPage: 1, total: 0 },
|
|
|
// 记录最后一次有效的搜索参数,保证分页时参数不丢失
|
|
@@ -120,26 +128,53 @@ export default {
|
|
|
// 合并来源:上次有效参数 + 当前表单 + 本次传入
|
|
|
const source = Object.assign({}, this.lastQuery || {}, this.form || {}, params || {})
|
|
|
// 仅映射后端支持的查询参数,并兼容 Avue 日期范围
|
|
|
+ /** @type {any} */
|
|
|
+ const anySource = source
|
|
|
+ const formRange = Array.isArray(anySource.createTime) ? anySource.createTime : undefined
|
|
|
const query = {
|
|
|
orderCode: source.orderCode,
|
|
|
orgName: source.orgName,
|
|
|
customerName: source.customerName,
|
|
|
receiverName: source.receiverName,
|
|
|
receiverPhone: source.receiverPhone,
|
|
|
- createTimeStart: source.createTimeStart || (Array.isArray(source.createTime) ? source.createTime[0] : undefined),
|
|
|
- createTimeEnd: source.createTimeEnd || (Array.isArray(source.createTime) ? source.createTime[1] : undefined),
|
|
|
+ createTimeStart: source.createTimeStart || (formRange ? formRange[0] : undefined),
|
|
|
+ createTimeEnd: source.createTimeEnd || (formRange ? formRange[1] : undefined),
|
|
|
orderType: source.orderType,
|
|
|
status: source.status
|
|
|
}
|
|
|
- Object.keys(query).forEach(k => query[k] === undefined && delete query[k])
|
|
|
+ // 清理 undefined 字段,避免多余查询参数
|
|
|
+ const cleanedQuery = {}
|
|
|
+ if (query.orderCode !== undefined) cleanedQuery.orderCode = query.orderCode
|
|
|
+ if (query.orgName !== undefined) cleanedQuery.orgName = query.orgName
|
|
|
+ if (query.customerName !== undefined) cleanedQuery.customerName = query.customerName
|
|
|
+ if (query.receiverName !== undefined) cleanedQuery.receiverName = query.receiverName
|
|
|
+ if (query.receiverPhone !== undefined) cleanedQuery.receiverPhone = query.receiverPhone
|
|
|
+ if (query.createTimeStart !== undefined) cleanedQuery.createTimeStart = query.createTimeStart
|
|
|
+ if (query.createTimeEnd !== undefined) cleanedQuery.createTimeEnd = query.createTimeEnd
|
|
|
+ if (query.orderType !== undefined) cleanedQuery.orderType = query.orderType
|
|
|
+ if (query.status !== undefined) cleanedQuery.status = query.status
|
|
|
+
|
|
|
// 持久化搜索条件,确保翻页时不丢失
|
|
|
- this.lastQuery = Object.assign({}, query)
|
|
|
+ this.lastQuery = Object.assign({}, cleanedQuery)
|
|
|
|
|
|
- getList(page.currentPage, page.pageSize, query)
|
|
|
- .then(res => {
|
|
|
+ getList(page.currentPage, page.pageSize, cleanedQuery)
|
|
|
+ .then(async res => {
|
|
|
const data = res.data && res.data.data ? res.data.data : { records: [], total: 0 }
|
|
|
- this.data = Array.isArray(data.records) ? data.records : []
|
|
|
- this.page.total = Number(data.total || 0)
|
|
|
+ const records = Array.isArray(data.records) ? data.records : []
|
|
|
+ const total = Number(data.total || 0)
|
|
|
+ // 并行查询每条订单的明细总数(使用分页响应 total 字段作为计数)
|
|
|
+ const counts = await Promise.all(records.map(async (row) => {
|
|
|
+ try {
|
|
|
+ const resp = await getOrderItemList(1, 1, { orderId: row.id })
|
|
|
+ const payload = resp && resp.data && resp.data.data ? resp.data.data : { total: 0 }
|
|
|
+ return Number(payload.total || 0)
|
|
|
+ } catch (e) {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ }))
|
|
|
+ // 合并计数到记录中
|
|
|
+ this.data = records.map((row, idx) => ({ ...row, detailCount: counts[idx] }))
|
|
|
+ this.page.total = total
|
|
|
this.loading = false
|
|
|
})
|
|
|
.catch(() => { this.loading = false })
|
|
@@ -162,15 +197,18 @@ export default {
|
|
|
this.onLoad(this.page)
|
|
|
},
|
|
|
/** 选择变化 */
|
|
|
+ /** @param {FactoryOrderRecord[]} list */
|
|
|
selectionChange(list) {
|
|
|
this.selectionList = list
|
|
|
},
|
|
|
/** 页码变化:保持搜索条件不丢失并重新加载 */
|
|
|
+ /** @param {number} currentPage */
|
|
|
currentChange(currentPage) {
|
|
|
this.page.currentPage = currentPage
|
|
|
this.onLoad(this.page, this.lastQuery)
|
|
|
},
|
|
|
/** 每页大小变化:保持搜索条件不丢失并重新加载 */
|
|
|
+ /** @param {number} pageSize */
|
|
|
sizeChange(pageSize) {
|
|
|
this.page.pageSize = pageSize
|
|
|
this.onLoad(this.page, this.lastQuery)
|