feat(shopGoods): 优化商品列表加载及封面图性能

- image.ts 中 getCompressedImageUrl 增加缓存,避免列表重渲染时重复计算压缩 URL
- shopGoods 页面用原生 img 标签替换 antdv a-image,支持浏览器懒加载减少首屏网络压力
- shopGoods 页面数据加载流程优化,取消表格自动首屏加载,改为手动触发,合并请求避免重复调用
- 首屏分类数据延迟加载,不阻塞首屏渲染,提升页面响应速度
- search.vue 中用 onMounted 替代 watch immediate,防止首次入场重复触发请求
- 新增商品封面图样式,保证图片大小固定且样式统一
This commit is contained in:
2026-08-06 17:19:15 +08:00
parent c553a71ea2
commit 3bc856fc95
8 changed files with 296 additions and 24 deletions
+12 -10
View File
@@ -119,7 +119,7 @@
ArrowDownOutlined,
DownOutlined
} from '@ant-design/icons-vue';
import { ref, watch } from 'vue';
import { ref, watch, onMounted } from 'vue';
import { getCount } from '@/api/shop/shopGoods';
import type { GoodsCount, ShopGoodsParam } from '@/api/shop/shopGoods/model';
import useSearch from '@/utils/use-search';
@@ -244,18 +244,20 @@
emit('search', where);
};
// 首次进入:设置商户条件并触发统计 + 列表加载。
// 用 onMounted 替代 watch 的 immediate,避免与 ele-pro-table 的自动加载(initLoad)重复发请求。
onMounted(() => {
const id = props.merchantId;
where.merchantId = Number(id) > 0 ? id : undefined;
reload();
});
watch(
() => props.merchantId,
(id) => {
if (Number(id) > 0) {
where.merchantId = id;
reload();
} else {
where.merchantId = undefined;
reload();
}
},
{ immediate: true }
where.merchantId = Number(id) > 0 ? id : undefined;
reload();
}
);
</script>