Parcourir la source

Merge remote-tracking branch 'origin/2025鹅状元数学' into 2025鹅状元数学

tanxue il y a 2 semaines
Parent
commit
21b93b59e5

+ 1 - 1
api/chanpinneirong.js

@@ -61,7 +61,7 @@ export function shuxueSave2(data = {}) {
 
 export function yingyuPinduInfo(data = {}) {
   return request({
-    'url': '/app/pindu/chanpin/danyuan/info',
+    'url': '/app/pindu/chanpin/dengji/info',
     headers: {
       isToken: true
     },

+ 93 - 80
pages/chanpinneirong/chanpin4.vue

@@ -7,12 +7,13 @@
 				<view class="xxjl-card-box">
 					<!-- 显示内容 -->
 					<view class="card-body-box">
-						<img :src="neirongInfo.cover" />
+						<img :src="banbenInfo.cover" />
 						<view class="body-right">
-							<view class="right-name">{{ neirongInfo.chanpinName }}</view>
-							<view class="right-item right-item-mini">等级:{{neirongInfo.dengjiName}}</view>
-							<view class="right-item">版本:{{neirongInfo.name}}</view>
-							<view>课程:{{neirongInfo.curKechengName}}</view>
+							<view class="right-name">{{ banbenInfo.chanpinName }}</view>
+							<view class="right-item right-item-mini">等级:{{banbenInfo.dengjiName}}</view>
+							<view class="right-item">版本:{{banbenInfo.name}}</view>
+							<view class="right-item right-item-mini">单元:{{banbenInfo.curDanyuanName}}</view>
+							<view class="right-item">课程:{{banbenInfo.curKechengName}}</view>
 						</view>
 					</view>
 					<view class="card-progress-box">
@@ -21,7 +22,7 @@
 							<progress :percent="curProcess" class="xx-progress" stroke-width="20"
 								backgroundColor="#3c7dfd" activeColor="#ffd11c" />
 						</view>
-						<ezyActiveVue class="ezy-btn-active jxxx-btn" @aclick="handlePlay(neirongInfo,'jixu')">
+						<ezyActiveVue class="ezy-btn-active jxxx-btn" @aclick="handlePlay(banbenInfo,'jixu')">
 						</ezyActiveVue>
 					</view>
 				</view>
@@ -30,18 +31,29 @@
 			<view class="xx-item-list">
 				<view class="xx-item-title">— 以下为当前等级课程目录 —</view>
 
-				<view v-for="(item, index) in dagangList" :key="item.jieId">
+				<view v-for="(danyuanItem, index) in danyuanList" :key="danyuanItem.danyuanId">
+					<!-- 单元标题(带唯一ID,用于位置查询) -->
+					<ezyActiveVue class="ezy-list-item-active item-dy-box"
+						@aclick="handleClickDanyuan(danyuanItem.danyuanId)" :id="`unit-title-${danyuanItem.danyuanId}`">
+						<view class="dy-left-box">L{{banbenInfo.dengjiId}}</view>
+						<view class="dy-right-box">
+							<view class="right-content">
+								<view>{{danyuanItem.danyuanName}}</view>
+								<view class="dy-name">{{danyuanItem.danyuanIntro}}</view>
+							</view>
+						</view>
+					</ezyActiveVue>
 					<!-- 节列表 -->
-					<ezyActiveVue class="ezy-list-item-active xx-item-box" :class="item.lock?'xx-disabled-item-box':''"
-						@aclick="handlePlay(item,'play')">
+					<ezyActiveVue class="ezy-list-item-active xx-item-box" :class="jieItem.lock?'xx-disabled-item-box':''" v-for="jieItem in danyuanItem.jieList"
+						:key="jieItem.jieId" @aclick="handlePlay(jieItem,'play')">
 						<view class="xx-item-status"
-							:class="item.wanchengFlag == 1 ? 'completed-status' : 'uncompleted-status'"></view>
-						<img :src="item.cover" />
+							:class="jieItem.wanchengFlag == 1 ? 'completed-status' : 'uncompleted-status'"></view>
+						<img :src="jieItem.cover" />
 						<view class="xx-text-box">
-							<view>{{ item.jieName }}</view>
-							<view>{{ item.jieIntro }}</view>
+							<view>{{ jieItem.jieName }}</view>
+							<view>{{ jieItem.jieIntro }}</view>
 						</view>
-						<view v-if="item.lock" class="xx-item-lock-btn"></view>
+						<view v-if="jieItem.lock" class="xx-item-lock-btn"></view>
 						<view v-else class="xx-item-btn"></view>
 					</ezyActiveVue>
 				</view>
@@ -63,8 +75,7 @@
 		<!-- 弹窗组件 -->
 		<danyuanInfoVue ref="dyRef" v-if="isShow" @close="isShow = false"></danyuanInfoVue>
 		<!-- 购买提示窗 -->
-		<tipSmallDialog ref="gmtRef" content="需要购买当前课程才能学习" @confirm-btn="handleConfirmBtn" qrBtnName="前往购买">
-		</tipSmallDialog>
+		<tipSmallDialog ref="gmtRef" content="需要购买当前课程才能学习" @confirm-btn="handleConfirmBtn" qrBtnName="前往购买"></tipSmallDialog>
 	</view>
 </template>
 
@@ -74,7 +85,7 @@
 	import cacheManager from "@/utils/cacheManager.js";
 	import {
 		yingyuPinduInfo,
-		shuxueSave2
+		shuxueSave
 	} from "@/api/chanpinneirong.js"
 	import {
 		onLoad,
@@ -90,22 +101,22 @@
 		updateChanpin4Process
 	} from "./useNeirongChanpin4"
 	import tipSmallDialog from "@/components/dialog/tipSmallDialog.vue";
-	// 产品2 计算特训
+	
 	export default {
 		data() {
 			return {
 				canExitApp: false,
 
-				dagangList: [],
-				neirongInfo: {},
-				banbenId: '',
-				jieId: '',
+				danyuanList: [],
+				banbenInfo: {},
+				dengjiId: '',
+				danyuanId: '',
 				chanpinId: '',
 				dengjiId: '',
 				curProcess: '',
 				existData: false,
 				isShow: false,
-				danyuanId: '',
+
 				stickyHeight: 0, // 吸顶栏高度(px)
 				currentStickyTitle: '', // 初始为空,不显示吸顶
 				currentStickyIntro: '',
@@ -134,18 +145,18 @@
 			handleConfirmBtn() {
 				// 加锁视频需要购买
 				uni.navigateTo({
-					url: "/pages/chanpinShop/cp2/dingdan"
+					url: "/pages/chanpinShop/cp1/dingdan"
 				})
 			},
-			initData(data) {
-				console.log('4444444');
+			initData(dengjiId) {
+				console.log('4444');
 				const cacheData = cacheManager.get('contentInfo');
 				if (cacheData) {
-					console.log('使用缓存数据');
+					console.log('使用缓存数据44');
 					this.updateFromCache();
 				} else {
-					console.log('重新请求数据');
-					this.initFromOptions(data);
+					console.log('重新请求数据44');
+					this.initFromOptions(dengjiId);
 				}
 			},
 			goTopBtn() {
@@ -163,9 +174,9 @@
 				})
 			},
 
-			initFromOptions(data) {
+			initFromOptions(dengjiId) {
 
-				this.loadDataFromApi(data);
+				this.loadDataFromApi(dengjiId);
 			},
 			// 从缓存更新数据方法
 			updateFromCache() {
@@ -174,17 +185,15 @@
 				const cacheData = cacheManager.get('contentInfo');
 				console.log('cacheData 从缓存更新数据方法', cacheData);
 				if (cacheData) {
-					this.neirongInfo = {
+					this.banbenInfo = {
 						...cacheData
 					};
 					this.curProcess = cacheData.curProcess;
-					this.dagangList = [...(cacheData.dagangList || [])];
-					console.log('dagangListdagangList', this.dagangList);
+					this.danyuanList = [...(cacheData.danyuanList || [])];
 					this.dengjiId = cacheData.dengjiId
-					this.danyuanId = cacheData.danyuanId
-					this.chanpinId = cacheData.chanpinId
 
-					if (this.dagangList.length == 0) {
+
+					if (this.danyuanList.length == 0) {
 						this.existData = false
 					} else {
 						this.existData = true
@@ -197,38 +206,31 @@
 				}
 			},
 
-			loadDataFromApi(data) {
-				console.log('data', data);
+			loadDataFromApi(dengjiId) {
 				uni.showLoading({
 					title: '加载中'
 				});
-				this.dengjiId = data.dengjiId
-				this.danyuanId = data.danyuanId
-				this.chanpinId = data.chanpinId
-				this.neirongInfo = {}
+				this.dengjiId = dengjiId
+				this.banbenInfo = {}
 				this.curProcess = ''
-				this.dagangList = []
+				this.danyuanList = []
 				const req = {
-					dengjiId: this.dengjiId,
-					danyuanId: this.danyuanId,
-
+					dengjiId: dengjiId
 				}
 				yingyuPinduInfo(req).then(res => {
 					if (res.code === 0) {
-
-						this.neirongInfo = res.data;
-						this.neirongInfo.jieId = res.data.curJieId;
+						this.banbenInfo = res.data;
+						this.banbenInfo.danyuanId = res.data.curDanyuanId;
 						this.curProcess = res.data.curProcess * 100;
-						this.dagangList = res.data.dagangList || [];
-						if (this.dagangList.length == 0) {
+						this.danyuanList = res.data.danyuanList || [];
+						if (this.danyuanList.length == 0) {
 							this.existData = false
 						} else {
 							this.existData = true
 						}
 						const cacheData = {
 							...res.data,
-							dengjiId: this.dengjiId,
-							chanpinId: this.chanpinId
+							dengjiId: dengjiId,
 						};
 						cacheManager.set('contentInfo', cacheData);
 						uni.hideLoading();
@@ -248,61 +250,72 @@
 			},
 
 			getJieAndDanyuan(data, jieId) {
-				for (let jie of data.dagangList) {
-					if (jie.jieId == jieId) {
-						return {
-							jie
+				for (let danyuan of data.danyuanList) {
+					for (let jie of danyuan.jieList) {
+						if (jie.jieId == jieId) {
+							return {
+								danyuan,
+								jie
+							}
 						}
 					}
-
 				}
 				return null;
 			},
 
-			async saveAndNavigate(jieId, da, code) {
+			async saveAndNavigate(jieId, type, da, code) {
 
+				console.log('this.dengjiId', this.dengjiId);
+				console.log('this.danyuanIddanyuanId', da.danyuanId);
+				console.log('da', da);
 				if (code == 'jixu') {
-					if (!da.jieId) {
-						toast("jieId 丢失")
+					if (!this.dengjiId || !da.danyuanId) {
+						toast("dengjiId或者danyuanId 丢失")
 						return false
 					}
 				}
 
 				let req = {
-					"dengjiId": da.dengjiId,
-					"jieId": da.jieId
+					"dengjiId": this.dengjiId,
+					"danyuanId": da.danyuanId,
+					"jieId": jieId
 				}
 				console.log('req', req);
-				const res = await shuxueSave2(req);
+				const res = await shuxueSave(req);
 				if (res.code == 0) {
-					let curJieAndDanyuan = this.getJieAndDanyuan(this.neirongInfo, jieId);
-					console.log('curJieAndDanyuan', curJieAndDanyuan);
-
+					let curJieAndDanyuan = this.getJieAndDanyuan(this.banbenInfo, jieId);
 					if (!curJieAndDanyuan) {
 						toast("未找到课程信息");
 						return false;
 					}
 
 					const cacheData = cacheManager.get('contentInfo') || {};
+					cacheData.curDanyuanName = curJieAndDanyuan.danyuan.danyuanName;
 					cacheData.curKechengName = curJieAndDanyuan.jie.jieIntro;
-					cacheData.jieId = curJieAndDanyuan.jie.jieId;
+					cacheData.danyuanId = curJieAndDanyuan.jie.danyuanId;
 					cacheData.curJieId = jieId;
 					cacheData.type = curJieAndDanyuan.jie.type;
 					cacheManager.set('contentInfo', cacheData);
 
-					uni.navigateTo({
-						url: `/pages/jisuantexun/lookShipin?jieId=${jieId}`
-					})
+					if (type == 1) {
+						uni.navigateTo({
+							url: `/pages/xinshuxue/lookShipin?jieId=${jieId}`
+						})
+					} else {
+						uni.navigateTo({
+							url: `/pages/xinshuxue/unitTest?jieId=${jieId}`
+						})
+					}
 				} else {
 					return false;
 				}
 			},
 			handlePlay(da, code) {
-				console.log('ddd', da)
-				if (da.lock && code == 'play') {
 
+				if (da.lock && code == 'play') {
+					
 					this.$refs.gmtRef.handleShow();
-
+					
 					// 加锁视频需要购买
 					// uni.navigateTo({
 					// 	url: "/pages/chanpinShop/cp1/dingdan"
@@ -314,18 +327,18 @@
 					toast("无课程ID");
 					return;
 				}
-				this.saveAndNavigate(jieId, da, code);
+				this.saveAndNavigate(jieId, da.type, da, code);
 			},
-			handleClickDanyuan(jieId) {
+			handleClickDanyuan(danyuanId) {
 
-				if (!jieId) {
-					toast("jieId丢失")
+				if (!danyuanId) {
+					toast("danyuanId丢失")
 					return false
 				}
 				this.isShow = true;
 				setTimeout(() => {
 					// 更新为点击的动态单元Id [临时]
-					this.$refs.dyRef.handleShow(jieId)
+					this.$refs.dyRef.handleShow(danyuanId)
 				}, 100)
 			},
 			handleBack() {

+ 4 - 3
pages/chanpinneirong/index.vue

@@ -149,14 +149,15 @@
 						})
 						break;
 					case 2:
-						const dengjiId = data.dengjiId
+						const dengjiId2 = data.dengjiId
 						this.$nextTick(() => {
-							this.$refs.chanpin2Ref.initData(dengjiId)
+							this.$refs.chanpin2Ref.initData(dengjiId2)
 						})
 						break;
 					case 4:
+						const dengjiId4 = data.dengjiId
 						this.$nextTick(() => {
-							this.$refs.chanpin4Ref.initData(data)
+							this.$refs.chanpin4Ref.initData(dengjiId4)
 						})
 						break;
 					default:

+ 7 - 3
pages/chanpinneirong/useNeirongChanpin4.js

@@ -2,11 +2,15 @@ import cacheManager from "@/utils/cacheManager.js";
 
 export function updateChanpin4Process() {
 	const cacheData = cacheManager.get('contentInfo');
-	console.log('cacheData44444', cacheData)
-	const list = cacheData.dagangList;
+	console.log('cacheDat444444', cacheData)
+	const list = cacheData.danyuanList;
 	const defaultCurProcess = cacheData.curProcess;
+	let mList = [];
+	list.forEach(item => {
+		mList = [...mList, ...item.jieList]
+	})
 
-	const process = list.filter(item => item.wanchengFlag).length/list.length * 100 || 0;
+	const process = mList.filter(item => item.wanchengFlag).length/mList.length * 100 || 0;
 	cacheData.curProcess = defaultCurProcess > process ? defaultCurProcess: process;
 	cacheManager.set('contentInfo', cacheData);
 }