| 
						 | 
						- <template>
 - 	<view class="page">
 - 		<navbar title="商城"/>
 - 		
 - 		<!-- <view>
 - 			<uv-swiper
 - 			:list="bannerList" 
 - 			indicator
 - 			height="320rpx"
 - 			keyName="image"></uv-swiper>
 - 		</view> -->
 - 		
 - 		<view class="swipe">
 - 			<uv-swiper 
 - 			:list="bannerList" 
 - 			indicator
 - 			height="320rpx"
 - 			keyName="image"></uv-swiper>
 - 		</view>
 - 		
 - 		<!-- 公告 -->
 - 		<view class="notice">
 - 			<uv-notice-bar
 - 			fontSize="28rpx"
 - 			@click="$utils.navigateTo('/pages_order/notice/noticeDetail')"
 - 			:text="headInfo.notice.keyName"></uv-notice-bar>
 - 		</view>
 - 		
 - 		<!-- 分类 -->
 - 		<view class="city-tabs-container">
 - 			<uv-tabs 
 - 				:list="productCategory" 
 - 				:current="currentCityTabIndex"
 - 				:activeStyle="{color: '#5baaff', fontWeight: 600}"
 - 				lineColor="#5baaff" 
 - 				lineHeight="6rpx" 
 - 				lineWidth="40rpx"
 - 				keyName="title"
 - 				@click="tabsClick"
 - 			/>
 - 		</view>
 - 		
 - 		<view class="productList">
 - 			<productList :productList="list"/>
 - 		</view>
 - 		
 - 		<!-- <view class="waterfall">
 - 			<uv-waterfall ref="waterfall" v-model="list"
 - 			 :add-time="10" 
 - 			 :left-gap="leftGap"
 - 			 :right-gap="rightGap"
 - 			 :column-gap="columnGap"
 - 			 @changeList="changeList">
 - 				<template v-slot:list1>
 - 					<view>
 - 						<view v-for="(item, index) in list1" :key="item.id" class="waterfall-item"
 - 						@click="$utils.navigateTo('/pages_order/product/productDetail?id=' + item.id)">
 - 							<view class="waterfall-item__image" :style="[imageStyle(item)]">
 - 								<image :src="item.image" mode="widthFix" :style="{width:item.width+'px'}"></image>
 - 							</view>
 - 							<view class="waterfall-item__ft">
 - 								<view class="waterfall-item__ft__title">
 - 									<text class="title">{{item.name}}</text>
 - 								</view>
 - 								<view class="waterfall-item__ft__desc uv-line-2">
 - 									<text class="price">现价{{item.price}}¥</text>
 - 									<text class="oldPrice">原价{{item.oldPrice}}¥</text>
 - 								</view>
 - 							</view>
 - 						</view>
 - 						
 - 					</view>
 - 				</template>
 - 				<template v-slot:list2>
 - 					<view>
 - 						<view v-for="(item, index) in list2" :key="item.id" class="waterfall-item"
 - 						@click="$utils.navigateTo('/pages_order/product/productDetail?id=' + item.id)">
 - 							<view class="waterfall-item__image" :style="[imageStyle(item)]">
 - 								<image :src="item.image" mode="widthFix" :style="{width:item.width+'px'}"></image>
 - 							</view>
 - 							<view class="waterfall-item__ft">
 - 								<view class="waterfall-item__ft__title">
 - 									<text class="title">{{item.name}}</text>
 - 								</view>
 - 								<view class="waterfall-item__ft__desc uv-line-2">
 - 									<text class="price">现价{{item.price}}¥</text>
 - 									<text class="oldPrice">原价{{item.oldPrice}}¥</text>
 - 								</view>
 - 							</view>
 - 						</view>
 - 					</view>
 - 				</template>
 - 			</uv-waterfall>
 - 		</view> -->
 - 		
 - 		
 - 	</view>
 - </template>
 - 
 - <script>
 - 	import mixinsList from '@/mixins/list.js'
 - 	import mixinsProduct from '@/mixins/product.js'
 - 	import tabber from '@/components/base/tabbar.vue'
 - 	import productList from '@/components/user/productList.vue'
 - 	import { mapState } from 'vuex'
 - 	export default {
 - 		mixins: [mixinsList, mixinsProduct],
 - 		components : {
 - 			tabber,
 - 			productList,
 - 		},
 - 		computed: {
 - 			...mapState(['city', 'userInfo', 'headInfo', 'cityList']),
 - 			
 - 			// 城市分类列表(包含"全部"选项)
 - 			productCategory() {
 - 				const allTab = { id: null, title: '全部', value: null }
 - 				const cityTabs = this.cityList.map(city => ({
 - 					id: city.id || city.cityId,
 - 					title: city.name || city.cityName || city.title,
 - 					value: city.id || city.cityId
 - 				}))
 - 				return [allTab, ...cityTabs]
 - 			}
 - 			// imageStyle(item) {
 - 			// 	return item => {
 - 			// 		const v = uni.upx2px(750) - this.leftGap - this.rightGap - this.columnGap;
 - 			// 		const w = v / 2;
 - 			// 		const rate = w / item.w;
 - 			// 		const h = rate * item.h;
 - 			// 		return {
 - 			// 			width: w + 'px',
 - 			// 			height: h + 'px'
 - 			// 		}
 - 			// 	}
 - 			// }
 - 		},
 - 		data() {
 - 			return {
 - 				mixinsListApi: 'getShopPingPage',
 - 				currentCityTabIndex: 0, // uv-tabs当前选中的城市索引
 - 				// list1: [], // 瀑布流第一列数据
 - 				// list2: [], // 瀑布流第二列数据
 - 				// leftGap: 10,
 - 				// rightGap: 10,
 - 				// columnGap: 10,
 - 				bannerList : [],
 - 				// category : [
 - 				// 	{
 - 				// 		name : '户外',
 - 				// 		value : 0,
 - 				// 	},
 - 				// 	{
 - 				// 		name : '美食',
 - 				// 		value : 1,
 - 				// 	},
 - 				// 	{
 - 				// 		name : '兑换',
 - 				// 		value : 2,
 - 				// 	},
 - 				// 	{
 - 				// 		name : '特产',
 - 				// 		value : 3,
 - 				// 	},
 - 				// 	{
 - 				// 		name : '校园',
 - 				// 		value : 4,
 - 				// 	},
 - 				// ],
 - 			}
 - 		},
 - 		onShow() {
 - 			this.getBannerList()
 - 		},
 - 		onLoad() {
 - 			// 获取城市列表
 - 			this.$store.commit('getCityList')
 - 			
 - 			// 初始化查询参数
 - 			this.queryParams.cityId = null
 - 		},
 - 		methods: {
 - 			// 这点非常重要:e.name在这里返回是list1或list2,要手动将数据追加到相应列
 - 			// changeList(e) {
 - 			// 	this[e.name].push(e.value);
 - 			// },
 - 			// 获取banner
 - 			getBannerList(){
 - 				this.$api('getBannerList', res => {
 - 					if(res.code == 200){
 - 						this.bannerList = res.result
 - 					}
 - 				})
 - 			},
 - 			tabsClick(item) {
 - 				this.currentCityTabIndex = item.index
 - 				
 - 				if (item.value) {
 - 					// 使用城市ID作为筛选条件
 - 					this.queryParams.cityId = item.value
 - 					delete this.queryParams.className // 清除原有的分类参数
 - 				} else {
 - 					// 选择"全部"时清除城市筛选
 - 					delete this.queryParams.cityId
 - 					delete this.queryParams.className
 - 				}
 - 				this.refreshList()
 - 			},
 - 			
 - 		}
 - 	}
 - </script>
 - 
 - <style scoped lang="scss">
 - 	
 - 	.page{
 - 		.swipe{
 - 			overflow: hidden;
 - 			border-radius: 20rpx;
 - 			margin: 20rpx;
 - 		}
 - 		.notice{
 - 			padding: 20rpx;
 - 		}
 - 		.productList{
 - 			padding: 0 20rpx;
 - 		}
 - 		
 - 		// 城市分类容器样式
 - 		.city-tabs-container {
 - 			background-color: #fff;
 - 			border-bottom: 1rpx solid #eee;
 - 			padding: 0 20rpx;
 - 		}
 - 	}
 - 	
 - 	
 - // $show-lines: 1;
 - 	// @import '@/uni_modules/uv-ui-tools/libs/css/variable.scss';
 - 
 - 	// .waterfall-item {
 - 	// 	overflow: hidden;
 - 	// 	margin-top: 10px;
 - 	// 	border-radius: 6px;
 - 	// }
 - 
 - 	// .waterfall-item__ft {
 - 	// 	padding: 20rpx;
 - 	// 	background: #fff;
 - 
 - 	// 	&__title {
 - 	// 		margin-bottom: 10rpx;
 - 	// 		line-height: 48rpx;
 - 	// 		font-weight: 700;
 - 
 - 	// 		.value {
 - 	// 			font-size: 32rpx;
 - 	// 			color: #303133;
 - 	// 		}
 - 	// 	}
 - 
 - 	// 	&__desc .value {
 - 	// 		font-size: 28rpx;
 - 	// 		color: #606266;
 - 	// 	}
 - 
 - 	// 	&__btn {
 - 	// 		padding: 10px 0;
 - 	// 	}
 - 	// }
 - 	
 - 	// .waterfall-item__ft__title{
 - 	// 	font-size: 28rpx;
 - 	// }
 - 	
 - 	// .price{
 - 	// 	color: #f40;
 - 	// }
 - 	// .oldPrice{
 - 	// 	color: #777;
 - 	// 	font-size: 22rpx;
 - 	// 	text-decoration: underline;
 - 	// }
 - </style>
 
 
  |