wzx há 9 meses atrás
pai
commit
402ad3549f

+ 4 - 5
card/common/api.js

@@ -3,11 +3,10 @@ export const apiServer = process.env.API_BASE_URL;
 // console.log("ossUrl", ossUrl);
 // console.log("apiServer", apiServer);
 
-export const token = '';
-// export const token = '96ba3c924394934f7d30fa869a94ce0d';
-// export const token = '9db42d9fe9c9635c85e6fc04f08e898f';
-// export const token = '39de263745caccbb183703987b1c21eb';
-// export const token = 'd4dd6b57a15b4abaccf6cb6adcd4fd44';
+// export const token = '';
+export const token = '96ba3c924394934f7d30fa869a94ce0d';
+// export const token = 'bb960dda8604c39242dd2665cc7afd69';
+// export const token = '04f912f3b521305eb42c9d39b0788ac2';
 
 // 卡片基本信息查询
 export const apiCardBaseQuery = apiServer + 'CardBaseQuery';

+ 34 - 0
card/common/appfunc.js

@@ -0,0 +1,34 @@
+// 彩图奔跑APP中的JS函数调用
+var appfunc = {
+	
+	/* 
+	微信分享
+	参数data格式: {
+		title: "彩图奔跑商家版",
+		url: "https://oss-mbh5.colormaprun.com/shop/",
+		image: "https://oss-mbh5.colormaprun.com/shop/static/logo.png",
+		scene: "session" // session:分享到对话  timeline:分享到朋友圈  favorite:分享到收藏
+	}; 
+	*/
+	shareWx(data) {
+		data = JSON.stringify(data);
+		// console.log("[appfunc] shareWx: data", data);
+		share_wx.postMessage(data);
+	},
+	
+	/*
+	打开微信小程序
+	参数data格式: {
+		username: "gh_bea09156da8d",	// 小程序原始ID
+		path: ""		// 小程序页面路径(为空则表示进入默认首页) 商家首页:pages/index/index?mall_id=3892  积分中心:pages/integralRedeem/index?mall_id=3892
+	}; 
+	*/
+	launchWxMini(data) {
+		data = JSON.stringify(data);
+		console.log("[appfunc] launchWxMini: data", data);
+		wx_launch_mini.postMessage(data);
+	}
+	
+}
+
+export default appfunc;

+ 62 - 0
card/common/rankfunc.js

@@ -0,0 +1,62 @@
+import tools from '/common/tools';
+import {
+		teamName
+	} from '/common/define';
+	
+var rankfunc = {
+	
+	getTeamName(teamType, teamIndex) {
+		return teamName[teamType][teamIndex];
+	},
+	
+	fmtTime(time) {
+		if (time > 0)
+			return tools.convertSecondsToHMS(time, 1);
+		else
+			return '--';
+	},
+	
+	// 格式化 距离
+	fmtDistanct(val) {
+		return Math.round(val * 100 / 1000) / 100;
+		// if (val < 1000)
+		// 	return Math.round(val * 10 / 1000) / 10;
+		// else
+		// 	return Math.round(val / 1000);
+	},
+	
+	// 格式化 配速
+	fmtPace(val) {
+		if (val > 0)
+			return tools.convertSecondsToHMS(val, 2);
+		else
+			return '--';
+	},
+	
+	// 根据成绩类型格式化成绩
+	// rankNum:成绩,rankType:成绩类型,addUnit:是否添加单位
+	fmtRankNumByType(rankNum, rankType, addUnit=true) {
+		let fmtRank = rankNum;
+		let unit = '';
+		if (rankType == 'totalDistance') {
+			fmtRank = this.fmtDistanct(rankNum);
+			unit = ' km';
+		} else if (rankType == 'fastPace') {
+			fmtRank = this.fmtPace(rankNum);
+		} else if (rankType == 'speed') {
+			fmtRank = this.fmtTime(rankNum);
+		} else if (rankType == 'rightAnswerPer') {
+			unit = '%';
+		} else if (rankType == 'totalCp' || rankType == 'totalSysPoint') {
+			unit = ' 个';
+		}
+		
+		if (addUnit) {
+			fmtRank += unit;
+		}
+		return fmtRank;
+	}
+	
+};
+
+export default rankfunc;

+ 1 - 1
card/components/my-popup/my-popup.vue

@@ -255,7 +255,7 @@
 						<image mode="aspectFit" style="height: 100px; margin-top: 15px; margin-bottom: 25px;"
 							:src="item.data.img">
 						</image>
-						<view class="uni-column" style="margin-bottom: 20px;" @click="dealNavClick(item.data.point)">
+						<view v-if="item.data.point" class="uni-column" style="margin-bottom: 20px;" @click="dealNavClick(item.data.point)">
 							<image mode="aspectFit" style="width: 19px; height: 26px;" src="/static/common/nav3.png"></image>
 							<text class="" style="color: #E60012; font-size: 14px;" >导航前往起点</text>
 						</view>

+ 51 - 43
card/components/my-ranklist/my-ranklist.vue

@@ -8,10 +8,14 @@
 				<view class="item-detail uni-row">
 					<view class="uni-row item-box">
 						<view v-if="item.isDispAdditionalName == 1 && item.additionalName.length > 0" class="uni-row item-userName">
-							<text class="item-userName2">{{item.userName}}</text>
+							<text class="item-userName2">{{item.isSelf ? "我" : item.userName}}</text>
 							<text class="item-additionalName">({{item.additionalName}})</text>
 						</view>
-						<text v-else class="item-userName">{{ teamType >= 0 ? getTeamName(teamType, item.userName) : item.userName}}</text>
+						<!-- <text v-else class="item-userName">{{ teamType >= 0 ? rankfunc.getTeamName(teamType, item.userName) : item.userName}}</text> -->
+						<view v-else>
+							<text v-if="teamType >= 0" class="item-userName">{{rankfunc.getTeamName(teamType, item.userName)}}</text>
+							<text v-else class="item-userName">{{item.isSelf ? "我" : item.userName}}</text>
+						</view>
 						<!-- isInGame 是否正在比赛中 0 不在 1 在 -->
 						<image class="item-inGame" v-if="item.isInGame == 1" mode="aspectFit" src="/static/common/ingame.gif"></image>
 						<!-- isTodayFinishGame 当日完赛 0 没有比赛 1 非正常完赛 2 正常完赛 -->
@@ -19,12 +23,12 @@
 						<image class="item-todayFinish" v-else-if="item.isTodayFinishGame == 2" mode="aspectFit" src="/static/common/finishgame.png"></image>
 						<text v-if="item.isDispInGameUserNum == 1 && item.inGameUserNum > 0" class="item-inGameNum">x {{item.inGameUserNum}}</text>
 					</view>
-					<text class="item-totalTime" v-if="rankType == 'totalDistance'">{{fmtDistanct(item.inRankNum)}} km</text>
-					<text class="item-totalTime" v-else-if="rankType == 'fastPace'">{{fmtPace(item.inRankNum)}}</text>
+					<text class="item-totalTime" v-if="rankType == 'totalDistance'">{{rankfunc.fmtDistanct(item.inRankNum)}} km</text>
+					<text class="item-totalTime" v-else-if="rankType == 'fastPace'">{{rankfunc.fmtPace(item.inRankNum)}}</text>
 					<text class="item-totalTime" v-else-if="rankType == 'rightAnswerPer'">{{item.inRankNum}}%</text>
 					<text class="item-totalTime" v-else-if="rankType == 'totalCp' || rankType == 'totalSysPoint'">{{item.inRankNum}} 个</text>
 					<text class="item-totalTime" v-else-if="rankType == 'totalScore'">{{item.inRankNum}}</text>
-					<text class="item-totalTime" v-else-if="rankType == 'speed'">{{fmtTime(item.inRankNum)}}</text>
+					<text class="item-totalTime" v-else-if="rankType == 'speed'">{{rankfunc.fmtTime(item.inRankNum)}}</text>
 					<text class="item-totalTime" v-else-if="rankType == 'grad'">{{item.inRankNum}}</text>
 					<text class="item-totalTime" v-else-if="rankType == 'mapNum'">{{item.inRankNum}}</text>
 					<text class="item-totalTime" v-else>{{fmtTime(item.totalTime)}}</text>
@@ -35,10 +39,7 @@
 </template>
 
 <script>
-	import tools from '/common/tools';
-	import {
-		teamName
-	} from '/common/define';
+	import rankfunc from '/common/rankfunc';
 
 	export default {
 		name: "my-ranklist",
@@ -52,6 +53,10 @@
 				type: String,
 				default: ""
 			},
+			styleType: {	// 排名列表样式 0:默认 static\default  1: static\ranklist\1
+				type: Number,
+				default: 0
+			},
 			myOldRankNum: { // 我的旧排名
 				type: Number,
 				default: null
@@ -63,6 +68,7 @@
 		},
 		data() {
 			return {
+				rankfunc: rankfunc,
 				curMoveIndex: null, // 当前正在移动的列表Index (等于 rankNum-1) 用于排名变动的动画效果
 				refList: null,
 				refListItems: null,
@@ -93,39 +99,16 @@
 				}
 				return classStr;
 			},
-			getTeamName(teamType, teamIndex) {
-				return teamName[teamType][teamIndex];
-			},
 			getMedalClass(rankNum) {
 				if (rankNum == 0)
-					return 'item-rankNum-other';
+					return 'rankNum-style' + this.styleType + '-other';
+					// return 'medal-style' + this.styleType + '-other';
 				if (rankNum <= 3)
-					return 'item-rankNum-medal-' + rankNum;
+					return 'medal-style' + this.styleType + '-' + rankNum;
 				else if (rankNum <= 10)
-					return 'item-rankNum-medal-other';
-				else
-					return 'item-rankNum-other';
-			},
-			fmtTime(time) {
-				if (time > 0)
-					return tools.convertSecondsToHMS(time, 1);
+					return 'medal-style' + this.styleType + '-other';
 				else
-					return '--';
-			},
-			// 格式化 距离
-			fmtDistanct(val) {
-				return Math.round(val * 100 / 1000) / 100;
-				// if (val < 1000)
-				// 	return Math.round(val * 10 / 1000) / 10;
-				// else
-				// 	return Math.round(val / 1000);
-			},
-			// 格式化 配速
-			fmtPace(val) {
-				if (val > 0)
-					return tools.convertSecondsToHMS(val, 2);
-				else
-					return '--';
+					return 'rankNum-style' + this.styleType + '-other';
 			},
 			// 排名上升
 			moveRankUp(i, animation = false) {
@@ -271,28 +254,53 @@
 		justify-content: space-between;
 	}
 
-	.item-rankNum-medal-1 {
+	.medal-style0-1 {
 		color: #bd640a;
 		background-image: url("/static/default/medal_gold.png");
 	}
 
-	.item-rankNum-medal-2 {
+	.medal-style0-2 {
 		color: #68758c;
 		background-image: url("/static/default/medal_silver.png");
 	}
 
-	.item-rankNum-medal-3 {
+	.medal-style0-3 {
 		color: #9b3b11;
 		background-image: url("/static/default/medal_copper.png");
 	}
 
-	.item-rankNum-medal-other {
+	.medal-style0-other {
 		color: #9a140a;
 		background-image: url("/static/default/medal_other.png");
 	}
 
-	.item-rankNum-other {
-		color: #9a140a;
+	.rankNum-style0-other {
+		color: #8c8c8c;
+	}
+	
+	.medal-style1-1 {
+		font-size: 0px;
+		background-image: url("/static/ranklist/1/medal_gold.png");
+	}
+
+	.medal-style1-2 {
+		font-size: 0px;
+		background-image: url("/static/ranklist/1/medal_silver.png");
+	}
+
+	.medal-style1-3 {
+		font-size: 0px;
+		background-image: url("/static/ranklist/1/medal_copper.png");
+	}
+
+	.medal-style1-other {
+		font-size: 16px;
+		color: #8c8c8c;
+	}
+	
+	.rankNum-style1-other {
+		font-size: 16px;
+		color: #8c8c8c;
 	}
 
 	.item-box {

+ 2 - 2
card/manifest.json

@@ -2,8 +2,8 @@
     "name" : "card",
     "appid" : "__UNI__A61F96B",
     "description" : "",
-    "versionName" : "2.2.3",
-    "versionCode" : 223,
+    "versionName" : "2.3.0",
+    "versionCode" : 230,
     "transformPx" : false,
     /* 5+App特有相关 */
     "app-plus" : {

+ 7 - 0
card/pages.json

@@ -257,6 +257,13 @@
 				"navigationBarTitleText" : "[游戏] 网格赛事 - 网格拼图"
 			}
 		},
+		{
+			"path" : "pages/game/grid/rankList",
+			"style" : 
+			{
+				"navigationBarTitleText" : "[游戏] 网格赛事 - 排行榜"
+			}
+		},
 		{
 			"path" : "pages/ad/index",
 			"style" : 

+ 6 - 0
card/pages/achievement/ecert/ecert.vue

@@ -543,6 +543,12 @@ https://oss-mbh5.colormaprun.com/card/#/pages/achievement/ecert/ecert
 					image: "https://oss-mbh5.colormaprun.com/shop/static/logo.png",
 					scene: "session" // session:分享到对话  timeline:分享到朋友圈  favorite:分享到收藏
 				};
+				/* let data = {
+					title: "赢商网小程序",
+					url: "",
+					image: "https://oss-mbh5.colormaprun.com/static/yingshangwang.png",
+					scene: "session" // session:分享到对话  timeline:分享到朋友圈  favorite:分享到收藏
+				}; */
 				data = JSON.stringify(data);
 				// console.log(data);
 				share_wx.postMessage(data);

+ 43 - 0
card/pages/game/grid/cardconfig/test.js

@@ -15,6 +15,10 @@ export const localCardConfig = `{
 				border-radius: 4px;
 				background: #FF870D;
 			}
+			.tab-active {
+				color: #FFFFFF !important;
+				background: #f3b600 !important;
+			}
 		",
 		"popupRuleConfig": {
 			"height": "550px"
@@ -65,6 +69,7 @@ export const localCardConfig = `{
 				color: #ffffff !important;
 			}
 		",
+		"tabPageItems": ["赛事", "排行榜"],
 		"introduce": {
 			"title": "赛事九宫格:",
 			"content": "选择其中一个格子,挑战成功即可解锁。九个格子全部解锁,获取一张奖励卡和对应奖品!"
@@ -72,6 +77,44 @@ export const localCardConfig = `{
 		"activityRules": {
 			"title": "获取积分规则:",
 			"content": "1. 每成功解锁一个新地图获得100积分<br>2. 挑战过程中每成功打点获得1个积分<br>3. 挑战过程中每成功答对一题获得1个积分"
+		},
+		"ad": {
+			"title": "广告",
+			"content": "广告内容 <a onClick=launchWxMini()>打开小程序</a>"
+		},
+		"wxMiniParam": {
+			"username": "gh_bea09156da8d", 
+			"path": "pages/integralRedeem/index?mall_id=3892"
+		}
+	},
+	"rankList": {
+		"css": "
+		",
+		"tabPageItems": ["赛事", "排行榜"],
+		"rankParam": {
+			"tabItemsMark": [],
+			"dispArrStr": "totalSysPoint,totalDistance,rightAnswerPer,totalCp,fastSpeed",
+			"tabItems": [
+				"总积分",
+				"总里程",
+				"正确答题",
+				"打点数",
+				"单圈用时"
+			],
+			"rankTypeList": [
+				"totalScore",
+				"totalDistance",
+				"rightAnswerPer",
+				"totalCp",
+				"speed"
+			],
+			"rankRsList": [
+				"totalSysPointRs",
+				"totalDistanceRs",
+				"rightAnswerPerRs",
+				"totalCpRs",
+				"fastSpeedRs"
+			]
 		}
 	}
 }`;

+ 151 - 0
card/pages/game/grid/cardconfig/test2.js

@@ -0,0 +1,151 @@
+export const localCardConfig = `{
+	"common": {
+		"css": "
+			.content {
+				background: #5e00d6;
+			}
+			.page-top {
+				background: #5e00d6 !important;
+			}
+			.topbar-color {
+			    color: #ffffff !important;
+			}
+			.swiper-item-button {
+				height: 50px !important;
+				line-height: 50px !important;
+				color: #A65600 !important;
+				background: linear-gradient(117.53deg, #FFCD29 0%, #FFE694 42.36%, #FFC508 100%) !important;
+			}
+			.uni-swiper-dots-horizontal {
+				bottom: 90px !important;
+			}
+			.topbar-rule {
+				color: #FFFFFF;
+				border-radius: 4px;
+				background: #fe4f96;
+			}
+			.tab {
+				border: 1px solid #ffffff;
+			}
+			.tab-active {
+				color: #FFFFFF !important;
+				background: #fe4f96 !important;
+			}
+		",
+		"popupRuleConfig": {
+			"height": "550px"
+		},
+		"popupRuleList": [
+			"default3",
+			{
+				"type": 10,
+				"data": {
+					"title": "视频教程",
+					"video": {
+						"src": "https://oss-mbh5.colormaprun.com/video/定向讲解.mp4",
+						"poster": "static/common/jbbs2.png",
+						"width": "100%",
+						"height": "280px"
+					},
+					"content": "<br>定向赛怎么玩?点击上面的视频就知道啦~"
+				}
+			}
+		]
+	},
+	"index": {
+		"css": "
+			.content-bg{
+				background: linear-gradient(180deg, rgb(255, 216, 77) 0%, rgb(255, 110, 0) 100%) !important;
+			}
+			.logo{
+				width: 40vw !important;
+				height: 40vw !important;
+				background: url('static/logo/building2.png') no-repeat center !important;
+				background-size: contain !important;
+			}
+			.mod-text{
+				color: #FFFFFF !important;
+			}
+			.mod-button{
+				color: #EF6223 !important;
+				background-color: #FFFFFF !important;
+			}
+		"
+	},
+	"grid": {
+		"css": "
+			.cell-name-uncomplete {
+				color: #CF6B00 !important;
+			}
+			.cell-name-complete {
+				color: #ffffff !important;
+			}
+		",
+		"tabPageItems": ["赛事", "排行榜"],
+		"gridTop" : "<img src='static/temp/1.png'/>",
+		"gridBottom": "<img src='static/temp/2.png'/> 
+			<img src='static/temp/3.png'/> 
+			<img style='width:50%;' onClick=launchWxMini() src='static/temp/4.png'/> 
+			<img src='static/temp/5.png'/>
+			<video src='https://oss-mbh5.colormaprun.com/video/定向讲解.mp4' 
+			poster='static/common/jbbs2.png' http-cache='true' 
+			class='uni-video-video'
+			controls='true'
+			></video> 
+			<img src='static/temp/6.png'/>",
+		"introduce": {
+		},
+		"activityRules": {
+		},
+		"ad": {
+		},
+		"wxMiniParam": {
+			"username": "gh_bea09156da8d", 
+			"path": "pages/integralRedeem/index?mall_id=3892"
+		}
+	},
+	"rankList": {
+		"css": "
+			.list {
+				width: 85% !important;
+				margin-top: 15px !important;
+				padding: 10px !important;
+				border-radius: 10px;
+			}
+			.list-item2 {
+				margin-left: 10px;
+				margin-right: 10px;
+			}
+			.item-detail {
+				border-bottom: 0px !important;
+			}
+		",
+		"tabPageItems": ["赛事", "排行榜"],
+		"rankParam": {
+			"ranklistStyleType": 1,
+			"tabItemsMark": [],
+			"dispArrStr": "totalSysPoint,totalDistance,rightAnswerPer,totalCp,fastSpeed",
+			"tabItems": [
+				"总积分",
+				"总里程",
+				"正确答题",
+				"打点数",
+				"单圈用时"
+			],
+			"rankTypeList": [
+				"totalScore",
+				"totalDistance",
+				"rightAnswerPer",
+				"totalCp",
+				"speed"
+			],
+			"rankRsList": [
+				"totalSysPointRs",
+				"totalDistanceRs",
+				"rightAnswerPerRs",
+				"totalCpRs",
+				"fastSpeedRs"
+			]
+		}
+	}
+}`;

+ 197 - 27
card/pages/game/grid/grid.vue

@@ -1,6 +1,6 @@
 <!-- 
 [游戏] 网格赛事 - 网格拼图
-http://localhost:5173/card/#/pages/game/grid/grid
+http://localhost:5173/card/#/pages/game/grid/grid?id=16
 https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
  -->
 <template>
@@ -11,9 +11,17 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					@btnInfoClick="btnInfo"></my-topbar>
 			</view>
 			<view class="main uni-column">
-				<view v-if="grid.state <= 1" class="mt-content">开始你的挑战吧</view>
-				<view v-if="grid.state == 2" class="mt-content">很棒!继续你的挑战吧</view>
-				<view v-if="grid.state >= 3" class="mt-content" style="color: #FF5733;">挑战成功!</view>
+				<my-tab v-if="tabPageItems.length > 0" ref="tabPage" class="tabPage" :tabItems="tabPageItems" :type="0"
+					:initActIndex="tabPageInitActIndex" @onTabClick="onTabPageClick" :fontSize="14"></my-tab>
+
+				<!-- <view v-if="tabPageCurrent == 0" class="uni-column"> -->
+				<view v-if="gridTop && gridTop != ''" class="gridTop" v-html="gridTop"></view>
+				<view v-else>
+					<view v-if="grid.state <= 1" class="mt-content">开始你的挑战吧</view>
+					<view v-if="grid.state == 2" class="mt-content">很棒!继续你的挑战吧</view>
+					<view v-if="grid.state >= 3" class="mt-content" style="color: #FF5733;">挑战成功!</view>
+				</view>
+
 				<view class="grid uni-column uni-jcse" :style="getGridStyle()">
 					<view class="grid-row uni-row uni-jcse" :style="getGridRowStyle()" v-for="rowId in grid.heightNum"
 						:key="rowId">
@@ -29,6 +37,9 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 						</view>
 					</view>
 				</view>
+
+				<view v-if="gridBottom && gridBottom != ''" class="gridBottom" v-html="gridBottom"></view>
+
 				<view class="introduce uni-column">
 					<text class="introduce-title">{{introduce.title}}</text>
 					<text class="introduce-content" v-html="introduce.content"></text>
@@ -39,6 +50,14 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					<text class="activityRules-content" v-html="activityRules.content"></text>
 				</view>
 
+				<view v-if="ad.content.length > 0" class="ad uni-column">
+					<text class="ad-title">{{ad.title}}</text>
+					<!-- <text class="ad-content" v-html="ad.content" @click="appfunc.launchWxMini({username:'gh_bea09156da8d', path:'pages/integralRedeem/index?mall_id=3892'})"></text> -->
+					<text class="ad-content" v-html="ad.content"></text>
+				</view>
+
+				<!-- </view> -->
+
 			</view>
 
 			<my-popup ref="mypopup" :config="popupDataConfig" :dataList="popupDataList"
@@ -46,17 +65,18 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 
 			<my-popup ref="mypopupRule" :config="cardConfigData.popupRuleConfig"
 				:dataList="cardConfigData.popupRuleList"></my-popup>
-				
+
 		</view>
 	</view>
 </template>
 
 <script>
-	import tools from '../../../common/tools';
-	import cardfunc from '../../../common/cardfunc';
+	import tools from '/common/tools';
+	import appfunc from '/common/appfunc';
+	import cardfunc from '/common/cardfunc';
 	import {
 		localCardConfig
-	} from "./cardconfig/test.js";
+	} from "./cardconfig/test2.js";
 	import {
 		token,
 		apiGridsQuery,
@@ -64,7 +84,7 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 		apiOnlineMcSignUp,
 		checkResCode,
 		checkToken
-	} from '../../../common/api';
+	} from '/common/api';
 
 	export default {
 		data() {
@@ -75,6 +95,12 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 				queryObj: {},
 				queryString: "",
 				token: "",
+
+				tabPageItems: [],
+				// tabPageItems: ["赛事", "排行榜"],
+				tabPageCurrent: 0,
+				tabPageInitActIndex: 0,
+
 				ecId: 0, // 卡片id
 				compId: 0, // 赛事id
 				compName: "", // 赛事名称
@@ -169,6 +195,9 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					}]
 				},
 
+				gridTop: "",
+				gridBottom: "",
+
 				introduce: {
 					title: "",
 					content: ""
@@ -176,10 +205,29 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 				activityRules: {
 					title: "",
 					content: ""
+				},
+				ad: {
+					title: "",
+					content: ""
+				},
+				wxMiniParam: {
+					username: "",
+					path: ""
 				}
 			}
 		},
 		computed: {},
+		mounted() {
+			// 在组件的 mounted 生命周期钩子中,可以通过 window 对象将组件实例或特定方法暴露到全局作用域。
+
+			// 将组件实例暴露到全局作用域
+			// window.myComponent = this;
+
+			// 或者仅暴露特定方法
+			window.launchWxMini = () => {
+				appfunc.launchWxMini(this.wxMiniParam)
+			}
+		},
 		onLoad(query) { // 类型非必填,可自动推导
 			// console.log(query);
 			this.queryObj = query;
@@ -286,6 +334,24 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					tools.loadCssCode(css);
 				}
 
+				// 加载TAB
+				const tabPageItems = config.tabPageItems;
+				if (tabPageItems != undefined) {
+					this.tabPageItems = tabPageItems;
+				}
+
+				// 加载gridTop
+				const gridTop = config.gridTop;
+				if (gridTop != undefined) {
+					this.gridTop = gridTop;
+				}
+
+				// 加载gridBottom
+				const gridBottom = config.gridBottom;
+				if (gridBottom != undefined) {
+					this.gridBottom = gridBottom;
+				}
+
 				// 加载介绍内容
 				const introduce = config.introduce;
 				if (introduce != undefined) {
@@ -308,6 +374,23 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					}
 				}
 
+				// 加载广告内容
+				const ad = config.ad;
+				if (ad != undefined) {
+					if (ad.title != undefined) {
+						this.ad.title = ad.title;
+					}
+					if (ad.content != undefined) {
+						this.ad.content = ad.content;
+					}
+				}
+
+				// 加载微信小程序参数
+				const wxMiniParam = config.wxMiniParam;
+				if (wxMiniParam != undefined) {
+					this.wxMiniParam = wxMiniParam;
+				}
+
 				this.pageReady = true;
 			},
 			// 网格卡片信息查询
@@ -325,8 +408,8 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					success: (res) => {
 						// console.log("gridsQuery", res);
 						const data = res.data.data;
-						this.compId = data.compId,
-							this.compName = data.compName;
+						this.compId = data.compId;
+						this.compName = data.compName;
 						this.grid.widthNum = data.widthNum;
 						this.grid.heightNum = data.heightNum;
 						this.grid.maskImgPic = data.maskImgPic;
@@ -406,21 +489,46 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 			},
 			onCellClick(rowId, colId) {
 				this.sltCellOrderNum = this.getCellOrderNum(rowId, colId);
+				this.sltCellRs = null;
+				this.popupDataList = null;
 				this.sltCellRs = tools.objArrGetObjByValue(this.grid.detailRs, "orderNum", this.sltCellOrderNum);
-				if (this.sltCellRs && this.sltCellRs.ocaId > 0) {
-					this.popupDataList = [{
-						"type": 11,
-						"data": {
-							"title": this.sltCellRs.showName,
-							"img": this.sltCellRs.popupImg,
-							"content": this.sltCellRs.description,
-							"point": {
-								"longitude": this.sltCellRs.longitude,
-								"latitude": this.sltCellRs.latitude,
-								"name": this.sltCellRs.showName
+				// console.log("[onCellClick] sltCellOrderNum", this.sltCellOrderNum);
+				// console.log("[onCellClick] sltCellRs", this.sltCellRs);
+				if (this.sltCellRs) {
+					if (this.sltCellRs.relationType == 0) {
+						uni.showToast({
+							icon: "none",
+							title: "该格子未绑定赛事活动"
+						});
+						return;
+					}
+					
+					// relationType: 关联类型 0:未绑定 1:活动详情 2:活动列表 3:地图列表
+					if (this.sltCellRs.relationType == 1 && this.sltCellRs.ocaId > 0) {
+						this.popupDataList = [{
+							"type": 11,
+							"data": {
+								"title": this.sltCellRs.showName,
+								"img": this.sltCellRs.popupImg,
+								"content": this.sltCellRs.description,
+								"point": {
+									"longitude": this.sltCellRs.longitude,
+									"latitude": this.sltCellRs.latitude,
+									"name": this.sltCellRs.showName
+								}
 							}
-						}
-					}];
+						}];
+					} else if (this.sltCellRs.relationType == 2 && this.sltCellRs.mapId > 0) {
+						this.popupDataList = [{
+							"type": 11,
+							"data": {
+								"title": this.sltCellRs.showName,
+								"img": this.sltCellRs.popupImg,
+								"content": this.sltCellRs.description
+							}
+						}];
+					}
+					
 					this.$nextTick(() => {
 						this.$refs.mypopup.popupOpen();
 					});
@@ -428,13 +536,20 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 					uni.showToast({
 						icon: "none",
 						title: "该格子未绑定赛事活动"
-					})
+					});
 				}
 			},
 			startGame() {
 				if (this.sltCellRs) {
-					const url = `action://to_detail/?id=${this.sltCellRs.ocaId}&matchType=${this.sltCellRs.mcType}`;
-					tools.appAction(url);
+					// relationType: 关联类型 1:活动详情 2:活动列表 3:地图列表
+					if (this.sltCellRs.relationType == 1 && this.sltCellRs.ocaId > 0) {
+						const url = `action://to_detail/?id=${this.sltCellRs.ocaId}&matchType=${this.sltCellRs.mcType}`;
+						tools.appAction(url);
+					} else if (this.sltCellRs.relationType == 2 && this.sltCellRs.mapId > 0) {
+						const url =
+							`action://to_activity_list/?id=${this.sltCellRs.mapId}&mapName=${this.sltCellRs.showName}&pin=`;
+						tools.appAction(url);
+					}
 				}
 			},
 			btnBack() {
@@ -443,6 +558,18 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 			},
 			btnInfo() {
 				this.$refs.mypopupRule.popupOpen();
+			},
+			onTabPageClick(val) {
+				console.log("onTabClick: ", val);
+				// this.tabPageCurrent = val;
+				if (val == 1) {
+					const url = '/pages/game/grid/rankList?' + this.queryString;
+					tools.appAction(url, "uni.navigateTo");
+				}
+			},
+			test() {
+				const url = `action://to_activity_list/?id=${item.path.ocaId}&matchType=${item.path.mcType}`;
+				tools.appAction(url);
 			}
 		}
 	}
@@ -472,6 +599,28 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 		justify-content: space-around;
 	}
 
+	.tabPage {
+		width: 100%;
+	}
+
+	.gridTop {
+		margin: 20px 0px;
+	}
+
+	/deep/ .gridTop img {
+		width: 100vw;
+	}
+
+	.gridBottom {
+		margin: 20px 0px;
+		text-align: center;
+	}
+
+	/deep/ .gridBottom img {
+		width: 100vw;
+		object-fit: contain;
+	}
+
 	.mt-content {
 		margin: 20px 0px;
 		font-size: 20px;
@@ -563,4 +712,25 @@ https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/grid
 		line-height: 23px;
 		font-family: Source Han Sans CN;
 	}
+
+	.ad {
+		width: 96%;
+		margin-bottom: 10px;
+		align-items: flex-start;
+		justify-content: space-around;
+	}
+
+	.ad-title {
+		color: #333333;
+		font-size: 16px;
+		line-height: 50px;
+		font-family: Source Han Sans CN;
+	}
+
+	.ad-content {
+		color: #333333;
+		font-size: 14px;
+		line-height: 23px;
+		font-family: Source Han Sans CN;
+	}
 </style>

+ 678 - 0
card/pages/game/grid/rankList.vue

@@ -0,0 +1,678 @@
+<!-- 
+[游戏] 网格赛事 - 排名列表
+http://localhost:5173/card/#/pages/game/grid/rankList
+https://oss-mbh5.colormaprun.com/card/#/pages/game/grid/rankList
+ -->
+<template>
+	<view class="body">
+		<view v-if="pageReady" class="content uni-column">
+			<view class="uni-column page-top">
+				<my-topbar :mcName="mcName" class="topbar-color" :showRule="true" @btnBackClick="btnBack"
+					@btnInfoClick="btnInfo"></my-topbar>
+			</view>
+			<view class="main uni-column">
+				<!-- <view class="main-bar uni-row uni-jcse">
+					<text>题目输出:{{all_totalAnswerNum}}</text>
+					<text>总里程:{{fmtDistanct(all_totalDistance)}}km</text>
+					<text>总打点:{{all_totalCp}}</text>
+					<text>总百味豆:{{all_totalSysPoint}}</text>
+				</view> -->
+				<my-tab v-if="tabPageItems.length > 0" ref="tabPage" class="tabPage" :tabItems="tabPageItems" :type="0"
+					:initActIndex="tabPageInitActIndex" @onTabClick="onTabPageClick" :fontSize="14"></my-tab>
+
+				<my-tab ref="tab" :tabItems="tabItems" :tabItemsMark="tabItemsMark" :type="0"
+					:initActIndex=configParam.tabInitActIndex @onTabClick="onTabClick" :fontSize="12"></my-tab>
+
+				<view class="tab-view uni-column">
+					<template v-for="(item, index) in rankRsList" :key="index">
+						<my-ranklist v-show="tabCurrent === index" :rankRs="rankList[item]"
+							:rank-type="rankTypeList[index]" :styleType="ranklistStyleType"></my-ranklist>
+					</template>
+				</view>
+
+				<view v-if="ranklistStyleType == 1 && selfRank" class="btmSelfInfo uni-row uni-jcsa">
+					<image class="btmSelfInfo-corner" mode="aspectFit" src="/static/custom/yuedong/yd.png"></image>
+					<view class="bsi-box uni-row uni-jcsb">
+						<view class="uni-row">
+							<view class="bsi-headimg"></view>
+							<view class="uni-column uni-ais">
+								<view class="bsi-name">{{selfRank.userName}}</view>
+								<view class="bsi-score">
+									<text class="bsi-score-type">{{tabItems[tabCurrent]}}</text>
+									<text>{{rankfunc.fmtRankNumByType(selfRank.inRankNum, rankTypeList[tabCurrent])}}</text>
+								</view>
+							</view>
+						</view>
+						<view class="bsi-ranknum">第 {{selfRank.rankNum}} 名</view>
+					</view>
+				</view>
+
+				<!-- <button class="btnBack bgcolor-main" @click="btnStartGame">{{btnStartGameText}}</button> -->
+			</view>
+
+			<my-popup ref="mypopup" :config="cardConfigData.popupRuleConfig" :dataList="cardConfigData.popupRuleList"
+				:acttime="acttime"></my-popup>
+			<!-- <my-popup ref="mypopupExchg" :config="cardConfigData.popupExchgConfig"
+				:dataList="cardConfigData.popupExchgList"></my-popup> -->
+			<my-popup ref="mypopupMessage" :config="cardConfigData.popupMessageConfig"
+				:dataList="cardConfigData.popupMessageList" @noMoreRemindersClick="onNoMoreRemindersClick"></my-popup>
+
+		</view>
+	</view>
+</template>
+
+<script>
+	import tools from '/common/tools';
+	import cardfunc from '/common/cardfunc';
+	import rankfunc from '/common/rankfunc';
+	import {
+		localCardConfig
+	} from "./cardconfig/test2.js";
+	import {
+		teamName
+	} from '/common/define';
+	import {
+		token,
+		apiMatchRsDetailQuery,
+		apiCardRankDetailQuery,
+		apiCompStatisticQuery,
+		apiIsAllowMcSignUp,
+		apiUserJoinCardQuery,
+		checkResCode
+	} from '/common/api';
+
+	export default {
+		data() {
+			return {
+				rankfunc: rankfunc,
+				cardConfigData: cardfunc.cardConfigData,
+				pageReady: false,
+				pageName: "rankList",
+				messageKey: "message-game-grid",
+				queryObj: {},
+				queryString: "",
+				token: "",
+				ovtype: "",
+				cardconfig: {}, // 卡片配置
+				userconfig: {}, // 用户配置
+
+				ecId: 0, // 卡片id
+				mcId: 0, // 赛事id
+				mcType: 0, // 赛事类型 1 普通活动 2 线下赛 3 线上赛
+				mcName: "", // 赛事名称
+				acttime: "", // 活动时间
+				beginSecond: null, // 活动或赛事开始时间戳,单位秒
+				endSecond: null, // 活动或赛事结束时间戳,单位秒
+				ocaId: 0, // 关联id,带入到App活动详情页面
+				nickName: "", // 昵称
+				totalNum: null, // 总场次
+				totalDistanct: null, // 总距离,单位米
+				totalDistanctRankNum: null, // 总距离排名
+				totalCp: null, // 总打点数
+				totalCpRankNum: null, // 总打点数排名
+				totalSysPoint: null, // 总百味豆
+				totalSysPointRankNum: null, // 总百味豆排名
+				fastPace: null, // 个人最快配速
+				fastPaceRankNum: null, // 个人最快配速排名
+				// ocaRs: [], // 卡片对应活动集合
+
+				isJoin: null, // 是否报名
+				btnStartGameText: "",
+
+				all_totalDistance: 0, // 赛事所有人累计里程,单位米
+				all_totalRightAnswerNum: 0, // 赛事所有人正确答题数(校园文化输出)
+				all_totalAnswerNum: 0, // 赛事所有人答题数(校园文化输出)
+				all_totalCp: 0, // 赛事中所有人打点数
+				all_totalSysPoint: 0, // 赛事中所有人百味豆
+
+				mcState: 0, // 赛事/活动状态 0: 未开始  1: 进行中  2: 已结束
+				allowMcSignUp: false, // 是否允许重新分组
+				countdown: "", // 倒计时
+				rankList: {}, // 排名列表
+				interval: null,
+
+				tabPageItems: [],
+				// tabPageItems: ["赛事", "排行榜"],
+				tabPageCurrent: 0,
+				tabPageInitActIndex: 1,
+
+				teamType: 0, // 队伍类型
+				dispArrStr: "totalDistance,totalCp,totalSysPoint,fastPace", // 要显示的集合范围
+				tabItems: ["总里程", "打点数", "百味豆", "配速"],
+				rankTypeList: ["totalDistance", "totalCp", "totalSysPoint", "fastPace"],
+				tabCurrent: 0,
+				tabItemsMark: [],
+				/* tabItemsMark: [{
+					textColor: "#ff6203",
+					icon: "static/common/award.png"
+				}], */
+				rankRsList: ["totalDistanceRs", "totalCpRs", "totalSysPointRs", "fastPaceRs"],
+
+				configParam: {
+					labelTicketName: "我的奖券",
+					labelAwardAddress: "兑奖地址",
+					// labelGoodsList: "兑换商品",
+					tabInitActIndex: 0
+				},
+				ranklistStyleType: 0, // 排名列表样式
+				selfRank: null // 个人成绩
+			}
+		},
+		computed: {},
+		onLoad(query) { // 类型非必填,可自动推导
+			// console.log(query);
+			this.queryObj = query;
+			this.queryString = tools.objectToQueryString(this.queryObj);
+			// console.log(queryString);
+			this.token = query["token"] ?? token;
+			this.ecId = query["id"] ?? 0;
+			this.ovtype = query["ovtype"] ?? "";
+
+			cardfunc.init(this, this.token, this.ecId);
+			cardfunc.getCardConfig(this.cardConfigQueryCallback, localCardConfig);
+
+			this.dealOvtype();
+		},
+		// 页面初次渲染完成,此时组件已挂载完成,DOM 树($el)已可用
+		onReady() {
+			// this.dealFirstEnter();
+			// this.$refs.mypopupMessage.popupOpen();
+		},
+		onShow() {
+			// this.getUserJoinCardQuery();
+		},
+		onUnload() {
+			this.clear();
+		},
+		methods: {
+			dealOvtype() {
+				if (this.ovtype == "totalDistance") {
+					this.tabCurrent = 0;
+				} else if (this.ovtype == "totalCp") {
+					this.tabCurrent = 1;
+				} else if (this.ovtype == "totalSysPoint") {
+					this.tabCurrent = 2;
+				} else if (this.ovtype == "fastPace") {
+					this.tabCurrent = 3;
+				}
+				console.log(`dealOvtype: ${this.ovtype} tabCurrent: ${this.tabCurrent}`);
+			},
+			clear() {
+				if (this.interval != null) {
+					clearInterval(this.interval);
+					this.interval = null;
+				}
+			},
+			cardConfigQueryCallback(cardconfig) {
+				this.cardconfig = cardconfig;
+				// cardfunc.getUserConfig(this.userConfigQueryCallback, localUserConfig);
+				this.loadConfig();
+				this.matchRsDetailQuery();
+			},
+			/* userConfigQueryCallback(userconfig) {
+				this.userconfig = userconfig;
+				this.loadConfig();
+				this.matchRsDetailQuery();
+			}, */
+			loadConfig() {
+				this.loadCardConfig(this.cardconfig);
+				this.loadUserConfig(this.userconfig);
+				this.pageReady = true;
+			},
+			loadCardConfig(cardconfig) {
+				cardconfig = cardfunc.parseCardConfig(cardconfig);
+				// console.log("[loadCardConfig] cardconfig:", cardconfig);
+
+				// 加载卡片通用配置
+				if (cardconfig.common != undefined) {
+					cardfunc.loadCardCommonConfig(cardconfig.common);
+				}
+
+				// -------- 加载当前页面的配置 --------
+
+				const config = cardfunc.parseCardConfig(cardconfig[this.pageName]);
+				// console.log("[loadConfig] config_page:", config);
+				if (config == undefined || config == null) {
+					return;
+				}
+
+				// 加载CSS样式
+				const css = config.css;
+				if (css != undefined && css.length > 0) {
+					tools.loadCssCode(css);
+				}
+
+				// 加载TAB
+				const tabPageItems = config.tabPageItems;
+				if (tabPageItems != undefined) {
+					this.tabPageItems = tabPageItems;
+				}
+
+				// 加载成绩参数
+				const rankParam = config.rankParam;
+				if (rankParam != undefined) {
+					if (rankParam.tabItemsMark != undefined) {
+						this.tabItemsMark = rankParam.tabItemsMark;
+					}
+					if (rankParam.dispArrStr != undefined && rankParam.dispArrStr.length > 0) {
+						this.dispArrStr = rankParam.dispArrStr;
+						// console.log("[loadConfig] dispArrStr:", rankParam.dispArrStr);
+					}
+					if (rankParam.tabItems != undefined && rankParam.tabItems.length > 0) {
+						this.tabItems = rankParam.tabItems;
+						// console.log("[loadConfig] tabItems:", rankParam.tabItems);
+					}
+					if (rankParam.rankTypeList != undefined && rankParam.rankTypeList.length > 0) {
+						this.rankTypeList = rankParam.rankTypeList;
+					}
+					if (rankParam.rankRsList != undefined && rankParam.rankRsList.length > 0) {
+						this.rankRsList = rankParam.rankRsList;
+					}
+					if (rankParam.ranklistStyleType != undefined && rankParam.ranklistStyleType > 0) {
+						this.ranklistStyleType = rankParam.ranklistStyleType;
+					}
+				}
+				// console.log("[loadConfig] rankParam:", rankParam);
+
+				// 加载页面参数
+				const param = config.param;
+				if (param != undefined) {
+					if (param.labelTicketName != undefined && param.labelTicketName.length > 0) {
+						this.configParam.labelTicketName = param.labelTicketName;
+					}
+					if (param.labelAwardAddress != undefined && param.labelAwardAddress.length > 0) {
+						this.configParam.labelAwardAddress = param.labelAwardAddress;
+					}
+					if (param.labelGoodsList != undefined && param.labelGoodsList.length > 0) {
+						this.configParam.labelGoodsList = param.labelGoodsList;
+					}
+					if (param.tabInitActIndex != undefined && param.tabInitActIndex >= 0) {
+						this.configParam.tabInitActIndex = param.tabInitActIndex;
+						this.tabCurrent = param.tabInitActIndex;
+					}
+				}
+			},
+			loadUserConfig(userconfig) {
+				if (!userconfig) {
+					console.log("[loadUserConfig] userconfig 为空");
+					return;
+				}
+
+				const config = cardfunc.parseCardConfig(userconfig);
+				console.log("[loadUserConfig] userconfig:", config);
+
+				// 加载用户的弹窗数据
+				cardfunc.loadUserPopupRule(config);
+			},
+			// 获取倒计时
+			getCountdown() {
+				// console.log(this.endSecond)
+				if (this.endSecond > 0) {
+					const now = Date.now() / 1000;
+					const dif = this.endSecond - now;
+					// const dif = 3600*24 - 60;
+					if (dif > 0) {
+						this.countdown = '距结束 ' + tools.convertSecondsToDHM(dif);
+					} else {
+						this.countdown = "活动已结束";
+					}
+					// this.countdown = tools.convertSecondsToHMS(dif);
+				} else {
+					this.countdown = "距结束 --天--小时";
+				}
+			},
+			// 格式化 距离
+			fmtDistanct(val) {
+				return Math.round(val * 100 / 1000) / 100;
+				/* if (val < 10000)
+					return Math.round(val * 10 / 1000) / 10;
+				else
+					return Math.round(val / 1000); */
+			},
+			fmtMcTime(timestamp) {
+				return tools.fmtMcTime(timestamp);
+			},
+			// 获取活动时间
+			getActtime() {
+				this.acttime = tools.getActtime(this.beginSecond, this.endSecond);
+				// console.log("acttime", this.acttime);
+			},
+			getTeamName(teamType, teamIndex) {
+				return teamName[teamType][teamIndex];
+			},
+			// 卡片对应线上赛多个活动查询
+			matchRsDetailQuery() {
+				uni.request({
+					url: apiMatchRsDetailQuery,
+					header: {
+						"Content-Type": "application/x-www-form-urlencoded",
+						"token": this.token,
+					},
+					method: "POST",
+					data: {
+						ecId: this.ecId
+					},
+					success: (res) => {
+						// console.log("matchRsDetailQuery", res);
+						if (checkResCode(res)) {
+							const data = res.data.data;
+							this.mcType = data.mcType;
+							this.mcId = data.mcId;
+							this.mcName = data.mcName;
+							this.beginSecond = data.beginSecond;
+							this.endSecond = data.endSecond;
+							this.nickName = data.nickName;
+							this.totalNum = data.totalNum;
+							this.totalDistanct = data.totalDistanct;
+							this.totalDistanctRankNum = data.totalDistanctRankNum;
+							this.totalCp = data.totalCp;
+							this.totalCpRankNum = data.totalCpRankNum;
+							this.totalSysPoint = data.totalSysPoint;
+							this.totalSysPointRankNum = data.totalSysPointRankNum;
+							this.fastPace = data.fastPace;
+							this.fastPaceRankNum = data.fastPaceRankNum;
+							// this.ocaRs = data.ocaRs;
+
+							this.mcState = tools.checkMcState(this.beginSecond, this.endSecond);
+
+							this.getCountdown();
+							this.getActtime();
+							this.compStatisticQuery();
+							this.getCardRankDetailQuery();
+
+							this.clear();
+							this.interval = setInterval(this.getCountdown, 60000);
+						}
+					},
+					fail: (err) => {
+						console.log("matchRsDetailQuery err", err)
+					},
+				});
+			},
+			// 排名查询
+			getCardRankDetailQuery() {
+				uni.request({
+					url: apiCardRankDetailQuery,
+					header: {
+						"Content-Type": "application/x-www-form-urlencoded",
+						"token": this.token,
+					},
+					method: "POST",
+					data: {
+						mcIdListStr: this.mcId,
+						mcType: this.mcType,
+						dispArrStr: this.dispArrStr
+					},
+					success: (res) => {
+						console.log("getCardRankDetailQuery", res);
+						const rankdata = res.data.data;
+						this.rankList = rankdata;
+
+						this.getSelfRank();
+					},
+					fail: (err) => {
+						console.log("getCardRankDetailQuery err", err);
+					},
+				});
+			},
+			// 赛事总成绩统计查询
+			compStatisticQuery() {
+				uni.request({
+					url: apiCompStatisticQuery,
+					header: {
+						"Content-Type": "application/x-www-form-urlencoded",
+						"token": this.token,
+					},
+					method: "POST",
+					data: {
+						mcId: this.mcId
+					},
+					success: (res) => {
+						// console.log("compStatisticQuery", res);
+						if (res.data.code == 0) {
+							const data = res.data.data;
+							this.all_totalDistance = data.totalDistance;
+							this.all_totalRightAnswerNum = data.totalRightAnswerNum;
+							this.all_totalAnswerNum = data.totalAnswerNum;
+							this.all_totalCp = data.totalCp;
+							this.all_totalSysPoint = data.totalSysPoint;
+						}
+					},
+					fail: (err) => {
+						console.log("compStatisticQuery err", err);
+					},
+				});
+			},
+			// 是否允许重新分组(报名)
+			isAllowMcSignUp() {
+				uni.request({
+					url: apiIsAllowMcSignUp,
+					header: {
+						"Content-Type": "application/x-www-form-urlencoded",
+						"token": this.token,
+					},
+					method: "POST",
+					data: {
+						ecId: this.ecId
+					},
+					success: (res) => {
+						// console.log("isAllowMcSignUp", res)
+						if (res.data.code == 0) {
+							const data = res.data.data;
+							this.allowMcSignUp = data.allowSignUp;
+						}
+					},
+					fail: (err) => {
+						console.log("isAllowMcSignUp err", err)
+					},
+				});
+			},
+			// 用户是否已经报名卡片对应赛事查询
+			/* getUserJoinCardQuery() {
+				uni.request({
+					url: apiUserJoinCardQuery,
+					header: {
+						"Content-Type": "application/x-www-form-urlencoded",
+						"token": this.token
+					},
+					method: "POST",
+					data: {
+						ecId: this.ecId
+					},
+					success: (res) => {
+						// console.log("getUserJoinCardQuery", res)
+						const code = res.data.code;
+						const data = res.data.data;
+						if (code == 0) {
+							this.isJoin = data.isJoin;
+							if (this.isJoin) { // 已报名
+								// this.btnStartGameText = "我要比赛";
+								this.btnStartGameText = "选择场地";
+							} else { // 未报名
+								this.btnStartGameText = "我要报名";
+							}
+						}
+					},
+					fail: (err) => {
+						console.log("getUserJoinCardQuery err", err)
+					},
+				});
+			}, */
+			onNoMoreRemindersClick() {
+				this.$refs.mypopupMessage.popupClose();
+				uni.setStorageSync(this.messageKey, true);
+			},
+			btnBack() {
+				const url = `action://to_home/`;
+				tools.appAction(url);
+			},
+			/* btnStartGame() {
+				if (this.isJoin) { // 已报名
+					const url = "/pages/tpl/style1/rankOverview?" + this.queryString;
+					tools.appAction(url, "uni.navigateTo");
+				} else { // 未报名
+					const url = "/pages/tpl/style1/signup?" + this.queryString;
+					tools.appAction(url, "uni.navigateTo");
+				}
+			}, */
+			btnInfo() {
+				// console.log(this.$refs.mypopup);
+				this.$refs.mypopup.popupOpen();
+			},
+			btnMessage() {
+				// console.log(this.$refs.mypopup);
+				this.$refs.mypopupMessage.popupOpen();
+			},
+			btnMyEgg() {
+				const url = "/pages/achievement/index2?tabCurrent=2&" + this.queryString;
+				tools.appAction(url, "uni.navigateTo");
+			},
+			btnExchg() {
+				this.$refs.mypopupExchg.popupOpen();
+			},
+			btnGoodsList() {
+				this.queryObj.from = "/pages/tpl/style1/rankList";
+				this.queryString = tools.objectToQueryString(this.queryObj);
+				const url = "/pages/exchange/style1/goodsList?" + this.queryString;
+				tools.appAction(url, "uni.navigateTo");
+			},
+			onTabPageClick(val) {
+				console.log("onTabClick: ", val);
+				// this.tabPageCurrent = val;
+				if (val == 0) {
+					const url = '/pages/game/grid/grid?' + this.queryString;
+					tools.appAction(url, "uni.navigateTo");
+				}
+			},
+			onTabClick(val) {
+				// console.log("onTabClick: ", val);
+				this.tabCurrent = val;
+				this.getSelfRank();
+			},
+			getSelfRank() {
+				const ranktype = this.rankRsList[this.tabCurrent];
+				const rs = this.rankList[ranktype];
+				// console.log("[getSelfRank] rs", rs);
+				if (rs) {
+					this.selfRank = tools.objArrGetObjByValue(rs, "isSelf", 1);
+					console.log("[getSelfRank] self", this.selfRank);
+				}
+			}
+		}
+	}
+</script>
+
+<style scoped>
+	.content {
+		width: 100vw;
+		height: 100vh;
+	}
+
+	.page-top {
+		width: 100%;
+		height: 60px;
+		padding-top: 36px;
+		justify-content: space-between;
+		background: linear-gradient(135deg, #FFEF9E 0%, #FFFCF2 45.14%, #FFF4D4 100%);
+	}
+
+	.topbar-color {
+		color: #000000;
+	}
+
+	.main {
+		width: 100%;
+		flex-grow: 1;
+		justify-content: space-around;
+	}
+
+	.tabPage {
+		/* width: 100%; */
+	}
+
+	.main-bar {
+		width: 100%;
+		height: 21px;
+		background-color: #d8e8c6;
+
+		font-size: 10px;
+		font-weight: 500;
+		color: #3d6706;
+	}
+
+	.main-tab {
+		width: 90%;
+		margin-top: 20rpx;
+	}
+
+	.tab-view {
+		width: 100%;
+		flex-grow: 1;
+	}
+
+	.btmSelfInfo {
+		position: absolute;
+		bottom: 0;
+		width: 100%;
+		height: 80px;
+		background-color: #c7e848;
+		border-radius: 10px 10px 0 0;
+	}
+
+	.btmSelfInfo-corner {
+		position: absolute;
+		right: 0px;
+		top: -38px;
+		width: 180px;
+		height: 50px;
+	}
+
+	.bsi-box {
+		width: 80%;
+	}
+
+	.bsi-infoBox {
+		/* width: 40%; */
+	}
+
+	.bsi-headimg {
+		width: 40px;
+		height: 40px;
+		margin-right: 10px;
+		border-radius: 50%;
+		background-color: #9980bf;
+	}
+
+	.bsi-name {
+		font-size: 16px;
+		font-weight: 500;
+		color: #000000;
+	}
+
+	.bsi-score {
+		font-size: 12px;
+		font-weight: 500;
+		color: #000000;
+	}
+
+	.bsi-score-type {
+		margin-right: 5px;
+	}
+
+	.bsi-ranknum {
+		font-size: 18px;
+		font-weight: 500;
+		color: #000000;
+	}
+
+	/* .btnBack {
+		width: 70%;
+		height: 80rpx;
+		margin-bottom: 20rpx;
+		color: white;
+		font-size: 32rpx;
+		line-height: 80rpx;
+		border-radius: 27px;
+		background-color: #81cd00;
+	} */
+</style>

BIN
card/static/custom/yuedong/yd.png


BIN
card/static/ranklist/1/medal_copper.png


BIN
card/static/ranklist/1/medal_gold.png


BIN
card/static/ranklist/1/medal_silver.png


+ 1 - 0
card/url.md

@@ -3,6 +3,7 @@ APP内跳转链接
 [跳转首页] (action://to_home/)
 [跳转登录页] (action://to_login/)
 [跳转活动详情页] (action://to_detail/)
+[跳转活动列表页] (action://to_activity_list/)
 [跳转地图列表页] (action://to_map_list/)
 [跳转第三方地图APP] (action://to_map_app?title=地点名称&latitude=123&longitude=456)
 [下载文件] (action://down_file?filename=文件名称_包含后缀&url=文件路径)