fix(鸿蒙兼容): 修复商品详情页骨架屏常驻问题
1. 兼容后端不返回goods_promotion字段的场景,避免直接取值抛错 2. 替换鸿蒙元服务下不可靠的nextTick和延迟关闭逻辑,改为同步关闭骨架屏,解决数据返回后骨架屏常驻的问题
This commit is contained in:
@@ -181,7 +181,10 @@ export default {
|
|||||||
this.chatRoomParams = {
|
this.chatRoomParams = {
|
||||||
sku_id: this.goodsSkuDetail.sku_id
|
sku_id: this.goodsSkuDetail.sku_id
|
||||||
};
|
};
|
||||||
let typeId = this.goodsSkuDetail.goods_promotion[0];
|
// 鸿蒙兼容: 后端在部分场景下可能不返回 goods_promotion, 缺字段直接 .[0] 会抛 TypeError,
|
||||||
|
// 整个 onShow 走 catch 路径无法关闭骨架屏, 表现为"数据已回来但永远显示骨架屏"
|
||||||
|
const promotionList = this.goodsSkuDetail?.goods_promotion || [];
|
||||||
|
let typeId = promotionList.length > 0 ? promotionList[0] : undefined;
|
||||||
if (typeId) {
|
if (typeId) {
|
||||||
// 限时折扣
|
// 限时折扣
|
||||||
if (typeId.discount_id) {
|
if (typeId.discount_id) {
|
||||||
@@ -199,18 +202,21 @@ export default {
|
|||||||
// 兼容鸿蒙元服务: $nextTick 在某些 JSVM 实现下不可靠, 用 setTimeout 兜底
|
// 兼容鸿蒙元服务: $nextTick 在某些 JSVM 实现下不可靠, 用 setTimeout 兜底
|
||||||
// #ifdef MP-HARMONY
|
// #ifdef MP-HARMONY
|
||||||
await new Promise(resolve => setTimeout(resolve, 16));
|
await new Promise(resolve => setTimeout(resolve, 16));
|
||||||
|
// 修复鸿蒙元服务: 不依赖 setTimeout 关闭骨架屏.
|
||||||
|
// 鸿蒙 JSVM 在 onShow 早期窗口的 setTimeout 回调有时被推迟/丢弃, 表现为"数据已回来但永远显示骨架屏".
|
||||||
|
// 数据已赋值 + 首屏让步, 同步直接关闭骨架屏, 由 hasRealData 兜底避免空详情.
|
||||||
|
this.loading = false;
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
// #ifndef MP-HARMONY
|
// #ifndef MP-HARMONY
|
||||||
await this.$nextTick();
|
await this.$nextTick();
|
||||||
// #endif
|
|
||||||
|
|
||||||
// 关闭商品详情骨架屏: 在真实数据首屏渲染完成后再隐藏骨架屏,
|
// 关闭商品详情骨架屏: 在真实数据首屏渲染完成后再隐藏骨架屏,
|
||||||
// 用户会看到骨架屏 → 真实详情 的清晰过渡
|
// 用户会看到骨架屏 → 真实详情 的清晰过渡
|
||||||
// 最短展示 300ms: 数据请求很快时也保留足够感知时间, 否则一闪而过用户根本看不到骨架屏
|
// 最短展示 300ms: 数据请求很快时也保留足够感知时间, 否则一闪而过用户根本看不到骨架屏
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
}, 300);
|
}, 300);
|
||||||
|
// #endif
|
||||||
|
|
||||||
// 处理商品数据 (同步字段变换 + 后台并发 getGoodsForm)
|
// 处理商品数据 (同步字段变换 + 后台并发 getGoodsForm)
|
||||||
await this.handleGoodsSkuData();
|
await this.handleGoodsSkuData();
|
||||||
|
|||||||
Reference in New Issue
Block a user