feat: 优化优惠券使用跳转
							parent
							
								
									9c03205c9f
								
							
						
					
					
						commit
						bbe315fb45
					
				|  | @ -2,28 +2,63 @@ | |||
|   <view class="b-content"> | ||||
|     <view class="navbar"> | ||||
|       <!-- 循环出头部tab栏 --> | ||||
|       <view v-for="(item, index) in navList" :key="index" class="nav-item" @click="handleTabClick(index)"><text | ||||
|           :class="{ current: tabCurrentIndex === index }">{{ | ||||
|       <view | ||||
|         v-for="(item, index) in navList" | ||||
|         :key="index" | ||||
|         class="nav-item" | ||||
|         @click="handleTabClick(index)" | ||||
|         ><text :class="{ current: tabCurrentIndex === index }">{{ | ||||
|           item.text | ||||
|         }}</text></view> | ||||
|         }}</text></view | ||||
|       > | ||||
|     </view> | ||||
|     <swiper :current="tabCurrentIndex" class="swiper-box" duration="300" @change="changeTab"> | ||||
|       <swiper-item class="tab-content" v-for="(navItem, navIndex) in navList" :key="navIndex"> | ||||
|         <scroll-view class="list-scroll-content" scroll-y @scrolltolower="loadData"> | ||||
|     <swiper | ||||
|       :current="tabCurrentIndex" | ||||
|       class="swiper-box" | ||||
|       duration="300" | ||||
|       @change="changeTab" | ||||
|     > | ||||
|       <swiper-item | ||||
|         class="tab-content" | ||||
|         v-for="(navItem, navIndex) in navList" | ||||
|         :key="navIndex" | ||||
|       > | ||||
|         <scroll-view | ||||
|           class="list-scroll-content" | ||||
|           scroll-y | ||||
|           @scrolltolower="loadData" | ||||
|         > | ||||
|           <!-- 空白页 --> | ||||
|           <u-empty mode="coupon" text="暂无优惠券了" v-if="navItem.wheterEmpty"></u-empty> | ||||
|           <u-empty | ||||
|             mode="coupon" | ||||
|             text="暂无优惠券了" | ||||
|             v-if="navItem.wheterEmpty" | ||||
|           ></u-empty> | ||||
| 
 | ||||
|           <!-- 数据 --> | ||||
|           <view v-if="navItem.dataList && coupon" class="coupon-item" :class="{ 'coupon-used': navIndex != 0 }" | ||||
|             v-for="(coupon, index) in navItem.dataList" :key="index"> | ||||
|           <view | ||||
|             v-if="navItem.dataList && coupon" | ||||
|             class="coupon-item" | ||||
|             :class="{ 'coupon-used': navIndex != 0 }" | ||||
|             v-for="(coupon, index) in navItem.dataList" | ||||
|             :key="index" | ||||
|           > | ||||
|             <view class="left"> | ||||
|               <view class="wave-line"> | ||||
|                 <view class="wave" v-for="(item, index) in 12" :key="index"></view> | ||||
|                 <view | ||||
|                   class="wave" | ||||
|                   v-for="(item, index) in 12" | ||||
|                   :key="index" | ||||
|                 ></view> | ||||
|               </view> | ||||
|               <view class="message"> | ||||
|                 <view class="price" v-if="coupon.couponType == 'DISCOUNT'">{{ coupon.discount }}折</view> | ||||
|                 <view class="price" v-if="coupon.couponType == 'DISCOUNT'" | ||||
|                   >{{ coupon.discount }}折</view | ||||
|                 > | ||||
|                 <view class="price" v-else>{{ coupon.price }}元</view> | ||||
|                 <view class="sub-price">满{{ coupon.consumeThreshold | unitPrice }}可用</view> | ||||
|                 <view class="sub-price" | ||||
|                   >满{{ coupon.consumeThreshold | unitPrice }}可用</view | ||||
|                 > | ||||
|               </view> | ||||
|               <view class="circle circle-top"></view> | ||||
|               <view class="circle circle-bottom"></view> | ||||
|  | @ -31,27 +66,47 @@ | |||
|             <view class="right" v-if="coupon"> | ||||
|               <view class="content"> | ||||
|                 <view class="title-1">{{ coupon.title }}</view> | ||||
|                 <view class="title-2">使用平台:{{ | ||||
|                     coupon.scopeType == 'ALL' && coupon.storeId == '0' | ||||
|                 <view class="title-2" | ||||
|                   >使用平台:{{ | ||||
|                     coupon.scopeType == "ALL" && coupon.storeId == "0" | ||||
|                       ? "全平台" | ||||
|                       : coupon.scopeType == "PORTION_CATEGORY" | ||||
|                       ? "仅限品类" | ||||
|                       : coupon.storeName == 'platform' ? '全平台' :coupon.storeName+'' | ||||
|                   }}使用</view> | ||||
|                 <view v-if="coupon.endTime">{{ | ||||
|                   coupon.endTime | ||||
|                   }}</view> | ||||
|                 <view @click="couponDetail(coupon)">详细说明 | ||||
|                   <u-icon style="float: right; margin-top: 10rpx" name="arrow-right"></u-icon> | ||||
|                       : coupon.storeName == "platform" | ||||
|                       ? "全平台" | ||||
|                       : coupon.storeName + "" | ||||
|                   }}使用</view | ||||
|                 > | ||||
|                 <view v-if="coupon.endTime">{{ coupon.endTime }}</view> | ||||
|                 <view @click="couponDetail(coupon)" | ||||
|                   >详细说明 | ||||
|                   <u-icon | ||||
|                     style="float: right; margin-top: 10rpx" | ||||
|                     name="arrow-right" | ||||
|                   ></u-icon> | ||||
|                 </view> | ||||
|               </view> | ||||
|               <view class="jiao-1" v-if="navIndex == 0"> | ||||
|                 <text class="text-1">新到</text> | ||||
|                 <text class="text-2" v-if="coupon.used_status == 1">将过期</text> | ||||
|                 <text class="text-2" v-if="coupon.used_status == 1" | ||||
|                   >将过期</text | ||||
|                 > | ||||
|               </view> | ||||
|               <image class="no-icon" v-if="navIndex == 1" src="@/static/img/used.png"></image> | ||||
|               <image class="no-icon" v-if="navIndex == 2" src="@/static/img/overdue.png"></image> | ||||
|               <view class="receive" v-if="navIndex == 0" @click="useItNow(coupon)"> | ||||
|               <image | ||||
|                 class="no-icon" | ||||
|                 v-if="navIndex == 1" | ||||
|                 src="@/static/img/used.png" | ||||
|               ></image> | ||||
|               <image | ||||
|                 class="no-icon" | ||||
|                 v-if="navIndex == 2" | ||||
|                 src="@/static/img/overdue.png" | ||||
|               ></image> | ||||
|               <view | ||||
|                 class="receive" | ||||
|                 v-if="navIndex == 0" | ||||
|                 @click="useItNow(coupon)" | ||||
|               > | ||||
|                 <text>立即</text><br /> | ||||
|                 <text>使用</text> | ||||
|               </view> | ||||
|  | @ -116,7 +171,7 @@ export default { | |||
|   }, | ||||
| 
 | ||||
|   onShow() { | ||||
|     this.navList[this.tabCurrentIndex].params.pageNumber = 1 | ||||
|     this.navList[this.tabCurrentIndex].params.pageNumber = 1; | ||||
|     this.navList[this.tabCurrentIndex].dataList = []; | ||||
|     this.getData(); | ||||
|   }, | ||||
|  | @ -188,15 +243,9 @@ export default { | |||
|      * 立即使用优惠券 | ||||
|      */ | ||||
|     useItNow(item) { | ||||
|       if (item.storeId && item.storeId!='0') { | ||||
|       uni.navigateTo({ | ||||
|           url: `/pages/product/shopPage?id=${item.storeId}`, | ||||
|         url: `/pages/navigation/search/searchPage?promotionsId=${item.couponId}&promotionType=COUPON`, | ||||
|       }); | ||||
|       } else { | ||||
|         uni.switchTab({ | ||||
|           url: "/pages/navigation/search/searchPage", | ||||
|         }); | ||||
|       } | ||||
|     }, | ||||
| 
 | ||||
|     /** | ||||
|  |  | |||
|  | @ -1,39 +1,40 @@ | |||
| <template> | ||||
| 	<view class="content"> | ||||
| 		<u-navbar :background="navObj" :is-back="false"> | ||||
|       <mSearch ref="mSearch" class="mSearch-input-box" @clickLeft="back" :mode="2" :placeholder="defaultKeyword" | ||||
|         @search="doSearch(false)" @confirm="doSearch(false)" @SwitchType="doSearchSwitch()" v-model="keyword" | ||||
|         :isFocusVal="!isShowSeachGoods"></mSearch> | ||||
| 			<mSearch | ||||
| 				ref="mSearch" | ||||
| 				class="mSearch-input-box" | ||||
| 				@clickLeft="back" | ||||
| 				:mode="2" | ||||
| 				:placeholder="defaultKeyword" | ||||
| 				@search="doSearch(false)" | ||||
| 				@confirm="doSearch(false)" | ||||
| 				@SwitchType="doSearchSwitch()" | ||||
| 				v-model="keyword" | ||||
| 				:isFocusVal="!isShowSeachGoods" | ||||
| 			></mSearch> | ||||
| 		</u-navbar> | ||||
| 
 | ||||
| 		<view class="search-keyword" v-if="!isShowSeachGoods"> | ||||
| 			<scroll-view class="keyword-list-box" v-show="isShowKeywordList" scroll-y> | ||||
| 				<block v-for="(row, index) in keywordList" :key="index"> | ||||
| 					<view class="keyword-entry" hover-class="keyword-entry-tap"> | ||||
|             <view class="keyword-text" @tap.stop="doSearch(keywordList[index].words)"> | ||||
|               <rich-text :nodes="row.words"></rich-text> | ||||
|             </view> | ||||
| 						<view class="keyword-text" @tap.stop="doSearch(keywordList[index].words)"><rich-text :nodes="row.words"></rich-text></view> | ||||
| 					</view> | ||||
| 				</block> | ||||
| 			</scroll-view> | ||||
| 			<div class="keyword-box" v-show="!isShowKeywordList"> | ||||
| 				<view class="keyword-block add1"> | ||||
|           <view class="keyword-list-header"> | ||||
|             <view class="u-tips">热门搜索</view> | ||||
|           </view> | ||||
| 					<view class="keyword-list-header"><view class="u-tips">热门搜索</view></view> | ||||
| 					<view class="keyword keywordBox"> | ||||
|             <view class="wes" v-for="(keyword, index) in hotKeywordList" @tap="doSearch(keyword)" :key="index"> | ||||
|               {{ keyword }}</view> | ||||
| 						<view class="wes" v-for="(keyword, index) in hotKeywordList" @tap="doSearch(keyword)" :key="index">{{ keyword }}</view> | ||||
| 					</view> | ||||
| 				</view> | ||||
| 				<view class="keyword-block" v-if="oldKeywordList.length > 0"> | ||||
|           <view class="keyword-list-header"> | ||||
|             <view class="u-tips">搜索历史</view> | ||||
|           </view> | ||||
| 					<view class="keyword-list-header"><view class="u-tips">搜索历史</view></view> | ||||
| 					<div class="oldKeyList"> | ||||
|             <div class="oldKeyItem" v-if="keyword" v-for="(keyword, index) in oldKeywordList" :key="index" | ||||
|               @click="doSearch(keyword)"> | ||||
|               <span>{{ keyword }} </span> | ||||
| 						<div class="oldKeyItem" v-if="keyword" v-for="(keyword, index) in oldKeywordList" :key="index" @click="doSearch(keyword)"> | ||||
| 							<span>{{ keyword }}</span> | ||||
| 						</div> | ||||
| 
 | ||||
| 						<div @click="showMore" v-if="oldKeywordIndex > loadIndex" class="oldKeyItem">展示更多</div> | ||||
|  | @ -51,13 +52,11 @@ | |||
| 					<text>销量</text> | ||||
| 					<view class="p-box"> | ||||
| 						<view class="index-nav-arrow"> | ||||
|               <image class="img" src="/static/index/arrow-up-1.png" | ||||
|                 v-if="params.sort === 'buyCount' && params.order === 'asc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-up-1.png" v-if="params.sort === 'buyCount' && params.order === 'asc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-up.png" v-else mode="aspectFit"></image> | ||||
| 						</view> | ||||
| 						<view class="index-nav-arrow"> | ||||
|               <image class="img" src="/static/index/arrow-down.png" | ||||
|                 v-if="params.sort === 'buyCount' && params.order === 'desc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-down.png" v-if="params.sort === 'buyCount' && params.order === 'desc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-down-1.png" v-else mode="aspectFit"></image> | ||||
| 						</view> | ||||
| 					</view> | ||||
|  | @ -66,13 +65,11 @@ | |||
| 					<text>价格</text> | ||||
| 					<view class="p-box"> | ||||
| 						<view class="index-nav-arrow"> | ||||
|               <image class="img" src="/static/index/arrow-up-1.png" | ||||
|                 v-if="params.sort === 'price' && params.order === 'asc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-up-1.png" v-if="params.sort === 'price' && params.order === 'asc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-up.png" v-else mode="aspectFit"></image> | ||||
| 						</view> | ||||
| 						<view class="index-nav-arrow"> | ||||
|               <image class="img" src="/static/index/arrow-down.png" | ||||
|                 v-if="params.sort === 'price' && params.order === 'desc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-down.png" v-if="params.sort === 'price' && params.order === 'desc'" mode="aspectFit"></image> | ||||
| 							<image class="img" src="/static/index/arrow-down-1.png" v-else mode="aspectFit"></image> | ||||
| 						</view> | ||||
| 					</view> | ||||
|  | @ -81,20 +78,32 @@ | |||
| 			</view> | ||||
| 			<!-- 一行一个商品展示 --> | ||||
| 			<div v-if="isSWitch"> | ||||
|         <scroll-view :style="{ height: goodsHeight }" enableBackToTop="true" lower-threshold="250" | ||||
|           @scrolltolower="loadmore()" scroll-with-animation scroll-y class="scoll-page"> | ||||
|           <goodsList :res='goodsList' type='oneColumns' :keyword='keyword' /> | ||||
| 				<scroll-view | ||||
| 					:style="{ height: goodsHeight }" | ||||
| 					enableBackToTop="true" | ||||
| 					lower-threshold="250" | ||||
| 					@scrolltolower="loadmore()" | ||||
| 					scroll-with-animation | ||||
| 					scroll-y | ||||
| 					class="scoll-page" | ||||
| 				> | ||||
| 					<goodsList :res="goodsList" type="oneColumns" :keyword="keyword" /> | ||||
| 					<uni-load-more :status="loadingType" @loadmore="loadmore()"></uni-load-more> | ||||
| 				</scroll-view> | ||||
| 			</div> | ||||
| 			<!-- 一行两个商品展示 --> | ||||
|       <div v-if=" | ||||
|           !isSWitch && | ||||
|           !(goodsList == [] || goodsList == '' || goodsList == null) | ||||
|         "> | ||||
|         <scroll-view :style="{ height: goodsHeight }" scroll-anchoring enableBackToTop="true" | ||||
|           @scrolltolower="loadmore()" scroll-with-animation scroll-y lower-threshold="250" class="scoll-page"> | ||||
| 					<goodsList :res='goodsList' :keyword='keyword' /> | ||||
| 			<div v-if="!isSWitch && !(goodsList == [] || goodsList == '' || goodsList == null)"> | ||||
| 				<scroll-view | ||||
| 					:style="{ height: goodsHeight }" | ||||
| 					scroll-anchoring | ||||
| 					enableBackToTop="true" | ||||
| 					@scrolltolower="loadmore()" | ||||
| 					scroll-with-animation | ||||
| 					scroll-y | ||||
| 					lower-threshold="250" | ||||
| 					class="scoll-page" | ||||
| 				> | ||||
| 					<goodsList :res="goodsList" :keyword="keyword" /> | ||||
| 					<uni-load-more :status="loadingType"></uni-load-more> | ||||
| 				</scroll-view> | ||||
| 			</div> | ||||
|  | @ -105,13 +114,15 @@ | |||
| 			<view class="sort-box  "> | ||||
| 				<view class="sort-list"> | ||||
| 					<view class="sort-item"> | ||||
|             <view class="sort-title"> 品牌 </view> | ||||
| 						<view class="sort-title">品牌</view> | ||||
| 						<view class="flex" v-if="sortData.brands"> | ||||
|               <view class="sort-brand-item" :key="brandsIndex" v-for="(brand, brandsIndex) in sortData.brands" | ||||
|                 @click="handleSort(brand, brandsIndex, 'brand')"> | ||||
|                 <view class="sort-radius" :class="{ | ||||
|                     'sort-active': brand.__selected, | ||||
|                   }"> | ||||
| 							<view class="sort-brand-item" :key="brandsIndex" v-for="(brand, brandsIndex) in sortData.brands" @click="handleSort(brand, brandsIndex, 'brand')"> | ||||
| 								<view | ||||
| 									class="sort-radius" | ||||
| 									:class="{ | ||||
| 										'sort-active': brand.__selected | ||||
| 									}" | ||||
| 								> | ||||
| 									{{ brand.name }} | ||||
| 								</view> | ||||
| 							</view> | ||||
|  | @ -119,14 +130,20 @@ | |||
| 						<!-- <u-empty v-else text="暂无品牌" mode="list"></u-empty> --> | ||||
| 					</view> | ||||
| 					<view class="sort-item"> | ||||
|             <view class="sort-title"> 全部分类 </view> | ||||
| 						<view class="sort-title">全部分类</view> | ||||
| 						<view class="flex" style="flex-wrap: wrap;" v-if="sortData.categories"> | ||||
|               <view class="sort-brand-item" :key="categoriesIndex" | ||||
| 							<view | ||||
| 								class="sort-brand-item" | ||||
| 								:key="categoriesIndex" | ||||
| 								v-for="(categoryId, categoriesIndex) in sortData.categories" | ||||
|                 @click="handleSort(categoryId, categoriesIndex, 'categoryId')"> | ||||
|                 <view class="sort-radius" :class="{ | ||||
|                     'sort-active': categoryId.__selected, | ||||
|                   }"> | ||||
| 								@click="handleSort(categoryId, categoriesIndex, 'categoryId')" | ||||
| 							> | ||||
| 								<view | ||||
| 									class="sort-radius" | ||||
| 									:class="{ | ||||
| 										'sort-active': categoryId.__selected | ||||
| 									}" | ||||
| 								> | ||||
| 									{{ categoryId.name }} | ||||
| 								</view> | ||||
| 							</view> | ||||
|  | @ -136,18 +153,14 @@ | |||
| 				</view> | ||||
| 				<view class="sort-list"> | ||||
| 					<view class="sort-item"> | ||||
|             <view class="sort-title"> 价格区间 </view> | ||||
| 						<view class="sort-title">价格区间</view> | ||||
| 						<view style="display:flex;  margin-top:20rpx;    align-items: center;"> | ||||
| 							<view class="sort-brand-item uinput"> | ||||
|                 <view class="sort-radius"> | ||||
|                   <u-input v-model="minPrice" type="number" placeholder="最低价" input-align="center" /> | ||||
|                 </view> | ||||
| 								<view class="sort-radius"><u-input v-model="minPrice" type="number" placeholder="最低价" input-align="center" /></view> | ||||
| 							</view> | ||||
| 							<view>-</view> | ||||
| 							<view class="sort-brand-item uinput"> | ||||
|                 <view class="sort-radius"> | ||||
|                   <u-input v-model="maxPrice" type="number" placeholder="最高价" input-align="center" /> | ||||
|                 </view> | ||||
| 								<view class="sort-radius"><u-input v-model="maxPrice" type="number" placeholder="最高价" input-align="center" /></view> | ||||
| 							</view> | ||||
| 						</view> | ||||
| 					</view> | ||||
|  | @ -155,13 +168,15 @@ | |||
| 
 | ||||
| 				<view class="sort-list" v-if="sortData.paramOptions"> | ||||
| 					<view class="sort-item" :key="paramIndex" v-for="(param, paramIndex) in sortData.paramOptions"> | ||||
|             <view class="sort-title"> {{ param.key }} </view> | ||||
| 						<view class="sort-title">{{ param.key }}</view> | ||||
| 						<view class="flex" style="flex-warp:warp" v-if="param.values"> | ||||
|               <view class="sort-brand-item" :key="i" v-for="(value, i) in param.values" | ||||
|                 @click="handleSort(value, i, 'prop', param)"> | ||||
|                 <view class="sort-radius" :class="{ | ||||
|                     'sort-active': value.__selected, | ||||
|                   }"> | ||||
| 							<view class="sort-brand-item" :key="i" v-for="(value, i) in param.values" @click="handleSort(value, i, 'prop', param)"> | ||||
| 								<view | ||||
| 									class="sort-radius" | ||||
| 									:class="{ | ||||
| 										'sort-active': value.__selected | ||||
| 									}" | ||||
| 								> | ||||
| 									{{ value.title }} | ||||
| 								</view> | ||||
| 							</view> | ||||
|  | @ -177,11 +192,7 @@ | |||
| 			</view> | ||||
| 		</u-popup> | ||||
| 		<div class="empty" v-if="empty"> | ||||
| 		<view> | ||||
| 			<image style="width: 320rpx; height: 240rpx" src="/static/nodata.png"> | ||||
| 	 | ||||
| 			</image> | ||||
| 		</view> | ||||
| 			<view><image style="width: 320rpx; height: 240rpx" src="/static/nodata.png"></image></view> | ||||
| 			<view> | ||||
| 				<p>没有找到相关的商品信息</p> | ||||
| 				<p>请换一个关键词试试吧</p> | ||||
|  | @ -192,49 +203,49 @@ | |||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import { getGoodsList, getGoodsRelated } from "@/api/goods.js"; | ||||
| import goodsList from '@/components/m-goods-list/list.vue' | ||||
| import { getHotKeywords } from "@/api/home.js"; | ||||
| import mSearch from "@/components/m-search-revision/m-search-revision.vue"; | ||||
| import storage from "@/utils/storage"; | ||||
| import { getGoodsList, getGoodsRelated } from '@/api/goods.js'; | ||||
| import goodsList from '@/components/m-goods-list/list.vue'; | ||||
| import { getHotKeywords } from '@/api/home.js'; | ||||
| import mSearch from '@/components/m-search-revision/m-search-revision.vue'; | ||||
| import storage from '@/utils/storage'; | ||||
| export default { | ||||
| 	data() { | ||||
| 		return { | ||||
| 	  empty:false, | ||||
| 			empty: false, | ||||
| 			scrollTop: 0, | ||||
| 			loadIndex: 10, | ||||
| 			oldKeywordIndex: 0, | ||||
| 			selectedWay: { | ||||
| 				brand: [], | ||||
| 				categoryId: [], | ||||
|         prop: [], | ||||
| 				prop: [] | ||||
| 			}, | ||||
| 
 | ||||
| 			sortPopup: false, //筛选的开关 | ||||
| 			navObj: { | ||||
|         background: "#fff", | ||||
| 				background: '#fff' | ||||
| 			}, | ||||
| 			typeSortData: { | ||||
|         type: "", | ||||
|         index: "", | ||||
| 				type: '', | ||||
| 				index: '' | ||||
| 			}, | ||||
|       goodsHeight: "", | ||||
|       defaultKeyword: "", | ||||
|       keyword: "", | ||||
| 			goodsHeight: '', | ||||
| 			defaultKeyword: '', | ||||
| 			keyword: '', | ||||
| 			oldKeywordList: [], | ||||
| 			hotKeywordList: [], | ||||
| 			keywordList: [], | ||||
| 			goodsList: [], | ||||
| 
 | ||||
| 			cateMaskState: 0, //分类面板展开状态 | ||||
|       loadingType: "more", //加载更多状态 | ||||
| 			loadingType: 'more', //加载更多状态 | ||||
| 			filterIndex: 0, | ||||
| 			cateId: 0, //已选三级分类id | ||||
| 			priceOrder: 0, //1 价格从低到高 2价格从高到低 | ||||
| 			cateList: [], | ||||
| 			isShowSeachGoods: false, | ||||
| 			isShowKeywordList: false, | ||||
|       sortData: "", | ||||
| 			sortData: '', | ||||
| 			isSWitch: false, | ||||
| 
 | ||||
| 			params: { | ||||
|  | @ -242,10 +253,10 @@ export default { | |||
| 				pageSize: 10, | ||||
| 				// sort: 'grade_asc', | ||||
| 
 | ||||
|         keyword: "", | ||||
| 				keyword: '' | ||||
| 			}, | ||||
|       minPrice: "", | ||||
|       maxPrice: "", | ||||
| 			minPrice: '', | ||||
| 			maxPrice: '', | ||||
| 			sortParams: { | ||||
| 				pageNumber: 1, | ||||
| 				pageSize: 10, | ||||
|  | @ -253,10 +264,10 @@ export default { | |||
| 				// price: "", //价格,示例值(10_30) | ||||
| 				// prop: "", //属性:参数名_参数值@参数名_参数值,示例值(屏幕类型_LED@屏幕尺寸_15英寸) | ||||
| 				// brandId:"", //品牌,可以多选 品牌Id@品牌Id@品牌Id | ||||
|         categoryId: "", | ||||
| 				categoryId: '' | ||||
| 			}, | ||||
| 
 | ||||
|       routerVal: "", | ||||
| 			routerVal: '' | ||||
| 		}; | ||||
| 	}, | ||||
| 
 | ||||
|  | @ -276,9 +287,9 @@ export default { | |||
| 			this.params.categoryId = this.routerVal.category; | ||||
| 			this.sortParams.categoryId = this.routerVal.category; | ||||
| 			this.isShowSeachGoods = true; | ||||
|       this.$nextTick(()=>{ | ||||
| 			this.$nextTick(() => { | ||||
| 				this.$refs.mSearch.isShowSeachGoods = true; | ||||
|       }) | ||||
| 			}); | ||||
| 		} | ||||
| 		if (this.routerVal.keyword) { | ||||
| 			this.params.keyword = this.routerVal.keyword; | ||||
|  | @ -288,6 +299,14 @@ export default { | |||
| 			this.params.storeId = this.routerVal.storeId; | ||||
| 			this.isShowSeachGoods = true; | ||||
| 		} | ||||
| 		if (this.routerVal.promotionType) { | ||||
| 			this.params.promotionType = this.routerVal.promotionType; | ||||
| 			this.isShowSeachGoods = true; | ||||
| 		} | ||||
| 		if (this.routerVal.promotionsId) { | ||||
| 			this.params.promotionsId = this.routerVal.promotionsId; | ||||
| 			this.isShowSeachGoods = true; | ||||
| 		} | ||||
| 		this.loadData(); | ||||
| 	}, | ||||
| 	components: { | ||||
|  | @ -304,15 +323,14 @@ export default { | |||
| 					this.defaultKeyword = val; | ||||
| 				} | ||||
| 			} else { | ||||
|         this.defaultKeyword = "请输入搜索商品"; | ||||
| 				this.defaultKeyword = '请输入搜索商品'; | ||||
| 			} | ||||
| 		}, | ||||
| 		sortPopup(val) { | ||||
| 			if (val) { | ||||
| 				this.selectedWay = { brand: [], categoryId: [], prop: [] }; | ||||
|         console.log(this.selectedWay); | ||||
| 			} | ||||
|     }, | ||||
| 		} | ||||
| 	}, | ||||
| 
 | ||||
| 	onReachBottom() { | ||||
|  | @ -327,34 +345,30 @@ export default { | |||
| 		let navHeight = 0; | ||||
| 
 | ||||
| 		uni.getSystemInfo({ | ||||
|       success: function (res) { | ||||
| 			success: function(res) { | ||||
| 				// res - 各种参数 | ||||
| 
 | ||||
|         let top = uni.createSelectorQuery().select(".u-navbar"); | ||||
|         top | ||||
|           .boundingClientRect(function (data) { | ||||
| 				let top = uni.createSelectorQuery().select('.u-navbar'); | ||||
| 				top.boundingClientRect(function(data) { | ||||
| 					if (data && data.height) { | ||||
| 						//data - 各种参数 | ||||
| 						topHeight = data.height; // 获取元素宽度 | ||||
| 					} | ||||
|           }) | ||||
|           .exec(); | ||||
|         let nav = uni.createSelectorQuery().select(".navbar"); | ||||
|         nav | ||||
|           .boundingClientRect(function (data) { | ||||
| 				}).exec(); | ||||
| 				let nav = uni.createSelectorQuery().select('.navbar'); | ||||
| 				nav.boundingClientRect(function(data) { | ||||
| 					if (data && data.height) { | ||||
| 						//data - 各种参数 | ||||
| 						navHeight = data.height; // 获取元素宽度 | ||||
| 					} | ||||
|           }) | ||||
|           .exec(); | ||||
|       }, | ||||
| 				}).exec(); | ||||
| 			} | ||||
| 		}); | ||||
| 		this.goodsHeight = windowHeight - navHeight - topHeight; | ||||
| 		// #ifdef APP-PLUS | ||||
| 		this.goodsHeight = this.goodsHeight - 100; | ||||
| 		// #endif | ||||
|     this.goodsHeight += "px"; | ||||
| 		this.goodsHeight += 'px'; | ||||
| 	}, | ||||
| 
 | ||||
| 	methods: { | ||||
|  | @ -362,9 +376,9 @@ export default { | |||
| 		getPromotion(item) { | ||||
| 			if (item.promotionMap) { | ||||
| 				let array = []; | ||||
|         Object.keys(item.promotionMap).forEach((child) => { | ||||
|           if (!array.includes(child.split("-")[0])) { | ||||
|             array.push(child.split("-")[0]); | ||||
| 				Object.keys(item.promotionMap).forEach(child => { | ||||
| 					if (!array.includes(child.split('-')[0])) { | ||||
| 						array.push(child.split('-')[0]); | ||||
| 					} | ||||
| 				}); | ||||
| 
 | ||||
|  | @ -386,18 +400,17 @@ export default { | |||
| 			} | ||||
| 
 | ||||
| 			// 如果选中品牌 赋值 | ||||
|       this.selectedWay["brand"].forEach((item) => { | ||||
| 			this.selectedWay['brand'].forEach(item => { | ||||
| 				if (item.__selected) { | ||||
| 					this.params.brandId.push(item.value); | ||||
| 				} | ||||
| 			}); | ||||
| 
 | ||||
|       this.params.brandId = this.params.brandId.join("@") || ""; | ||||
| 			this.params.brandId = this.params.brandId.join('@') || ''; | ||||
| 
 | ||||
|       console.log(this.params.brandId); | ||||
| 			// 处理分类 (单选) | ||||
|       if (this.selectedWay["categoryId"][0]) { | ||||
|         this.params.categoryId = this.selectedWay["categoryId"][0].value; | ||||
| 			if (this.selectedWay['categoryId'][0]) { | ||||
| 				this.params.categoryId = this.selectedWay['categoryId'][0].value; | ||||
| 			} | ||||
| 			if (!this.params.prop) { | ||||
| 				this.params.prop = []; | ||||
|  | @ -405,12 +418,12 @@ export default { | |||
| 				this.params.prop = [this.params.prop]; | ||||
| 			} | ||||
| 
 | ||||
|       this.selectedWay["prop"].forEach((item) => { | ||||
| 			this.selectedWay['prop'].forEach(item => { | ||||
| 				if (item.__selected) { | ||||
| 					this.params.prop.push(`${item.parent}_${item.title}`); | ||||
| 				} | ||||
| 			}); | ||||
|       this.params.prop = this.params.prop.join("@"); | ||||
| 			this.params.prop = this.params.prop.join('@'); | ||||
| 			// 处理价格 | ||||
| 			if (this.minPrice || this.maxPrice) { | ||||
| 				this.params.price = `${this.minPrice}_${this.maxPrice}`; | ||||
|  | @ -423,7 +436,6 @@ export default { | |||
| 			this.params.pageNumber = 1; | ||||
| 			this.sortParams = this.params; | ||||
| 
 | ||||
|       | ||||
| 			this.loadData(); | ||||
| 			this.sortPopup = false; | ||||
| 		}, | ||||
|  | @ -433,16 +445,16 @@ export default { | |||
| 			this.sortParams = { | ||||
| 				pageNumber: 1, | ||||
| 				pageSize: 10, | ||||
|         categoryId: this.routerVal.category || "", | ||||
| 				categoryId: this.routerVal.category || '' | ||||
| 			}; | ||||
| 			this.sortPopup = false; | ||||
| 			this.initSortGoods(); | ||||
|       this.minPrice = ""; | ||||
|       this.maxPrice = ""; | ||||
| 			this.minPrice = ''; | ||||
| 			this.maxPrice = ''; | ||||
| 			this.params = { | ||||
| 				pageNumber: 1, | ||||
| 				pageSize: 10, | ||||
|         categoryId: this.routerVal.category || "", | ||||
| 				categoryId: this.routerVal.category || '' | ||||
| 			}; | ||||
| 			this.goodsList = []; | ||||
| 			this.loadData(); | ||||
|  | @ -450,12 +462,12 @@ export default { | |||
| 
 | ||||
| 		// 点击筛选的内容 | ||||
| 		handleSort(val, index, type, parent) { | ||||
|       if (type == "prop") { | ||||
| 			if (type == 'prop') { | ||||
| 				val.parent = parent.key; | ||||
| 			} | ||||
| 			this.selectedWay[type].push(val); | ||||
|       if (type == "categoryId") { | ||||
|         this.sortData.categories.forEach((item) => { | ||||
| 			if (type == 'categoryId') { | ||||
| 				this.sortData.categories.forEach(item => { | ||||
| 					item.__selected = false; | ||||
| 				}); | ||||
| 				val.__selected = true; | ||||
|  | @ -475,19 +487,19 @@ export default { | |||
| 		}, | ||||
| 		back() { | ||||
| 			uni.navigateBack({ | ||||
|         delta: 1, | ||||
| 				delta: 1 | ||||
| 			}); | ||||
| 		}, | ||||
| 		// 跳转到商品详情 | ||||
| 		navigateToDetailPage(item) { | ||||
| 			uni.navigateTo({ | ||||
|         url: `/pages/product/goods?id=${item.content.id}&goodsId=${item.content.goodsId}`, | ||||
| 				url: `/pages/product/goods?id=${item.content.id}&goodsId=${item.content.goodsId}` | ||||
| 			}); | ||||
| 		}, | ||||
| 		// 跳转地址 | ||||
| 		navigateToStoreDetailPage(item) { | ||||
| 			uni.navigateTo({ | ||||
|         url: `/pages/product/shopPage?id=${item.content.storeId}`, | ||||
| 				url: `/pages/product/shopPage?id=${item.content.storeId}` | ||||
| 			}); | ||||
| 		}, | ||||
| 		loadmore() { | ||||
|  | @ -495,17 +507,17 @@ export default { | |||
| 			this.loadData(); | ||||
| 		}, | ||||
| 		initSortGoods() { | ||||
|       getGoodsRelated(this.sortParams).then((res) => { | ||||
| 			getGoodsRelated(this.sortParams).then(res => { | ||||
| 				if (res.data.success) { | ||||
| 					for (let item of Object.keys(res.data.result)) { | ||||
|             res.data.result[item].forEach((child) => { | ||||
| 						res.data.result[item].forEach(child => { | ||||
| 							child.__selected = false; | ||||
| 
 | ||||
| 							// 循环出和品牌分类一样的数据格式 | ||||
| 							if (child.values) { | ||||
|                 child.values = child.values.map((item) => ({ | ||||
| 								child.values = child.values.map(item => ({ | ||||
| 									title: item, | ||||
|                   __selected: false, | ||||
| 									__selected: false | ||||
| 								})); | ||||
| 							} | ||||
| 						}); | ||||
|  | @ -525,30 +537,28 @@ export default { | |||
| 			this.params.pageSize = 10; | ||||
| 			// this.params.order = "desc"; | ||||
| 			if (this.params.sort == type) { | ||||
|         this.params.order == "asc" | ||||
|           ? (this.params.order = "desc") | ||||
|           : (this.params.order = "asc"); | ||||
| 				this.params.order == 'asc' ? (this.params.order = 'desc') : (this.params.order = 'asc'); | ||||
| 
 | ||||
|         this.$set(this.params, "sort", type); | ||||
| 				this.$set(this.params, 'sort', type); | ||||
| 			} else { | ||||
|         this.params.order = "desc"; | ||||
|         this.$set(this.params, "sort", type); | ||||
| 				this.params.order = 'desc'; | ||||
| 				this.$set(this.params, 'sort', type); | ||||
| 			} | ||||
| 
 | ||||
| 			if (index == 0) { | ||||
|         this.params.sort = "releaseTime"; | ||||
|         this.params.order = "desc"; | ||||
| 				this.params.sort = 'releaseTime'; | ||||
| 				this.params.order = 'desc'; | ||||
| 			} | ||||
| 
 | ||||
| 			this.filterIndex = index; | ||||
| 
 | ||||
| 			uni.pageScrollTo({ | ||||
| 				duration: 300, | ||||
|         scrollTop: 0, | ||||
| 				scrollTop: 0 | ||||
| 			}); | ||||
|       this.loadData("refresh", 1); | ||||
| 			this.loadData('refresh', 1); | ||||
| 			uni.showLoading({ | ||||
|         title: "正在加载", | ||||
| 				title: '正在加载' | ||||
| 			}); | ||||
| 		}, | ||||
| 		//加载默认搜索关键字 | ||||
|  | @ -561,21 +571,21 @@ export default { | |||
| 				// | ||||
| 				this.defaultKeyword = this.hotKeywordList[0]; | ||||
| 			} else { | ||||
|         this.defaultKeyword = "请输入搜索商品"; | ||||
| 				this.defaultKeyword = '请输入搜索商品'; | ||||
| 			} | ||||
| 		}, | ||||
| 		//加载历史搜索,自动读取本地Storage | ||||
| 		loadOldKeyword(index) { | ||||
| 			this.oldKeywordList = []; | ||||
| 			uni.getStorage({ | ||||
|         key: "OldKeys", | ||||
|         success: (res) => { | ||||
| 				key: 'OldKeys', | ||||
| 				success: res => { | ||||
| 					var OldKeys = JSON.parse(res.data); | ||||
| 					this.oldKeywordIndex = OldKeys.length; | ||||
| 					for (let i = 0; i < index; i++) { | ||||
| 						this.oldKeywordList.push(OldKeys[i]); | ||||
| 					} | ||||
|         }, | ||||
| 				} | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
|  | @ -586,27 +596,24 @@ export default { | |||
| 		 */ | ||||
| 		async loadHotKeyword() { | ||||
| 			this.hotKeywordList = []; | ||||
|       if ( | ||||
|         !storage.getHotWords().time || | ||||
|         storage.getHotWords().time <= new Date().getTime() / 1000 | ||||
|       ) { | ||||
| 			if (!storage.getHotWords().time || storage.getHotWords().time <= new Date().getTime() / 1000) { | ||||
| 				// 没有缓存或者第一次进入请求接口保存缓存 | ||||
| 				let res = await getHotKeywords(10); | ||||
| 				let keywords = res.data.result; | ||||
| 
 | ||||
|         keywords.forEach((item) => { | ||||
| 				keywords.forEach(item => { | ||||
| 					this.hotKeywordList.push(item); | ||||
| 				}); | ||||
| 
 | ||||
| 				let hotData = { | ||||
| 					time: new Date().getTime() / 1000 + 30 * 5, | ||||
|           keywords: keywords, | ||||
| 					keywords: keywords | ||||
| 				}; | ||||
| 				storage.setHotWords(hotData); | ||||
| 			} else { | ||||
| 				let keywords = storage.getHotWords().keywords; | ||||
| 
 | ||||
|         keywords.forEach((item) => { | ||||
| 				keywords.forEach(item => { | ||||
| 					this.hotKeywordList.push(item); | ||||
| 				}); | ||||
| 			} | ||||
|  | @ -614,18 +621,18 @@ export default { | |||
| 		}, | ||||
| 		//加载商品 ,带下拉刷新和上滑加载 | ||||
| 		async loadData(type, loading) { | ||||
|       this.loadingType = "loading"; | ||||
|       if (type == "refresh") { | ||||
| 			this.loadingType = 'loading'; | ||||
| 			if (type == 'refresh') { | ||||
| 				this.goodsList = []; | ||||
| 			} | ||||
| 			//没有更多直接返回 #TODO | ||||
| 			let goodsList = await getGoodsList(this.params); | ||||
| 
 | ||||
| 			if (goodsList.data.result.content.length < 10) { | ||||
| 		  this.loadingType = "noMore"; | ||||
| 		  this.empty = true | ||||
| 				this.loadingType = 'noMore'; | ||||
| 				this.empty = true; | ||||
| 			} else { | ||||
| 		  this.empty = false | ||||
| 				this.empty = false; | ||||
| 			} | ||||
| 			this.goodsList.push(...goodsList.data.result.content); | ||||
| 			this.initSortGoods(); | ||||
|  | @ -639,14 +646,11 @@ export default { | |||
| 			for (var i = 0; i < len; i++) { | ||||
| 				var row = keywords[i]; | ||||
| 				//定义高亮#9f9f9f | ||||
|         var html = row[0].replace( | ||||
|           keyword, | ||||
|           "<span style='color: #9f9f9f;'>" + keyword + "</span>" | ||||
|         ); | ||||
|         html = "<div>" + html + "</div>"; | ||||
| 				var html = row[0].replace(keyword, "<span style='color: #9f9f9f;'>" + keyword + '</span>'); | ||||
| 				html = '<div>' + html + '</div>'; | ||||
| 				var tmpObj = { | ||||
| 					keyword: row[0], | ||||
|           htmlStr: html, | ||||
| 					htmlStr: html | ||||
| 				}; | ||||
| 				keywordArr.push(tmpObj); | ||||
| 			} | ||||
|  | @ -659,15 +663,15 @@ export default { | |||
| 		//清除历史搜索 | ||||
| 		oldDelete() { | ||||
| 			uni.showModal({ | ||||
|         content: "确定清除历史搜索记录?", | ||||
|         success: (res) => { | ||||
| 				content: '确定清除历史搜索记录?', | ||||
| 				success: res => { | ||||
| 					if (res.confirm) { | ||||
| 						this.oldKeywordList = []; | ||||
| 						uni.removeStorage({ | ||||
|               key: "OldKeys", | ||||
| 							key: 'OldKeys' | ||||
| 						}); | ||||
| 					} | ||||
|         }, | ||||
| 				} | ||||
| 			}); | ||||
| 		}, | ||||
| 
 | ||||
|  | @ -675,9 +679,9 @@ export default { | |||
| 		doSearchSwitch() { | ||||
| 			this.isSWitch = !this.isSWitch; | ||||
| 			this.isShowSeachGoods = true; | ||||
| 			this.params.pageNumber = 1  | ||||
| 			this.params.pageSize = 10 | ||||
| 			this.loadData("refresh", 1); | ||||
| 			this.params.pageNumber = 1; | ||||
| 			this.params.pageSize = 10; | ||||
| 			this.loadData('refresh', 1); | ||||
| 		}, | ||||
| 
 | ||||
| 		/** | ||||
|  | @ -693,25 +697,25 @@ export default { | |||
| 				 * 第一次搜索如果没有关键词会将热门搜索中第一个热词进行判定 | ||||
| 				 * 如果没有热词则会展示一个空词搜索 | ||||
| 				 */ | ||||
|         keyword = (this.hotKeywordList.length && this.hotKeywordList[0]) || ""; | ||||
| 				keyword = (this.hotKeywordList.length && this.hotKeywordList[0]) || ''; | ||||
| 			} | ||||
|       this.defaultKeyword == "请输入搜索商品" ? (keyword = "") : ""; | ||||
| 			this.defaultKeyword == '请输入搜索商品' ? (keyword = '') : ''; | ||||
| 			// this.keyword = keyword; | ||||
|       keyword ? (this.keyword = keyword) : ""; | ||||
| 			keyword ? (this.keyword = keyword) : ''; | ||||
| 			this.saveKeyword(keyword); //保存为历史 | ||||
| 			this.isShowSeachGoods = true; | ||||
| 			this.$refs.mSearch.isShowSeachGoods = true; | ||||
| 			this.params.keyword = this.keyword; | ||||
| 			this.params.pageNumber = 1; | ||||
|       this.$set(this.sortParams, "keyword", keyword); | ||||
|       this.loadData("refresh", 1); | ||||
| 			this.$set(this.sortParams, 'keyword', keyword); | ||||
| 			this.loadData('refresh', 1); | ||||
| 		}, | ||||
| 		//保存关键字到历史记录 | ||||
| 		saveKeyword(keyword) { | ||||
| 			if (!keyword) return false; | ||||
| 			uni.getStorage({ | ||||
|         key: "OldKeys", | ||||
|         success: (res) => { | ||||
| 				key: 'OldKeys', | ||||
| 				success: res => { | ||||
| 					var OldKeys = JSON.parse(res.data); | ||||
| 					var findIndex = OldKeys.indexOf(keyword); | ||||
| 					if (findIndex == -1) { | ||||
|  | @ -724,24 +728,24 @@ export default { | |||
| 					OldKeys.length > 10 && OldKeys.pop(); | ||||
| 
 | ||||
| 					uni.setStorage({ | ||||
|             key: "OldKeys", | ||||
|             data: JSON.stringify(OldKeys), | ||||
| 						key: 'OldKeys', | ||||
| 						data: JSON.stringify(OldKeys) | ||||
| 					}); | ||||
| 					this.oldKeywordList = OldKeys; //更新历史搜索 | ||||
| 				}, | ||||
|         fail: (e) => { | ||||
| 				fail: e => { | ||||
| 					var OldKeys = [keyword]; | ||||
| 					uni.setStorage({ | ||||
|             key: "OldKeys", | ||||
|             data: JSON.stringify(OldKeys), | ||||
| 						key: 'OldKeys', | ||||
| 						data: JSON.stringify(OldKeys) | ||||
| 					}); | ||||
| 					this.oldKeywordList = OldKeys; //更新历史搜索 | ||||
|         }, | ||||
| 				} | ||||
| 			}); | ||||
|     }, | ||||
|   }, | ||||
| 		} | ||||
| 	} | ||||
| }; | ||||
| </script> | ||||
| <style lang="scss" scoped> | ||||
| @import "./search.scss"; | ||||
| @import './search.scss'; | ||||
| </style> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue