/**
|
* 详情数据加载:接口优先,缓存兜底
|
*
|
* 列表页跳转时会 `uni.setStorageSync('xxxDetail', row)`,但列表行只有列表列字段,
|
* 附件、子表、归档情况这些只有详情接口才有。若编辑页先读缓存就回填表单,
|
* 提交时会把缺失的附件一并清空(数据丢失)。
|
*
|
* 所以统一走「先请求详情接口,失败时才用缓存兜底」,缓存只用于接口不可用时的降级。
|
*/
|
|
/**
|
* @param {object} options
|
* @param {string} options.cacheKey 列表页写入的 storage key
|
* @param {string} options.id 当前记录 id
|
* @param {Function} options.fetcher 接收 id、返回 Promise 的详情接口
|
* @returns {Promise<object|null>} 详情对象,取不到返回 null
|
*/
|
export async function loadDetailData({ cacheKey, id, fetcher }) {
|
const cached = cacheKey ? uni.getStorageSync(cacheKey) : null;
|
const fallback =
|
cached && String(cached.id) === String(id) ? cached : null;
|
|
try {
|
const res = await fetcher(id);
|
return res?.data || fallback || null;
|
} catch (error) {
|
if (fallback) return fallback;
|
throw error;
|
}
|
}
|