diff --git a/common/js/goods_detail_base.js b/common/js/goods_detail_base.js index 75bc04e..185f9c4 100644 --- a/common/js/goods_detail_base.js +++ b/common/js/goods_detail_base.js @@ -115,7 +115,12 @@ export default { } //媒体 - if (this.goodsSkuDetail.video_url) this.switchMedia = "video"; + // 媒体显示顺序以后台商品「高级设置 → 媒体显示顺序」media_order 为准 + // (1=主图在前 2=视频在前); 真正渲染媒体区的是 goods-detail-view 组件, + // 组件内部按同一规则切换, 这里保持一致避免两处规则打架 + if (this.goodsSkuDetail.video_url) { + this.switchMedia = (Number(this.goodsSkuDetail.media_order) === 2) ? "video" : "img"; + } if (!Array.isArray(this.goodsSkuDetail.sku_images)) { if (this.goodsSkuDetail.sku_images) this.goodsSkuDetail.sku_images = this.goodsSkuDetail.sku_images.split(","); diff --git a/components-diy/diy-card-entry.vue b/components-diy/diy-card-entry.vue index a805391..59b8669 100644 --- a/components-diy/diy-card-entry.vue +++ b/components-diy/diy-card-entry.vue @@ -156,6 +156,16 @@ export default { uni.showToast({ title: '自定义路径需以 / 开头', icon: 'none' }); return; } + } else if (v.linkMode === 'link') { + // 平台统一「选择链接」: link 是个对象({name,title,wap_url,page_key,page_params}), + // 走 $util.diyRedirectTo 由平台统一处理(内部页/外链/小程序/拨号 等) + const link = v.link && typeof v.link === 'object' ? v.link : null; + if (!link || !link.name) { + uni.showToast({ title: '请先选择链接', icon: 'none' }); + return; + } + this.$util.diyRedirectTo(link); + return; } else { url = '/pages_tool/card/list'; } diff --git a/components-diy/diy-card-list.vue b/components-diy/diy-card-list.vue index 0501ead..09925b7 100644 --- a/components-diy/diy-card-list.vue +++ b/components-diy/diy-card-list.vue @@ -229,6 +229,16 @@ export default { uni.showToast({ title: '自定义路径需以 / 开头', icon: 'none' }); return; } + } else if (mode === 'link') { + // 平台统一「选择链接」: moreLink 是个对象({name,title,wap_url,page_key,page_params}), + // 走 $util.diyRedirectTo 由平台统一处理(内部页/外链/小程序/拨号 等) + const link = this.v.moreLink && typeof this.v.moreLink === 'object' ? this.v.moreLink : null; + if (!link || !link.name) { + uni.showToast({ title: '请先选择链接', icon: 'none' }); + return; + } + this.$util.diyRedirectTo(link); + return; } this.$util.redirectTo(url); }, diff --git a/components-diy/diy-card-mini.vue b/components-diy/diy-card-mini.vue index 8890320..67a9019 100644 --- a/components-diy/diy-card-mini.vue +++ b/components-diy/diy-card-mini.vue @@ -98,9 +98,9 @@ {{ qrTip || '扫码查看完整名片' }} - + - {{ detailBtnText || '查看完整名片' }} + {{ detailBtnText || '发送名片' }} diff --git a/pages_goods/_components/goods-detail-view/detail.js b/pages_goods/_components/goods-detail-view/detail.js index f8a2566..bb8798f 100644 --- a/pages_goods/_components/goods-detail-view/detail.js +++ b/pages_goods/_components/goods-detail-view/detail.js @@ -105,6 +105,24 @@ export default { } }, methods: { + /** + * 应用后台「高级设置 → 媒体显示顺序」(media_order) + * 1 = 主图在前(默认) 2 = 视频在前 + * 商品没有视频时一律主图在前 + */ + applyMediaOrder() { + const detail = this.goodsSkuDetail || {}; + if (!detail.video_url) { + this.switchMedia = 'img'; + return; + } + this.switchMedia = Number(detail.media_order) === 2 ? 'video' : 'img'; + }, + // 手动切换图片/视频 + switchMediaTab(key) { + this.switchMedia = key; + if (key === 'img' && this.videoContext) this.videoContext.pause(); + }, init(params) { this.skuId = params.sku_id; this.goodsId = params.goods_id; @@ -136,6 +154,9 @@ export default { this.videoContext = uni.createVideoContext('goodsVideo'); + // 媒体显示顺序: 以后台商品「高级设置 → 媒体显示顺序」为准 + this.applyMediaOrder(); + // #ifdef MP-WEIXIN this.goodsSyncToGoodsCircle(); // #endif diff --git a/pages_goods/_components/goods-detail-view/goods-detail-view.vue b/pages_goods/_components/goods-detail-view/goods-detail-view.vue index c7a9fc8..0fa0385 100644 --- a/pages_goods/_components/goods-detail-view/goods-detail-view.vue +++ b/pages_goods/_components/goods-detail-view/goods-detail-view.vue @@ -65,10 +65,11 @@ - {{ - $lang('goods.detail.video') }} - {{ $lang('goods.detail.image') }} + {{ + tab.key == 'video' ? $lang('goods.detail.video') : $lang('goods.detail.image') + }} @@ -684,6 +685,24 @@ export default { // 用于「未拿到任何数据时不显示真实内容」, 避免加载失败/异常时切到空详情页 hasRealData() { return this.goodsSkuDetail && Number(this.goodsSkuDetail.goods_id) > 0; + }, + // 媒体顺序的变更标识: 只在「媒体显示顺序 / 视频地址」变化时重新应用 + // 用它而不是直接 watch goodsSkuDetail(深度监听), 是为了避免用户手动切到 + // 「视频」后被详情数据的任意一次深层变更打回「主图」 + mediaOrderKey() { + const detail = this.goodsSkuDetail || {}; + return (detail.media_order || 1) + '|' + (detail.video_url || ''); + }, + // 底部「图片 / 视频」切换按钮的排列, 与后台设置的媒体显示顺序保持一致 + mediaTabs() { + const detail = this.goodsSkuDetail || {}; + const tabs = [{ key: 'img' }, { key: 'video' }]; + return Number(detail.media_order) === 2 ? tabs.reverse() : tabs; + } + }, + watch: { + mediaOrderKey() { + this.applyMediaOrder(); } }, mixins: [scroll, detail]