fix: force live refresh on MKH sync

This commit is contained in:
134 2026-09-24 14:49:08 +08:00
parent d013f1e636
commit 345214daed
3 changed files with 23 additions and 2 deletions

View File

@ -29,6 +29,10 @@ function sendError(res, error, fallback) {
res.status(status).json({ success: false, error: error.message || fallback });
}
function buildSyncQuery(query = {}) {
return { ...query, live: '1', fresh: '1' };
}
// MKH-BOM 资料列表(模块化组合商品 + 配件汇总)
router.get('/list', async (req, res) => {
try {
@ -109,7 +113,9 @@ router.put('/notification-center', async (req, res) => {
router.post('/sync', async (req, res) => {
try {
const cache = clearMkhBomCache();
const snapshot = await getMkhBomList({ ...(req.body?.query || {}), live: '1' });
// fresh=1 是真正重读库存 / 加工单 / 待发货数据的协议。
// 只清缓存再传 live=1 会落到旧快照,导致按钮显示“同步成功”却数值不变。
const snapshot = await getMkhBomList(buildSyncQuery(req.body?.query));
res.set('Cache-Control', 'no-store');
res.json({ success: true, data: { cache, snapshot } });
} catch (error) {
@ -118,3 +124,4 @@ router.post('/sync', async (req, res) => {
});
module.exports = router;
module.exports._private = { buildSyncQuery };

View File

@ -0,0 +1,13 @@
'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const { _private } = require('../src/api/mkhBom');
test('manual MKH sync always forces a live operational refresh', () => {
assert.deepEqual(
_private.buildSyncQuery({ page: 2, fresh: 0, live: 0 }),
{ page: 2, fresh: '1', live: '1' }
);
});

View File

@ -916,7 +916,8 @@ const MkhBomData = () => {
if (!result || result.success === false || !result?.data?.snapshot) {
throw new Error(result?.error || '同步接口未返回数据库快照');
}
setData(requireMkhFreshContract(result.data.snapshot));
setData(requireMkhFreshContract(result.data.snapshot, { requireApplied: true }));
lastListRefreshAtRef.current = Date.now();
setError('');
message.success('已实时读取最新订单、库存、BOM 与仓位数据');
} catch (syncError) {