wangguoyu 3 napja
szülő
commit
e737631060
3 módosított fájl, 126 hozzáadás és 303 törlés
  1. 12 0
      api/productMall.js
  2. 113 302
      pages/mall/mallPage.vue
  3. 1 1
      pages/study/index.vue

+ 12 - 0
api/productMall.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+export function getMallist(data = {}) {
+  return request({
+    'url': '/app/card/list',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}

+ 113 - 302
pages/mall/mallPage.vue

@@ -6,53 +6,52 @@
 		</view>
 		<view class="ezy-tab-border">
 
-			<uni-segmented-control :current="dingdanData.current" :values="dingdanData.items" active-color="#3A7FE9"
+			<uni-segmented-control :current="productData.current" :values="productData.items" active-color="#3A7FE9"
 				@clickItem="onChangeTab" class="ezy-tab-box" />
 			<view>
-				<view v-if="dingdanData.current === 0">
-					<scroll-view scroll-y="true" refresher-enabled="true"
-						:refresher-triggered="dingdanData.quanbu.loading" :refresher-threshold="50"
-						refresher-background="transparent" @refresherrefresh="onRefresh" class="order-scroll-view">
+				<view v-if="productData.current === 0">
+					<scroll-view scroll-y="true" :scroll-into-view="scrollIntoId" class="order-scroll-view">
 						<!--数学-->
 						<uni-list>
-							<uni-list-item v-for="item in dingdanData.quanbu.list" class="mall-list-item">
-								<template v-slot:body>
-									<view class="mall-content-box">
-										<!-- 需要换成从接口中取得 wgy -->
-										<img src="/static/images/my/about-icon.png" class="mall-image"/>
-										<view class="content-body-box">
-											<view class="content-name">
-												<view class="name-text">数学暑假进阶L1</view>
-											</view>
-											<view class="content-text">适用于L1和学前,介绍介绍,适用于L1和学前,介绍介绍适用于L1和学前,介绍介绍</view>
-											<view class="content-row">
-												<view class="content-yuanjia">原价:¥39.9</view>
-												<view class="shop-car-box">
-													<!-- 购物车上的对号需控制 wgy-->
-													<icon class="car-change"></icon>
+							<uni-list-item v-for="item in productData.list" class="mall-list-item">
+								<view :id="'item-' + item.id">
+									<template v-slot:body>
+										<view class="mall-content-box">
+											<!-- 需要换成从接口中取得 wgy -->
+											<img :src='item.cover' class="mall-image" />
+											<view class="content-body-box">
+												<view class="content-name">
+													<view class="name-text">{{item.name}}</view>
+												</view>
+												<view class="content-text">{{item.intro}}</view>
+												<view class="content-row">
+													<view class="content-yuanjia">原价:{{item.yuanjia}}</view>
+													<view class="shop-car-box">
+														<!-- 购物车上的对号需控制 wgy-->
+														<icon class="car-change"></icon>
+													</view>
 												</view>
 											</view>
 										</view>
-									</view>
-									<view class="mall-bottom-row">
-										<!-- 组合课程显示课程包明细按钮 wgy -->
-										<view class="kcb-btn" @click="productBtn">课程包明细<icon></icon></view>
-										<view class="hdj-text">活动价:¥29.9</view>
-									</view>
-								</template>
+										<view class="mall-bottom-row">
+											<!-- 组合课程显示课程包明细按钮 wgy -->
+											<view v-if="item.type ==1" class="kcb-btn" @click="productBtn">课程包明细<icon>
+												</icon>
+											</view>
+											<view class="hdj-text">活动价:{{item.xianjia}}</view>
+										</view>
+									</template>
+								</view>
 							</uni-list-item>
-							<uni-load-more :status="dingdanData.quanbu.state" @click="getMore(0)"
-								:contentText="dingdanData.quanbu.contentText">
-							</uni-load-more>
 						</uni-list>
 					</scroll-view>
 				</view>
-				<view v-if="dingdanData.current === 1">
+				<view v-if="productData.current === 1">
 					<view>英语</view>
 				</view>
-				<view v-if="dingdanData.current === 2">
+				<!-- 	<view v-if="productData.current === 2">
 					<view>语文</view>
-				</view>
+				</view> -->
 			</view>
 		</view>
 		<view class="footer-mall-pay-box">
@@ -66,24 +65,41 @@
 				<view>购买即同意虚拟产品不支持退订</view>
 			</view>
 			<!-- 微信 -->
-			<view class="pay-status-box" v-if="showPayWay" @click="switchPayWay"><icon class="wx-icon"></icon>微信</view>
+			<view class="pay-status-box" v-if="showPayWay" @click="switchPayWay">
+				<icon class="wx-icon"></icon>微信
+			</view>
 			<!-- 支付宝 -->
-			<view class="pay-status-box" v-if="!showPayWay" @click="switchPayWay"><icon class="zfb-icon"></icon>支付宝</view>
+			<view class="pay-status-box" v-if="!showPayWay" @click="switchPayWay">
+				<icon class="zfb-icon"></icon>支付宝
+			</view>
 			<!-- 苹果 -->
-			<view class="pay-status-box apple-status-box" v-if="false"><icon class="apple-icon"></icon>apple</view>
+			<view class="pay-status-box apple-status-box" v-if="false">
+				<icon class="apple-icon"></icon>apple
+			</view>
 			<view class="pay-btn">立即支付</view>
 		</view>
-		
+
 		<detail-dialog ref="mallDetailPopup" @payBtn="payBtn"></detail-dialog>
 		<product-dialog ref="mallProductPopup" @payBtn="payBtn"></product-dialog>
 	</view>
 </template>
 
 <script setup>
-	import {reactive,ref} from "vue";
-	import {getOrderList,orderAdd} from "@/api/order";
-	import {onLoad} from "@dcloudio/uni-app";
-	import {toast,getUserIdentity} from "@/utils/common";
+	import {
+		reactive,
+		nextTick,
+		ref
+	} from "vue";
+	import {
+		getMallist
+	} from "@/api/productMall.js";
+	import {
+		onLoad
+	} from "@dcloudio/uni-app";
+	import {
+		toast,
+		getUserIdentity
+	} from "@/utils/common";
 	import cacheManager from '@/utils/cacheManager.js';
 	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
 	import detailDialog from './detailDialog.vue'
@@ -91,69 +107,36 @@
 	const showPayWay = ref(true)
 	const showDetail = ref(false)
 	const mxjtClass = ref('mxjt-sq-icon')
-	function switchPayWay(){
-		showPayWay.value = !showPayWay.value
-	}
 	const mallDetailPopup = ref(null);
 	const mallProductPopup = ref(null);
-	function productBtn(){
+	let scrollIntoId = ref(null)
+	const productData = reactive({
+		items: ['数学', '英语'],
+		current: 1,
+		from: '',
+		cardId: '',
+		list: []
+	})
+
+	function switchPayWay() {
+		showPayWay.value = !showPayWay.value
+	}
+
+	function productBtn() {
 		mallProductPopup.value.detailShow();
 	}
-	function detailBtn(){
+
+	function detailBtn() {
 		showDetail.value = !showDetail.value;
-		if(showDetail.value){
+		if (showDetail.value) {
 			mxjtClass.value = 'mxjt-zk-icon';
 			mallDetailPopup.value.detailShow();
-		}else{
+		} else {
 			mxjtClass.value = 'mxjt-sq-icon';
 			mallDetailPopup.value.detailCloseBtn();
 		}
-		
-	}
-	
-	function payBtn(){
-		
-	}
-	
-	const dingdanData = reactive({
-		items: ['数学', '英语', '语文'],
-		current: 0,
-		quanbu: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-
-		},
-		daiFukuan: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-		},
-		yiFukuan: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-		},
-	})
 
+	}
 
 	function handlePay(item) {
 		uni.redirectTo({
@@ -162,231 +145,59 @@
 	}
 
 	function onChangeTab(e) {
-		if (dingdanData.current !== e.currentIndex) {
-			dingdanData.current = e.currentIndex;
-			if (dingdanData.current == 0) {
-				dingdanData.quanbu.page = 0
-			} else if (dingdanData.current == 1) {
-				dingdanData.daiFukuan.page = 0
-			} else if (dingdanData.current == 2) {
-				dingdanData.yiFukuan.page = 0
-			}
-			refreshData(dingdanData.current);
-		}
+		console.log('e', e);
+		productData.current = e.currentIndex
+		getMore()
 	}
 
-	function refreshData(code) {
+
+	function getMore() {
 		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code
+			subjectId: productData.current + 1
 		}
+		getMallist(opt).then(res => {
+			if (res.code == 0) {
+				productData.list = res.data
+				nextTick(() => {
+					scrollToIdFun(productData.cardId)
+				})
 
-		if (code == 0) {
-			dingdanData.quanbu.list = [];
-			// 数学
-			dingdanData.quanbu.state = 'loading';
-			dingdanData.quanbu.page++;
-			opt.page = dingdanData.quanbu.page;
-		} else if (code == 1) {
-			dingdanData.daiFukuan.list = [];
-			// 英语
-			dingdanData.daiFukuan.state = 'loading';
-			dingdanData.daiFukuan.page++;
-			opt.page = dingdanData.daiFukuan.page;
-		} else if (code == 2) {
-			dingdanData.yiFukuan.list = [];
-			// 英语
-			dingdanData.yiFukuan.state = 'loading';
-			dingdanData.yiFukuan.page++;
-			opt.page = dingdanData.yiFukuan.page;
-		}
-		getOrderList(opt).then(res => {
-			if (code == 0) {
-				dingdanData.quanbu.list = dingdanData.quanbu.list.concat(res.data.data);
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				dingdanData.daiFukuan.list = dingdanData.daiFukuan.list.concat(res.data.data);
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				dingdanData.yiFukuan.list = dingdanData.yiFukuan.list.concat(res.data.data);
-				dingdanData.yiFukuan.loading = false;
-			}
-			if (code == 0) {
-				if (res.data.total > dingdanData.quanbu.list.length) {
-					// 数学
-					dingdanData.quanbu.state = 'more';
-					dingdanData.quanbu.loading = false;
-				} else {
-					// 数学
-					dingdanData.quanbu.state = 'no-more';
-					dingdanData.quanbu.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total > dingdanData.daiFukuan.list.length) {
-					// 英语
-					dingdanData.daiFukuan.state = 'more';
-					dingdanData.daiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.daiFukuan.state = 'no-more';
-					dingdanData.daiFukuan.loading = false;
-				}
-			} else if (code == 2) {
-				if (res.data.total > dingdanData.yiFukuan.list.length) {
-					// 英语
-					dingdanData.yiFukuan.state = 'more';
-					dingdanData.yiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.yiFukuan.state = 'no-more';
-					dingdanData.yiFukuan.loading = false;
-				}
 			}
 		}).catch(err => {
-			if (code == 0) {
-				// 数学
-				dingdanData.quanbu.state = 'more';
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				// 英语
-				dingdanData.daiFukuan.state = 'more';
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				// 英语
-				dingdanData.yiFukuan.state = 'more';
-				dingdanData.yiFukuan.loading = false;
-			}
+			toast("获取产品数据失败")
+			return false
 		})
 	}
 
-	function onRefresh() {
-		if (dingdanData.current == 0) {
-			dingdanData.quanbu.page = 0;
-			dingdanData.quanbu.list = [];
-			dingdanData.quanbu.loading = true;
-		} else if (dingdanData.current == 1) {
-			dingdanData.daiFukuan.page = 0;
-			dingdanData.daiFukuan.list = [];
-			dingdanData.daiFukuan.loading = true;
-		} else if (dingdanData.current == 2) {
-			dingdanData.yiFukuan.page = 0;
-			dingdanData.yiFukuan.list = [];
-			dingdanData.yiFukuan.loading = true;
-		}
-		refreshData(dingdanData.current);
-	}
-
-	function getMore(code) {
-		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code // 前台索引加1为学科cardId
-		}
-
-		if (code == 0) {
-			if (dingdanData.quanbu.state == 'no-more') {
-				return;
-			}
-			// 数学
-			dingdanData.quanbu.state = 'loading';
-			dingdanData.quanbu.page++;
-			opt.page = dingdanData.quanbu.page;
-		} else if (code == 1) {
-			if (dingdanData.daiFukuan.state == 'no-more') {
-				return;
-			}
-			dingdanData.daiFukuan.state = 'loading';
-			dingdanData.daiFukuan.page++;
-			opt.page = dingdanData.daiFukuan.page;
-		} else if (code == 2) {
-			if (dingdanData.yiFukuan.state == 'no-more') {
-				return;
-			}
-			dingdanData.yiFukuan.state = 'loading';
-			dingdanData.yiFukuan.page++;
-			opt.page = dingdanData.yiFukuan.page;
+	function scrollToIdFun(targetId) {
+		const index = productData.list.findIndex(item => item.id == targetId)
+		console.log('index', index);
+		if (index > -1) {
+			// 安卓设备需要双保险
+			scrollIntoId.value = `item-${targetId}`
+			setTimeout(() => {
+				scrollIntoId.value = `item-${targetId}`
+			}, 300)
 		}
-		getOrderList(opt).then(res => {
-			if (code == 0) {
-				dingdanData.quanbu.list = dingdanData.quanbu.list.concat(res.data.data);
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				dingdanData.daiFukuan.list = dingdanData.daiFukuan.list.concat(res.data.data);
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				dingdanData.yiFukuan.list = dingdanData.yiFukuan.list.concat(res.data.data);
-				dingdanData.yiFukuan.loading = false;
-			}
-			if (code == 0) {
-				if (res.data.total > dingdanData.quanbu.list.length) {
-					// 数学
-					dingdanData.quanbu.state = 'more';
-					dingdanData.quanbu.state_text = '加载更多';
-					dingdanData.quanbu.loading = false;
-				} else {
-					// 数学
-					dingdanData.quanbu.state = 'no-more';
-					dingdanData.quanbu.state_text = '没有更多啦';
-					
-					dingdanData.quanbu.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total > dingdanData.daiFukuan.list.length) {
-					// 英语
-					dingdanData.daiFukuan.state = 'more';
-					dingdanData.daiFukuan.state_text = '加载更多';
-					
-					dingdanData.daiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.daiFukuan.state = 'no-more';
-					dingdanData.daiFukuan.state_text = '没有更多啦';
-					dingdanData.daiFukuan.loading = false;
-				}
-			} else if (code == 2) {
-				if (res.data.total > dingdanData.yiFukuan.list.length) {
-					// 英语
-					dingdanData.yiFukuan.state = 'more';
-					dingdanData.yiFukuan.state_text = '加载更多';
-					dingdanData.yiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.yiFukuan.state = 'no-more';
-					dingdanData.yiFukuan.state_text = '没有更多啦';
-				
-					dingdanData.yiFukuan.loading = false;
-				}
-			}
-		}).catch(err => {
-			if (code == 0) {
-				// 数学
-				dingdanData.quanbu.state = 'more';
-				dingdanData.quanbu.state_text = '加载更多';
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				// 英语
-				dingdanData.daiFukuan.state = 'more';
-				dingdanData.daiFukuan.state_text = '加载更多';
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				// 英语
-				dingdanData.yiFukuan.state = 'more';
-				dingdanData.yiFukuan.state_text = '加载更多';
-				dingdanData.yiFukuan.loading = false;
-			}
-		})
 	}
 
-	
 	function goBack() {
-		uni.redirectTo({
-			url: '/pages/my/index'
-		})
+		if (productData.from == 'daoPage') {
+			uni.redirectTo({
+				url: '/pages/study/index'
+			})
+		} else {
+			uni.redirectTo({
+				url: '/pages/my/index'
+			})
+		}
 	}
 
-	onLoad(() => {
-		getMore(dingdanData.current);
+	onLoad((options) => {
+		productData.current = Number(options.subjectId) - 1
+		productData.cardId = options.cardId
+		productData.from = options.from
+		getMore();
 	})
 </script>
 

+ 1 - 1
pages/study/index.vue

@@ -284,7 +284,7 @@
 			return false
 		}
 		uni.redirectTo({
-			url: '/pages/mall/mallPage?cardId='+zhangInfoLocal.cardId+'&from=daoPage'
+			url: '/pages/mall/mallPage?cardId='+zhangInfoLocal.cardId+'&from=daoPage'+'&subjectId='+zhangInfoLocal.subjectId
 		})
 	}