修复首页金刚区显示,广告区显示

This commit is contained in:
Daniel Kou 2026-07-02 16:15:40 +08:00
parent 96f2ee15eb
commit b770725a5d
2 changed files with 82 additions and 92 deletions

View File

@ -237,7 +237,7 @@ page {
}
.tabList text {
font-size: 30rpx;
font-size: 26rpx;
}
.tabItem {

View File

@ -65,8 +65,7 @@
<!-- 轮播图 -->
<view class="swiper">
<swiper @animationfinish="swipers" autoplay circular>
<!-- <swiper-item v-for="(item, index) in bannerList" :key="index" @click="headerServerClick(item)"> -->
<swiper-item v-for="(item, index) in bannerList" :key="index">
<swiper-item v-for="(item, index) in bannerList" :key="index" @click="handleAdClick(item)">
<image :src="item.pic_src" mode="aspectFill" />
</swiper-item>
</swiper>
@ -92,13 +91,12 @@
<!-- 广告横幅 -->
<view class="serverList1">
<view class="serverList1_left" v-if="serverLeftList.length > 0">
<image :src="serverLeft" mode="aspectFill" @tap="toAdvertisingView(serverLeftList)" />
<image :src="serverLeft" mode="aspectFill" @tap="handleAdClick(serverLeftList[0])" />
</view>
<view class="serverList1_right" v-if="serverRightList.length > 0">
<view :class="['serverItemRight', `serverItemRight${index + 1}`]" v-for="(item, index) in serverRightList"
:key="index">
<image :src="item.pic_src" mode=""
@tap="index === 0 ? toAdvertisingView(serverRightList) : goToPurify(item)" />
<image :src="item.pic_src" mode="" @tap="handleAdClick(item)" />
</view>
</view>
</view>
@ -112,7 +110,7 @@
<view class="serverList">
<view class="serverList_left">
<swiper>
<swiper-item v-for="(item, index) in homeLeftList" :key="index" @click="headerServerClick(item)">
<swiper-item v-for="(item, index) in homeLeftList" :key="index" @click="handleAdClick(item)">
<image :src="item.pic_src" alt="" class="serverList_left_img" />
<!-- <view>{{ item.ad_position }}</view> -->
</swiper-item>
@ -259,6 +257,22 @@ import {
import nav from '../../components/nav/nav'; //1.导入组件
// 首页广告位常量(对应后台 home_banner_region.ad_position)
const AD_POS = {
TOP_BANNER: 1, // 顶部轮播
CARD_LEFT: 2, // 卡片橱窗左
CARD_RIGHT_TOP: 3, // 卡片橱窗右上
CARD_RIGHT_BOTTOM: 4, // 卡片橱窗右下
MID_LEFT: 5, // 中部广告位左
MID_CENTER_TOP: 6, // 中部中上
MID_CENTER: 7, // 中部中
MID_CENTER_BOTTOM: 8, // 中部中下
MID_RIGHT_TOP: 9, // 中部右上
MID_RIGHT_CENTER: 10, // 中部右中
MID_RIGHT_BOTTOM: 11, // 中部右下
POPUP: 12, // 小程序弹窗
BOTTOM_RECOMMEND: 13, // 底部推荐
};
export default {
components: {
@ -353,22 +367,28 @@ export default {
})
},
// 广告商品跳转
toAdvertisingView(itemArry) {
const item = itemArry[0]
NavgateTo('/packages/advertising/index/index?id=' + item.id, { isLogin: false })
},
//跳转到净水小程序
goToPurify() {
uni.navigateToMiniProgram({
appId: 'wx77b22c0a0018e580',
path: 'pages/newLogin/newLogin',
envVersion: 'release',
success(res) {
// 打开成功
}
})
// 统一广告点击:按后台 promotion_type 分发跳转
// 1无 / 3跳本小程序页面(link_url) / 4跳其他小程序(appid+link_url) / 5选择商品(跳广告商品列表页)
handleAdClick(item) {
if (!item) return
switch (item.promotion_type) {
case 3: // 跳转本小程序页面
if (!item.link_url) return this.NotOpen()
if (item.link_url === '/packages/shopEnter/index/index') return this.headershopEnterClick()
return NavgateTo(item.link_url, { isLogin: false })
case 4: // 跳转其他小程序
if (!item.appid) return this.NotOpen()
return uni.navigateToMiniProgram({
appId: item.appid,
path: item.link_url || '',
envVersion: 'release'
})
case 5: // 选择商品 → 广告商品列表页
return NavgateTo('/packages/advertising/index/index?id=' + item.id, { isLogin: false })
case 1:
default: // 无
return this.NotOpen()
}
},
async goToWuye() {
@ -715,87 +735,57 @@ export default {
return (res && res.rows) ? res.rows : [];
},
// 给列表统一补图片前缀
withPicUrl(list) {
list.forEach(item => { item.pic_src = picUrl + item.pic_src })
return list
},
// 取某广告位「第一条已发布」广告(固定单格用);无则按需返回占位或 null
async getBannerAt(position, { placeholder = false } = {}) {
const rows = await this.getBannerRows(position)
const [first] = this.withPicUrl(this.filterShowList(rows, 1))
if (first) return first
return placeholder ? { ad_position: position, pic_src: '' } : null
},
// 按顺序批量取多个固定单格位置
async getBannersAt(positions, opts) {
return Promise.all(positions.map(p => this.getBannerAt(p, opts)))
},
async getHomeBanner() {
const rows = await this.getBannerRows(1);
if (rows && rows.length) {
let filterRes = this.filterShowList(rows, 1);
filterRes.forEach(item => {
item.pic_src = picUrl + item.pic_src
})
return filterRes
} else {
return []
}
const rows = await this.getBannerRows(AD_POS.TOP_BANNER);
return this.withPicUrl(this.filterShowList(rows, 1));
},
async getServerLeft() {
const rows = await this.getBannerRows(2);
if (!rows || !rows.length) {
this.serverLeftList = []
}
if (rows && rows.length) {
this.serverLeftList = rows
let filterRes = this.filterShowList(rows, 1);
filterRes.forEach(item => {
item.pic_src = picUrl + item.pic_src
})
const itemUrl = filterRes[0].pic_src
return itemUrl
} else {
return []
}
const rows = await this.getBannerRows(AD_POS.CARD_LEFT);
const shown = this.withPicUrl(this.filterShowList(rows, 1));
this.serverLeftList = shown; // 与展示的首图保持一致,点击取 [0] 即为当前图
return shown.length ? shown[0].pic_src : [];
},
async getServerRight() {
const rightList = []
for (let i = 3; i < 5; i++) {
const rows = await this.getBannerRows(i);
if (!rows || !rows.length) {
this.serverRightList = []
}
if (rows && rows.length) {
let filterRes = this.filterShowList(rows, 1);
filterRes.forEach(item => {
item.pic_src = picUrl + item.pic_src
})
rightList.push(...filterRes)
}
}
return rightList
// 卡片橱窗右侧两格,各取第一条;无广告则不占位(保持原「无则隐藏」行为)
const list = await this.getBannersAt([
AD_POS.CARD_RIGHT_TOP,
AD_POS.CARD_RIGHT_BOTTOM,
]);
return list.filter(Boolean);
},
async getHomeMidLeft() {
const rows = await this.getBannerRows(5);
if (rows && rows.length) {
let filterRes = this.filterShowList(rows, 1);
filterRes.forEach(item => {
item.pic_src = picUrl + item.pic_src
})
return filterRes
} else {
return []
}
const rows = await this.getBannerRows(AD_POS.MID_LEFT);
return this.withPicUrl(this.filterShowList(rows, 1));
},
async getHomeMidRight() {
const rightList = []
for (let i = 6; i < 12; i++) {
const rows = await this.getBannerRows(i);
if (rows && rows.length) {
let filterRes = this.filterShowList(rows, 1);
filterRes.forEach(item => {
item.pic_src = picUrl + item.pic_src
})
rightList.push(...filterRes)
} else {
rightList.push({
ad_position: i,
pic_src: ''
})
}
}
return rightList
// 中部右侧宫格固定 6 格,各取第一条,保证 slice(0,3)/slice(3,6) 对齐
return this.getBannersAt([
AD_POS.MID_CENTER_TOP, AD_POS.MID_CENTER, AD_POS.MID_CENTER_BOTTOM,
AD_POS.MID_RIGHT_TOP, AD_POS.MID_RIGHT_CENTER, AD_POS.MID_RIGHT_BOTTOM,
], { placeholder: true });
},
// async getHomeCenterTop() {
@ -936,7 +926,7 @@ export default {
async getHomeBottom(val = false) {
const res = await request(apiArr2.getHomeBanner, "POST", {
ad_code: uni.getStorageSync('ad_code'),
ad_position: 5,
ad_position: AD_POS.BOTTOM_RECOMMEND,
longitude: uni.getStorageSync('location').lng,
latitude: uni.getStorageSync('location').lat,
page_num: this.bottomPageNum,