Quellcode durchsuchen

Merge remote-tracking branch 'origin/2024鹅状元' into 2024鹅状元

wangxy vor 1 Monat
Ursprung
Commit
b63b979889

+ 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
+  })
+}

+ 1 - 2
common/styles/global/components.scss

@@ -324,7 +324,7 @@ $titleBar-tabBar-page: calc(100vh - var(--status-bar-height));
 // 底部支付
 .footer-mall-pay-box{
 	width: 100%;background-color: #fff;position: absolute;bottom: 0;
-	display: flex;align-items: center;justify-content: space-between;z-index: 100;
+	display: flex;align-items: center;justify-content: space-between;
 	box-sizing: border-box;padding: 16rpx 12rpx  calc(16rpx + var(--window-bottom));
 	.mall-left-box{
 		font-size: 22rpx;color: #afafaf;
@@ -402,7 +402,6 @@ position: absolute;left: 0;top: -4rpx;opacity: 0.4;}
 		.content-name{
 			font-size: 36rpx;color: #000;margin-bottom: 12rpx;display: flex;align-items: center;
 			.name-text{@include single-line-ellipsis;max-width: 320rpx;margin-right: 10rpx;}
-			icon{width:70rpx;height:32rpx;@include ezy-no-repeat-cover;background-image: url("@/static/images/mall/new-icon.png");}
 		}
 		.content-text{font-size: 24rpx;color: #666;@include multi-line-ellipsis(3);line-height: 1.5;}
 	}

+ 64 - 1
common/styles/global/pages.scss

@@ -512,6 +512,68 @@
 	}
 }
 
+// 计算特训
+.ezy-jstx-study-page{
+	@include ezy-no-repeat-cover(top);background-color: #43c1f6;background-image: url("@/static/images/study/jstx/study-jstx-bj.png");
+	
+	.ezy-study-wrap{width:750rpx;height:1623rpx;position: relative;
+	background-image: url("@/static/images/study/jstx/study-wrap-bj.png");}
+	.study-name-img{width: 120rpx;height: 120rpx;position: absolute;top: 20rpx;}
+	.animal-img{left: 380rpx;top: 290rpx;}
+	.chapter-box{
+		width: 160rpx;text-align: center;font-weight: 800;color: #5c1a11;
+		font-size: 30rpx;position: absolute;top:125rpx;left:316rpx;
+	}
+	.chapter-title-box{
+		width: 330rpx;height: 80rpx;text-align: center;font-weight: 800;color: #fbb030;
+		position: absolute;top:176rpx;left:232rpx;white-space: pre-wrap;
+	}
+	
+	// brand-content
+	.brand-content{margin: 0 auto;@include single-line-ellipsis;}
+	.brand-icon,.brand-lock,.brand-finish-icon{
+		width: 70rpx;height: 70rpx;@include ezy-no-repeat-cover;
+		position: absolute;top: -50rpx;left: 50%;transform: translateX(-50%);}
+	.brand-icon{
+		font-size: 36rpx;font-weight: 600;color: #ff6501;line-height: 70rpx;
+		background-image: url("@/static/images/study/shuxue/number-bj.png");
+		}
+	.brand-lock{background-image: url("@/static/images/study/lock-bj.png");display: flex;justify-content: center;}
+	.brand-lock::before{
+		content: '';width: 38rpx;height: 45rpx;display: block;@include ezy-no-repeat-cover;
+		background-image: url("@/static/images/study/lock-img.png");margin-top: 10rpx;
+	}
+	.brand-finish-icon{background-image: url("@/static/images/study/dao-finish-icon.png");}
+	.brand-arrow{
+		width: 58rpx;height: 58rpx;left: 50%;top: 64%;position: absolute;opacity: 0.8;
+		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/brand-arrow.gif");
+		}
+	// brand-item
+	.brand-item{
+		width: 242rpx;height: 154rpx;
+		box-sizing: border-box;font-size: 24rpx;color: #fff;text-align: center;
+		font-weight: 600;position: relative;position: absolute;@include ezy-no-repeat-cover;
+		background-image: url("@/static/images/study/jstx/dao-item-disabled.png");
+	.brand-arrow{transform: translateX(-50%);}
+	.brand-content{width: 90%;}
+	}
+	.brand-item.brand-active{background-image: url("@/static/images/study/jstx/dao-item-active.png");}
+	.ceshi-brand-item{
+			width: 185rpx;height: 121rpx;@include ezy-no-repeat-cover;
+			padding: 16rpx 10rpx 10rpx 10rpx;position: absolute;top:1112rpx;right:140rpx;
+			background-image: url("@/static/images/study/shuxue/ceshi-pai-disabled.png");
+		.brand-arrow{top: 50%;left: 35%;transform: unset;}
+		.brand-lock,.brand-icon,.brand-finish-icon{left: 0;top: -30rpx;}
+	}
+	.ceshi-brand-item.brand-active{background-image: url("@/static/images/study/shuxue/ceshi-pai-active.png");}
+	
+	// brand-item
+	.brand-item:nth-child(1){top:330rpx;right:70rpx;}
+	.brand-item:nth-child(2){top:540rpx;left:75rpx;}
+	.brand-item:nth-child(3){top:692rpx;right:110rpx;}
+	.brand-item:nth-child(4){top:1085rpx;right:165rpx}
+}
+
 // 岛弹窗
 .dao-popup-box{
 	width: 100%;height: 865rpx;
@@ -1575,6 +1637,7 @@
 	.mall-list-item{
 		width: 94%;background-color: rgba(255, 255, 255, 0.6)!important;
 		margin: 0 3% 10rpx;border-radius: 8rpx;
+		.content-yuanjia{font-size: 36rpx;color: #ff0101;text-decoration: line-through;}
 		.mall-content-box{
 			display: flex;margin-top: 10rpx;border-bottom: 1px dashed #fff;
 			box-sizing: border-box;padding-bottom:10rpx;margin-bottom: 16rpx;
@@ -1587,7 +1650,7 @@
 			.content-text{font-size: 24rpx;color: #666;@include multi-line-ellipsis(3);line-height: 1.4;}
 			.content-row{
 				display: flex;justify-content: space-between;align-items: center;
-				.content-yuanjia{font-size: 36rpx;color: #ff0101;text-decoration: line-through;}
+				
 				.shop-car-box{
 					width: 70rpx;height: 70rpx;position: relative;
 					@include ezy-no-repeat-cover;background-image: url("@/static/images/mall/shop-car-icon.png");

+ 152 - 42
pages/mall/detailDialog.vue

@@ -1,55 +1,165 @@
 <template>
 	<uni-popup ref="detailPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-	 <view class="mall-detail-dialog">
-		 <view class="detail-content-box">
-			 <icon class="yfmx-title"></icon>
-			 <icon class="dialog-close-btn" @click="detailCloseBtn"></icon>
-			 <view class="detail-body-box">
-				 <!-- ↓需要换成从接口中取得 wgy -->
-			 	<view class="detail-item-box">
-					<!-- radio选中状态需要改成动态的 wgy -->
-					<radio value="zhifubao" checked="true" activeBackgroundColor="transparent" class="detail-radio radio-checked"/>
-			 		<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>
-			 		</view>
-			 	</view>
-			 </view>
-			 <view class="detail-bottom-box">
-			 	<view><radio value="zhifubao" checked="true" activeBackgroundColor="transparent" class="detail-radio radio-checked"/>全选</view>
-			 </view>
-		 </view>
-	 </view>
+		mask-background-color="rgba(51, 137, 217, 0.65);">
+		<view class="mall-detail-dialog">
+			<view class="detail-content-box">
+				<icon class="yfmx-title"></icon>
+				<icon class="dialog-close-btn" @click="detailCloseBtn"></icon>
+				<view class="detail-body-box">
+					<!-- 全选/取消全选 -->
+					<view class="select-all-box" @click="toggleSelectAll">
+						<checkbox :checked="isAllSelected" class="detail-checkbox" />
+						<text>全选</text>
+					</view>
+
+					<!-- 使用 checkbox-group 管理多选 -->
+					<checkbox-group @change="handleCheckboxChange">
+						<view class="detail-item-box" v-for="item in localList" :key="item.id">
+							<checkbox :value="item.id.toString()" :checked="selectedIds.includes(item.id)"
+								class="detail-checkbox" />
+							<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.xianjia}}</view>
+								</view>
+							</view>
+						</view>
+					</checkbox-group>
+				</view>
+			</view>
+			<!-- 子组件自己的底部结算栏 -->
+			<view class="footer-mall-pay-box">
+				<view class="mall-left-box">
+					<view class="price-icon-box">
+						<text class="red-price fh-text">¥</text>
+						<text class="red-price">{{totalPrice}}</text>明细
+						<icon :class="mxjtClass"></icon>
+					</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="zfb-icon"></icon>支付宝
+				</view>
+				<view class="pay-btn" @click="handlePay">立即支付</view>
+			</view>
+		</view>
 	</uni-popup>
 </template>
 
 <script setup>
-	import { ref } from 'vue';
-	const showPayWay = ref(true)
-	function switchPayWay(){
-		showPayWay.value = !showPayWay.value
+	import {
+		ref,
+		computed,
+		watch
+	} from 'vue';
+
+	const props = defineProps({
+		selectedList: { // 父组件传入的初始选中商品列表
+			type: Array,
+			default: () => []
+		}
+	});
+
+	const showPayWay = ref(true);
+	const mxjtClass = ref('mxjt-sq-icon');
+
+	// 本地维护的商品列表(独立于父组件)
+	const localList = ref([]);
+	const selectedIds = ref([]); // 存储选中项的id
+	// 本地选中状态管理
+	const localSelectedMap = ref({});
+
+	// 初始化本地数据
+	// 初始化数据
+	watch(() => props.selectedList, (newVal) => {
+		localList.value = [...newVal];
+		selectedIds.value = newVal.map(item => item.id); // 初始全部选中
+	}, {
+		immediate: true
+	});
+
+
+	// 是否全选
+	const isAllSelected = computed(() => {
+		return localList.value.length > 0 &&
+			selectedIds.value.length === localList.value.length;
+	});
+	// 处理checkbox变化
+	function handleCheckboxChange(e) {
+		selectedIds.value = e.detail.value.map(id => parseInt(id));
+	}
+	// 全选/取消全选
+	function toggleSelectAll() {
+		if (isAllSelected.value) {
+			selectedIds.value = []; // 取消全选
+		} else {
+			selectedIds.value = localList.value.map(item => item.id); // 全选
+		}
+	}
+	// 计算总价
+	const totalPrice = computed(() => {
+		return localList.value
+			.filter(item => selectedIds.value.includes(item.id))
+			.reduce((sum, item) => sum + parseFloat(item.xianjia || 0), 0)
+			.toFixed(2);
+	});
+
+	// 支付方式切换
+	function switchPayWay() {
+		showPayWay.value = !showPayWay.value;
 	}
-	const $emit = defineEmits(['payBtn'])
-	const detailPopup = ref(null); // 索引
-	// 打开弹窗
+
+	// 支付处理
+	function handlePay() {
+		// 获取选中商品的完整信息和cardId
+		const selectedItems = localList.value
+			.filter(item => selectedIds.value.includes(item.id));
+		console.log('selectedItems',selectedItems);
+		const cardIds = selectedItems.map(item => item.id);
+		const total = selectedItems.reduce((sum, item) => sum + parseFloat(item.xianjia || 0), 0);
+
+		if (cardIds.length === 0) {
+			uni.showToast({
+				title: '请选择至少一个商品',
+				icon: 'none'
+			});
+			return;
+		}
+		console.log('cardIds',cardIds);
+
+		// 构造支付数据
+		const paymentData = {
+			cardIds: cardIds,
+			items: selectedItems,
+			totalAmount: total.toFixed(2),
+			paymentMethod: showPayWay.value ? 'wechat' : 'alipay'
+		};
+
+
+	}
+
+	const detailPopup = ref(null);
+
 	function detailShow() {
 		detailPopup.value.open();
 	}
-	// 开启提分之旅按钮
-	function detailPayBtn(){
-		$emit('payBtn')
-	}
-	function detailCloseBtn(){
+
+	function detailCloseBtn() {
 		detailPopup.value.close();
 	}
+
 	defineExpose({
-			detailShow,detailCloseBtn
-		})
-</script>
+		detailShow,
+		detailCloseBtn
+	});
+</script>
+
+<style>
+
+</style>

+ 165 - 309
pages/mall/mallPage.vue

@@ -6,53 +6,45 @@
 		</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>
-												</view>
-											</view>
-										</view>
+						<view :id="'item-' + item.id" v-for="item in productData.list" :key="item.id"
+							class="mall-list-item">
+							<view class="mall-content-box">
+								<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="mall-bottom-row">
-										<!-- 组合课程显示课程包明细按钮 wgy -->
-										<view class="kcb-btn" @click="productBtn">课程包明细<icon></icon></view>
-										<view class="hdj-text">活动价:¥29.9</view>
+									<view class="content-text">{{item.intro}}</view>
+									<view class="content-row">
+										<view class="content-yuanjia">原价:{{item.yuanjia}}</view>
+										<view class="shop-car-box" @click="addProduct(item)">
+											<icon v-if="productData.selectedIds.includes(item.id)" class="car-change">
+											</icon>
+										</view>
 									</view>
-								</template>
-							</uni-list-item>
-							<uni-load-more :status="dingdanData.quanbu.state" @click="getMore(0)"
-								:contentText="dingdanData.quanbu.contentText">
-							</uni-load-more>
-						</uni-list>
+								</view>
+							</view>
+							<view class="mall-bottom-row">
+								<view v-if="item.type ==1" class="kcb-btn" @click="productBtn">课程包明细<icon>
+									</icon>
+								</view>
+								<view class="hdj-text">活动价:{{item.xianjia}}</view>
+							</view>
+						</view>
 					</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">
@@ -60,30 +52,49 @@
 				<!-- 需要换成从接口中取得 wgy -->
 				<view class="price-icon-box">
 					<text class="red-price fh-text">¥</text>
-					<text class="red-price">1999.8</text>明细
+					<text class="red-price">{{totalPrice}}</text>明细
 					<icon :class="mxjtClass"></icon>
 				</view>
 				<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>
+		<detail-dialog ref="mallDetailPopup" :selected-list="getSelectedProducts"></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,
+		computed,
+		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,302 +102,147 @@
 	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: [],
+		selectedIds: [] // 新增选中状态存储
+	})
+	const totalPrice = computed(() => {
+		return productData.list
+			.filter(item => productData.selectedIds.includes(item.id))
+			.reduce((sum, item) => sum + parseFloat(item.xianjia || 0), 0)
+			.toFixed(2)
+	})
+	const getSelectedProducts = computed(() => {
+		return productData.list.filter(item => productData.selectedIds.includes(item.id));
+	});
+
+	function updateSelection(selectedIds) {
+		productData.selectedIds = selectedIds;
+
+	}
+
+	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({
-			url: `/pages/pay/svip?cardId=${item.cardId}&formPage=my&orderId=${item.id}`
-		})
+		if (productData.selectedIds.length === 0) {
+			toast("请选择至少一个商品");
+			return;
+		}
+		// uni.redirectTo({
+		//   url: `/pages/pay/svip?cardIds=${productData.selectedIds.join(',')}&formPage=my`
+		// });
 	}
 
 	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
+		productData.selectedIds = [] // 清空选中
+		getMore()
 	}
 
-	function refreshData(code) {
-		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code
-		}
 
-		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;
+	function getMore() {
+		const opt = {
+			subjectId: productData.current + 1
 		}
-		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;
+		getMallist(opt).then(res => {
+			if (res.code == 0) {
+				productData.list = res.data
+				// 初始化选中状态(当有外部cardId时)
+				if (productData.cardId) {
+					const exist = res.data.some(item => item.id == productData.cardId)
+					if (exist) {
+						productData.selectedIds = [Number(productData.cardId)]
+					}
 				}
+				nextTick(() => {
+					scrollToIdFun(productData.cardId)
+				})
+
 			}
 		}).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;
+	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)
+
 		}
-		refreshData(dingdanData.current);
 	}
 
-	function getMore(code) {
-		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code // 前台索引加1为学科cardId
-		}
+	function addProduct(item) {
+		console.log('item', item);
 
-		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;
-		}
-		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;
-			}
-		})
+		const temp = [...productData.selectedIds]
+		const index = temp.indexOf(item.id)
+		index > -1 ? temp.splice(index, 1) : temp.push(item.id)
+		productData.selectedIds = temp
+		console.log('productData.selectedIds', productData.selectedIds);
+	}
+
+	function isItemSelected(id) {
+		return productData.cardId ?
+			id == productData.cardId // 有外部cardId时严格匹配
+			:
+			productData.selectedIds.includes(id) // 无cardId时检查选中列表
 	}
 
-	
 	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) => {
+		if (options.from == 'daoPage') {
+			productData.current = Number(options.subjectId) - 1
+			productData.cardId = options.cardId
+			productData.from = options.from
+		} else {
+			productData.current = Number(cacheManager.get('auth').subjectId) - 1
+		}
+
+		getMore();
 	})
 </script>
 

+ 2 - 1
pages/pay/order.vue

@@ -46,8 +46,9 @@
 											</view>
 										</view>
 									</view>
+									<view class="content-heji">合计:¥0.03</view>
 									<!-- 未付款显示付款按钮 wgy-->
-									<view class="order-bottom-box" v-if="item.status ==1">
+									<view class="order-bottom-box">
 										<!-- 微信 -->
 										<view class="pay-status-box" v-if="showPayWay" @click="switchPayWay"><icon class="wx-icon"></icon>微信</view>
 										<!-- 支付宝 -->

+ 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
 		})
 	}
 

BIN
static/images/mall/new-icon.png