Просмотр исходного кода

Merge branch '2025鹅状元数学' of https://gogs.mtavip.com/wangguoyu/uniProject into 2025鹅状元数学

tanxue 2 дней назад
Родитель
Сommit
b641c26733

+ 55 - 2
api/shop.js

@@ -12,7 +12,7 @@ export function getAppShopIndex(data = {}) {
 }
 
 
-export function getAppShuxueBuy(data = {}) {
+export function getAppCp1Buy(data = {}) {
 	return request({
 		url: "/app/shop/shuxue/buy",
 		headers: {
@@ -24,7 +24,7 @@ export function getAppShuxueBuy(data = {}) {
 	})
 }
 
-export function getAppShuxueInfo(data = {}) {
+export function getAppCp1Info(data = {}) {
 	return request({
 		url: "/app/shop/shuxue/info",
 		headers: {
@@ -35,3 +35,56 @@ export function getAppShuxueInfo(data = {}) {
 		timeout: 20000
 	})
 }
+
+
+export function orderPayAli(data = {}) {
+	return request({
+		url: "/app/order/pay/ali",
+		headers: {
+			isToken: true
+		},
+		method: 'post',
+		data,
+		timeout: 20000
+	})
+}
+
+
+
+export function orderPayWx(data = {}) {
+	return request({
+		url: "/app/order/pay/wx",
+		headers: {
+			isToken: true
+		},
+		method: 'post',
+		data,
+		timeout: 20000
+	})
+}
+
+export function orderPayApple(data = {}) {
+	return request({
+		url: "/app/order/pay/apple",
+		headers: {
+			isToken: true
+		},
+		method: 'post',
+		data,
+		timeout: 20000
+	})
+}
+
+
+
+export function orderCheck(data = {}) {
+	return request({
+		url: "/app/order/check",
+		headers: {
+			isToken: true
+		},
+		method: 'post',
+		data,
+		timeout: 20000
+	})
+}

+ 1 - 0
components/goLogin/goLogin.vue

@@ -195,6 +195,7 @@
 				cacheManager.set('auth', res.data)
 				// 返回重新支付
 				handleBack();
+        emits('success', res.data)
 			}
 		})
 	}

+ 3 - 8
pages/chanpinMy/my.vue

@@ -40,8 +40,7 @@
 			</view>
 		</view>
 
-		
-		<loginComp ref="loginRef" @success="handleSuccess"></loginComp>
+		<goLogin ref="loginRef" @success="handleSuccess"></goLogin>
 		<!-- 底部 -->
 		<custom-tab-bar :show="true" :current-index="currentTabIndex" />
 	</view>
@@ -58,7 +57,7 @@
 		commonCardList
 	} from '@/api/my.js'
 	import CustomTabBar from '@/components/custom-tabbar/index.vue';
-	import loginComp from "@/components/loginComp/index.vue"
+	import goLogin from "@/components/goLogin/goLogin.vue"
 	import {
 		onLoad,
 		onShow
@@ -157,7 +156,7 @@
 		// 兑换码兑换策略
 		if (getUserIsYouke()) {
 			// 非登录 -- 登录
-			loginRef.value.showPopup()
+			loginRef.value.showDl()
 		} else {
 			// 已登录
 			uni.navigateTo({
@@ -202,8 +201,4 @@
       url: '/pages/chanpinShop/index'
     })
   }
-
-	function test() {
-		loginRef.value.showPopup()
-	}
 </script>

+ 6 - 2
pages/chanpinShop/components/kaiTongFongShi.vue

@@ -11,7 +11,7 @@
 		</view>
 	</uni-popup>
 
-	<goLoginVue ref="LoginRef"></goLoginVue>
+	<goLoginVue ref="LoginRef" @success="onLoginSuccess"></goLoginVue>
 </template>
 
 <script setup>
@@ -23,8 +23,8 @@
 
 	const kaitongRef = ref(null); // 索引
 	const LoginRef = ref(null);
-	const $emit = defineEmits(['confirm-btn'])
 	const currentPlatform = ref(null);
+  const emits = defineEmits(['success']);
 
 
 	function isIOSorAndroid() {
@@ -54,6 +54,10 @@
 		})
 	}
 
+  function onLoginSuccess() {
+    emits('success')
+  }
+
 	defineExpose({
 		handleShow
 	})

+ 104 - 31
pages/chanpinShop/cp1/dingdan.vue

@@ -5,34 +5,42 @@
 			<text class="nav-bar-title">确认订单</text>
 		</view>
 		<!-- 卡片 -->
+		<view>
 			<view>
-				<view><image :src="data.cover"></image></view>
-				<view>名称:{{data.name}}</view>
-				<view>简介:{{data.intro}}</view>
-				<view>价格:{{data.xianjia}}</view>
+				<image :src="data.cover"></image>
 			</view>
+			<view>名称:{{data.name}}</view>
+			<view>简介:{{data.intro}}</view>
+			<view>价格:{{data.xianjia}}</view>
+		</view>
 		<!-- 等级 -->
 		<view>
 			<view>课程学习等级</view>
 			<view>
 				<!-- 套餐 -->
-				<view v-for="item in data.taocanList" @click="handleSelectTaoCan(item)" :class="{active: item.taocanId == activeTaocan.taocanId}">
+				<view v-for="item in data.taocanList" @click="handleSelectTaoCan(item)"
+					:class="{active: item.taocanId == activeTaocan.taocanId}">
 					{{item.name}}
 				</view>
 			</view>
 		</view>
-		<!-- 商品总价 -->	
+		<!-- 商品总价 -->
 		<view>
 			<view>商品总价 ¥{{yuanjia}}</view>
-			<view>优惠券   -¥{{youhui}}</view>
+			<view>优惠券 -¥{{youhui}}</view>
 			<view>合计 ¥{{xianjia}}</view>
 		</view>
 		<!-- 支付模式 -->
-		<view>
-			<view>微信</view>
-			<view>支付宝</view>
-		</view>	
-		
+		<template v-if="currentPlatform != 'ios'">
+			<radio-group @change="radioChange">
+				<label class="uni-list-cell uni-list-cell-pd" v-for="(item, index) in items" :key="item.value">
+					<view>
+						<radio :value="item.value" :checked="index === current" />
+					</view>
+					<view>{{item.name}}</view>
+				</label>
+			</radio-group>
+		</template>
 		<!-- 支付区 -->
 		<view>
 			<view>
@@ -42,8 +50,8 @@
 			<view @click="handlePay">立即支付</view>
 		</view>
 	</view>
-	
-	<kaiTongFongShiVue ref="kaiRef"></kaiTongFongShiVue>
+
+	<kaiTongFongShiVue ref="kaiRef" @success="handlePay"></kaiTongFongShiVue>
 </template>
 
 <script setup>
@@ -58,26 +66,57 @@
 	} from "@dcloudio/uni-app"
 	import * as shopHttp from "@/api/shop.js"
 	import kaiTongFongShiVue from "../components/kaiTongFongShi.vue";
+	import {
+		getAppCp1Buy
+	} from "@/api/shop";
+	import {
+		usePay
+	} from "../usePay.js";
+	import {
+		getUserIsYouke
+	} from "@/utils/common.js"
+	const currentPlatform = ref(null);
+
+	function isIOSorAndroid() {
+		const systemInfo = uni.getSystemInfoSync();
+
+		if (systemInfo.platform == 'ios') {
+			currentPlatform.value = 'ios'
+		} else {
+			currentPlatform.value = 'android'
+		}
+	}
 
 	const data = reactive({
-		chanpinId:null,
+		chanpinId: null,
 		cover: null,
 		intro: null,
 		name: null,
 		taocanList: []
 	})
-	
+
 	const activeTaocan = ref(null)
 	const kaiRef = ref(null)
 
+	const current = ref(0)
+	const items = ref([{
+		name: '微信',
+		value: 0
+	}, {
+		name: '支付宝',
+		value: 1
+	}])
+
+
+
 	const youhui = computed(() => {
 		if (!activeTaocan.value) {
 			return '0.00'
 		} else {
 			return activeTaocan.value.youhui
 		}
-	})	
-	
+	})
+
 	const xianjia = computed(() => {
 		if (!activeTaocan.value) {
 			return '0.00'
@@ -85,7 +124,7 @@
 			return activeTaocan.value.xianjia
 		}
 	})
-	
+
 	const yuanjia = computed(() => {
 		if (!activeTaocan.value) {
 			return '0.00'
@@ -93,34 +132,68 @@
 			return activeTaocan.value.yuanjia
 		}
 	})
-	
+
+	const {
+		OrderPay
+	} = usePay({
+		createOrderError: () => {}, // 创建订单失败
+		checkError: () => {}, // 校验失败
+		payError: () => {}, // 支付失败
+		paySuccess: () => {}, //支付成功
+		applePayError: () => {}, // 苹果内购失败
+	});
 
 	onLoad(() => {
-		initPage()
+		isIOSorAndroid();
+		initPage();
+		if (currentPlatform.value == 'ios') {
+			// ios 无微信与支付宝
+			current.value = -1;
+			console.log('cccc', current.value)
+		}
 	})
-	
+
+	function radioChange() {}
+
 	function handleSelectTaoCan(item) {
 		activeTaocan.value = item;
 	}
 
 	function initPage() {
-		shopHttp.getAppShuxueBuy().then(res => {
+		shopHttp.getAppCp1Buy().then(res => {
 			Object.assign(data, res.data)
-			
+
 			activeTaocan.value = res.data.taocanList[0]
-		})	
+		})
 	}
-	
+
 	function handlePay() {
-		
-		kaiRef.value.handleShow();
-		
-		/* if (getUserIsYouke()) {
+
+		if (getUserIsYouke()) {
 			// 游客
 			kaiRef.value.handleShow();
 		} else {
 			// 非游客
-		} */
+			const options = {
+				chanpinId: data.chanpinId,
+				taocanId: activeTaocan.value.taocanId
+			};
+
+			if (currentPlatform.value == 'ios') {
+				options.applePid = activeTaocan.value.applePid;
+				console.log('apple支付入参', options)
+				// 苹果
+				OrderPay('apple', options)
+			} else if (currentPlatform.value != 'ios' && current.value == 0) {
+				console.log('wx支付入参', options)
+				// 微信
+				OrderPay('wx', options)
+			} else if (currentPlatform.value != 'ios' && current.value == 1) {
+				console.log('ali支付入参', options)
+				// 支付宝
+				OrderPay('ali', options)
+			}
+		}
 	}
 
 	function handleBack() {

+ 7 - 2
pages/chanpinShop/cp1/intro.vue

@@ -2,7 +2,7 @@
 	<view>
 		<view class="icon-title-navBar-box">
 			<view class="nav-bar-icon" @click="handleBack"></view>
-			<text class="nav-bar-title">商</text>
+			<text class="nav-bar-title">商品详情</text>
 		</view>
 		<view>
 			<image :src="imageUrl" alt=""></image>
@@ -24,6 +24,7 @@
 		onShow
 	} from "@dcloudio/uni-app"
 	import * as shopHttp from "@/api/shop.js"
+  import {getAppCp1Info} from "../../../api/shop";
 	
 	const imageUrl = ref(null);
 
@@ -32,7 +33,7 @@
 	})
 
 	function initPage() {
-		shopHttp.getAppShuxueInfo().then(res => {
+		shopHttp.getAppCp1Info().then(res => {
 			imageUrl.value = res.data.image;
 		})
 	}
@@ -43,6 +44,10 @@
 			url: '/pages/chanpinShop/cp1/dingdan'
 		})
 	}
+	
+	function handleBack() {
+		uni.navigateBack()
+	}
 </script>
 
 <style>

+ 5 - 0
pages/chanpinShop/index.vue

@@ -124,4 +124,9 @@
 	onLoad(() => {
 
 	})
+
+
+  function handleBack() {
+    uni.navigateBack()
+  }
 </script>

+ 501 - 0
pages/chanpinShop/usePay.js

@@ -0,0 +1,501 @@
+import {
+	ref,
+	reactive
+} from "vue";
+import {
+	orderPayAli,
+	orderPayWx,
+	orderCheck,
+	orderPayApple
+} from "@/api/shop";
+import {
+	toast
+} from "@/utils/common";
+
+
+
+export function usePay(opt = {}) {
+
+	const {
+		createOrderError, // 创建订单失败
+		checkError, // 校验失败
+		payError, // 支付失败
+		paySuccess, //支付成功
+		applePayError, // 苹果内购失败
+	} = opt;
+
+	const aliData = reactive({
+		orderId: null, // 订单编号
+		text: '', // 订单数据
+	})
+
+	const wxData = reactive({
+		appid: '', // 应用ID(AppID)
+		mchid: '',
+		noncestr: '', // 随机字符串
+		orderId: '',
+		packageVal: '',
+		partnerid: '', // 商户号(PartnerID)
+		pid: '',
+		prepayid: '', // 预支付交易会话ID
+		timestamp: '', // 时间戳(单位:秒)
+		sign: '', // 签名,这里用的 MD5 签名
+		package: '', // 固定值
+	})
+
+	const appleData = reactive({
+		chanpinId: null, // 产品ID
+		paynum: "", // 支付号
+		receipt: "", // 票据
+		taocanId: null, // 套餐ID
+
+	})
+
+	function resetStatus() {
+		Object.assign(aliData, {
+			orderId: null, // 订单编号
+			text: '', // 订单数据
+		})
+
+		Object.assign(wxData, {
+			appid: '', // 应用ID(AppID)
+			mchid: '',
+			noncestr: '', // 随机字符串
+			orderId: '',
+			packageVal: '',
+			partnerid: '', // 商户号(PartnerID)
+			pid: '',
+			prepayid: '', // 预支付交易会话ID
+			timestamp: '', // 时间戳(单位:秒)
+			sign: '', // 签名,这里用的 MD5 签名
+			package: '', // 固定值
+		})
+
+		Object.assign(appleData, {
+			chanpinId: null, // 产品ID
+			paynum: "", // 支付号
+			receipt: "", // 票据
+			taocanId: null, // 套餐ID
+		})
+	}
+
+	// 支付入口 type:业务类型:wx|ali|apple; options: 入参chanpinId,taocanId,applePid
+	function OrderPay(type, options) {
+		// 初始化支付状态
+		resetStatus();
+
+		const {
+			chanpinId,
+			taocanId,
+			applePid, // 苹果商品Id ---> 用来获取支付号+票据
+		} = options;
+
+		if (!chanpinId) {
+			toast('数据异常,产品信息丢失')
+			return;
+		}
+		if (!taocanId) {
+			toast('数据异常,套餐信息丢失')
+			return;
+		}
+
+		if (type == 'wx') {
+			uni.showLoading({
+				title: '订单创建中...',
+				mask: true
+			});
+			// 微信
+			orderPayWx({
+				chanpinId,
+				taocanId
+			}).then(res => {
+				uni.hideLoading();
+				if (res.data.code == 0) {
+					Object.assign(wxData, res.data);
+					// 开始支付
+					wxPay(res.data);
+				} else {
+					toast('订单创建失败')
+					// 业务异常
+					createOrderError && createOrderError({
+						type: 'CreateOrderError',
+						msg: '业务异常,创建订单返回状态异常',
+						err: new Error('业务异常,创建订单返回状态异常'),
+						form: 'wx'
+					})
+				}
+			}).catch(err => {
+				uni.hideLoading();
+				toast('订单创建失败')
+				createOrderError && createOrderError({
+					type: 'CreateOrderError',
+					msg: '创建微信订单失败',
+					err,
+					form: 'wx'
+				})
+			})
+		}
+
+		if (type == 'ali') {
+			uni.showLoading({
+				title: '订单创建中...',
+				mask: true
+			});
+			// 支付宝
+			orderPayAli({
+				chanpinId,
+				taocanId
+			}).then(res => {
+				uni.hideLoading();
+				if (res.data.code == 0) {
+					Object.assign(aliData, res.data);
+					// 开始支付
+					aliPay(res.data);
+				} else {
+					toast('订单创建失败')
+					// 业务异常
+					createOrderError && createOrderError({
+						type: 'CreateOrderError',
+						msg: '业务异常,创建订单返回状态异常',
+						err: new Error('业务异常,创建订单返回状态异常'),
+						form: 'ali'
+					})
+				}
+			}).catch(err => {
+				uni.hideLoading();
+				createOrderError && createOrderError({
+					type: 'CreateOrderError',
+					msg: '创建微信订单失败',
+					err,
+					form: 'ali'
+				})
+			})
+		}
+
+		if (type == 'apple') {
+			if (!applePid) {
+				toast('数据异常,商品信息丢失')
+				return;
+			}
+			uni.showLoading({
+				title: '订单创建中...',
+				mask: true
+			});
+			applePay(options)
+		}
+
+	}
+
+	// 微信支付
+	function wxPay(options) {
+		Object.assign(wxData, options);
+		try {
+			uni.requestPayment({
+				provider: "wxpay",
+				orderInfo: options,
+				success: (res) => {
+					uni.showLoading({
+						title: '订单支付中...',
+						mask: true
+					});
+					// 校验支付结果
+					setTimeout(() => OrderCheckWx(), 1000)
+				},
+				fail: (err) => {
+					payError && payError({
+						type: 'wxPay',
+						msg: '微信支付失败',
+						err,
+						from: 'uni.requestPayment.fail'
+					})
+				}
+			})
+		} catch (err) {
+			payError && payError({
+				type: 'wxPay',
+				msg: '微信支付API唤起失败',
+				err,
+				from: 'uni.requestPayment'
+			})
+		}
+	}
+
+	// 校验
+	function OrderCheckWx() {
+		orderCheck({
+			id: wxData.orderId
+		}).then(res => {
+			if (res.code == 0 && res.data) {
+				// 校验通过,支付成功
+				paySuccessResult();
+			} else {
+				setTimeout(() => {
+					orderCheck({
+						id: wxData.orderId
+					}).then(res2 => {
+						if (res2.code == 0 && res2.data) {
+							// 校验通过,支付成功
+							paySuccessResult();
+						}
+					}).catch(err1 => {
+						uni.hideLoading()
+						toast('支付二次查验失败,请联系管理员')
+						checkError && checkError({
+							type: 'OrderCheckWx',
+							msg: '支付二次查验失败,请联系管理员',
+							err: err1,
+							form: 'wx'
+						})
+					})
+				}, 5000)
+			}
+		}).catch(err => {
+			uni.hideLoading()
+			toast('支付查验失败,请联系管理员')
+			checkError && checkError({
+				type: 'OrderCheckWx',
+				msg: '支付查验失败,请联系管理员',
+				err: err,
+				form: 'wx'
+			})
+		})
+	}
+
+	// 支付宝支付
+	function aliPay(options) {
+
+		Object.assign(aliData, options);
+
+		try {
+			uni.requestPayment({
+				provider: "alipay",
+				orderInfo: options.text, //此处为服务器返回的订单信息字符串
+				success: (res) => {
+					uni.showLoading({
+						title: '订单支付中...',
+						mask: true
+					});
+					// 校验支付结果
+					setTimeout(() => OrderCheckAli(), 1000)
+				},
+				fail: (err) => {
+					payError && payError({
+						type: 'aliPay',
+						msg: '支付宝支付失败',
+						err,
+						from: 'uni.requestPayment.fail'
+					})
+				}
+			})
+		} catch (err) {
+			payError && payError({
+				type: 'aliPay',
+				msg: '支付宝API唤起失败',
+				err,
+				from: "uni.requestPayment"
+			})
+		}
+	}
+
+	// 校验
+	function OrderCheckAli() {
+		orderCheck({
+			id: aliData.orderId
+		}).then(res => {
+			if (res.code == 0 && res.data) {
+				// 校验通过,支付成功
+				paySuccessResult();
+			} else {
+				setTimeout(() => {
+					orderCheck({
+						id: aliData.orderId
+					}).then(res2 => {
+						if (res2.code == 0 && res2.data) {
+							// 校验通过,支付成功
+							paySuccessResult();
+						}
+					}).catch(err1 => {
+						uni.hideLoading()
+						toast('支付二次查验失败,请联系管理员')
+						checkError && checkError({
+							type: 'OrderCheckAli',
+							msg: '支付二次查验失败,请联系管理员',
+							err: err1,
+							form: 'ali'
+						})
+					})
+				}, 5000)
+			}
+		}).catch(err => {
+			uni.hideLoading()
+			toast('支付查验失败,请联系管理员')
+			checkError && checkError({
+				type: 'OrderCheckAli',
+				msg: '支付查验失败,请联系管理员',
+				err: err,
+				form: 'ali'
+			})
+		})
+
+
+	}
+
+	// 苹果支付 --- 无需check 直接购买成功
+	function applePay(options) {
+		Object.assign(appleData, options)
+
+		try {
+			plus.payment.getChannels(function(channels) {
+				uni.hideLoading();
+				// 获取 id 为 'appleiap' 的 channel
+				// 开通了app应用内支付,在manifest.josn中设置,开通后需打自定议基座
+				// iapChannel 为应用内支付对象
+				const iapChannel = channels.find((item) => item.id == "appleiap");
+				//  ids 数组中的项为 App Store Connect 配置的内购买项目产品ID(productId)
+				if (!iapChannel) {
+					toast('未找到产品内购信息,请联系管理员')
+					applePayError &&
+						applePayError({
+							type: "applePay",
+							msg: "内购商品Id丢失,请确认是否已成功配置",
+							err: new Error("内购商品Id丢失,请确认是否已成功配置"),
+							from: "apple",
+						});
+					return;
+				}
+
+				const ids = [options.applePid];
+
+				iapChannel.requestOrder(
+					ids,
+					function(e) {
+						// 获取订单信息成功回调方法
+						uni.requestPayment({
+							provider: "appleiap",
+							orderInfo: {
+								productid: options.applePid, //产品id,来自于苹果
+								quantity: 1, //产品数量
+								manualFinishTransaction: true,
+							},
+							success: (e) => {
+								// 苹果内购成功
+
+								const {
+									transactionIdentifier: paynum,
+									transactionReceipt: receipt,
+								} = e;
+								Object.assign(appleData, {
+									paynum,
+									receipt,
+								});
+
+								orderPayApple({
+										chanpinId: appleData.chanpinId, // 产品ID
+										paynum: paynum, // 支付号
+										receipt: receipt, // 票据
+										taocanId: chanpinId.taocanId, // 套餐ID
+									})
+									.then((res) => {
+										uni.hideLoading();
+										if (res.code == 0 && res.data) {
+											//  完成内购
+											iapChannel.finishTransaction(data
+												.transactionIdentifier);
+											// 购买成功
+											paySuccessResult();
+										} else {
+											iapChannel.finishTransaction(data
+												.transactionIdentifier);
+											toast("业务异常,订单支付失败,请联系管理员");
+											applePayError &&
+												applePayError({
+													type: "orderPayApple",
+													msg: "业务异常,订单支付失败",
+													err: e,
+													from: "apple",
+												});
+										}
+									})
+									.catch((err) => {
+										uni.hideLoading();
+										applePayError &&
+											applePayError({
+												type: "orderPayApple",
+												msg: "订单支付校验失败",
+												err: e,
+												from: "apple",
+											});
+									});
+							},
+							fail: (e) => {
+								uni.hideLoading();
+								toast("苹果购买失败,请联系管理员");
+								applePayError &&
+									applePayError({
+										type: "uni.requestPayment",
+										msg: "苹果内购失败",
+										err: e,
+										from: "apple",
+									});
+							},
+						});
+					},
+					function(e) {
+						// 获取订单信息失败回调方法
+						uni.hideLoading();
+						toast('内购订单获取失败,请联系管理员')
+						applePayError &&
+							applePayError({
+								type: "uni.requestPayment",
+								msg: "苹果内购失败",
+								err: e,
+								from: "apple",
+							});
+					},
+				);
+			});
+		} catch (err) {
+			applePayError &&
+				applePayError({
+					type: "uni.requestPayment",
+					msg: "苹果内购API唤起失败",
+					err: e,
+					from: "plus.payment.getChannels",
+				});
+		}
+
+	}
+
+	// 支付成功
+	function paySuccessResult() {
+		uni.hideLoading()
+		toast('支付成功')
+		paySuccess && paySuccess();
+	}
+
+	return {
+		OrderPay
+	}
+
+}
+
+
+
+/**
+ * 错误
+ * 1. 创建订单错误
+ * 2. 支付SDK错误
+ * 3. 支付成功后,后台错误
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ * 
+ */

+ 10 - 0
pages/chanpinneirong/chanpin1.vue

@@ -51,6 +51,8 @@
 						<view class="xx-text-box">
 							<view>{{ jieItem.jieName }}</view>
 							<view>{{ jieItem.jieIntro }}</view>
+              <!--       锁       -->
+              <view v-if="jieItem.lock">锁</view>
 						</view>
 						<view class="xx-item-btn"></view>
 					</ezyActiveVue>
@@ -289,6 +291,14 @@
 				}
 			},
 			handlePlay(da, code) {
+
+        if (da.lock && code == 'play') {
+          // 加锁视频需要购买
+          uni.navigateTo({
+            url: "/pages/chanpinShop/cp1/dingdan"
+          })
+          return;
+        }
 				let jieId = code === 'jixu' ? da.curJieId : da.jieId;
 				if (!jieId) {
 					toast("无课程ID");