Browse Source

Signed-off-by: 李妹妹 <1639016684@qq.com>

李妹妹 1 week ago
parent
commit
821b3eac27
56 changed files with 3597 additions and 415 deletions
  1. 2 1
      api/courseLook.js
  2. 3 3
      common/request.js
  3. 2 2
      manifest.json
  4. 20 19
      pages.json
  5. 2 2
      pages/auth/login.vue
  6. 2 2
      pages/common/launch.vue
  7. 7 7
      pages/healthy/detail.vue
  8. 2 2
      pages/healthy/index.vue
  9. 1 1
      pages/home/components/RecommendSection.vue
  10. 1 1
      pages/home/components/SearchBar.vue
  11. 6 6
      pages/home/index.vue
  12. 3 3
      pages/home/newindex.vue
  13. 1 1
      pages/home/productList.vue
  14. 1 1
      pages/index/index.vue
  15. 25 49
      pages/shopping/paymentOrder.vue
  16. 22 23
      pages/shopping/productDetails.vue
  17. 2 2
      pages_company/index.vue
  18. 4 4
      pages_company/order/confirmCompanyOrder.vue
  19. 1 1
      pages_company/order/productDetails.vue
  20. 1 1
      pages_company/order/productShowDetails.vue
  21. 1 1
      pages_company/shareLive.vue
  22. 1 1
      pages_company/storeOrderDetail.vue
  23. 1 1
      pages_company/storeProductPackageDetails.vue
  24. 2 1
      pages_course/api/courseLook.js
  25. 1 1
      pages_course/becomeVIP.vue
  26. 1 0
      pages_course/components/goodsList.vue
  27. 13 12
      pages_course/components/ques.vue
  28. 2 2
      pages_course/living.vue
  29. 2354 0
      pages_course/video - 副本.vue
  30. 642 147
      pages_course/video.vue
  31. 1 1
      pages_course/videovip - 副本.vue
  32. 450 97
      pages_course/videovip.vue
  33. 3 3
      pages_index/course.vue
  34. 3 3
      pages_index/index.vue
  35. 2 2
      pages_manage/login.vue
  36. 1 1
      pages_managedata/about.vue
  37. 2 2
      pages_shopping/live/complaint.vue
  38. 2 2
      pages_user/user/pay.vue
  39. 1 1
      pages_user/user/storeOrder.vue
  40. 1 1
      pages_user/user/storeOrderDetail.vue
  41. 2 2
      pages_user/user/userTuiAdd.vue
  42. BIN
      static/images/cart.png
  43. BIN
      static/images/jifen.png
  44. BIN
      static/images/more24.png
  45. BIN
      static/images/notice.png
  46. BIN
      static/images/wk.png
  47. BIN
      static/images/xg.png
  48. BIN
      static/tabbar/archive.png
  49. BIN
      static/tabbar/archive_sel.png
  50. BIN
      static/tabbar/health.png
  51. BIN
      static/tabbar/health_sel.png
  52. BIN
      static/tabbar/mall.png
  53. BIN
      static/tabbar/mall_sel.png
  54. BIN
      static/tabbar/shop_mall.png
  55. BIN
      static/tabbar/shop_mall_sel.png
  56. 3 3
      store/index.js

+ 2 - 1
api/courseLook.js

@@ -3,7 +3,8 @@ let request = new Request().http
 
  //微信小程序登录
  export function loginByMiniApp(data) {
- 	 return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
+ 	 //return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
+	 return request('/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
  }
 // 播放错误上报
 export function getErrMsg(data) {

+ 3 - 3
common/request.js

@@ -11,8 +11,8 @@ export default class Request {
 		let path = 'https://userapp.klbycp.com/store'; //百域承品
 		let path2 = 'https://userapp.klbycp.com'; //百域承品
 
-		// let path = 'http://aa846dff.natappfree.cc/store'; //百域承品 夏伟
-		// let path2 = 'http://aa846dff.natappfree.cc'; //百域承品 夏伟
+		// let path = 'http://h67477fc.natappfree.cc/store'; //百域承品 夏伟
+		// let path2 = 'http://h67477fc.natappfree.cc'; //百域承品 夏伟
 
 		// let path = 'http://jc5cb469.natappfree.cc/store'; //本地
 		// let path2 = 'http://jc5cb469.natappfree.cc'; //本地
@@ -76,7 +76,7 @@ export default class Request {
 			// path = 'https://userapp.klbycp.com' //百域承品
 			path = path2 //本地
 			token = uni.getStorageSync(TOKEN_KEYAuto)
-			console.log("TOKEN_KEYAuto===", TOKEN_KEYAuto, token)
+			//console.log("TOKEN_KEYAuto===", TOKEN_KEYAuto, token)
 		}
 		if (router.indexOf("/course_uniapp") != -1) {
 			type = 3

+ 2 - 2
manifest.json

@@ -1,5 +1,5 @@
 {
-    "name" : "岚财优选",
+    "name" : "岚财良品",
     "appid" : "__UNI__A8490FA",
     "description" : "",
     "versionName" : "1.0.0",
@@ -52,7 +52,7 @@
     "quickapp" : {},
     /* 小程序特有相关 */
     "mp-weixin" : {
-        "appid" : "wxcfd4cd6e2375e42f",
+        "appid" : "wx40dcfa2797d6fc2d",
         "setting" : {
             "urlCheck" : false
         },

+ 20 - 19
pages.json

@@ -31,8 +31,8 @@
 		{
 			"path": "pages/home/newindex",
 			"style": {
-				//"navigationBarTitleText": "岚财优选",
-				"navigationBarTitleText": "岚财优选",
+				//"navigationBarTitleText": "岚财良品",
+				"navigationBarTitleText": "岚财良品",
 				"enablePullDownRefresh": false,
 				"navigationStyle": "custom",
 				"app-plus": {
@@ -43,8 +43,8 @@
 		// {
 		// 	"path": "pages_index/index",
 		// 	"style": {
-		// 		//"navigationBarTitleText": "岚财优选",
-		// 		"navigationBarTitleText": "岚财优选",
+		// 		//"navigationBarTitleText": "岚财良品",
+		// 		"navigationBarTitleText": "岚财良品",
 		// 		"enablePullDownRefresh": false,
 		// 		"navigationStyle": "custom",
 		// 		"app-plus": {
@@ -395,7 +395,7 @@
 		// 	"pages": [{
 		// 			"path": "index",
 		// 			"style": {
-		// 				"navigationBarTitleText": "岚财优选",
+		// 				"navigationBarTitleText": "岚财良品",
 		// 				"enablePullDownRefresh": false,
 		// 				"navigationStyle": "custom"
 		// 			}
@@ -1361,9 +1361,9 @@
 				{
 					"path": "video",
 					"style": {
-						"navigationBarTitleText": "",
-						"enablePullDownRefresh": false,
-						"navigationStyle": "custom"
+						"navigationBarTitleText": "看课详情",
+						"enablePullDownRefresh": false
+						//"navigationStyle": "custom"
 					}
 				}, {
 					"path": "livingList",
@@ -1398,7 +1398,7 @@
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "岚财优选",
+		"navigationBarTitleText": "岚财良品",
 		"navigationBarBackgroundColor": "#FFFFFF",
 		"backgroundColor": "#FFFFFF"
 	},
@@ -1420,19 +1420,20 @@
 				"text": "首页"
 			},
 
-			// {
-			// 	"pagePath": "pages/healthy/index",
-			// 	"iconPath": "/static/tabbar/health.png",
-			// 	"selectedIconPath": "/static/tabbar/health_sel.png",
-			// 	"text": "百域百科"
-			// }
 			{
-				"pagePath": "pages/shopping/cart",
-				"iconPath": "/static/tabbar/cart.png",
-				"selectedIconPath": "/static/tabbar/cart_sel.png",
-				"text": "购物车"
+				"pagePath": "pages/healthy/index",
+				"iconPath": "/static/tabbar/mall.png",
+				"selectedIconPath": "/static/tabbar/mall_sel.png",
+				"text": "原乡行"
 			},
 			// {
+			// 	//"pagePath": "pages/shopping/cart",
+			// 	"pagePath": "pages_user/user/storeOrder",
+			// 	"iconPath": "/static/tabbar/cart.png",
+			// 	"selectedIconPath": "/static/tabbar/cart_sel.png",
+			// 	"text": "订单"
+			// },
+			// {
 			// 	"pagePath": "pages/shopping/index",
 			// 	"iconPath": "/static/tabbar/shop_mall.png",
 			// 	"selectedIconPath": "/static/tabbar/shop_mall_sel.png",

+ 2 - 2
pages/auth/login.vue

@@ -6,9 +6,9 @@
 		  <view class="logo">
 		  	<view class="logo-img">
 		  		<!-- <image  :src="imgPath+'/app/images/logo.jpg'"></image> -->
-				<image  src="/static/logo.jpg"></image>
+				<image  src="@/static/logo.jpg"></image>
 		  	</view>
-		  	<view class="title">岚财优选</view>
+		  	<view class="title">岚财良品</view>
 		  </view>
         <!-- <open-data class="user-avatar" type="userAvatarUrl"></open-data>
         <open-data class="user-name" type="userNickName"></open-data> -->

+ 2 - 2
pages/common/launch.vue

@@ -3,9 +3,9 @@
 		<view class="loadding" v-if="loadding==true">
 			<view class="circlebox">
 				<view class="circle"></view>
-				<image src="/static/logo.jpg"></image>
+				<image src="@/static/logo.jpg"></image>
 			</view>
-			<text class="text">岚财优选</text>
+			<text class="text">岚财良品</text>
 		</view>
 	</view>
 </template>

+ 7 - 7
pages/healthy/detail.vue

@@ -12,8 +12,8 @@
 			</view>
 		</view>
 		<!-- 最近阅读 -->
-		<view class="recent-reads">
-			<view class="left">
+		<!-- <view class="recent-reads"> -->
+			<!-- <view class="left">
 				<text class="label">最近阅读</text>
 				<view class="peop-box" @click="showUsers">
 					<view class="head-box">
@@ -23,22 +23,22 @@
 					</view>
 					<image class="arrow" src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/arrow_gray.png" mode=""></image>
 				</view>
-			</view>
+			</view> -->
 			<!-- <view class="share-btn">
 				<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/share.png" mode=""></image>
 				<text>分享</text>
 				<button  class="share" data-name="shareBtn" open-type="share">分享</button>
 			</view> -->
-		</view>
+		<!-- </view> -->
 		<!-- 咨询按钮 -->
-		<view class="inquiry">
+		<!-- <view class="inquiry">
 			<view class="content">
 				<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/consult.png" mode=""></image>
 				<text class="text">咨询</text>
 				<button class="contact-btn" open-type="contact"></button>
 			</view>
 			
-		</view>
+		</view> -->
 	</view> 
 </template>
 
@@ -72,7 +72,7 @@
 		onShareAppMessage(res) {
 			return {
 				title: this.item.title,
-				path: '/pages/healthy/detail?articleId='+this.item.productId,
+				path: '/pages/healthy/detail?articleId='+this.articleId,
 				imageUrl: this.item.imageUrl //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			

+ 2 - 2
pages/healthy/index.vue

@@ -3,7 +3,7 @@
 		<view class="top-content">
 			<!-- 这里是状态栏 -->
 			<view class="status_bar" :style="{height: statusBarHeight}"></view>
-			<view class="top-title">百域百科</view>
+			<view class="top-title">原乡行</view>
 			<!-- 搜索框 -->
 			<view class="search-cont">
 				<view class="inner">
@@ -247,7 +247,7 @@
 			font-family: PingFang SC;
 			font-weight: 500;
 			color: #FF233C;
-			background: #F5FFFE;
+			//background: #F5FFFE;
 			border: 1px solid #FF233C;
 			border-radius: 32upx;
 			margin: 0 20upx 20upx 0;

+ 1 - 1
pages/home/components/RecommendSection.vue

@@ -22,7 +22,7 @@
 							</view>
 							<image class="block-img" :src="item.liveImgUrl" mode="aspectFill"></image>
 							<view class="block-tit">
-								<image class="item-avatar" src="/static/logo.jpg" mode="aspectFill"></image>
+								<image class="item-avatar" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png" mode="aspectFill"></image>
 								<view class="item-title one-t">{{ item.liveName }}</view>
 							</view>
 						</view>

+ 1 - 1
pages/home/components/SearchBar.vue

@@ -30,7 +30,7 @@
 export default {
 	name: 'SearchBar',
 	props: {
-		title: { type: String, default: '岚财优选' },
+		title: { type: String, default: '岚财良品' },
 		keyword: { type: String, default: '' },
 		placeholder: { type: String, default: '请输入产品名称' },
 		bgColor: { type: String, default: 'rgba(43,199,185, 0)' },

+ 6 - 6
pages/home/index.vue

@@ -9,8 +9,8 @@
 					<!-- 这里是状态栏 -->
 					<view class="status_bar" :style="{height: statusBarHeight}"></view>
 					<view class="top-title">
-						<!-- <view class="name" >岚财优选</view> -->
-						<view class="name" >岚财优选</view>
+						<!-- <view class="name" >岚财良品</view> -->
+						<view class="name" >岚财良品</view>
 						<!-- <view class="dot">•</view><view class="sub-name">七彩互联网医院</view> -->
 					</view>
 					<!-- 搜索框、购物车、客服 -->
@@ -465,10 +465,10 @@
 		},
 		onShareAppMessage(res) {
 			return {
-				title: '岚财优选-您的专属解决方案',
+				title: '岚财良品-您的专属解决方案',
 				path: `/pages/common/launch`,
 				// imageUrl: this.$store.state.imgpath +'/app/image/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
-			imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		onReachBottom() {
@@ -478,9 +478,9 @@
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title: '岚财优选-您的专属解决方案',
+				title: '岚财良品-您的专属解决方案',
 				query: '', //页面参数
-				imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				// imageUrl: this.$store.state.imgpath +'/app/image/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},

+ 3 - 3
pages/home/newindex.vue

@@ -183,10 +183,10 @@ export default {
 		this.getStoreConfig()
 	},
 	onShareAppMessage() {
-		return { title: '岚财优选-您的专属解决方案', path: '/pages/common/launch', imageUrl: '/static/logo.jpg' }
+		return { title: '岚财良品-您的专属解决方案', path: '/pages/common/launch', imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' }
 	},
 	onShareTimeline() {
-		return { title: '岚财优选-您的专属解决方案', query: '', imageUrl: '/static/logo.jpg' }
+		return { title: '岚财良品-您的专属解决方案', query: '', imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' }
 	},
 	onReachBottom() {
 		this.loadMoreGoods()
@@ -246,7 +246,7 @@ export default {
 					const total = res.data.total != null ? Number(res.data.total) : 0
 					if (reset) this.goodsList = list
 					else this.goodsList = this.goodsList.concat(list)
-					this.goodsHasMore = list.length >= 20 && (this.goodsList.length < total || total === 0)
+					this.goodsHasMore = list.length >= 10 && (this.goodsList.length < total || total === 0)
 					this.goodsPageNum++
 				}
 			}).catch(() => { this.goodsLoading = false })

+ 1 - 1
pages/home/productList.vue

@@ -72,7 +72,7 @@
 					// newOrder:null,
 					// priceOrder:null,
 					// salesOrder:null,
-					position:1,
+					//position:1,
 					keyword:"",
 				},
 				mescroll:null,

+ 1 - 1
pages/index/index.vue

@@ -1,6 +1,6 @@
 <template>
 	<view class="content">
-		<image class="logo" src="/static/logo.jpg"></image>
+		<image class="logo" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
 		<view class="text-area">
 			<text class="title">{{title}}</text>
 		</view>

+ 25 - 49
pages/shopping/paymentOrder.vue

@@ -201,26 +201,17 @@
 		},
 		methods: {
 			getSafeUserInfo() {
-				try {
-					const userInfoStr = uni.getStorageSync('userInfo');
-					if (!userInfoStr) {
-						this.userinfo = {};
-						return;
-					}
-
-					// 如果是字符串,解析为对象
-					if (typeof userInfoStr === 'string') {
-						this.userinfo = JSON.parse(userInfoStr);
-					} else {
-						// 如果是对象,直接使用
-						this.userinfo = userInfoStr;
-					}
-
-					console.log('获取到的用户信息:', this.userinfo);
-				} catch (error) {
-					console.error('获取用户信息失败:', error);
-					this.userinfo = {};
-				}
+			let userInfoStr = uni.getStorageSync('userInfo');
+			if(Object.prototype.toString.call(userInfoStr) == '[object String]'){
+				userInfoStr = userInfoStr!=''?JSON.parse(userInfoStr):''
+			}
+			//console.log('userInfoStr.phone',userInfoStr.phone)
+			if (!userInfoStr || !userInfoStr.maOpenId|| !userInfoStr.phone) {
+				uni.navigateTo({
+					url: '/pages/auth/login'
+				});
+				return;
+			}
 			},
 			redirectToLogin() {
 				// 直接跳转到登录页,不删除token和userInfo
@@ -385,36 +376,17 @@
 			// 修复后的支付方法
 			payOrder() {
 				// 1. 安全地获取用户信息
-				this.getSafeUserInfo();
-				// 2. 检查 maOpenId,但不要直接修改字符串
-				// 3. 检查用户信息是否有效
-				if (!this.userinfo || Object.keys(this.userinfo).length === 0) {
-					// uni.showToast({
-					// 	title: '用户信息异常,请重新登录',
-					// 	icon: 'none'
-					// });
-
-					// 直接跳转到登录页
-					this.redirectToLogin();
-					return;
+				let userInfoStr = uni.getStorageSync('userInfo');
+				if(Object.prototype.toString.call(userInfoStr) == '[object String]'){
+					userInfoStr = userInfoStr!=''?JSON.parse(userInfoStr):''
 				}
-
-				// 4. 检查 maOpenId,如果不存在则提示重新登录
-				if (!this.userinfo.maOpenId) {
-					// uni.showModal({
-					// 	title: '提示',
-					// 	content: '用户信息不完整,需要重新登录',
-					// 	success: (res) => {
-					// 		if (res.confirm) {
-					// 			this.redirectToLogin();
-					// 		}
-					// 	}
-					// });
-					this.redirectToLogin();
+				//console.log('userInfoStr.phone',userInfoStr.phone)
+				if (!userInfoStr || !userInfoStr.maOpenId|| !userInfoStr.phone) {
+					uni.navigateTo({
+						url: '/pages/auth/login'
+					});
 					return;
 				}
-
-				// 5. 检查登录状态
 				this.utils.isLogin().then(res => {
 					if (res) {
 						// 创建防抖函数实例
@@ -426,7 +398,9 @@
 						debouncedPay();
 					} else {
 						// 未登录,直接跳转到登录页
-						this.redirectToLogin();
+						uni.navigateTo({
+							url: '/pages/auth/login'
+						});
 					}
 				}).catch(err => {
 					console.error('检查登录状态失败:', err);
@@ -435,7 +409,9 @@
 						icon: 'none'
 					});
 					// 登录状态异常,也跳转到登录页
-					this.redirectToLogin();
+					uni.navigateTo({
+						url: '/pages/auth/login'
+					});
 				});
 			},
 

+ 22 - 23
pages/shopping/productDetails.vue

@@ -22,18 +22,15 @@
 		<view class="det-info">
 			<view class="price-box">
 				<view class="price">
-					<text class="label" v-if="userinfo.isShow==1&&isuser==false">会员价</text>
-					<text class="label" v-else>零售价</text>
-					<text class="unit">¥</text>
-					<text class="num" v-if="userinfo.isShow==1&&isuser==false">{{product.price}}</text>
-					<text class="num" v-else>{{product.otPrice}}</text>
-					<text class="label" v-if="userinfo.isShow==1&&isuser==false">零售价</text>
-					<text class="old" v-if="userinfo.isShow==1&&isuser==false">¥{{product.otPrice}}</text>
+					<text class="label">会员价</text>
+					<text class="num">{{product.price}}</text>
+					<text class="label">零售价</text>
+					<text class="old">¥{{product.otPrice}}</text>
 				</view>
 				<view class="share-box" v-if="userinfo.isShow==1&&isuser==false">
 					<text class="text">分享</text>
-					<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/share1.png" mode="">
-					</image>
+					<!-- <image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/share1.png" mode="">
+					</image> -->
 					<button class="share" data-name="shareBtn" open-type="share">分享</button>
 				</view>
 			</view>
@@ -90,8 +87,8 @@
 		</view>
 		<!-- 底部按钮 -->
 		<!-- userinfo.isShow==1&& -->
-		<view class="btn-foot" v-if="isuser==false">
-			<view class="menu-box">
+		<view class="btn-foot" >
+			<view class="menu-box" v-if="isuser==false">
 				<view class="item" @click="goHome">
 					<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/back_home.png"
 						mode=""></image>
@@ -103,16 +100,17 @@
 					<text class="label">咨询</text>
 					<button class="contact-btn" open-type="contact"></button>
 				</view>
-				<view class="item" @click="toCart('./cart')">
+				<!-- <view class="item" @click="toCart('./cart')">
 					<uni-badge size="small" :text="cartCount" absolute="rightTop" type="error">
 						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/cart36.png"
 							mode=""></image>
 					</uni-badge>
 					<text class="label">购物车</text>
-				</view>
+				</view> -->
 			</view>
+			<view></view>
 			<view class="btn-box">
-				<view class="btn cart" @click="addCart('cart')">加入购物车</view>
+				<!-- <view class="btn cart" @click="addCart('cart')">加入购物车</view> -->
 				<view class="btn buy" @click="addCart('buy')">{{buyText}}</view>
 			</view>
 		</view>
@@ -187,7 +185,7 @@
 		</popupBottom>
 
 		<view class="loadding" v-if="loadding==true">
-			<image src="../../static/logo.jpg"></image>
+			<image src="../..https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
 			<text class="text">加载中...</text>
 		</view>
     <CustomToast ref="customToast">
@@ -302,7 +300,7 @@ import {CustomToast} from '@/components/custom-toast.vue';
 				return {
 					title: this.product.productName,
 					path: '/pages/shopping/productDetails?productId=' + this.product.productId + "&userId=" + user.userId,
-					imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+					imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
 			}
 		},
@@ -313,7 +311,7 @@ import {CustomToast} from '@/components/custom-toast.vue';
 				return {
 					title: this.product.productName,
 					query: 'productId=' + this.product.productId + "&userId=" + user.userId, //页面参数
-					imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+					imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 				}
 			}
 
@@ -512,7 +510,7 @@ import {CustomToast} from '@/components/custom-toast.vue';
 			// 回到首页
 			goHome() {
 				uni.switchTab({
-					url: '/pages/home/index'
+					url: '/pages/home/newindex'
 				})
 			},
 			// 跳转页面
@@ -540,9 +538,10 @@ import {CustomToast} from '@/components/custom-toast.vue';
 				if (type == 'buy') {
 					let userInfoStr = uni.getStorageSync('userInfo');
 					if(Object.prototype.toString.call(userInfoStr) == '[object String]'){
-						userInfoStr = JSON.parse(userInfoStr)
+						userInfoStr = userInfoStr!=''?JSON.parse(userInfoStr):''
 					}
-					if (!userInfoStr || userInfoStr && !userInfoStr.maOpenId) {
+					//console.log('userInfoStr.phone',userInfoStr.phone)
+					if (!userInfoStr || !userInfoStr.maOpenId|| !userInfoStr.phone) {
 						uni.navigateTo({
 							url: '/pages/auth/login'
 						});
@@ -864,7 +863,7 @@ import {CustomToast} from '@/components/custom-toast.vue';
 				display: inline-block;
 				padding: 0 6upx;
 				height: 30upx;
-				background: linear-gradient(90deg, #66b2ef 0%, #FF233C 100%);
+				background: linear-gradient(90deg, #FFC5C5 0%, #FF233C 100%);
 				border-radius: 4upx;
 				margin-right: 10upx;
 				font-size: 22upx;
@@ -1213,8 +1212,8 @@ import {CustomToast} from '@/components/custom-toast.vue';
 					margin-bottom: 30upx;
 
 					&.active {
-						background: #F1FFFE;
-						border: 1px solid #8AD5CE;
+						background: #fff;
+						border: 1px solid #FF233C;
 						color: #FF233C;
 					}
 				}

+ 2 - 2
pages_company/index.vue

@@ -16,7 +16,7 @@
 			<view class="used-tools">
 				<view class="title">常用工具</view>
 				<view class="tools-list">
-					<view class="item" @click="toCreateOrder()">
+					<!-- <view class="item" @click="toCreateOrder()">
 						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/order.png"
 							mode=""></image>
 						<text class="text">商品制单</text>
@@ -25,7 +25,7 @@
 						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/icon_coupon.png"
 							mode=""></image>
 						<text class="text">制单优惠券</text>
-					</view>
+					</view> -->
 					<!-- <view class="item" @click="toPay()">
 						<image src="https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop/images/money.png"
 							mode=""></image>

+ 4 - 4
pages_company/order/confirmCompanyOrder.vue

@@ -86,18 +86,18 @@
 		//发送给朋友
 		onShareAppMessage(res) {
 			return {
-				title: "岚财优选-您的专属解决方案",
+				title: "岚财良品-您的专属解决方案",
 				path: '/pages_company/order/confirmOrder?orderKey='+this.orderKey,
-				imageUrl: '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 			
 		},
 		//分享到朋友圈
 		onShareTimeline(res) {
 			return {
-				title:"岚财优选-您的专属解决方案",
+				title:"岚财良品-您的专属解决方案",
 				query:'orderKey='+this.orderKey,
-				imageUrl:  '/static/logo.jpg' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+				imageUrl:  'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
 			}
 		},
 		methods: {

+ 1 - 1
pages_company/order/productDetails.vue

@@ -159,7 +159,7 @@
 		</popupBottom>
 
 		<view class="loadding" v-if="loadding==true">
-			<image src="../../static/logo.jpg"></image>
+			<image src="../..https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
 			<text class="text">加载中...</text>
 		</view>
 

+ 1 - 1
pages_company/order/productShowDetails.vue

@@ -83,7 +83,7 @@
 		</view>
 		
 		<view class="loadding" v-if="loadding==true">
-			<image src="../../static/logo.jpg"></image>
+			<image src="../..https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
 			<text class="text">加载中...</text>
 		</view>
 		

+ 1 - 1
pages_company/shareLive.vue

@@ -112,7 +112,7 @@
 				title: '邀请你来观看直播:' + item.liveName,
 				path: `/pages_course/living?companyId=${this.companyId}&companyUserId=${this.companyUserId}&liveId=${item.liveId}`,
 				// imageUrl: this.products.image,
-				imageUrl: '/static/logo.jpg',
+				imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png',
 				success(res) {
 					console.log("分享成功", res);
 				},

+ 1 - 1
pages_company/storeOrderDetail.vue

@@ -518,7 +518,7 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #66b2ef 0%, #FF233C 100%);
+							background: linear-gradient(90deg, #FF233C 0%, #FF233C 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							font-size: 22upx;

+ 1 - 1
pages_company/storeProductPackageDetails.vue

@@ -908,7 +908,7 @@
 			font-weight: 500;
 			color: #FFFFFF;
 			border: 1px solid #D2E6FF;
-			background: linear-gradient(135deg, #66b2ef 0%, #FF233C 100%);
+			background: linear-gradient(135deg, #FF233C 0%, #FF233C 100%);
 			border-radius: 24upx;
 			margin-left: 30upx;
 		}

+ 2 - 1
pages_course/api/courseLook.js

@@ -3,7 +3,8 @@ let request = new Request().http
 
  //微信小程序登录
  export function loginByMiniApp(data) {
- 	 return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
+ 	 // return request('/course_uniapp/app/wx/miniapp/loginByMa',data,'POST','application/json;charset=UTF-8');
+	 return request('/app/wx/loginByMiniApp',data,'POST','application/json;charset=UTF-8');
  }
 // 播放错误上报
 export function getErrMsg(data) {

+ 1 - 1
pages_course/becomeVIP.vue

@@ -552,7 +552,7 @@
 					// let appid = "wx961fadab9bcb792b"; //微信APPid(福本源)
 					// let appid = "wx93ce67750e3cfba3"; //微信APPid(云联融智)
 					// let appid = "wxea1da2b708ab3c2f"; //微信APPid(蜂巢快药)
-					// let appid = "wx3de90a39feb8107a"; //微信APPid(岚财优选看课)
+					// let appid = "wx3de90a39feb8107a"; //微信APPid(岚财良品看课)
 					// let appid = "wxec49f9d783abf233"; //微信APPid(惠名大药房)
 					// let appid = "wx5a0f7e1932e2689e"; //微信APPid(同顺堂)
 					// let appid = "wxe0b82a0018449a62"; //微信APPid(良苗)

+ 1 - 0
pages_course/components/goodsList.vue

@@ -31,6 +31,7 @@
 
 <script>
 	import { getJumpStoreAppId } from "../api/courseAuto.js"
+	import {loginByMiniApp} from "@/api/courseLook.js"
 	export default {
 		props:['treatmentPackage','urlOption','source'],
 		data() {

+ 13 - 12
pages_course/components/ques.vue

@@ -2,20 +2,20 @@
 	<view class="ques-content" :style="{ fontSize: fontSize(28)}">
 		<view class="ques-flex" v-if="openCommentStatus!=1"  :style="{justifyContent:showTreatment==0 || (showNote==1&&courseNote)?'space-around':'flex-start'}">
 			<view class="ques-content-tit" :style="{ color: currentId==0&&(showNote==1&&courseNote||showTreatment==0) ? '#FF5C03':'#222',fontSize: fontSize(36)}" @click="choose(0)">问答题</view>
-			<view class="ques-content-tit" v-if="showTreatment==0" :style="{ color: currentId==2? '#FF5C03':'#222',fontSize: fontSize(36)}" @click="choose(2)">商品</view>
-			<view class="ques-content-tit" v-if="showNote==1&&courseNote" :style="{ color: currentId==1 ? '#FF5C03':'#222',fontSize: fontSize(36)}" @click="choose(1)">笔记</view>
+		<!-- 	<view class="ques-content-tit" v-if="showTreatment==0" :style="{ color: currentId==2? '#FF5C03':'#222',fontSize: fontSize(36)}" @click="choose(2)">商品</view>
+			<view class="ques-content-tit" v-if="showNote==1&&courseNote" :style="{ color: currentId==1 ? '#FF5C03':'#222',fontSize: fontSize(36)}" @click="choose(1)">笔记</view> -->
 		</view>
-		<view v-if="currentId==1&&showNote==1&&courseNote" class="note" :style="{ fontSize: fontSize(32)}"><text>{{courseNote}}</text></view>
-		<template v-if="currentId==2&&showTreatment==0">
+		<!-- <view v-if="currentId==1&&showNote==1&&courseNote" class="note" :style="{ fontSize: fontSize(32)}"><text>{{courseNote}}</text></view> -->
+		<!-- <template v-if="currentId==2&&showTreatment==0">
 			<goodsList ref="goodsList" :treatmentPackage="treatmentPackage" :urlOption="urlOption"></goodsList>
-		</template>
+		</template> -->
 		<template v-if="currentId==0">
 			<view v-for="(item,index) in quesList" :key="index">
 				<view class="ques-title" :style="{ fontSize: fontSize(32)}">
 					<text>{{index + 1}}.</text>
-					<view class="ques-type" :style="{ fontSize: fontSize(24)}" v-show="item.type == 1 || item.type == 2">
+					<!-- <view class="ques-type" :style="{ fontSize: fontSize(24)}" v-show="item.type == 1 || item.type == 2">
 						{{item.type == 1 ? '单选' : item.type == 2 ? '多选' : ''}}
-					</view>
+					</view> -->
 					<text>{{item.title}}</text>
 				</view>
 				<view :class="isAnswer(item,option.name) ?'ques-option ques-option-active':'ques-option'"
@@ -122,16 +122,17 @@
 	}
 
 	.ques-content-tit {
-		font-family: PingFang SC, PingFang SC;
+		font-family: PingFangSC, PingFang SC;
 		font-weight: 600;
-		font-size: 36rpx;
-		color: #222222;
+		font-size: 48rpx;
+		color: rgba(0,0,0,0.85);
+		line-height: 66rpx;
 	}
 
 	.ques-title {
 		margin: 48rpx 0 34rpx 0;
-		font-weight: 500;
-		font-size: 32rpx;
+		font-weight: 600;
+		font-size: 40rpx;
 		white-space: normal;
 	}
 

+ 2 - 2
pages_course/living.vue

@@ -904,7 +904,7 @@
 				networkType: 'unknown', // 当前网络类型
 				isNetworkAvailable: true, // 网络是否可用
 
-				templateId: '4OFTqa6oQUrI3oPGvoespPTM6uz5SjmQE1L-JEPxF-g', //岚财优选
+				templateId: '4OFTqa6oQUrI3oPGvoespPTM6uz5SjmQE1L-JEPxF-g', //岚财良品
 				//templateId: 'ELHbRqBdzSV7ttXTWw7RgnddnIqkj2-ld8dMU-gJmyU', //乐享优品
 				isAgreement: false,
 
@@ -1276,7 +1276,7 @@
 				title: '邀请你来观看直播:' + this.liveItem.liveName,
 				path: '/pages_course/living?companyId=-2&companyUserId=' + this.userInfo.userId +
 					'&liveId=' + this.liveId,
-				imageUrl: '/static/logo.jpg',
+				imageUrl: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png',
 				success(res) {
 					console.log('分享成功', res);
 				},

+ 2354 - 0
pages_course/video - 副本.vue

@@ -0,0 +1,2354 @@
+<!-- 自动发课看课页面 -->
+<template>
+	<view class="content">
+		<view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
+			<view class="arrow-left-warning" @click="navback" v-if="isOpen==1">
+				<u-icon name="arrow-left" size='22' color="#222" bold></u-icon>
+			</view>
+			<view class="arrow-left-warning" v-else @click="feedback">
+				<image :src="imgPath+'/app/image/warning.png'"></image>
+				<text>投诉</text>
+			</view>
+			<view class="header-title" :style="{width:menuButtonLeft + 'px',height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">{{courseInfo.title}}</view>
+		</view>
+		<view class="video-box">
+			<image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill">
+			</image>
+			<video 
+			@timeupdate="onTimeUpdate" 
+			@progress="progressChange" 
+			@error="videoErrorCallback" 
+			@play="getPlay"
+			@pause="getPause" 
+			@ended="getEnded"
+			@controlstoggle="controlstoggle"
+			@fullscreenchange="fullscreenchange"
+			:title="courseInfo.title"
+			style="width: 100%;height: 420rpx;" 
+			:poster="poster"  
+			id="video-content-box"  
+			controls
+			:auto-pause-if-open-native="true"
+			:auto-pause-if-navigate="true"
+			:enable-progress-gesture="false" 
+			:show-progress="showProgress"
+			:picture-in-picture-mode="[]"
+			:show-background-playback-button="false"
+			:src="videoUrl">
+			<!-- logo -->
+				<!-- 弹幕展示 -->
+				<template v-if="showDanmu==1&&openCommentStatus==2">
+					<text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
+						:style="item.danmustyle" @animationend="animationend(item,index)">
+						{{ item.content }}
+					</text>
+				</template>
+				<cover-view class="video-danmu-btnbox" :style="{display: openCommentStatus==2&&isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}">
+					<cover-image class="video-danmu-image" :src="imgPath+'/app/image/danmu_set.png'" @click="openDanmu(1)"></cover-image>
+				</cover-view>
+				<cover-image v-if="courseLogo" :class="isfull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image>
+			</video>
+		</view>
+		<!-- 弹幕方法 -->
+		<commentBox
+			v-if="openCommentStatus==2"
+			ref="danmuBox" 
+			:height="height" 
+			:urlOption="urlOption" 
+			:time="playTime"
+			:showDanmu="showDanmu"
+			:viewCommentNum="viewCommentNum"
+			:openCommentStatus="openCommentStatus"
+			@setInputText="setInputText" 
+			@getScrollTop="getScrollTop"
+			@getMore="getMore"
+			@getActiveDanmus="getActiveDanmus"></commentBox>
+		<!-- <view id="title-contentnav">
+			<view class="title-content" v-show="openCommentStatus!=1"> -->
+				<!-- 答题时展示小节课程名,其他展示课程名 -->
+				<!-- 小节课程名 -->
+				<!-- <view class="subtitlebox" v-if="isLogin&&isAddKf==1">
+					{{courseInfo.title}}
+				</view> -->
+				<!-- 课程名字 -->
+				<!-- <view class="miantitlebox" v-else>
+					{{courseInfo.courseName}}
+				</view> -->
+			<!-- </view> -->
+			<!-- <view class="tabbox" v-if="openCommentStatus==1">
+				<view :class="currentTab == nav.id ? 'tabbox-active':''" v-for="nav in navList" :key="nav.id" @click="handleTab(nav.id)">{{nav.name}}</view>
+			</view>
+		</view> -->
+		<scroll-view
+		class="scroll-view" 
+		:style="{height: height}" 
+		:scroll-top="scrollTop" 
+		:scroll-y="true" 
+		:refresher-enabled="currentTab == 2"
+		:refresher-triggered="triggered"
+		@refresherrefresh="handleRefresher">
+			<template v-if="openCommentStatus==1">
+				<view v-show="currentTab==0">
+					<descInfoNav ref="descInfoNav" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfoNav>
+				</view>
+				<view v-show="currentTab==2">
+					<commentBox 
+					ref="commentBox" 
+					:height="height" 
+					:urlOption="urlOption" 
+					:time="playTime"
+					:flagTime="flagTime"
+					:showDanmu="showDanmu"
+					:viewCommentNum="viewCommentNum"
+					:openCommentStatus="openCommentStatus"
+					@setInputText="setInputText" 
+					@getScrollTop="getScrollTop"
+					@getMore="getMore"></commentBox>
+				</view>
+			</template>
+			<view v-show="currentTab==1">
+				<template v-if="openCommentStatus!=1&&(courseInfo.title || courseInfo.description)">
+					<!-- 介绍 -->
+					<descInfo ref="descInfo" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfo>
+				</template>
+				<!-- 问题 -->
+				<template v-if="isLogin&&isAddKf==1">
+					<ques ref="ques" source="videoauto" :urlOption="urlOption" :quesList="quesList" :openCommentStatus="openCommentStatus" :treatmentPackage="treatmentPackage" :showTreatment="showTreatment" @handleAnswer="handleAnswer" @showBtnType="showBtnType"></ques>
+				</template>
+			</view>
+		</scroll-view>
+		<!-- 线路 -->
+		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
+			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
+			<text>线路{{numberToChinese(lineIndex + 1)}}</text>
+		</view>
+		<!-- 线路弹窗 -->
+		<uni-popup ref="popup" type="bottom"  class="full-width-popup">
+			<view class="popupbox">
+				<view class="popupbox-head">
+					<text>线路选择</text>
+					<image class="close-icon" :src="imgPath+'/app/image/tc_close_icon.png'" mode="aspectFill" @click="close">
+					</image>
+				</view>
+				<view class="popupbox-content">
+					<view :class="lineIndex == index ? 'line-item line-active': 'line-item'"
+						v-for="(it,index) in lineList" :key="index" @click="handleLine(index)">
+						线路{{numberToChinese(index + 1)}}</view>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 温馨提示弹窗 -->
+		<uni-popup ref="tipsPopup" type="center" :is-mask-click="false">
+			<view class="tipsPopup-mask">
+				<image class="red_envelope_top" :src="imgPath+'/app/image/red_envelope_img.png'" mode="aspectFill"></image>
+				<view class="tipsPopup">
+					<image class="tipsPopup-close"  :src="imgPath+'/app/image/course_close_white_icon.png'" mode="aspectFill"
+						@click="closeTipsPop"></image>
+					<view class="tipsPopup-line">
+						<view class="tipsPopup-box">
+							<view class="tipsPopup-head">
+								<image class="tipsPopup-head-title" :src="imgPath+'/app/image/tips_title_img.png'"
+									mode="widthFix"></image>
+							</view>
+							<view class="tipsPopup-content">
+								<view class="tipsPopup-content-title">亲爱的用户,</view>
+								<view>您已经观看课程一半的时间了,请注意休息并保持专注。</view>
+							</view>
+							<view class="tipsPopup-btn-box">
+								<view class="tipsPopup-btn" @click="closeTipsPop">继续观看领奖励</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 发送弹幕 -->
+		<view class="video-line danmu-line" @click="openDanmu(0)" v-if="isLogin&&isAddKf==1&&openCommentStatus==2">
+			<image class="set_image"  :src="imgPath+'/app/image/danmu_set_black.png'" mode="aspectFill"></image>
+			<text>发弹幕</text>
+		</view>
+		<!-- 发送弹幕弹窗 -->
+		<uni-popup ref="danmuPopup" type="bottom" style="z-index: 999;" @change="changeShowPopup">
+			<view class="danmuPopup" :style="{marginLeft:isfull ? statusBarHeight+'px': 0,marginBottom: danmuboxHeight+'px'}">
+				<view class="danmuPopup-head border-line">
+					<image class="danmu-icon" :src="showDanmu==0? imgPath+'/app/image/danmu-off.png':imgPath+'/app/image/danmu-on.png'" mode="heightFix" @click="switchDanmu()"></image>
+					<view class="u-border">
+						<input 
+						class="danmuPopup-input" 
+						placeholder="发个弹幕吧~" 
+						border="border"
+						:focus="focus"
+						:adjustPosition="false" 
+						:autoBlur="false" 
+						maxlength="50"
+						v-model.trim="inputText" />
+						<text style="font-size: 24rpx;color: #bbb;margin-left: 10rpx;">{{inputText?inputText.trim().length:0}}/50</text>
+					</view>
+					<button class="danmuPopup-send" @click="handleChatInput">发送</button>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 答题弹窗 -->
+		<uni-popup ref="answerPopup" type="center" :show="answerPopup">
+			<view :class="errTitle == '恭喜你,回答正确' ? 'answerPopup-box bg':'answerPopup-box'">
+				<!-- 正确 -->
+				<image class="tipimg" v-if="errTitle == '恭喜你,回答正确'" :src="imgPath+'/app/image/course_answer_img.png'"
+					mode="aspectFill"></image>
+				<!-- 错误 -->
+				<image class="tipimg" v-else :src="imgPath+'/app/image/course_answer_incorrectly_img.png'" mode="aspectFill">
+				</image>
+				<view class="answerPopup-title">{{errTitle}}</view>
+				<view class="answerPopup-desc" v-if="isOpen!=1" v-html="errDesc"></view>
+				<!-- 选择奖励 -->
+				<view class="reward-list" v-if="errTitle == '恭喜你,回答正确'&&isOpen!=1">
+					<radio-group class="reward-list-group" @change="rewardChange">
+						<label class="reward-list-option" v-for="(item, index) in rewardType" :key="item.value">
+							<radio :value="item.value+ ''" :checked="item.value == currentReward"
+								activeBorderColor="#FF5C03" activeBackgroundColor="#FF5C03"
+								style="transform:scale(0.7)" />
+							<view :style="{color: item.value == currentReward ? '#FF5C03':''}">{{item.name}}</view>
+						</label>
+					</radio-group>
+				</view>
+				<!-- 错误题目 -->
+				<view class="errQuesbox" v-if="errQues&&errQues.length>0">
+					<view class="errQuesbox-item textOne" v-for="(it,index) in errQues" :key="index">{{it.title}}</view>
+				</view>
+				<view class="answerPopup-btn" v-if="errTitle == '恭喜你,回答正确'" @click="closeAnswerPopup">确认</view>
+				<view class="tipsPopup-btn-box" v-else
+					:style="{marginTop: errQues&&errQues.length>0 ? '40rpx':'54rpx'}">
+					<view class="tipsPopup-btn" @click="closeAnswerPopup">{{remain > 0 ? '重新答题': '确认'}}</view>
+				</view>
+			</view>
+		</uni-popup>
+		<!-- 可以答题提示 -->
+		<view class="answerTip" v-if="isLogin&&currentTab!=1&&openCommentStatus==1&&showAnswerTip" @click="handleTab(1)">
+			<text>开始</text>
+			<text>答题</text>
+		</view>
+		<!-- 客服二维码弹窗 -->
+		<uni-popup ref="kfPopup" type="center" :mask-click="false">
+			<view class="kfqrcode-box">
+				<image class="kfqrcode" :src="qrcode" show-menu-by-longpress="true"></image>
+				<view v-show="qrcodeMsg" style="margin-top: 30rpx;" v-html="qrcodeMsg"></view>
+				<image class="kfqrcode-close" :src="imgPath+'/app/image/course_close_white_icon.png'" mode="aspectFill"
+					@click="closeKFPop"></image>
+			</view>
+		</uni-popup>
+		<!-- footer -->
+		<view class="footer" v-show="currentTab!=2&&videoId">
+			<view class="footer-btn" v-if="!isLogin || isAddKf !=1" @click="submit">
+				<text>立即学习</text>
+			</view>
+			<view v-if="currentTab==1&&isLogin&&isAddKf==1&&quesList&&quesList.length>0&&showBtn==0" class="footer-btn footer-btn-border" @click="submit">
+				<text>{{isOpen==1 ? '提交答案':'提交答案领取奖励'}}</text>
+			</view>
+			<!-- <view @click="checked=!checked" class="agreement" v-if="!isLogin">
+				<radio value="r1" :checked="checked" color="#ff5c03" activeBorderColor="#ff5c03"
+					style="transform:scale(0.6);" />
+				<view>阅读并同意<text style="color: #ff5c03;" @click.stop="goWeb(0)">《用户协议》</text>和<text
+						style="color: #ff5c03;" @click.stop="goWeb(1)">《隐私协议》</text></view>
+			</view> -->
+			<!-- <view class="footer-tips">重庆云联融智提供技术支持</view> -->
+		</view>
+		<view v-show="currentTab==2">
+			<view class="chatinput" :style="{bottom:danmuboxHeight>0?danmuboxHeight+'px':'calc(var(--window-bottom) + 24rpx)'}">
+				<input class="uni-input" v-model.trim="inputText" :adjustPosition="false" :autoBlur="false"  maxlength="140" placeholder="发消息···" confirm-type="send" @confirm="handleChatInput" />
+				<button class="send" @click="handleChatInput">发送</button>
+			</view>
+		</view>
+		<ykscreenRecord></ykscreenRecord>
+		<courseExpiration v-if="showExpiration" :code="resCode" :msg="resMsg" :qrcode="qrcode"
+		:userId="user && user.userId ? user.userId : ''"></courseExpiration>
+	</view>
+</template>
+
+<script>
+	import ques from "./components/ques.vue"
+	import descInfo from "./components/descInfo.vue"
+	import descInfoNav from "./components/descInfoNav.vue"
+	import commentBox from "./components/commentBox.vue"
+	import {TOKEN_KEYAuto,generateRandomString} from '@/utils/courseTool.js'
+	import ykscreenRecord from "@/components/yk-screenRecord/yk-screenRecord.vue"
+	import courseExpiration from './components/courseExpiration.vue'
+	import dayjs from 'dayjs';
+	import { mapGetters } from 'vuex';
+	
+	import {
+		getErrMsg,
+		getH5CourseByVideoId,
+		getH5CourseVideoDetails,
+		courseAnswer,
+		getFinishCourseVideo,
+		getIsAddKf,
+		getInternetTraffic,
+		getIntegralByH5Video,
+		sendReward,
+		loginByMp,
+		getRealLink
+	} from "@/api/courseAuto.js"
+	import {
+		getConfigByKey
+	} from "@/api/user.js"
+	import {handleFsUserWx} from '@/api/courseLook.js'
+	export default {
+		components: {
+			descInfoNav,
+			descInfo,
+			commentBox,
+			ques,
+			ykscreenRecord,
+			courseExpiration
+		},
+		data() {
+			return {
+				resMsg:"",
+				resCode:'',
+				showExpiration:false,
+				code: '',
+				baseUrl:uni.getStorageSync('requestPath'),
+				// 1 红包 2 积分
+				rewardType: [{
+					name: '红包奖励',
+					value: 1
+				}, {
+					name: '积分奖励',
+					value: 2
+				}],
+				currentReward: 1,
+				player: null,
+				loading: true,
+				progress: 0,
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
+				scrollTop: 0,
+				height: '0px',
+				isLogin: false,
+				videoUrl: "",
+				videoId: "",
+				//现在的时长
+				playTime: 0,
+				//总时长
+				duration: 0,
+				playDuration: 0,
+				// 用于续播
+				playDurationSeek: 0,
+				// 温馨提醒时间节点,
+				tipsTime: 0,
+				tipsOpen: false,
+				config: {},
+				courseInfo: {},
+				quesList: [],
+				lineList: [],
+				// 错题
+				errQues: [],
+				// 答题机会
+				remain: 0,
+				errTitle: "",
+				errDesc: "",
+				showPlay: true,
+				showControls: false,
+				playStatus: "",
+				isAddKf: 0,
+				lineIndex: 0,
+				// 是否展开
+				isExpand: true,
+				textHeight: 0, //文本高度
+				qwUserId: "",
+				qrcode: "",
+				corpId: "",
+				qrcodeMsg: "",
+				urlOption: {},
+				bufferRate: 0, // 缓冲时间
+				uuId: "",
+				isEnded: false,
+				// 是否允许拖动进度条
+				videolinkType: 0,
+				ip: null,
+				checked: true,
+				isFinish: 0, // 是否完课
+				interval: null,
+				intervalIntegral: null, // 积分定时
+				options: {
+					sources: [{
+						src: ""
+					}],
+					poster: "",
+					live: false /* 是否直播 */ ,
+					controls: true,
+					autoplay: false,
+					licenseUrl: 'https://license.vod2.myqcloud.com/license/v2/1323137866_1/v_cube.license', // license 地址,参考准备工作部分,在视立方控制台申请 license 后可获得 licenseUrl,
+					LicenseKey: 'bcc5bd9a14b798b48c52ff005a21d926',
+					controlBar: {
+						volumePanel: false,
+						playbackRateMenuButton: false,
+						QualitySwitcherMenuButton: false,
+						// progressControl: false
+					},
+					plugins: {
+						// ProgressMarker: false,
+						ContextMenu: {
+							statistic: false
+						}
+					},
+				},
+				// 错误请求次数
+				errorCount: 0,
+				answerPopup: false,
+				sortLink:"",
+				// 课程是否过期
+				isExpire: false,
+				menuButtonLeft: 281,
+				menuButtonH: 45,
+				timer: null,
+				flag: false,
+				msg:'',
+				poster:'',
+				focus: false,
+				openDanmuType: 0,
+				danmuboxHeight: 0,
+				user: {},
+				crtShow: true,
+				courseLogo: '',
+				isfull: false,
+				navList:[{
+					id: 0,
+					name: '介绍'
+				},{
+					id: 1,
+					name: '答题'
+				},{
+					id: 2,
+					name: '评论'
+				}],
+				currentTab: 1,
+				triggered: false,
+				// 没有更多
+				isMore: false,
+				inputText:"",
+				// 获取最多历史评论条数
+				viewCommentNum: 200,
+				// 1-开启评论;2-开启弹幕;3-关闭
+				openCommentStatus: 3,
+				showAnswerTip: false,
+				showDanmu: 1,
+				activeDanmus:[],
+				flagTime:0,
+				showProgress: true,
+				imgPath:this.$store.state.imgpath,
+				videoitem:null,
+				showTreatment: 1, // 1不展示,0展示疗法
+				treatmentPackage: [],
+				// 是否公开课
+				isOpen: 0,
+				showBtn: 0
+			}
+		},
+		//发送给朋友
+		onShareAppMessage(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		//分享到朋友圈
+		onShareTimeline(res) {
+			return {
+				title: this.$store.state.logoname,
+				path: '/pages/about/index',
+				imageUrl: this.$store.state.imgpath+'/app/image/logoshare.png' //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
+			}
+			
+		},
+		computed:{
+			appid() {
+				return this.$store.state.appid
+			},
+			isSpare() {
+				return this.$store.state.isSpare
+			},
+			...mapGetters(['coureLogin']),
+		},
+		watch: {
+		    coureLogin: {
+		      immediate: true,          // 页面一进入就检查一次
+		      handler(val) {
+		        if (val == 2&&this.isLogin) {
+					console.log("看课AppToken失效,请重新登录")
+					this.isLogin = false
+					this.isAddKf = 0
+					this.goLogin()
+		        }
+		      }
+		    }
+		},
+		onLoad(option) {
+			this.getWebviewUrl()
+			uni.$on('usercode', (data) => {
+				console.log('huoqu ', data)
+				if(this.isSpare == 1&&data) {
+					this.code=data.code
+					this.goLogin(data)
+				}
+			})
+			if(!option.course){
+				if(option.videoitem){
+					this.isOpen = 1
+					this.urlOption=JSON.parse(option.videoitem)
+					this.urlOption = {
+						...this.urlOption,
+						isOpen: 1
+					}
+				}else{
+					const keys = decodeURIComponent(Object.keys(option)[0]);
+					this.urlOption = JSON.parse(keys.split('course=')[1])
+				}
+			}else{
+				this.isOpen = 0
+				this.urlOption = option.course ? JSON.parse(decodeURIComponent(option.course)) : {}
+			}
+			this.videoId = this.urlOption.videoId
+			this.qwUserId = this.urlOption.qwUserId || ''
+			this.corpId = this.urlOption.corpId || ''
+			this.videolinkType = this.urlOption.linkType || 0
+			this.urlOption.appId=wx.getAccountInfoSync().miniProgram.appId
+			var that=this;
+			if (this.videoId) {
+				this.getH5CourseByVideo()
+			}
+			this.sortLink = this.urlOption.link || ''
+			this.getMenuButton()
+			// #ifndef H5
+			uni.onKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		onShow() {
+			this.tipsOpen = false
+			this.isExpand = true
+			// this.isLogin = this.$isLoginCourseAuto()
+			this.uuId = generateRandomString(16)
+			if(uni.getStorageSync('auto_userInfo') && JSON.stringify(uni.getStorageSync('auto_userInfo'))!='{}') {
+				this.user = JSON.parse(uni.getStorageSync('auto_userInfo'))
+			} else {
+				this.user = {}
+			}
+
+			if((this.sortLink||this.isOpen==1)&&!this.code){
+				this.getLink()
+			} else {
+				if(this.code) return;
+				uni.showToast({
+					title: '链接地址有误',
+					icon: 'none'
+				});
+			}
+		},
+		mounted() {
+			this.getIP()
+			this.getHeight()
+		},
+		onHide() {
+			// this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.pause()
+			}
+			// if (this.interval != null) {
+			// 	clearInterval(this.interval)
+			// 	this.interval = null
+			// }
+		},
+		onUnload() {
+			uni.$off('usercode')
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+			// #ifndef H5
+			uni.offKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		beforeDestroy() {
+			uni.$off('usercode')
+			this.player = uni.createVideoContext('video-content-box');
+			if (this.player) {
+				this.player.stop()
+				this.player = null
+			}
+			if (this.interval != null) {
+				clearInterval(this.interval)
+				this.interval = null
+			}
+			this.clearIntegral()
+			// #ifndef H5
+			uni.offKeyboardHeightChange(this.keyboardHeightChange);
+			// #endif
+		},
+		methods: {
+			getWebviewUrl() {
+				var data = {
+					key: 'course.config'
+				}
+					getConfigByKey(data).then(res => {
+						if (res.code == 200) {
+							console.log("getConfigByKey====", JSON.parse(res.data))
+							let data = JSON.parse(res.data,)
+							uni.setStorageSync('setWebviewUrl',data.userCourseAuthDomain)
+						}else{
+							uni.showToast({
+								icon:'none',
+								title: res.msg,
+							});
+						}
+					})
+			},
+			numberToChinese(number) {
+				if (number) {
+					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九'];
+					return chineseNumber[number - 1];
+				} else {
+					return ''
+				}
+			},
+			keyboardHeightChange(res) {
+				// #ifndef H5
+				console.log("this.danmuboxHeight",this.danmuboxHeight)
+				 this.danmuboxHeight = res.height
+				// #endif
+			},
+			getMenuButton(){
+				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
+				this.menuButtonLeft = menuButtonInfo.left
+				this.menuButtonH = menuButtonInfo.height
+			},
+			//播放时间更新事件方法
+			onTimeUpdate(e){
+				let currentTime = Math.round(e.detail.currentTime)
+				if (this.playDurationSeek > 0) {
+					this.playTime = this.playDurationSeek
+					this.throttle(() => this.changeTime(this), 1000, false)
+				} else {
+					if (this.videolinkType != 1 && (currentTime - this.playTime > 3 || currentTime - this.playTime < -3)&&this.isFinish!=1) {
+						uni.showToast({
+							title: '不能快进哦',
+							icon: 'none',
+						});
+						currentTime = this.playTime
+						this.player.seek(this.playTime);
+					}
+					this.playTime = currentTime
+				}
+				if (Math.floor(e.detail.currentTime) != this.flagTime) {
+					this.flagTime = Math.floor(e.detail.currentTime)
+					let answerType = this.$store.state.answerType;
+					
+					this.showAnswerTip = answerType == 1 ? this.shouldShowByRate(this): this.shouldShowByLastMinute(this);
+					if(this.openCommentStatus == 2) {
+						this.$refs.danmuBox&&this.$refs.danmuBox.checkDanmu(this.flagTime)
+					}
+				}
+			},
+			// 工具函数:保留两位小数的百分比(0~100)
+			calcPercent(play, total) {
+			  return Number(((play || 0) / (total || 1) * 100).toFixed(2));
+			},
+			
+			// 策略1:按完课领红包
+			shouldShowByRate({ playTime, duration, config }) {
+			  const finished = this.calcPercent(playTime, duration) >= Number(config?.answerRate || 100);
+			  return finished;
+			},
+			
+			// 策略2:完课且最后一分钟可领(第二次进来只看是否已完课)
+			shouldShowByLastMinute({ isEnded, isFinish, playTime, duration }) {
+			  const alreadyDone = isEnded || isFinish == 1;          // 已完课
+			  const inLastMinute = playTime >= (duration || 0) - 60;  // 最后一分钟
+			  return alreadyDone || inLastMinute;
+			},
+			changeTime(that,e) {
+				that.playDurationSeek = 0
+			},
+			videoErrorCallback(e) {
+				this.clearIntegral()
+				this.errorCount++
+				if (this.errorCount > 3) return
+				if (this.interval != null) {
+					clearInterval(this.interval)
+				}
+				this.getErrMsg(e.target.errMsg)
+				this.getH5CourseVideoDetails('error')
+			},
+			// 当开始/继续播放时触发play事件
+			getPlay() {
+				this.errorCount = 0
+				// this.judgeDuration()
+			},
+			getPause() {
+				this.clearIntegral()
+			},
+			getEnded() {
+				this.clearIntegral()
+				this.isEnded = true
+				this.showAnswerTip = true
+				// this.playDurationSeek = 0
+				this.isFinish = 1
+				this.showProgress = true
+				this.getFinishCourseVideo()
+			},
+			fullscreenchange(event) {
+				this.isfull = event.detail.fullScreen
+				if(this.isfull) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.initTracks()
+				}
+			},
+			controlstoggle(event) {
+				this.crtShow =  event.detail.show
+			},
+			getIP() {
+				uni.request({
+					url: 'https://ipinfo.io/json', //仅为示例,并非真实接口地址。
+					method: 'GET',
+					success: (res) => {
+						this.ip = res.data.ip
+					}
+				});
+			},
+			getHeight() {
+				setTimeout(()=>{
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#title-contentnav")
+						.boundingClientRect((data) => {
+							if(data) {
+								this.height =
+									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 75px - 88rpx)`
+							}
+						})
+						.exec();
+				},200)
+			},
+			updateTime() {
+				var that = this;
+				if (this.interval != null) {
+					clearInterval(this.interval)
+				}
+				this.interval = setInterval(function() {
+					that.getFinishCourseVideo()
+					that.getInternetTraffic()
+				}, 60000);
+			},
+			judgeDuration() {
+				var that = this;
+				if (this.intervalIntegral != null) {
+					clearInterval(this.intervalIntegral)
+					this.intervalIntegral = null
+				}
+				// 观看10分钟获得积分
+				this.intervalIntegral = setInterval(function() {
+					that.getIntegralByH5Video()
+				}, 600000);
+			},
+			clearIntegral() {
+				if (this.intervalIntegral != null) {
+					clearInterval(this.intervalIntegral)
+					this.intervalIntegral = null
+				}
+			},
+			getH5CourseByVideo() {
+				this.loading = true
+				getH5CourseByVideoId({
+					videoId: this.videoId
+				}).then(res => {
+						this.loading = false
+						if (res.code == 200) {
+							this.courseInfo = res.data
+							uni.setNavigationBarTitle({
+								title: this.courseInfo && this.courseInfo.title ? this.courseInfo.title : ''
+							});
+						}
+						this.getHeight()
+						this.$nextTick(()=>{
+							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
+							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
+						})
+					},
+					rej => {
+						this.loading = false
+					}
+				).catch(() => {
+					this.loading = false
+				})
+			},
+			getH5CourseVideoDetails(type) {
+				getH5CourseVideoDetails(this.urlOption).then(res => {
+						if (res.code == 200) {
+							this.config = res.config || {}
+							this.courseLogo = res.config&&res.config.courseLogo
+							this.isFinish = res.isFinish || 0
+							this.duration = res.course && res.course.duration ? res.course.duration : 0
+							this.playDuration = res.playDuration || 0
+							this.tipsTime = res.tipsTime || 0
+							const showTreatmentFlag = res.course&&res.course.showProduct!=null ? res.course.showProduct : 1
+							this.treatmentPackage = res.course&&res.course.fsStoreProductScrms ? res.course.fsStoreProductScrms : []
+							this.showTreatment = showTreatmentFlag==0&&this.treatmentPackage.length>0 ? 0 : 1;
+							let lineList = []
+							if (res.course && res.course.lineOne) {
+								lineList.push(res.course.lineOne)
+							}
+							if (res.course && res.course.lineTwo) {
+								lineList.push(res.course.lineTwo)
+							}
+							if (res.course && res.course.lineThree) {
+								lineList.push(res.course.lineThree)
+							}
+							this.lineList = lineList
+							this.viewCommentNum = res.config&&res.config.viewCommentNum || 200
+		
+							const status = res.config&&res.config.openCommentStatus || 3
+							if(status != this.openCommentStatus) {
+								if(this.openCommentStatus != 3 && status==3) {
+									this.$refs.commentBox&&this.$refs.commentBox.closeWSocket()
+									this.$refs.danmuBox&&this.$refs.danmuBox.closeWSocket()
+								}
+								this.openCommentStatus = this.isOpen == 1 ? 3: status
+							}
+							this.currentTab = 1
+							if(this.openCommentStatus!=2 || this.showDanmu!=1) {
+								this.activeDanmus = []
+							}
+							if (!this.player || type == 'error') {
+								this.lineIndex = this.config.defaultLine
+								this.videoUrl = lineList[this.lineIndex]
+								this.poster= res.course && res.course.imgUrl ? res.course.imgUrl : ''
+								// this.options.sources = [{
+								// 	src: this.videoUrl
+								// }]
+								// this.options.poster = res.course && res.course.imgUrl ? res.course.imgUrl : ''
+								// this.initVideo()
+								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
+								this.playDurationSeek = this.playTime
+								setTimeout(()=>{
+									this.player = uni.createVideoContext('video-content-box');
+									this.player.seek(this.playTime)
+									this.player.play();
+								},500);
+							} else {
+								// let div = document.querySelector(".vjs-progress-control");
+								// if(div) {
+								// 	if (this.isFinish == 1 || this.isEnded || this.videolinkType == 1) {
+								// 		div.style.pointerEvents = "auto";
+								// 	} else {
+								// 		div.style.pointerEvents = "none"; //禁止所有事件
+								// 	}
+								// }
+								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
+								this.playDurationSeek = this.playTime
+								this.player.seek(this.playTime)
+								this.player.play();
+							}
+							this.updateTime();
+							this.quesList = res.questions && res.questions.length > 0 ? res.questions : [],
+								this.quesList = this.quesList.map(item => ({
+									...item,
+									questionOption: JSON.parse(item.question),
+									answer: ''
+								}))
+						}
+						this.getHeight()
+						this.$nextTick(()=>{
+							this.$refs.descInfo&&this.$refs.descInfo.getDescHeight()
+							this.$refs.descInfoNav&&this.$refs.descInfoNav.getDescHeight()
+						})
+					},
+					rej => {}
+				)
+			},
+			handleAnswer(val) {
+				let {item, option,index} = val
+				if(this.$store.state.answerType == 1) {
+					// 按照完课领红包
+					let rate = 0
+					if(this.isEnded || this.isFinish==1) {
+						rate = 1
+					} else {
+						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
+					}
+					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				} else {
+					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
+					let time = this.playTime
+					if(this.isEnded||this.isFinish==1) {
+						time = this.duration
+					} else {
+						if(time < this.playDuration&&this.isFinish!=1) {
+							// 没完课且小于续播的时间
+							time = this.playDuration
+						}
+					}
+					if(Number(this.duration || 0) == 0 || time < this.duration - 60) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				}
+				 
+				if (this.quesList[index].type == 1) {
+					// 单选option
+					this.quesList[index].answer = option.name
+				} else if (this.quesList[index].type == 2) {
+					// 多选
+					let answer = this.quesList[index].answer ? this.quesList[index].answer.split(',') : []
+					if (answer.indexOf(option.name) === -1) {
+						answer.push(option.name)
+						this.quesList[index].answer = answer.join(',')
+					} else {
+						answer.splice(answer.indexOf(option.name), 1)
+						this.quesList[index].answer = answer.join(',')
+					}
+				}
+			},
+			submit() {
+				if(this.isExpire){
+					uni.showToast({
+						title: '课程已过期或链接无效',
+						icon: 'none'
+					});
+					return
+				}
+				// 登录
+				this.$isLoginCourseAuto().then(
+					res => {
+						if(res){
+							if (this.isAddKf == 1) {
+								// 答题
+								// 您已提交过答案,请领取红包
+								this.courseAnswer()
+							} else {
+								// 添加客服
+								if (this.videoId && this.qwUserId) {
+									this.getIsAddKf()
+								} else {
+									uni.showToast({
+										title: '请添加客服',
+										icon: 'none'
+									})
+								}
+							} 
+						} else{
+							this.goLogin()
+						}
+					},
+					rej => {}
+				);
+			},
+			// 答题
+			courseAnswer() {
+				if(this.$store.state.answerType == 1) {
+					// 按照完课领红包
+					let rate = 0
+					if(this.isEnded || this.isFinish==1) {
+						rate = 1
+					} else {
+						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
+					}
+					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				} else {
+					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
+					let time = this.playTime
+					if(this.isEnded||this.isFinish==1) {
+						time = this.duration
+					} else {
+						if(time < this.playDuration&&this.isFinish!=1) {
+							// 没完课且小于续播的时间
+							time = this.playDuration
+						}
+					}
+					if(Number(this.duration || 0) == 0 || time < this.duration - 60) {
+						uni.showToast({
+							title: "请先观看完整课程再答题哦~",
+							icon: "none"
+						})
+						return
+					}
+				}
+				if (this.quesList.some(item => !item.answer)) {
+					uni.showToast({
+						title: "请确认是否答完所有题目",
+						icon: "none"
+					})
+					return
+				}
+				const questions = this.quesList.map(obj => {
+					const {
+						questionOption,
+						...rest
+					} = obj;
+					return rest;
+				});
+				const param = {
+					...this.urlOption,
+					questions: questions,
+					videoId: this.videoId,
+					duration: this.playTime,
+				}
+				this.errTitle = ""
+				this.errDesc = ""
+				this.errQues = []
+				courseAnswer(param).then(res => {
+						if (res.code == 200) {
+							if (res.incorrectQuestions) {
+								// 答题失败
+								if (res.incorrectQuestions.length > 0) {
+									this.errQues = res.incorrectQuestions
+								}
+								this.remain = res.remain || 0
+								if (res.remain > 0) {
+									this.errTitle = "很遗憾答错了"
+									this.errDesc = `<span style="color:#FF5C03">还有${res.remain}次机会,继续加油</span>`
+									this.$refs.answerPopup.open("center")
+								}
+							} else {
+								// 答题成功
+								this.errTitle = "恭喜你,回答正确"
+								this.errDesc = `请选择奖励`
+								// this.$refs.answerPopup.open("center")
+								if(this.isOpen==1) {
+									this.$refs.answerPopup.open("center")
+									return
+								}
+								this.closeAnswerPopup(1)
+							}
+						} else {
+							if (res.msg == "该课题到达答错次数限制") {
+								this.errTitle = "答题次数超过限制"
+								this.errDesc = "以后的课程要认真学习哦"
+								this.$refs.answerPopup.open("center")
+							} else {
+								uni.showToast({
+									title: res.msg,
+									icon: "none"
+								})
+							}
+						}
+					},
+					rej => {}
+				)
+			},
+			// 选择
+			rewardChange(e) {
+				this.currentReward = e.detail.value
+			},
+			closeAnswerPopup(type) {
+				this.$refs.answerPopup.close()
+				if(this.isOpen==1) {
+					return
+				}
+				if (this.errTitle == '恭喜你,回答正确') {
+					let param = {
+						...this.urlOption,
+						rewardType: Number(this.currentReward),
+						source: 2,
+						appId: this.appid
+					}
+					if(type==1) {
+						param = {
+							...this.urlOption,
+							source: 2,
+							appId: this.appid
+						}
+					}
+					sendReward(param).then(res => {
+						if(res.isNew&&res.isNew==1) {
+							const packageInfo = res.data.packageInfo || ''
+							if(packageInfo) {
+								uni.setStorageSync('receive_package',packageInfo);
+								if(res.mchId) uni.setStorageSync('mchId',res.mchId);
+								uni.navigateTo({
+									url: '/pages_course/reward'
+								})
+							}
+						} else {
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							})
+						}
+					})
+				}
+			},
+			// 线路
+			openPop() {
+				this.$refs.popup.open('bottom')
+			},
+			close() {
+				this.$refs.popup.close()
+			},
+			handleLine(index) {
+				var that=this;
+				if (this.lineIndex == index && this.videoUrl == this.lineList[index]) {
+					this.close()
+					return
+				} else {
+					// let div = document.querySelector(".vjs-progress-control");
+					// if(div) {
+					// 	if (this.isFinish == 1 || this.isEnded || this.videolinkType == 1) {
+					// 		div.style.pointerEvents = "auto";
+					// 	} else {
+					// 		div.style.pointerEvents = "none"; //禁止所有事件
+					// 	}
+					// }
+					this.lineIndex = index
+					this.videoUrl = this.lineList[index]
+					this.tipsOpen = false
+					this.playDurationSeek = this.playTime || 0
+					this.player = uni.createVideoContext('video-content-box');
+					setTimeout(function(){
+						that.player.seek(that.playDurationSeek)
+						that.player.play();
+					},500);
+					// this.player.src(this.lineList[index])
+					// this.player.one('loadedmetadata', () => {
+					// 	this.player.currentTime(this.playDurationSeek);
+					// 	this.player.play();
+					// });
+					this.close()
+				}
+
+			},
+			// 温馨提示
+			openTipsPop() {
+				this.$refs.tipsPopup.open()
+				this.tipsOpen = true
+				this.pause()
+			},
+			closeTipsPop() {
+				this.$refs.tipsPopup.close()
+			},
+			// 客服
+			getIsAddKf() {
+				this.qrcode = ''
+				this.qrcodeMsg = ''
+				this.isAddKf = 0
+				// {videoId: this.videoId,qwUserId: this.qwUserId,corpId: this.corpId}
+				getIsAddKf(this.urlOption).then(res => {
+						if (res.code == 200) {
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+						} else if (res.code == 400) {
+							this.isAddKf = 0
+							this.qrcode = res.qrcode
+							this.qrcodeMsg = res.msg
+							this.$refs.kfPopup.open()
+							this.initExpiration(res.msg,res.code)
+						} else if (res.code == 504) {
+							// 登录
+							this.goLogin()
+							this.initExpiration(res.msg,res.code)
+						} else if (res.code == 566) {
+							// 官方群发通用链接
+							const url = res.courseLink.realLink.split('?course=')[1]
+							this.urlOption = JSON.parse(url)
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+							// this.initExpiration(res.msg,res.code)
+						} else if (res.code == 567) {
+							// 群聊通用链接
+							this.urlOption = {
+								...this.urlOption,
+								qwExternalId: res.qwExternalId
+							}
+							this.isAddKf = 1
+							this.getH5CourseVideoDetails()
+							// this.initExpiration(res.msg,res.code)
+						} else {
+							this.isAddKf = 0
+							uni.showToast({
+								title: res.msg,
+								icon: 'none'
+							});
+							this.initExpiration(res.msg,res.code)
+						}
+					},
+					err => {}
+				);
+			},
+			initExpiration(resMsg,resCode) {
+				if(resCode==401) return;
+				this.resMsg = resMsg
+				this.resCode = resCode
+				this.showExpiration = true
+			},
+			closeKFPop() {
+				this.$refs.kfPopup.close()
+			},
+			getFinishCourseVideo() {
+				if (!this.playTime || this.isAddKf!=1 ||!this.isLogin) return
+				// {videoId: this.videoId,duration:this.playTime}
+				const param = {
+					duration: this.playTime,
+					...this.urlOption
+				}
+				getFinishCourseVideo(param)
+			},
+			// 每十分钟获得积分
+			getIntegralByH5Video() {
+				if(this.isAddKf!=1||!this.isLogin) return
+				const param = {
+					duration: this.playTime,
+					...this.urlOption
+				}
+				getIntegralByH5Video(param).then(res => {
+					if (res.code == 200) {
+						uni.showToast({
+							title: "积分+10",
+							icon: "none"
+						})
+					}
+				})
+			},
+			progressChange(e) {
+				this.bufferRate = Math.ceil(e.detail.buffered)
+			},
+			// 缓冲
+			getInternetTraffic() {
+				if(!this.isLogin||this.isAddKf!=1) return
+				const playVideoTime = Math.ceil(this.playTime / this.duration * 100) // 播放百分比
+				if(this.bufferRate == 0 || this.bufferRate < playVideoTime) {
+					this.bufferRate = playVideoTime
+				}
+				if(this.bufferRate == 0 || Number(this.bufferRate.toFixed(2)) == 0) return
+				const param = {
+					...this.urlOption,
+					uuId: dayjs().format('YYYYMMDD') + this.uuId,
+					duration: this.playTime,
+					bufferRate: Number(this.bufferRate.toFixed(2)),
+				}
+				if(!param.bufferRate) return
+				getInternetTraffic(param)
+			},
+			getErrMsg(err) {
+				let msgerr = {
+					videoUrl: this.videoUrl,
+					lineIndex: this.lineIndex,
+					errTime: new Date(),
+					ip: this.ip,
+					errMsg: err
+				}
+				getErrMsg({
+					msg: JSON.stringify(msgerr)
+				})
+			},
+			goLogin(data) {
+				console.log(this.isSpare,'this.isSpare')
+				if(data || this.isSpare==1) {
+					this.loginFsUserWx(data)
+					return
+				}
+				let provider = 'weixin'
+				uni.login({
+					provider: provider,
+					success: async loginRes => {
+						uni.getUserInfo({
+						   provider: provider,
+						   success: (infoRes)=> {
+							    uni.showToast({
+									title: '处理中...',
+									icon: 'loading'
+							    });
+								loginByMp({
+									code: loginRes.code,
+									encryptedData:infoRes.encryptedData,
+									iv:infoRes.iv,
+									appId: this.appid
+								}).then(res=>{
+									 uni.hideLoading();
+									 if (res.code == 200) {
+										this.$store.commit('setCoureLogin', 1);
+										uni.setStorageSync(TOKEN_KEYAuto, res.token);
+										uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
+										this.user = res.user
+										this.isLogin = true
+										console.log("TOKEN_KEYAuto",TOKEN_KEYAuto)
+										this.getIsAddKf() 
+									 } else {
+										uni.showToast({
+											title: res.msg,
+											icon: 'none'
+										});
+									 }
+								 }).catch(err=>{
+									uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录失败,请重新登录",
+									});
+								});
+						   }
+						});
+					}
+				})
+			},
+			getLink() {
+				let that = this;
+				this.msg = ''
+				if(this.isOpen==1) {
+					if (this.isLogin && this.isAddKf == 1) {
+						this.getH5CourseVideoDetails()
+					}
+					if (this.videoId &&this.isAddKf != 1) {
+						this.$isLoginCourseAuto().then(
+							isLogin => {
+								this.isLogin = isLogin
+								if(isLogin){
+									this.getIsAddKf() 
+								} else {
+									this.goLogin()
+								}
+							},
+							rej => {}
+						);
+					}
+					return
+				}
+				getRealLink({sortLink:this.sortLink}).then(res=>{
+					if(res.code == 200) {
+						this.isExpire = false
+						// 如果响应中包含真实链接,则跳转到真实链接
+						// window.location.href = res.realLink +"&sortLink="+this.sortLink+"&code="+this.code+"&time="+new Date().getTime()
+						if (this.isLogin && this.isAddKf == 1) {
+							this.getH5CourseVideoDetails()
+						}
+						if (this.videoId &&this.isAddKf != 1) {
+							this.$isLoginCourseAuto().then(
+								isLogin => {
+									this.isLogin = isLogin
+									if(isLogin){
+										this.getIsAddKf() 
+									} else {
+										this.goLogin()
+									}
+								},
+								rej => {}
+							);
+						}
+					} else {
+						this.isExpire = true
+						this.msg = '课程已过期或链接无效'
+						uni.showToast({
+							title: '课程已过期或链接无效',
+							icon: 'none'
+						});
+					}
+				}).catch(err=>{
+					this.isExpire = true
+					this.msg = '发生错误,请稍后再试'
+					uni.showToast({
+						title: '发生错误,请稍后再试',
+						icon: 'none'
+					});
+				})
+			},
+			/**
+			 * 节流原理:在一定时间内,只能触发一次
+			 *
+			 * @param {Function} func 要执行的回调函数
+			 * @param {Number} wait 延时的时间
+			 * @param {Boolean} immediate 是否立即执行
+			 * @return null
+			 */
+			throttle(func, wait = 1000, immediate = true) {
+			    if (immediate) {
+			        if (!this.flag) {
+			            this.flag = true
+			            // 如果是立即执行,则在wait毫秒内开始时执行
+			            typeof func === 'function' && func()
+			            this.timer = setTimeout(() => {
+			                this.flag = false
+			            }, wait)
+			        }
+			    } else if (!this.flag) {
+			        this.flag = true
+			        // 如果是非立即执行,则在wait毫秒内的结束处执行
+			        this.timer = setTimeout(() => {
+			            this.flag = false
+			            typeof func === 'function' && func()
+			        }, wait)
+			    }
+			},
+			// 弹幕
+			openDanmu(type) {
+				this.openDanmuType = type
+				this.inputText = ''
+				if(type == 1) {
+					this.player.exitFullScreen()
+				}
+				this.$refs.danmuPopup.open()
+			},
+			changeShowPopup(val) {
+				this.focus = val.show
+			},
+			switchDanmu() {
+				this.showDanmu = this.showDanmu == 1 ? 0:1
+				if(this.showDanmu == 0&&this.$refs.danmuBox) {
+					this.$refs.danmuPopup.close()
+					this.activeDanmus = []
+					this.$refs.danmuBox.activeDanmus = []
+					this.$refs.danmuBox.initTracks()
+				}
+			},
+			getScrollTop(res) {
+				if(this.currentTab == 2) {
+					this.scrollTop = res
+				} else {
+					this.scrollTop = 0
+				}
+			},
+			handleTab(index) {
+				this.currentTab = index
+				if(this.currentTab==2) {
+					if(this.$refs.commentBox) {
+						this.$refs.commentBox.msgs = []
+						this.$refs.commentBox.pageNum = 1
+						this.$refs.commentBox.getCommentsFun()
+					}
+				} else {
+					setTimeout(()=>{
+						this.scrollTop = 0
+					},100)
+				}
+			},
+			handleRefresher() {
+				this.triggered = true;
+				if (!this.isMore&&this.currentTab==2&&this.openCommentStatus==1) {
+					this.$nextTick(()=>{
+						this.$refs.commentBox&&this.$refs.commentBox.getCommentsFun()
+					})
+				}
+				setTimeout(() => {
+					this.triggered = false;
+				}, 500);
+			},
+			getMore(val) {
+				this.triggered = false;
+				this.isMore = val == 1
+			},
+			handleChatInput() {
+				this.inputText = this.inputText.trim()
+				if (this.inputText == "" || this.inputText.trim() == "") {
+					uni.showToast({
+						title: '请输入评论',
+						icon: "none"
+					})
+					return;
+				}
+				if(this.openCommentStatus==1) {
+					this.$refs.commentBox&&this.$refs.commentBox.handleInput(this.inputText)
+				} else if(this.openCommentStatus==2) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.handleInput(this.inputText)
+				}
+			},
+			setInputText() {
+				this.inputText = ""
+				if(this.openCommentStatus==2) {
+					this.$refs.danmuPopup.close()
+				}
+			},
+			getActiveDanmus(val) {
+				this.activeDanmus = val.map(item=>({
+					...item,
+					danmustyle: {
+						top: item.top + 'px',
+						...item.style, 
+						'animation-duration': '8s'
+					}
+				}))
+			},
+			animationend(moveItem, i) {
+				// 移除动画结束的弹幕(性能优化)
+				if(this.openCommentStatus==2) {
+					this.$refs.danmuBox&&this.$refs.danmuBox.animationend(moveItem, i)
+				}
+			},
+			navback() {
+				const pages = getCurrentPages(); // 获取当前页面栈
+				if (pages.length > 1) {
+				   uni.navigateBack(); // 有上一页才返回
+				} else { 
+				  // 如果是首页,跳转到某个默认页面(如首页)
+				  uni.reLaunch({ url: '/pages/index/index' }); // 或者用 switchTab 如果是 tabBar 页面
+				}
+			},
+			feedback() {
+				const userId = this.user.userId || ''
+				const courseId = this.urlOption.courseId || ''
+				const videoId = this.urlOption.videoId || ''
+				const companyId = this.urlOption.companyId || ''
+				const companyUserId = this.urlOption.companyUserId || ''
+				uni.navigateTo({
+					url: './feedback?userId='+userId+'&courseId='+courseId+'&videoId='+videoId+'&companyId='+companyId+'&companyUserId='+companyUserId
+				})
+			},
+			// 公开课登录\备用登录
+			async loginFsUserWx(data){
+				if(data){
+					console.log('huoqu1222',data)
+					uni.showLoading({
+						title: '登录中'
+					})
+					uni.login({
+						provider: "weixin",
+						success: async loginRes => {
+							console.log(loginRes)
+							let code = loginRes.code // 获取开发code
+							handleFsUserWx({
+							   code: code,
+							   appId:this.appid,
+							   userId:data.userId
+							})
+							.then( res => {
+								uni.hideLoading();
+								if(res.code==200){
+									console.log("loginFsUserWx:",res)
+									// this.userinfos=uni.getStorageSync('userinfos')
+									let token = uni.getStorageSync('TOKEN_WEXIN');
+									let user = uni.getStorageSync('userInfo')
+									// this.userInfo=uni.getStorageSync('userInfo');
+									// this.isLogin = true
+									uni.setStorageSync(TOKEN_KEYAuto, token);
+									uni.setStorageSync('auto_userInfo', JSON.stringify(user));
+									this.user = user
+									this.isLogin = true
+									this.getIsAddKf() 
+								}else if(res.code==406){
+									uni.showToast({
+										icon:'none',
+										title: '该用户已成为其他销售会员',
+									});
+								}else{
+									uni.showToast({
+										icon:'none',
+										title: res.msg,
+									});
+								}
+							   
+							 })
+						},
+					})
+				}else{
+					uni.setStorageSync('H5course',{
+						companyId: this.urlOption.companyId,
+						companyUserId:this.urlOption.companyUserId,
+						type: 1, //1自动,其他手动
+					})
+					await this.$store.dispatch('getWebviewUrl');
+					uni.navigateTo({
+						url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
+					})
+				}
+			},
+			showBtnType(value) {
+				this.showBtn = value
+				this.getHeight()
+			},
+			getHeight() {
+				setTimeout(()=>{
+					const query = uni.createSelectorQuery().in(this);
+					query
+						.select("#title-contentnav")
+						.boundingClientRect((data) => {
+							if(data) {
+								const footerH = this.showBtn==0? 75: 0
+								this.height =
+									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - ${footerH}px - 88rpx)`
+							}
+						})
+						.exec();
+				},200)
+			},
+		}
+	}
+</script>
+
+<style scoped>
+.full-width-popup {
+  width: 100%;
+}
+</style>
+<style lang="scss" scoped>
+	@mixin u-flex($flexD, $alignI, $justifyC) {
+		display: flex;
+		flex-direction: $flexD;
+		align-items: $alignI;
+		justify-content: $justifyC;
+	}
+	.footer-tips {
+		margin-top: 14rpx;
+		text-align: center;
+		font-family: PingFang SC,PingFang SC;
+		font-weight: 500;
+		font-size: 12px;
+		color: #bbb;
+	}
+	.textOne {
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+	}
+
+	.textTwo {
+		overflow: hidden;
+		text-overflow: ellipsis;
+		display: -webkit-box;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+	}
+	.header-nav {
+		height: 88rpx;
+		@include u-flex(row, center, flex-start);
+		overflow: hidden;
+		background-color: #fff;
+		box-sizing: border-box;
+		.header-title {
+			text-align: center;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			padding: 0 10rpx 0 100rpx;
+			font-family: PingFang SC,PingFang SC;
+			font-weight: 500;
+			font-size: 15px;
+			color: #000;
+			box-sizing: border-box;
+		}
+	}
+	.reward-list {
+		width: 100%;
+		margin-top: 20rpx;
+		margin-bottom: -40rpx;
+
+		&-group {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #222222;
+			@include u-flex(row, center, center);
+		}
+
+		&-option {
+			@include u-flex(row, center, flex-start);
+
+			&:first-child {
+				margin-right: 40rpx;
+			}
+		}
+	}
+
+	.err {
+		color: #f56c6c !important;
+	}
+
+	.kfqrcode-box {
+		background-color: #fff;
+		border-radius: 16rpx;
+		max-width: 560rpx;
+		padding: 60rpx 40rpx;
+		margin-top: -100rpx;
+		box-sizing: border-box;
+		@include u-flex(column, center, flex-start);
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 400;
+		font-size: 34rpx;
+		color: #222;
+		position: relative;
+		text-align: center;
+
+		.kfqrcode {
+			height: 460rpx;
+			width: 460rpx;
+		}
+	}
+
+	.kfqrcode-close {
+		width: 64rpx;
+		height: 64rpx;
+		position: absolute;
+		bottom: -100rpx;
+		left: 50%;
+		transform: translateX(-50%);
+	}
+
+	.tipsPopup-mask {
+		position: relative;
+		width: 560rpx;
+		background-color: transparent;
+
+		.red_envelope_top {
+			width: 480rpx;
+			height: 360rpx;
+			margin: 0 auto;
+			display: inherit;
+		}
+	}
+
+	.tipsPopup-btn-box {
+		width: 456rpx;
+		height: 104rpx;
+		padding: 4rpx;
+		box-sizing: border-box;
+		background: linear-gradient(180deg, rgba(252, 209, 94, 1), rgba(254, 253, 251, 1));
+		border-radius: 52rpx;
+	}
+
+	.tipsPopup-btn {
+		width: 100%;
+		height: 100%;
+		background: linear-gradient(180deg, #FF9F22 0%, #FA1E05 100%);
+		border-radius: 52rpx 52rpx 52rpx 52rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 36rpx;
+		color: #FFFFFF;
+		line-height: 96rpx;
+		text-align: center;
+	}
+
+	.tipsPopup {
+		width: 560rpx;
+		padding: 12rpx;
+		margin-top: -72rpx;
+		box-sizing: border-box;
+		background: linear-gradient(180deg, #FFFBEF 0%, #FFFFF5 43%, #F5EAC2 100%);
+		border-radius: 32rpx 32rpx 32rpx 32rpx;
+		position: relative;
+
+		&-close {
+			width: 64rpx;
+			height: 64rpx;
+			position: absolute;
+			right: 0;
+			top: -188rpx;
+		}
+
+		&-line {
+			padding: 3rpx;
+			box-sizing: border-box;
+			background: linear-gradient(180deg, rgba(247, 245, 220, 1), rgba(250, 220, 157, 1));
+			border-radius: 24rpx;
+		}
+
+		&-box {
+			padding: 0 40rpx 40rpx 40rpx;
+			box-sizing: border-box;
+			background: linear-gradient(180deg, #FFFBEF 0%, #FFFFF5 43%, #F5EAC2 100%);
+			border-radius: 24rpx;
+			@include u-flex(column, center, flex-start);
+		}
+
+		&-head {
+			@include u-flex(row, center, center);
+
+			&-title {
+				width: 364rpx;
+				height: auto;
+				margin-top: -22rpx;
+			}
+		}
+
+		&-content {
+			margin: 48rpx 0;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #222222;
+			text-align: center;
+
+			&-title {
+				margin-bottom: 26rpx;
+				font-weight: 600;
+				font-size: 40rpx;
+				color: #FF5C03;
+			}
+		}
+	}
+
+	.video-controls-box {
+		width: 100%;
+		height: 420rpx;
+		overflow: hidden;
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		z-index: 2;
+		background: rgba(0, 0, 0, 0.2);
+
+		.video-play {
+			height: 72rpx;
+			width: 72rpx;
+			position: absolute;
+			top: 50%;
+			left: 50%;
+			transform: translate(-50%, -50%);
+		}
+	}
+
+	.video-controls {
+		width: 100%;
+		height: 80rpx;
+		padding: 0 28rpx;
+		box-sizing: border-box;
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		background: linear-gradient(to top, #222 0%, transparent 80%);
+
+		.video-icon {
+			height: 44rpx;
+			width: 44rpx;
+		}
+	}
+
+	.errQuesbox {
+		width: 100%;
+		max-height: 260rpx;
+		overflow-y: auto;
+		margin-top: 24rpx;
+		font-family: PingFang SC, PingFang SC;
+		font-weight: 500;
+		font-size: 30rpx;
+		color: #222222;
+
+		&-item {
+			width: 100%;
+			height: 128rpx;
+			line-height: 128rpx;
+			margin-bottom: 24rpx;
+			padding: 0 30rpx;
+			box-sizing: border-box;
+			overflow: hidden;
+			background: #fff;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			position: relative;
+
+			&::after {
+				content: "题目";
+				min-width: 64rpx;
+				height: 36rpx;
+				padding: 0 12rpx;
+				line-height: 36rpx;
+				background: #FF5C03;
+				box-sizing: border-box;
+				border-radius: 0rpx 0rpx 16rpx 0rpx;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 500;
+				font-size: 20rpx;
+				color: #fff;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+	}
+
+	.bg {
+		background: #fff !important;
+	}
+
+	.answerPopup {
+		&-box {
+			width: 560rpx;
+			background: linear-gradient(180deg, #FFFAF6 0%, #FEECD8 100%);
+			border-radius: 32rpx 32rpx 32rpx 32rpx;
+			background-color: #fff;
+			font-weight: 400;
+			padding: 32rpx;
+			box-sizing: border-box;
+			position: relative;
+			@include u-flex(column, center, flex-start);
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+
+			.tipimg {
+				width: 206rpx;
+				height: 206rpx;
+				margin-bottom: 16rpx;
+			}
+		}
+
+		&-title {
+			font-weight: 600;
+			font-size: 36rpx;
+			color: #222222;
+		}
+
+		&-desc {
+			margin-top: 10rpx;
+			font-size: 28rpx;
+			color: #757575;
+		}
+
+		&-btn {
+			width: 464rpx;
+			height: 84rpx;
+			margin-top: 54rpx;
+			margin-bottom: 16rpx;
+			background: #FF5C03;
+			border-radius: 42rpx;
+			font-weight: 500;
+			font-size: 32rpx;
+			color: #FFFFFF;
+			text-align: center;
+			line-height: 84rpx;
+		}
+	}
+
+	.popupbox {
+		width: 100%;
+		background-color: #fff;
+		border-radius: 16rpx 16rpx 0 0;
+		padding: 24rpx 32rpx;
+		position: relative;
+
+		&-head {
+			height: 60rpx;
+			margin-bottom: 30rpx;
+			text-align: center;
+			overflow-y: auto;
+			color: #414858;
+			font-size: 32rpx;
+			font-weight: bold;
+			position: relative;
+
+			.close-icon {
+				position: absolute;
+				right: 0;
+				top: 0;
+				height: 40rpx;
+				width: 40rpx;
+			}
+		}
+
+		&-content {
+			height: 20vh;
+			overflow-y: auto;
+			display: flex;
+			align-items: flex-start;
+			flex-wrap: wrap;
+			gap: 32rpx;
+
+			.line-item {
+				display: inline-block;
+				min-width: 200rpx;
+				min-height: 60rpx;
+				padding: 0 20rpx;
+				box-sizing: border-box;
+				border-radius: 50rpx;
+				overflow: hidden;
+				background-color: #f7f7f7;
+				text-align: center;
+				color: #414858;
+				font-size: 28rpx;
+				line-height: 60rpx;
+			}
+
+			.line-active {
+				color: #f56c6c !important;
+				background-color: #fef0f0 !important;
+			}
+		}
+	}
+
+	.content {
+		padding-bottom: calc(var(--window-bottom));
+		.video-box {
+			width: 100%;
+			height: 420rpx;
+			overflow: hidden;
+			position: relative;
+
+			#myVideo {
+				width: 100%;
+				height: 100%;
+			}
+		}
+
+		.video-poster {
+			width: 100%;
+			height: 420rpx;
+		}
+
+		.miantitlebox {
+			padding: 30rpx 0;
+			border-bottom: 2rpx solid #F5F7FA;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 36rpx;
+			color: #222222;
+		}
+
+		.subtitlebox {
+			padding: 30rpx 0;
+			border-bottom: 2rpx solid #F5F7FA;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 36rpx;
+			color: #222222;
+		}
+
+		.title-content {
+			padding: 0 32rpx;
+			background-color: #fff;
+			font-size: 28rpx;
+			line-height: 1.6;
+
+			.title {
+				font-size: 36rpx;
+				font-weight: 500;
+				color: #414858;
+			}
+
+			.time-or-subtitle {
+				margin-top: 12rpx;
+				color: #666666;
+			}
+		}
+
+		.video-line {
+			min-width: 140rpx;
+			max-width: 200rpx;
+			height: 60rpx;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			border-radius: 50rpx 0 0 50rpx;
+			overflow: hidden;
+			background-color: #fff;
+			text-align: center;
+			color: #888;
+			font-size: 28rpx;
+			line-height: 60rpx;
+			display: inline-flex;
+			align-items: center;
+			justify-content: center;
+			position: fixed;
+			right: 0;
+			z-index: 9;
+			bottom: calc(var(--window-bottom) + 280rpx);
+			box-shadow: 0 4rpx 10rpx rgba(0, 0, 0, .12);
+		
+			image {
+				flex-shrink: 0;
+				height: 34rpx;
+				width: 34rpx;
+				margin-right: 6rpx;
+			}
+		}
+		.danmu-line {
+			bottom: calc(var(--window-bottom) + 370rpx);
+			word-break: keep-all;
+			.set_image {
+				height: 40rpx;
+				width: 40rpx;
+			}
+		}
+
+		.footer {
+			border-top: 1rpx solid #ededef;
+			background: #fff;
+			width: 100%;
+			position: fixed;
+			bottom: 0;
+			padding: 32rpx;
+			padding-bottom: calc(var(--window-bottom) + 12rpx);
+			box-sizing: border-box;
+			z-index: 9;
+
+			&-btn {
+				width: 100%;
+				height: 98rpx;
+				background: #FF5C03;
+				border-radius: 49rpx 49rpx 49rpx 49rpx;
+				line-height: 98rpx;
+				text-align: center;
+				font-family: PingFang SC, PingFang SC;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #FFFFFF;
+				@include u-flex(row, center, center);
+
+				&-img {
+					flex-shrink: 0;
+					width: 144rpx;
+					height: 144rpx;
+					margin-right: 8rpx;
+					margin-top: -24rpx;
+				}
+			}
+
+			&-btn-border {
+				position: relative;
+
+				&::after {
+					content: "";
+					background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
+					position: absolute;
+					top: -2rpx;
+					left: 0;
+					height: 103rpx;
+					width: 100%;
+					z-index: -1;
+					border-radius: 49rpx 49rpx 49rpx 49rpx;
+					box-shadow: 0rpx 8rpx 11rpx 0rpx rgba(255, 92, 3, 0.3);
+					overflow: hidden;
+				}
+			}
+		}
+	}
+
+	.agreement {
+		display: inline-flex;
+		margin-top: 16rpx;
+		font-size: 24rpx;
+		color: #525252;
+		align-items: center;
+		justify-content: center;
+	}
+	 
+	.agreement {
+		display: inline-flex;
+		margin-top: 16rpx;
+		font-size: 24rpx;
+		color: #525252;
+		align-items: center;
+		justify-content: center;
+	}
+	.video-danmu-btnbox {
+		width: 50px;
+		height: 50px;
+		border-radius: 50%;
+		overflow: hidden;
+		position: absolute;
+		right: 10px;
+		bottom: calc(50% - 50px);
+		transform: translateY(-50%);
+		padding: 8px;
+		box-sizing: border-box;
+	}
+	.video-danmu-image {
+		width: 100%;
+		height: 100%;
+	}
+	.danmuPopup {
+		background-color: #fff;
+		padding-bottom: calc(var(--window-bottom) + 10px);
+		.u-border {
+			flex: 1;
+			@include u-flex(row,center,flex-start);
+			padding: 0 10rpx;
+			border-radius: 6px;
+			border: 1rpx solid #eee;
+		}
+		&-head {
+			width: 100%;
+			padding: 10px;
+			box-sizing: border-box;
+			overflow: hidden;
+			@include u-flex(row,center,flex-start);
+			.danmu-icon {
+				height: 24px;
+				width: 24px;
+				margin-right: 12px;
+			}
+		}
+		&-input {
+			flex: 1;
+			height: 35px;
+		}
+		&-send {
+			flex-shrink: 0;
+			height: 35px;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			padding: 5px 15px;
+			box-sizing: border-box;
+			background: #FF5C03 !important;
+			border-radius: 22px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 500;
+			font-size: 15px;
+			color: #fff !important;
+			margin-left: 12px;
+			&::after {
+				border: none;
+			}
+		}
+		&-con {
+			background-color: #F5F7FA;
+			padding: 24px 12px 48px 12px;
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 14px;
+			color: #757575;
+		}
+	}
+	.danmu-icon{
+		height: 24px;
+		width: 24px;
+		margin-right: 12px;
+	}
+	.logo {
+		display: inline-block;
+		width: 30px;
+		height: auto;
+		margin: 20px 0 0 10px;
+		pointer-events: none;
+		object-fit: cover;
+	}
+	.logo-full {
+		display: inline-block;
+		width: 40px;
+		height: auto;
+		margin: 50px 0 0 30px;
+		pointer-events: none;
+		object-fit: cover;
+	}
+	.tabbox {
+		@include u-flex(row, center, center);
+		border-bottom: 2rpx solid #F5F7FA;
+		height: 44px;
+		background-color: #fff;
+		view {
+			flex: 1;
+			padding: 20rpx 0;
+			margin-right: 40rpx;
+			text-align: center;
+		}
+		&-active {
+			position: relative;
+			&::after {
+				position: absolute;
+				bottom: 0;
+				left: 50%;
+				transform: translateX(-50%);
+				content: "";
+				width: 3rem;
+				border-bottom: 4px solid #FF5C03;
+			}
+		}
+	}
+	.chatinput {
+		position: fixed;
+		left: 32rpx;
+		right: 32rpx;
+		z-index: 999;
+		height: 96rpx;
+		background-color: green;
+		background: #FFFFFF;
+		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		@include u-flex(row, center, center);
+		padding: 0 24rpx;
+		box-sizing: border-box;
+		.uni-input {
+			flex: 1;
+			margin-right: 32rpx;
+			font-size: 30rpx;
+		}
+	
+		.send {
+			font-family: PingFang SC, PingFang SC;
+			font-weight: 400;
+			font-size: 28rpx;
+			color: #FFFFFF !important;
+			flex-shrink: 0;
+			padding: 0 20rpx;
+			height: 72rpx;
+			background: #FF5C03 !important;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			&::after {
+				border: none;
+			}
+		}
+	}
+	.answerTip {
+		position: fixed;
+		right: 0;
+		z-index: 9;
+		bottom: calc(var(--window-bottom) + 380rpx);
+		box-shadow: 0rpx 8rpx 21rpx 0rpx rgba(0, 0, 0, 0.1);
+		border-radius: 24rpx 24rpx 24rpx 24rpx;
+		background-color: #ff5c03;
+		color: #fff;
+		border-radius: 50%;
+		height: 90rpx;
+		width: 90rpx;
+		font-size: 25rpx;
+		text-align: center;
+		padding: 10rpx;
+		@include u-flex(column, center, center);
+	}
+	.danmu-item {
+		position: absolute;
+		top: 0;
+		white-space: nowrap;
+		font-size: 16px;
+		height: 20px;
+		display: inline-flex;
+		box-sizing: border-box;
+		align-items: center;
+	}
+	.danmuMove {
+		// animation: mymove 8s linear forwards;
+		// animation-duration: 8s;
+		animation-timing-function: linear;
+		animation-delay: 0s;
+		animation-iteration-count: 1;
+		animation-direction: normal;
+		animation-fill-mode: forwards;
+		animation-play-state: running;
+		animation-name: mymove;
+		will-change: transform;
+	}
+	
+	@keyframes mymove {
+		from {
+			transform: translateX(100vw);
+		}
+	
+		to {
+			transform: translateX(-100%);
+		}
+	}
+	.arrow-left-warning {
+		position: absolute;
+		left: 24rpx;
+		height: 88rpx;
+		overflow: hidden;
+		color: #888;
+		font-size: 24rpx;
+		@include u-flex(column, center, center);
+		image {
+			flex-shrink: 0;
+			height: 36rpx;
+			width: 36rpx;
+		}
+	}
+</style>

+ 642 - 147
pages_course/video.vue

@@ -1,7 +1,7 @@
 <!-- 自动发课看课页面 -->
 <template>
 	<view class="content">
-		<view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
+		<!-- <view class="header-nav" :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
 			<view class="arrow-left-warning" @click="navback" v-if="isOpen==1">
 				<u-icon name="arrow-left" size='22' color="#222" bold></u-icon>
 			</view>
@@ -10,10 +10,10 @@
 				<text>投诉</text>
 			</view>
 			<view class="header-title" :style="{width:menuButtonLeft + 'px',height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">{{courseInfo.title}}</view>
-		</view>
+		</view> -->
 		<view class="video-box">
-			<image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill">
-			</image>
+			<!-- <image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill">
+			</image> -->
 			<video 
 			@timeupdate="onTimeUpdate" 
 			@progress="progressChange" 
@@ -35,20 +35,52 @@
 			:picture-in-picture-mode="[]"
 			:show-background-playback-button="false"
 			:src="videoUrl">
+			<!-- 完课积分倒计时 -->
+			<cover-view v-if="remainTime > 0" class="progress-countdown">
+				<cover-view class="progress-title">完课积分</cover-view>
+				<!-- <cover-view class="progress-bar-bg">
+					<cover-view class="progress-bar-fill" :style="{ width: countdownPercentage + '%' }"></cover-view>
+				</cover-view> -->
+				<cover-view class="progress-text">
+					<cover-view class="progress-text-label">倒计时</cover-view>
+					<cover-view style="font-size: 13px;">{{ formattedCountdown.hours||'00' }}:{{ formattedCountdown.minutes||'00' }}:{{ formattedCountdown.seconds||"00" }}</cover-view>
+				</cover-view>
+			</cover-view>
 			<!-- logo -->
 				<!-- 弹幕展示 -->
-				<template v-if="showDanmu==1&&openCommentStatus==2">
+				<!-- <template v-if="showDanmu==1&&openCommentStatus==2">
 					<text v-for="(item, index) in activeDanmus" :key="item.commentId" class="danmu-item danmuMove"
 						:style="item.danmustyle" @animationend="animationend(item,index)">
 						{{ item.content }}
 					</text>
-				</template>
-				<cover-view class="video-danmu-btnbox" :style="{display: openCommentStatus==2&&isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}">
+				</template> -->
+				<!-- <cover-view class="video-danmu-btnbox" :style="{display: openCommentStatus==2&&isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}">
 					<cover-image class="video-danmu-image" :src="imgPath+'/app/image/danmu_set.png'" @click="openDanmu(1)"></cover-image>
-				</cover-view>
-				<cover-image v-if="courseLogo" :class="isfull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image>
+				</cover-view> -->
+				<!-- <cover-image v-if="courseLogo" :class="isfull?'logo-full':'logo'" :src="courseLogo" mode="widthFix"></cover-image> -->
 			</video>
 		</view>
+		<!-- 商品卡片弹窗 -->
+		<view class="goods-card" v-if="cardPopup && currentCardItem" @click="goBuy(currentCardItem)">
+			<view class="goods-card-inner">
+				<image class="goods-card-img" :src="currentCardItem.images || currentCardItem.image" mode="aspectFill"></image>
+				<view class="goods-card-info">
+					<view class="goods-card-title">{{ currentCardItem.productName || '-' }}</view>
+					<view class="goods-card-bottom">
+						<view class="goods-card-tag">
+							<image class="goods-card-tag-bg" src="/static/images/pbg.png" mode="widthFix"></image>
+							<view class="goods-card-tag-text">惊喜价</view>
+						</view>
+						<view class="goods-card-price">
+							<view class="unit">¥</view>
+							<text class="price">
+								{{ currentCardItem.price && currentCardItem.price.toFixed ? currentCardItem.price.toFixed(2) : (currentCardItem.price || '0.00') }}
+							</text>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
 		<!-- 弹幕方法 -->
 		<commentBox
 			v-if="openCommentStatus==2"
@@ -63,28 +95,28 @@
 			@getScrollTop="getScrollTop"
 			@getMore="getMore"
 			@getActiveDanmus="getActiveDanmus"></commentBox>
-		<view id="title-contentnav">
-			<view class="title-content" v-show="openCommentStatus!=1">
+		<!-- <view id="title-contentnav">
+			<view class="title-content" v-show="openCommentStatus!=1"> -->
 				<!-- 答题时展示小节课程名,其他展示课程名 -->
 				<!-- 小节课程名 -->
-				<view class="subtitlebox" v-if="isLogin&&isAddKf==1">
+				<!-- <view class="subtitlebox" v-if="isLogin&&isAddKf==1">
 					{{courseInfo.title}}
-				</view>
+				</view> -->
 				<!-- 课程名字 -->
-				<view class="miantitlebox" v-else>
+				<!-- <view class="miantitlebox" v-else>
 					{{courseInfo.courseName}}
 				</view>
 			</view>
 			<view class="tabbox" v-if="openCommentStatus==1">
 				<view :class="currentTab == nav.id ? 'tabbox-active':''" v-for="nav in navList" :key="nav.id" @click="handleTab(nav.id)">{{nav.name}}</view>
 			</view>
-		</view>
+		</view> -->
 		<scroll-view
 		class="scroll-view" 
 		:style="{height: height}" 
 		:scroll-top="scrollTop" 
 		:scroll-y="true" 
-		:refresher-enabled="currentTab == 2"
+		:refresher-enabled="currentTab==0"
 		:refresher-triggered="triggered"
 		@refresherrefresh="handleRefresher">
 			<template v-if="openCommentStatus==1">
@@ -106,22 +138,21 @@
 					@getMore="getMore"></commentBox>
 				</view>
 			</template>
-			<view v-show="currentTab==1">
-				<template v-if="openCommentStatus!=1&&(courseInfo.title || courseInfo.description)">
-					<!-- 介绍 -->
+			<!-- <view v-show="currentTab==1"> -->
+				<!-- <template v-if="openCommentStatus!=1&&(courseInfo.title || courseInfo.description)">
 					<descInfo ref="descInfo" :isLogin="isLogin" :isAddKf="isAddKf" :courseInfo="courseInfo"></descInfo>
-				</template>
+				</template> -->
 				<!-- 问题 -->
 				<template v-if="isLogin&&isAddKf==1">
 					<ques ref="ques" source="videoauto" :urlOption="urlOption" :quesList="quesList" :openCommentStatus="openCommentStatus" :treatmentPackage="treatmentPackage" :showTreatment="showTreatment" @handleAnswer="handleAnswer" @showBtnType="showBtnType"></ques>
 				</template>
-			</view>
+			<!-- </view> -->
 		</scroll-view>
 		<!-- 线路 -->
-		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
+		<!-- <view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
 			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
 			<text>线路{{numberToChinese(lineIndex + 1)}}</text>
-		</view>
+		</view> -->
 		<!-- 线路弹窗 -->
 		<uni-popup ref="popup" type="bottom"  class="full-width-popup">
 			<view class="popupbox">
@@ -222,10 +253,10 @@
 			</view>
 		</uni-popup>
 		<!-- 可以答题提示 -->
-		<view class="answerTip" v-if="isLogin&&currentTab!=1&&openCommentStatus==1&&showAnswerTip" @click="handleTab(1)">
+		<!-- <view class="answerTip" v-if="isLogin&&currentTab!=1&&openCommentStatus==1&&showAnswerTip" @click="handleTab(1)">
 			<text>开始</text>
 			<text>答题</text>
-		</view>
+		</view> -->
 		<!-- 客服二维码弹窗 -->
 		<uni-popup ref="kfPopup" type="center" :mask-click="false">
 			<view class="kfqrcode-box">
@@ -235,21 +266,51 @@
 					@click="closeKFPop"></image>
 			</view>
 		</uni-popup>
-		<!-- footer -->
-		<view class="footer" v-show="currentTab!=2&&videoId">
-			<view class="footer-btn" v-if="!isLogin || isAddKf !=1" @click="submit">
-				<text>立即学习</text>
+		<!-- 购物车弹窗 -->
+		<u-popup :show="isCart" @close="closeShop" round="20rpx" bgColor="#fff">
+			<scroll-view class="scroll-view" style="height:500rpx;box-sizing: border-box;padding: 24rpx;" scroll-y="true" enable-flex>
+				<goodsList ref="goodsList" :treatmentPackage="displayProductList" :urlOption="urlOption"></goodsList>
+			</scroll-view>
+		</u-popup>
+		<!-- 更多操作弹窗 -->
+		<u-popup :show="isMore" @close="closeMore" round="20rpx" bgColor="#fff">
+			<view class="more-actions-popup">
+				<view class="more-action-item" @click="navgetTo('/pages_user/user/storeOrder?status=')">
+					<u-icon name="shopping-cart" color="#FF233C" size="40"></u-icon>
+					<view class="action-label">我的订单</view>
+				</view>
+				<view class="more-action-item" @click="navgetTo('/pages_user/user/integralLogsList')">
+					<u-icon name="calendar" color="#FF233C" size="40"></u-icon>
+					<view class="action-label">积分记录</view>
+				</view>
+				<view class="more-action-item" @click="navgetTo('/pages_user/user/integralGoodsList')">
+					<u-icon name="gift" color="#FF233C" size="40"></u-icon>
+					<view class="action-label">兑换好礼</view>
+				</view>
 			</view>
-			<view v-if="currentTab==1&&isLogin&&isAddKf==1&&quesList&&quesList.length>0&&showBtn==0" class="footer-btn footer-btn-border" @click="submit">
-				<text>{{isOpen==1 ? '提交答案':'提交答案领取奖励'}}</text>
+		</u-popup>
+		<!-- footer -->
+		<view class="footer" v-if="videoId">
+			<view class="btns" :style="{'justify-content':isLogin&&isAddKf==1&&!isquestion&&remainTimeReady&&remainTime==0?'space-between':'flex-end'}">
+				<!-- <button
+					class="author-btn"
+					open-type="getPhoneNumber"
+					@getphonenumber="phoneLogin"  v-if="!isquestion&&authType==1">{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button> -->
+				<!-- <button
+					class="author-btn"
+					open-type="getUserInfo" :disabled="userdisabled"
+					@getuserinfo="userInfologin"  v-if="authType==0&&!isquestion">{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button> -->
+				
+				<template v-if="!isquestion">
+					<!-- <button class="author-btn" @click="openList" v-if="isLogin&&isAddKf==1&&isShu">答题</button> -->
+					<button class="author-btn" @click="submit" v-if="isLogin&&isAddKf==1&&remainTimeReady&&remainTime==0">提交答题</button>
+				</template>
+				<button class="author-btn" @click="submit" v-if="!isLogin&&isAddKf!==1">立即学习</button>
+				<view class="author-cart">
+					<image src="/static/images/more2.png" @click="showMore"></image>
+					<image v-if="showTreatment==0"  @click="showCart"  src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/fs/20251231/8376c769d7154f04b13cbec4a76bacf0.png"></image>
+				</view>
 			</view>
-			<!-- <view @click="checked=!checked" class="agreement" v-if="!isLogin">
-				<radio value="r1" :checked="checked" color="#ff5c03" activeBorderColor="#ff5c03"
-					style="transform:scale(0.6);" />
-				<view>阅读并同意<text style="color: #ff5c03;" @click.stop="goWeb(0)">《用户协议》</text>和<text
-						style="color: #ff5c03;" @click.stop="goWeb(1)">《隐私协议》</text></view>
-			</view> -->
-			<!-- <view class="footer-tips">重庆云联融智提供技术支持</view> -->
 		</view>
 		<view v-show="currentTab==2">
 			<view class="chatinput" :style="{bottom:danmuboxHeight>0?danmuboxHeight+'px':'calc(var(--window-bottom) + 24rpx)'}">
@@ -268,6 +329,7 @@
 	import descInfo from "./components/descInfo.vue"
 	import descInfoNav from "./components/descInfoNav.vue"
 	import commentBox from "./components/commentBox.vue"
+	import goodsList from "./components/goodsList.vue"
 	import {TOKEN_KEYAuto,generateRandomString} from '@/utils/courseTool.js'
 	import ykscreenRecord from "@/components/yk-screenRecord/yk-screenRecord.vue"
 	import courseExpiration from './components/courseExpiration.vue'
@@ -290,18 +352,21 @@
 	import {
 		getConfigByKey
 	} from "@/api/user.js"
-	import {handleFsUserWx} from '@/api/courseLook.js'
+	import {handleFsUserWx, getRemainTime} from '@/api/courseLook.js'
 	export default {
 		components: {
 			descInfoNav,
 			descInfo,
 			commentBox,
 			ques,
+			goodsList,
 			ykscreenRecord,
 			courseExpiration
 		},
 		data() {
 			return {
+				displayType:'',
+				isShu:false,//竖屏默认
 				resMsg:"",
 				resCode:'',
 				showExpiration:false,
@@ -424,6 +489,7 @@
 				triggered: false,
 				// 没有更多
 				isMore: false,
+				isCart: false, // 购物车弹窗
 				inputText:"",
 				// 获取最多历史评论条数
 				viewCommentNum: 200,
@@ -438,6 +504,16 @@
 				videoitem:null,
 				showTreatment: 1, // 1不展示,0展示疗法
 				treatmentPackage: [],
+				// 商品上下架/商品卡片弹窗状态
+				displayProductList: [], // 根据上架/下架时间过滤后的展示列表(用于购物车弹窗)
+				cardPopup: false, // 商品卡片弹窗
+				currentCardItem: null,
+				// 完课积分倒计时状态
+				remainTime: 0, // 倒计时(秒)
+				totalRemainTime: 0, // 总倒计时时长(秒,用于计算百分比)
+				countdownTimer: null, // 倒计时定时器
+				remainTimeReady: false, // 是否已从接口拉取到倒计时数据
+				hasReportedAfterCountdown: false, // 倒计时结束后是否已上报一次
 				// 是否公开课
 				isOpen: 0,
 				showBtn: 0
@@ -468,6 +544,14 @@
 			isSpare() {
 				return this.$store.state.isSpare
 			},
+			// 完课积分倒计时展示:格式化后的时间
+			formattedCountdown() {
+				return this.formatCountdown(this.remainTime);
+			},
+			// 完课积分倒计时展示:进度百分比
+			countdownPercentage() {
+				return this.getCountdownPercentage();
+			},
 			...mapGetters(['coureLogin']),
 		},
 		watch: {
@@ -485,6 +569,14 @@
 		},
 		onLoad(option) {
 			this.getWebviewUrl()
+			uni.$on('usercode', (data) => {
+				console.log('huoqu ', data)
+				if(this.isSpare == 1&&data) {
+					this.code=data.code
+					this.goLogin(data)
+				}
+			})
+			this.videoContext = uni.createVideoContext('video-content-box', this)
 			if(!option.course){
 				if(option.videoitem){
 					this.isOpen = 1
@@ -538,7 +630,7 @@
 			}
 		},
 		mounted() {
-			this.getIP()
+			//this.getIP()
 			this.getHeight()
 		},
 		onHide() {
@@ -546,6 +638,7 @@
 			if (this.player) {
 				this.player.pause()
 			}
+			this.stopCountdown()
 			// if (this.interval != null) {
 			// 	clearInterval(this.interval)
 			// 	this.interval = null
@@ -557,6 +650,7 @@
 				clearInterval(this.interval)
 				this.interval = null
 			}
+			this.stopCountdown()
 			this.clearIntegral()
 			// #ifndef H5
 			uni.offKeyboardHeightChange(this.keyboardHeightChange);
@@ -573,12 +667,16 @@
 				clearInterval(this.interval)
 				this.interval = null
 			}
+			this.stopCountdown()
 			this.clearIntegral()
 			// #ifndef H5
 			uni.offKeyboardHeightChange(this.keyboardHeightChange);
 			// #endif
 		},
 		methods: {
+			openList(){
+				this.isShu=!this.isShu
+			},
 			getWebviewUrl() {
 				var data = {
 					key: 'course.config'
@@ -615,6 +713,189 @@
 				this.menuButtonLeft = menuButtonInfo.left
 				this.menuButtonH = menuButtonInfo.height
 			},
+			// 购物车
+			showCart() {
+				this.isCart = true
+			},
+			closeShop() {
+				this.isCart = false
+			},
+			// 更多
+			showMore() {
+				this.isMore = true
+			},
+			closeMore() {
+				this.isMore = false
+			},
+			navgetTo(url) {
+				uni.navigateTo({ url })
+			},
+			// 商品卡片跳转
+			goBuy(item) {
+				if (!item || !item.productId) return
+				uni.navigateTo({
+					url: '/pages/shopping/productDetails?productId=' + item.productId +
+						'&companyId=' + (this.urlOption.companyId || '') +
+						'&companyUserId=' + (this.urlOption.companyUserId || '') +
+						'&courseId=' + (this.urlOption.courseId || '') +
+						'&videoId=' + (this.urlOption.videoId || '') +
+						'&projectId=' + (this.urlOption.projectId || '') +
+						'&periodId=' + (this.urlOption.periodId || '')
+				})
+			},
+			// 倒计时格式化函数
+			formatCountdown(seconds) {
+				const totalSeconds = Math.max(0, Math.floor(Number(seconds) || 0))
+				const hours = Math.floor(totalSeconds / 3600)
+				const remainingAfterHours = totalSeconds % 3600
+				const minutes = Math.floor(remainingAfterHours / 60)
+				const secs = remainingAfterHours % 60
+				return {
+					hours: this.padZero(hours),
+					minutes: this.padZero(minutes),
+					seconds: this.padZero(secs),
+					total: totalSeconds
+				}
+			},
+			getCountdownPercentage() {
+				const total = Number(this.totalRemainTime) || 0
+				if (!total) return 0
+				const remain = Math.max(0, Number(this.remainTime) || 0)
+				const watched = Math.max(0, total - remain)
+				const percentage = (watched / total) * 100
+				return Math.min(100, Math.max(0, Number(percentage.toFixed(2))))
+			},
+			padZero(num) {
+				return num < 10 ? `0${num}` : num.toString()
+			},
+			// 启动完课积分倒计时(仅在播放时递减)
+			startCountdown() {
+				if (!this.remainTimeReady || this.remainTime <= 0 || this.countdownTimer) return
+				this.countdownTimer = setInterval(() => {
+					if (this.remainTime > 0) {
+						this.remainTime--
+					}
+					if (this.remainTime <= 0 && this.countdownTimer) {
+						clearInterval(this.countdownTimer)
+						this.countdownTimer = null
+						if (!this.hasReportedAfterCountdown) {
+							this.hasReportedAfterCountdown = true
+							this.getFinishCourseVideo()
+							this.getInternetTraffic()
+						}
+					}
+				}, 1000)
+			},
+			// 停止完课积分倒计时(暂停/离开页面时调用)
+			stopCountdown() {
+				if (this.countdownTimer) {
+					clearInterval(this.countdownTimer)
+					this.countdownTimer = null
+				}
+			},
+			// 剩余倒计时
+			getRemainTime(userId) {
+				const data = {
+					videoId: this.videoId,
+					fsUserId: userId,
+					courseId: this.urlOption.courseId,
+					projectId: this.urlOption.projectId,
+					periodId: this.urlOption.periodId,
+					companyUserId: this.urlOption.companyUserId
+				}
+				getRemainTime(data).then(res => {
+					if (res.code == 200) {
+						const remain = Number(res.remainTime) || 0
+						this.remainTime = remain
+						this.remainTimeReady = true
+						this.hasReportedAfterCountdown = remain <= 0
+						if (!this.totalRemainTime || remain > this.totalRemainTime) {
+							this.totalRemainTime = remain
+						}
+					} else {
+						this.remainTimeReady = false
+						uni.showToast({
+							icon: 'none',
+							title: res.msg,
+						})
+					}
+				})
+			},
+			// 根据当前播放时间:1)扫描商品栏展示(上架/下架时间)2)控制商品卡片弹窗(弹出/关闭时间)
+			updateProductAndCardDisplay(currentSec) {
+				const toSeconds = (timeStr) => {
+					if (!timeStr || typeof timeStr !== 'string') return 0
+					const parts = timeStr.split(':')
+					if (parts.length !== 3) return 0
+					const h = parseInt(parts[0], 10) || 0
+					const m = parseInt(parts[1], 10) || 0
+					const s = parseInt(parts[2], 10) || 0
+					return h * 3600 + m * 60 + s
+				}
+				const hasValidShelfTime = (timeStr) => {
+					if (!timeStr || typeof timeStr !== 'string') return false
+					if (timeStr === '00:00:00') return false
+					return !!toSeconds(timeStr)
+				}
+
+				if (this.treatmentPackage.length === 0) {
+					this.displayProductList = []
+					this.cardPopup = false
+					this.currentCardItem = null
+					return
+				}
+
+				const sortedTreatmentPackage = this.treatmentPackage.slice().sort((a, b) => {
+					const aOn = hasValidShelfTime(a.onShelfTime) ? toSeconds(a.onShelfTime) : 0
+					const bOn = hasValidShelfTime(b.onShelfTime) ? toSeconds(b.onShelfTime) : 0
+					if (bOn !== aOn) return bOn - aOn
+					const aOff = hasValidShelfTime(a.offShelfTime) ? toSeconds(a.offShelfTime) : 0
+					const bOff = hasValidShelfTime(b.offShelfTime) ? toSeconds(b.offShelfTime) : 0
+					return bOff - aOff
+				})
+
+				const videoDuration = this.duration || 0
+
+				// 1. 商品栏展示:按上架/下架时间过滤
+				this.displayProductList = sortedTreatmentPackage.filter(item => {
+					if (!hasValidShelfTime(item.onShelfTime)) return false
+					const onShelfSec = toSeconds(item.onShelfTime)
+					if (currentSec < onShelfSec) return false
+					const hasOffShelfTime = hasValidShelfTime(item.offShelfTime)
+					if (!hasOffShelfTime) return true
+					const offShelfSec = toSeconds(item.offShelfTime)
+					if (videoDuration > 0 && offShelfSec > videoDuration) return true
+					return currentSec < offShelfSec
+				})
+
+				// 2. 商品卡片弹窗:按弹出/关闭时间查找当前应展示的卡片
+				let activeCard = null
+				let activePopupSec = -1
+				for (let i = 0; i < sortedTreatmentPackage.length; i++) {
+					const item = sortedTreatmentPackage[i]
+					const popupStr = item.cardPopupTime
+					const closeStr = item.cardCloseTime
+					if (!popupStr || popupStr === '00:00:00') continue
+					const popupSec = toSeconds(popupStr)
+					if (!popupSec) continue
+					const closeSec = (closeStr && closeStr !== '00:00:00') ? toSeconds(closeStr) : null
+					if (currentSec >= popupSec && (closeSec == null || currentSec < closeSec)) {
+						// 同时命中多个弹窗时:优先展示“启动时间更晚”的后续弹窗
+						if (popupSec > activePopupSec) {
+							activePopupSec = popupSec
+							activeCard = item
+						} else if (popupSec === activePopupSec && activeCard) {
+							// 上架时间更晚优先(兜底)
+							const activeOn = hasValidShelfTime(activeCard.onShelfTime) ? toSeconds(activeCard.onShelfTime) : 0
+							const itemOn = hasValidShelfTime(item.onShelfTime) ? toSeconds(item.onShelfTime) : 0
+							if (itemOn > activeOn) activeCard = item
+						}
+					}
+				}
+
+				this.cardPopup = !!activeCard
+				this.currentCardItem = activeCard
+			},
 			//播放时间更新事件方法
 			onTimeUpdate(e){
 				let currentTime = Math.round(e.detail.currentTime)
@@ -641,6 +922,9 @@
 						this.$refs.danmuBox&&this.$refs.danmuBox.checkDanmu(this.flagTime)
 					}
 				}
+				// 基于播放时间动态更新商品上/下架列表、商品卡片弹窗,以及完课积分倒计时
+				this.updateProductAndCardDisplay(this.playTime)
+				this.startCountdown()
 			},
 			// 工具函数:保留两位小数的百分比(0~100)
 			calcPercent(play, total) {
@@ -676,12 +960,15 @@
 			getPlay() {
 				this.errorCount = 0
 				// this.judgeDuration()
+				this.startCountdown()
 			},
 			getPause() {
 				this.clearIntegral()
+				this.stopCountdown()
 			},
 			getEnded() {
 				this.clearIntegral()
+				this.stopCountdown()
 				this.isEnded = true
 				this.showAnswerTip = true
 				// this.playDurationSeek = 0
@@ -689,10 +976,32 @@
 				this.showProgress = true
 				this.getFinishCourseVideo()
 			},
-			fullscreenchange(event) {
-				this.isfull = event.detail.fullScreen
-				if(this.isfull) {
-					this.$refs.danmuBox&&this.$refs.danmuBox.initTracks()
+			fullscreenchange(e) {
+				//this.isfull = event.detail.fullScreen
+				// if(this.isfull) {
+				// 	this.$refs.danmuBox&&this.$refs.danmuBox.initTracks()
+				// }
+				const isFullScreen = !!(e && e.detail && e.detail.fullscreen);
+				this.isFull = isFullScreen;
+				// 竖屏课程下:把全屏按钮当作布局切换按钮,禁止原生全屏停留
+				if (this.displayType === 'portrait') {
+					if (e && e.stopPropagation) e.stopPropagation();
+					if (e && e.preventDefault) e.preventDefault();
+					// 只在“进入全屏”时切换,避免 exitFullScreen 触发的 false 事件二次反转
+					if (!isFullScreen || this.fullscreenToggleLock) return;
+					this.fullscreenToggleLock = true;
+					this.isShu = !this.isShu;
+					// 先让布局切换完成,再退出原生全屏,减少抖动闪频
+					setTimeout(() => {
+						if (this.videoContext && this.videoContext.exitFullScreen) {
+							this.videoContext.exitFullScreen();
+						}
+						this.isFull = false;
+						this.fullscreenToggleTimer = setTimeout(() => {
+							this.fullscreenToggleLock = false;
+							this.fullscreenToggleTimer = null;
+						}, 220);
+					}, 40);
 				}
 			},
 			controlstoggle(event) {
@@ -708,18 +1017,20 @@
 				});
 			},
 			getHeight() {
-				setTimeout(()=>{
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#title-contentnav")
-						.boundingClientRect((data) => {
-							if(data) {
-								this.height =
-									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 75px - 88rpx)`
-							}
-						})
-						.exec();
-				},200)
+				this.height =
+					`calc(100vh - 420rpx - 160rpx)`
+				// setTimeout(()=>{
+				// 	const query = uni.createSelectorQuery().in(this);
+				// 	query
+				// 		.select("#title-contentnav")
+				// 		.boundingClientRect((data) => {
+				// 			if(data) {
+				// 				this.height =
+				// 					`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - 75px - 88rpx)`
+				// 			}
+				// 		})
+				// 		.exec();
+				// },200)
 			},
 			updateTime() {
 				var that = this;
@@ -782,6 +1093,9 @@
 							this.duration = res.course && res.course.duration ? res.course.duration : 0
 							this.playDuration = res.playDuration || 0
 							this.tipsTime = res.tipsTime || 0
+							this.displayType = res.course && res.course
+								.displayType != '' ? res.course.displayType :'landscape'
+								this.isShu = this.displayType=='landscape'?false:true
 							const showTreatmentFlag = res.course&&res.course.showProduct!=null ? res.course.showProduct : 1
 							this.treatmentPackage = res.course&&res.course.fsStoreProductScrms ? res.course.fsStoreProductScrms : []
 							this.showTreatment = showTreatmentFlag==0&&this.treatmentPackage.length>0 ? 0 : 1;
@@ -821,6 +1135,7 @@
 								// this.initVideo()
 								this.playTime = this.playDuration >= this.duration ? 0 : this.playDuration
 								this.playDurationSeek = this.playTime
+								this.updateProductAndCardDisplay(this.playTime || 0)
 								setTimeout(()=>{
 									this.player = uni.createVideoContext('video-content-box');
 									this.player.seek(this.playTime)
@@ -837,6 +1152,7 @@
 								// }
 								this.playTime = this.playTime > this.playDuration ? this.playTime : this.playDuration >= this.duration ? 0 : this.playDuration
 								this.playDurationSeek = this.playTime
+								this.updateProductAndCardDisplay(this.playTime || 0)
 								this.player.seek(this.playTime)
 								this.player.play();
 							}
@@ -859,41 +1175,21 @@
 			},
 			handleAnswer(val) {
 				let {item, option,index} = val
-				if(this.$store.state.answerType == 1) {
-					// 按照完课领红包
-					let rate = 0
-					if(this.isEnded || this.isFinish==1) {
-						rate = 1
-					} else {
-						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
-					}
-					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
-				} else {
-					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
-					let time = this.playTime
-					if(this.isEnded||this.isFinish==1) {
-						time = this.duration
-					} else {
-						if(time < this.playDuration&&this.isFinish!=1) {
-							// 没完课且小于续播的时间
-							time = this.playDuration
-						}
-					}
-					if(Number(this.duration || 0) == 0 || time < this.duration - 60) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
+				// 完课积分倒计时:倒计时未结束前不允许答题
+				if (!this.remainTimeReady) {
+					uni.showToast({
+						title: "倒计时加载中,请稍后再答题哦~",
+						icon: "none"
+					})
+					return
+				}
+				if (Number(this.remainTime || 0) > 0) {
+					uni.showToast({
+						title: "完课倒计时结束后才可以答题哦~",
+						icon: "none"
+					})
+					return
 				}
-				 
 				if (this.quesList[index].type == 1) {
 					// 单选option
 					this.quesList[index].answer = option.name
@@ -945,39 +1241,20 @@
 			},
 			// 答题
 			courseAnswer() {
-				if(this.$store.state.answerType == 1) {
-					// 按照完课领红包
-					let rate = 0
-					if(this.isEnded || this.isFinish==1) {
-						rate = 1
-					} else {
-						rate = (Number(this.playTime || 0) / Number(this.duration || 0)).toFixed(2)
-					}
-					if(Number(this.duration || 0) == 0 || rate*100 < Number(this.config.answerRate || 100)) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
-				} else {
-					// 按照完课且最后一分钟领红包(完课第二次进来就不需要最后一分钟)
-					let time = this.playTime
-					if(this.isEnded||this.isFinish==1) {
-						time = this.duration
-					} else {
-						if(time < this.playDuration&&this.isFinish!=1) {
-							// 没完课且小于续播的时间
-							time = this.playDuration
-						}
-					}
-					if(Number(this.duration || 0) == 0 || time < this.duration - 60) {
-						uni.showToast({
-							title: "请先观看完整课程再答题哦~",
-							icon: "none"
-						})
-						return
-					}
+				// 完课积分倒计时:倒计时未结束前不允许提交
+				if (!this.remainTimeReady) {
+					uni.showToast({
+						title: "倒计时加载中,请稍后再答题哦~",
+						icon: "none"
+					})
+					return
+				}
+				if (Number(this.remainTime || 0) > 0) {
+					uni.showToast({
+						title: "完课倒计时结束后才可以答题哦~",
+						icon: "none"
+					})
+					return
 				}
 				if (this.quesList.some(item => !item.answer)) {
 					uni.showToast({
@@ -1141,7 +1418,11 @@
 				getIsAddKf(this.urlOption).then(res => {
 						if (res.code == 200) {
 							this.isAddKf = 1
+						this.isLogin = true
 							this.getH5CourseVideoDetails()
+						if (this.user && this.user.userId) {
+							this.getRemainTime(this.user.userId)
+						}
 						} else if (res.code == 400) {
 							this.isAddKf = 0
 							this.qrcode = res.qrcode
@@ -1157,7 +1438,11 @@
 							const url = res.courseLink.realLink.split('?course=')[1]
 							this.urlOption = JSON.parse(url)
 							this.isAddKf = 1
+							this.isLogin = true
 							this.getH5CourseVideoDetails()
+							if (this.user && this.user.userId) {
+								this.getRemainTime(this.user.userId)
+							}
 							// this.initExpiration(res.msg,res.code)
 						} else if (res.code == 567) {
 							// 群聊通用链接
@@ -1166,7 +1451,11 @@
 								qwExternalId: res.qwExternalId
 							}
 							this.isAddKf = 1
+							this.isLogin = true
 							this.getH5CourseVideoDetails()
+							if (this.user && this.user.userId) {
+								this.getRemainTime(this.user.userId)
+							}
 							// this.initExpiration(res.msg,res.code)
 						} else {
 							this.isAddKf = 0
@@ -1256,7 +1545,6 @@
 				uni.login({
 					provider: provider,
 					success: async loginRes => {
-						console.log(loginRes)
 						uni.getUserInfo({
 						   provider: provider,
 						   success: (infoRes)=> {
@@ -1559,21 +1847,21 @@
 				this.showBtn = value
 				this.getHeight()
 			},
-			getHeight() {
-				setTimeout(()=>{
-					const query = uni.createSelectorQuery().in(this);
-					query
-						.select("#title-contentnav")
-						.boundingClientRect((data) => {
-							if(data) {
-								const footerH = this.showBtn==0? 75: 0
-								this.height =
-									`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - ${footerH}px - 88rpx)`
-							}
-						})
-						.exec();
-				},200)
-			},
+			// getHeight() {
+			// 	setTimeout(()=>{
+			// 		const query = uni.createSelectorQuery().in(this);
+			// 		query
+			// 			.select("#title-contentnav")
+			// 			.boundingClientRect((data) => {
+			// 				if(data) {
+			// 					const footerH = this.showBtn==0? 75: 0
+			// 					this.height =
+			// 						`calc(100vh - ${data.height}px - 420rpx - ${this.statusBarHeight}px - ${footerH}px - 88rpx)`
+			// 				}
+			// 			})
+			// 			.exec();
+			// 	},200)
+			// },
 		}
 	}
 </script>
@@ -1591,12 +1879,52 @@
 		justify-content: $justifyC;
 	}
 	.footer-tips {
-		margin-top: 14rpx;
+		position: fixed;
+		width: 100%;
+		bottom: 144rpx;
 		text-align: center;
-		font-family: PingFang SC,PingFang SC;
+		font-family: PingFang SC, PingFang SC;
 		font-weight: 500;
 		font-size: 12px;
 		color: #bbb;
+		transform: scale(0.8);
+	}
+	
+	.btns {
+		position: relative;
+		width: 100%;
+		height: 96rpx;
+		display: flex;
+		    align-items: center;
+		    justify-content: space-between;
+		.author-btn {
+			// z-index: 100;
+			// position: absolute;
+			// width: 100%;
+			flex:1;
+			height: 96rpx;
+			background: linear-gradient( 135deg, #FF5267 0%, #FF233C 100%);
+			border-radius: 50rpx;
+			font-family: PingFangSC, PingFang SC;
+			font-weight: 600;
+			font-style: normal;
+			font-size: 40rpx;
+			color: #FFFFFF;
+			text-align: center;
+			line-height: 96rpx;
+		}
+		.author-cart{
+			padding-left: 32rpx;
+			display: flex;
+			    align-items: center;
+			image{
+				width: 80rpx;
+				height: 80rpx;
+				&:last-child{
+					margin-left: 24rpx;
+				}
+			}
+		}
 	}
 	.textOne {
 		overflow: hidden;
@@ -2070,10 +2398,10 @@
 			position: fixed;
 			bottom: 0;
 			padding: 32rpx;
-			padding-bottom: calc(var(--window-bottom) + 12rpx);
+			// padding-bottom: calc(var(--window-bottom) + 14rpx);
 			box-sizing: border-box;
-			z-index: 9;
-
+			z-index: 0;
+		
 			&-btn {
 				width: 100%;
 				height: 98rpx;
@@ -2086,7 +2414,7 @@
 				font-size: 32rpx;
 				color: #FFFFFF;
 				@include u-flex(row, center, center);
-
+		
 				&-img {
 					flex-shrink: 0;
 					width: 144rpx;
@@ -2095,10 +2423,10 @@
 					margin-top: -24rpx;
 				}
 			}
-
+		
 			&-btn-border {
 				position: relative;
-
+		
 				&::after {
 					content: "";
 					background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1));
@@ -2345,4 +2673,171 @@
 			width: 36rpx;
 		}
 	}
+	// 完课积分倒计时遮罩
+	.progress-countdown {
+		position: fixed;
+		right: 6px;
+		top: 6px;
+		z-index: 99999999;
+		// width: 112px;
+		height: 50px;
+		background: rgba(0, 0, 0, 0.45);
+		display: flex;
+		align-items: center;
+		justify-content: space-around;
+		padding: 0 8px;
+		flex-direction: column;
+		border-radius: 6px;
+		box-sizing: border-box;
+	}
+	.progress-title {
+		font-size: 16px;
+		color: #FF233C;
+		font-weight: 600;
+	}
+	.progress-bar-bg {
+		width: 86px;
+		height: 6px;
+		background: rgba(255, 255, 255, 0.8);
+		border-radius: 3px;
+		overflow: hidden;
+	}
+	.progress-bar-fill {
+		height: 100%;
+		background: #FF233C;
+		border-radius: 3px;
+		transition: width 1s linear;
+	}
+	.progress-text {
+		white-space: nowrap;
+		color: #fff;
+		font-size: 13px;
+		display: flex;
+		align-items: flex-start;
+		justify-content: center;
+	}
+	.progress-text-label {
+		font-size: 12px;
+		margin-right: 2px;
+	}
+
+	// 购物车/更多弹窗
+	.more-actions-popup {
+		border-radius: 20rpx 0 0 20rpx;
+		padding: 30rpx;
+		display: flex;
+		justify-content: space-between;
+
+		.more-action-item {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+
+			.action-icon {
+				width: 48rpx;
+				height: 48rpx;
+			}
+
+			.action-label {
+				color: #1e1e1e;
+				text-align: center;
+				margin-top: 10rpx;
+			}
+		}
+	}
+
+	// 商品卡片弹窗
+	.goods-card {
+		position: absolute;
+		right: 24rpx;
+		bottom: 160rpx;
+		z-index: 9999;
+		width: 300rpx;
+		background: #FFFFFF;
+		border-radius: 20rpx 20rpx 0rpx 0rpx;
+		overflow: hidden;
+
+		&-inner {
+			display: flex;
+			flex-direction: column;
+		}
+
+		&-img {
+			width: 300rpx;
+			height: 300rpx;
+			flex-shrink: 0;
+		}
+
+		&-info {
+			flex: 1;
+			padding: 12rpx;
+			display: flex;
+			flex-direction: column;
+			justify-content: space-between;
+		}
+
+		&-title {
+			font-family: PingFangSC, PingFangSC;
+			font-weight: 600;
+			font-size: 32rpx;
+			color: rgba(0, 0, 0, 0.85);
+			line-height: 44rpx;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			display: -webkit-box;
+			-webkit-line-clamp: 2;
+			-webkit-box-orient: vertical;
+		}
+
+		&-bottom {
+			margin-top: 12rpx;
+			display: flex;
+			flex-direction: row;
+			align-items: center;
+		}
+
+		&-tag {
+			position: relative;
+			width: 120rpx;
+			height: 44rpx;
+		}
+
+		&-tag-bg {
+			width: 100%;
+			height: 100%;
+		}
+
+		&-tag-text {
+			position: absolute;
+			left: 0;
+			top: 0;
+			width: 100%;
+			height: 100%;
+			text-align: center;
+			line-height: 44rpx;
+			font-size: 24rpx;
+			color: #FFFFFF;
+			font-weight: 500;
+		}
+
+		&-price {
+			margin-left: 14rpx;
+			display: flex;
+			align-items: baseline;
+
+			.unit {
+				font-family: PingFangSC, PingFangSC;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #FF233C;
+			}
+
+			.price {
+				font-family: PingFangSC, PingFangSC;
+				font-weight: 600;
+				font-size: 48rpx;
+				color: #FF233C;
+			}
+		}
+	}
 </style>

+ 1 - 1
pages_course/videovip - 副本.vue

@@ -563,7 +563,7 @@
 			// 	this.userlogo=true
 			// }
 			console.log(uni.getStorageSync('userInfos'))
-			// if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='岚财优选'){
+			// if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='岚财良品'){
 			// 	uni.navigateTo({
 			// 		url:'/pages_course/webview'
 			// 	})

+ 450 - 97
pages_course/videovip.vue

@@ -4,7 +4,17 @@
 		<!-- <u-icon name="arrow-left" size="28" @click="tosales" v-if="appToken"></u-icon> -->
 		<!-- <view class="header-title" :style="{width:menuButtonLeft + 'px',height:menuButtonH+'px',lineHeight:menuButtonH+'px'}">{{courseInfo.title}}</view>
 		</view> -->
-		<view class="video-box" :style="{'height':isShu?'calc(100vh - 160rpx)':'420rpx'}">
+		
+		<view class="notice-box" v-if="isLogin&&isAddKf==1">
+			
+			<view class="notice-marquee-wrap">
+				<view class="notice-marquee-track">
+					<view class="notice-text"><image src="/static/images/notice.png"></image>央广网独家授权栏目&nbsp;&nbsp;全品类100%经过国标检测</view>
+					<view class="notice-text"><image src="/static/images/notice.png"></image>央广网独家授权栏目&nbsp;&nbsp;全品类100%经过国标检测</view>
+				</view>
+			</view>
+		</view>
+		<view class="video-box" :style="{'height':isShu?'calc(100vh - 264rpx)':'420rpx'}">
 			<image v-if="!isLogin || isAddKf!=1" class="video-poster" :src="courseInfo.imgUrl" mode="aspectFill">
 			</image>
 			<video @timeupdate="onTimeUpdate" @progress="progressChange" @error="videoErrorCallback" @play="getPlay"
@@ -14,21 +24,22 @@
 				:show-progress="true" :picture-in-picture-mode="[]" :show-background-playback-button="false"
 				:src="videoUrl">
 					<cover-view v-if="remainTime > 0" class="progress-countdown">
-						<cover-view class="progress-title">完课积分</cover-view>
-						<cover-view class="progress-bar-bg">
+						<!-- <cover-view class="progress-title">完课积分</cover-view> -->
+						<cover-image class="progress-img" src="/static/images/wk.png"></cover-image>
+						<!-- <cover-view class="progress-bar-bg">
 							<cover-view class="progress-bar-fill" :style="{ width: countdownPercentage + '%' }"></cover-view>
-						</cover-view>
+						</cover-view> -->
 						<cover-view class="progress-text">
-							<cover-view style="font-size: 24rpx;">倒计时</cover-view>
-							<cover-view>{{ formattedCountdown.hours||'00' }}:{{ formattedCountdown.minutes||'00' }}:{{ formattedCountdown.seconds||"00" }}</cover-view>
+							<cover-view class="progress-text-label">倒计时</cover-view>
+							<cover-view style="font-size: 13px;">{{ formattedCountdown.hours||'00' }}:{{ formattedCountdown.minutes||'00' }}:{{ formattedCountdown.seconds||"00" }}</cover-view>
 						</cover-view>
 					</cover-view>
 			</video>
 		</view>
 		<!-- 商品卡片弹窗 -->
-		<view class="goods-card" v-if="cardPopup && currentCardItem" @click="goBuy(currentCardItem)">
+		<view class="goods-card" :style="{'bottom':isShu?'280rpx':'220rpx'}" v-if="cardPopup && currentCardItem" @click="goBuy(currentCardItem)">
 			<view class="goods-card-inner">
-				<image class="goods-card-img" :src="currentCardItem.images || currentCardItem.image" mode="aspectFill"></image>
+				<image class="goods-card-img" :src="currentCardItem.images" mode="aspectFill"></image>
 				<view class="goods-card-info">
 					<view class="goods-card-title">{{ currentCardItem.productName || '-' }}</view>
 					<view class="goods-card-bottom">
@@ -70,27 +81,27 @@
 				{{courseInfo.courseName}}
 			</view> -->
 		<!-- </view> -->
-		<scroll-view v-show="!isShu" class="scroll-view" :style="{height: height}" :scroll-top="scrollTop" scroll-y="true">
+		<!-- <scroll-view  style="display:none;"  v-show="!isShu" class="scroll-view" :style="{height: height}" :scroll-top="scrollTop" scroll-y="true"> -->
 			<!-- 无效或者已过期 -->
-			<view class="nocourse" v-if="msg">
+			<!-- <view class="nocourse" v-if="msg">
 				<image :src="imgPath+'/app/image/course_expiration_img.png'" mode="widthFix"></image>
 				<view>{{msg}}</view>
-			</view>
+			</view> -->
 			<!-- 问题 -->
-			<view class="ques-content" v-if="isLogin&&isAddKf==1&&!isquestion">
+			<!-- <view class="ques-content" v-if="isLogin&&isAddKf==1&&!isquestion">
 				<view v-if="isLogin">
 					<view class="ques-content-tit" v-if="!isquestion"
-						@click="tabChange(0)">问答题</view>
+						@click="tabChange(0)">问答题</view> -->
 					<!-- <view class="ques-content-tit" v-if="showTreatment==0"
 						:style="{ color: currentId==1? '#FF5C03':'#222'}" @click="tabChange(1)">商品</view> -->
-				</view>
-					<view v-for="(item,index) in quesList" :key="index">
+				<!-- </view> -->
+					<!-- <view v-for="(item,index) in quesList" :key="index">
 						<view class="ques-title">
-							<text>{{index + 1}}.</text>
+							<text>{{index + 1}}.</text> -->
 							<!-- <view class="ques-type" v-show="item.type == 1 || item.type == 2">
 								{{item.type == 1 ? '单选' : item.type == 2 ? '多选' : ''}}
 							</view> -->
-							<text class="fs40">{{item.title}}</text>
+				<!-- 			<text class="fs40">{{item.title}}</text>
 						</view>
 						<view :class="isAnswer(item,option.name) ?'ques-option ques-option-active':'ques-option'"
 							v-for="(option,idx) in item.questionOption" :key="idx" @click="handleAnswer(item,option)">
@@ -100,11 +111,35 @@
 							<view class="fs40">{{option.name}}</view>
 						</view>
 					</view>
-				<!-- <template v-if="currentId==1&&showTreatment==0 || isquestion&&showTreatment==0">
-					<goodsList ref="goodsList" :treatmentPackage="displayProductList" :urlOption="urlOption"></goodsList>
-				</template> -->
 			</view>
-		</scroll-view>
+		</scroll-view> -->
+		<!-- 评价 -->
+		<view class="rating-box" v-if="isLogin&&isAddKf==1&&!isquestion&&!isShu">
+			<image class="bg" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/bg-back.jpg" mode="widthFix"></image>
+			<view class="rating-body" v-for="(item,index) in quesList" :key="index" >
+				<view class="title">{{item.title}}</view>
+				<view class="sat-box">
+					<view class="sat" v-for="(option,idx) in item.questionOption" :key="idx"  :class="aindex==option.indexId?'sat--active':''" @click="handleAnswer(item,option)">
+						<view class="sat-img-wrap" :class="rateBounceIndex==option.indexId?'sat-img-bounce':''">
+							<image :src="aindex==option.indexId?rateList[option.indexId].selIcon:rateList[option.indexId].icon" mode="aspectFit"></image>
+						</view>
+						<text :class="aindex==option.indexId?'active':''">{{option.name}}</text>
+					</view>
+					<!-- <view class="sat">
+						<image src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/hsat_sel.png"></image>
+						<text>满意</text>
+					</view>
+					<view class="sat">
+						<image src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/hsat_sel.png"></image>
+						<text>一般</text>
+					</view>
+					<view class="sat">
+						<image src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/hsat_sel.png"></image>
+						<text>不满意</text>
+					</view> -->
+				</view>
+			</view>
+		</view>
 		<!-- 线路 -->
 		<!-- <view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1">
 			<image :src="imgPath+'/app/image/changePlayer-icon.png'"></image>
@@ -285,13 +320,27 @@
 					@getuserinfo="userInfologin"  v-if="authType==0&&!isquestion">{{isLogin&&isAddKf==1 ? '提交答案领取奖励' : '立即学习'}}</button> -->
 				
 				<template v-if="!isquestion">
-					<button class="author-btn" @click="openList" v-if="isLogin&&isAddKf==1&&isShu">答题</button>
-					<button class="author-btn" @click="submit" v-if="isLogin&&isAddKf==1&&remainTime==0&&!isShu">提交答题</button>
+					<button class="author-btn" @click="openList" v-if="isLogin&&isAddKf==1&&isShu">评价得积分<image src="/static/images/jifen.png"></image>
+					</button>
+					<button class="author-btn" @click="submit" v-if="isLogin&&isAddKf==1&&remainTime==0&&!isShu">评价得积分
+					<image src="/static/images/jifen.png"></image>
+					</button>
 				</template>
 				<button class="author-btn" @click="submit" v-if="!isLogin&&isAddKf!==1">立即学习</button>
+				<!-- <button
+					class="author-btn"
+					open-type="getUserInfo" :disabled="userdisabled"
+					@getuserinfo="userInfologin" v-if="authType==0&&!isLogin&&isAddKf!==1">立即学习</button> -->
 				<view class="author-cart">
-					<image src="/static/images/more2.png" @click="showMore"></image>
-					<image v-if="showTreatment==0"  @click="showCart"  src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/fs/20251231/8376c769d7154f04b13cbec4a76bacf0.png"></image>
+					<view class="more-box">
+						<image src="/static/images/more24.png" @click="showMore"></image>
+						<view class="tips">更多</view>
+					</view>
+					<image class="xianshi" v-if="displayProductList.length>0&&!cardPopup" src="/static/images/xg.png"></image>
+					<view class="more-box" v-if="showTreatment==0">
+						<image  @click="showCart"  src="/static/images/cart.png"></image>
+						<view class="tips">去下单</view>
+					</view>
 				</view>
 			</view>
 		</view>
@@ -351,6 +400,34 @@
 				isMore:false,//更多
 				isCart:false,//购物车
 				isShu:false,//竖屏默认
+				aindex:null,
+				rateBounceIndex: null,
+				_rateBounceTimer: null,
+				rateList:[{
+					id:0,
+					icon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/hsat.png',
+					name:'非常满意',
+					selIcon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/hsat_sel.png'
+				},
+				{
+					id:1,
+					icon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/sat.png',
+					name:'满意',
+					selIcon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/sat_sel.png'
+				},
+				{
+					id:2,
+					icon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/fari.png',
+					name:'一般',
+					selIcon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/fari_sel.png'
+				},
+				{
+					id:3,
+					icon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/unsat.png',
+					name:'不满意',
+					selIcon:'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/unsat_sel.png'
+				}
+				],
 				resMsg: "",
 				resCode: '',
 				showExpiration: false,
@@ -498,7 +575,11 @@
 				// 完课积分总倒计时时长(秒),用于计算百分比
 				totalRemainTime: 0,
 				// 完课积分倒计时定时器
-				countdownTimer: null
+				countdownTimer: null,
+				// 是否已从接口拉取到倒计时数据(避免 remainTime 初始为 0 时提前放开答题)
+				remainTimeReady: false,
+				// 倒计时结束后是否已补发过一次看课记录
+				hasReportedAfterCountdown: false
 			}
 		},
 		filters: {
@@ -612,7 +693,7 @@
 			// 	this.userlogo=true
 			// }
 			console.log(uni.getStorageSync('userInfos'))
-			// if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='岚财优选'){
+			// if(!uni.getStorageSync('userInfos')&&this.$store.state.logoname=='岚财良品'){
 			// 	uni.navigateTo({
 			// 		url:'/pages_course/webview'
 			// 	})
@@ -676,6 +757,10 @@
 				clearTimeout(this.fullscreenToggleTimer)
 				this.fullscreenToggleTimer = null
 			}
+			if (this._rateBounceTimer) {
+				clearTimeout(this._rateBounceTimer)
+				this._rateBounceTimer = null
+			}
 			this.fullscreenToggleLock = false
 			// 页面卸载时清理完课积分倒计时
 			this.stopCountdown()
@@ -696,12 +781,31 @@
 				clearTimeout(this.fullscreenToggleTimer)
 				this.fullscreenToggleTimer = null
 			}
+			if (this._rateBounceTimer) {
+				clearTimeout(this._rateBounceTimer)
+				this._rateBounceTimer = null
+			}
 			this.fullscreenToggleLock = false
 			// 组件销毁前清理完课积分倒计时
 			this.stopCountdown()
 			this.clearIntegral()
 		},
 		methods: {
+			goRate(index){
+				this.aindex = index
+				if (this._rateBounceTimer) {
+					clearTimeout(this._rateBounceTimer)
+					this._rateBounceTimer = null
+				}
+				this.rateBounceIndex = null
+				this.$nextTick(() => {
+					this.rateBounceIndex = index
+					this._rateBounceTimer = setTimeout(() => {
+						this.rateBounceIndex = null
+						this._rateBounceTimer = null
+					}, 480)
+				})
+			},
 			fullscreenchange(e){
 				const isFullScreen = !!(e && e.detail && e.detail.fullscreen);
 				this.isFull = isFullScreen;
@@ -785,6 +889,11 @@
 					if (this.remainTime <= 0 && this.countdownTimer) {
 						clearInterval(this.countdownTimer);
 						this.countdownTimer = null;
+						if (!this.hasReportedAfterCountdown) {
+							this.hasReportedAfterCountdown = true;
+							this.getFinishCourseVideo();
+							this.getInternetTraffic();
+						}
 					}
 				}, 1000);
 			},
@@ -809,11 +918,14 @@
 					if (res.code == 200) {
 						const remain = Number(res.remainTime) || 0; // 积分看课剩余时间(秒)
 						this.remainTime = remain;
+						this.remainTimeReady = true;
+						this.hasReportedAfterCountdown = remain <= 0;
 						// 初始化或刷新总时长,用于进度条百分比
 						if (!this.totalRemainTime || remain > this.totalRemainTime) {
 							this.totalRemainTime = remain;
 						}
 					} else {
+						this.remainTimeReady = false
 						uni.showToast({
 							icon: 'none',
 							title: res.msg,
@@ -850,6 +962,7 @@
 					uni.login({
 						provider: "weixin",
 						success: async loginRes => {
+							//uni.setStorageSync('loginRes',loginRes)
 							let code = loginRes.code // 获取开发code
 							handleFsUserWx({
 									code: code,
@@ -868,8 +981,10 @@
 										uni.getStorageSync('TOKEN_WEXIN');
 										this.userInfo = uni.getStorageSync('userInfo');
 										this.isLogin = true
+										
 										setTimeout(() => {
 											this.getIsAddKf()
+											//this.getMp()
 										}, 200)
 									} else if (res.code == 406) {
 										uni.hideLoading();
@@ -1009,8 +1124,10 @@
 												this.userInfo = res.user;
 												uni.hideLoading()
 												// this.checkUserInfoA()
-												// this.isLogin = true
-
+												this.isLogin = true
+                                                setTimeout(() => {
+                                                	this.getIsAddKf()
+                                                }, 200)
 											} else if (res.code == 406) {
 												uni.hideLoading();
 												uni.showToast({
@@ -1210,13 +1327,25 @@
 					this.currentCardItem = null
 					return
 				}
+				// 按“上架时间”倒序排序,保证后上架商品展示在列表最前
+				const sortedTreatmentPackage = this.treatmentPackage.slice().sort((a, b) => {
+					const aOn = hasValidShelfTime(a.onShelfTime) ? toSeconds(a.onShelfTime) : 0
+					const bOn = hasValidShelfTime(b.onShelfTime) ? toSeconds(b.onShelfTime) : 0
+					if (bOn !== aOn) return bOn - aOn
+					// 上架时间相同则按下架时间倒序,进一步保证新近优先
+					const aOff = hasValidShelfTime(a.offShelfTime) ? toSeconds(a.offShelfTime) : 0
+					const bOff = hasValidShelfTime(b.offShelfTime) ? toSeconds(b.offShelfTime) : 0
+					return bOff - aOff
+				})
 				const videoDuration = this.duration || 0
 				// 1. 商品栏展示:按上架/下架时间过滤
-				this.displayProductList = this.treatmentPackage.filter(item => {
-					// 只获取有上下架时间的商品(两者都需存在且有效)
-					if (!hasValidShelfTime(item.onShelfTime) || !hasValidShelfTime(item.offShelfTime)) return false
+				this.displayProductList = sortedTreatmentPackage.filter(item => {
+					// 上架时间必填;下架时间可为空(为空表示一直展示到视频结束
+					if (!hasValidShelfTime(item.onShelfTime)) return false
 					const onShelfSec = toSeconds(item.onShelfTime)
 					if (currentSec < onShelfSec) return false
+					const hasOffShelfTime = hasValidShelfTime(item.offShelfTime)
+					if (!hasOffShelfTime) return true
 					const offShelfSec = toSeconds(item.offShelfTime)
 					if (videoDuration > 0 && offShelfSec > videoDuration) return true
 					return currentSec < offShelfSec
@@ -1224,8 +1353,9 @@
 				//console.log('this.displayProductList',this.displayProductList)
 				// 2. 商品卡片弹窗:按弹出/关闭时间查找当前应展示的卡片
 				let activeCard = null
-				for (let i = 0; i < this.treatmentPackage.length; i++) {
-					const item = this.treatmentPackage[i]
+				let activePopupSec = -1
+				for (let i = 0; i < sortedTreatmentPackage.length; i++) {
+					const item = sortedTreatmentPackage[i]
 					const popupStr = item.cardPopupTime
 					const closeStr = item.cardCloseTime
 					if (!popupStr || popupStr === '00:00:00') continue
@@ -1233,8 +1363,16 @@
 					if (!popupSec) continue
 					const closeSec = (closeStr && closeStr !== '00:00:00') ? toSeconds(closeStr) : null
 					if (currentSec >= popupSec && (closeSec == null || currentSec < closeSec)) {
-						activeCard = item
-						break
+						// 同时命中多个弹窗时:优先展示“启动时间更晚”的后续弹窗
+						if (popupSec > activePopupSec) {
+							activePopupSec = popupSec
+							activeCard = item
+						} else if (popupSec === activePopupSec && activeCard) {
+							// 上架时间更晚优先(兜底)
+							const activeOn = hasValidShelfTime(activeCard.onShelfTime) ? toSeconds(activeCard.onShelfTime) : 0
+							const itemOn = hasValidShelfTime(item.onShelfTime) ? toSeconds(item.onShelfTime) : 0
+							if (itemOn > activeOn) activeCard = item
+						}
 					}
 				}
 				this.cardPopup = !!activeCard
@@ -1488,18 +1626,18 @@
 				)
 			},
 			handleAnswer(item, option, idx) {
-				let time = this.playTime
-				if (this.isEnded || this.isFinish == 1) {
-					time = this.duration
-				} else {
-					if (time < this.playDuration && this.isFinish != 1) {
-						// 没完课且小于续播的时间
-						time = this.playDuration
-					}
-				}
-				if (Number(this.duration || 0) == 0 || time < this.duration - 60) {
+				// 以“完课积分倒计时”结束作为答题资格
+				// if (!this.remainTimeReady) {
+				// 	uni.showToast({
+				// 		title: "倒计时加载中,请稍后再答题哦~",
+				// 		icon: "none"
+				// 	})
+				// 	return
+				// }
+				this.goRate(option.indexId)
+				if (Number(this.remainTime || 0) > 0) {
 					uni.showToast({
-						title: "请先观看完整课程再答题哦~",
+						title: "完课倒计时结束再评分",
 						icon: "none"
 					})
 					return
@@ -1568,25 +1706,24 @@
 			},
 			// 答题
 			courseAnswer() {
-				let time = this.playTime
-				if (this.isEnded || this.isFinish == 1) {
-					time = this.duration
-				} else {
-					if (time < this.playDuration && this.isFinish != 1) {
-						// 没完课且小于续播的时间
-						time = this.playDuration
-					}
-				}
-				if (Number(this.duration || 0) == 0 || time < this.duration - 60) {
+				// 以“完课积分倒计时”结束作为答题资格
+				// if (!this.remainTimeReady) {
+				// 	uni.showToast({
+				// 		title: "倒计时加载中,请稍后再答题哦~",
+				// 		icon: "none"
+				// 	})
+				// 	return
+				// }
+				if (Number(this.remainTime || 0) > 0) {
 					uni.showToast({
-						title: "请先观看完整课程再答题哦~",
+						title: "完课倒计时结束再评分",
 						icon: "none"
 					})
 					return
 				}
 				if (this.quesList.some(item => !item.answer)) {
 					uni.showToast({
-						title: "请确认是否答完所有题目",
+						title: "请选择评分",
 						icon: "none"
 					})
 					return
@@ -1625,8 +1762,8 @@
 								}
 							} else {
 								// 答题成功
-								this.errTitle = "恭喜你,回答正确"
-								// this.errDesc = `请选择奖励`
+								this.errTitle = "完课积分已到账"
+								//this.errDesc = `请选择奖励`
 								// this.$refs.answerPopup.open("center")
 								// this.answerPopup=true
 								if (res.msg == '答题成功') {
@@ -1649,12 +1786,19 @@
 								this.answerPopup = true
 							} else {
 								if (res.msg.length > 14) {
-									uni.showModal({
-										title: '提示',
-										content: res.msg,
-										showCancel: false,
-										confirmText: '我知道了'
-									})
+									if (res.msg == "该课程已答题完成,不可重复答题") {
+										uni.showToast({
+											title: '已评价请勿重复提交',
+											icon: 'none'
+										})
+									}else{
+										uni.showModal({
+											title: '提示',
+											content: res.msg,
+											showCancel: false,
+											confirmText: '我知道了'
+										})
+									}
 								} else {
 									uni.showToast({
 										title: res.msg,
@@ -1676,7 +1820,7 @@
 				uni.showLoading({
 					title: "加载中..."
 				})
-				if (this.errTitle == '恭喜你,回答正确') {
+				if (this.errTitle == '完课积分已到账') {
 					const param = {
 						...this.urlOption,
 						userId: this.userInfo.userId,
@@ -1832,6 +1976,7 @@
 								  if (this.userInfo.userId) {
 								    this.getH5CourseVideoDetails();
 								    this.getRemainTime(this.userInfo.userId);
+									this.getMp()
 								  }
 								}
 							}
@@ -1886,6 +2031,47 @@
 					err => {}
 				);
 			},
+			getMp(){
+				let provider = 'weixin'
+				uni.login({
+					provider: provider,
+					success: async loginRes => {
+						console.log(loginRes)
+						uni.getUserInfo({
+						   provider: provider,
+						   success: (infoRes)=> {
+							  //   uni.showToast({
+									// title: '处理中...',
+									// icon: 'loading'
+							  //   });
+								//console.log(infoRes,'infoRes')
+								loginByMiniApp({
+									code: loginRes.code,
+									encryptedData:infoRes.encryptedData,
+									iv:infoRes.iv,
+									appId:wx.getAccountInfoSync().miniProgram.appId,
+								}).then(res=>{
+									 //uni.hideLoading();
+									 if (res.code == 200) {
+										 uni.setStorageSync('userInfo',JSON.stringify(res.user));
+									 } else {
+										uni.showToast({
+											title: res.msg,
+											icon: 'none'
+										});
+									 }
+								 }).catch(err=>{
+									//uni.hideLoading();
+									uni.showToast({
+										icon:'none',
+										title: "登录失败,请重新登录",
+									});
+								});
+						   }
+						});
+					}
+				})
+			},
 			initExpiration(resMsg, resCode) {
 				if (resCode == 401) return;
 				this.resMsg = resMsg
@@ -2040,6 +2226,137 @@
 	}
 </style>
 <style lang="scss" scoped>
+	.notice-box{
+		padding: 12rpx 18rpx;
+		background: #FFF8F8;
+		display: flex;
+		align-items: center;
+		image{
+			width:40rpx;
+			height:40rpx;
+			margin-right: 10rpx;
+			flex-shrink: 0;
+		}
+		.notice-marquee-wrap{
+			flex: 1;
+			min-width: 0;
+			overflow: hidden;
+			display: flex;
+			align-items: center;
+		}
+		.notice-marquee-track{
+			display: inline-flex;
+			white-space: nowrap;
+			animation: notice-marquee-scroll 20s linear infinite;
+		}
+		.notice-text{
+			flex-shrink: 0;
+			padding-right: 60rpx;
+			font-family: PingFangSC, PingFang SC;
+			font-weight: 600;
+			font-size: 32rpx;
+			line-height: 44rpx;
+			color: #FF0C4D;
+			display: flex;
+		}
+	}
+	@keyframes notice-marquee-scroll{
+		0%{ transform: translateX(0); }
+		100%{ transform: translateX(-50%); }
+	}
+	.rating-box{
+		position: relative;
+		padding: 24rpx;
+		z-index:0;
+		height: calc(100vh - 488rpx);
+		.bg {
+			width: 100%;
+			// height: 500rpx;
+			position: absolute;
+			top: 0;
+			left: 0;
+			z-index: 0;
+		}
+		.rating-body{
+			margin-top: 110rpx;
+			position: relative;
+			z-index: 1;
+			padding:30rpx;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			border-radius: 24rpx;
+			max-height: calc(100% - 300rpx);
+			overflow-y: auto;
+			-webkit-overflow-scrolling: touch;
+			.title{
+				font-family: PingFangSC, PingFang SC;
+				font-weight: 600;
+				font-size: 40rpx;
+				color: rgba(0,0,0,0.85);
+				line-height: 56rpx;
+			}
+		}
+		.sat-box{
+			display: grid;
+			grid-template-columns: repeat(2, 1fr);
+			gap: 28rpx 24rpx;
+			margin-top: 32rpx;
+		}
+		.sat{
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+			justify-content: center;
+			text-align: center;
+			background: #F5F7FA;
+			padding: 20rpx;
+			border-radius: 20rpx;
+			transition: background 0.3s ease, box-shadow 0.3s ease;
+			.sat-img-wrap{
+				width: 100rpx;
+				height: 100rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				will-change: transform;
+				image{
+					width: 100rpx;
+					height: 100rpx;
+					transition: transform 0.35s cubic-bezier(0.34, 1.3, 0.64, 1);
+				}
+			}
+			.sat-img-bounce{
+				animation: sat-rate-pop 0.48s cubic-bezier(0.34, 1.45, 0.64, 1);
+			}
+			text{
+				margin-top: 10rpx;
+				font-family: PingFangSC, PingFang SC;
+			    font-weight: 400;
+			    font-size: 36rpx;
+				line-height: 50rpx;
+				transition: color 0.32s ease, font-weight 0.28s ease, transform 0.28s ease;
+				color: rgba(0,0,0,0.42);
+			}
+			.active{
+				font-weight: 600;
+				color: #FF233C;
+			}
+		}
+		.sat.sat--active{
+			background: #FFEEF0;
+			//box-shadow: 0 4rpx 16rpx rgba(255, 92, 3, 0.12);
+			.sat-img-wrap image{
+				transform: scale(1.06);
+			}
+		}
+	}
+	@keyframes sat-rate-pop{
+		0%{ transform: scale(1); }
+		28%{ transform: scale(1.2); }
+		52%{ transform: scale(0.94); }
+		76%{ transform: scale(1.06); }
+		100%{ transform: scale(1); }
+	}
 	// 更多操作弹窗
 	.more-actions-popup {
 		border-radius: 20rpx 0 0 20rpx;
@@ -2066,49 +2383,56 @@
 	}
 	.progress-countdown {
 		position: fixed; 
-		left: 12rpx;
-		top: 12rpx;
+		right: 6px;
+		top: 6px;
 		z-index: 99999999;
-		width: 224rpx;
-		height: 130rpx;
+		// width: 112px;
+		height: 50px;
 		background: rgba(0,0,0,0.45);
 		display: flex;
 		align-items: center;
 		justify-content: space-around;
-		// padding: 16rpx;
+		padding:2px 8px;
 		flex-direction: column;
-        border-radius: 12rpx;
+        border-radius: 6px;
 		 box-sizing: border-box; /* 避免padding撑大容器 */
 	}
 	.progress-title {
-		font-size: 36rpx;
-		color:#FF233C;
+		font-size: 16px;
+		color:#FFA643;
 		font-weight: 600;
 	}
+	.progress-img{
+		width: 63px;
+		height: 15px;
+	}
 	.progress-bar-bg {
-		width: 172rpx;
-		height: 12rpx;
-		// margin-top: 16rpx;
+		width: 86px;
+		height: 6px;
+		//margin-top: 16rpx;
 		background: rgba(255,255,255,0.8);
-		border-radius: 6rpx 6rpx 6rpx 6rpx;
+		border-radius: 3px;
 		overflow: hidden;
 		// margin-bottom: 16rpx;
 	}
 	.progress-bar-fill {
 		height: 100%;
-		// background: linear-gradient(90deg, #4CAF50, #8BC34A);
-		background: linear-gradient( 225deg, #FF5267 0%, #FF233C 100%);
-		border-radius: 6rpx 6rpx 6rpx 6rpx;
+		background: #FF233C;
+		border-radius: 3px;
 		transition: width 1s linear;
 	}
 .progress-text {
 	white-space: nowrap; /* 强制不换行 */
 	color: #fff;
-	font-size: 28rpx;
+	font-size: 13px;
     display: flex;
 	align-items: flex-start; /* 垂直居中 */
 	justify-content: center; /* 水平居中 */
 		}
+	.progress-text-label {
+		font-size: 12px;
+		margin-right: 2px;
+	}
 	.ques-flex {
 		display: flex;
 		align-items: center;
@@ -2220,7 +2544,7 @@
 	}
 
 	.btns {
-		position: relative;
+		//position: relative;
 		width: 100%;
 		height: 96rpx;
 		display: flex;
@@ -2233,7 +2557,7 @@
 			flex:1;
 			height: 96rpx;
 			background: linear-gradient( 135deg, #FF5267 0%, #FF233C 100%);
-			border-radius: 50rpx;
+			border-radius: 48rpx;
 			font-family: PingFangSC, PingFang SC;
 			font-weight: 600;
 			font-style: normal;
@@ -2241,17 +2565,47 @@
 			color: #FFFFFF;
 			text-align: center;
 			line-height: 96rpx;
+			display: flex;
+			    align-items: center;
+			    justify-content: center;
+				image{
+					margin-left: 4rpx;
+					width: 40rpx;
+					height: 40rpx;
+				}
 		}
 		.author-cart{
-			padding-left: 32rpx;
+			padding-left: 40rpx;
 			display: flex;
 			    align-items: center;
-			image{
-				width: 80rpx;
-				height: 80rpx;
-				&:last-child{
-					margin-left: 24rpx;
+				.more-box{
+					display: flex;
+					align-items: center;
+					flex-direction: column;
+					.tips{
+						font-family: PingFangSC, PingFang SC;
+						font-weight: 600;
+						font-size: 32rpx;
+						color: #222222;
+						line-height: 44rpx;
+						text-align: center;
+						margin-top: 12rpx;
+					}
+					image{
+						width: 80rpx;
+						height: 80rpx;
+					}
+					&:last-child{
+						margin-left: 40rpx;
+					}
 				}
+			.xianshi{
+				position: absolute;
+				z-index: 10;
+				right:20rpx;
+				bottom: 180rpx;
+				width: 214rpx;
+				height:90rpx;
 			}
 		}
 	}
@@ -2445,11 +2799,11 @@
 	.goods-card {
 		position: absolute;
 		right: 24rpx;
-		bottom: 160rpx;
+		bottom: 280rpx;
 		z-index: 9999;
 		width: 300rpx;
 		background: #FFFFFF;
-		border-radius: 20rpx 20rpx 0rpx 0rpx;
+		border-radius: 20rpx;
 		overflow: hidden;
 
 		&-inner {
@@ -2483,7 +2837,6 @@
 			-webkit-line-clamp: 2;
 			-webkit-box-orient: vertical;
 		}
-
 		&-bottom {
 			margin-top: 12rpx;
 			display: flex;
@@ -2955,13 +3308,13 @@
 		}
 
 		.footer {
-			border-top: 1rpx solid #ededef;
+			//border-top: 1rpx solid #ededef;
 			background: #fff;
 			width: 100%;
 			position: fixed;
 			bottom: 0;
 			padding: 32rpx;
-			// padding-bottom: calc(var(--window-bottom) + 14rpx);
+			padding-bottom:68rpx;
 			box-sizing: border-box;
 			z-index: 0;
 

+ 3 - 3
pages_index/course.vue

@@ -56,7 +56,7 @@
 					@click="onCourseClick(course)"
 				>
 					<view class="card-cover">
-						<image :src="course.cover || '/static/logo.jpg'" mode="aspectFill" class="cover-img"></image>
+						<image :src="course.cover || 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png'" mode="aspectFill" class="cover-img"></image>
 					</view>
 					<text class="card-title">{{ course.title }}</text>
 					<view class="card-footer">
@@ -84,7 +84,7 @@
 						@click="onCourseClick(item)"
 					>
 						<view class="recent-thumb">
-							<image :src="item.cover || '/static/logo.jpg'" mode="aspectFill" class="thumb-img"></image>
+							<image :src="item.cover || 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png'" mode="aspectFill" class="thumb-img"></image>
 						</view>
 						<view class="recent-info">
 							<text class="recent-title">{{ item.title }}</text>
@@ -111,7 +111,7 @@
 							@click="onCourseClick(course)"
 						>
 							<view class="card-cover">
-								<image :src="course.cover || '/static/logo.jpg'" mode="aspectFill" class="cover-img"></image>
+								<image :src="course.cover || 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png'" mode="aspectFill" class="cover-img"></image>
 							</view>
 							<text class="card-title">{{ course.title }}</text>
 							<view class="card-footer">

+ 3 - 3
pages_index/index.vue

@@ -20,7 +20,7 @@
 
 		<!-- 主题横幅 Banner -->
 		<view class="banner" @click="onBannerClick">
-			<image class="banner-bg" src="/static/logo.jpg" mode="aspectFill"></image>
+			<image class="banner-bg" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png" mode="aspectFill"></image>
 			<view class="banner-overlay">
 				<text class="banner-title">央广原乡行</text>
 				<text class="banner-desc">央广旅游 品味山海</text>
@@ -47,7 +47,7 @@
 				</scroll-view>
 				<view class="feature-video-card" @click="onWatchLive">
 					<view class="fv-thumb">
-						<image class="fv-img" src="/static/logo.jpg" mode="aspectFill"></image>
+						<image class="fv-img" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png" mode="aspectFill"></image>
 						<view class="live-tag">
 							<text class="live-dot"></text>
 							<text>直播中</text>
@@ -78,7 +78,7 @@
 						@click="onCourseClick(course)"
 					>
 						<view class="course-thumb">
-							<image class="course-img" :src="course.cover || '/static/logo.jpg'" mode="aspectFill"></image>
+							<image class="course-img" :src="course.cover || 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png'" mode="aspectFill"></image>
 							<text class="course-tag">{{ course.tag }}</text>
 						</view>
 						<view class="course-info">

+ 2 - 2
pages_manage/login.vue

@@ -4,7 +4,7 @@
 			 <view class="login pt14">
 				<view class="head">
 					 <!-- <image :src="imgPath+'/app/image/logo.jpg'" ></image> -->
-					 <image src="/static/logo.jpg" ></image>
+					 <image src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png" ></image>
 					 <p class="title">销售管理端</p>
 					 <p class="desc">客户沟通更智能</p>
 				</view>
@@ -29,7 +29,7 @@
 				</view>
 			 </view>
 		 </view>
-		 <view class="footer-tips">重庆岚财优选提供技术支持</view>
+		 <view class="footer-tips">重庆岚财良品提供技术支持</view>
 	</view>
 </template>
 

+ 1 - 1
pages_managedata/about.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="content">
 		<view class="logo">
-			<image src="/static/logo.jpg"></image>
+			<image src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
 			<!-- 			<image :src="imgPath+'/app/image/logo.jpg'"></image> -->
 			<p>{{imgname}}</p>
 		</view>

+ 2 - 2
pages_shopping/live/complaint.vue

@@ -3,8 +3,8 @@
 		<view class="mt60 p34">
 			<view class="color#{$5} ">投诉对象</view>
 			<view class="align-center mt30 mb50">
-				<image class="w98 h98 mr30" style="border-radius: 50%;" src="/static/logo.jpg"></image>
-				<text>岚财优选</text>
+				<image class="w98 h98 mr30" style="border-radius: 50%;" src="https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com/app/vip/share.png"></image>
+				<text>岚财良品</text>
 			</view>
 		</view>
 		<view class="container" >

+ 2 - 2
pages_user/user/pay.vue

@@ -4,7 +4,7 @@
 			<view class="inner">
 				<view class="pay">
 					<view class="title">
-						<text class="name">付款给 岚财优选</text>
+						<text class="name">付款给 岚财良品</text>
 						<text class="desc">微信收款</text>
 					</view>
 					<view class="pay-money">
@@ -58,7 +58,7 @@
 		},
 		onShareAppMessage(res) {
 			return {
-				title: '岚财优选-收款',
+				title: '岚财良品-收款',
 				path: `/pages_user/user/pay?companyId=`+this.companyId+"&companyUserId="+this.companyUserId
 			}
 		},

+ 1 - 1
pages_user/user/storeOrder.vue

@@ -800,7 +800,7 @@
 								display: inline-block;
 								padding: 0 6upx;
 								height: 30upx;
-								background: linear-gradient(90deg, #66b2ef 0%, #FF233C 100%);
+								background: linear-gradient(90deg, #FF233C 0%, #FF233C 100%);
 								border-radius: 4upx;
 								margin-right: 10upx;
 								font-size: 22upx;

+ 1 - 1
pages_user/user/storeOrderDetail.vue

@@ -692,7 +692,7 @@
 							display: inline-block;
 							padding: 0 6upx;
 							height: 30upx;
-							background: linear-gradient(90deg, #66b2ef 0%, #FF233C 100%);
+							background: linear-gradient(90deg, #FF233C 0%, #FF233C 100%);
 							border-radius: 4upx;
 							margin-right: 10upx;
 							font-size: 22upx;

+ 2 - 2
pages_user/user/userTuiAdd.vue

@@ -1,12 +1,12 @@
 <template>
   <view>
 		<view class="form-box">
-			<view class="title">你为什么想成为岚财优选健康推广?</view>
+			<view class="title">你为什么想成为岚财良品健康推广?</view>
 			<view class="textarea-box">
 				<textarea v-model="question1" value="" placeholder="请输入..." maxlength="200" placeholder-class="textarea-place" />
 				<view class="num-box">{{ question1.length }}/200</view>
 			</view>
-			<view class="title">你是否了解岚财优选健康推广大使?</view>
+			<view class="title">你是否了解岚财良品健康推广大使?</view>
 			<view class="textarea-box">
 				<textarea v-model="question2" value="" placeholder="请输入..." maxlength="200" placeholder-class="textarea-place" />
 				<view class="num-box">{{ question1.length }}/200</view>

BIN
static/images/cart.png


BIN
static/images/jifen.png


BIN
static/images/more24.png


BIN
static/images/notice.png


BIN
static/images/wk.png


BIN
static/images/xg.png


BIN
static/tabbar/archive.png


BIN
static/tabbar/archive_sel.png


BIN
static/tabbar/health.png


BIN
static/tabbar/health_sel.png


BIN
static/tabbar/mall.png


BIN
static/tabbar/mall_sel.png


BIN
static/tabbar/shop_mall.png


BIN
static/tabbar/shop_mall_sel.png


+ 3 - 3
store/index.js

@@ -18,9 +18,9 @@ export default new Vuex.Store({
 	// imgpath: 'https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com',//百域承品图片请求地址
 	imgpath: 'https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com',//百域承品图片请求地址
 	// https://jnlzjk-1323137866.cos.ap-chongqing.myqcloud.com/shop  百域承品图片链接
-	logoname:'岚财优选',
-	//appid:'wx40dcfa2797d6fc2d',//岚财优选	// logonam岚财优选域臻品',
-	appid:'wxcfd4cd6e2375e42f'//本地测试
+	logoname:'岚财良品',
+	appid:'wx40dcfa2797d6fc2d',//岚财良品	// logonam岚财良品域臻品',
+	//appid:'wxcfd4cd6e2375e42f'//本地测试
 	
   },
   getters: {