1
This commit is contained in:
@@ -1410,6 +1410,8 @@ export default {
|
||||
selectedRows: [],
|
||||
// 列表加载后自动同步利润(防快速翻页乱序)
|
||||
syncAutoProfitSeq: 0,
|
||||
/** 延后拉单条详情的防抖句柄(字符串 id -> timeout id) */
|
||||
_patchRowTimers: null,
|
||||
/** 移动端卡片:当前展开的订单 id(null 表示全部收起,同时只展开一条) */
|
||||
mobileExpandedOrderId: null,
|
||||
/** 视口高度(桌面端用于矮窗口下自动收起「跟进状态」筛选) */
|
||||
@@ -1511,6 +1513,7 @@ export default {
|
||||
},
|
||||
created() {
|
||||
this.applyMobileSlowOrderPageSize()
|
||||
this._patchRowTimers = {}
|
||||
// 设置默认日期为今天
|
||||
this.setDefaultDateRange()
|
||||
this.getListWithFallback()
|
||||
@@ -1545,6 +1548,13 @@ export default {
|
||||
if (this._onJdFilterViewportResize) {
|
||||
window.removeEventListener('resize', this._onJdFilterViewportResize)
|
||||
}
|
||||
if (this._syncAutoProfitTimer) {
|
||||
clearTimeout(this._syncAutoProfitTimer)
|
||||
this._syncAutoProfitTimer = null
|
||||
}
|
||||
if (this._patchRowTimers) {
|
||||
Object.keys(this._patchRowTimers).forEach(k => clearTimeout(this._patchRowTimers[k]))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onJdFilterViewportResize() {
|
||||
@@ -1719,7 +1729,30 @@ export default {
|
||||
if (!row || row.id == null) return
|
||||
this.mobileExpandedOrderId = this.mobileExpandedOrderId === row.id ? null : row.id
|
||||
},
|
||||
/** 本页数据与库中规则对齐:仅未锁定利润的订单可能写库;有更新则静默拉一次列表(不再递归同步) */
|
||||
/** 用户正在保存或与保存相关的回补时,取消「列表加载后自动同步利润」的挂起任务,避免与 PUT/GET 并发触发限流 */
|
||||
invalidatePendingSyncAutoProfit() {
|
||||
this.syncAutoProfitSeq++
|
||||
if (this._syncAutoProfitTimer) {
|
||||
clearTimeout(this._syncAutoProfitTimer)
|
||||
this._syncAutoProfitTimer = null
|
||||
}
|
||||
},
|
||||
/** 保存成功后错峰拉单条(替代与列表/同步抢同一时刻的带宽) */
|
||||
schedulePatchOrderRowFromServer(id) {
|
||||
if (id == null || !this._patchRowTimers) return
|
||||
const sid = String(id)
|
||||
if (this._patchRowTimers[sid]) {
|
||||
clearTimeout(this._patchRowTimers[sid])
|
||||
}
|
||||
this._patchRowTimers[sid] = setTimeout(() => {
|
||||
delete this._patchRowTimers[sid]
|
||||
this.patchOrderRowFromServer(id)
|
||||
}, 420)
|
||||
},
|
||||
/**
|
||||
* 本页数据与库中规则对齐(未手填利润的订单后端可能微调);必要时再静默拉列表。
|
||||
* 延迟较长并与 invalidatePendingSyncAutoProfit 递增的 seq 配合,避免与编辑保存 PUT、详情 GET 同一时间突发请求触发限流。
|
||||
*/
|
||||
runSyncAutoProfitAfterListLoad() {
|
||||
const ids = this.list.map(r => r.id).filter(id => id != null)
|
||||
if (!ids.length) return
|
||||
@@ -1737,7 +1770,7 @@ export default {
|
||||
})
|
||||
})
|
||||
.catch(() => {})
|
||||
}, 120)
|
||||
}, 650)
|
||||
},
|
||||
getList() {
|
||||
this.loading = true
|
||||
@@ -2036,10 +2069,11 @@ export default {
|
||||
return Promise.resolve()
|
||||
}
|
||||
this.ensureMoneyFieldsForPersist(row)
|
||||
this.invalidatePendingSyncAutoProfit()
|
||||
return updateJDOrder(row)
|
||||
.then(() => {
|
||||
if (successMsg) this.$message.success(successMsg)
|
||||
this.patchOrderRowFromServer(row.id)
|
||||
this.schedulePatchOrderRowFromServer(row.id)
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message.error('保存失败')
|
||||
@@ -2242,10 +2276,11 @@ export default {
|
||||
if (row.isRefunded === 0) {
|
||||
row.refundDate = null
|
||||
}
|
||||
this.invalidatePendingSyncAutoProfit()
|
||||
// 调用后端API更新数据库
|
||||
updateJDOrder(row).then(() => {
|
||||
this.$message.success(`订单 ${row.remark} 的退款状态已更新`)
|
||||
this.patchOrderRowFromServer(row.id)
|
||||
this.schedulePatchOrderRowFromServer(row.id)
|
||||
}).catch(() => {
|
||||
this.$message.error('更新失败,请稍后重试')
|
||||
// 恢复原状态
|
||||
|
||||
Reference in New Issue
Block a user