瀏覽代碼

merge 2024

wangxy 2 月之前
父節點
當前提交
d45022f95c
共有 41 個文件被更改,包括 1970 次插入143 次删除
  1. 69 3
      api/my.js
  2. 12 0
      api/pdf.js
  3. 19 0
      common/styles/global/components.scss
  4. 166 66
      common/styles/global/pages.scss
  5. 55 0
      components/dialog/nichengDialog.vue
  6. 1 1
      components/dialog/tipSmallDialog.vue
  7. 2 1
      config.js
  8. 43 13
      pages.json
  9. 1 1
      pages/login/login.vue
  10. 9 6
      pages/my/aboutPage.vue
  11. 52 0
      pages/my/banbenConfirmDialog.vue
  12. 175 0
      pages/my/headImg.vue
  13. 141 41
      pages/my/index.vue
  14. 146 0
      pages/my/sxtkPage.vue
  15. 394 0
      pages/my/xuexiJilu.vue
  16. 270 0
      pages/my/xuexishichang.vue
  17. 390 0
      pages/my/yingyongshezhi.vue
  18. 5 5
      pages/selectGradesTerms/index.vue
  19. 20 6
      pages/study/index.vue
  20. 二進制
      static/images/common/cancel-btn.png
  21. 二進制
      static/images/common/confirm-btn.png
  22. 二進制
      static/images/my/list-icon1.png
  23. 二進制
      static/images/my/list-icon10.png
  24. 二進制
      static/images/my/list-icon2.png
  25. 二進制
      static/images/my/list-icon3.png
  26. 二進制
      static/images/my/list-icon4.png
  27. 二進制
      static/images/my/list-icon5.png
  28. 二進制
      static/images/my/list-icon6.png
  29. 二進制
      static/images/my/list-icon7.png
  30. 二進制
      static/images/my/list-icon8.png
  31. 二進制
      static/images/my/list-icon9.png
  32. 二進制
      static/images/my/list-jt.png
  33. 二進制
      static/images/my/sz-icon1.png
  34. 二進制
      static/images/my/sz-icon2.png
  35. 二進制
      static/images/my/tk-dialog-bj.png
  36. 二進制
      static/images/my/tk-dialog-qx.png
  37. 二進制
      static/images/my/tk-dialog-sc.png
  38. 二進制
      static/images/my/tk-list-item-a.png
  39. 二進制
      static/images/my/tk-list-item.png
  40. 二進制
      static/images/my/tk-qxzjc.png
  41. 二進制
      static/images/my/tk-tab-item.png

+ 69 - 3
api/my.js

@@ -9,7 +9,7 @@ export function myInfo(data = {}) {
     data,
     timeout: 20000
   })
-}
+}
 export function zhuxiao(data = {}) {
   return request({
     'url': '/app/user/my/close',
@@ -20,7 +20,7 @@ export function zhuxiao(data = {}) {
     data,
     timeout: 20000
   })
-}
+}
 export function duihuanmaCode(data = {}) {
   return request({
     'url': '/app/user/my/code',
@@ -55,7 +55,73 @@ export function commonCardList(data = {}) {
     data,
     timeout: 20000
   })
-}
+}
+export function selectTiku(data = {}) {
+  return request({
+    'url': '/app/user/my/tiku/type',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+export function nichengUpdate(data = {}) {
+  return request({
+    'url': '/app/user/my/update/nickname',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+export function getFilePolicy(data = {}) {
+  return request({
+    'url': '/app/file/policy',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+export function updataHead(data = {}) {
+  return request({
+    'url': '/app/user/my/update/icon',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+export function xuexiJilu(data = {}) {
+  return request({
+    'url': '/app/user/my/xuexi/jilu',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
+export function xuexiJiluDelete(data = {}) {
+  return request({
+    'url': '/app/user/my/xuexi/jilu/delete',
+    headers: {
+      isToken: true
+    },
+    method: 'post',
+    data,
+    timeout: 20000
+  })
+}
 export function myWordList(data = {}) {
   return request({
     'url': '/app/user/my/word/list',

+ 12 - 0
api/pdf.js

@@ -0,0 +1,12 @@
+import request from '@/utils/request'
+export function getPDFUrl(data = {}) {
+    return request({
+        'url': '/app/user/my/tiku/pdf',
+        headers: {
+            isToken: true
+        },
+        method: 'post',
+        data,
+        timeout: 20000
+    })
+}

+ 19 - 0
common/styles/global/components.scss

@@ -281,6 +281,25 @@ $titleBar-tabBar-page: calc(100vh - var(--status-bar-height));
 	.tip-content{min-height: 240rpx;text-align: justify;}
 }
 
+.sxtk-sc-dialog{
+	.tip-title{color: #343434;font-size: 38rpx;margin-bottom: 24rpx;}
+	.tip-content-box{
+		width: 625rpx;height: 587rpx;padding: 42rpx 48rpx;box-sizing: border-box;
+		background-image: url("@/static/images/my/tk-dialog-bj.png");
+		@include ezy-no-repeat-cover;box-sizing: border-box;text-align:center;
+	}
+	.tip-content{
+		min-height: 180rpx;text-align: justify;border-bottom: 1px dashed #70cbf4;
+		margin-bottom: 30rpx;color: #666;font-size: 32rpx;padding-bottom: 42rpx;
+		border-bottom: 1px dashed #70cbf4;line-height: 1.8;}
+	.not-confirm-btn,.confirm-btn{
+		width: 519rpx;height: 98rpx;line-height: 98rpx;@include ezy-no-repeat-cover;
+		color: #fff;
+		}
+	.not-confirm-btn{background-image: url("@/static/images/my/tk-dialog-qx.png");margin-top: 16rpx;}
+	.confirm-btn{background-image: url("@/static/images/my/tk-dialog-sc.png");}
+}
+
 /*积分框*/
 .ezy-jf-box{
 	width: 142rpx;height: 46rpx;display: flex;align-items: center;line-height: 1.2;font-size: 26rpx;

+ 166 - 66
common/styles/global/pages.scss

@@ -645,7 +645,7 @@
 	display: flex;align-items: center;justify-content: center;
 	@include ezy-no-repeat-cover;background-image: url("@/static/images/study/cjdc/dao-item-disabled.png");}
 	.content-text{@include multi-line-ellipsis(2);line-height: 32rpx;}
-	
+
 	.brand-lock,.brand-finish-icon{
 		width: 70rpx;height: 70rpx;@include ezy-no-repeat-cover;
 		position: absolute;transform: translateX(-50%);top: 28rpx;right: 56rpx;}
@@ -659,10 +659,10 @@
 		width: 58rpx;height: 58rpx;left: 38%;top: 50%;position: absolute;
 		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/brand-arrow.gif");
 		}
-	// brand-item 
+	// brand-item
 	.brand-item{width: 252rpx;height: 180rpx;position: absolute;}
 	.brand-active .brand-content{background-image: url("@/static/images/study/cjdc/dao-item-active.png");}
-	
+
 	.brand-item:nth-child(1){top:505rpx;right:25rpx;}
 	.brand-item:nth-child(2){top:650rpx;left:75rpx;}
 	.brand-item:nth-child(3){top:820rpx;right:55rpx;}
@@ -676,7 +676,7 @@
 		.brand-arrow{left: 38%;top: 14%;}
 	}
 	.brand-item.ceshi-brand-item.brand-active{background-image: url("@/static/images/study/cjdc/test-item-active.png");}
-	
+
 	@media (max-height: 800px) {
 		min-height:1400rpx;
 		.ezy-study-wrap{top:calc(var(--status-bar-height) + -2%);}
@@ -1001,61 +1001,48 @@
 	
 // 我的页面
 .ezy-my-page{
-	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;overflow: auto;
+	width: 100%;height: 100vh;min-height: 1400rpx;background-color: #00c5fe;position: relative;overflow: auto;
 	padding-top:var(--status-bar-height);@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/my/my-page-bj.png");
 	.my-head-box{
 		width: 100%;padding: 80rpx 24rpx 42rpx;box-sizing: border-box;display: flex;align-items: center;color: #fff;
-		.head-img-box{width: 154rpx;height: 154rpx;margin: 0 24rpx 0 12rpx;@include ezy-no-repeat-cover;}
+		.head-img-box{width: 154rpx;height: 154rpx;margin: 0 24rpx 0 12rpx;@include ezy-no-repeat-cover;border-radius: 50%;}
 		.head-content-box{font-size: 30rpx;}
 	}
-	
+
 	// hyqy
 	.my-hyqy-swiper{
-		height: 385rpx;
+		height: 363rpx;margin-bottom: 32rpx;
 		.uni-swiper-dots-horizontal{bottom: 24rpx;}
 	}
 	.hyqy-box{
-		width: 731rpx;height: 385rpx;margin: 0 auto;position: relative;
+		width: 690rpx;height: 363rpx;margin: 0 auto;position: relative;
 		@include ezy-no-repeat-cover;
-		.hyqy-box-img{width: 731rpx;height: 385rpx;margin: 0 auto;display: block;border-radius: 10rpx;}
+		.hyqy-box-img{width: 690rpx;height: 363rpx;margin: 0 auto;display: block;border-radius: 10rpx;}
 	}
 	// list
 	.my-list-box{
-		width:700rpx;margin: 36rpx auto 240rpx;
-		.list-row{border-bottom: 2rpx solid #5bcdfb;color: #fff;box-sizing: border-box;padding: 30rpx 20rpx;
-		display: flex;align-items: center;position: relative;}
-		.list-row::after{
-			content: '';width: 19rpx;height: 33rpx;@include ezy-no-repeat-cover;
-			background-image: url("@/static/images/my/list-jt.png");
-			position: absolute;right: 20rpx;
-		}
-		.no-jt::after,.no-jt::after{display: none;}
-		.list-icon{width: 42rpx;height: 42rpx;@include ezy-no-repeat-cover;margin-right: 10rpx;}
-		.tel-icon{background-image: url("@/static/images/my/list-icon1.png");}
-		.error-icon{background-image: url("@/static/images/my/list-icon2.png");}
-		.order-icon{background-image: url("@/static/images/my/list-icon3.png");}
-		.login-out-icon{background-image: url("@/static/images/my/list-icon4.png");}
-		.about-icon{background-image: url("@/static/images/my/list-icon5.png");}
-		.zhuxiao-icon{background-image: url("@/static/images/my/list-icon6.png");}
-		.duihuanma-icon{background-image: url("@/static/images/my/list-icon8.png");}
-		.yszc-icon{background-image: url("@/static/images/my/list-icon7.png");}
-		.cpsc-icon{background-image: url("@/static/images/my/list-icon9.png");}
-		.xxjl-icon{background-image: url("@/static/images/my/list-icon10.png");}
-	}
-	@media (max-height: 736px) {
-		.my-head-box{padding: 46rpx 24rpx 16rpx;}
-		.my-list-box{
-			margin: 6rpx auto 260rpx;
-			.list-row{padding: 20rpx;}
-		}
+		width:690rpx;margin: 16rpx auto;display: flex;padding: 16rpx 0;
+		background-color: rgba(255, 255, 255, 0.6);border-radius: 8rpx;
+		.list-item{color: #333;width: 25%;text-align: center;font-size: 28rpx;}
+		.list-icon{
+			width: 87rpx;height: 77rpx;display: block;margin: 0 auto;
+			@include ezy-no-repeat-cover;
+			}
+		.cpsc-icon{background-image: url("@/static/images/my/list-icon1.png");}
+		.sxtk-icon{background-image: url("@/static/images/my/list-icon2.png");}
+		.error-icon{background-image: url("@/static/images/my/list-icon3.png");}
+		.xxjl-icon{background-image: url("@/static/images/my/list-icon4.png");}
+		.order-icon{background-image: url("@/static/images/my/list-icon5.png");}
+		.duihuanma-icon{background-image: url("@/static/images/my/list-icon6.png");}
+		.kfdh-icon{background-image: url("@/static/images/my/list-icon7.png");}
+		.yysz-icon{background-image: url("@/static/images/my/list-icon8.png");}
+		.zhuxiao-icon{background-image: url("@/static/images/my/list-icon9.png");}
+		.login-out-icon{background-image: url("@/static/images/my/list-icon10.png");}
 	}
-	@media (max-height: 600px) {
-		.my-head-box{padding: 42rpx 24rpx 24rpx;}
-		.my-list-box{
-			margin: 12rpx auto 240rpx;
-			.list-row{padding: 16rpx;font-size: 30rpx;}
-			.list-row::after{right: 16rpx;}
-		}
+
+	.kefu-dialog{
+		.not-confirm-btn{display: none;}
+		.confirm-btn{margin: 24rpx auto;}
 	}
 }
 .ezy-my-page::before{
@@ -1064,6 +1051,23 @@
 	@include ezy-no-repeat-cover;background-image: url("@/static/images/my/my-page-img.png");
 }
 
+// 应用设置
+.ezy-yysz-page{
+	width: 100%;height: 100vh;min-height: 1400rpx;background-color: #00c5fe;position: relative;overflow: auto;
+	padding-top:var(--status-bar-height);@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/my/my-page-bj.png");
+	display: flex;flex-direction: column;
+	.yysz-row-box{width: 94%;background-color: rgba(255, 255, 255, 0.6);
+	border-radius: 8rpx;margin: 16rpx 3% 0;color: #333;font-size: 30rpx;}
+	.yysz-item{display: flex;align-items: center;justify-content: space-between;padding: 32rpx 46rpx 32rpx 16rpx;position: relative;}
+	.img-item{padding: 32rpx 46rpx 0 16rpx;}
+	.yysz-item::after{
+		content: '';width: 14rpx;height: 24rpx;@include ezy-no-repeat-cover;
+		background-image: url("@/static/images/my/list-jt.png");
+		position: absolute;right: 16rpx;
+	}
+	.yysz-img-box{width: 36px;height: 36px;border-radius: 50%;@include ezy-no-repeat-cover}
+}
+
 // 错题
 .ezy-cuoti-page{
 	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;
@@ -1110,6 +1114,50 @@
 	
 }
 
+// 学习记录
+.ezy-xxjl-page{
+	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;
+	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
+	@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/common/ezy-page-bj.png");
+	.uni-list{background-color: transparent!important;}
+	.uni-list--border-top,.uni-list--border-bottom{display: none;}
+
+	.xxjl-content-box{flex: 1;background-color: rgba(255, 255, 255, 0.6);z-index: 3;margin: 10rpx 20rpx;}
+	.xxjl-scroll-view{overflow-y: auto;height: calc(100vh - 380rpx - var(--status-bar-height));}
+
+	// item
+	.xxjl-item-box{
+		width: 94%;background-color: transparent!important;
+		border-bottom: 1px dashed #77d6f7;margin: 0 3%;
+		.uni-list-item__header{display: none;}
+		.uni-list-item__container{flex-direction: column;position: relative;padding:24rpx 0;overflow: hidden;}
+		.item-date-row{
+			display: flex;justify-content: space-between;align-items: center;color:#28bdf2;font-size: 24rpx;
+			.data-item{display: flex;align-items: center;}
+			.del-item{width: 60rpx;height: 60rpx;}
+			.data-icon{
+				width: 35rpx;height: 35rpx;margin: 10rpx;
+				@include ezy-no-repeat-cover;background-image: url("@/static/images/exam/cuoti-time-icon.png");}
+			.del-icon{
+				width: 35rpx;height: 35rpx;margin: 10rpx;
+				@include ezy-no-repeat-cover;background-image: url("@/static/images/my/sz-icon2.png");
+			}
+		}
+		.item-zhang-row{
+			width: 100%;display: flex;align-items: center;color:#333;font-size: 32rpx;margin-bottom: 16rpx;
+			>view{@include single-line-ellipsis;}
+			.zhang-icon{
+				width: 37rpx;height: 37rpx;margin:0 9rpx;flex-shrink: 0;
+				@include ezy-no-repeat-cover;background-image: url("@/static/images/my/sz-icon1.png");}
+		}
+		.item-jie-row{
+			width: 100%;color:#444;font-size: 26rpx;padding-left: 55rpx;line-height: 1;margin-bottom: 16rpx;@include single-line-ellipsis;
+			>text{@include single-line-ellipsis;}
+		}
+	}
+
+}
+
 // 关于我们
 .ezy-about-page{
 	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;
@@ -1816,6 +1864,58 @@
 		}
 	}
 }
+// PDF
+.pdf-page-box{
+	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;
+	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
+	@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/common/ezy-page-bj.png");
+	.pdf-body-box.uni-webview--fullscreen, .uni-resize-sensor > div,mainContainer{top:calc(83rpx - var(--status-bar-height));}
+}
+
+// 数学题库
+.ezy-sxtk-page{
+	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;
+	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
+	@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/common/ezy-page-bj.png");
+	.sxtk-tab-border{height: calc(100vh - 254rpx - var(--status-bar-height));flex: unset;}
+	.tab-img{width: 346rpx;height: 77rpx;margin: 24rpx auto 0;
+	@include ezy-no-repeat-cover;background-image: url("@/static/images/my/tk-qxzjc.png");}
+	.sxtk-line{width: 94%;height: 4rpx;border-top: 4rpx dashed #7cbeee;margin: 20rpx auto;}
+	.sxtk-tab-box{
+		display: flex;box-sizing: border-box;padding: 0 16rpx;margin-top: 24rpx;
+		.tab-item{width: 16.66%;font-size: 30rpx;}
+		.tab-nianji-item{width: 106rpx;height: 73rpx;line-height: 73rpx;margin: 0 auto;text-align: center;}
+		.tab-item.active .tab-nianji-item{@include ezy-no-repeat-cover;color: #fff;
+		background-image: url("@/static/images/my/tk-tab-item.png");}
+	}
+	.sxtk-banben-body{
+		flex: 1;overflow-y: auto;padding:10rpx 0;box-sizing: border-box;
+		display: flex;flex-wrap: wrap;align-content: flex-start;margin-bottom: 10rpx;
+		.banben-item{width: 33.33%;font-size: 28rpx;margin-bottom: 24rpx;}
+		.banben-text-item{width: 194rpx;height: 79rpx;line-height: 79rpx;text-align: center;margin: 0 auto;
+		 @include single-line-ellipsis;box-sizing: border-box;padding: 0 6rpx;
+		 background-image: url("@/static/images/my/tk-list-item.png");@include ezy-no-repeat-cover;color: #fff;}
+		.banben-item.active .banben-text-item{background-image: url("@/static/images/my/tk-list-item-a.png");color: #6e0c02;}
+		}
+	.sxtk-confirm-btn{
+		width: 644rpx;height: 108rpx;background-color: transparent;margin-bottom: 36rpx;
+		background-image: url("@/static/images/grade/confirm-btn.png");@include ezy-no-repeat-cover;
+	}
+	.sxtk-confirm-btn:after{display: none;}
+}
+
+
+// 更换头像
+.ezy-ghtx-page{
+	width: 100%;height: 100vh;background-color: #00c5fe;position: relative;overflow: auto;
+	padding-top:var(--status-bar-height);@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/my/my-page-bj.png");
+	.ghtx-img{width: 644rpx;height: 644rpx;margin: 0 auto 86rpx;display: block;}
+	.xc-btn,.qx-btn{
+		width: 644rpx;height: 108rpx;line-height: 108rpx;@include ezy-no-repeat-cover;
+		margin: 30rpx auto 0;font-size: 30rpx;color: #fff;text-align: center;}
+	.xc-btn{background-image: url("@/static/images/common/confirm-btn.png");}
+	.qx-btn{background-image: url("@/static/images/common/cancel-btn.png");}
+}
 
 // 单词列表页
 .word-list-page{
@@ -1850,7 +1950,7 @@
 	.ezy-border-body{
 		width: 94%;margin: 3% 3%;display: flex;flex-direction: column;flex: 1;
 		background-color: rgba(255, 255, 255, 0.6);border-radius:8rpx;}
-		
+
 	// 选择单词
 	.select-words-box{
 		height: 66rpx;border-bottom: 1rpx dashed #0589e9;
@@ -1860,7 +1960,7 @@
 		.words-item{min-width: 20%;color: #000;box-sizing: border-box;padding:16rpx 10rpx;text-align: center;}
 		.active{color: #068aea;}
 	}
-	
+
 	// 选择类型
 	.select-types-box{
 		display: flex;justify-content: space-between;align-items: center;
@@ -1873,7 +1973,7 @@
 		background-image: url("@/static/images/study/cjdc/wordView/jt-icon.png");}
 		.jt-item.active{background-image: url("@/static/images/study/cjdc/wordView/jt-a-icon.png");}
 	}
-	
+
 	.word-view-bottom{
 		width: 100%;height: 120rpx;background-color: #68b4e3;font-size: 28rpx;
 		border-top: 8rpx solid #add9f2;box-sizing: border-box;padding: 0 32rpx;
@@ -1902,12 +2002,12 @@
 		.words-explain-item{font-size: 34rpx;color: #333;text-align: center;padding: 0 16rpx;line-height: 1.4;}
 		.words-explain-item + .words-explain-item{margin-top: 12rpx;}
 	}
-	
+
 	//播放
 	.audio-play-btn,.audio-playing-btn{width: 110rpx;height:110rpx;@include ezy-no-repeat-cover;margin: 56rpx auto 0;}
 	.audio-play-btn{background-image: url("@/static/images/study/cjdc/wordView/play-btn.png");}
 	.audio-playing-btn{background-image: url("@/static/images/study/cjdc/wordView/playing-btn.gif");}
-	
+
 	// 清空按钮
 	.pin-tip{width: 560rpx;margin: 24rpx auto 0;font-size: 26rpx;text-align: center;border-radius: 8rpx;
 	color: #015fb0;border: 1rpx dashed #015fb0;box-sizing: border-box;padding: 10rpx 0;}
@@ -1915,7 +2015,7 @@
 	.clean-btn{width: 171rpx;height:58rpx;@include ezy-no-repeat-cover;margin: 24rpx auto 0;
 	background-image: url("@/static/images/study/cjdc/wordView/clean-btn.png");
 	}
-	
+
 	// 音标播放
 	.yb-play-box{
 		background-color: rgba(255, 255, 255, 0.6);display: inline-block;margin: 32rpx auto 0;
@@ -1926,9 +2026,9 @@
 		display: inline-block;vertical-align: middle;}
 		.yb-play-btn{background-image: url("@/static/images/study/cjdc/wordView/yb-play-btn.png");}
 		.yb-playing-btn{background-image: url("@/static/images/study/cjdc/wordView/yb-playing-btn.gif");}
-		
+
 	}
-	
+
 	// 带点的单词展示
 	.word-circle-box{
 		width: 100%;overflow: hidden;word-wrap: break-word;word-break: break-all;line-height: 1.8;
@@ -1950,7 +2050,7 @@
 			display: inline-block;vertical-align: middle;border-radius: 10rpx;
 		}
 	}
-	
+
 	// 单词详情块
 	.details-title{background-color: #3a7fe9;padding: 8rpx 12rpx;border-radius: 10rpx;
 	font-size: 24rpx;color: #fff;display: inline-block;}
@@ -1971,7 +2071,7 @@
 	position: absolute;top: 46%;}
 .word-view-page::before{left: 60rpx;}
 .word-view-page::after{right: 60rpx;transform: rotate(180deg);}
-	
+
 // 单词详情- 学
 .words-xue-box{
 	text-align: center;
@@ -1999,7 +2099,7 @@
 		.item-top{background-color: #e7f2f9;}
 		.item-bottom{background-color: #9cd4ef;}
 	}
-	
+
 	.cg-item-list{
 		.uni-scroll-view-content{display: flex;box-sizing: border-box;padding:0 24rpx; }
 		.cg-item-box{display: flex;flex-direction: row;flex-shrink: 0;color: #000;font-size: 32rpx;padding: 24rpx 0;}
@@ -2014,8 +2114,8 @@
 		.isOdd{color: #ff9a01;}
 		.cg-symbol{margin: 0 10rpx;display: flex;align-items: center;}
 	}
-	
-	
+
+
 	.xue-change-btn-box{
 		display: flex;justify-content: center;border-bottom: 1rpx dashed #8dcff1;margin: 0 20rpx;padding: 32rpx 0 42rpx;
 		.change-btn{
@@ -2031,7 +2131,7 @@
 		.change-btn:last-child::after{transform: rotate(180deg);}
 		.change-btn.active:last-child::after{transform: unset;}
 	}
-	
+
 	.xue-details-content-box{text-align: left;margin-top: 12rpx;}
 }
 
@@ -2069,7 +2169,7 @@
 		.words-item{background-color: #ddffdd;color: #36c336;}
 		.words-item:last-child::after{background-image: url("@/static/images/study/cjdc/wordView/word-right-icon.png");}
 	}
-	
+
 	// 选择单词
 	.pin-words-change-box{
 		margin-bottom: 32rpx;
@@ -2080,7 +2180,7 @@
 	.pin-words-change-box.pin-small-words-box{
 		.words-item{line-height: 90rpx;}
 	}
-	
+
 	@media (max-height: 600px) {
 		// 拼
 		.words-pin-box{
@@ -2098,7 +2198,7 @@
 	.du-body-box{flex: 1;text-align: center;}
 	.du-yb-play-box{margin: 56rpx 0 42rpx;}
 	.du-words-explain-box{margin-top: 24rpx;}
-	
+
 	.mike-play-box{
 		.mike-play-tip{font-size: 28rpx;color: #666;text-align: center;}
 		.du-btn-box{width: 100%;position: relative;}
@@ -2152,10 +2252,10 @@
 		.show-words-box{margin: 12rpx auto 0;}
 		.yb-play-box{margin: 12rpx auto 0;}
 	}
-	
+
 }
 
-// 单词详情-背 
+// 单词详情-背
 .words-bei-box{
 	display: flex;flex-direction: column;text-align: center;
 	height: calc(100vh - 380rpx - var(--status-bar-height));
@@ -2180,9 +2280,9 @@
 	// background-color: #ddffdd;
 	.words-answer-right-box{color: #36c336;}
 	.words-answer-right-box::after{background-image: url("@/static/images/study/cjdc/wordView/word-right-icon.png");}
-	
+
 	.bei-body-box{flex: 1;overflow-y: auto;}
-		
+
 	// 键盘
 	.words-keyboard-box{
 		background-color: #e5e8ee;box-sizing: border-box;padding: 24rpx 0;
@@ -2281,7 +2381,7 @@
 	.uni-list{background-color: transparent!important;}
 	.uni-list--border-top,.uni-list--border-bottom{display: none;}
 	.uni-list-item__container{padding: 0!important;}
-	
+
 	.learn-record-scroll-view{
 		margin-top: 16rpx;overflow-y: auto;height: calc(100vh - 370rpx - var(--status-bar-height));
 		box-sizing: border-box;padding: 0 20rpx;

+ 55 - 0
components/dialog/nichengDialog.vue

@@ -0,0 +1,55 @@
+<!-- 小弹窗 一行文字 -->
+<template>
+	<uni-popup ref="tipSmallPopup" :animation="false" :is-mask-click="false"
+	 mask-background-color="rgba(255, 255, 255, 0.6);">
+	 <view class="ezy-tip-dialog tip-small-dialog duihuan-dialog">
+		<view class="tip-content-box">
+			<view class="tip-title">{{title}}</view>
+				<input class="duihuan-input" type="text" focus v-model="nichengValue" placeholder="请输入昵称" />
+				<view class="tip-btn-box">
+					<view class="not-confirm-btn" @click="handleClose"></view>
+					<view class="confirm-btn" @click="confirmBtn"></view>
+				</view>
+		</view>
+	 </view>
+	</uni-popup>
+</template>
+
+<script setup>
+	import { ref } from 'vue';
+	const props = defineProps({
+	  title: {
+	    type: String,
+	    default: '提示'
+	  },
+	  content: {
+	    type: String,
+		require: true,
+	    default: ''
+	  },
+	});
+	const tipSmallPopup = ref(null); // 索引
+	const nichengValue = ref(''); // 索引
+	const $emit = defineEmits(['confirm-btn'])
+	// 打开弹窗
+	function handleShow() {
+		tipSmallPopup.value.open();
+	}
+	// 取消
+	function handleClose() {
+		nichengValue.value = ''
+		tipSmallPopup.value.close();
+	}
+	// 确认
+	function confirmBtn(){
+		$emit('confirm-btn',nichengValue.value);
+		tipSmallPopup.value.close();
+		nichengValue.value = ''
+	}
+	defineExpose({
+			handleShow
+		})
+</script>
+
+<style>
+</style>

+ 1 - 1
components/dialog/tipSmallDialog.vue

@@ -44,7 +44,7 @@
 		tipSmallPopup.value.close();
 	}
 	defineExpose({
-			handleShow
+			handleShow,handleClose
 		})
 </script>
 

+ 2 - 1
config.js

@@ -2,12 +2,13 @@
 export default   {
   //baseUrl: 'https://goosechampion.com/api',
    baseUrl: 'https://kf1.mtavip.com/api',
+  //baseUrl: 'https://goosechampion.com/api/v103',
   // 应用信息
   appInfo: {
     // 应用名称
     name: "鹅状元",
     // 应用版本
-    version: "1.0.0",
+    version: "1.0.3",
     // 应用logo
     logo: "/static/logo.png",
     // 官方网站

+ 43 - 13
pages.json

@@ -87,6 +87,32 @@
 			}
 		},
 		{
+			"path": "pages/my/sxtkPage",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},{
+			"path": "pages/my/headImg",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		}, {
+			"path": "pages/my/xuexiJilu",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},{
+			"path": "pages/my/xuexishichang",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},{
+			"path": "pages/my/yingyongshezhi",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		},
+		{
 			"path": "pages/unitTest/index",
 			"style": {
 				"navigationBarTitleText": "单元测试",
@@ -98,27 +124,31 @@
 			}
 		},
 		{
-			"path": "pages/pay/svip",
-			"style": {
+			"path" : "pages/pay/svip",
+			"style" : 
+			{
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path": "pages/pay/order",
-			"style": {
+			"path" : "pages/pay/order",
+			"style" : 
+			{
 				"navigationStyle": "custom"
 			}
 		},
-
+		
 		{
-			"path": "pages/pay/orderPay",
-			"style": {
+			"path" : "pages/pay/orderPay",
+			"style" : 
+			{
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path": "pages/wrong/index",
-			"style": {
+			"path" : "pages/wrong/index",
+			"style" : 
+			{
 				"navigationStyle": "custom"
 			}
 		},
@@ -152,10 +182,10 @@
 			}
 		}
 	],
-	"tabBar": {
-		"custom": true,
-		"list": []
-	},
+	 "tabBar": {
+	    "custom": true,
+	    "list": []
+	  },
 	// "tabBar": {
 	// 	"height": "90rpx",
 	// 	"iconWidth": "134rpx",

+ 1 - 1
pages/login/login.vue

@@ -16,7 +16,7 @@
 				<text class="cxfs-btn" @click="startCountdown"
 					:class="{ 'cxfs-btn-disabled': loginData.isDisabled}">{{loginData.buttonText}}</text>
 				<text class="login-text" @click="goIndex">无法收到验证码</text>
-				<text class="login-text">客服电话:17304117625</text>
+				<text class="login-text">客服电话:4001750778</text>
 			</view>
 		</view>
 		<captcha ref="captcha" :config="config" @captchaSuccess="captchaSuccess" @captchaError="captchaError"

+ 9 - 6
pages/my/aboutPage.vue

@@ -10,7 +10,7 @@
 					<icon class="about-icon-box"></icon>
 					<view class="top-text-box">
 						<view class="about-name">鹅状元</view>
-						<view class="about-text">客服电话:17304117625</view>
+						<view class="about-text">客服电话:4001750778</view>
 						<view class="about-text">备案号:辽ICP备15006970号-7A</view>
 					</view>
 				</view>
@@ -43,13 +43,16 @@
 		if(cacheManager.get('auth')){
 			// 非游客
 			uni.redirectTo({
-				url: '/pages/my/index'
+				url: '/pages/my/yingyongshezhi'
 			});
-		}else{
-			// 游客
-			uni.redirectTo({
-				url: `/pages/my/index?typeId=${routerOpt.typeId}&levelId=${routerOpt.levelId}&subjectId=${routerOpt.subjectId}&tipFlag=${routerOpt.tipFlag}`
+		}else{
+			uni.redirectTo({
+				url: '/pages/my/yingyongshezhi'
 			});
+			// 游客
+			// uni.redirectTo({
+			// 	url: `/pages/my/index?typeId=${routerOpt.typeId}&levelId=${routerOpt.levelId}&subjectId=${routerOpt.subjectId}&tipFlag=${routerOpt.tipFlag}`
+			// });
 		}
 		
 	}

+ 52 - 0
pages/my/banbenConfirmDialog.vue

@@ -0,0 +1,52 @@
+<!-- 生成题库弹窗 -->
+<template>
+ <uni-popup ref="tipBigPopup" :animation="false" :is-mask-click="false"
+  mask-background-color="rgba(255, 255, 255, 0.6);">
+  <view class="sxtk-sc-dialog">
+  <view class="tip-content-box">
+   <view class="tip-title">{{title}}</view>
+   <view class="tip-content" v-if="content">{{content}}</view>
+   <view class="tip-btn-box">
+    <view class="confirm-btn" @click="confirmBtn">生成</view>
+    <view class="not-confirm-btn" @click="handleClose">取消</view>
+   </view>
+  </view>
+  </view>
+ </uni-popup>
+</template>
+
+<script setup>
+ import { ref } from 'vue';
+ const props = defineProps({
+   title: {
+     type: String,
+     default: '温馨提示'
+   },
+   content: {
+     type: String,
+     default: ''
+   },
+ });
+ const tipBigPopup = ref(null); // 索引
+ const $emit = defineEmits(['confirm-btn'])
+ // 打开弹窗
+ function handleShow() {
+  tipBigPopup.value.open();
+ }
+ // 取消
+ function handleClose() {
+  tipBigPopup.value.close();
+ }
+ // 确认
+ function confirmBtn(){
+  $emit('confirm-btn');
+  tipBigPopup.value.close();
+ }
+ defineExpose({
+   handleShow,
+   handleClose
+  })
+</script>
+
+<style>
+</style>

+ 175 - 0
pages/my/headImg.vue

@@ -0,0 +1,175 @@
+<template>
+	<view class="ezy-ghtx-page">
+		<view class="icon-title-navBar-box">
+			<view @click="handleBack" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">更换头像</text>
+		</view>
+		<img class="ghtx-img" :src="userImg" alt="">
+
+		<view @click="chooseImage" class="xc-btn">相册</view>
+		<view @click="handleBack" class="qx-btn">取消</view>
+	</view>
+</template>
+
+<script setup>
+	import agreeContentDialog from '@/pages/login/agreeContentDialog.vue';
+	import {
+		toast,
+		getUserIdentity
+	} from "@/utils/common";
+	import cacheManager from '@/utils/cacheManager.js';
+	import {
+		getFilePolicy,
+		updataHead,myInfo
+	} from '@/api/my.js'
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import axios from 'axios';
+	import {
+		reactive,
+		ref
+	} from "vue";
+	import {
+		onShow
+	} from '@dcloudio/uni-app';
+
+	let userImg = ref(null);
+	let currentPlatform = ref(null);
+	const tempPath = ref('')
+	const checkAlbumPermission = async () => {
+		const status = await uni.getSetting()
+		if (!status.authSetting['scope.album']) {
+			await uni.authorize({
+				scope: 'scope.album'
+			})
+		}
+	}
+	const chooseImage = async () => {
+		try {
+			await checkAlbumPermission()
+			uni.chooseImage({
+				count: 1,
+				sizeType: ['compressed'],
+				sourceType: ['album'], // 仅限相册选择‌:ml-citation{ref="1" data="citationList"}
+				success: (res) => {
+
+					uploadFile(res.tempFilePaths[0])
+				},
+				fail: (err) => {
+					console.error('选择失败:', err)
+				}
+			})
+		} catch (err) {
+			uni.showModal({
+				title: '权限申请失败',
+				content: '请前往设置开启相册权限'
+			})
+		}
+	}
+	function updateIcon(data){
+		updataHead({icon:data}).then(res=>{
+			if(res.code ==0){
+			uni.showToast({
+				title: '上传成功',
+				icon: 'success'
+			});	
+			}else{
+				uni.showToast({
+					title: '上传失败',
+				});
+			}
+		})
+	}
+	function uploadFile(filePath) {
+		const suffix = filePath.split('.').pop();
+		let req = {
+			prefix: 'resource/',
+			suffix: suffix
+		}
+		getFilePolicy(req).then(res => {
+			if (res.code === 0) {
+				const policyData = res.data;
+				console.log('policyData', policyData);
+				uni.uploadFile({
+					url: policyData.uploadUrl,
+					filePath: filePath,
+					name: 'file',
+					formData: {
+						key: policyData.key,
+						policy: policyData.policy,
+						OSSAccessKeyId: policyData.accessid,
+						signature: policyData.signature,
+						success_action_status: '200'
+					},
+					header: {
+						'Content-Type': 'multipart/form-data'
+					},
+					success(uploadRes) {
+						console.log('uploadRes', uploadRes);
+						if (uploadRes.statusCode === 200) {
+							userImg.value = `${policyData.downloadUrl}/${policyData.key}`;					
+							updateIcon(userImg.value)
+						} else {
+							uni.showToast({
+								title: '阿里云上传错误,请重试!',
+							});
+							return false
+						}
+					},
+					fail(err) {
+						console.log('err', err);
+					}
+				});
+
+
+			}
+		})
+
+	}
+
+
+
+	function handleBack() {
+		uni.redirectTo({
+			url: '/pages/my/yingyongshezhi'
+		})
+	}
+
+	function openXiangce2() {
+
+	}
+
+
+	function openXiangce() {
+
+	}
+
+	function isIOSorAndroid() {
+		const systemInfo = uni.getSystemInfoSync();
+
+		console.log('systemInfo', systemInfo);
+
+		if (systemInfo.platform == 'ios') {
+			return currentPlatform.value = 'ios'
+		} else {
+			return currentPlatform.value = 'android'
+		}
+	}
+	function getMyInfo() {
+			myInfo({}).then(res => {
+				if (res.code == 0) {
+					userImg.value = res.data.icon;
+				} else {
+					toast('获取头像失败')
+					return false
+				}
+	
+			})
+		}
+			
+	onLoad((options) => {
+		isIOSorAndroid();
+		getMyInfo();
+	})
+</script>

+ 141 - 41
pages/my/index.vue

@@ -1,9 +1,9 @@
 <template>
 	<view class="ezy-my-page">
 		<view class="my-head-box">
-			<icon class="head-img-box" :style="{backgroundImage: 'url(' + myInfoData.userImg + ')'}"></icon>
+			<icon class="head-img-box" :style="{backgroundImage: 'url(' + myInfoData.icon + ')'}"></icon>
 			<view class="head-content-box">
-				<text>{{myInfoData.userName}}</text>
+				<text>{{myInfoData.nickName}}</text>
 				<view class="ezy-jf-box" v-if="loginFlag">
 					<icon class="jf-icon"></icon>
 					<text class="jf-text">{{myInfoData.credit}}</text>
@@ -18,48 +18,70 @@
 				<img :src="item.addCover" class="hyqy-box-img" />
 			</swiper-item>
 		</swiper>
+		<!--
+		<view class="list-row" @click="telClick">
+			<icon class="list-icon tel-icon"></icon>
+			<text>手机号码</text>
+		</view>
+		<view class="list-row" @click="aboutClick">
+			<icon class="list-icon about-icon"></icon>
+			<text>关于我们</text>
+		</view>
+		<view v-if="loginFlag" class="list-row" @click="xxscClick">
+			<icon class="list-icon sxtk-icon"></icon>
+			<text>学习时长</text>
+		</view>
+		<view v-if="loginFlag" class="list-row" @click="yinsizhengce">
+			<icon class="list-icon yszc-icon"></icon>
+			<text>隐私政策</text>
+		</view>
+		-->
 		<view class="my-list-box">
-			<view class="list-row" @click="telClick">
-				<icon class="list-icon tel-icon"></icon>
-				<text>手机号码</text>
-			</view>
-			<view class="list-row" @click="xxjlClick" v-if="loginFlag">
+			<view class="list-item" @click="xxjlClick">
 				<icon class="list-icon xxjl-icon"></icon>
 				<text>学习记录</text>
 			</view>
-			<view class="list-row" @click="checkWrong">
+			<view class="list-item" @click="checkWrong">
 				<icon class="list-icon error-icon"></icon>
 				<text>我的错题</text>
 			</view>
-			<view v-if="loginFlag" class="list-row" @click="orderClick">
-				<icon class="list-icon order-icon"></icon>
-				<text>我的订单</text>
-			</view>
-			<view class="list-row" @click="aboutClick">
-				<icon class="list-icon about-icon"></icon>
-				<text>关于我们</text>
-			</view>
-			<view class="list-row" @click="cpscClick">
-				<icon class="list-icon cpsc-icon"></icon>
-				<text>产品商城</text>
+			<view class="list-item" @click="sxtkClick">
+				<icon class="list-icon sxtk-icon"></icon>
+				<text>数学题库</text>
 			</view>
-			<view v-if="appleCode=='true'&&currentPlatform=='ios'" class="list-row" @click="duihuamaDuihuan">
+			<view v-if="appleCode=='true'&&currentPlatform=='ios'" class="list-item" @click="duihuamaDuihuan">
 				<icon class="list-icon duihuanma-icon"></icon>
 				<text>兑换码</text>
 			</view>
-			<view v-if="currentPlatform=='android'" class="list-row" @click="duihuamaDuihuan">
+			<view v-if="currentPlatform=='android'" class="list-item" @click="duihuamaDuihuan">
 				<icon class="list-icon duihuanma-icon"></icon>
 				<text>兑换码</text>
 			</view>
-			<view v-if="loginFlag" class="list-row" @click="yonghuzhuxiao">
+		</view>
+		<view class="my-list-box">
+			<view class="list-item" @click="cpscClick">
+				<icon class="list-icon cpsc-icon"></icon>
+				<text>产品商城</text>
+			</view>
+			<view class="list-item" @click="orderClick">
+				<icon class="list-icon order-icon"></icon>
+				<text>我的订单</text>
+			</view>
+			<view class="list-item" @click="kefudianhua">
+				<icon class="list-icon kfdh-icon"></icon>
+				<text>客服电话</text>
+			</view>
+			<view class="list-item" @click="yingyongshezhi">
+				<icon class="list-icon yysz-icon"></icon>
+				<text>应用设置</text>
+			</view>
+		</view>
+		<view class="my-list-box">
+			<view class="list-item" @click="yonghuzhuxiao">
 				<icon class="list-icon zhuxiao-icon"></icon>
 				<text>用户注销</text>
 			</view>
-			<view v-if="loginFlag" class="list-row" @click="yinsizhengce">
-				<icon class="list-icon yszc-icon"></icon>
-				<text>隐私政策</text>
-			</view>
-			<view class="list-row" @click="exitLogin">
+			<view class="list-item" @click="exitLogin">
 				<icon class="list-icon login-out-icon"></icon>
 				<text>退出登录</text>
 			</view>
@@ -73,6 +95,8 @@
 		<duihuanmaDialog ref="duihuanmaDialogRef" @confirm-btn="duihuanmaBtn" title="兑换"></duihuanmaDialog>
 		<tel-dialog @telClose="telClose" @bindBtn="bindBtn" v-if="telDialogFlag"></tel-dialog>
 		<agree-content-dialog ref="agreeContentDialogRef" :agreeType="agreeType"></agree-content-dialog>
+		<tip-small-dialog ref="kefuDialogRef" :title="kefuTitle" @confirm-btn="kefuBtn" :content="kefuContent"
+			class="kefu-dialog"></tip-small-dialog>
 	</view>
 </template>
 
@@ -145,6 +169,8 @@
 		userName: '',
 		credit: '',
 		vipFlag: '',
+		nickName: '',
+		icon: '',
 	});
 	let routerOpt = ref(false);
 	let appleCode = ref(null);
@@ -155,6 +181,10 @@
 	const duihuanmaDialogRef = ref(null);
 	const bannerArr = ref(null);
 
+	const kefuDialogRef = ref(null);
+	const kefuTitle = '提示';
+	const kefuContent = '客服电话:4001750778';
+
 	const exitLogin = () => {
 		exitDialogRef.value.handleShow();
 	}
@@ -195,11 +225,19 @@
 	}
 
 	function yonghuzhuxiao() {
-		zhuxiaoDialogRef.value.handleShow();
+		if (loginFlag.value) {
+			zhuxiaoDialogRef.value.handleShow();
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
 	}
 
 	function duihuamaDuihuan() {
-		duihuanmaDialogRef.value.handleShow();
+		if (loginFlag.value) {
+			duihuanmaDialogRef.value.handleShow();
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
 	}
 
 	function duihuanmaBtn(data) {
@@ -232,6 +270,13 @@
 		agreeContentDialogRef.value.handleShow();
 	}
 
+	function kefudianhua() {
+		kefuDialogRef.value.handleShow();
+	}
+
+	function kefuBtn() {
+		kefuDialogRef.value.handleClose();
+	}
 	// 游客弹窗---确定
 
 	function ykConfirm() {
@@ -240,6 +285,21 @@
 		});
 	}
 
+	function yingyongshezhi() {
+		if (loginFlag.value) {
+			const AuthCode = getUserIdentity();
+			if (AuthCode == 'Visitor') {
+				youkeDialogRef.value.handleShow();
+				return;
+			}
+			uni.redirectTo({
+				url: '/pages/my/yingyongshezhi'
+			});
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
+	}
+
 	// 手机号码
 	function telClick() {
 		if (loginFlag.value) {
@@ -274,6 +334,32 @@
 		}
 	}
 
+
+	function sxtkClick() {
+		if (loginFlag.value) {
+			uni.redirectTo({
+				url: '/pages/my/sxtkPage'
+			});
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
+	}
+
+	function xxjlClick() {
+		if (loginFlag.value) {
+			uni.redirectTo({
+				url: '/pages/my/xuexiJilu'
+			});
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
+	}
+
+	function xxscClick() {
+		uni.redirectTo({
+			url: '/pages/my/xuexishichang'
+		});
+	}
 	// 产品商城
 	function cpscClick() {
 
@@ -303,9 +389,22 @@
 	// 获取用户数据
 	function getMyInfo() {
 		myInfo({}).then(res => {
-			getUserImg(res.data.growthType)
+
 			myInfoData.userName = res.data.userName;
 			myInfoData.credit = res.data.credit;
+
+			myInfoData.nickName = res.data.nickName;
+
+			if (res.data.nickName) {
+				myInfoData.nickName = res.data.nickName;
+			} else {
+				myInfoData.nickName = '鹅状元';
+			}
+			if (res.data.icon) {
+				myInfoData.icon = res.data.icon;
+			} else {
+				getUserImg(res.data.growthType)
+			}
 		})
 		getMyCardList();
 	}
@@ -326,25 +425,28 @@
 	function getUserImg(data) {
 		switch (data) {
 			case 0:
-				myInfoData.userImg = 'static/images/my/head-img0.png'
+				myInfoData.icon = 'static/images/my/head-img0.png'
 				break;
 			case 1:
-				myInfoData.userImg = 'static/images/my/head-img1.png'
+				myInfoData.icon = 'static/images/my/head-img1.png'
 				break;
 			case 2:
-				myInfoData.userImg = 'static/images/my/head-img2.png'
+				myInfoData.icon = 'static/images/my/head-img2.png'
 				break;
 			case 3:
-				myInfoData.userImg = 'static/images/my/head-img3.png'
+				myInfoData.icon = 'static/images/my/head-img3.png'
 				break;
 			default:
-				myInfoData.userImg = 'static/images/my/head-unlogin-img.png'
+				myInfoData.icon = 'static/images/my/head-unlogin-img.png'
 				break;
 
 		}
 	}
 	// 点击card
 	function hyqyBtn(data) {
+		if(data.subjectId ==0){
+			return false
+		}
 		if (loginFlag.value) {
 
 			uni.redirectTo({
@@ -381,7 +483,8 @@
 		// my游客
 		loginFlag.value = false;
 		myInfoData.userName = '游客';
-		myInfoData.userImg = 'static/images/my/head-unlogin-img.png'
+		myInfoData.nickName = '鹅状元';
+		myInfoData.icon = 'static/images/my/head-unlogin-img.png'
 	}
 
 	// 非游客
@@ -406,16 +509,13 @@
 		if (!cacheManager.get('auth')) {
 			// 游客
 			routerOpt = options;
+			isIOSorAndroid()
 		} else {
 			appleCode.value = cacheManager.get("auth").appleCode.toString()
 			isIOSorAndroid()
 		}
 	})
-	function xxjlClick(){
-		uni.redirectTo({
-			url: '/pages/my/learnRecord'
-		})
-	}
+
 	function checkWrong() {
 		if (loginFlag.value) {
 			const AuthCode = getUserIdentity();

+ 146 - 0
pages/my/sxtkPage.vue

@@ -0,0 +1,146 @@
+<template>
+	<view class="ezy-sxtk-page">
+		<view class="icon-title-navBar-box">
+			<view @click="handleBack" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">数学题库</text>
+		</view>
+		<view class="ezy-tab-border sxtk-tab-border">
+			<view class="tab-img"></view>
+			<view class="sxtk-tab-box">
+				<view v-for="(item,index) in jiaocaiData" :key="index"  class="tab-item"
+				 @click="selectNianji(item,index)" :class="{'active': currentNianjiName == item.nianji}">
+					<view class="tab-nianji-item">{{item.nianji}}</view>
+				</view>
+			</view>
+			<view class="sxtk-line"></view>
+			<view class="sxtk-banben-body">
+				<view v-for="(item,index) in currentBanbenList" :key="index" class="banben-item"
+				:class="{'active': banbenName == item}" @click="selectBanben(item,index)">
+					<view class="banben-text-item">{{item}}</view>
+				</view>
+			</view>
+			<view class="sxtk-line"></view>
+			<button class="sxtk-confirm-btn" @click="handleConfirm"></button>
+		</view>
+		<banbenConfirmDialog ref="jiaocaiRef" @confirm-btn="jcConfirm" :content="jcContent"></banbenConfirmDialog>
+		<CustomTabBar ></CustomTabBar>
+	</view>
+</template>
+
+<script setup>
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+		import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
+	import {
+		selectTiku
+	} from '@/api/my.js'
+	import {
+		toast,
+		getUserIdentity
+	} from "@/utils/common";
+	import * as httpApi from "@/api/pdf.js"
+	import {
+		ref
+	} from "vue";
+	import banbenConfirmDialog from './banbenConfirmDialog.vue';
+	let jiaocaiData = ref(null)
+	let currentBanbenList = ref([])
+
+	let currentNianjiName = ref('L1')
+	let currentBanbenIndex = ref(null)
+	const banbenName = ref(null)
+	const jiaocaiRef = ref(null);
+	const jcContent = ref(null);
+
+	function selectNianji(item, index) {
+		currentNianjiName.value = item.nianji
+
+		currentBanbenList.value = item.banbenList
+		banbenName.value = ''
+
+	}
+
+	function jcConfirm() {
+		httpApi.getPDFUrl({
+		  banben:banbenName.value,
+		  nianji:currentNianjiName.value,
+		}).then(res1 => {
+			uni.downloadFile({
+			  url: res1.data,
+			  success: function (res) {
+			    var filePath = res.tempFilePath;
+			    uni.openDocument({
+			      filePath: filePath,
+			      showMenu: true,
+			      success: function (res) {
+			        console.log('打开文档成功');
+					jiaocaiRef.value.handleClose();
+			      }
+			    });
+			  }
+			});
+		})
+	
+		/* uni.navigateTo({
+			url: '/pages/pdfPage/pdfPage?banben=' + banbenName.value + '&nianji=' + currentNianjiName.value
+		}); */
+	}
+
+	function selectBanben(item, index) {
+
+		console.log('item', item);
+		if (!currentNianjiName.value) {
+			toast("请选择年级")
+			return false
+		}
+
+		banbenName.value = item
+
+	}
+
+	function handleBack() {
+		uni.redirectTo({
+			url: '/pages/my/index'
+		});
+	}
+
+	function handleConfirm() {
+		// 确认逻辑
+		if (banbenName.value && currentNianjiName.value) {
+			jcContent.value = "用户你好,鹅状元将为您随机生成《" + banbenName.value + "》100道试题."
+			console.log('jcContent.value', jcContent.value);
+			jiaocaiRef.value.handleShow();
+		} else {
+			toast("请选择年级和对应的教学版本")
+			return false
+		}
+	}
+
+	function getInfo() {
+		selectTiku({}).then(res => {
+			// jiaocaiData.value = [{
+			// 		"nianji": "L1",
+			// 		"banbenList": ["人教版"]
+			// 	},
+			// 	{
+			// 		"nianji": "L2",
+			// 		"banbenList": ["人教版222", "人教版222333"]
+			// 	}
+			// ]
+			jiaocaiData.value = res.data
+			// 默认显示第一个年级的版本列表
+			if (jiaocaiData.value && jiaocaiData.value.length > 0) {
+				currentBanbenList.value = jiaocaiData.value[0].banbenList
+			}
+		})
+	}
+
+	onLoad((options) => {
+		if (options.banben && options.nianji) {
+			currentNianjiName.value = options.nianji
+			banbenName.value = options.banben
+		}
+		getInfo()
+	})
+</script>

+ 394 - 0
pages/my/xuexiJilu.vue

@@ -0,0 +1,394 @@
+<template>
+	<view class="ezy-xxjl-page">
+		<view class="icon-title-navBar-box">
+			<view @click="handleBack" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">学习记录</text>
+		</view>
+		<view class="ezy-tab-border">
+			<uni-segmented-control :current="data.current" :values="data.items" active-color="#3A7FE9"
+				@clickItem="onChangeTab" class="ezy-tab-box" />
+			<view class="xxjl-content-box">
+				<view v-if="data.current === 0">
+					<scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="data.shuxue.loading"
+						:refresher-threshold="50" refresher-background="transparent" @refresherrefresh="onRefresh"
+						class="xxjl-scroll-view">
+						<!--数学-->
+						<uni-list>
+							<uni-list-item v-for="item in data.shuxue.list" class="xxjl-item-box">
+								<template v-slot:body>
+									<view @click="goDao(item)">
+										<view class="item-date-row">
+											<view class="data-item">
+												<icon class="data-icon"></icon>
+												<text>{{ item.createTime }}</text>
+											</view>
+											<!-- 这里加点击事件 wgy看这里 -->
+											<view class="data-item del-item">
+												<icon @click.stop="deleteJilu(item)" class="del-icon"></icon>
+											</view>
+										</view>
+										<view class="item-zhang-row">
+											<icon class="zhang-icon"></icon>
+											<view>{{ item.levelName }}</view>
+										</view>
+										<view class="item-jie-row">
+											<text>{{ item.zhangName }}</text>
+										</view>
+										<view class="item-jie-row">
+											<text>{{ item.jieName }}</text>
+										</view>
+									</view>
+
+								</template>
+							</uni-list-item>
+							<uni-load-more :status="data.shuxue.state" @click="getMore(0)"
+								:contentText="data.shuxue.contentText"></uni-load-more>
+						</uni-list>
+					</scroll-view>
+				</view>
+				<view v-if="data.current === 1">
+					<scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="data.yingyu.loading"
+						:refresher-threshold="50" refresher-background="transparent" @refresherrefresh="onRefresh"
+						class="xxjl-scroll-view">
+						<!--英语-->
+						<uni-list>
+							<uni-list-item v-for="item in data.yingyu.list" class="xxjl-item-box">
+								<template v-slot:body>
+									<view>
+										<view class="item-date-row">
+											<view class="data-item">
+												<icon class="data-icon"></icon>
+												<text>{{ item.createTime }}</text>
+											</view>
+											<!-- 这里加点击事件 wgy看这里 -->
+											<view class="data-item del-item">
+												<icon @click.stop="deleteJilu(item)" class="del-icon"></icon>
+											</view>
+										</view>
+										<view class="item-zhang-row">
+											<icon class="zhang-icon"></icon>
+											<view>{{ item.levelName }}</view>
+										</view>
+										<view class="item-jie-row">
+											<text>{{ item.zhangName }}</text>
+										</view>
+										<view class="item-jie-row">
+											<text>{{ item.jieName }}</text>
+										</view>
+									</view>
+								</template>
+							</uni-list-item>
+							<uni-load-more :status="data.yingyu.state" @click="getMore(1)"
+								:contentText="data.yingyu.contentText"></uni-load-more>
+						</uni-list>
+					</scroll-view>
+				</view>
+			</view>
+		</view>
+		<tip-small-dialog ref="deleteJiluDialogRef" @confirm-btn="deleteJiluBtn"
+			:content="deleteJiluContent"></tip-small-dialog>
+		<CustomTabBar></CustomTabBar>
+	</view>
+</template>
+
+<script setup>
+	import {
+		reactive,
+		ref
+	} from "vue";
+	import {
+		xuexiJilu,
+		xuexiJiluDelete
+	} from "@/api/my.js";
+	import {
+		onLoad
+	} from "@dcloudio/uni-app";
+	import cuoti from "@/components/chengji/chengji.vue";
+	import tipSmallDialog from '@/components/dialog/tipSmallDialog.vue';
+	import {
+		getWrongInfo
+	} from "@/api/wrong";
+	import {
+		toast,
+		getUserIdentity
+	} from "@/utils/common";
+	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
+	import cacheManager from "@/utils/cacheManager.js"
+	const zhangId = ref(null);
+	const nianji = ref(null);
+	const subjectId = ref(null);
+	const deleteJiluDialogRef = ref(null);
+	const deleteJiluContent = '你确定要执行这个操作吗?';
+	const wrongRef = ref(null);
+	const deleteId = ref('');
+
+	const data = reactive({
+		items: ['数学', '英语'],
+		current: 0,
+		shuxue: {
+			page: 0,
+			list: [],
+			loading: false,
+			state: 'more',
+			contentText: {
+				contentdown: '查看更多',
+				contentrefresh: '加载中',
+				contentnomore: '没有更多'
+			}
+
+		},
+		yingyu: {
+			page: 0,
+			list: [],
+			loading: false,
+			state: 'more',
+			contentText: {
+				contentdown: '查看更多',
+				contentrefresh: '加载中',
+				contentnomore: '没有更多'
+			}
+		},
+		wrongList: [],
+	})
+	subjectId.value = data.current + 1;
+
+
+	function goDao(data) {
+		const auth = cacheManager.get('auth');
+		cacheManager.updateObject('auth', {
+			levelId: data.levelId,
+			zhangId: data.zhangId,
+		})
+		cacheManager.remove('zhangInfo')
+		uni.redirectTo({
+			url: `/pages/study/index`
+		})
+
+	}
+
+	function deleteJilu(item) {
+		deleteId.value = item.id
+		deleteJiluDialogRef.value.handleShow();
+	}
+
+	function deleteJiluBtn(id) {
+		let req = {
+			id: deleteId.value
+		}
+		xuexiJiluDelete(req).then(res => {
+			if (res.code == 0) {
+				if (data.current === 0) {
+					data.shuxue.list = [];
+					data.shuxue.page = 0;
+				} else {
+					data.yingyu.list = [];
+					data.yingyu.page = 0;
+				}
+				// 重新加载数据
+				refreshData(data.current);
+			} else {
+				toast('失败,请稍后重试')
+			}
+		}).catch(err => {
+			toast('失败,请稍后重试')
+		})
+	}
+
+	function handleBack() {
+		uni.redirectTo({
+			url: '/pages/my/index'
+		})
+		uni.$emit('back-outpage')
+	}
+
+	function handleBackFromCuoti() {
+		wrongRef.value.closePopup();
+		uni.$emit('back-outpage')
+	}
+
+	function onChangeTab(e) {
+		if (data.current !== e.currentIndex) {
+			data.current = e.currentIndex;
+			subjectId.value = data.current + 1;
+			if (data.current == 0) {
+				data.shuxue.page = 0
+			} else if (data.current == 1) {
+				data.yingyu.page = 0
+			}
+			refreshData(data.current);
+		}
+	}
+
+	function refreshData(code) {
+		const opt = {
+			page: 1,
+			size: 10, // 固定查询10条
+			subjectId: data.current + 1 // 前台索引加1为学科cardId
+		}
+
+		if (code == 0) {
+			data.shuxue.list = [];
+			// 数学
+			data.shuxue.state = 'loading';
+			data.shuxue.page++;
+			opt.page = data.shuxue.page;
+		} else if (code == 1) {
+			data.yingyu.list = [];
+			// 英语
+			data.yingyu.state = 'loading';
+			data.yingyu.page++;
+			opt.page = data.yingyu.page;
+		}
+		xuexiJilu(opt).then(res => {
+			if (code == 0) {
+				data.shuxue.list = data.shuxue.list.concat(res.data.data);
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				data.yingyu.list = data.yingyu.list.concat(res.data.data);
+				data.yingyu.loading = false;
+			}
+			if (code == 0) {
+				if (res.data.total > data.shuxue.list.length) {
+					// 数学
+					data.shuxue.state = 'more';
+					data.shuxue.loading = false;
+				} else {
+					// 数学
+					data.shuxue.state = 'no-more';
+					data.shuxue.loading = false;
+
+				}
+			} else if (code == 1) {
+				if (res.data.total > data.yingyu.list.length) {
+					// 英语
+					data.yingyu.state = 'more';
+					data.yingyu.loading = false;
+				} else {
+					// 英语
+					data.yingyu.state = 'no-more';
+					data.yingyu.loading = false;
+				}
+			}
+		}).catch(err => {
+			if (code == 0) {
+				// 数学
+				data.shuxue.state = 'more';
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				// 英语
+				data.yingyu.state = 'more';
+				data.yingyu.loading = false;
+			}
+		})
+	}
+
+	function getMore(code) {
+		console.log('12312312312');
+		const opt = {
+			page: 1,
+			size: 10, // 固定查询10条
+			subjectId: data.current + 1 // 前台索引加1为学科cardId
+		}
+
+		if (code == 0) {
+
+			if (data.shuxue.state == 'no-more') return;
+			// 数学
+			data.shuxue.state = 'loading';
+			data.shuxue.page++;
+			opt.page = data.shuxue.page;
+		} else if (code == 1) {
+			// 英语
+			if (data.yingyu.state == 'no-more') return;
+			data.yingyu.state = 'loading';
+			data.yingyu.page++;
+			opt.page = data.yingyu.page;
+		}
+		xuexiJilu(opt).then(res => {
+			if (code == 0) {
+				data.shuxue.list = data.shuxue.list.concat(res.data.data);
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				data.yingyu.list = data.yingyu.list.concat(res.data.data);
+				data.yingyu.loading = false;
+			}
+			if (code == 0) {
+				if (res.data.total > data.shuxue.list.length) {
+					// 数学
+					data.shuxue.state = 'more';
+					data.shuxue.state_text = '加载更多';
+					data.shuxue.loading = false;
+				} else {
+					// 数学
+					data.shuxue.state = 'no-more';
+					data.shuxue.state_text = '没有更多啦';
+
+					data.shuxue.loading = false;
+				}
+			} else if (code == 1) {
+				if (res.data.total > data.yingyu.list.length) {
+					// 英语
+					data.yingyu.state = 'more';
+					data.yingyu.state_text = '加载更多';
+					data.yingyu.loading = false;
+				} else {
+					// 英语
+					data.yingyu.state = 'no-more';
+					data.yingyu.state_text = '没有更多啦';
+
+					data.yingyu.loading = false;
+				}
+			}
+		}).catch(err => {
+			if (code == 0) {
+				// 数学
+				data.shuxue.state = 'more';
+				data.shuxue.state_text = '加载更多';
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				// 英语
+				data.yingyu.state = 'more';
+				data.yingyu.state_text = '加载更多';
+				data.yingyu.loading = false;
+			}
+		})
+	}
+
+	// function formatListToUse(list) {
+	// 	list.forEach((item, index) => {
+	// 		item.mta_show = false;
+	// 		if (item.type == 3) {
+	// 			item.result = JSON.parse(item.result);
+	// 			item.placeholders = item.result.map((item, cindex) => `[bank${cindex+1}]`)
+	// 			item.reply = item.reply ? JSON.parse(item.reply) : item.result.map(() => '');
+	// 		}
+
+	//      if (item.type == 4) {
+	//        // 特殊题型英语题
+	//        const audioList = item.audios ? item.audios.split(',') : [];
+	//        item.placeholders = audioList.map((item, cindex) => `[yingyu${cindex+1}]`)
+	//        item.audioList = audioList;
+	//      }
+	// 	})
+	// }
+	function onRefresh() {
+		if (data.current == 0) {
+			data.shuxue.page = 0;
+			data.shuxue.list = [];
+			data.shuxue.loading = true;
+		} else if (data.current == 1) {
+			data.yingyu.page = 0;
+			data.yingyu.list = [];
+			data.yingyu.loading = true;
+		}
+		refreshData(data.current);
+	}
+
+	onLoad(() => {
+		getMore(data.current);
+	})
+</script>
+
+<style>
+
+</style>

+ 270 - 0
pages/my/xuexishichang.vue

@@ -0,0 +1,270 @@
+<template>
+	<view class="ezy-cuoti-page">
+		<view class="icon-title-navBar-box">
+			<view @click="handleBack" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">关于我们</text>
+		</view>
+		<text>学习时长</text>
+		<CustomTabBar></CustomTabBar>
+	</view>
+</template>
+
+<script setup>
+	import {
+		reactive,
+		ref
+	} from "vue";
+	import {
+		getWrongData
+	} from "@/api/wrong";
+	import {
+		onLoad
+	} from "@dcloudio/uni-app";
+	import cuoti from "@/components/chengji/chengji.vue";
+	import {
+		getWrongInfo
+	} from "@/api/wrong";
+	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
+
+	const zhangId = ref(null);
+	const nianji = ref(null);
+	const subjectId = ref(null);
+
+	const wrongRef = ref(null);
+
+	const data = reactive({
+		items: ['数学', '英语'],
+		current: 0,
+		shuxue: {
+			page: 0,
+			list: [],
+			loading: false,
+			state: 'more',
+			contentText: {
+				contentdown: '查看更多',
+				contentrefresh: '加载中',
+				contentnomore: '没有更多'
+			}
+
+		},
+		yingyu: {
+			page: 0,
+			list: [],
+			loading: false,
+			state: 'more',
+			contentText: {
+				contentdown: '查看更多',
+				contentrefresh: '加载中',
+				contentnomore: '没有更多'
+			}
+		},
+		wrongList: [],
+	})
+	subjectId.value = data.current+1;
+	function handleBack() {
+		uni.redirectTo({
+			url: '/pages/my/index'
+		})
+	}
+
+	function handleBackFromCuoti() {
+		wrongRef.value.closePopup();
+		uni.$emit('back-outpage')
+	}
+
+	function onChangeTab(e) {
+		if (data.current !== e.currentIndex) {
+			data.current = e.currentIndex;
+			subjectId.value = data.current+1;
+			if (data.current == 0) {
+				data.shuxue.page = 0
+			} else if (data.current == 1) {
+				data.yingyu.page = 0
+			}
+			refreshData(data.current);
+		}
+	}
+
+	function refreshData(code) {
+		const opt = {
+			page: 1,
+			size: 10, // 固定查询10条
+			subjectId: data.current + 1 // 前台索引加1为学科cardId
+		}
+
+		if (code == 0) {
+			data.shuxue.list = [];
+			// 数学
+			data.shuxue.state = 'loading';
+			data.shuxue.page++;
+			opt.page = data.shuxue.page;
+		} else if (code == 1) {
+			data.yingyu.list = [];
+			// 英语
+			data.yingyu.state = 'loading';
+			data.yingyu.page++;
+			opt.page = data.yingyu.page;
+		}
+		getWrongData(opt).then(res => {
+			if (code == 0) {
+				data.shuxue.list = data.shuxue.list.concat(res.data.data);
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				data.yingyu.list = data.yingyu.list.concat(res.data.data);
+				data.yingyu.loading = false;
+			}
+			if (code == 0) {
+				if (res.data.total > data.shuxue.list.length) {
+					// 数学
+					data.shuxue.state = 'more';
+					data.shuxue.loading = false;
+				} else {
+					// 数学
+					data.shuxue.state = 'no-more';
+					data.shuxue.loading = false;
+				
+				}
+			} else if (code == 1) {
+				if (res.data.total > data.yingyu.list.length) {
+					// 英语
+					data.yingyu.state = 'more';
+					data.yingyu.loading = false;
+				} else {
+					// 英语
+					data.yingyu.state = 'no-more';
+					data.yingyu.loading = false;
+				}
+			}
+		}).catch(err => {
+			if (code == 0) {
+				// 数学
+				data.shuxue.state = 'more';
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				// 英语
+				data.yingyu.state = 'more';
+				data.yingyu.loading = false;
+			}
+		})
+	}
+
+	function getMore(code) {
+		const opt = {
+			page: 1,
+			size: 10, // 固定查询10条
+			subjectId: data.current + 1 // 前台索引加1为学科cardId
+		}
+
+		if (code == 0) {
+			if (data.shuxue.state == 'no-more') return;
+			// 数学
+			data.shuxue.state = 'loading';
+			data.shuxue.page++;
+			opt.page = data.shuxue.page;
+		} else if (code == 1) {
+			// 英语
+			if (data.yingyu.state == 'no-more') return;
+			data.yingyu.state = 'loading';
+			data.yingyu.page++;
+			opt.page = data.yingyu.page;
+		}
+		getWrongData(opt).then(res => {
+			if (code == 0) {
+				data.shuxue.list = data.shuxue.list.concat(res.data.data);
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				data.yingyu.list = data.yingyu.list.concat(res.data.data);
+				data.yingyu.loading = false;
+			}
+			if (code == 0) {
+				if (res.data.total > data.shuxue.list.length) {
+					// 数学
+					data.shuxue.state = 'more';
+					data.shuxue.state_text = '加载更多';
+					data.shuxue.loading = false;
+				} else {
+					// 数学
+					data.shuxue.state = 'no-more';
+					data.shuxue.state_text = '没有更多啦';
+				
+					data.shuxue.loading = false;
+				}
+			} else if (code == 1) {
+				if (res.data.total > data.yingyu.list.length) {
+					// 英语
+					data.yingyu.state = 'more';
+					data.yingyu.state_text = '加载更多';
+					data.yingyu.loading = false;
+				} else {
+					// 英语
+					data.yingyu.state = 'no-more';
+					data.yingyu.state_text = '没有更多啦';
+			
+					data.yingyu.loading = false;
+				}
+			}
+		}).catch(err => {
+			if (code == 0) {
+				// 数学
+				data.shuxue.state = 'more';
+				data.shuxue.state_text = '加载更多';
+				data.shuxue.loading = false;
+			} else if (code == 1) {
+				// 英语
+				data.yingyu.state = 'more';
+				data.yingyu.state_text = '加载更多';
+				data.yingyu.loading = false;
+			}
+		})
+	}
+
+	function formatListToUse(list) {
+		list.forEach((item, index) => {
+			item.mta_show = false;
+			if (item.type == 3) {
+				item.result = JSON.parse(item.result);
+				item.placeholders = item.result.map((item, cindex) => `[bank${cindex+1}]`)
+				item.reply = item.reply ? JSON.parse(item.reply) : item.result.map(() => '');
+			}
+
+      if (item.type == 4) {
+        // 特殊题型英语题
+        const audioList = item.audios ? item.audios.split(',') : [];
+        item.placeholders = audioList.map((item, cindex) => `[yingyu${cindex+1}]`)
+        item.audioList = audioList;
+      }
+		})
+	}
+
+	function getCuotiData(item) {
+		getWrongInfo({
+			subjectId: data.current + 1,
+			cdate: item.cdate
+		}).then(res => {
+			formatListToUse(res.data)
+			data.wrongList = res.data;
+			wrongRef.value.showPopup();
+		})
+	}
+
+	function onRefresh() {
+		if (data.current == 0) {
+			data.shuxue.page = 0;
+			data.shuxue.list = [];
+			data.shuxue.loading = true;
+		} else if (data.current == 1) {
+			data.yingyu.page = 0;
+			data.yingyu.list = [];
+			data.yingyu.loading = true;
+		}
+		refreshData(data.current);
+	}
+
+	onLoad(() => {
+		getMore(data.current);
+	})
+</script>
+
+<style>
+
+</style>

+ 390 - 0
pages/my/yingyongshezhi.vue

@@ -0,0 +1,390 @@
+<template>
+	<view class="ezy-yysz-page">
+		<view class="icon-title-navBar-box">
+			<view @click="handleBack" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">应用设置</text>
+		</view>
+		<view class="ezy-tab-border">
+			<view class="yysz-row-box">
+				<view class="yysz-item img-item" @click="headClick">
+					<text>头像</text>
+					<icon class="yysz-img-box"
+						:style="{backgroundImage: 'url(' + myInfoData.icon + ')'}"></icon>
+				</view>
+				<view class="yysz-item" @click="nichengClick">
+					<text>昵称</text>
+					<text>{{myInfoData.nickName}}</text>
+				</view>
+			</view>	
+			<view class="yysz-row-box">
+				<view class="yysz-item" @click="telClick">
+					<text>手机号码</text>
+					<text>{{myInfoData.userName}}</text>
+				</view>
+			</view>
+			<view class="yysz-row-box">	
+				<view class="yysz-item" @click="aboutClick">
+					<text>关于我们</text>
+				</view>
+				<view v-if="loginFlag" class="yysz-item" @click="yinsizhengce">
+					<text>隐私政策</text>
+				</view>
+				<view class="yysz-item" @click="kefudianhua">
+					<text>客服与投诉</text>
+					<text>4001750778</text>
+				</view>
+				<!--<view v-if="loginFlag" class="yysz-item" @click="yonghuzhuxiao">
+					<icon class="list-icon zhuxiao-icon"></icon>
+					<text>用户注销</text>
+				</view>
+				 <view class="yysz-item" @click="exitLogin">
+					<icon class="list-icon login-out-icon"></icon>
+					<text>退出登录</text>
+				</view> -->
+		</view>
+		</view>
+		<CustomTabBar :levelId="levelId" :currentTabNumber="3" :typeId="typeId" :subjectId="subjectId"
+			:tipFlag="tipFlag">
+		</CustomTabBar>
+		<tip-small-dialog ref="exitDialogRef" @confirm-btn="exitBtn" :content="tipContent"></tip-small-dialog>
+		<tip-small-dialog ref="zhuxiaoDialogRef" @confirm-btn="zhuxiaoBtn" :content="zhuxiaoContent"></tip-small-dialog>
+		<duihuanmaDialog ref="duihuanmaDialogRef" @confirm-btn="duihuanmaBtn" title="兑换"></duihuanmaDialog>
+		<tel-dialog @telClose="telClose" @bindBtn="bindBtn" v-if="telDialogFlag"></tel-dialog>
+		<agree-content-dialog ref="agreeContentDialogRef" :agreeType="agreeType"></agree-content-dialog>
+		<tip-small-dialog ref="kefuDialogRef" :title="kefuTitle" @confirm-btn="kefuBtn" :content="kefuContent"
+			class="kefu-dialog"></tip-small-dialog>
+		<nichengDialog ref="nichengDialogRef" @confirm-btn="nichengBtn" title="修改昵称"></nichengDialog>
+	</view>
+</template>
+
+<script setup>
+	import agreeContentDialog from '@/pages/login/agreeContentDialog.vue';
+	import {
+		toast,
+		getUserIdentity
+	} from "@/utils/common";
+	import cacheManager from '@/utils/cacheManager.js';
+	import {
+		logout
+	} from '@/api/login.js'
+	import {
+		myInfo,
+		zhuxiao,
+		duihuanmaCode,
+		nichengUpdate,
+		myCardList,
+		commonCardList,
+		getFilePolicy,
+		updataHead
+	} from '@/api/my.js'
+	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
+	import {
+		onLoad
+	} from '@dcloudio/uni-app';
+	import {
+		reactive,
+		ref
+	} from "vue";
+	import tipSmallDialog from '@/components/dialog/tipSmallDialog.vue';
+	import duihuanmaDialog from '@/components/dialog/duihuanmaDialog.vue';
+	import nichengDialog from '@/components/dialog/nichengDialog.vue';
+	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
+	import tipBigDialog from '@/components/dialog/tipBigDialog.vue';
+	import telDialog from './telDialog.vue'
+	import {
+		onShow
+	} from '@dcloudio/uni-app';
+	const agreeType = ref(null);
+	const agreeContentDialogRef = ref(null);
+
+	const tipContent = '你确定要执行这个操作吗?';
+	const zhuxiaoContent = '你确定要执行这个操作吗?';
+	let loginFlag = ref(false);
+	let telDialogFlag = ref(false);
+	let myInfoData = reactive({
+		userImg: '',
+		userName: '',
+		credit: '',
+		vipFlag: '',
+		nickName: '',
+		icon: '',
+	});
+	let routerOpt = ref(false);
+	let appleCode = ref(null);
+	let currentPlatform = ref(null);
+	const exitDialogRef = ref(null);
+	const zhuxiaoDialogRef = ref(null);
+	const nichengDialogRef = ref(null);
+
+	const kefuDialogRef = ref(null);
+	const kefuTitle = '提示';
+	const kefuContent = '客服电话:4001750778';
+	const exitLogin = () => {
+		exitDialogRef.value.handleShow();
+	}
+
+	function handleBack() {
+		uni.redirectTo({
+			url: '/pages/my/index'
+		})
+	}
+
+	function headClick() {
+		chooseImage()
+	}
+
+	const checkAlbumPermission = async () => {
+		const status = await uni.getSetting()
+		if (!status.authSetting['scope.album']) {
+			await uni.authorize({
+				scope: 'scope.album'
+			})
+		}
+	}
+	const chooseImage = async () => {
+		try {
+		//	await checkAlbumPermission()
+			uni.chooseImage({
+				count: 1,
+				sizeType: ['compressed'],
+				sourceType: ['album'], // 仅限相册选择‌:ml-citation{ref="1" data="citationList"}
+				success: (res) => {
+
+					uploadFile(res.tempFilePaths[0])
+				},
+				fail: (err) => {
+					console.error('选择失败:', err)
+				}
+			})
+		} catch (err) {
+			uni.showModal({
+				title: '权限申请失败',
+				content: '请前往设置开启相册权限'
+			})
+		}
+	}
+
+	function updateIcon(data) {
+		updataHead({
+			icon: data
+		}).then(res => {
+			if (res.code == 0) {
+				uni.showToast({
+					title: '上传成功',
+					icon: 'success'
+				});
+			} else {
+				uni.showToast({
+					title: '上传失败',
+				});
+			}
+		})
+	}
+
+	function uploadFile(filePath) {
+		const suffix = filePath.split('.').pop();
+		let req = {
+			prefix: 'resource/',
+			suffix: suffix
+		}
+		getFilePolicy(req).then(res => {
+			if (res.code === 0) {
+				const policyData = res.data;
+				console.log('policyData', policyData);
+				uni.uploadFile({
+					url: policyData.uploadUrl,
+					filePath: filePath,
+					name: 'file',
+					formData: {
+						key: policyData.key,
+						policy: policyData.policy,
+						OSSAccessKeyId: policyData.accessid,
+						signature: policyData.signature,
+						success_action_status: '200'
+					},
+					header: {
+						'Content-Type': 'multipart/form-data'
+					},
+					success(uploadRes) {
+						console.log('uploadRes', uploadRes);
+						if (uploadRes.statusCode === 200) {
+							myInfoData.icon = `${policyData.downloadUrl}/${policyData.key}`;
+							updateIcon(myInfoData.icon)
+						} else {
+							uni.showToast({
+								title: '阿里云上传错误,请重试!',
+							});
+							return false
+						}
+					},
+					fail(err) {
+						console.log('err', err);
+					}
+				});
+
+
+			}
+		})
+
+	}
+
+	function nichengClick() {
+		nichengDialogRef.value.handleShow();
+	}
+	// 退出按钮
+	const exitBtn = () => {
+		if (loginFlag.value) {
+			logout().then(res => {
+				toast('退出登录成功')
+				cacheManager.clearAll();
+				uni.reLaunch({
+					url: '/pages/login/index'
+				});
+			}).catch(err => {
+				toast('退出登录失败,请稍后重试')
+			})
+		} else {
+			uni.reLaunch({
+				url: '/pages/login/index'
+			});
+		}
+
+	}
+	const zhuxiaoBtn = () => {
+		let req = {
+
+		}
+		zhuxiao().then(res => {
+			cacheManager.clearAll();
+			toast('用户注销成功')
+			uni.redirectTo({
+				url: '/pages/login/index'
+			});
+		}).catch(err => {
+			toast('失败,请稍后重试')
+		})
+	}
+
+	function yonghuzhuxiao() {
+		zhuxiaoDialogRef.value.handleShow();
+	}
+
+	function nichengBtn(data) {
+		console.log('data', data);
+		let req = {
+			nickName: data
+		}
+		nichengUpdate(req).then(res => {
+			if (res.code == 0) {
+				toast('修改成功')
+				myInfoData.nickName = data
+			} else {
+				toast('修改失败请重试或联系管理员')
+				return false
+			}
+		}).catch(err => {
+
+		})
+	}
+
+	function yinsizhengce() {
+		agreeType.value = 'ystk'
+		agreeContentDialogRef.value.handleShow();
+	}
+
+	function kefudianhua() {
+		kefuDialogRef.value.handleShow();
+	}
+
+	function kefuBtn() {
+		kefuDialogRef.value.handleClose();
+	}
+	// 手机号码
+	function telClick() {
+		if (loginFlag.value) {
+			telDialogFlag.value = true;
+		} else {
+			youkeDialogRef.value.handleShow();
+		}
+
+	}
+	// 手机号码绑定
+	function bindBtn() {
+		telDialogFlag.value = false;
+		myGetAuth()
+	}
+	// 关闭手机号码弹窗
+	function telClose() {
+		telDialogFlag.value = false;
+	}
+	// 关于我们
+	function aboutClick() {
+		if (loginFlag.value) {
+			uni.redirectTo({
+				url: '/pages/my/aboutPage'
+			});
+		} else {
+			uni.redirectTo({
+				url: `/pages/my/aboutPage?levelId=${routerOpt.levelId}&typeId=${routerOpt.typeId}&subjectId=${routerOpt.subjectId}&tipFlag=${routerOpt.tipFlag}`
+			});
+		}
+	}
+	// 获取用户数据
+	function getMyInfo() {
+		myInfo({}).then(res => {
+			myInfoData.userName = res.data.userName;
+			myInfoData.credit = res.data.credit;
+			myInfoData.nickName = res.data.nickName;
+
+			if (res.data.nickName) {
+				myInfoData.nickName = res.data.nickName;
+			} else {
+				myInfoData.nickName = '鹅状元';
+			}
+			if (res.data.icon) {
+				myInfoData.icon = res.data.icon;
+			} else {
+				getUserImg(res.data.growthType)
+			}
+
+		})
+	}
+
+	function getUserImg(data) {
+		switch (data) {
+			case 0:
+				myInfoData.icon = 'static/images/my/head-img0.png'
+				break;
+			case 1:
+				myInfoData.icon = 'static/images/my/head-img1.png'
+				break;
+			case 2:
+				myInfoData.icon = 'static/images/my/head-img2.png'
+				break;
+			case 3:
+				myInfoData.icon = 'static/images/my/head-img3.png'
+				break;
+			default:
+				myInfoData.icon = 'static/images/my/head-unlogin-img.png'
+				break;
+
+		}
+	}
+
+	function isIOSorAndroid() {
+		const systemInfo = uni.getSystemInfoSync();
+
+		console.log('systemInfo', systemInfo);
+
+		if (systemInfo.platform == 'ios') {
+			return currentPlatform.value = 'ios'
+		} else {
+			return currentPlatform.value = 'android'
+		}
+	}
+	onLoad((options) => {
+		isIOSorAndroid()
+		loginFlag.value = true;
+		getMyInfo();
+	})
+</script>

+ 5 - 5
pages/selectGradesTerms/index.vue

@@ -143,7 +143,7 @@
 					subjectId: subjectId,
 					zhangId: data.activeProduct == auth.levelId && data.activeXueke == auth.cardId ? auth.zhangId :
 						0,
-					currentZhang: 0		
+					currentZhang: 0
 				})
 				// 通知岛重新调用接口
 				cacheManager.remove('zhangInfo')
@@ -166,7 +166,7 @@
 						})
 						return;
 					}
-					
+
 					// 新岛
 					uni.redirectTo({
 						url: `/pages/study/index?levelId=${levelId}&typeId=${typeId}&subjectId=${subjectId}&tipFlag=${data.activeTipFlag}`
@@ -185,16 +185,16 @@
 		function handleBack() {
 			if (userCode !== 'Visitor') {
 				
-			
+
 				const auth = cacheManager.get('auth');
-				
+
 				if (!data.activeProduct && !auth.levelId) {
 					uni.showToast({
 						title:'请选择内容'
 					})
 					return;
 				}
-				
+
 				if (auth.subjectId == 2 && auth.typeId == 1) {
 					// 新版英语
 					uni.redirectTo({

+ 20 - 6
pages/study/index.vue

@@ -94,7 +94,7 @@
 	} from "@/utils/common";
 	import cacheManager from "@/utils/cacheManager.js";
 	import TipDialog from "../../components/dialog/tipDialog";
-	const tipContent = '是否前往开通付费?'; //当前产品	
+	const tipContent = '是否前往开通付费?'; //当前产品
 	const goPayDialogRef = ref(null);
 	const youkeDialogRef = ref(null);
 	const dSwiperRef = ref(null);
@@ -262,7 +262,6 @@
 					zhangId: infoData.zhangId
 				})
 			} else {
-				debugger
 				// 旧的数学 英语 新的数学
 				infoData.zhangId = cacheManager.get('zhangInfo').zhangList[e.detail.current].zhangId
 				cacheManager.updateObject('auth', {
@@ -399,7 +398,19 @@
 		})
 	}
 
-	//旧的岛 数学英语 和新的数学
+	function findZhangindex(data) {
+		console.log('data', data);
+		for (let zhangIndex = 0; zhangIndex < data.zhangList.length; zhangIndex++) {
+			const zhang = data.zhangList[zhangIndex];
+			for (let jieIndex = 0; jieIndex < zhang.jieList.length; jieIndex++) {
+				if (zhang.jieList[jieIndex].studyFlag == 0) {
+					return zhangIndex; // 返回所在zhang的索引
+				}
+			}
+		}
+		return -1; // 如果没有找到
+	}
+
 	function getZhangInfo(data) {
 		let req = {
 			levelId: localAuth.value.levelId
@@ -409,13 +420,16 @@
 			let zhang = cacheManager.get('zhangInfo').zhangList.findIndex(zhang => zhang.zhangId == localAuth
 				.value.zhangId);
 			console.log('zhang', zhang);
+
 			if (zhang != -1) {
 				cacheManager.updateObject('auth', {
 					currentZhang: zhang
 				})
 			} else {
+				const zhangIndex = findZhangindex(cacheManager.get('zhangInfo'))
+				console.log(zhangIndex);
 				cacheManager.updateObject('auth', {
-					currentZhang: 0
+					currentZhang: zhangIndex
 				})
 			}
 			nextTick(() => {
@@ -678,8 +692,8 @@
 
 		console.log('data', data); // 节内容
 		 console.log('data2', data2); //章内容
-		const authCode = getUserIdentity();
-		
+		const authCode = getUserIdentity();
+
 		if (currentProduct.value == 2 && typeId.value == 1) {
 		//	const isFirst = data.jieName == data2.jieList[0].jieName
 			if (!cacheManager.get('auth') && data.number !=1) {

二進制
static/images/common/cancel-btn.png


二進制
static/images/common/confirm-btn.png


二進制
static/images/my/list-icon1.png


二進制
static/images/my/list-icon10.png


二進制
static/images/my/list-icon2.png


二進制
static/images/my/list-icon3.png


二進制
static/images/my/list-icon4.png


二進制
static/images/my/list-icon5.png


二進制
static/images/my/list-icon6.png


二進制
static/images/my/list-icon7.png


二進制
static/images/my/list-icon8.png


二進制
static/images/my/list-icon9.png


二進制
static/images/my/list-jt.png


二進制
static/images/my/sz-icon1.png


二進制
static/images/my/sz-icon2.png


二進制
static/images/my/tk-dialog-bj.png


二進制
static/images/my/tk-dialog-qx.png


二進制
static/images/my/tk-dialog-sc.png


二進制
static/images/my/tk-list-item-a.png


二進制
static/images/my/tk-list-item.png


二進制
static/images/my/tk-qxzjc.png


二進制
static/images/my/tk-tab-item.png