wangxy vor 3 Monaten
Ursprung
Commit
9708bf8272
100 geänderte Dateien mit 14 neuen und 10759 gelöschten Zeilen
  1. 0 318
      common/styles/global/components.scss
  2. 0 1353
      common/styles/global/pages.scss
  3. 0 13
      common/styles/index.scss
  4. 0 179
      components/captcha4/index.vue
  5. 0 175
      components/catalogue/catalogue.vue
  6. 0 49
      components/catalogue/useCatalogue.js
  7. 0 208
      components/chengji/chengji.vue
  8. 0 203
      components/custom-scroll-list/custom-scroll-list.vue
  9. 0 139
      components/custom-tabbar/custom-tabbar.vue
  10. 0 34
      components/dialog/commonDialog.vue
  11. 0 52
      components/dialog/tipBigDialog.vue
  12. 0 53
      components/dialog/tipMiddleDialog.vue
  13. 0 52
      components/dialog/tipSmallDialog.vue
  14. 0 107
      components/mta-scroll-list/mta-scroll-list.vue
  15. 0 105
      components/points/uni-points.vue
  16. 0 79
      components/question/FillItem.vue
  17. 0 79
      components/question/danxuan.vue
  18. 0 51
      components/question/panduan.vue
  19. 0 141
      components/question/tiankong.vue
  20. 0 12
      components/question/useQuestionTools.js
  21. 0 90
      components/question/yingyu/danxuan.vue
  22. 0 187
      components/question/yingyu/danxuanCeshi.vue
  23. 0 89
      components/question/yingyu/mtaRadio.vue
  24. 0 240
      components/question/yingyu/textReplaceIcon.vue
  25. 0 181
      components/question/yingyu/useAudio.js
  26. 0 267
      components/questionJiexi/questionJiexi.vue
  27. 0 272
      components/questionJiexi/questionJiexiYingyu.vue
  28. 0 169
      components/scroll-list-card/scroll-list-card.vue
  29. 0 87
      components/wSwiper/DSwiper.vue
  30. 0 87
      components/wSwiper/wSwiper.vue
  31. 0 5
      main.js
  32. 5 3
      manifest.json
  33. 3 2
      package.json
  34. 6 114
      pages.json
  35. 0 40
      pages/game/components/constantConfig.js
  36. 0 19
      pages/game/components/food.vue
  37. 0 64
      pages/game/components/foodSelect.vue
  38. 0 62
      pages/game/components/goose.vue
  39. 0 151
      pages/game/components/useAudio.js
  40. 0 86
      pages/game/index.vue
  41. 0 87
      pages/game/useGame.js
  42. 0 444
      pages/login/agreeContentDialog.vue
  43. 0 38
      pages/login/agreeDialog.vue
  44. 0 242
      pages/login/index.vue
  45. 0 183
      pages/login/login.vue
  46. 0 238
      pages/login/telDialog.vue
  47. 0 69
      pages/my/aboutPage.vue
  48. 0 303
      pages/my/index.vue
  49. 0 240
      pages/my/telDialog.vue
  50. 0 447
      pages/pay/order.vue
  51. 0 91
      pages/pay/orderPay.vue
  52. 0 27
      pages/pay/paySuccess.vue
  53. 0 27
      pages/pay/paySuccessAll.vue
  54. 0 175
      pages/pay/svip.vue
  55. 0 35
      pages/selectGradesTerms/comingSoonDialog.vue
  56. 0 154
      pages/selectGradesTerms/index.vue
  57. 0 34
      pages/study/daoTipDialog.vue
  58. 0 29
      pages/study/eggDialog.vue
  59. 0 391
      pages/study/index.vue
  60. 0 509
      pages/study/lookShipin.vue
  61. 0 267
      pages/study/product/shuxue.vue
  62. 0 227
      pages/study/product/yingyu.vue
  63. 0 55
      pages/study/svipDialog.vue
  64. 0 55
      pages/test/test.vue
  65. 0 180
      pages/unitTest/index.vue
  66. 0 266
      pages/unitTest/useUnit.js
  67. 0 329
      pages/wrong/index.vue
  68. BIN
      static/images/catalog/catalog-close-btn.png
  69. BIN
      static/images/catalog/catalog-lock.png
  70. BIN
      static/images/catalog/catalog-shuxue-bj.png
  71. BIN
      static/images/catalog/catalog-yingyu-bj.png
  72. BIN
      static/images/catalog/jt-active-btn.png
  73. BIN
      static/images/catalog/jt-btn.png
  74. BIN
      static/images/catalog/num-active-bj.png
  75. BIN
      static/images/catalog/num-bj.png
  76. BIN
      static/images/common/close-icon.png
  77. BIN
      static/images/common/ezy-jf-icon.png
  78. BIN
      static/images/common/ezy-page-bj.png
  79. BIN
      static/images/common/jf-bj.png
  80. BIN
      static/images/common/navBar-return-btn.png
  81. BIN
      static/images/common/tip-big-bj.png
  82. BIN
      static/images/common/tip-cancel-btn.png
  83. BIN
      static/images/common/tip-confirm-btn.png
  84. BIN
      static/images/common/tip-middle-bj.png
  85. BIN
      static/images/common/tip-small-bj.png
  86. BIN
      static/images/course/course-yingyu-bj.png
  87. BIN
      static/images/course/couse-shuxue-bj.png
  88. BIN
      static/images/course/fh-btn.png
  89. BIN
      static/images/course/jx-btn.png
  90. BIN
      static/images/course/shuxue-icon.png
  91. BIN
      static/images/course/video-finish-bj.png
  92. BIN
      static/images/course/video-play-btn.png
  93. BIN
      static/images/course/video-play.png
  94. BIN
      static/images/course/video-score-bj.png
  95. BIN
      static/images/course/video-title-bj.png
  96. BIN
      static/images/course/yingyu-icon.png
  97. BIN
      static/images/exam/answer-btn.png
  98. BIN
      static/images/exam/answer-title.png
  99. BIN
      static/images/exam/ckst-btn.png
  100. BIN
      static/images/exam/cuoti-icon.png

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

@@ -1,318 +0,0 @@
-/******************** 这里放组件样式 ********************/
-	
-/***** view *****/
-view{box-sizing: border-box;}
-
-/***** 对齐方式 *****/
-.ezy-tl{text-align: left;}
-.ezy-tc{text-align: center;}
-.ezy-tr{text-align: right;}
-
-/***** 状态栏 *****/
-.ezy-status-bar{height: var(--status-bar-height);width: 100%;background-color: red;}
-
-/***** 超出省略 *****/
-// 文本超出省略号显示 (一行)
-@mixin single-line-ellipsis() {text-overflow: ellipsis;overflow: hidden;word-wrap: break-word;white-space: nowrap;word-break: break-all;}
-
-// 文本超出省略号显示 (多行)
-@mixin multi-line-ellipsis($rows: 3){-webkit-line-clamp:$rows;text-overflow: ellipsis;-o-text-overflow: ellipsis;overflow: hidden;word-wrap: break-word;display: -webkit-box;white-space: normal !important;-webkit-box-orient: vertical;}
-
-
-/***** 页面高度 *****/
-/*  #ifdef  H5  */
-//标题栏
-$titleBar-page: calc(100vh - var(--status-bar-height));
-//tabBar
-$titleBar-page: calc(100vh - var(--window-bottom));
-//标题栏 + tabBar
-$titleBar-tabBar-page: calc(100vh - var(--status-bar-height) - var(--window-bottom));
-/*  #endif  */
-
-/*  #ifdef  APP-PLUS  */
-//标题栏
-$titleBar-page: calc(100vh - var(--status-bar-height));
-//tabBar
-$titleBar-page: 100vh;
-//标题栏 + tabBar
-$titleBar-tabBar-page: calc(100vh - var(--status-bar-height));
-/*  #endif  */
-
-/***** 页面背景图 *****/
-//  no-repeat  cover
-@mixin ezy-no-repeat-cover($position: center) {
-  background-position: $position;background-size: cover;background-repeat: no-repeat;
-}
-//  no-repeat  contain
-@mixin ezy-no-repeat-contain($position: center) {
-  background-position: $position;background-size: contain;background-repeat: no-repeat;
-}
-
-/***** 富文本处理  *****/
-@mixin ezy-rich-text() {
-	div,p,span{margin: 0;padding: 0;}
-	img{max-width: 100%;}
-}
-
-// 全屏的popup弹窗
-.ezy-popup-width-all{
-	width: 100%;
-	.uni-popup__wrapper{width: 100%;}
-	}
-
-/***** tabbar  *****/
-.ezy-custom-tabbar{
-	width: 100%;height: 150rpx;position: fixed;left: var(-window-left);right: var(-window right);
-	bottom: var(--window-bottom);padding-bottom: env(safe-area-inset-bottom);box-sizing: border-box;z-index: 9;
-	.tabbar-item-box{display: flex;flex-wrap: nowrap;justify-content: space-evenly;
-	box-sizing: border-box;padding: 0 96rpx;
-	}	
-	.tabbar-item{width: 135rpx;height: 144rpx;@include ezy-no-repeat-cover;z-index: 2;}
-}
-.ezy-custom-tabbar::before{
-	content: '';width:100%;height: 100rpx;left: 0;right:0;bottom: 0;position: absolute;
-	background-image: url("@/static/images/tabbar/tabbar-bg.png");@include ezy-no-repeat-cover(top);
-}
-
-/***** 标题栏  *****/
-// 三个元素
-.ezy-navBar-box{
-	display: flex;align-items: center;justify-content: space-between;
-	padding: 0 20rpx 20rpx;box-sizing: border-box;position: relative;
-	.nav-bar-icon{
-		width: 24rpx;height: 38rpx;
-		background-image: url("@/static/images/common/navBar-return-btn.png");@include ezy-no-repeat-cover();
-	}
-	.nav-bar-title{font-size: 36rpx;color: #fff;}
-	// 考试数字
-	.nav-bar-other{
-		font-size: 30rpx;color: #fff;margin-right: 2%;
-		.key-note{color: #ffff01;}
-	}
-	// 文字按钮
-	.text-btn{font-size: 26rpx;color: #fff;padding-top: 4rpx;box-sizing: border-box;}
-}
-// 两个元素
-.icon-title-navBar-box{
-	display: flex;align-items: center;justify-content: center;
-	padding: 0 20rpx 20rpx;box-sizing: border-box;position: relative;
-	.nav-bar-title{
-		font-size: 36rpx;height: 63rpx;line-height: 63rpx;color: #fff;max-width: 70%;
-	}
-	.nav-bar-icon{
-		width: 24rpx;height: 38rpx;position: absolute;left: 24rpx;top: 12rpx;
-		background-image: url("@/static/images/common/navBar-return-btn.png");@include ezy-no-repeat-cover();
-	}
-}
-// 仅一个返回按钮
-.ezy-nav-bar-icon{width: 24rpx;height: 38rpx;position: absolute;left: 24rpx;top: var(--status-bar-height);
-		background-image: url("@/static/images/common/navBar-return-btn.png");@include ezy-no-repeat-cover();
-	}
-/***** 试题---题干 *****/
-.ezy-shiti-question{
-	margin: 24rpx 0 42rpx;font-size: 32rpx;color: #333;line-height: 1.6;padding: 0 10rpx;box-sizing: border-box;
-	text-align: justify;word-wrap: break-word;word-break: break-all;display: block;@include ezy-rich-text;
-}
-/***** 单选题 *****/
-.ezy-danxuan-box{
-	margin: 0 10rpx;
-	.danxuan-title{
-		width: 231rpx;height: 63rpx;
-		background-image: url("@/static/images/exam/danxuan-title.png");@include ezy-no-repeat-cover();
-	}
-	.danxuan-option-box{
-		width: 100%;line-height:96rpx;border-radius: 8px;margin-bottom: 20rpx;
-		font-size: 32rpx;color: #333;box-sizing: border-box;padding: 10rpx 24rpx;
-		display: flex;
-		.option-change{
-			width: 48rpx;height: 48rpx;line-height: 48rpx;box-sizing: border-box;
-			flex-shrink: 0;border-radius: 50%;border: 1rpx solid;margin-right: 16rpx;
-			    display: flex;align-items: center;justify-content: center;
-			}
-		.option-question{font-size: 32rpx;line-height: 1.6;margin-left: 6rpx;@include ezy-rich-text;
-		text-align: justify;word-wrap: break-word;word-break: break-all;display: block;}
-	}
-	.danxuan-option-box.active .option-change{color: #FFF;background-color:#0589e9;border-color:#0589e9;}
-	.danxuan-option-box.showError .option-change{color: #FFF;background-color:#ff5757;border-color:#ff5757;}
-	.danxuan-option-box.active_right .option-change{color: #FFF;background-color:#1ac136;border-color:#1ac136;}
-}
-/***** 判断题 *****/
-.ezy-panduan-box{
-	margin: 0 10rpx;
-	.panduan-title{
-		width: 231rpx;height: 63rpx;
-		background-image: url("@/static/images/exam/panduan-title.png");@include ezy-no-repeat-cover();
-	}
-	.danxuan-option-box{
-		width: 100%;line-height:96rpx;border-radius: 8px;margin-bottom: 20rpx;
-		font-size: 32rpx;color: #333;box-sizing: border-box;padding: 10rpx 24rpx;
-	}
-	.uni-radio-input{
-		width: 56rpx;height: 56rpx;border: 0;@include ezy-no-repeat-cover();
-		background-image: url("@/static/images/exam/option-bj.png");}
-	.option-question{display: flex;}
-	.option-question.active .uni-radio-input{
-		background-image: url("@/static/images/exam/option-active-img.png");
-		background-color: transparent!important;
-		svg{display: none;}
-	}
-	.option-question.showError .uni-radio-input{
-		background-image: url("@/static/images/exam/option-error-img.png");
-		background-color: transparent!important;
-		svg{display: none;}
-	}
-	.option-question.active_right .uni-radio-input{
-		background-image: url("@/static/images/exam/option-right-img.png");
-		background-color: transparent!important;
-		svg{display: none;}
-	}
-}
-/***** 填空题 *****/
-.ezy-tiankong-box{
-	.tiankongn-title{
-		width: 231rpx;height: 63rpx;
-		background-image: url("@/static/images/exam/tiankong-title.png");@include ezy-no-repeat-cover;
-	}
-	.tiankong-input {width: 50px;height: 32rpx;border: 1px solid #999;}
-	.tk-input-box{display: inline-block;position: relative;font-size: 0;margin: 0 4rpx;}
-	.tiankong-input{text-align: center;}
-	.tiankong-input.showError{color: #ff5757;}
-	.tiankong-input.active_right{color: green;}
-	.tk-input-box.showError::after{
-		content: '';width: 30rpx;height: 30rpx;display: block;position: absolute;top: -12rpx;right: -6rpx;
-		background-image: url("@/static/images/exam/option-error-img.png");@include ezy-no-repeat-cover;
-	}
-	.tk-input-box.active_right::after{
-		content: '';width: 30rpx;height: 30rpx;display: block;position: absolute;top: -12rpx;right: -6rpx;
-		background-image: url("@/static/images/exam/option-right-img.png");@include ezy-no-repeat-cover;
-	}
-	.ezy-shiti-question li{margin: 20rpx 0;}
-}
-/***** 英语题 *****/
-.ezy-yingyu-danxuan-box{
-	.yingyu-danxuan-title{
-		width: 231rpx;height: 63rpx;
-		background-image: url("@/static/images/exam/danxuan-title.png");@include ezy-no-repeat-cover();
-	}
-	.yingyu-danxuan-option-box{
-		width: 100%;line-height:96rpx;border-radius: 8px;margin-bottom: 20rpx;
-		font-size: 32rpx;color: #333;box-sizing: border-box;padding: 10rpx 24rpx;
-		display: flex;
-		.option-change{
-			width: 48rpx;height: 48rpx;line-height: 48rpx;box-sizing: border-box;
-			flex-shrink: 0;border-radius: 50%;border: 1rpx solid;margin-right: 16rpx;
-			    display: flex;align-items: center;justify-content: center;
-			}
-		.option-question{font-size: 32rpx;line-height: 1.6;margin-left: 6rpx;@include ezy-rich-text;
-		text-align: justify;word-wrap: break-word;word-break: break-all;display: block;}
-	}
-	.yingyu-danxuan-option-box.active .option-change{color: #FFF;background-color:#0589e9;border-color:#0589e9;}
-	.yingyu-danxuan-option-box.showError .option-change{color: #FFF;background-color:#ff5757;border-color:#ff5757;}
-	.yingyu-danxuan-option-box.active_right .option-change{color: #FFF;background-color:#1ac136;border-color:#1ac136;}
-}
-/***** 英语题播放按钮 *****/
-.yingyu-canplay-img,.yingyu-playing-img{
-	width: 48rpx;height: 48rpx;display: inline-block;margin: 0 24rpx 3rpx;
-	vertical-align: middle;@include ezy-no-repeat-cover();
-}
-.yingyu-canplay-img{background-image: url("@/static/images/exam/yingyu-canplay-img.png");}
-.yingyu-playing-img{background-image: url("@/static/images/exam/yingyu-playing-img.gif");}
-
-/***** 试题白色的框 *****/
-.shiti-frame-box{
-	flex: 1;width: 92%;height: auto;background-color: rgba(255, 255, 255, 0.6);border-radius: 10px;
-	margin: 12rpx auto 32rpx;position: relative;padding: 10% 0 6%;box-sizing: border-box;display: flex;flex-direction: column;
-}
-.shiti-frame-box::before{
-	content: "";display: block;background-color: rgba(255, 255, 255, 0.6);border-radius: 0 0 10rpx 10rpx;
-	position: absolute;top: 20rpx;left: 20rpx;right: 20rpx;bottom: 30rpx;z-index: 1;
-}
-	
-/***** 模拟标题栏 *****/
-.ezy-title-bar {
-	height: calc(44px + env(safe-area-inset-top));
-    position: fixed;top: var(--status-bar-height);left: var(--window-left);right: var(--window-right);
-    background-color: rgb(248, 248, 248);color: rgb(0, 0, 0);box-sizing: border-box;
-	display: flex;align-items: center;justify-content: center;overflow: hidden;z-index: 998;
-  }
-
-// 小的提示弹窗
-.ezy-tip-dialog{
-	.tip-content-box{@include ezy-no-repeat-cover;box-sizing: border-box;text-align:center;}
-	.tip-title{
-		color: #343434;font-size: 38rpx;margin-bottom: 24rpx;
-	}
-	.tip-content{
-		color: #666;font-size: 32rpx;padding-bottom: 42rpx;
-		border-bottom: 1px dashed #70cbf4;line-height: 1.6;
-	}
-	.tip-btn-box{
-		width: 100%;display: flex;justify-content: space-between;
-		.not-confirm-btn,.confirm-btn{
-			width: 208rpx;height: 83rpx;@include ezy-no-repeat-cover;margin: 30rpx 32rpx 0;
-		}
-		.not-confirm-btn{background-image: url("@/static/images/common/tip-cancel-btn.png");}
-		.confirm-btn{background-image: url("@/static/images/common/tip-confirm-btn.png");}
-	}
-}
-.tip-small-dialog{
-	.tip-content-box{
-		width: 625rpx;height: 365rpx;padding: 42rpx 48rpx;
-		background-image: url("@/static/images/common/tip-small-bj.png");
-	}
-}
-.tip-middle-dialog{
-	.tip-content-box{
-		width: 625rpx;height: 423rpx;padding: 42rpx 48rpx;
-		background-image: url("@/static/images/common/tip-middle-bj.png");
-	}
-}
-.tip-big-dialog{
-	.tip-content-box{
-		width: 625rpx;height: 519rpx;padding: 42rpx 48rpx;
-		background-image: url("@/static/images/common/tip-big-bj.png");
-	}
-	.tip-content{min-height: 240rpx;text-align: justify;}
-}
-
-/*积分框*/
-.ezy-jf-box{
-	width: 142rpx;height: 46rpx;display: flex;align-items: center;line-height: 1.2;font-size: 26rpx;
-	@include ezy-no-repeat-cover;background-image: url("@/static/images/common/jf-bj.png");margin-top: 20rpx;
-	.jf-icon{width: 35rpx;height: 35rpx;margin:0 4rpx 0 10rpx;flex-shrink: 0;
-	@include ezy-no-repeat-cover;background-image: url("@/static/images/my/jf-qb.png");}
-	.jf-text{min-width: 60rpx;text-align: center;color: #fff;}
-}
-	
-// tab页面
-.ezy-tab-border{
-	flex: 1;width: 92%;height: auto;background-color: rgba(255, 255, 255, 0.6);border-radius: 10px;
-	margin: 12rpx auto 32rpx;position: relative;box-sizing: border-box;display: flex;flex-direction: column;
-}
-.ezy-tab-box{
-		height: 82rpx!important;
-		background-color: rgba(255, 255, 255, 0.6);z-index: 3;margin: 20rpx 20rpx 0;
-		box-sizing: border-box;padding: 10rpx 12rpx;border-radius: 8rpx;
-		.segmented-control__text{color: #333!important;}
-		.segmented-control__item--button,.segmented-control__item--button--last{height: 62rpx;border: 0;border-width: 0!important;border-radius: 8rpx;}
-		.segmented-control__item--button--active .segmented-control__text{color: #fff!important;}
-	}
-	
-//视频
-.ezy-video-box{
-	width: 606rpx;height: 365rpx;@include ezy-no-repeat-cover;margin: 0 auto 42rpx;
-	background-image: url("@/static/images/exam/video-frame-bj.png");position: relative;
-	box-sizing: border-box;padding: 18rpx;
-	.ezy-video{
-		width: 100%;height: 100%!important;background-color: transparent;
-		.prism-big-play-btn{
-			width: 87rpx;height: 87rpx;@include ezy-no-repeat-cover;background-image: url("@/static/images/course/video-play-btn.png");
-			top: 52%;left: 50%!important;transform: translate(-50%, -50%);z-index: 20;
-			.outter{border: 0;}
-			}
-		.prism-info-display{display: none;}
-		.prism-time-display .time-bound,.prism-time-display .duration{color: #fff;}
-		// 播放按钮动画
-		.play-apply-animation{animation:unset;}
-	}
-}

+ 0 - 1353
common/styles/global/pages.scss

@@ -1,1353 +0,0 @@
-/***** 这里放页面样式 *****/
-// 登录页  padding-bottom: env(safe-area-inset-bottom); box-sizing: unset;
-.ezy-login-page {
-	width:100%;height:100vh; background-color: #80dfff;position: relative;
-	.ezy-login-wrap{width:100%;height: 1623.08rpx;background-image: url("@/static/images/login/login-bj.png");@include ezy-no-repeat-cover(top);}
-	.login-e-img{
-		width: 692rpx;height: 625rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/login/login-e-img.gif");
-		position: absolute;top: -180rpx;left: -180rpx;
-	}
-	.login-body-box{
-		display: flex;flex-direction: column;display: flex;box-sizing: border-box;
-		position: absolute;top:690rpx;left: 50%;transform: translateX(-50%);
-	}
-	.index-title-img{
-		width: 411rpx;height: 73rpx;@include ezy-no-repeat-cover;margin-right: auto;
-		background-image: url("@/static/images/login/login-tel.png");
-	}
-	.login-btn{width: 644rpx;height: 106rpx;margin-top: 84rpx;@include ezy-no-repeat-cover;}	
-	/***** 输入手机号页面*****/
-	.phone-input-box{
-		width: 644rpx;height: 144rpx;box-sizing: border-box;padding-bottom: 20rpx;
-		display: flex;align-items: center;margin-top: 50rpx;
-		background-image: url("@/static/images/login/login-tel-bj.png");@include ezy-no-repeat-cover;
-		.phone-prefix {
-		  width: 90rpx;margin-left:18rpx;font-size: 38rpx;color: #ffffffd9;
-		  font-weight: normal;display: flex;align-items: center;justify-content: space-between;flex-shrink: 0;
-		}
-		.phone-prefix::after{content: '';width: 1rpx;height: 40rpx;display: inline-block;background-color: #ffffffd9;}
-		.phone-input {font-size: 38rpx;padding: 0 22rpx;box-sizing: border-box;color: #fff;flex: 1;}
-		.uni-input-placeholder {font-size: 34rpx;color: #ffffffd9;
-		}
-		.close-btn{width: 42rpx;height: 42rpx;margin-right: 30rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/login/login-close-icon.png");flex-shrink: 0;}
-	}
-		 
-	.agreement-checkbox-box {
-		  display: flex;justify-content: center;margin-top: 10rpx;
-		  uni-checkbox-group{font-size: 0;}
-		  .agreement-checkbox-input{width: 40rpx;height: 40rpx;border: 0;margin-right: 4rpx;font-size: 0;}
-		  .uni-checkbox-input{
-			  width: 40rpx;height: 40rpx;border: 0;background-color: unset;@include ezy-no-repeat-cover;
-			  background-image: url("@/static/images/login/login-checked-bj.png");
-		  	svg {width: 28;height: 28rpx;top: 48%;left: 50%;}
-		  }
-		  .agreement-text-box {
-		  		color: #ffffffd9;font-size: 27rpx;
-		  		flex-direction: row;display: flex;align-items: center;
-		  	.agreement-text{color: #e3f524;display: contents;}
-		  }
-	}
-	
-	.tel-btn-disabled{background-image: url("@/static/images/login/login-zym-bj-disabled.png");}
-	.tel-btn-normal{background-image: url("@/static/images/login/login-zym-bj.png");}
-	.bottom-btn-box{
-		position: absolute;bottom:5%;left: 50%;transform: translateX(-50%);display: flex;
-		.wx-btn,.yk-btn{
-			width: 125rpx;height: 144rpx;@include ezy-no-repeat-cover;margin: 0 20rpx;
-		}
-		.wx-btn{background-image: url("@/static/images/login/login-wx-btn.png");}
-		.yk-btn{background-image: url("@/static/images/login/login-yk-btn.png");}
-	}
-	
-	/***** 输入验证码页面*****/
-	.login-title-img{
-		width: 317rpx;height: 77rpx;@include ezy-no-repeat-cover;margin-right: auto;
-		background-image: url("@/static/images/login/login-yzm.png");
-	}
-	.yzm-btn{margin-top: 42rpx;}
-	.yzm-show{font-size: 28rpx;color: #ffffffd9;margin: 24rpx 0 0 20rpx;}
-	.login-btn-disabled{background-image: url("@/static/images/login/login-btn-bj-disabled.png");}
-	.login-btn-normal{background-image: url("@/static/images/login/login-btn-bj.png");}
-	.cxfs-btn{font-size: 30rpx;color: #3257b9;display: inline-block;margin: 20rpx auto 60rpx;}
-	.cxfs-btn-disabled{color: #777;}
-	.login-text{font-size: 28rpx;color: #3257b9;margin: 16rpx 0 0 20rpx;}
-	
-	/* 针对小屏幕设备 */
-	@media (max-height: 800px) {
-		.login-body-box{top:660rpx;}
-		.bottom-btn-box{bottom:2%;}
-		.login-btn{margin-top: 64rpx;}
-		// 输入验证码页面
-		.yzm-btn{margin-top: 32rpx;}
-		.cxfs-btn{margin: 16rpx auto 30rpx;}
-	}
-	@media (max-height: 700px) {
-	   .login-body-box{top:640rpx;}
-	   .login-btn{margin-top: 46rpx;}
-	  .phone-input-box{margin-top: 24rpx;}
-	  
-	  // 输入验证码页面
-	  .yzm-btn{margin-top: 24rpx;}
-	  .cxfs-btn{margin: 12rpx auto 20rpx;}
-	}
-	@media (max-height: 600px) {
-		.bottom-btn-box{bottom:5%;}
-		.login-btn{margin-top: 36rpx;}
-		.ezy-login-wrap{height: 1360rpx;position: relative;}
-	}
-}
-
-// 用户协议弹窗
-.agree-sections-dialog{
-	width: 635rpx;height: 702rpx;padding: 360rpx 36rpx 42rpx;box-sizing: border-box;text-align: center;margin-bottom: 26%;
-	background-image: url("@/static/images/login/agree-dialog-bj.png");@include ezy-no-repeat-cover;
-	.agree-title{color:#666;font-size: 32rpx;font-weight: 600;}
-	.agree-tip{color:#777;font-size: 28rpx;margin-top: 30rpx;}
-	.confirm-btn{width: 538rpx;height: 85rpx;@include ezy-no-repeat-cover;margin: 46rpx auto 0;
-	background-image: url("@/static/images/login/agree-confirm-btn.png");}
-	.not-confirm-btn{color:#888;font-size: 32rpx;padding: 16rpx 0;display: inline-block;}
-	@media (max-height: 700px) {margin-bottom: 16%;}
-	@media (max-height: 600px) {margin-bottom: 0;}
-}
-// 用户协议详情弹窗
-.agree-content-dialog{
-	width: 100%;height: 100vh;overflow: auto;
-	.agree-content-box{
-		width: 684rpx;height: 1308rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/login/agree-content-bj.png");
-		padding: 120rpx 0 64rpx;box-sizing: border-box;margin-top: 36%;
-		position: relative;text-align: justify;
-		display: flex;flex-direction: column;
-	}
-	.agree-title{font-size: 42rpx;text-align: center;margin-bottom: 42rpx;flex-shrink: 0;}
-	.agree-close-btn{width: 62rpx;height: 62rpx;@include ezy-no-repeat-cover;
-	position: absolute;top: 64rpx;right: 44rpx;
-	background-image: url("@/static/images/common/close-icon.png");}
-	.agree-section-box{font-size: 30rpx;line-height: 1.8;overflow: auto;flex: 1;padding: 0 46rpx;word-break: break-all;}
-	@media (max-height: 800px) {
-		.agree-content-box{margin-top: 18%;}
-	}
-	@media (max-height: 700px) {
-		.agree-content-box{margin-top: var(--status-bar-height);}
-	}
-}
-
-// 滑块校验弹窗
-.slider-check-dialog{
-	background-color: rgba(255, 255, 255, 0.6);
-	position: fixed;display: flex;flex-direction: column;top: 0;left: 0;bottom:0;right: 0;
-	justify-content: center;align-items: center;
-	.slider-check-content{
-		width: 635rpx;height: 423rpx;padding: 42rpx 36rpx 42rpx;box-sizing: border-box;text-align: center;margin-bottom: 26%;
-		background-image: url("@/static/images/login/slider-dialog-bj.png");@include ezy-no-repeat-cover;position: relative;
-	}
-	.slider-close{width: 50rpx;height: 50rpx;@include ezy-no-repeat-cover;position: absolute;right: 30rpx;top: 30rpx;
-	background-image: url("@/static/images/common/close-icon.png");}
-	.slider-check-tip{color:#777;font-size: 32rpx;margin-top: 30rpx;font-weight: 800;}
-	.slider-check-btn{width: 208rpx;height: 85rpx;@include ezy-no-repeat-cover;margin: 32rpx auto 0;
-	background-image: url("@/static/images/login/slider-confirm.png");display: block;}
-	.nc-container{
-		position: unset;border-bottom: 1px dashed #70cbf4;padding: 36rpx 0 54rpx;box-sizing: border-box;
-		.nc_wrapper{width: 100%!important;}
-		.nc_iconfont.btn_ok{font-family: unset;font-size: 0;}
-		.nc_iconfont.btn_ok::before{content: '';width: 20px;height:20px;display: block;position: absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/login/slider-right-icon.png");z-index: 4;}
-		}
-	.slider-tip-red{color: red;}
-	@media (max-height: 700px) {
-		.slider-check-content{margin-bottom: 16%;}
-	}
-	@media (max-height: 600px) {
-		.slider-check-content{margin-bottom: 0;}
-	}
-}
-
-// 选择年级和学期
-.grades-terms-page{
-	width:100%;height:100vh;background-color: #43c1f6;box-sizing: border-box;padding-top:var(--status-bar-height);
-	background-image: url("@/static/images/grade/grades-terms-bj.png");@include ezy-no-repeat-cover(top);
-	// padding-top: 52%;
-	position: relative;min-height: 1212rpx;
-	.grades-body{
-		width: 752rpx;max-width: 100%;height: 1212rpx;display: flex;flex-direction: column;margin: 0 auto;
-		background-image: url("@/static/images/grade/grades-border.png");@include ezy-no-repeat-cover(top);
-		position: absolute;left: 50%;transform: translateX(-50%);top: 24%;
-	}
-	.grades-change-title{
-		width: 577rpx;height: 92rpx;margin: 10% auto 0;
-		background-image: url("@/static/images/grade/grades-title.png");@include ezy-no-repeat-cover;
-	}
-	.grades-title-desc{font-size: 28rpx;color: #777;text-align: center;margin-top: 10rpx;}
-	.grades-terms-title{width: 692rpx;height: 92rpx;margin: 3% auto 0;@include ezy-no-repeat-cover;}
-	.grades-title-img{background-image: url("@/static/images/grade/grade-title.png");}
-	.terms-title-img{background-image: url("@/static/images/grade/term-bj.png");}
-	.grade-item-box{display: flex;flex-wrap: wrap;justify-content: space-evenly;box-sizing: border-box;padding: 3% 4% 1%;}
-	.grade-item {
-		width: 277rpx;height: 87rpx;line-height: 82rpx;margin: 2% 0;
-		background-image: url("@/static/images/grade/grades-bj.png");@include ezy-no-repeat-cover;
-		text-align: center;font-size: 36rpx;color: #fff;font-weight: 800;
-	}
-	// -webkit-text-stroke: 1.6rpx #ac5300;text-stroke: 1.6rpx #ac5300; 
-	.grade-item.active{
-		color: #fff;background-image: url("@/static/images/grade/grades-a-bj.png");
-	}
-	.grade-line{width: 90%;height: 4rpx;border-top: 4rpx dashed #7cbeee;margin: 5% auto 4%;}
-	.grade-confirm-btn{
-		width: 644rpx;height: 108rpx;background-image: url("@/static/images/grade/confirm-btn.png");@include ezy-no-repeat-cover;
-	}
-	.grade-confirm-btn:after{display: none;}
-	/* 针对小屏幕设备 */
-	@media (max-height: 800px) {
-		min-height: 1300rpx;
-		.grades-body{zoom:0.9;bottom: 1%;top: unset;}
-	}
-	@media (max-height: 700px) {
-		min-height: 1200rpx;
-		.grades-body{zoom:0.8;}
-	}
-	@media (max-height: 480px) {
-		min-height: 1200rpx;
-		.grades-body{zoom:0.75;}
-	}
-	
-}
-
-
-// 蛋
-.study-egg-dialog{
-	.egg-content-box{display: flex;display: flex;flex-direction: column;align-items: center;}
-	.egg-img{width: 769rpx;height: 769rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/egg-img.gif");
-	}
-	.egg-btn{width: 644rpx;height: 106rpx;@include ezy-no-repeat-cover;background-image: url("@/static/images/study/egg-btn.png");}
-}
-	
-//地图页	
-.ezy-study-swiper{height: 100vh;overflow-y: auto;}
-.ezy-study-swiper1{
-	@media (max-height: 700px) {min-height: 1260rpx;}
-	@media (max-height: 600px) {min-height:1200rpx;}
-}
-.ezy-study-swiper2{
-	@media (max-height: 800px) {min-height:1400rpx;}
-	@media (max-height: 700px) {min-height:1300rpx;}
-}
-.ezy-study-page{
-	width:100%;height: 100vh;display: flex;flex-direction: column;
-	box-sizing: border-box;padding-top:var(--status-bar-height);justify-content: center;position: relative;
-	.ezy-study-wrap{@include ezy-no-repeat-cover;position: relative;margin: 0 auto;}
-	.study-school-year{
-		width: 285rpx;height: 69rpx;line-height:65rpx;background-image: url("@/static/images/study/school-year-bj.png");
-		color: #fff;@include ezy-no-repeat-cover;padding-left: 78rpx;font-size: 30rpx;font-weight: 600;
-		position: absolute;left: 20rpx;top:var(--status-bar-height);z-index: 2;
-	}
-	// animal
-	.animal-img{width:48rpx;height: 68rpx;@include ezy-no-repeat-cover;position: absolute;}
-	.dan-img{background-image: url("@/static/images/study/animal-img1.gif");}
-	.xiao-e-img{background-image: url("@/static/images/study/animal-img2.gif");}
-	.zhong-e-img{background-image: url("@/static/images/study/animal-img3.gif");}
-	.da-e-img{background-image: url("@/static/images/study/animal-img4.gif");}
-}
-
-// 数学
-.ezy-shuxue-study-page{
-	@include ezy-no-repeat-cover(top);background-color: #43c1f6;background-image: url("@/static/images/study/shuxue/study-shuxue-bj.png");
-	
-	.ezy-study-wrap{width:750rpx;height:1394rpx;background-image: url("@/static/images/study/shuxue/study-wrap-bj.png");}
-	.animal-img{left: 380rpx;top: 290rpx;}
-	.chapter-box{
-		width: 160rpx;text-align: center;font-weight: 800;color: #5c1a11;
-		font-size: 30rpx;position: absolute;top:125rpx;left:316rpx;
-	}
-	.chapter-title-box{
-		width: 330rpx;height: 80rpx;text-align: center;font-weight: 800;color: #fbb030;
-		position: absolute;top:176rpx;left:232rpx;white-space: pre-wrap;
-	}
-	.chapter-small-title-box{line-height: 2;font-size: 38rpx;}
-	.chapter-middle-title-box{line-height: 2.3;font-size: 34rpx;}
-	.chapter-big-title-box{line-height: 1.2;font-size: 32rpx;}
-	
-	// brand-content
-	.brand-content{margin: 0 auto;@include single-line-ellipsis;}
-	.brand-icon,.brand-lock,.brand-finish-icon{
-		width: 70rpx;height: 70rpx;@include ezy-no-repeat-cover;
-		position: absolute;top: -30rpx;left: 50%;transform: translateX(-50%);}
-	.brand-icon{
-		font-size: 36rpx;font-weight: 600;color: #ff6501;line-height: 70rpx;
-		background-image: url("@/static/images/study/shuxue/number-bj.png");
-		}
-	.brand-lock{background-image: url("@/static/images/study/lock-bj.png");display: flex;justify-content: center;}
-	.brand-lock::before{
-		content: '';width: 38rpx;height: 45rpx;display: block;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/study/lock-img.png");margin-top: 10rpx;
-	}
-	.brand-finish-icon{background-image: url("@/static/images/study/dao-finish-icon.png");}
-	.brand-arrow{
-		width: 58rpx;height: 58rpx;left: 50%;top: 64%;position: absolute;opacity: 0.8;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/brand-arrow.gif");
-		}
-	// brand-item
-	.brand-item{box-sizing: border-box;font-size: 24rpx;color: #fff;text-align: center;
-	font-weight: 600;position: relative;position: absolute;@include ezy-no-repeat-cover;}
-	.small-brand-item{width: 231rpx;height: 147rpx;padding: 40rpx 0 10rpx;
-		background-image: url("@/static/images/study/shuxue/duan-pai-disabled.png");
-		.brand-arrow{transform: translateX(-50%);}
-		.brand-content{width: 90%;}
-	}
-	.small-brand-item.brand-active{background-image: url("@/static/images/study/shuxue/duan-pai-active.png");}
-	.big-brand-item{
-		width: 307.69rpx;height: 141.35rpx;padding: 40rpx 0 10rpx;
-		background-image: url("@/static/images/study/shuxue/chang-pai-disabled.png");
-		.brand-arrow{transform: translateX(-46%);}
-		.brand-content{width: 94%;}
-	}
-	.big-brand-item.brand-active{background-image: url("@/static/images/study/shuxue/chang-pai-active.png");}
-	.ceshi-brand-item{
-			width: 185rpx;height: 121rpx;@include ezy-no-repeat-cover;
-			padding: 16rpx 10rpx 10rpx 10rpx;position: absolute;top:1112rpx;right:140rpx;
-			background-image: url("@/static/images/study/shuxue/ceshi-pai-disabled.png");
-		.brand-arrow{top: 50%;left: 35%;transform: unset;}
-		.brand-lock,.brand-icon,.brand-finish-icon{left: 0;top: -30rpx;}
-	}
-	.ceshi-brand-item.brand-active{background-image: url("@/static/images/study/shuxue/ceshi-pai-active.png");}
-	
-	// brand-item
-	.small-brand-item:nth-child(1){top:330rpx;right:70rpx;}
-	.small-brand-item:nth-child(2){top:540rpx;left:75rpx;}
-	.small-brand-item:nth-child(3){top:692rpx;right:110rpx;}
-	.small-brand-item:nth-child(4){top:1085rpx;right:165rpx}
-	.big-brand-item:nth-child(1){top:328rpx;right:40rpx;}
-	.big-brand-item:nth-child(2){top:540rpx;left:20rpx;}
-	.big-brand-item:nth-child(3){top:692rpx;right:80rpx;}
-	.big-brand-item:nth-child(4){top:1090rpx;right:130rpx;}
-	@media (max-height: 800px) {
-		// 0.92
-		.ezy-study-wrap{width: 690rpx;height: 1284rpx;}
-		.animal-img{left: 350rpx;top: 260rpx;}
-		.chapter-box{width: 148rpx;top:118rpx;left:292rpx;font-size: 28rpx;}
-		.chapter-title-box{width: 296rpx;height: 70rpx;top:163rpx;left:223rpx;font-size: 28rpx;}
-		.chapter-small-title-box{line-height: 1.8;font-size: 36rpx;}
-		.chapter-middle-title-box{line-height: 2.4;font-size: 30rpx;}
-		.chapter-big-title-box{line-height: 1.3;font-size: 28rpx;}
-		.small-brand-item:nth-child(1){top:290rpx;right:60rpx;}
-		.small-brand-item:nth-child(2){top:480rpx;left:75rpx;}
-		.small-brand-item:nth-child(3){top:630rpx;right:110rpx;}
-		.small-brand-item:nth-child(4){top:990rpx;right:140rpx}
-		.big-brand-item:nth-child(1){top:300rpx;right:24rpx;}
-		.big-brand-item:nth-child(2){top:490rpx;left:24rpx;}
-		.big-brand-item:nth-child(3){top:640rpx;right:80rpx;}
-		.big-brand-item:nth-child(4){top:1000rpx;right:110rpx;}
-		.ceshi-brand-item{top:1020rpx;right:140rpx;}
-	}
-	@media (max-height: 700px) {
-		min-height: 1260rpx;
-		//0.88
-		.ezy-study-wrap{width: 645rpx;height: 1198rpx;}
-		.animal-img{left: 280rpx;top: 240rpx;}
-		.chapter-box{top:110rpx;left:266rpx;}
-		.chapter-title-box{width: 286rpx;height: 66rpx;top:150rpx;left:200rpx;}
-		.chapter-middle-title-box{line-height: 2.2;}
-		.chapter-big-title-box{line-height: 1.2;}
-		.small-brand-item:nth-child(1){top:260rpx;right:50rpx;}
-		.small-brand-item:nth-child(2){top:445rpx;left:60rpx;}
-		.small-brand-item:nth-child(3){top:580rpx;right:100rpx;}
-		.small-brand-item:nth-child(4){top:920rpx;right:140rpx}
-		.big-brand-item:nth-child(1){top:270rpx;right:0;}
-		.big-brand-item:nth-child(2){top:450rpx;left:16rpx;}
-		.big-brand-item:nth-child(3){top:590rpx;right:70rpx;}
-		.big-brand-item:nth-child(4){top:925rpx;right:100rpx;}
-		.ceshi-brand-item{top:940rpx;right:130rpx;}
-	}
-	@media (max-height: 600px) {
-		//0.76
-		min-height:1200rpx;
-		.ezy-study-wrap{width: 577rpx;height: 1072rpx;}
-		.animal-img{left: 280rpx;top: 210rpx;}
-		.chapter-box{width: 120rpx;top:96rpx;left:245rpx;font-size: 26rpx;}
-		.chapter-title-box{width: 255rpx;height: 60rpx;top:136rpx;left:178rpx;}
-		.chapter-small-title-box{line-height: 1.6;font-size: 34rpx;}
-		.chapter-middle-title-box{line-height: 2;font-size: 28rpx;}
-		.chapter-big-title-box{line-height: 1.2;font-size: 26rpx;}
-		.small-brand-item:nth-child(1){top:220rpx;right:24rpx;}
-		.small-brand-item:nth-child(2){top:385rpx;left:42rpx;}
-		.small-brand-item:nth-child(3){top:500rpx;right:65rpx;}
-		.small-brand-item:nth-child(4){top:800rpx;right:100rpx}
-		.big-brand-item:nth-child(1){top:220rpx;right:0;}
-		.big-brand-item:nth-child(2){top:390rpx;left:0;}
-		.big-brand-item:nth-child(3){top:510rpx;right:30rpx;}
-		.big-brand-item:nth-child(4){top:810rpx;right:100rpx;}
-		.ceshi-brand-item{top:835rpx;right:130rpx;}
-	}
-}
-
-// 英语
-.ezy-yingyu-study-page{
-	background-color: #00aeee;@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/study/yingyu/study-yingyu-bj.png");
-	.ezy-study-wrap{
-		width:750rpx;height:1365rpx;position: absolute;top:calc(var(--status-bar-height) + -7%);
-		background-image: url("@/static/images/study/yingyu/study-wrap-bj.png");}
-	.animal-img{left: 280rpx;top: 420rpx;}
-	.chapter-title-box{
-		width: 120rpx;height: 60rpx;line-height: 60rpx;text-align: center;font-weight: 800;color: #66ffff;font-size: 28rpx;
-		position: absolute;top:175rpx;left:25rpx;box-sizing: content-box;padding: 10rpx 54rpx 175rpx 250rpx;
-	}
-	// brand-content
-	.brand-icon,.brand-content{text-align: center;@include single-line-ellipsis;font-size: 24rpx;}
-	.brand-icon{width: 170rpx;height: 34rpx;line-height: 34rpx;color: #180b34;margin: 3rpx auto 0;}
-	.brand-content{width: 246rpx;height: 38rpx;line-height: 38rpx;color: #fff;margin: 0 auto;}
-	.brand-lock,.brand-finish-icon{
-		width: 70rpx;height: 70rpx;@include ezy-no-repeat-cover;
-		position: absolute;transform: translateX(-50%);top: -125rpx;right: 58rpx;}
-	.brand-lock{background-image: url("@/static/images/study/lock-bj.png");display: flex;justify-content: center;}
-	.brand-lock::before{
-		content: '';width: 38rpx;height: 45rpx;display: block;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/study/lock-img.png");margin-top: 10rpx;
-	}
-	.brand-finish-icon{background-image: url("@/static/images/study/dao-finish-icon.png");}
-	.brand-arrow{
-		width: 58rpx;height: 58rpx;left: 38%;top: -58%;position: absolute;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/brand-arrow.gif");
-		}
-	// brand-item 
-	.brand-item{
-		width: 260rpx;height: 81rpx;position: absolute;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/study/yingyu/dao-item-disabled.png");
-		}
-	.brand-active{background-image: url("@/static/images/study/yingyu/dao-item-active.png");}
-	
-	.brand-item:nth-child(1){top:758rpx;right:46rpx;}
-	.brand-item:nth-child(2){top:920rpx;left:55rpx;}
-	.brand-item:nth-child(3){
-		top:1110rpx;right:78rpx;
-		.brand-lock,.brand-finish-icon{top: -135rpx;right: 60rpx;}
-		}
-	.brand-item:nth-child(4){top:1280rpx;left:52rpx;}
-	.brand-item.ceshi-brand-item{
-		width: 394rpx;height: 288rpx;top:1280rpx;
-		left: unset;right:-10rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/study/yingyu/test-item-disabled.png");
-		.brand-content{display: none;}
-		.brand-lock,.brand-finish-icon{top: 150rpx;right: 170rpx;}
-		.brand-arrow{left: 32%;top: 14%;}
-	}
-	.brand-item.ceshi-brand-item.brand-active{background-image: url("@/static/images/study/yingyu/test-item-active.png");}
-	
-	@media (max-height: 800px) {
-		// 0.9
-		min-height:1400rpx;
-		.animal-img{left: 260rpx;top: 390rpx;}
-		.chapter-title-box{width: 120rpx;height: 48rpx;line-height: 52rpx;top:162rpx;left:26rpx;padding: 10rpx 42rpx 170rpx 220rpx;}
-		.ezy-study-wrap{width: 687rpx;height: 1250rpx;left:50%;top:calc(var(--status-bar-height) + -4%);transform: translateX(-50%);}
-		.brand-lock,.brand-finish-icon{top: -120rpx;right: 60rpx;}
-		.brand-item:nth-child(1){top:685rpx;right:30rpx;}
-		.brand-item:nth-child(2){top:830rpx;left:42rpx;}
-		.brand-item:nth-child(3){
-			top:1000rpx;right:60rpx;
-			.brand-lock,.brand-finish-icon{top: -122rpx;right: 62rpx;}
-			}
-		.brand-item:nth-child(4){top:1180rpx;left:42rpx;}
-		.brand-item.ceshi-brand-item{
-			width: 337rpx;height: 246rpx;top:1140rpx;left: unset;right:-40rpx;
-			.brand-lock,.brand-finish-icon{top: 125rpx;right: 130rpx;}
-		}
-	}
-	@media (max-height: 750px) {
-		.ezy-study-wrap{top:calc(var(--status-bar-height) + -7%);}
-		.brand-item.ceshi-brand-item{top:1110rpx;}
-	}
-	@media (max-height: 700px) {
-		min-height:1300rpx;
-		.animal-img{left: 240rpx;top: 340rpx;}
-		.chapter-title-box{width: 100rpx;height: 40rpx;line-height: 40rpx;top:145rpx;left:22rpx;font-size: 24rpx;padding: 10rpx 24rpx 170rpx 196rpx;}
-		.ezy-study-wrap{width: 600rpx;height: 1092rpx;top:calc(var(--status-bar-height) + -7%);}
-		.brand-lock,.brand-finish-icon{top: -120rpx;right: 60rpx;}
-		.brand-item:nth-child(1){top:610rpx;right:10rpx;}
-		.brand-item:nth-child(2){top:730rpx;left:22rpx;}
-		.brand-item:nth-child(3){
-			top:885rpx;right:38rpx;
-			.brand-lock,.brand-finish-icon{top: -128rpx;right: 62rpx;}
-			}
-		.brand-item:nth-child(4){top:1040rpx;left:20rpx;}
-		.brand-item.ceshi-brand-item{
-			width: 315rpx;height: 231rpx;top:1020rpx;left: unset;right:-40rpx;
-			.brand-lock,.brand-finish-icon{top: 125rpx;right: 130rpx;}
-		}
-	}
-	@media (max-height: 650px){
-		.ezy-study-wrap{top:calc(var(--status-bar-height) + -7%);}
-		.brand-item.ceshi-brand-item{width: 296rpx;height: 216rpx;left: unset;top:1000rpx;}
-	}
-	@media (max-height: 600px){
-		.chapter-title-box{padding: 10rpx 44rpx 150rpx 195rpx;}
-		.brand-item.ceshi-brand-item{left: unset;top:1020rpx;}
-	}
-}
-
-// 岛弹窗
-.dao-popup-box{
-	width: 100%;height: 865rpx;
-	@include ezy-no-repeat-cover;
-	background-image: url("@/static/images/study/dao-box-bj.png");
-	box-sizing: border-box;padding: 64rpx 36rpx 0;
-	.dao-popup-img{width: 481rpx;height: 615rpx;@include ezy-no-repeat-cover;margin: 0 auto;}
-	.dao-popup-btn{
-		width: 644rpx;height: 106rpx;@include ezy-no-repeat-cover;margin-top: 32rpx;
-		background-image: url("@/static/images/study/dao-box-btn.png");
-	}
-}
-
-//目录页
-.ezy-catalogue-dialog{
-	width: 663rpx;height: 1038rpx;padding: 180rpx 52rpx 60rpx;box-sizing: border-box;position: relative;
-	@include ezy-no-repeat-cover;display: flex;position: relative;
-	.uni-scroll-view{position: unset;}
-	.catalogue-close-btn{
-		width: 54rpx;height: 54rpx;
-		background-image: url("@/static/images/catalog/catalog-close-btn.png");@include ezy-no-repeat-cover;
-		position: absolute;top: 40rpx;right: 36rpx;
-	}
-	.ezy-catalogue-collapse{
-		background-color: transparent!important;flex: 1;overflow-y: auto;
-		.collapse-item-box{
-			padding: 24rpx 0 24rpx!important;border-bottom: 2rpx dashed #9dc0f6;
-			.uni-collapse-item__wrap{background-color: transparent!important;}
-			.collapse-title{display: flex;font-size: 28rpx;font-weight: 700;color: #0a549d;position: relative;}
-			.collapse-num-box{
-				width: 46rpx;height: 46rpx;line-height: 46rpx;font-size: 30rpx;font-weight: 700;color: #fff;text-align: center;
-				background-image: url("@/static/images/catalog/num-bj.png");@include ezy-no-repeat-cover;
-				-webkit-text-stroke: 1rpx #0d64d7;text-stroke: 1rpx #0d64d7;margin-right: 12rpx;flex-shrink: 0;
-			}
-			.collapse-name{@include single-line-ellipsis;width: 400rpx;line-height: 1.6;}
-			.uni-collapse-item__title-arrow{margin-right: 60rpx;transform: unset;}
-			.uni-icons{
-				width: 37rpx;height: 37rpx;
-				background-image: url("@/static/images/catalog/jt-btn.png");@include ezy-no-repeat-cover;
-				&::before{display: none;}
-			}
-			.collapse-lock{
-				width: 35rpx;height: 41rpx;position: absolute;right: -90rpx;top: 0rpx;
-				background-image: url("@/static/images/catalog/catalog-lock.png");@include ezy-no-repeat-cover;
-			}
-		}
-		.collapse-item-box.collapse-active{
-			border: 0;
-			.collapse-title{color: #01b106;}
-			.collapse-num-box{
-				background-image: url("@/static/images/catalog/num-active-bj.png");
-				-webkit-text-stroke: 1rpx #009931;text-stroke: 1rpx #009931;
-			}
-			.uni-icons{
-				background-image: url("@/static/images/catalog/jt-active-btn.png");transform:unset;
-			}
-		}
-		.collapse-content-box{border-top: 2rpx dashed #9dc0f6;margin: 20rpx 0 100rpx;}
-		.collapse-content-item{
-			font-size: 28rpx;color:#343434;
-			border-bottom: 1px dashed #999;
-			padding: 20rpx 10rpx;margin: 0 10rpx;
-			}
-		// .collapse-item-box:last-child{border: 0;}
-	}
-	.ezy-catalogue-collapse-vip .collapse-item-box .uni-collapse-item__title-arrow{margin-right: 10rpx;}
-}
-
-// 考试页
-.ezy-exam-page{
-	width: 100%;height: 100vh;background-color: #0ab2f0;position: relative;
-	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
-	@include ezy-no-repeat-cover(top);
-	.ezy-exam-swiper{
-		width: 615rpx;flex: 1;z-index: 2;margin: 0 auto;
-		uni-swiper-item{overflow: auto;}
-	}
-	.exam-submit-btn{
-		width: 87rpx;height: 125rpx;@include ezy-no-repeat-cover;z-index: 2;
-		background-image: url("@/static/images/exam/submit-btn.png");margin: 10rpx 42rpx 0 auto;
-	}
-	.tip-mask-box{
-		width: 100%;height: 100vh;position: relative;position: absolute;top: 0;left: 0;z-index: 3;
-	}
-	.exam-tip-box{
-		width: 750rpx;height: 355.77rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/exam/exam-tip-bj.png");
-		color: #036f6f;font-size: 32rpx;z-index: 3;padding: 180rpx 0 0 100rpx;
-		position: absolute;left: 0;right: 0;bottom: var(--window-bottom);
-	}
-}
-
-// 成绩页
-.ezy-result-page{
-	width: 100%;height: 100vh;background-color: #0ab2f0;position: relative;
-	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
-	@include ezy-no-repeat-cover(top);
-	.result-exam-swiper{
-		width: 615rpx;flex: 1;z-index: 2;margin: 0 auto;
-		uni-swiper-item{overflow: auto;}
-		.flex-center{
-			height: 100%;
-			.body{height: 100%;display: flex;flex-direction: column;}
-			// 试题部分滚动  解析部分固定
-			// .ezy-danxuan-box{flex: 1;overflow-y: auto;}
-		}
-	}
-	.answer-content-box{
-		margin-top: 24rpx;
-		.answer-dtjx-row{display: flex;justify-content: space-between;}
-		.answer-title{width: 150rpx;height: 62rpx;flex-shrink: 0;margin-left: 10rpx;
-		background-image: url("@/static/images/exam/answer-title.png");@include ezy-no-repeat-cover;
-		}
-		.tiankong-answer-content-box{background-color: rgba(255, 255, 255, 0.7);font-size: 32rpx;color: #15ab2e;
-		border-radius: 4px;box-sizing: border-box;padding: 16rpx;margin: 20rpx 0 20rpx 10rpx;min-height: 80rpx;}
-		.tiankong-answer-row{word-break: break-all;margin-bottom: 10rpx;}
-		.tiankong-answer-row:last-child{margin-bottom: 0;}
-		.answer-btn-box{display: flex;height: 135rpx;margin: 20rpx 0 20rpx 10rpx;}
-		.answer-item-left,.answer-item-right{
-			width: 100%;flex: 1;align-items: center;justify-content: center;
-			display: flex;flex-direction: column;background-color: rgba(255, 255, 255, 0.7);
-			.answer-item-title{font-size: 32rpx;color: #333;margin-bottom: 4rpx;}
-			.answer-item-error{font-size: 32rpx;color: #ef1417;min-height: 36rpx;}
-			.answer-item-correct{font-size: 32rpx;color: #15ab2e;min-height: 36rpx;}
-		}
-		.answer-item-left{border-radius: 4px 0  4px 0;position: relative;}
-		.answer-item-right{border-radius: 0 4px  4px 0;}
-		.answer-line{width: 1px;position: absolute;top: 16rpx;right: 0;bottom: 16rpx;background: #d1e9f5;}
-		.answer-btn{width: 227rpx;height:72rpx;@include ezy-no-repeat-cover;margin-right: 20rpx;
-		background-image:url("@/static/images/exam/answer-btn.png");flex-shrink: 0;
-		}
-	}
-}
-
-// 得分页
-.exam-score-dialog{
-	width: 750rpx;height: 962rpx;margin-bottom: 30%;position: relative;
-	@include ezy-no-repeat-cover;
-	.score-content-box{
-		position: absolute;top: 565rpx;left: 200rpx;word-spacing: 18rpx;
-		font-size: 38rpx;font-weight: 800; color: #000;@include ezy-no-repeat-cover;
-		icon{width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;margin: 0 6rpx;}
-		.right-error-row{display: flex;align-items: center;}
-		.right-icon{background-image: url("@/static/images/exam/score-right-icon.png");}
-		.error-icon{background-image: url("@/static/images/exam/score-error-icon.png");margin-left:56rpx;}
-		.text-red{color: #ff6500;margin: 0 8rpx;}
-		.text-score{
-			width: 160rpx;font-weight: 800;font-size: 80rpx;color: #ff6701;
-			-webkit-text-stroke: 0.6rpx #fff;text-stroke: 0.6rpx #fff;
-			text-align: center; animation: fadeIn 3s linear forwards;}
-		@keyframes fadeIn {
-			 0% { opacity: 0;}
-			 60% { opacity: 0;}
-			 100% { opacity: 1;} 
-		 /* from { opacity: 0;}
-		  to {opacity: 1;} */
-		}
-	}
-	.ckst-btn,.jxxx-btn{width: 115rpx;height: 135rpx;@include ezy-no-repeat-cover;margin: 0 36rpx;}
-	.score-btn-box{position: absolute;bottom: 0;display: flex;left: 50%;transform: translateX(-50%);}
-	.ckst-btn{background-image: url("@/static/images/exam/ckst-btn.png");}
-	.jxxx-btn{background-image: url("@/static/images/exam/jxxx-btn.png");}
-}
-// 高兴鹅
-.score-happy-study-dialog{
-	background-image: url("@/static/images/exam/score-right-bj.gif");
-	.score-btn-box{bottom: -80rpx;}
-	.text-score{margin: 120rpx 0 0 160rpx;}
-}
-// 沮丧鹅
-.score-unhappy-study-dialog{
-	background-image: url("@/static/images/exam/score-error-bj.gif");
-	.score-btn-box{bottom: -60rpx;}
-	.text-score{margin: 108rpx 0 0 160rpx;}
-}
-// 完成-高兴鹅
-.score-finish-happy-study-dialog{
-	background-image: url("@/static/images/exam/score-right-finish-bj.gif");
-	.score-btn-box{bottom: 120rpx;}
-}
-// 完成-沮丧鹅
-.score-finish-unhappy-study-dialog{
-	background-image: url("@/static/images/exam/score-error-finish-bj.gif");
-	.score-btn-box{bottom: 120rpx;}
-}
-
-// 答案解析
-.ezy-dajx-page{
-	width: 100%;height: 100vh;background-color: #0ab2f0;position: relative;
-	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
-	@include ezy-no-repeat-cover(top);
-	.shiti-frame-box{overflow-y: auto;}
-	.dajx-content-box{
-		width: 615rpx;flex: 1;z-index: 2;margin: 0 auto;overflow-y: auto;
-		.slfx-title,.spjj-title{
-			width: 231rpx;height: 63rpx;@include ezy-no-repeat-cover;margin-bottom: 16rpx;
-		}
-		.slfx-title{background-image: url("@/static/images/exam/slfx-title.png");}
-		.spjj-title{background-image: url("@/static/images/exam/spjj-title.png");}
-		.slfx-content{
-			font-size: 32rpx;color: #333;line-height: 1.6;margin-bottom: 42rpx;
-			box-sizing: border-box;padding: 0 20rpx;word-wrap: break-word;word-break: break-all;
-			display: block;@include ezy-rich-text;
-		}
-		
-	}
-}
-
-// 课程页面
-.ezy-course-page{
-	width: 100%;height: 100vh;background-color: #0ab2f0;position: relative;
-	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
-	@include ezy-no-repeat-cover(top);
-	.course-video-box{width: 730rpx;height: 440rpx;padding: 32rpx 32rpx;margin: 0 auto 6rpx;}
-
-	.course-content-border{
-		display: flex;flex: 1;position: relative;margin: 0 22rpx;border-radius: 10rpx 10rpx 0 0;
-		background-color: rgba(255, 255, 255, 0.3);overflow-y: auto;
-	}
-	.course-content-box{
-		flex: 1;margin: 20rpx 20rpx 0;background-color: rgba(255, 255, 255, 0.5);;overflow-y: auto;
-		box-sizing: border-box;padding: 42rpx 24rpx;
-	}
-	.course-content-item{
-		width: 100%;background-color: rgba(255, 255, 255, 0.8);border-radius: 8rpx;color: #666;display: block;
-		box-sizing: border-box;padding: 20rpx;margin-bottom: 30rpx;font-size: 32rpx;@include ezy-rich-text;
-	}
-	.title-play-box{
-		width: 100%;height: 85rpx;border-radius: 8rpx;box-sizing: border-box;padding: 0 10rpx;
-		display: flex;justify-content: space-between;align-items: center;margin:0 0 12rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/course/video-title-bj.png");
-		}
-		.course-icon{
-			width: 60rpx;height: 75rpx;@include ezy-no-repeat-cover;
-		}
-	.course-title{color: #fff;font-size: 36rpx;margin-right: auto;margin-left: 10rpx;}
-	.course-play-btn{
-		width: 162rpx;height: 54rpx;line-height: 50rpx;
-		box-sizing: border-box;font-size: 24rpx;padding-left: 40rpx;
-		flex-shrink: 0;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/course/video-play.png");}
-}	
-
-// 课程得分页面
-.course-score-dialog{
-	width: 750rpx;height: 1250rpx;@include ezy-no-repeat-cover;
-	background-image: url("@/static/images/course/video-score-bj.png");
-	margin-bottom: 20%;position: relative;
-	.text-score{
-			width: 220rpx;font-size: 100rpx;font-weight: 800;color: #ff6701;
-			-webkit-text-stroke: 0.6rpx #fff;text-stroke: 0.6rpx #fff;
-			margin: 110rpx 0 0 160rpx;text-align: right;position: absolute;
-			bottom: 230rpx;left: 0;
-	}
-	.return-btn,.continue-btn{width: 115.38rpx;height: 135rpx;@include ezy-no-repeat-cover;margin: 0 36rpx;}
-	.course-btn-box{position: absolute;bottom: 0;display: flex;left: 50%;transform: translateX(-50%);}
-	.return-btn{background-image: url("@/static/images/course/fh-btn.png");}
-	.continue-btn{background-image: url("@/static/images/course/jx-btn.png");}
-	@media (max-height: 600px) {margin-bottom: 40%;}
-}
-
-// 课程完成
-.course-finish-dialog{
-	width: 750rpx;height: 1250rpx;@include ezy-no-repeat-cover;
-	background-image: url("@/static/images/course/video-finish-bj.png");
-	margin-bottom: 20%;position: relative;
-	.text-score{display: none;}
-	.return-btn,.continue-btn{width: 115.38rpx;height: 135rpx;@include ezy-no-repeat-cover;margin: 0 36rpx;}
-	.course-btn-box{position: absolute;bottom: 200rpx;display: flex;left: 50%;transform: translateX(-50%);}
-	.return-btn{background-image: url("@/static/images/course/fh-btn.png");}
-	.continue-btn{background-image: url("@/static/images/course/jx-btn.png");}
-	@media (max-height: 600px) {margin-bottom: 40%;}
-}
-	
-// 我的页面
-.ezy-my-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/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-content-box{font-size: 30rpx;}
-	}
-	
-	// hyqy
-	.my-hyqy-swiper{
-		height: 385rpx;
-		.uni-swiper-dots-horizontal{bottom: 24rpx;}
-	}
-	.hyqy-box{
-		width: 731rpx;height: 385rpx;margin: 0 auto;position: relative;
-		@include ezy-no-repeat-cover;
-		.hyqy-btn{width: 154rpx;height: 54rpx;position: absolute;top: 46rpx;right: 46rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/my/hyqy-btn.png");}
-	}
-	// 1数学 2英语
-	.hyqy-box1{background-image: url("@/static/images/my/hyqy-img1.png");}
-	.hyqy-disabled-box1{background-image: url("@/static/images/my/hyqy-img-disabled1.png");}
-	.hyqy-box2{background-image: url("@/static/images/my/hyqy-img2.png");}
-	.hyqy-disabled-box2{background-image: url("@/static/images/my/hyqy-img-disabled2.png");}
-	
-	// list
-	.my-list-box{
-		width:700rpx;margin: 36rpx auto 0;
-		.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");}
-	}
-	@media (max-height: 700px) {
-		.my-head-box{padding: 60rpx 24rpx 32rpx;}
-		.my-list-box{
-			margin: 16rpx auto 0;
-			.list-row{padding: 24rpx 20rpx;}
-		}
-	}
-	@media (max-height: 600px) {
-		min-height: 1200rpx;overflow-y: auto;
-		.my-head-box{padding: 42rpx 24rpx 24rpx;}
-		.my-list-box{
-			margin: 12rpx auto 0;
-			.list-row{padding: 16rpx;font-size: 30rpx;}
-			.list-row::after{right: 16rpx;}
-		}
-	}
-}
-.ezy-my-page::before{
-	content: '';width: 279rpx;height: 250rpx;display:block;
-	position: absolute;top:calc(20rpx - var(--status-bar-height));right:20rpx;
-	@include ezy-no-repeat-cover;background-image: url("@/static/images/my/my-page-img.png");
-}
-
-// 错题
-.ezy-cuoti-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;}
-	
-	.cuoti-content-box{flex: 1;background-color: rgba(255, 255, 255, 0.6);z-index: 3;margin: 10rpx 20rpx;}
-	.cuoti-scroll-view{overflow-y: auto;height: calc(100vh - 380rpx - var(--status-bar-height));}
-	
-	// item
-	.list-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:36rpx 0;overflow: unset;}
-		.item-date-row{
-			display: flex;align-items: center;color:#28bdf2;margin-bottom: 16rpx;
-			.data-icon{
-				width: 35rpx;height: 35rpx;margin: 10rpx;font-size: 28rpx;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/exam/cuoti-time-icon.png");}
-		}
-		.item-cuoti-row{
-			display: flex;flex-direction: row;color:#444;
-			.icon-num-box{display: flex;}
-			.cuoti-content{display: flex;align-items: center;}
-			.cuoti-icon{
-				width: 35rpx;height: 35rpx;margin: 10rpx;font-size: 28rpx;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/exam/cuoti-icon.png");
-			}
-			.cuoti-text{color: #ff0101;margin-right: 6rpx;}
-		}
-		.cuoti-btn{
-			width: 160rpx;height: 40rpx;line-height: 38rpx;box-sizing: border-box;padding-left: 24rpx;
-			background-color: #068aea;font-size: 24rpx;color: #fff;border-radius: 20rpx 0 0 20rpx;
-			position: absolute;right: -3%;top: 114rpx;
-		}
-		.cuoti-btn::after{
-			content: '';width: 14rpx;height: 24rpx;display: block;position: absolute;top: 8rpx;right: 16rpx;
-			@include ezy-no-repeat-cover;background-image: url("@/static/images/my/list-jt.png");
-		}
-	}
-	
-}
-
-// 关于我们
-.ezy-about-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");
-	.about-body-border{
-		flex: 1;width: 92%;height: auto;background-color: rgba(255, 255, 255, 0.6);border-radius: 10px;
-		margin: 12rpx auto 200rpx;position: relative;display: flex;flex-direction: column;
-	}
-	.about-body-box{
-		content: "";display: block;background-color: rgba(255, 255, 255, 0.6);border-radius: 0 0 10rpx 10rpx;
-		position: absolute;top: 20rpx;left: 20rpx;right: 20rpx;bottom: 30rpx;z-index: 1;
-		box-sizing: border-box;padding: 52rpx 24rpx 24rpx;overflow-y: auto;
-	}
-	.content-top-box{
-		display: flex;flex-shrink: 0;font-size: 24rpx;color: #333;
-		box-sizing: border-box;padding-bottom: 42rpx;border-bottom: 1px dashed #fff;
-		.about-icon-box{
-			width: 192rpx;height: 188rpx;margin-right: 36rpx;
-			@include ezy-no-repeat-cover;background-image: url("@/static/images/my/about-icon.png");
-		}
-		.about-name{
-			font-size: 30rpx;margin: 20rpx 0 42rpx;
-		}
-		.about-text{margin: 16rpx 0;}
-	}
-	.content-box{
-		font-size: 30rpx;margin-top: 50rpx;line-height: 2;color: #333;
-		text-align: justify;box-sizing: border-box;padding: 0 10rpx;
-		}
-	@media (max-height: 600px) {
-		.about-body-border{margin: 12rpx auto 150rpx;}
-		.about-body-box{padding: 32rpx 20rpx 20rpx;}
-		.content-top-box{padding-bottom: 24rpx;}
-		.content-box{margin-top: 20rpx;}
-	}
-}
-
-// 绑定手机号弹窗
-.my-tel-dialog{
-	background-color: rgba(255, 255, 255, 0.6);
-	position: fixed;display: flex;flex-direction: column;top: 0;left: 0;bottom:0;right: 0;
-	justify-content: center;align-items: center;
-	.tel-close{width: 50rpx;height: 50rpx;@include ezy-no-repeat-cover;position: absolute;right: 30rpx;top: 30rpx;
-	background-image: url("@/static/images/common/close-icon.png");}
-	.my-tel-content{
-		width: 625rpx;height: 740rpx;box-sizing: border-box;padding: 100rpx 62rpx;
-		background-image: url("@/static/images/my/my-tel-bj.png");@include ezy-no-repeat-cover;position: relative;
-		
-	}
-	.my-tel-title{font-size: 40rpx;color: #333;text-align:center;margin-bottom: 24rpx;}
-	.tel-row{border-bottom: 1px dashed #70cbf4;}
-	.yzm-row{padding-top: 32rpx;}
-	/***** 输入手机号页面*****/
-	.my-input-box{
-		width:500rpx;height: 88rpx;box-sizing: border-box;
-		display: flex;align-items: center;
-		background-image: url("@/static/images/my/my-tel-input.png");@include ezy-no-repeat-cover;
-		.my-input {font-size: 32rpx;padding: 0 22rpx;box-sizing: border-box;color: #fff;flex: 1;}
-		.uni-input-placeholder {font-size: 25rpx;color: #ffffffd9;}
-		.close-btn{width: 36rpx;height: 36rpx;margin-right: 30rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/login/login-close-icon.png");flex-shrink: 0;}
-	}
-	
-	.get-yzm-btn{color: #3b73bf;margin:24rpx 0 36rpx;font-size: 25rpx;}
-	.get-yzm-disabled{color: #666;}
-	
-	.yzm-tip{color: #3b73bf;margin:0 0 24rpx;font-size: 25rpx;}
-	
-	.my-bind-btn{
-		width:500rpx;height: 88rpx;text-align: center;line-height: 88rpx;color: #fff;margin-top: 24rpx;
-		background-image: url("@/static/images/my/my-tel-btn.png");@include ezy-no-repeat-cover;
-	}
-}
-
-// SVIP
-.ezy-svip-page{
-	width: 100%;height: 100vh;background-color: #23befb;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");
-	.svip-login1,.svip-login2{width: 673rpx;height: 269rpx;margin: 24rpx auto 0;@include ezy-no-repeat-cover;}
-	.svip-login1{background-image: url("@/static/images/pay/svip-logo1.png");}
-	.svip-login2{background-image: url("@/static/images/pay/svip-logo2.png");}
-	.svip-list-box{
-		margin: 24rpx auto;
-		.list-item-box{display: flex;align-items: center;color: #fff;margin-bottom: 28rpx;}
-		.list-icon{
-			width: 96rpx;height: 106rpx;@include ezy-no-repeat-cover;margin-right: 16rpx;
-		}
-		.list-title{
-			font-size: 28rpx;font-weight: 600;margin-bottom: 10rpx;
-		}
-		.list-content{font-size: 25rpx;color: rgba(255, 255, 255, 0.8);}
-		
-	}
-	.open-svip-box{
-		width: 702rpx;height:413rpx;margin: 0 auto;box-sizing: border-box;padding: 0 16rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/svip-block-bj.png");
-		.svip-price-box{
-			display: flex;justify-content: space-between;border-bottom: 2rpx solid #efd774;font-size: 32rpx;
-			margin-top: 120rpx;box-sizing: border-box;padding:0 24rpx 24rpx;color: #87664d;align-items: center;
-			.original-price{text-decoration: line-through;}
-			.discount-price{color: #ff0101;font-size: 40rpx;}
-		}
-		.pay-type-box{
-			display: flex;align-items: center;padding:20rpx 24rpx;box-sizing: border-box;
-			.type-radio-title{color: #87664d;margin-right: 32rpx;flex-shrink: 0;font-size: 32rpx;}
-			.type-radio-content{display: flex;flex-direction: row;align-items: center;
-			justify-content: space-between;flex: 1;font-size: 32rpx;}
-		}
-		.type-radio-box{
-			display: flex;align-items: center;color: #87664d;
-			icon{width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;margin-right: 10rpx;}
-			.uni-radio-input{
-				width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;margin-left: 16rpx;
-				background-image: url("@/static/images/pay/svip-radio.png");
-				background-color:transparent;border:0; pointer-events: none;
-				svg{display: none;}
-			}
-			.radio-checked .uni-radio-input{
-				width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;color:transparent;
-				background-image: url("@/static/images/pay/svip-radio-checked.png");
-			}
-		}
-		.wx-radio{background-image: url("@/static/images/pay/svip-wx-icon.png");}
-		.zfb-radio{background-image: url("@/static/images/pay/svip-zfb-icon.png");}
-		.open-svip-btn{
-			width: 333rpx;height: 88rpx;line-height: 88rpx;text-align: center;color: #fff;margin: 10rpx auto;font-size: 36rpx;
-			@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/svip-btn-bj.png");
-		}
-	}
-	
-	@media (max-height: 800px) {
-		min-height: 1346rpx;
-		.svip-login1,.svip-login2{width: 538rpx;height: 215rpx;margin: 0 auto;}
-		.svip-list-box{
-			margin: 0 auto;
-			.list-item-box{margin-bottom: 20rpx;}
-		}
-		.open-svip-box{
-			width: 673rpx;height:396rpx;
-			.open-svip-btn{margin: 0 auto;}
-			}
-	}
-	@media (max-height: 700px) {
-		min-height: 1250rpx;
-		.svip-login1,.svip-login2{width: 500rpx;height: 200rpx;margin: 0 auto;}
-		.svip-list-box{
-			.list-item-box{margin-bottom: 16rpx;}
-			.list-icon{
-				width: 96rpx;height: 106rpx;@include ezy-no-repeat-cover;margin-right: 16rpx;
-			}
-			.list-title{font-size: 26rpx;}
-			.list-content{font-size: 22rpx;}
-		}
-		.open-svip-box{
-			width: 625rpx;height:349rpx;
-			.svip-price-box{
-				font-size: 30rpx;margin-top: 90rpx;padding:0 24rpx 24rpx;
-				.discount-price{color: #ff0101;font-size: 36rpx;}
-			}
-			.pay-type-box{
-				padding:10rpx 12rpx;
-				.type-radio-title{margin-right: 24rpx;font-size: 30rpx;}
-				.type-radio-content{font-size: 30rpx;}
-			}
-			.open-svip-btn{width: 300rpx;height: 80rpx;line-height: 80rpx;margin: 6rpx auto;font-size: 32rpx;}
-		}
-	}
-}
-
-// 订单
-.ezy-order-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;}
-	.uni-list-item__header{display: none;}
-	.uni-list-item__container{
-		flex-direction: column!important;position: relative;
-		padding:16rpx 20rpx !important;overflow: unset;}
-	
-	.order-scroll-view{margin-top: 10rpx;overflow-y: auto;height: calc(100vh - 380rpx - var(--status-bar-height));}
-	.order-list-item{
-		width: 94%;background-color: rgba(255, 255, 255, 0.6)!important;
-		margin: 0 3% 10rpx;border-radius: 8rpx;
-		.order-item-head{
-			display: flex;justify-content: space-between;align-items: center;font-size: 24rpx;color: #333;
-			.order-name-box{
-				display: flex;align-items: center;
-				icon{
-					width: 58rpx;height: 58rpx;margin-right: 10rpx;
-					@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/order-icon.png");
-				}
-			}
-			.pay-status{color:#fdae36;margin-left: 36rpx;}
-		}
-		
-		.order-content-box{
-			display: flex;margin-top: 10rpx;border-bottom: 1px dashed #fff;
-			box-sizing: border-box;padding-bottom: 32rpx;margin-bottom: 24rpx;
-			icon{width: 212rpx;height: 202rpx;margin-right: 20rpx;@include ezy-no-repeat-cover;}
-			.content-img1{background-image: url("@/static/images/pay/svip1.png");}
-			.content-img2{background-image: url("@/static/images/pay/svip2.png");}
-			.content-body-box{display: flex;flex-direction: column;}
-			.content-name{
-				font-size: 40rpx;color: #333;margin-bottom: 12rpx;
-			}
-			.content-tag{
-				width: 160rpx;height: 40rpx;line-height: 40rpx;
-				font-size: 24rpx;color: #01c6fe;background-color: rgba(255, 255, 255, 0.6);
-				border-radius: 4rpx;text-align: center;
-			}
-			.content-yuanjia{font-size: 42rpx;color: #ff0101;margin-top: auto;}
-		}
-		
-		.order-bottom-box{
-			box-sizing: border-box;padding-bottom: 24rpx;
-			.bottom-money-box{
-				 display: flex;justify-content: space-between;align-items: center;
-				.bottom-data{font-size: 24rpx;color: #999;}
-				.bottom-money{color: #333;}
-			}
-			.bottom-btn{
-				width: 167rpx;height: 52rpx;line-height: 52rpx;text-align: center;color: #FFF;font-size: 28rpx;margin-left: auto;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/order-btn-bj.png");margin-top: 24rpx;
-
-			}
-		}
-	}
-	
-	
-}
-
-// 订单支付
-.ezy-order-pay-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");
-	.order-pay-border-box{
-		width: 740rpx;height: 1144rpx;margin: 0 auto;box-sizing: border-box;padding: 30rpx;
-		@include ezy-no-repeat-cover(top);background-image: url("@/static/images/pay/order-pay-bj.png");
-	}
-	.order-pay-img-box{
-		display: flex;background-color: rgba(255, 255, 255, 0.6);
-		box-sizing: border-box;padding: 32rpx 24rpx;margin-bottom: 6rpx;
-		icon{width: 212rpx;height: 202rpx;margin-right: 20rpx;@include ezy-no-repeat-cover;flex-shrink: 0;}
-		.order-pay-img1{background-image: url("@/static/images/pay/svip1.png");}
-		.order-pay-img2{background-image: url("@/static/images/pay/svip2.png");}
-		.img-content-box{flex: 1;position: relative;}
-		.content-name{font-size: 40rpx;color: #333;margin-bottom: 12rpx;}
-		.content-tag{
-			width: 150rpx;height: 40rpx;line-height: 40rpx;display: inline-block;
-			font-size: 24rpx;color: #01c6fe;background-color: rgba(255, 255, 255, 0.6);
-			border-radius: 4rpx;text-align: center;
-		}
-		.content-tag + .content-tag{margin-left: 16rpx;}
-		.content-yuanjia{font-size: 42rpx;color: #ff0101;position: absolute;right: 0;bottom: 0;}
-	}
-	
-	.price-box{
-		margin-bottom: 6rpx;background-color: rgba(255, 255, 255, 0.6);box-sizing: border-box;padding: 32rpx 24rpx;
-		.price-row{display: flex;justify-content: space-between;font-size: 30rpx;color: #333;box-sizing: border-box;padding-left: 10rpx;}
-		.price-line-row{border-bottom: 1rpx dashed #fff;padding: 24rpx 0 36rpx 10rpx;margin-bottom: 24rpx;}
-		.price-red{color: #ff0101;}
-	}
-	
-	.pay-type-box{
-		background-color: rgba(255, 255, 255, 0.6);box-sizing: border-box;padding: 32rpx 24rpx;border-radius: 0 0 10rpx 10rpx;
-		.pay-type-name{font-size: 36rpx;color: #333;margin-bottom: 12rpx;}
-		.type-radio-box{display: flex;flex-direction: column;}
-		.type-radio-row{
-			display: flex;justify-content: space-between;flex: 1;align-items: center;color: #87664d;
-			padding: 24rpx 0;box-sizing: border-box;
-			icon{width: 58rpx;height: 58rpx;@include ezy-no-repeat-cover;margin-right: 16rpx;flex-shrink: 0;}
-			.uni-radio-input{
-				width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;margin-left: 16rpx;
-				background-image: url("@/static/images/pay/svip-radio.png");
-				background-color:transparent;border:0; pointer-events: none;
-				svg{display: none;}
-			}
-			.radio-checked .uni-radio-input{
-				width: 48rpx;height: 48rpx;@include ezy-no-repeat-cover;color:transparent;flex-shrink: 0;
-				background-image: url("@/static/images/pay/svip-radio-checked.png");
-			}
-			.radio-content-box{margin-right: auto;font-size: 0;}
-			.radio-title{font-size: 30rpx;color: #333;}
-			.radio-content{font-size: 24rpx;color: #666;}
-		}
-		.type-radio-row +.type-radio-row{border-top:1px dashed #fff;padding-bottom: 10rpx;}
-		.wx-radio{background-image: url("@/static/images/pay/svip-wx-icon.png");}
-		.zfb-radio{background-image: url("@/static/images/pay/svip-zfb-icon.png");}
-	}
-	
-	.pay-sum-box{
-		display: flex;justify-content: space-between;align-items: center;font-size: 36rpx;color: #333;margin-top: 42rpx;
-		icon{width: 35rpx;height: 35rpx;margin: 0 12rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/order-date.png");}
-		.sum-red{color: #ff0101;font-weight: bold;margin-left: 6rpx;}
-		.sum-btn{
-			width: 333rpx;height: 88rpx;line-height: 88rpx;text-align:center;color: #fff;font-size: 32rpx;
-			display: flex;justify-content: center;align-items: center;
-			@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/svip-btn-bj.png");
-		}
-	}
-	@media (max-height: 700px) {
-		.order-pay-border-box{padding: 20rpx;}
-		.order-pay-img-box{padding:24rpx;}
-		.price-box{padding:24rpx;}
-		.pay-type-box{
-			padding:24rpx;
-			.pay-type-name{margin-bottom: 0;}
-			.type-radio-row{padding: 16rpx 0;}
-			}
-		.pay-sum-box{margin-top: 32rpx;}
-	}
-	@media (max-height: 600px) {
-		.order-pay-border-box{padding: 16rpx;}
-		.order-pay-img-box{padding:16rpx;}
-		.price-box{padding:16rpx;}
-		.pay-type-box{
-			padding:16rpx;
-			.pay-type-name{margin-bottom: 0;}
-			.type-radio-row{padding: 12rpx 0;}
-			}
-		.pay-sum-box{margin-top: 24rpx;}
-	}
-}
-
-// 游戏
-.ezy-game-page{
-	width: 100%;height: 100vh;background-color: #23befb;position: relative;
-	padding-top:var(--status-bar-height);display: flex;flex-direction: column;
-	@include ezy-no-repeat-cover(bottom);background-image: url("@/static/images/game/game-bj.png");
-	.game-jf-box{position: absolute;right: 24rpx;top: var(--status-bar-height);}
-	// goose
-	.game-goose-box{
-		position: absolute;bottom: 260rpx;right: 25rpx;color: #0d5f84;
-		.game-progress-text{position: absolute;left: 50%;transform: translateX(-50%);font-size: 18rpx;}
-		.game-progress-box{
-			width: 138rpx;height: 25rpx;position: absolute;left: 50%;transform: translateX(-50%);
-			.u-line-progress__background{
-				width: 138rpx;height: 25rpx!important;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/game/jf-bj.png");
-			}
-			.u-line-progress__line{height: 25rpx!important;}
-		}
-		.goose-img-box{width: 308rpx;height: 481rpx;@include ezy-no-repeat-cover;}
-	}
-	.game-goose-box0{
-		.game-progress-box{bottom: 300rpx;}
-		.game-progress-text{bottom: 302rpx;}
-	} 
-	.game-goose-box1{
-		.game-progress-box{bottom: 330rpx;}
-		.game-progress-text{bottom: 333rpx;}
-	} 
-	.game-goose-box2{
-		.game-progress-box{bottom: 404rpx;}
-		.game-progress-text{bottom: 407rpx;}
-	} 
-	.game-goose-box3{
-		.game-progress-box{bottom: 460rpx;}
-		.game-progress-text{bottom: 463rpx;}
-	} 
-	
-	// food
-	.food-img-box{width: 80rpx;height: 75rpx;position: absolute;}
-	.food-img30{bottom: 368rpx;left: 274rpx;}
-	.food-img100{bottom: 360rpx;left: 270rpx;}
-	.food-img300{bottom: 360rpx;left: 272rpx;}
-	
-	//btn
-	.food-btn-box{
-		width: 106rpx;height: 121rpx;position: absolute;top: calc(260rpx + var(--status-bar-height));right: 50rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/game/food-common-img.png");
-	}
-	.yxsm-btn{
-		width: 125rpx;height: 125rpx;position: absolute;top: calc(100rpx + var(--status-bar-height));right: 38rpx;
-		@include ezy-no-repeat-cover;background-image: url("@/static/images/game/yxsm-btn-img.png");
-	}
-	
-	
-	// game-popup-box
-	.game-popup-box{
-		width: 100%;height: 514rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/game/food-box-bj.png");
-		box-sizing: border-box;padding: 64rpx 36rpx 0;
-		.game-popup-head,.jf-btn-box{display: flex;justify-content: space-between;align-items: center;}
-		.game-popup-title{
-			width: 285rpx;height: 90rpx;@include ezy-no-repeat-cover;
-		background-image: url("@/static/images/game/food-title.png");
-		}
-		.game-popup-jf{margin: 0 20rpx 0 0;}
-		.popup-close-btn{
-			width: 46rpx;height: 46rpx;@include ezy-no-repeat-cover;
-			background-image: url("@/static/images/common/close-icon.png");
-		}
-		.food-list-box{display: flex;justify-content: space-between;margin-top: 24rpx;}
-		.food-item-box{
-			width: 204rpx;height: 250rpx;@include ezy-no-repeat-cover;
-			display: flex;flex-direction: column;align-items: center;justify-content: center;
-			background-image: url("@/static/images/game/food-bj.png");
-			.food-image{width: 144rpx;height:135rpx;}
-			.food-item-jf{
-				width: 123rpx;height: 46rpx;
-				display: flex;align-items: center;line-height: 1.2;font-size: 26rpx;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/game/food-jf-bj.png");margin-top: 20rpx;
-				.jf-icon{width: 35rpx;height: 35rpx;margin:0 4rpx 0 10rpx;flex-shrink: 0;
-				@include ezy-no-repeat-cover;background-image: url("@/static/images/my/jf-qb.png");}
-				.jf-text{min-width: 60rpx;text-align: center;color: #fff;margin-top: 2rpx;}
-			}
-		}
-	}
-}
-
-.yxsm-popup-box{
-		width: 684rpx;height: 1308rpx;box-sizing: border-box;padding: 120rpx 56rpx 60rpx;overflow-y: auto;
-		background-image: url("@/static/images/login/agree-content-bj.png");@include ezy-no-repeat-cover;
-		position: relative;text-align: justify;display: flex;flex-direction: column;position: relative;
-		.yxsm-close-btn{width: 62rpx;height: 62rpx;@include ezy-no-repeat-cover;position: absolute;
-		top: 64rpx;right: 44rpx;background-image: url("@/static/images/common/close-icon.png");}
-		.yxsm-item-box{overflow-y: auto;line-height: 1.8;font-size: 28rpx;}
-		.yxsm-popup-title{font-size: 36rpx;color: #333;text-align: center;margin-bottom: 32rpx;}
-		.item-title{color: #359ae2;}
-		.item-content{color: #555;}
-		@media (max-height: 480px){
-			padding: 120rpx 56rpx 120rpx;
-			.yxsm-close-btn{top: 100rpx;}
-		}
-}
-
-// svip弹窗
-.ezy-svip-dialog{
-	.tip-content-box{
-		width: 625rpx;height: 519rpx;padding: 42rpx 48rpx;
-		@include ezy-no-repeat-cover;box-sizing: border-box;text-align:center;
-		background-image: url("@/static/images/common/tip-big-bj.png");
-		position: relative;
-		icon{
-			width: 510rpx;
-			height: 269rpx;@include ezy-no-repeat-cover;
-			position: absolute;top: -20%;left: 50%;transform: translateX(-50%);
-		}
-		.svip-img1{background-image: url("@/static/images/pay/svip-dialog-img1.png");}
-		.svip-img2{background-image: url("@/static/images/pay/svip-dialog-img2.png");}
-	}
-	.tip-content{
-		color: #666;font-size: 32rpx;padding:160rpx 0 80rpx;line-height: 1.6;text-align: center;
-		text-align: center;border-bottom: 1px dashed #70cbf4;
-	}
-	.tip-btn-box{
-		width: 100%;display: flex;justify-content: space-between;
-		.not-confirm-btn,.confirm-btn{
-			width: 208rpx;height: 83rpx;@include ezy-no-repeat-cover;margin: 30rpx 32rpx 0;
-		}
-		.not-confirm-btn{background-image: url("@/static/images/common/tip-cancel-btn.png");}
-		.confirm-btn{background-image: url("@/static/images/pay/svip-btn.png");}
-	}
-}
-
-// 蛋破壳
-.ezy-pay-success-dialog{width: 769rpx;height: 769rpx;@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/pay-success-img.gif");}
-.ezy-pay-success-all-dialog{width: 769rpx;height: 192rpx;@include ezy-no-repeat-cover;background-image: url("@/static/images/pay/pay-success-all-img.gif");}
-
-// 敬请期待弹窗
-.coming-soon-dialog{
-	icon{
-		width: 577rpx;height: 596rpx;
-		background-image: url("@/static/images/grade/coming-soon-img.png");@include ezy-no-repeat-cover;
-	}
-	.coming-soon-return-btn{
-		width: 554rpx;height: 106rpx;margin: 52rpx auto;
-		background-image: url("@/static/images/grade/coming-soon-btn.png");@include ezy-no-repeat-cover;
-	}
-}

+ 0 - 13
common/styles/index.scss

@@ -1,13 +0,0 @@
-// 组件样式
-@import '/common/styles/global/components.scss';
-
-// 页面样式
-@import '/common/styles/global/pages.scss';
-
-
-.uni-tabbar{
-	@include ezy-no-repeat-cover(top);padding: 0 60rpx;box-sizing: border-box;
-	background-image: url("@/static/images/tabbar/tabbar-bg.png");
-	.uni-tabbar-border{height: 0;}
-	.uni-tabbar__icon{margin: 0 0 64rpx;}
-}

+ 0 - 179
components/captcha4/index.vue

@@ -1,179 +0,0 @@
-<template>
-  <view class="geetest_component"> </view>
-</template>
-<script>
-export default {
-  data() {
-    return {
-      wv: null,
-      lastTime: "",
-      defaultConfig: {
-        clientVersion: "uniapp-v1.0",
-        clientType: uni.getSystemInfoSync().platform,
-        protocol: "http://",
-        mi: {
-          geeid: {
-            bd: "",
-            d: "",
-            e: "",
-            fp: "",
-            ts: "",
-            ver: "",
-            client_type: "",
-          },
-          packageName: "",
-          displayName: "",
-          appVer: "",
-          build: "",
-          clientVersion: "",
-          process_id: "",
-          process_id_test: "",
-          zid: "",
-        },
-      },
-    };
-  },
-  props: {
-    config: {
-      type: Object,
-      default: function () {
-        return {};
-      },
-    },
-  },
-  mounted() {},
-  methods: {
-    showCaptcha() {
-      var that = this;
-      // #ifdef APP-PLUS
-
-      // 合并参数
-      _assign(this.defaultConfig, this.config, {
-        challenge: this.getUuid(),
-      }); //每次更新challenge
-
-      // 创建webview
-      this.wv = plus.webview.create(
-        `hybrid/html/captcha4/index.html?data=${encodeURIComponent(
-          JSON.stringify(this.defaultConfig)
-        )}`,
-        "gt_webview",
-        {
-          background: "transparent",
-          width: "100%", //String类型,窗口的宽度.支持百分比、像素值,默认为100%.未设置width属性值时,可同时设置left和right属性值改变窗口的默认宽度.
-          height: "100%",
-        }
-      );
-
-      // 获取webview
-      var currentWebview = this.$root.$scope.$getAppWebview(); //此对象相当于html5plus里的plus.webview.currentWebview()。在uni-app里vue页面直接使用plus.webview.currentWebview()无效
-      currentWebview.append(this.wv);
-
-      plus.globalEvent.addEventListener("plusMessage", (msg) => {
-        //有重复推送问题
-        const result = msg.data.args.data;
-        if (result.name == "postMessage") {
-          if (result.arg.time === that.lastTime) {
-            // 处理uni连续推送bug
-            return;
-          }
-          that.lastTime = result.arg.time;
-          switch (result.arg.type) {
-            case "ready":
-              that.captchaReady();
-              break;
-            case "error":
-              that.captchaError(result.arg.data);
-              break;
-            case "fail":
-              that.captchaFail();
-              break;
-            case "close":
-              that.captchaClose();
-              break;
-            case "result":
-              that.captchaSuccess(result.arg.data);
-              break;
-            default:
-              break;
-          }
-        }
-      });
-
-      this.wv.overrideUrlLoading(
-        {
-          mode: "reject",
-        },
-        (e) => {
-          plus.runtime.openURL(e.url);
-        }
-      );
-      // #endif
-    },
-    captchaReady() {
-      this.$emit("captchaReady");
-      this.wv.evalJS("jsBridge.callback('showBox')");
-    },
-    captchaSuccess(data) {
-      this.$emit("captchaSuccess", data);
-      this.wv.hide();
-    },
-    captchaClose() {
-      this.$emit("captchaClose");
-      this.wv.hide();
-    },
-    captchaError: function (e) {
-      uni.showToast({
-        title: JSON.stringify(e),
-        icon: "none",
-        duration: 2000,
-      });
-      this.$emit("captchaError", e);
-      this.wv.hide();
-    },
-    captchaFail() {
-      this.$emit("captchaFail");
-    },
-    getAppWebview(that) {
-      if (that.$scope) {
-        return that.$scope.$getAppWebview();
-      } else {
-        this.getAppWebview(that.$parent);
-      }
-    },
-    getUuid() {
-      return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(
-        /[xy]/g,
-        function (c) {
-          const r = (Math.random() * 16) | 0;
-          const v = c === "x" ? r : (r & 0x3) | 0x8;
-          return v.toString(16);
-        }
-      );
-    },
-  },
-};
-
-function _assign(target) {
-  if (typeof Object.assign === "function") {
-    return Object.assign.apply(Object, arguments);
-  }
-  if (target == null) {
-    throw new Error("Cannot convert undefined or null to object");
-  }
-
-  const newTarget = Object(target);
-  for (let index = 1; index < arguments.length; index++) {
-    const source = arguments[index];
-    if (source !== null) {
-      for (const key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          newTarget[key] = source[key];
-        }
-      }
-    }
-  }
-  return newTarget;
-}
-</script>
-<style lang="scss"></style>

+ 0 - 175
components/catalogue/catalogue.vue

@@ -1,175 +0,0 @@
-<template>
-	<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);" :is-shadow="false">
-		<scroll-view scroll-y="true" :scroll-top="scrollTop"  class="ezy-catalogue-dialog" :style="{backgroundImage: 'url(' + catalogueBjFun() + ')'}">
-			<uni-icons @click="handleClose" class="catalogue-close-btn"></uni-icons>
-			<!-- 目录区域 -->
-			<uni-collapse v-model="activeCollapse" class="ezy-catalogue-collapse" :class="{ 'ezy-catalogue-collapse-vip': AuthCode === 'VIP'}" accordion>
-				<uni-collapse-item title-border="none" :border="false" :name="index+''" v-for="(item,index) in list" 
-				class="collapse-item-box" :class="{ 'collapse-active': activeCollapse === index+''}">
-					<template v-slot:title>
-							<view @click.stop="handleSelectZhang(item,index)" class="collapse-title">
-								<view class="collapse-num-box">{{index+1}}</view>
-								<!-- 章名 -->
-								<text class="collapse-name">{{item.zhangName}}</text>
-								<!-- 锁 -->
-								<template v-if="AuthCode !== 'VIP'">
-									<view class="collapse-lock" v-if="index!=0"></view>
-								</template>
-							</view>
-					</template>
-					<view class="collapse-content-box">
-							<view v-for="(jie,cindex) in item.jieList" class="collapse-content-item" @click="handleJieClick(item,jie,index,cindex)">
-								<text class="jie-index">{{`${index+1}.${cindex+1}`}}</text>
-								<text class="text">{{jie.jieName}}</text>
-							</view>
-					</view>
-				</uni-collapse-item>
-			</uni-collapse>
-			<tip-small-dialog ref="confirmDialogRef" @confirm-btn="handleConfirmPay" :content="Message"></tip-small-dialog>
-			<tip-middle-dialog ref="youkeDialogRef" @confirm-btn="ykConfirm" :content="MESSAGE_VISITER_TO_LOGIN"></tip-middle-dialog>
-		</scroll-view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import {
-		useCatalogue
-	} from './useCatalogue';
-	import {
-		ref
-	} from "vue";
-	import {
-		toast
-	} from "@/utils/common.js"
-	import {getUserIdentity} from "@/utils/common.js"
-	import {MESSAGE_VISITER_TO_LOGIN,MESSAGE_BEFORE_PAY} from "@/utils/constant.js"
-  import tipSmallDialog from '@/components/dialog/tipSmallDialog.vue'
-	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
-  import cacheManager from "@/utils/cacheManager.js";
-	import {
-	  onShow,onLoad
-	} from '@dcloudio/uni-app';
-	const growthType = ref(null);
-	const AuthCode = ref(null);
-	const scrollTop = ref(0)
-	const cardId = ref(null)
-	onShow(() => AuthCode.value = getUserIdentity()); // 用户身份
-	onLoad((options) => {
-		if (cacheManager.get('auth')) {
-		  cardId.value = cacheManager.get('auth').cardId;
-		} else {
-		  cardId.value = options.cardId;
-		}
-	})
-
-	const $emit = defineEmits(['change-zhang'])
-
-	const { getCatalogue} = useCatalogue();
-
-	const popupRef = ref(null); // 索引
-	const confirmDialogRef = ref(null);
-	const activeCollapse = ref('');
-	const Message = MESSAGE_BEFORE_PAY;
-	const youkeDialogRef = ref(null);
-	const selectZhang = ref(null);
-
-	const props = defineProps({
-		list: {
-			type: Array,
-		}
-	})
-	
-	function handleJieClick(item,jie,index,cindex) {
-		selectZhang.value = item;
-		if (index == 0 && cindex == 0 ) {
-			// 全员可访问 第一章 第一节
-			this.$emit('listSelectJieClick', item,jie);
-			return;
-		}
-		if (AuthCode.value == 'Visitor') {
-			// 游客
-			youkeDialogRef.value.handleShow();
-			return;
-		}
-		if (AuthCode.value == 'Not-Vip') {
-			// 非VIP
-			confirmDialogRef.value.handleShow();
-			return;
-		}
-		
-		// Vip
-		this.$emit('listSelectJieClick', item,jie);
-	}
-
-	function catalogueBjFun(){
-		if(cardId.value ==1){
-			// 数学
-			return 'static/images/catalog/catalog-shuxue-bj.png'
-		}else if(cardId.value ==2){
-			// 英语
-			return 'static/images/catalog/catalog-yingyu-bj.png'
-		}
-	}
-	
-	function ykConfirm() {
-		uni.redirectTo({
-			url: '/pages/login/index'
-		});
-	}
-
-	/**
-	 * @summary 展示弹窗 暴露函数
-	 */
-	async function showPopup(data) {
-		if (data) {
-			const index = props.list.findIndex(item => item.zhangId == data.zhangId);
-			// 滚动高度
-			scrollTop.value = 50 * index;
-			activeCollapse.value = index+'';
-		}
-		handleShow();
-	}
-
-
-	/**
-	 * @summary 展示目录弹窗
-	 */
-	function handleShow() {
-		popupRef.value.open('center');
-	}
-
-	/**
-	 * @summary 关闭目录弹窗
-	 */
-	function handleClose() {
-		popupRef.value.close();
-	}
-	/**
-	 * @summary 选中
-	 * @param({zhangId:string}) data
-	 */
-	function handleSelectZhang(data,index) {
-		selectZhang.value = data;
-		if(index !=0 && AuthCode.value == 'Visitor'){
-			// 游客
-			youkeDialogRef.value.handleShow();
-			return;
-		}
-
-		if(index !=0 && AuthCode.value == 'Not-Vip'){
-			// 非VIP
-			confirmDialogRef.value.handleShow();
-			return;
-		}
-		$emit('change-zhang', Object.assign({}, data));
-		handleClose();
-	}
-	function handleConfirmPay() {
-		const url = `/pages/pay/svip?cardId=${cardId.value}&formPage=studyWithCatalgue&selectZhangId=${selectZhang.value.zhangId}`
-		uni.redirectTo({ url })
-	}
-	defineExpose({
-		showPopup
-	})
-</script>

+ 0 - 49
components/catalogue/useCatalogue.js

@@ -1,49 +0,0 @@
-import {
-	reactive,
-	toRefs
-} from "vue";
-import {
-	catchError
-} from "@/utils/common.js"
-import * as httpCatalogue from "@/api/catalogue.js"
-import cacheManager from "@/utils/cacheManager";
-import {
-	onLoad
-} from "@dcloudio/uni-app";
-import {getUserIdentity} from "@/utils/common.js"
-
-		
-export function useCatalogue() {
-	const data = reactive({
-		xueke: null,
-		nianji: null
-	})
-	
-	const userCode = getUserIdentity();
-
-	onLoad(({nianji,cardId}) => {
-		if (userCode !== 'Visitor') {
-			const auth = cacheManager.get('auth');
-			const { cardId:cardId_, nianji:nianji_ } = auth
-			data.nianji = nianji_ || null;
-			data.xueke = cardId_ || null;
-		} else {
-			data.nianji = nianji || null;
-			data.xueke = cardId || null;
-		}
-	});
-
-	async function getCatalogue() {
-		return await catchError(httpCatalogue.getCatalogue({
-			nianji: +data.nianji,
-			cardId: +data.xueke
-		}));
-	}
-
-	return {
-		...toRefs(data),
-
-		// 获取章节数据
-		getCatalogue
-	}
-}

+ 0 - 208
components/chengji/chengji.vue

@@ -1,208 +0,0 @@
-<template>
-		<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-			mask-background-color="rgba(255, 255, 255, 0.6);" class="ezy-popup-width-all">
-			<view class="ezy-result-page" :style="{backgroundImage: 'url(' + courseBjFun() + ')'}">
-				<view class="icon-title-navBar-box">
-					<view @click="handleBack" class="nav-bar-icon"></view>
-					<view class="nav-bar-title">成绩</view>
-				</view>
-				<view class="shiti-frame-box">
-			
-					<w-swiper :list="myList" :positionIndex="current" class="result-exam-swiper" @change="onSwiperChange">
-						<template v-slot:default="{item,index}">
-							<view class="body" v-if="item.mta_show">
-								<danxuan :question="item" showError v-if="item.type == '1'"></danxuan>
-								<panduan :question="item" showError v-if="item.type == '2'"></panduan>
-								<tiankong :question="item" showError v-if="item.type == '3'"
-									:placeholders="item.placeholders"></tiankong>
-								<yingyu code="cj" :question="item" showError v-if="item.type == '4'"
-									:placeholders="item.placeholders"></yingyu>
-								<view class="answer-content-box">
-									<view class="answer-dtjx-row">
-										<view class="answer-title"></view>
-										<!-- 答案解析 -->
-										<view @click="showJiexiPopup(item)" class="answer-btn"></view>
-									</view>
-									<view class="answer-btn-box" v-if="item.type!=3">
-										<!-- 你的答案 -->
-										<view class="answer-item-left">
-											<text class="answer-item-title">您的答案</text>
-											<text class="answer-item-error">{{showAnswerReply(item)}}</text>
-											<view class="answer-line"></view>
-										</view>
-										<!-- 答案 -->
-										<view class="answer-item-right">
-											<text class="answer-item-title">正确答案</text>
-											<text class="answer-item-correct">{{showAnswerResult(item)}}</text>
-										</view>
-									</view>
-									<view v-else>
-										<!-- 答案 -->
-										<view class="tiankong-answer-content-box">
-											<!-- <text class="answer-item-title">正确答案</text> -->
-											<view v-for="(ict,cindex) in showAnswerResult(item)" :key="cindex"
-												class="tiankong-answer-row">
-												<text>{{cindex+1}}. </text>
-												<text v-for="(xItem,xindex) in ict" :key="xindex">
-													<text> {{xItem}} </text>
-													<text v-if="xindex != ict.length-1">/</text>
-												</text>
-											</view>
-										</view>
-									</view>
-		
-								</view>
-							</view>
-						</template>
-					</w-swiper>
-				</view>
-			</view>
-			<!-- 解析浮层数据 -->
-			<questionJiexi ref="jiexiRef" :cardId="cardId"></questionJiexi>
-			<questionJiexiYingyu ref="jiexiRefYingyu" :cardId="cardId" :code="code"></questionJiexiYingyu>
-		</uni-popup>
-</template>
-
-<script setup>
-	import questionJiexi from '@/components/questionJiexi/questionJiexi.vue';
-	import questionJiexiYingyu from '@/components/questionJiexi/questionJiexiYingyu.vue';
-	import wSwiper from '@/components/wSwiper/wSwiper.vue';
-	import danxuan from "@/components/question/danxuan.vue";
-	import panduan from "@/components/question/panduan.vue";
-	import tiankong from "@/components/question/tiankong.vue";
-	import yingyu from "@/components/question/yingyu/danxuan.vue";
-	import {
-		useQuestionTools
-	} from "@/components/question/useQuestionTools.js";
-	import cacheManager from "@/utils/cacheManager";
-	import {computed} from "vue";
-	const {
-		getLetterByIndex
-	} = useQuestionTools();
-
-	import {
-		ref
-	} from "vue";
-
-	const props = defineProps({
-		list: {
-			type: Array,
-		},
-		cardId: {
-			type: [String, Number],
-			default: 1
-		},
-		code: {
-			type: String,
-			default: 'cj'
-		}
-	})
-	
-	const myList = computed(() => {
-		return props.list.map(item => {
-			return {
-				...item,
-				code: 'cj'
-			}
-		})
-	})
-
-	const emits = defineEmits(['back'])
-
-	const current = ref(0)
-	const popupRef = ref(null)
-	const jiexiRef = ref(null);
-	const jiexiRefYingyu = ref(null)
-
-	function onSwiperChange(index) {
-		uni.$emit('swiper-change', index)
-	}
-
-	// 切换成绩
-	function showPopup() {
-		popupRef.value.open()
-	}
-
-	function closePopup() {
-		popupRef.value.close()
-	}
-
-	// 展示
-	function showJiexiPopup(data) {
-		if (data.type != 4) {
-			jiexiRef.value.showPopup(data);
-		} else {
-			jiexiRefYingyu.value.showPopup(data);
-			uni.$emit('question-jiexi-close')
-		}
-	}
-
-	function handleBack() {
-		// 从 单元测试 到 岛 的路由参数
-		emits('back')
-	}
-
-	function showAnswerResult(item) {
-		if (item.type == 1) {
-			// 单选题
-			return getLetterByIndex(item.result)
-		} else if (item.type == 2) {
-			if (item.result == 1) {
-				return '正确'
-			} else {
-				return '错误'
-			}
-		} else if (item.type == 4) {
-			return getLetterByIndex(item.result)
-		} else {
-			return item.result
-		}
-	}
-
-
-	function showAnswerReply(item) {
-		if (item.type == 1) {
-			if (item.reply == null) {
-				return '未答'
-			}
-			// 单选题
-			return getLetterByIndex(item.reply)
-		} else if (item.type == 2) {
-			if (item.reply == null) {
-				return '未答'
-			}
-			if (item.reply == 1) {
-				return '正确'
-			} else {
-				return '错误'
-			}
-		} else if(item.type == 4) {
-			if (item.reply == null) {
-				return '未答'
-			}
-			// 单选题
-			return getLetterByIndex(item.reply)
-		} else {
-			return item.reply
-		}
-	}
-
-	function courseBjFun() {
-		const cardId = Number(props.cardId);
-		switch (cardId) {
-			case 1:
-				return 'static/images/course/couse-shuxue-bj.png'
-				break;
-			case 2:
-				return 'static/images/course/course-yingyu-bj.png'
-				break;
-			default:
-				break;
-		}
-	}
-
-	defineExpose({
-		showPopup,
-		closePopup
-	})
-</script>

+ 0 - 203
components/custom-scroll-list/custom-scroll-list.vue

@@ -1,203 +0,0 @@
-<template>
-	<!-- 查询区域 -->
-	<uni-search-bar class="uni-mt-10" v-model="name" radius="100" v-if="hasSearcBar" :placeholder="placeholder"
-		:bgColor="searchBarColor" clearButton="auto" cancelButton="none" @confirm="onSearch" @blur="onSearch" />
-	<!-- tab选择区域 -->
-	<view class="lli-status-box" v-if="hasTab">
-		<text :class="['status-item', activeTab === item.value? 'click':'' ]" v-for="item in tabList" :key="item.value"
-			@click="onTavChange(item)">{{item.label}}</text>
-	</view>
-	<!-- 无限滚动区域 -->
-	<scroll-view class="scroll-container" :scroll-y="true" :refresher-enabled="true" :refresher-triggered="triggered"
-		:refresher-threshold="100" refresher-background="#F3F3F4" @refresherrefresh="onRefresh"
-		@scrolltolower="onReachBottom" @refresherrestore="onRestore">
-		<slot :list="list"></slot>
-		<uni-load-more :status="status" :contentText="contentText"></uni-load-more>
-
-		<!-- 		<view style="width: 100%;text-align: center;font-size: 14px;color:#ccc;" key="a333" v-if="isComplete">没有更多啦~
-		</view> -->
-	</scroll-view>
-</template>
-
-<script setup>
-	import {
-		ref,
-		onMounted,
-		computed,
-	} from "vue";
-
-	import {
-		onLoad
-	} from "@dcloudio/uni-app"
-
-	const props = defineProps({
-		refreshFn: {
-			type: Function,
-			required: true
-		},
-		tabData: {
-			type: Object
-		},
-		size: {
-			type: Number,
-			default: 5
-		},
-		hasSearcBar: {
-			type: Boolean,
-			default: true,
-		},
-		searchBarKey: {
-			type: String,
-			default: 'name'
-		},
-		hasTab: {
-			type: Boolean,
-			default: true,
-		},
-		defaultTab: {
-			type: [String, Number]
-		},
-		tabList: {
-			type: Array,
-			default: () => [],
-		},
-		tabKey: {
-			type: String,
-			default: 'status'
-		},
-		placeholder: {
-			type: String,
-			default: '请输入考试名称'
-		},
-		searchBarColor: {
-			type: String,
-			default: "#F3F3F4"
-		},
-		tabData: {
-			type: Object,
-		}
-
-	})
-
-	const page = ref(1);
-	const list = ref([]); // 项目列表
-	const triggered = ref(false); // 是否触发下拉刷新
-	const freshing = ref(false); // 是否加载中
-	const total = ref(0); // 项目总数
-	const name = ref(''); // 查询名
-	const activeTab = ref(props.defaultTab);
-
-	const status = ref('more');
-	const contentText = {
-		contentdown: '查看更多',
-		contentrefresh: '加载中',
-		contentnomore: '没有更多'
-	}
-	/**
-	 * 是否已完全加载
-	 */
-	const isComplete = computed(() => {
-		if (total.value === 0) {
-			return false;
-		}
-
-		return total.value === list.value.length
-	})
-
-	// 重置
-	function reset() {
-		list.value = [];
-		page.value = 1;
-		triggered.value = false;
-		freshing.value = false;
-		total.value = 0;
-		status.value = 'more';
-	}
-
-	// 切换tab
-	function onTavChange(item) {
-		activeTab.value = item.value;
-		name.value = "";
-		reset();
-		getData("do-search");
-	}
-
-	// 查询
-	function onSearch({
-		value
-	}) {
-		name.value = value;
-		reset();
-		getData("do-search");
-	}
-
-	// 获取数据
-	function getData(action) {
-		const options = Object.assign({}, {
-			page: page.value,
-			size: props.size,
-		});
-
-		if (props.hasTab) {
-			options[props.tabKey] = activeTab.value;
-		}
-
-		if (props.hasSearcBar) {
-			options[props.searchBarKey] = name.value;
-		}
-		props.refreshFn(options).then(res => {
-			total.value = res.data.total;
-			action === "do-search" && (list.value = res.data.data); // 查询更新
-			action === "pull-down-refresh" && (list.value = res.data.data); // 下拉更新数据
-			action === "reach-buttom" && (list.value = [...list.value, ...res.data.data]); // 无限滚动更新数据
-
-
-
-		}).finally(() => {
-			triggered.value = false;
-			freshing.value = false;
-			if (total.value !== list.value.length) {
-				status.value = 'more';
-			} else {
-				status.value = 'noMore';
-			}
-		})
-	}
-
-	onLoad(() => {
-		freshing.value = false;
-		setTimeout(() => {
-			triggered.value = true
-		}, 50)
-	})
-
-	// 下拉刷新触发
-	function onRefresh() {
-		if (freshing.value) return;
-		status.value = 'loading';
-		freshing.value = true;
-		triggered.value = true;
-		page.value = 1;
-		getData('pull-down-refresh');
-	}
-
-	// 下拉刷新复位
-	function onRestore() {
-		triggered.value = 'restore'; // 需要重置
-	}
-
-	// 无限滚动
-	function onReachBottom() {
-		if (freshing.value) return;
-		if (isComplete.value) return;
-		freshing.value = true;
-		page.value++;
-		getData('reach-buttom')
-	}
-</script>
-
-<style lang="scss">
-	.scroll-container {
-		height: calc(100vh - 220rpx)
-	}
-</style>

+ 0 - 139
components/custom-tabbar/custom-tabbar.vue

@@ -1,139 +0,0 @@
-<template>
-	<view class="ezy-custom-tabbar">
-		<view class="tabbar-item-box">
-
-			<view class="tabbar-item" v-for="(item, index) in tabList" :key="index" @click="switchTab(item.path,index)"
-				:style="{ backgroundImage: 'url(' + (currentTab == index ? item.activePath : item.iconPath) + ')' }">
-			</view>
-		</view>
-	</view>
-	<tip-middle-dialog ref="youkeDialogRef" @confirm-btn="ykConfirm"
-		:content="MESSAGE_VISITER_TO_LOGIN"></tip-middle-dialog>
-</template>
-
-<script>
-	import {
-		MESSAGE_VISITER_TO_LOGIN
-	} from "@/utils/constant.js"
-	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
-	import {
-		useTabBarHistory
-	} from '@/utils/emitEvents.js';
-	import cacheManager from "@/utils/cacheManager.js";
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import {
-		nextTick,
-	} from "vue";
-	export default {
-		components: {
-			tipMiddleDialog
-		},
-		data() {
-			return {
-				tabList: [{
-						iconPath: 'static/images/tabbar/unselect/plan-sj.png',
-						activePath: 'static/images/tabbar/select/plan-sj.png',
-						path: `/pages/study/index`
-					},
-					{
-						iconPath: 'static/images/tabbar/unselect/partner-sj.png',
-						activePath: 'static/images/tabbar/select/partner-sj.png',
-						path: '/pages/game/index'
-					},
-					{
-						iconPath: 'static/images/tabbar/unselect/my-sj.png',
-						activePath: 'static/images/tabbar/select/my-sj.png',
-						path: `/pages/my/index`
-					},
-				],
-				currentTab: 0,
-				MESSAGE_VISITER_TO_LOGIN
-			};
-		},
-		props: {
-			nianji: {
-				type: String,
-			},
-			cardId: {
-				type: String,
-			},
-			zhangId: {
-				type: String,
-			},
-			currentTabNumber: {
-				type: Number,
-			},
-			tipFlag: {
-				type: String,
-			},
-
-		},
-		methods: {
-			// 游客弹窗---确定
-			ykConfirm() {
-				uni.redirectTo({
-					url: '/pages/login/index'
-				});
-			},
-
-			switchTab(path, index) {
-				if (path !== '/pages/game/index') {
-					this.currentTab = index;
-				}
-				if (getUserIdentity() == 'Visitor') {
-					if (path === '/pages/game/index') {
-						this.$refs.youkeDialogRef.handleShow();
-						return;
-					}
-					uni.redirectTo({
-						url: path + '?nianji=' + this.nianji + '&cardId=' + this.cardId + '&zhangId=' +
-							this.zhangId+ '&tipFlag=' + this.tipFlag
-					});
-				} else {
-					if (path === '/pages/game/index') {
-						// 游戏需要返回功能
-						uni.navigateTo({
-							url: path,
-							"animationType": "fade-in",
-							"animationDuration":0
-						});
-						return;
-					}
-					uni.navigateTo({
-						url: path,
-						"animationType": "fade-in",
-						"animationDuration":0
-					});
-				}
-
-			},
-
-		},
-		created() {
-
-			this.currentTab  =this.currentTabNumber
-		}
-	}
-</script>
-
-
-<style scoped>
-	.custom-tabbar {
-		display: flex;
-		justify-content: space-around;
-		align-items: center;
-		/* 其他样式 */
-	}
-
-	.tab-item {
-		flex: 1;
-		/* 样式 */
-	}
-
-	.tab-icon {
-		/* 图标样式 */
-	}
-</style>

+ 0 - 34
components/dialog/commonDialog.vue

@@ -1,34 +0,0 @@
-<!-- 中弹窗 二行文字 -->
-<template>
-	<uni-popup ref="dialogRef" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);">
-		<slot></slot>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	const props = defineProps({
-	  title: {
-	    type: String,
-	    default: '提示'
-	  },
-	});
-	const dialogRef = ref(null); // 索引
-
-	// 打开弹窗
-	function handleShow() {
-		dialogRef.value.open();
-	}
-	// 取消
-	function handleClose() {
-		dialogRef.value.close();
-	}
-	defineExpose({
-		handleShow,
-		handleClose
-	})
-</script>
-
-<style>
-</style>

+ 0 - 52
components/dialog/tipBigDialog.vue

@@ -1,52 +0,0 @@
-<!-- 大弹窗 三~四行文字 -->
-<template>
-	<uni-popup ref="tipBigPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);">
-	 <view class="ezy-tip-dialog tip-big-dialog">
-		<view class="tip-content-box">
-			<view class="tip-title">{{title}}</view>
-			<view class="tip-content">{{content}}</view>
-			<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 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
-		})
-</script>
-
-<style>
-</style>

+ 0 - 53
components/dialog/tipMiddleDialog.vue

@@ -1,53 +0,0 @@
-<!-- 中弹窗 二行文字 -->
-<template>
-	<uni-popup ref="tipMiddlePopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);">
-	 <view class="ezy-tip-dialog tip-middle-dialog">
-		<view class="tip-content-box">
-			<view class="tip-title">{{title}}</view>
-			<view class="tip-content">{{content}}</view>
-			<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 tipMiddlePopup = ref(null); // 索引
-	const $emit = defineEmits(['confirm-btn'])
-	// 打开弹窗
-	function handleShow() {
-		tipMiddlePopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		tipMiddlePopup.value.close();
-	}
-	// 确认
-	function confirmBtn(){
-		$emit('confirm-btn');
-		tipMiddlePopup.value.close();
-	}
-	defineExpose({
-			handleShow,
-			handleClose
-		})
-</script>
-
-<style>
-</style>

+ 0 - 52
components/dialog/tipSmallDialog.vue

@@ -1,52 +0,0 @@
-<!-- 小弹窗 一行文字 -->
-<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">
-		<view class="tip-content-box">
-			<view class="tip-title">{{title}}</view>
-			<view class="tip-content">{{content}}</view>
-			<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 $emit = defineEmits(['confirm-btn'])
-	// 打开弹窗
-	function handleShow() {
-		tipSmallPopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		tipSmallPopup.value.close();
-	}
-	// 确认
-	function confirmBtn(){
-		$emit('confirm-btn');
-		tipSmallPopup.value.close();
-	}
-	defineExpose({
-			handleShow
-		})
-</script>
-
-<style>
-</style>

+ 0 - 107
components/mta-scroll-list/mta-scroll-list.vue

@@ -1,107 +0,0 @@
-<template>
-	<view class="mta-refresh-list">
-		<slot></slot>
-	</view>
-</template>
-
-<script setup>
-	import {
-		onReachBottom,
-		onLoad,
-		onPullDownRefresh
-	} from "@dcloudio/uni-app"
-
-	import {
-		ref
-	} from "vue";
-
-	const props = defineProps({
-		refreshUrl: {
-			type: String,
-			default: '/api/admin/config'
-		},
-		options: {
-			type: Object,
-			default: () => {}
-		},
-		size: {
-			type: Number,
-			default: 10
-		}
-	})
-
-	const Emits = defineEmits(['pull-down-refresh', 'reach-buttom']);
-
-	/**
-	 * 页码
-	 */
-	const page = ref(1);
-
-	/**
-	 * @summary 将请求转换为promise
-	 */
-	const transformUniRequestToPromise = (config) =>
-		new Promise((resolve, reject) => {
-			uni.request({
-				...config,
-				success(data) {
-					resolve(data);
-				},
-				fail(err) {
-					reject(err);
-				},
-			});
-		});
-
-
-	/**
-	 * @summary 更新数据
-	 * @param {String} action  'pull-down-refresh' | 'reach-buttom'
-	 */
-	async function getData(action) {
-		try {
-			// 刷新页码重置
-			action === 'pull-down-refresh' && (page.value = 1);
-			// 触底页码 加1
-			action === 'reach-buttom' && (page.value++);
-
-			const opt = {
-				url: props.refreshUrl,
-				method: "POST",
-				data: {
-					page: page.value,
-					size: props.size,
-					...props.options
-				}
-			}
-
-			const data = await transformUniRequestToPromise(opt)
-
-			action === 'pull-down-refresh' && (uni.stopPullDownRefresh());
-
-			Emit(action, data)
-		} catch (err) {
-			console.log('错误', err)
-			uni.stopPullDownRefresh()
-		}
-	}
-
-	/**
-	 * @summary 下拉刷新
-	 */
-	onPullDownRefresh(() => getData('pull-down-refresh'));
-
-	/**
-	 * @summary 加载完成 首次进行下拉刷新
-	 */
-	onLoad(() => uni.startPullDownRefresh());
-
-	/**
-	 * @summary 触底更新
-	 */
-	onReachBottom(() => getData('reach-buttom'));
-</script>
-
-<style lang="scss">
-
-</style>

+ 0 - 105
components/points/uni-points.vue

@@ -1,105 +0,0 @@
-<template>
-	<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-		<view class="exam-score-dialog" :class="getDialogClass()">
-			<view class="score-content-box">
-				<view class="right-error-row">
-					<icon class="right-icon"></icon><text class="text-red">{{data.right}}</text>题
-					<icon class="error-icon"></icon><text class="text-red">{{data.wrong}}</text>题
-				</view>
-				<view class="text-score" v-if="!studyFlag">{{data.jifen}}</view>
-			</view>
-			<view class="score-btn-box">
-				<view @click="checkAnswer" class="ckst-btn"></view>
-				<view @click="goStudyContinue"  class="jxxx-btn" v-if="isLastZhang"></view>
-			</view>
-		</view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import {
-		ref,
-		reactive
-	} from "vue"
-	
-	const props = defineProps({
-		isLastZhang: {
-			type: Boolean,
-			default: true
-		},
-		// 当前是否已答过试题 0未答,1已答
-		studyFlag: {
-			type: Number,
-			default: 0
-		}
-	})
-	
-	const popupRef = ref(null)
-	const popup_background_color = `rgba(0,0,0,0.2)`; // 【弹出框模态层背景颜色】
-
-	const emits = defineEmits(['checkAnswer', 'goStudy']);
-
-	const data = reactive({
-		right: 0,
-		wrong: 0,
-		jifen: 0
-	})
-
-	// 切换成绩
-	function showPopup({
-		right,
-		wrong,
-		jifen
-	}) {
-		data.right = right;
-		data.wrong = wrong;
-		data.jifen = jifen;
-		popupRef.value.open()
-	}
-
-	function getDialogClass(){
-    const rate = Number(data.right)/(Number(data.right)+Number(data.wrong))
-    if(props.studyFlag === 0){
-      if (rate>0.5) {
-        // 高兴鹅
-        return 'score-happy-study-dialog'
-      } else {
-        // 沮丧鹅
-        return 'score-unhappy-study-dialog'
-      }
-			// return 'score-study-dialog';
-		}else{
-      if (rate>0.5) {
-        // 高兴鹅
-        return 'score-finish-happy-study-dialog'
-      } else {
-        // 沮丧鹅
-        return 'score-finish-unhappy-study-dialog'
-      }
-			// return 'score-finish-dialog';
-		}
-	}
-	function closePopup() {
-		popupRef.value.close()
-	}
-
-	// 查看答案
-	function checkAnswer() {
-		emits('checkAnswer');
-		closePopup();
-	}
-	// 继续学习
-	function goStudyContinue() {
-		emits('goStudy');
-		closePopup();
-	}
-
-	defineExpose({
-		showPopup
-	})
-</script>
-
-<style>
-
-</style>

+ 0 - 79
components/question/FillItem.vue

@@ -1,79 +0,0 @@
-<template>
-	<view>
-		<uni-popup type="bottom" background-color="#fff" ref="fillRef" class="FillPopup" :animation="true">
-			<view class="popup-content">
-				<input v-model.trim="result" @close="handleClose" :focus="focus" placeholder="请输入答案" :auto-blur="true" :adjust-position="true" style="position: z-index: 10;"
-					@blur="onBlur" @confirm="handleConfirm" class="my-textarea" type="text" />
-			</view>
-		</uni-popup>
-	</view>
-</template>
-
-<script setup>
-	import {
-		nextTick,
-		ref,
-		watch
-	} from "vue";
-	const fillRef = ref(null);
-	const result = ref('');
-	const focus = ref(false);
-	const emits = defineEmits(['blur']);
-	const props = defineProps({
-		value: {
-			type: String,
-			default: ''
-		},
-		index: {
-			type: Number,
-		}
-	})
-	
-	watch(() => props.value, (val) => {
-		result.value = val;
-	})
-
-	function handleClear() {
-		result.value = '';
-	}
-
-	function handleClose() {
-		focus.value = false;
-	}
-
-	function showPopup() {
-	
-		fillRef.value && fillRef.value.open();
-		nextTick(() => focus.value = true);
-	}
-
-	function handleConfirm() {
-		fillRef.value && fillRef.value.close();
-	}
-
-	function onBlur() {
-		emits("blur", {
-			result: result.value,
-			index: props.index
-		});
-		focus.value = false;
-	}
-
-	uni.$on("swiper-change", () => {
-		fillRef.value && fillRef.value.close()
-	})
-
-	defineExpose({
-		showPopup,handleClear
-	})
-</script>
-
-<style lang="scss" scoped>
-	.popup-content {
-		padding: 10px;
-	}
-	.my-textarea {
-		height: 36px;
-		line-height: 36px;
-	}
-</style>

+ 0 - 79
components/question/danxuan.vue

@@ -1,79 +0,0 @@
-<template>
-	<view v-if="question" class="ezy-danxuan-box">
-		<!-- 标题区域 -->
-		<view class="danxuan-title"></view>
-		<!-- 题干区域 -->
-		<rich-text :nodes="data.name" class="ezy-shiti-question"></rich-text>
-		<!-- 选项区域 -->
-		<view v-for="(item,index) in data.contents" class="danxuan-option-box" :class="formatClass(index)" :key="index">
-			<text class="option-change"  @click="onSelect(index)">{{item.number}}</text>
-			<rich-text :nodes="item.label" class="option-question"></rich-text>
-		</view>
-	</view>
-</template>
-
-<script setup>
-	import {
-		ref,
-		reactive,
-		watch
-	} from 'vue';
-	import {
-		useQuestionTools
-	} from "./useQuestionTools"
-	const {
-		getLetterByIndex
-	} = useQuestionTools();
-
-	const props = defineProps({
-		question: {
-			type: Object,
-		},
-		showError: {
-			type: Boolean,
-			default: false
-		}
-	})
-
-	const data = reactive({
-		name: '', //题干数据
-		contents: [], // 选项数据
-	})
-
-	watch(() => props.question, (val) => formatData(val), {
-		immediate: true
-	})
-
-	function formatClass(index) {
-		if (props.showError) {
-			return {
-				active_right: props.question.result == index,
-				showError: props.question.reply == index && props.question.result != index
-			}
-		} else {
-			return {
-				active: props.question.reply == index
-			}
-		}
-	}
-
-	function formatData(val) {
-		if (val) {
-			data.name = val.name;
-			data.contents = val.optList.map((item, index) => {
-				return {
-					label: item,
-					number: getLetterByIndex(index)
-				}
-			})
-		}
-	}
-
-	function onSelect(index) {
-		if (props.showError) {
-			return;
-		}
-		props.question.reply = index;
-	}
-</script>
-

+ 0 - 51
components/question/panduan.vue

@@ -1,51 +0,0 @@
-<template>
-	<view class="ezy-panduan-box">
-		<!-- 标题区域 -->
-		<view class="panduan-title"></view>
-		<!-- 题干区域 -->
-		<rich-text :nodes="question.name" class="ezy-shiti-question"></rich-text>
-		<!-- 选项区域 -->
-		<radio-group @change="radioChange" class="danxuan-option-box">
-			<label class="option-question" :class="formatClass('1')">
-				<radio value="1" :disabled="showError" :checked="question.reply == '1'"/>
-				<view>正确</view>
-			</label>
-			<label class="option-question" :class="formatClass('0')"> 
-				<radio value="0" :disabled="showError" :checked="question.reply == '0'"/>
-				<view>错误</view>
-			</label>
-		</radio-group>
-	</view>
-</template>
-
-<script setup>
-	const props = defineProps({
-		question: {
-			type: Object,
-		},
-		showError: {
-			type: Boolean,
-			default: false
-		}
-	})
-
-	function radioChange(e) {
-		if (props.showError) {
-			return;
-		}
-		props.question.reply = e.detail.value;
-	}
-	
-	function formatClass(index) {
-		if (props.showError) {
-			return {
-				active_right: props.question.result == index,
-				showError: props.question.reply == index && props.question.result != index
-			}
-		} else {
-			return {
-				active: props.question.reply == index
-			}
-		}
-	}
-</script>

+ 0 - 141
components/question/tiankong.vue

@@ -1,141 +0,0 @@
-<template>
-	<view class="ezy-tiankong-box">
-		<!-- 标题区域 -->
-		<view class="tiankongn-title"></view>
-		<!-- 显示填空后的文本 -->
-		<view class="ezy-shiti-question" v-html="formattedText" :question="question" :myflag="myflag"
-			:change:myflag="TK.updateFlag" :change:question="TK.watchQuestionChange"></view>
-		<!-- 提供与占位符数量相匹配的输入框 -->
-	<!-- 	<template v-for="(placeholder, index) in placeholders" :key="index">
-			<FillItem :value="question.reply[index]" :ref="`popup${index}Ref`" :index="index" @blur="onBlur"></FillItem>
-		</template> -->
-	</view>
-</template>
-
-<script>
-	// import FillItem from "./FillItem.vue";
-	export default {
-		// components: {
-		// 	FillItem
-		// },
-		props: {
-			placeholders: { // 占位符
-				type: Array,
-				required: true
-			},
-			question: {
-				type: Object,
-			},
-			showError: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				myflag: 0
-			}
-		},
-		computed: {
-			// 计算属性,用于生成填空后的文本
-			formattedText() {
-				let result = this.question.name;
-				this.placeholders.forEach((placeholder, index) => {
-					const regex2 = new RegExp(`\\<img `, 'g');
-					result = result.replace(regex2, '<image ');
-					// 使用正则表达式全局替换占位符
-					const regex = new RegExp(`\\${placeholder}`, 'g');
-					if (this.showError) {
-						// 答题状态默认错误
-						let answer_status = 'showError';
-						// 更新答题状态正确
-						this.question.reply[index] && this.question.result[index].some(citem => citem === this
-							.question.reply[index].trim()) && (answer_status = 'active_right');
-						result = result.replace(regex,
-							`<view class="tk-input-box ${answer_status}"><input class="tiankong-input ${answer_status}" style="width: 50px;margin: 0 3px" id="t_${this.question.stId}_${index}" readonly data-index="${index}" value="${this.question.reply[index]}" /></view>`
-						);
-
-					} else {
-						result = result.replace(regex,
-							`<view class="tk-input-box"><input class="tiankong-input" style="width: 50px;margin: 0 3px" id="t_${this.question.stId}_${index}" readonly data-index="${index}" value="${this.question.reply[index]}" /></view>`
-						);
-
-					}
-				});
-				this.myflag++;
-				return result;
-			},
-		},
-		methods: {
-			setResult(data) {
-				const {
-					index,
-					result
-				} = data;
-				this.question.reply[index] = result;
-			},
-			onBlur(data) {
-				this.setResult(data);
-			},
-			showPopup({index}) {
-				// this.$refs[str][0].showPopup();
-				uni.$emit('tiankong-fillItem',{ index,question:this.question})
-			}
-		},
-		created() {
-			uni.$on('tiankong-setResult',({index,stId,result}) => {
-				if (this.question.stId === stId) {
-					this.setResult({index, result})
-				}
-			})
-		}
-	}
-</script>
-
-<script module="TK" lang="renderjs">
-	export default {
-		props: {
-			showError: {
-				type: Boolean,
-				default: false
-			}
-		},
-		data() {
-			return {
-				myQ: null
-			}
-		},
-		methods: {
-			updateFlag() {
-				this.initListener(this.myQ)
-			},
-			updateFn(e) {
-				// const str = `popup${e.target.dataset.index}Ref`;
-				this.$ownerInstance.callMethod('showPopup', {index: e.target.dataset.index});
-			},
-
-			watchQuestionChange(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.myQ = newValue;
-					this.initListener(newValue)
-				}
-			},
-
-			initListener(question) {
-				if (!question) {
-					return;
-				}
-				
-				if (this.showError) {
-					return;
-				}
-				
-				question.result.forEach((item, index) => {
-					const dom = document.getElementById(`t_${question.stId}_${index}`)
-					dom && dom.addEventListener('focus', (e) => this.updateFn(e))
-				})
-			},
-		},
-	}
-</script>
-

+ 0 - 12
components/question/useQuestionTools.js

@@ -1,12 +0,0 @@
-export function useQuestionTools() {
-	function getLetterByIndex(index) {
-		let letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
-		if (index < 0 || index > 26) {
-			return '?';
-		}
-		return letters.charAt(index);
-	}
-	return {
-		getLetterByIndex
-	}
-}

+ 0 - 90
components/question/yingyu/danxuan.vue

@@ -1,90 +0,0 @@
-<template>
-	<view v-if="question" class="ezy-yingyu-danxuan-box">
-		<!-- 标题区域 -->
-		<view class="yingyu-danxuan-title"></view>
-		<!-- 题干区域 -->
-		<textReplaceIconVue :code="code" :question="question" :text="question.name" :placeholders="placeholders" class="ezy-shiti-question">
-		</textReplaceIconVue>
-		<!-- 选项区域 -->
-		<view v-for="(item,index) in data.contents" class="yingyu-danxuan-option-box" :class="formatClass(index)" :key="index">
-			<text class="option-change" @click="onSelect(index)">{{item.number}}</text>
-			<textReplaceIconVue :code="code" :question="question" :text="item.label" :placeholders="placeholders" class="option-question">
-			</textReplaceIconVue>
-		</view>
-	</view>
-</template>
-
-<script setup>
-	import {
-		ref,
-		reactive,
-		watch
-	} from 'vue';
-	import {
-		useQuestionTools
-	} from "../useQuestionTools"
-
-	import textReplaceIconVue from './textReplaceIcon.vue'
-	
-	const {
-		getLetterByIndex
-	} = useQuestionTools();
-	
-	const props = defineProps({
-		question: {
-			type: Object,
-		},
-		showError: {
-			type: Boolean,
-			default: false
-		},
-		placeholders: { // 占位符
-			type: Array,
-			required: true
-		},
-		code: {
-			type: String,
-		},
-	})
-	const data = reactive({
-		name: '', //题干数据
-		contents: [], // 选项数据
-	})
-	watch(() => props.question, (val) => formatData(val), {
-		immediate: true
-	})
-	
-	function formatClass(index) {
-		if (props.showError) {
-			return {
-				active_right: props.question.result == index,
-				showError: props.question.reply == index && props.question.result != index
-			}
-		} else {
-			return {
-				active: props.question.reply == index
-			}
-		}
-	}
-	
-	function formatData(val) {
-		if (val) {
-			data.name = val.name;
-			data.contents = val.optList.map((item, index) => {
-				return {
-					label: item,
-					number: getLetterByIndex(index)
-				}
-			})
-		}
-	}
-	
-	function onSelect(index) {
-		if (props.showError) {
-			return;
-		}
-		props.question.reply = index;
-	}
-
-</script>
-

+ 0 - 187
components/question/yingyu/danxuanCeshi.vue

@@ -1,187 +0,0 @@
-<template>
-	<view>
-		<view>12312312</view>
-		<!-- 选项区域 -->
-		<view v-for="(item,index) in data.contents" class="yingyu-danxuan-option-box" :key="index">
-			<text class="option-change">{{item.number}}</text>
-			<view v-if="item.placeholders.length ==1"  @click="ceshiAA(item,index)">
-					<rich-text :nodes="item.neirong" class="option-question"></rich-text>
-			</view>
-			<view v-else v-for="(item2,index2) in item.placeholders"  @click="ceshiBB(item2,index2)">
-					<rich-text :nodes="item.neirong[index2]" class="option-question"></rich-text>
-			</view>
-		</view>
-	</view>
-</template>
-<script setup>
-	import {
-		ref,
-		reactive,
-		onMounted,
-		watch
-	} from 'vue';
-	import {
-		useQuestionTools
-	} from "../useQuestionTools"
-
-	import textReplaceIconVue from './textReplaceIcon.vue'
-
-	let richTextNodes = [{
-		name: 'div',
-		attrs: {
-			class: 'div-class',
-		},
-		children: [{
-			type: 'text',
-			text: 'Hello&nbsp;uni-app!'
-		}]
-	}]
-	const {
-		getLetterByIndex
-	} = useQuestionTools();
-
-	const props = defineProps({
-		question: {
-			type: Object,
-		},
-		showError: {
-			type: Boolean,
-			default: false
-		},
-		placeholders: { // 占位符
-			type: Array,
-			required: true
-		},
-		code: {
-			type: String,
-		}
-	})
-	const data = reactive({
-		name: '', //题干数据
-		contents: [], // 选项数据
-	})
-	let modifiedHtml = ''
-	let index11 = ''
-	let number = 0
-	const iconHtml = ref('<p class="yingyu-canplay-img" data-index="0">喇叭1</p>')
-	const dynamicContentRef = ref(null);
-	watch(() => props.question, (val) => formatData(val), {
-		immediate: true
-	})
-
-
-	function itemclick(event) {
-		console.log('event', event);
-	}
-	function ceshiAA(item,index){
-		console.log('item', item);
-		console.log('index', index);
-	}
-	function ceshiBB(item,index){
-		console.log('item2', item);
-		console.log('index2', index);
-	}
-	function formatData(val) {
-		if (val) {
-			data.name = val.name;
-			data.contents = val.optList.map((item, index) => {
-				//	console.log('item,',item);
-				const iconHtml =
-					`<img class="yingyu-canplay-img">`;; // 这里使用了一个简单的图标符号
-				modifiedHtml = item.neirong.replace(/&&&/g, iconHtml);
-				let regex = /<p[>]*>([\s\S]*?)<\/p>/g;
-				let pTagCount = (modifiedHtml.match(/<p>/g) || []).length;
-				let result;
-				if (pTagCount === 1) {
-				  // 如果只有一个<p>标签,保持原样
-				  result = modifiedHtml;
-				} else if (pTagCount > 1) {
-				  // 如果有多个<p>标签,转换成数组
-				  result = modifiedHtml.match(regex);
-				} else {
-				  // 如果没有<p>标签,可以返回一个空数组或null,根据实际需求决定
-				  result = [];
-				}
-				
-			//	console.log('modifiedHtml', modifiedHtml);
-				return {
-					neirong: result,
-					number: getLetterByIndex(index),
-					placeholders: getPlaceholders(item.neirong)
-				}
-			})
-			console.log('data', data);
-		}
-	}
-
-	function getPlaceholders(html) {
-			console.log('html',html);
-		// 使用正则表达式匹配所有&&&,并返回一个数组,每个元素代表一个占位符
-		return html.match(/&&&/g) || [];
-	}
-	let audioContext = null;
-	let isPlaying = false;
-	let currentIndex = -1;
-
-
-	function initAudioContext() {
-		if (!audioContext) {
-			audioContext = uni.createInnerAudioContext();
-
-			// 监听音频播放状态
-			audioContext.onPlay(() => {
-				isPlaying = true;
-				console.log('音频开始播放');
-			});
-
-			audioContext.onPause(() => {
-				isPlaying = false;
-				console.log('音频暂停播放');
-			});
-
-			audioContext.onStop(() => {
-				isPlaying = false;
-				console.log('音频停止播放');
-			});
-
-			audioContext.onEnded(() => {
-				isPlaying = false;
-				console.log('音频播放结束');
-			});
-		}
-	}
-
-	function playAudio(src) {
-		if (!audioContext) {
-			initAudioContext();
-		}
-		audioContext.src = src;
-		audioContext.play();
-	}
-
-	function audioCreat(item, index, placeholderIndex) {
-
-		console.log('item', item);
-		console.log('index', index);
-		console.log('placeholderIndex', placeholderIndex);
-		return
-		// 如果 index 变化了,或者当前没有音频在播放,就播放新音频
-		if (index !== currentIndex || !isPlaying) {
-			// 如果之前有音频在播放,先暂停
-			if (isPlaying) {
-				audioContext.pause();
-			}
-			// 更新当前索引和播放状态
-			currentIndex = index;
-			playAudio(item.audio);
-		} else {
-			// 如果 index 没变化且音频正在播放,就暂停音频
-			if (isPlaying) {
-				audioContext.pause();
-			} else {
-				// 如果 index 没变化但音频没播放,就播放音频
-				playAudio(item.audio);
-			}
-		}
-	}
-</script>

+ 0 - 89
components/question/yingyu/mtaRadio.vue

@@ -1,89 +0,0 @@
-<template>
-	<view></view>
-</template>
-
-<script setup>
-	import {
-		useAudio
-	} from './useAudio';
-	import { onUnmounted } from "vue"
-	
-	let historyData = null;
-	const {
-		handlePlay,
-		handleStop,
-		innerAudioContext
-	} = useAudio();
-	let num = 0;
-	let alreadyplay = false; // 是否是首次播放
-	function doPlay(data) {
-		// console.log('dddd')
-		if (historyData) {
-			if (historyData.stId == data.stId && historyData.index == data.index) {
-				// 播放中切换其他音频时发出事件 同题切换音频
-				historyData = null
-				// console.log('切换同频 暂停或播放')
-				uni.$emit('reset-playing-status', historyData);
-				return;
-			}
-			
-			if (historyData.stId == data.stId && historyData.index != data.index) {
-				// 播放中切换其他音频时发出事件 同题切换音频
-				uni.$emit('reset-playing-status', historyData);
-				// console.log('切换同题 不同音频')
-				handlePlay(data)
-				historyData = data;
-				return;
-			}
-
-			if (historyData.stId != data.stId) {
-				// 播放中切换其他音频时发出事件 切换其他试题
-				uni.$emit('reset-playing-status', historyData);
-				historyData = null
-				// console.log('切换不同题')
-				return;
-			}
-		}
-	
-		if (num == 1) {
-			// console.log('执行播放 已拦截')
-			num = 0;
-			alreadyplay = true
-			return;
-		}
-		// console.log('执行播放')
-		handlePlay(data)
-		historyData = data;
-		num++;
-		if (!alreadyplay) {
-			num = 0;
-			alreadyplay = true;
-		}
-	}
-	function doPause() {
-		handleStop()
-	}
-	function doStop(){
-		handleStop()
-	}
-	uni.$emit('swiper-change', () => {
-		num = 0;
-	})
-	// 播放
-	uni.$on('do-yy-audio-play', doPlay)
-	// 暂停
-	uni.$on('do-yy-audio-stop', doPause)
-	// 销毁
-	uni.$on('destory-stop', doStop)
-	onUnmounted(() => {
-		// 播放
-		uni.$off('do-yy-audio-play', doPlay)
-		// 暂停
-		uni.$off('do-yy-audio-stop', doPause)
-		// 销毁
-		uni.$off('destory-stop', doStop)
-	})
-</script>
-
-<style>
-</style>

+ 0 - 240
components/question/yingyu/textReplaceIcon.vue

@@ -1,240 +0,0 @@
-<template>
-	<view v-html="formattedText" :myflag="myflag" :question="question" @click.native="handleClick"
-		:change:myflag="YY.updateFlag" :change:question="YY.watchQuestionChange"></view>
-</template>
-
-<script>
-	import {
-		debounce
-	} from '@/utils/common';
-	import {UseAudio} from "./useAudio.js"
-	export default {
-		props: {
-			placeholders: { // 占位符
-				type: Array,
-				required: true
-			},
-			text: {
-				type: String,
-			},
-			question: {
-				type: Object,
-			},
-			code: {
-				type: String
-			},
-		},
-		data() {
-			return {
-				myflag: 0,
-				isplaying: null,
-			}
-		},
-		computed: {
-			// 计算属性,用于生成填空后的文本
-			formattedText() {
-				let result = this.text;
-				this.placeholders.forEach((placeholder, index) => {
-					// 使用正则表达式全局替换占位符
-					const regex = new RegExp(`\\${placeholder}`, 'g');
-					if (!this.isplaying) {
-
-						const cId = this.code ? `t_${this.question.stId}_${index}_${this.code}` :
-							`t_${this.question.stId}_${index}`
-						result = result.replace(regex,
-							`<view	class="yingyu-canplay-img" id="${cId}"></view>`
-						);
-					} else if (this.isplaying && this.question.stId == this.isplaying.stId && this.isplaying
-						.index == index) {
-						const cId = this.code ? `t_${this.question.stId}_${index}_${this.code}` :
-							`t_${this.question.stId}_${index}`
-						result = result.replace(regex,
-							`<view	class="yingyu-playing-img" id="${cId}"></view>`
-						);
-					} else {
-						const cId = this.code ? `t_${this.question.stId}_${index}_${this.code}` :
-							`t_${this.question.stId}_${index}`
-						result = result.replace(regex,
-							`<view	class="yingyu-canplay-img" id="${cId}"></view>`
-						);
-					}
-				});
-				this.myflag++;
-				return result;
-			},
-		},
-		methods: {
-			onResetPlayStatus(data) {
-				if (this.isplaying) {
-					if (data.stId == this.isplaying.stId && data.index == this.isplaying.index) {
-						this.isplaying = null;
-					}
-				}
-			},
-			onYYAudioPlaying(data) {
-				if (this.isplaying) {
-					// 存在播放实例 并且播放非同一音频
-					if (this.isplaying.stId != data.stId) {
-						this.isplaying = null;
-					}
-				} else {
-					// 不存在播放实例 
-					this.isplaying = data;
-				}
-			},
-			onYYAudioError() {
-				this.isplaying = null;
-			},
-			onYYAudioEnd() {
-				this.isplaying = null;
-			},
-			onDestoryStop() {
-				this.isplaying = null;
-			},
-			onSwiperChange() {
-				this.isplaying = null;
-				UseAudio.create().instance.stop();
-			},
-			onQuestionJiexiClose() {
-				this.isplaying = null;
-				UseAudio.create().instance.stop();
-			},
-			onUnitTestSubmit() {
-				this.isplaying = null;
-				UseAudio.create().instance.stop();
-			},
-			onBackOutPage() {
-				this.isplaying = null;
-				UseAudio.create().instance.stop();
-			},
-			
-			handleClick() {
-				this.$emit('itemclick')
-			},
-			audioClick(data) {
-				UseAudio.create().instance.play(data);
-			},
-		},
-		created() {
-			// 切换不同播放音频时 重置状态
-			uni.$on('reset-playing-status', this.onResetPlayStatus)
-			// 音频播放
-			uni.$on('yy-audio-playing', this.onYYAudioPlaying)
-			// 音频异常  重置音频
-			uni.$on('yy-audio-error', this.onYYAudioError)
-			// 音频自然播放结束  重置音频
-			uni.$on('yy-audio-end', this.onYYAudioEnd)
-			// 音频销毁 重置音频
-			uni.$on('destory-stop', this.onDestoryStop)
-			// 试题切换 重置音频
-			uni.$on('swiper-change',this.onSwiperChange)
-			// 解析关闭 重置音频
-			uni.$on('question-jiexi-close', this.onQuestionJiexiClose)
-			uni.$on('unitTest-submit', this.onUnitTestSubmit)
-			uni.$on('back-outpage', this.onBackOutPage)
-		},
-		destroyed() {
-			// 切换不同播放音频时 重置状态
-			uni.$off('reset-playing-status', this.onResetPlayStatus)
-			// 音频播放
-			uni.$off('yy-audio-playing', this.onYYAudioPlaying)
-			// 音频异常  重置音频
-			uni.$off('yy-audio-error', this.onYYAudioError)
-			// 音频自然播放结束  重置音频
-			uni.$off('yy-audio-end', this.onYYAudioEnd)
-			// 音频销毁 重置音频
-			uni.$off('destory-stop', this.onDestoryStop)
-			// 试题切换 重置音频
-			uni.$off('swiper-change',this.onSwiperChange)
-			// 解析关闭 重置音频
-			uni.$off('question-jiexi-close', this.onQuestionJiexiClose)
-			uni.$off('unitTest-submit', this.onUnitTestSubmit)
-			uni.$off('back-outpage', this.onBackOutPage)
-			
-		
-		}
-	}
-</script>
-<script module="YY" lang="renderjs">
-	export default {
-		data() {
-			return {
-				myQ: null,
-				callbacks: [],
-				status: '',
-			}
-		},
-		methods: {
-			debounce(func, wait) {
-				let timeout;
-
-				return function(...args) {
-					// 清除之前的定时器
-					clearTimeout(timeout);
-
-					// 设置新的定时器
-					timeout = setTimeout(() => {
-						func.apply(this, args);
-					}, wait);
-				};
-			},
-			updateFlag() {
-				this.initListener(this.myQ)
-			},
-			updateFn({
-				stId,
-				index
-			}) {
-				const url = this.myQ.audioList[index]
-				this.$ownerInstance.callMethod('audioClick', {
-					stId,
-					index,
-					url
-				});
-			},
-
-			watchQuestionChange(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.myQ = newValue;
-					this.initListener(newValue)
-				}
-			},
-			initListener(question) {
-				if (!question) {
-					return;
-				}
-		
-				this.callbacks = [];
-				question.placeholders.forEach((item, index) => {
-					const cId = question.code ? `t_${question.stId}_${index}_${question.code}` :
-						`t_${question.stId}_${index}`
-					const dom = document.getElementById(cId)
-					if (dom) {
-						const qaindex = this.callbacks.findIndex(item => item.index === index)
-						if (qaindex > -1) {
-							dom && dom.removeEventListener('click', this.callbacks[qaindex].callback);
-							this.callbacks = this.callbacks.filter(item => item.index != qaindex);
-						}
-						const callbackFn = this.debounce(() => {
-							this.updateFn({
-								stId: question.stId,
-								index
-							})
-						}, 10)
-						
-						this.callbacks.push({
-							index: index,
-							stId: question.stId,
-							callback: callbackFn
-						})
-						dom && dom.addEventListener('click', this.callbacks.find(cIte => cIte.index === index)
-							.callback)
-					}
-
-				})
-			},
-		},
-	}
-</script>
-<style>
-</style>

+ 0 - 181
components/question/yingyu/useAudio.js

@@ -1,181 +0,0 @@
-import {
-	nextTick,
-	ref,
-	onUnmounted
-} from "vue";
-import {
-	debounce
-} from "@/utils/common";
-
-export function useAudio() {
-	const innerAudioContext = ref(null);
-	const options = ref(null);
-
-	function createAudio(audioUrl) {
-		const innerAudioContext = uni.createInnerAudioContext();
-		innerAudioContext.autoplay = false;
-		innerAudioContext.src = audioUrl;
-		innerAudioContext.onPlay(() => {
-			// 播放
-			uni.$emit('yy-audio-playing', options);
-		});
-		innerAudioContext.onError((res) => {
-			uni.$emit('yy-audio-error')
-		});
-		innerAudioContext.onEnded(() => {
-			// 播放结束
-			uni.$emit('yy-audio-end', options)
-		})
-		return innerAudioContext;
-	}
-
-	function changeSource(url) {
-		innerAudioContext.src = url;
-		innerAudioContext.currentTime = 0;
-	}
-
-	const debuncePlay = debounce((myOption) => {
-		innerAudioContext.value = createAudio(myOption.url);
-		innerAudioContext.value.play()
-	}, 50)
-
-	function handlePlay(data) {
-		if (innerAudioContext.value) {
-			innerAudioContext.value.pause();
-			innerAudioContext.value.destroy();
-			innerAudioContext.value = null;
-			uni.$emit('destory-stop')
-		}
-		options.value = data;
-		debuncePlay(data);
-	}
-
-	function handleStop() {
-		if (innerAudioContext.value) {
-			innerAudioContext.value.pause();
-			innerAudioContext.value.destroy();
-			innerAudioContext.value = null;
-			uni.$emit('destory-stop')
-		}
-	}
-
-	function doBackOutpage() {
-		handleStop();
-	}
-
-	function doRepeatPlayToStop() {
-		handleStop();
-	}
-
-	function doSwiperChange() {
-		handleStop();
-	}
-
-	function doQuestionJiexiClose() {
-		handleStop();
-	}
-
-	function doUnitestSubmit() {
-		handleStop();
-	}
-
-	// 离开当前页面 停止播放
-	uni.$on('back-outpage', doBackOutpage)
-
-	// 播放过程中点击同一个视频触发终止
-	uni.$on('repeat-play-to-stop', doRepeatPlayToStop)
-
-	// 试题切换停止播放
-	uni.$on('swiper-change', doSwiperChange)
-	// 解析关闭 停止播放
-	uni.$on('question-jiexi-close', doQuestionJiexiClose)
-	// 交卷 停止播放
-	uni.$on('unitTest-submit', doUnitestSubmit)
-	onUnmounted(() => {
-		uni.$off('back-outpage', doBackOutpage)
-		uni.$off('repeat-play-to-stop', doRepeatPlayToStop)
-		// 试题切换停止播放
-		uni.$off('swiper-change', doSwiperChange)
-		// 解析关闭 停止播放
-		uni.$off('question-jiexi-close', doQuestionJiexiClose)
-		// 交卷 停止播放
-		uni.$off('unitTest-submit', doUnitestSubmit)
-	})
-	return {
-		options,
-		handlePlay,
-		handleStop,
-		innerAudioContext
-	}
-}
-
-
-export class UseAudio {
-	instance = null;
-	options = null;
-	doPlay = debounce((data) => {
-		if (this.options) {
-			if(this.options.stId == data.stId && this.options.index == data.index) {
-				// console.log('同一个音频播放应该暂停')
-				uni.$emit('reset-playing-status', this.options)
-				this.innerAudioContext.pause();
-				this.destory();
-				this.init();
-				return;
-			}
-			
-			// 切换不同音频
-			if(this.options.stId !== data.stId || this.options.index != data.index) {
-				// console.log('切换不同音频')
-				uni.$emit('reset-playing-status', this.options)
-			}
-		}
-		this.options = data;
-		this.innerAudioContext.src = data.url;
-		this.innerAudioContext.play();
-	},50)
-	constructor() {
-		this.init();
-	}
-
-	init() {
-		this.innerAudioContext = uni.createInnerAudioContext();
-		this.innerAudioContext.autoplay = false;
-		this.innerAudioContext.onPlay(() => {
-			uni.$emit("yy-audio-playing", this.options);
-		});
-		this.innerAudioContext.onError(() => {
-			uni.$emit("yy-audio-error", this.options);
-		});
-		this.innerAudioContext.onEnded(() => {
-			uni.$emit("yy-audio-end", this.options);
-		});
-	}
-
-	static create() {
-		if (this.instance) {
-			return this;
-		}
-		this.instance = new UseAudio()
-		return this;
-	}
-
-
-	play(data) {
-		this.doPlay(data);
-	}
-
-	pause() {
-		this.innerAudioContext.pause();
-	}
-
-	stop() {
-		this.innerAudioContext.stop();
-	}
-
-	destory() {
-		this.innerAudioContext.destroy();
-		this.innerAudioContext = null;
-		this.options = null;
-	}
-}

+ 0 - 267
components/questionJiexi/questionJiexi.vue

@@ -1,267 +0,0 @@
-<template>
-	<view>
-		<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-			mask-background-color="rgba(255, 255, 255, 0.6);" class="ezy-popup-width-all">
-			<view class="ezy-dajx-page"  :style="{backgroundImage: 'url(' + courseBjFun() + ')'}">
-				<view class="icon-title-navBar-box">
-					<view @click="handleBack" class="nav-bar-icon"></view>
-					<view class="nav-bar-title">单元测试</view>
-				</view>
-				<view class="shiti-frame-box">
-					<view class="dajx-content-box">
-						<!-- 思路分析 -->
-						<view class="slfx-title"></view>
-						<!-- <view class="slfx-content"> {{data.answer}}</view> -->
-						<rich-text class="slfx-content" :nodes="data.answer"></rich-text>
-
-						<!-- 视频讲解 -->
-						<view class="spjj-title"></view>
-						<view class="ezy-video-box">
-							<!-- 这里放视频 ↓ -->
-							<view class="ezy-video" ref="videoContent" id="wgy-player-test" :playAuth="playAuth"
-								:change:playAuth="renderScript.receiveMsg" :videoId="videoId"
-								:change:videoId="renderScript.videoIdFun" :hideFlag="hideFlag"
-								:change:hideFlag="renderScript.hideFlagFun" :seekTime="seekTime"
-								:change:seekTime="renderScript.seekTimeFun">
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-	</view>
-</template>
-<script>
-	import {
-		onLoad,
-		onReady
-	} from '@dcloudio/uni-app';
-	import {
-		getVideoAuth,
-	} from "@/api/shipin.js"
-	export default {
-		props: {
-			cardId: {
-				type: [String,Number],
-				default: 1
-			}
-		},
-		data() {
-			return {
-				pageData: null, //上个页面获取的视频参数(视频id)
-				playAuth: "", //播放凭证
-				progressMarkers: [],
-				videoId: "", //阿里云视频id
-				seekTime: '',
-				hideFlag: 'show',
-				data: {},
-			}
-		},
-		onHide() {
-			console.log('onHideonHideonHideonHide');
-			this.hideFlag = 'hide'
-		},
-		onUnload() {
-			console.log('onUnloadonUnloadonUnloadonUnloadonUnload');
-			this.hideFlag = 'hide'
-		},
-		methods: {
-			showPopup(item) {
-				this.data = item;
-				this.videoId = item.jiangjie
-				//this.videoId = 'b997f16cb9cb474cb93526cff77d8801'
-				//	this.progressMarkers = item.progressMarkers
-				this.getLive(); //获取播放凭证
-				this.$refs.popupRef.open()
-			},
-			handleBack(item) {
-				this.$refs.popupRef.close()
-			},
-			getLive() {
-				let req = {
-					videoId: this.videoId
-				}
-				getVideoAuth(req).then(res => {
-					this.playAuth = res.data
-				})
-			},
-			markersClick(data) {
-				this.seekTime = ""
-				this.$nextTick(() => {
-					this.seekTime = data.offset
-				});
-			},
-			courseBjFun() {
-				const cardId = Number(this.cardId);
-				switch (cardId) {
-					case 1:
-						return 'static/images/course/couse-shuxue-bj.png'
-						break;
-					case 2:
-						return 'static/images/course/course-yingyu-bj.png'
-						break;
-					default:
-						break;
-				}
-			}
-		
-		},
-		created() {
-			// console.log("getLive")
-			// this.getLive(); //获取播放凭证
-
-		},
-
-	}
-</script>
-
-
-
-<script module="renderScript" lang="renderjs">
-	export default {
-		mounted() {
-			console.log("renderScript1")
-			// 在适合的生命周期,通过script和link标签引入播放器sdk、css
-		},
-		data() {
-			return {
-				player: null,
-				playAuth: '',
-				videoId: '',
-				progressMarkers: [],
-				seekTime: '',
-				isFirst: -1,
-			}
-		},
-		methods: {
-			receiveMsg(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.playAuth = newValue
-					this.loadWebPlayerSDK()
-				}
-			},
-			videoIdFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.videoId = newValue
-				}
-			},
-			hideFlagFun(newValue, oldValue, ownerInstance, instance) {
-				if (this.player) {
-					this.player.pause()
-				}
-
-			},
-			progressMarkersMsg(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.progressMarkers = newValue
-				}
-			},
-			seekTimeFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					console.log(newValue, 'newValuenewValuenewValuenewValuenewValue')
-					console.log(this.player.getStatus(), 'newValuenewValuenewValuenewValuenewValue')
-					this.player.play()
-					this.player.seek(newValue)
-					//	this.player.seek(newValue)
-				}
-			},
-			playAli() {
-				if (this.isFirst == 0) {
-					this.isFirst = -1
-					return;
-				}
-				this.player = null;
-				//配置播放器
-				var player = new Aliplayer({
-					id: "wgy-player-test",
-					"vid": this.videoId,
-					"playauth": this.playAuth,
-					extraInfo: { poster: 'noposter' },
-					// "playConfig": {
-					// 	"EncryptType": 'AliyunVoDEncryption'
-					// },
-					"skinLayout": [{
-							"name": "bigPlayButton",
-							"align": "blabs",
-							"x": 30,
-							"y": 80
-						},
-						{
-							"name": "controlBar",
-							"align": "blabs",
-							"x": 0,
-							"y": 0,
-							"children": [{
-									"name": "progress",
-									"align": "blabs",
-									"x": 0,
-									"y": 44
-								},
-								{
-									"name": "playButton",
-									"align": "tl",
-									"x": 15,
-									"y": 12
-								},
-								{
-									"name": "fullScreenButton",
-									"align": "tr",
-									"x": 10,
-									"y": 12
-								},
-								{
-								          "name": "timeDisplay",
-								          "align": "tr",
-								          "x": 10,
-								          "y": 5
-								        }
-							]
-						}
-					],
-					"qualitySort": "asc",
-					"format": "mp4",
-					"mediaType": "video",
-					"encryptType": 1,
-					"progressMarkers": this.progressMarkers,
-					"width": '100%',
-					"height": '500px',
-					"autoplay": false,
-					"isLive": false,
-					"rePlay": false,
-					"playsinline": true,
-					"preload": false,
-					"controlBarVisibility": "hover",
-					"useH5Prism": true
-
-				}, function(player) {});
-				this.player = player;
-				player.one('canplay', function() {
-					console.log('canplay', this.player.tag);
-					player.tag.play();
-
-				});
-				this.isFirst ++;
-			},
-
-
-			loadWebPlayerSDK() {
-				return new Promise((resolve, reject) => {
-					const s_tag = document.createElement('script'); // 引入播放器js
-					s_tag.type = 'text/javascript';
-					s_tag.src = 'https://g.alicdn.com/de/prismplayer/2.9.6/aliplayer-min.js';
-					s_tag.charset = 'utf-8';
-					s_tag.onload = () => {
-						this.playAli()
-						resolve();
-					}
-					document.body.appendChild(s_tag);
-					const l_tag = document.createElement('link'); // 引入播放器css
-					l_tag.rel = 'stylesheet';
-					l_tag.href =
-						'https://g.alicdn.com/de/prismplayer/2.9.6/skins/default/aliplayer-min.css';
-					document.body.appendChild(l_tag);
-				});
-			},
-		}
-	}
-</script>

+ 0 - 272
components/questionJiexi/questionJiexiYingyu.vue

@@ -1,272 +0,0 @@
-<template>
-	<view>
-		<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-			mask-background-color="rgba(255, 255, 255, 0.6);" class="ezy-popup-width-all">
-			<view class="ezy-dajx-page"  :style="{backgroundImage: 'url(' + courseBjFun() + ')'}">
-				<view class="icon-title-navBar-box">
-					<view @click="handleBack" class="nav-bar-icon"></view>
-					<view class="nav-bar-title">单元测试</view>
-				</view>
-				<view class="shiti-frame-box">
-					<view class="dajx-content-box">
-						<!-- 思路分析 -->
-						<view class="slfx-title"></view>
-						<!-- <view class="slfx-content"> {{data.answer}}</view> -->
-						<!-- <rich-text class="slfx-content" :nodes="data.answer"></rich-text> -->
-						<textReplaceIconVue :code="code" :question="data" :text="data.answer" :placeholders="data.placeholders" class="slfx-content"></textReplaceIconVue>
-
-						<!-- 视频讲解 -->
-						<view class="spjj-title" v-if="videoId"></view>
-						<view class="ezy-video-box" v-if="videoId" >
-							<!-- 这里放视频 ↓ -->
-							<view class="ezy-video" ref="videoContent" id="wgy-player-test" :playAuth="playAuth"
-								:change:playAuth="renderScript.receiveMsg" :videoId="videoId"
-								:change:videoId="renderScript.videoIdFun" :hideFlag="hideFlag"
-								:change:hideFlag="renderScript.hideFlagFun" :seekTime="seekTime"
-								:change:seekTime="renderScript.seekTimeFun">
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</uni-popup>
-	</view>
-</template>
-<script>
-	import textReplaceIconVue from '@/components/question/yingyu/textReplaceIcon.vue'
-	import {
-		onLoad,
-		onReady
-	} from '@dcloudio/uni-app';
-	import {
-		getVideoAuth,
-	} from "@/api/shipin.js"
-	export default {
-		components: {textReplaceIconVue},
-		props: {
-			cardId: {
-				type: [String,Number],
-				default: 1
-			},
-			code: {
-				type: String
-			}
-		},
-		data() {
-			return {
-				pageData: null, //上个页面获取的视频参数(视频id)
-				playAuth: "", //播放凭证
-				progressMarkers: [],
-				videoId: "", //阿里云视频id
-				seekTime: '',
-				hideFlag: 'show',
-				data: {},
-			}
-		},
-		onHide() {
-			this.hideFlag = 'hide'
-		},
-		onUnload() {
-			this.hideFlag = 'hide'
-		},
-		methods: {
-			showPopup(item) {
-				this.data = item;
-				if (item.jiangjie) {
-					this.videoId = item.jiangjie
-					this.getLive(); //获取播放凭证
-				}
-				this.$refs.popupRef.open()
-			},
-			handleBack(item) {
-				this.$refs.popupRef.close()
-				uni.$emit('question-jiexi-close')
-			},
-			getLive() {
-				let req = {
-					videoId: this.videoId
-				}
-				getVideoAuth(req).then(res => {
-					this.playAuth = res.data
-				})
-			},
-			markersClick(data) {
-				this.seekTime = ""
-				this.$nextTick(() => {
-					this.seekTime = data.offset
-				});
-			},
-			courseBjFun() {
-				const cardId = Number(this.cardId);
-				switch (cardId) {
-					case 1:
-						return 'static/images/course/couse-shuxue-bj.png'
-						break;
-					case 2:
-						return 'static/images/course/course-yingyu-bj.png'
-						break;
-					default:
-						break;
-				}
-			}
-		
-		},
-		created() {
-			// console.log("getLive")
-			// this.getLive(); //获取播放凭证
-
-		},
-
-	}
-</script>
-
-
-
-<script module="renderScript" lang="renderjs">
-	export default {
-		mounted() {
-			console.log("renderScript1")
-			// 在适合的生命周期,通过script和link标签引入播放器sdk、css
-		},
-		data() {
-			return {
-				player: null,
-				playAuth: '',
-				videoId: '',
-				progressMarkers: [],
-				seekTime: '',
-				isFirst: -1,
-			}
-		},
-		methods: {
-			receiveMsg(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.playAuth = newValue
-					this.loadWebPlayerSDK()
-				}
-			},
-			videoIdFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.videoId = newValue
-				}
-			},
-			hideFlagFun(newValue, oldValue, ownerInstance, instance) {
-				if (this.player) {
-					this.player.pause()
-				}
-
-			},
-			progressMarkersMsg(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.progressMarkers = newValue
-				}
-			},
-			seekTimeFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					console.log(newValue, 'newValuenewValuenewValuenewValuenewValue')
-					console.log(this.player.getStatus(), 'newValuenewValuenewValuenewValuenewValue')
-					this.player.play()
-					this.player.seek(newValue)
-					//	this.player.seek(newValue)
-				}
-			},
-			playAli() {
-				if (this.isFirst == 0) {
-					this.isFirst = -1
-					return;
-				}
-				this.player = null;
-				//配置播放器
-				var player = new Aliplayer({
-					id: "wgy-player-test",
-					"vid": this.videoId,
-					"playauth": this.playAuth,
-					extraInfo: { poster: 'noposter' },
-					// "playConfig": {
-					// 	"EncryptType": 'AliyunVoDEncryption'
-					// },
-					"skinLayout": [{
-							"name": "bigPlayButton",
-							"align": "blabs",
-							"x": 30,
-							"y": 80
-						},
-						{
-							"name": "controlBar",
-							"align": "blabs",
-							"x": 0,
-							"y": 0,
-							"children": [{
-									"name": "progress",
-									"align": "blabs",
-									"x": 0,
-									"y": 44
-								},
-								{
-									"name": "playButton",
-									"align": "tl",
-									"x": 15,
-									"y": 12
-								},
-								{
-									"name": "fullScreenButton",
-									"align": "tr",
-									"x": 10,
-									"y": 12
-								},
-								{
-								          "name": "timeDisplay",
-								          "align": "tr",
-								          "x": 10,
-								          "y": 5
-								        }
-							]
-						}
-					],
-					"qualitySort": "asc",
-					"format": "mp4",
-					"mediaType": "video",
-					"encryptType": 1,
-					"progressMarkers": this.progressMarkers,
-					"width": '100%',
-					"height": '500px',
-					"autoplay": false,
-					"isLive": false,
-					"rePlay": false,
-					"playsinline": true,
-					"preload": false,
-					"controlBarVisibility": "hover",
-					"useH5Prism": true
-
-				}, function(player) {});
-				this.player = player;
-				player.one('canplay', function() {
-					console.log('canplay', this.player.tag);
-					player.tag.play();
-
-				});
-				this.isFirst ++;
-			},
-
-
-			loadWebPlayerSDK() {
-				return new Promise((resolve, reject) => {
-					const s_tag = document.createElement('script'); // 引入播放器js
-					s_tag.type = 'text/javascript';
-					s_tag.src = 'https://g.alicdn.com/de/prismplayer/2.9.6/aliplayer-min.js';
-					s_tag.charset = 'utf-8';
-					s_tag.onload = () => {
-						this.playAli()
-						resolve();
-					}
-					document.body.appendChild(s_tag);
-					const l_tag = document.createElement('link'); // 引入播放器css
-					l_tag.rel = 'stylesheet';
-					l_tag.href =
-						'https://g.alicdn.com/de/prismplayer/2.9.6/skins/default/aliplayer-min.css';
-					document.body.appendChild(l_tag);
-				});
-			},
-		}
-	}
-</script>

+ 0 - 169
components/scroll-list-card/scroll-list-card.vue

@@ -1,169 +0,0 @@
-<template>
-  <view class="scroll-list-card mobile-card-box">
-    <!--   title     -->
-    <text class="mobile-card-title">{{
-      data.ksName === null ? "" : data.ksName
-    }}</text>
-    <!--   content   -->
-    <view class="mobile-card-row" style="font-size: 28rpx">
-      时间:{{ data.ksStartTime === null ? "" : data.ksStartTime }}-{{
-        data.ksEndTime === null ? "" : data.ksEndTime
-      }}
-    </view>
-    <view class="mobile-card-row">
-      <text>总分:{{ data.ksScore === null ? "" : data.ksScore }}</text>
-      <text class="card-score-box"
-        >学分:{{ data.credit === null ? "" : data.credit }}</text
-      >
-    </view>
-    <view class="mobile-card-row">
-      <text>及格分:{{ data.okScore === null ? "" : data.okScore }}</text>
-      <text class="card-score-box"
-        >考试时长:{{ data.totalTm === null ? "" : data.totalTm }}分钟</text
-      >
-    </view>
-    <!--    button    -->
-    <template v-for="item in btns" :key="item.status">
-      <button
-        class="lli-btn"
-        @click="btnClick(item)"
-        v-if="item.show"
-        :key="item.status"
-        :disabled="data.disabled"
-      >
-        {{ item.text }}
-      </button>
-    </template>
-  </view>
-</template>
-
-<script setup>
-import { toRefs, ref, computed } from "vue";
-
-const props = defineProps({
-  data: {
-    type: Object,
-  },
-});
-const { data } = toRefs(props);
-
-const btns = computed(() => [
-  {
-    status: 0,
-    btnType: "kaoshi",
-    text: "未开始",
-    show: data.value.status === 0,
-  },
-  {
-    status: 1,
-    btnType: "kaoshi",
-    text: "开始考试",
-    show: data.value.status === 1,
-  },
-  {
-    status: 3,
-    btnType: "kaoshi",
-    text: "考试中",
-    show: data.value.status === 3,
-  },
-  {
-    status: 2,
-    btnType: "kaoshi",
-    text: "再次考试",
-    show: data.value.status === 2,
-  },
-  {
-    status: 4,
-    btnType: "kaoshi",
-    text: "已结束",
-    show: data.value.status === 4,
-  },
-  {
-    status: 5,
-    btnType: "kaoshi",
-    text: "报名",
-    show: data.value.status === 5,
-  },
-  {
-    status: 6,
-    btnType: "kaoshi",
-    text: "报名审核中",
-    show: data.value.status === 6,
-  },
-  {
-    status: 7,
-    btnType: "kaoshi",
-    text: "审核未通过",
-    show: data.value.status === 7,
-  },
-  {
-    status: 8,
-    btnType: "kaoshi",
-    text: "等待人工评分",
-    show: data.value.status === 8,
-  },
-]);
-</script>
-
-<style lang="scss" scoped>
-.mobile-card-box {
-  box-sizing: border-box;
-  margin: 0 30rpx 10rpx;
-  border-bottom: 2rpx solid #f2f1f2;
-  padding-bottom: 30rpx;
-}
-
-.mobile-card-title {
-  color: #333;
-  font-size: 32rpx;
-  font-weight: 500;
-  margin: 24rpx 0 24rpx 0;
-  text-overflow: ellipsis;
-  -o-text-overflow: ellipsis;
-  overflow: hidden;
-  word-wrap: break-word;
-  display: -webkit-box;
-  white-space: normal;
-  -webkit-box-orient: vertical;
-  text-align: justify;
-  -webkit-line-clamp: 2;
-  line-clamp: 2;
-  line-height: 48rpx;
-}
-
-// 行
-.mobile-card-row {
-  margin-bottom: 32rpx;
-  display: flex;
-  justify-content: space-between;
-  align-items: flex-end;
-
-  text {
-    font-size: 28rpx;
-    line-height: 40rpx;
-  }
-
-  // 得分
-  .mobile-card-score {
-    font-size: 40rpx;
-    color: #f10a0a;
-  }
-
-  // 分数(有最小宽度)
-  .card-score-box {
-    min-width: 240rpx;
-    text-align: left;
-  }
-}
-
-// 按钮
-.mobile-card-btn {
-  width: 60%;
-  height: 80rpx;
-  line-height: 80rpx;
-  margin: 50rpx auto;
-  background: linear-gradient(0deg, #436aff 0%, #234ff7 100%);
-  border-radius: 80rpx;
-  display: block;
-}
-</style>

+ 0 - 87
components/wSwiper/DSwiper.vue

@@ -1,87 +0,0 @@
-<template>
-	<swiper :circular="false" @change="onChangeTab" :duration="currentDuration" :current="current"
-		:style="{'height': swiperHeight + 'px'}">
-		<swiper-item v-for="(cItem,index) in props.list" :key="cItem">
-			<view class="item flex-col flex-center">
-				<slot :item="cItem"></slot>
-			</view>
-		</swiper-item>
-	</swiper>
-</template>
-
-<script setup>
-	import {
-		ref,
-		reactive,
-		watch,
-		onMounted
-	} from 'vue';
-	import {
-		onLoad,
-	} from "@dcloudio/uni-app";
-
-	const props = defineProps({
-		swiperHeight: { // swiper的高度
-			type: Number,
-			default: 0
-		},
-		positionIndex: { // 当前的数据的下标,直接定位到某条数据时使用
-			required: false,
-			type: Number,
-			default: 0
-		},
-		list: { // 数据数组
-			required: true,
-			type: Array,
-			default: []
-		},
-	})
-	const emits = defineEmits(['change'])
-	const current = ref(0)
-	const currentDuration = ref('500')
-	
-	watch(() => props.positionIndex, (val) => positionData(), {
-		immediate: true
-	})
-	watch(() => props.list, (val) => positionData(), {
-		immediate: true
-	})
-
-	
-	function positionData() {
-		if(!props.list){
-			return
-		}
-		
-		if (props.list[current]) {
-			props.list[current].mta_show = true;
-		}
-		if (props.list[current+1]) {
-			props.list[current+1].mta_show = true;
-		}
-		if (props.list[current-1]) {
-			props.list[current-1].mta_show = true;
-		}
-		console.log(props.list);
-	}
-	
-	function changeCurrent(data) {
-		current.value = data
-	}
-	
-	function onChangeTab(e) {
-		current.value = e.detail.current;
-		if (props.list[current+1]) {
-			props.list[current+1].mta_show = true;
-		}
-		if (props.list[current-1]) {
-			props.list[current-1].mta_show = true;
-		}
-		emits('change', current.value)
-	}
-</script>
-
-
-<style>
-
-</style>

+ 0 - 87
components/wSwiper/wSwiper.vue

@@ -1,87 +0,0 @@
-<template>
-	<swiper :circular="false" @change="onChangeTab" :current="data.current" :duration="data.duration"
-		:style="{'height': swiperHeight + 'px'}">
-		<swiper-item v-for="(cItem,index) in props.list" :key="cItem">
-			<view class="item flex-col flex-center">
-				<slot :item="cItem"></slot>
-			</view>
-		</swiper-item>
-	</swiper>
-</template>
-
-<script setup>
-	import {
-		ref,
-		reactive,
-		watch,
-		onMounted,
-		nextTick
-	} from 'vue';
-	import {
-		onLoad,
-	} from "@dcloudio/uni-app";
-
-	const props = defineProps({
-		swiperHeight: { // swiper的高度
-			type: Number,
-			default: 0
-		},
-		positionIndex: { // 当前的数据的下标,直接定位到某条数据时使用
-			required: false,
-			type: Number,
-			default: 0
-		},
-		list: { // 数据数组
-			required: true,
-			type: Array,
-			default: []
-		},
-	})
-	const emits = defineEmits(['change'])
-	const data = reactive({
-		current:0,
-		duration: 500
-	})
-	
-	watch(() => props.positionIndex, (val) => {
-		data.duration = 0
-		data.current = props.positionIndex
-		positionData()
-	}, {
-		immediate: true
-	})
-	watch(() => props.list, (val) => positionData(), {
-		immediate: true
-	})
-
-	
-	function positionData() {
-		if (props.list[data.current]) {
-			props.list[data.current].mta_show = true;
-		}
-		if (props.list[data.current+1]) {
-			props.list[data.current+1].mta_show = true;
-		}
-		if (props.list[data.current-1]) {
-			props.list[data.current-1].mta_show = true;
-		}
-		nextTick(() => {
-			data.duration = 500;
-		})
-	}
-	function onChangeTab(e) {
-		data.current = e.detail.current;
-		if (props.list[data.current+1]) {
-			props.list[data.current+1].mta_show = true;
-		}
-		if (props.list[data.current-1]) {
-			props.list[data.current-1].mta_show = true;
-		}
-		emits('change', data.current)
-	}
-</script>
-
-
-<style>
-
-</style>

+ 0 - 5
main.js

@@ -1,10 +1,7 @@
 import { createSSRApp } from 'vue'
 
 import App from './App.vue'
-//import plugins from './plugins' // plugins
-//import './permission' // permission
 import { createPinia } from 'pinia'
-import uviewPlus from 'uview-plus'
 import {state,setGlobalVariable} from './common/prototype.js'//全局挂载
 const pinia = createPinia()
 // 创建Vue应用实例
@@ -13,8 +10,6 @@ export function createApp() {
 	app.config.globalProperties.$state = state;
 	app.config.globalProperties.$setGlobalVariable = setGlobalVariable;
     app.use(createPinia())
-    app.use(uviewPlus)
-  //  app.use(pinia)
 
     return {
         app

+ 5 - 3
manifest.json

@@ -1,5 +1,5 @@
 {
-    "name" : "鹅状元",
+    "name" : "北京诚祥",
     "appid" : "__UNI__CB9D85D",
     "description" : "",
     "versionName" : "1.0.5",
@@ -147,9 +147,11 @@
     "vueVersion" : "3",
     "h5" : {
         "router" : {
-            "base" : "/mdist/"
+            "base" : "/mdist/",
+            "mode" : "history"
         },
-        "title" : "鹅状元"
+        "title" : "北京诚祥",
+        "template" : "template.h5.html"
     },
     "fallbackLocale" : "zh-Hans"
 }

+ 3 - 2
package.json

@@ -9,7 +9,6 @@
 		"jsencrypt": "^3.3.2",
 		"pinia": "^2.1.7",
 		"ts-md5": "^1.3.1",
-		"uview-plus": "^3.3.43",
 		"vue": "^3.5.13"
 	},
 	"uni-app": {
@@ -47,5 +46,7 @@
 		"url": "https://gogs.mtavip.com/wangguoyu/uniProject.git"
 	},
 	"author": "",
-	"license": "ISC"
+	"license": "ISC",
+	"devDependencies": {
+	}
 }

+ 6 - 114
pages.json

@@ -1,103 +1,23 @@
 {
 	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
 		{
-			"path": "pages/login/index",
+			"path": "pages/Login/index",
 			"style": {
 				"navigationStyle": "custom"
 			}
 		},
 		{
-			"path": "pages/login/login",
-			"style": {
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/selectGradesTerms/index",
-			"style": {
-				"navigationBarTitleText": "选择学科和年纪",
-				"navigationStyle": "custom",
-				"app-plus": {
-					"animationType": "none"
-				}
-			}
-		},
-		{
-			"path": "pages/study/index",
-			"style": {
-				"navigationBarTitleText": "学习",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/study/lookShipin",
-			"style": {
-				"navigationBarTitleText": "视频",
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/game/index",
-				
-			"style": {
-				"navigationStyle": "custom",
-				"app-plus": {
-					"animationType": "none"
-				}
-			}
-		
-		},
-		{
-			"path": "pages/my/index",
-			"style": {
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path": "pages/my/aboutPage",
-			"style": {
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path" : "pages/unitTest/index",
-			"style" :
-			{
-				"navigationBarTitleText" : "单元测试",
-				"navigationStyle": "custom",
-				"app-plus": {
-					"softinputMode": "adjustResize",
-					"softinputNavBar": "none"
-				}
-			}
-		},
-		{
-			"path" : "pages/pay/svip",
+			"path" : "pages/ShouYe/shouyeOne",
 			"style" : 
 			{
-				"navigationStyle": "custom"
+				"navigationBarTitleText" : "总部管理员/跑单员首页"
 			}
 		},
 		{
-			"path" : "pages/pay/order",
+			"path" : "pages/ShouYe/shouyeTwo",
 			"style" : 
 			{
-				"navigationStyle": "custom"
-			}
-		},
-		
-		{
-			"path" : "pages/pay/orderPay",
-			"style" : 
-			{
-				"navigationStyle": "custom"
-			}
-		},
-		{
-			"path" : "pages/wrong/index",
-			"style" : 
-			{
-				"navigationStyle": "custom"
+				"navigationBarTitleText" : "家政/考试人员首页"
 			}
 		}
 	],
@@ -105,43 +25,15 @@
 	    "custom": true,
 	    "list": []
 	  },
-	// "tabBar": {
-	// 	"height": "90rpx",
-	// 	"iconWidth": "134rpx",
-	// 	"spacing": "0px",
-	// 	"backgroundColor": "transparent",
-	// 	"list": [{
-	// 		"pagePath": "pages/study/index",
-	// 		"iconPath": "static/images/tabbar/unselect/plan-sj.png",
-	// 		"selectedIconPath": "static/images/tabbar/select/plan-sj.png"
-	// 	}, {
-	// 		"pagePath": "pages/study/index",
-	// 		"iconPath": "static/images/tabbar/unselect/develop-sj.png",
-	// 		"selectedIconPath": "static/images/tabbar/select/develop-sj.png"
-	// 	}, {
-	// 		"pagePath": "pages/study/index",
-	// 		"iconPath": "static/images/tabbar/unselect/partner-sj.png",
-	// 		"selectedIconPath": "static/images/tabbar/select/partner-sj.png"
-	// 	}, {
-	// 		"pagePath": "pages/my/index",
-	// 		"iconPath": "static/images/tabbar/unselect/my-sj.png",
-	// 		"selectedIconPath": "static/images/tabbar/select/my-sj.png"
-	// 	}]
-	// },
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
 		"navigationBarTitleText": "麦塔软件",
 		"navigationBarBackgroundColor": "#F8F8F8",
 		"backgroundColor": "#F8F8F8",
-	//	"animationType": "none",
-		//"animationDuration": "0",
 		//禁止滑动返回
 		"app-plus": {
 					"popGesture": "none"
 				}
-		/* "app-plus": {
-			"background": "#efeff4"
-		} */
 	},
 
 	"uniIdRouter": {},
@@ -150,7 +42,7 @@
 		"list": [
 			{
 				"name": "login", //模式名称
-				"path": "pages/login/index", //启动页面,必选
+				"path": "pages/Login/index", //启动页面,必选
 				"query": "" //启动参数,在页面的onLoad函数里面得到
 			}
 		]

+ 0 - 40
pages/game/components/constantConfig.js

@@ -1,40 +0,0 @@
-// 食物种类列表
-export const foodSpeciesList = [{
-		id: 100,
-		imgUrl: '/static/images/game/food-img1.png',
-		credit: 30
-	},
-	{
-		id: 300,
-		imgUrl: '/static/images/game/food-img2.png',
-		credit: 100
-	},
-	{
-		id: 600,
-		imgUrl: '/static/images/game/food-img3.png',
-		credit: 300
-	}
-]
-
-// 大鹅成长阶段
-export const gooseGrowthTypeList = [{
-		id: 0,
-		imgUrl: '/static/images/game/game-img1.gif',
-		range: [0,1000]
-	},
-	{
-		id: 1,
-		imgUrl: '/static/images/game/game-img2.gif',
-		range: [1000,3000]
-	},
-	{
-		id: 2,
-		imgUrl: '/static/images/game/game-img3.gif',
-		range: [3000,7000]
-	},
-	{
-		id: 3,
-		imgUrl: '/static/images/game/game-img4.gif',
-		range: [7000]
-	}
-]

+ 0 - 19
pages/game/components/food.vue

@@ -1,19 +0,0 @@
-<template>
-	<image v-if="imgUrl" :src="imgUrl"></image>
-</template>
-
-<script setup>
-	import {foodSpeciesList} from './constantConfig';
-	import { ref,computed } from "vue";
-	const props = defineProps({
-		shiwuId: [String,Number]
-	})
-	
-	const imgUrl = computed(() => {
-		const active = foodSpeciesList.find(item => item.credit == props.shiwuId)
-		return active ? active.imgUrl: ''
-	})
-</script>
-
-<style>
-</style>

+ 0 - 64
pages/game/components/foodSelect.vue

@@ -1,64 +0,0 @@
-<template>
-	<!-- 食物图标按钮 -->
-	<view @click="handleOpen" class="food-btn-box"></view>
-	<uni-popup ref="popupRef" type="bottom">
-		<view class="game-popup-box">
-			<view class="game-popup-head">
-				<view class="game-popup-title"></view>
-				<view class="jf-btn-box">
-					<!-- 积分 -->
-					<view class="ezy-jf-box game-popup-jf">
-						<icon class="jf-icon"></icon>
-						<text class="jf-text" >{{credit}}</text>
-					</view>
-					<!-- 关闭按钮 -->
-					<icon class="popup-close-btn" @click="handleClose"></icon>
-				</view>
-			</view>
-			<view class="food-list-box">
-				<view v-for="item in foodSpeciesList" :key="item.id" @click="handleSelectFood(item)" class="food-item-box">
-					<image :src="item.imgUrl" class="food-image"/>
-					<view class="food-item-jf">
-						<icon class="jf-icon"></icon>
-						<text class="jf-text" >{{item.id}}</text>
-					</view>
-				</view>
-			</view>
-			
-		</view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import {foodSpeciesList} from './constantConfig';
-	import {ref} from "vue";
-	const emits = defineEmits(['weishi'])
-	const props = defineProps({
-		shiwuId: {
-			type: [String,Number]
-		},
-		credit: {
-			type: [String,Number]
-		}
-	})
-	
-	const popupRef = ref(null);
-
-	function handleOpen() {
-		popupRef.value.open();
-    uni.$emit('food-select-open')
-  }
-	function handleClose() {
-		popupRef.value.close();
-	}
-	function handleSelectFood(shiwu) {
-		emits('weishi',shiwu);
-	}
-	
-	defineExpose({
-		handleClose
-	})
-</script>
-
-<style>
-</style>

+ 0 - 62
pages/game/components/goose.vue

@@ -1,62 +0,0 @@
-<template>
-	<view>
-		<up-line-progress v-if="growthType!==3" :percentage="progress" :showText="false" activeColor="#54e1fe"
-			class="game-progress-box"></up-line-progress>
-		<text v-if="growthType!==3" class="game-progress-text">成长值:{{progress}}%</text>
-		<image :src="imgUrl" class="goose-img-box" @click="handleTouch"></image>
-	</view>
-</template>
-
-<script setup>
-	import {
-		ref,
-		computed,
-		watch,
-		toRefs
-	} from "vue";
-	import upLineProgress from "uview-plus/components/u-line-progress/u-line-progress.vue";
-	import {
-		useAudio,
-		useHuDong
-	} from "./useAudio.js"
-	const props = defineProps({
-		growthType: {
-			type: [String, Number]
-		},
-		progress: {
-			type: [String, Number],
-			default: 0
-		}
-	})
-	const {growthType} = toRefs(props);
-	const Emits = defineEmits(['onPlay','onEnd'])
-	
-	
-
-	const {
-		init,
-		doTouch,
-		imgUrl
-	} = useHuDong(props);
-	const {
-		innerAudioContext,
-		handlePlay
-	} = useAudio(growthType);
-
-	init();
-	
-	watch(growthType, () => {
-		init();
-	})
-
-	function handleTouch() {
-		if (!innerAudioContext.value.paused) {
-			return;
-		}
-		doTouch(handlePlay);
-	}
-
-</script>
-
-<style>
-</style>

+ 0 - 151
pages/game/components/useAudio.js

@@ -1,151 +0,0 @@
-import {ref, watch,computed} from "vue";
-import {gooseGrowthTypeList} from "./constantConfig.js";
-import {onHide} from "@dcloudio/uni-app"
-
-const audioList = {
-	0: [
-		'/static/mp3/dan/01.MP3',
-		'/static/mp3/dan/02.MP3',
-		'/static/mp3/dan/03.MP3',
-	],
-	1: [
-		'/static/mp3/xiaoe/01.MP3',
-		'/static/mp3/xiaoe/02.MP3',
-		'/static/mp3/xiaoe/03.MP3',
-		'/static/mp3/xiaoe/04.MP3',
-	],
-	2: [
-		'/static/mp3/zhonge/01.MP3',
-		'/static/mp3/zhonge/02.MP3',
-		'/static/mp3/zhonge/03.MP3',
-		'/static/mp3/zhonge/04.MP3',
-	],
-	3: [
-		'/static/mp3/dae/01.MP3',
-		'/static/mp3/dae/02.MP3',
-		'/static/mp3/dae/03.MP3',
-		'/static/mp3/dae/04.MP3',
-	],
-}
-
-const imageList = {
-	0: ['/static/images/game/game-img1.gif', '/static/images/game/game-eat-img1.gif'],
-	1: ['/static/images/game/game-img2.gif', '/static/images/game/game-eat-img2.gif'],
-	2: ['/static/images/game/game-img3.gif', '/static/images/game/game-eat-img3.gif'],
-	3: ['/static/images/game/game-img4.gif', '/static/images/game/game-eat-img4.gif'],
-}
-
-
-export function useAudio (grouthType) {
-	const defaultGrouthType = ref(''); // 成长状态历史
-	const audioIndex = ref(0); // 播放序列
-	const innerAudioContext = ref(null);
-	function createAudio() {
-		const innerAudioContext = uni.createInnerAudioContext();
-		innerAudioContext.autoplay = false;
-		innerAudioContext.src = audioList[grouthType.value][audioIndex.value];
-		innerAudioContext.onPlay(() => {
-			// 播放
-			uni.$emit('play-audio');
-		});
-		innerAudioContext.onError((res) => {
-		  audioIndex.value = 0;
-		  uni.$emit('play-error')
-		  console.log(res.errMsg);
-		  console.log(res.errCode);
-		});
-		innerAudioContext.onEnded(() => {
-			// 播放结束
-			uni.$emit('play-audio-ended')
-			// 计算播放音频序列
-			const list = audioList[grouthType.value];
-			if (audioIndex.value >= list.length-1) {
-				audioIndex.value = 0;
-			} else {
-				audioIndex.value = audioIndex.value+1;
-			}
-			// 更新音频源
-			changeSource(list[audioIndex.value]);
-		})
-		return innerAudioContext;
-	}
-	function changeSource(url) {
-		innerAudioContext.src= url;
-		innerAudioContext.currentTime = 0;
-	}
-	
-	onHide(() => {
-		innerAudioContext.value.stop();
-	})
-
-	// 展开食物停止播放
-	uni.$on('food-select-open', () => {
-		innerAudioContext.value.stop();
-		audioIndex.value = 0;
-	})
-	
-	innerAudioContext.value = createAudio();
-	
-	function handlePlay() {
-		innerAudioContext.value.destroy();
-		innerAudioContext.value = null;
-		innerAudioContext.value = createAudio();
-		innerAudioContext.value.play()
-	}
-	
-	watch(grouthType, () => {
-		if (defaultGrouthType.value != grouthType.value) {
-			const list = audioList[grouthType.value];
-			// 当鹅成长状态变更时重置播放序列
-			audioIndex.value = 0;
-			defaultGrouthType.value = grouthType.value;
-			changeSource(audioList[grouthType.value][0]);
-		}
-	})
-	
-	return {
-		innerAudioContext,
-		handlePlay
-	}
-}
-
-
-export function useHuDong(props) {
-	const imgUrl = ref('');
-	
-	function getDefaultImg() {
-		const active = gooseGrowthTypeList.find(item => item.id == props.growthType);
-		return active ? active.imgUrl: ''
-	}
-
-	// 初始化
-	function init() {
-		imgUrl.value = getDefaultImg();
-	}
-
-	function doTouch(handlePlay) {
-		handlePlay();
-	}
-	
-	// 播放开始切换动画
-	uni.$on('play-audio', () => {
-		imgUrl.value = imageList[props.growthType][1]
-	})
-	// 播放结束恢复默认
-	uni.$on('play-audio-ended', () => {
-		imgUrl.value = imageList[props.growthType][0]
-	})
-	// 展开食物恢复默认
-	uni.$on('food-select-open', () => {
-		imgUrl.value = imageList[props.growthType][0]
-	})
-	uni.$on('play-error',() => {
-		imgUrl.value = imageList[props.growthType][0]
-	})
-	return {
-		init,
-		doTouch,
-		imgUrl
-	}
-	
-}

+ 0 - 86
pages/game/index.vue

@@ -1,86 +0,0 @@
-<!-- 游戏页面 -->
-<template>
-	<view class="ezy-game-page">
-		<!-- 返回按钮 -->
-		<!-- <view class="ezy-nav-bar-icon" @click="handleBack"></view> -->
-		<!-- 积分 -->
-		<view class="ezy-jf-box game-jf-box">
-			<icon class="jf-icon"></icon>
-			<text class="jf-text" >{{credit}}</text>
-		</view>
-		<!-- 桌面食物 -->
-		<foodVue :shiwuId="shiwuId" class="food-img-box" :class="'food-img'+shiwuId"></foodVue>
-		<!-- 大鹅 4阶段 -->
-		<gooseVue :growth="growth" :growthType="growthType" :progress="progress"
-		class="game-goose-box" :class="'game-goose-box'+ growthType"></gooseVue>
-		<!-- 食物选择 -->
-		<foodSelectVue :credit="credit" ref="foodSelectRef" :shiwuId="shiwuId" @weishi="onWeiShi"></foodSelectVue>
-		<!-- 游戏说明 -->
-		<view class="yxsm-btn" @click="showTishi"></view>
-		<!-- 游戏说明 -->
-		<commonDialogVue ref="dlRef">
-			<view class="yxsm-popup-box">
-				<view class="yxsm-popup-title">陪伴宠物鹅系统详细说明</view>
-				<view class="yxsm-item-box">
-					<view v-for="(item, index) in yxsmContent" :key="index">
-						<view class="item-title">{{item.title}}</view>
-						<text class="item-content">{{item.content}}</text>
-					</view>
-				</view>
-				<icon @click="handleClose" class="yxsm-close-btn"></icon>
-			</view>
-		</commonDialogVue>
-    <!--  导航  -->
-    <CustomTabBar :currentTabNumber="1"></CustomTabBar>
-	</view>
-</template>
-
-<script setup>
-	import {ref,reactive} from "vue";
-	import foodVue from "./components/food.vue";
-	import gooseVue from "./components/goose.vue";
-	import foodSelectVue from "./components/foodSelect.vue";
-	import commonDialogVue from "@/components/dialog/commonDialog.vue";
-  import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-
-	import { useGame } from "./useGame";
-	const {	credit,growth,growthType,progress,shiwuId ,handleWeishi } = useGame();
-	const yxsmContent = reactive([{
-			title: '宠物鹅获取',
-			content: '学生首次注册并登录 APP 时,系统自动发放一颗宠物鹅蛋,开启养鹅之旅。每个账号有且仅有一次领取鹅蛋的机会,确保公平性,这颗蛋便是学生与宠物鹅相伴成长的起点。',
-	},{
-			title: '成长阶段',
-			content: `1. 破壳期(初始状态):刚获得的鹅蛋代表宠物鹅的初始形态,成长值为 0,静静等待成长契机。
-					2. 幼年期:当学生通过学习积累的经验值达到 1000 时,鹅蛋孵化,宠物鹅进入幼年期,模样娇小可爱,开启成长新篇。
-					3. 青年期:随着学习推进,经验值累计至 3000,幼鹅成长为青年鹅,体型增大,羽毛渐丰,活力更足。
-					4. 成年期:若学生持之以恒学习,使经验值攀升至 7000,青年鹅将进化为成年鹅,外形成熟矫健,成为学生学习路上的暖心陪伴。`,
-	},{
-			title: '积分规则',
-			content: `1. 学习课程积分:APP 提供丰富视频课程,学生首次完整学完一门课程,就能获得 100 积分。系统会记录学习情况,重复学习同一课程不再积分,激励学生探索新内容。
-					2. 答题积分:各章节配有单元测试,学生首次答题,每答对一题获 20 积分,答错无积分。重复测试以首次答题结果为准,促使学生认真对待初次测试。
-					3. 蛋糕兑换积分:学生可用积分兑换成长值蛋糕,100 积分换 30 成长值蛋糕、300 积分换 100 成长值蛋糕、600 积分换 300 成长值蛋糕,为宠物鹅成长助力。`,
-	}]);
-	const foodSelectRef = ref(null);
-	const dlRef = ref(null);
-
-	function handleClose() {
-		dlRef.value.handleClose();
-	}
-
-  function handleBack() {
-    uni.navigateBack();
-  }
-	
-	function showTishi() {
-		dlRef.value.handleShow();
-	}
-	
-	function onWeiShi(data) {
-		handleWeishi(data, () => {
-			foodSelectRef.value.handleClose();
-		})
-	}
-</script>
-
-<style>
-</style>

+ 0 - 87
pages/game/useGame.js

@@ -1,87 +0,0 @@
-import {
-	reactive,
-	ref,
-	getCurrentInstance,
-	onMounted,
-	toRefs
-} from "vue";
-import {
-	onLoad
-} from '@dcloudio/uni-app';
-import {toast,getUserIdentity,catchError} from "@/utils/common";
-import {getYouxiInfo, getYouxiWeishi} from "@/api/game.js";
-import cacheManager from "@/utils/cacheManager.js"
-
-
-export function useGame() {
-	const UserCode = getUserIdentity();
-	const auth = cacheManager.get('auth');
-	const data = reactive({
-			credit: 0, // 当前积分
-			growth: 0, // 成长值
-			growthType:0, // 成长类型
-			progress:0, // 当前进度
-			shiwuId:null // 上一次食物
-	})
-	if (auth) {
-		data.growthType = auth.growthType;
-	}
-	async function getGameInfo() {
-		const [err, info] = await catchError(getYouxiInfo());
-		if (err) {
-
-			toast("请求异常,请稍后尝试");
-			return;
-		}
-		const {
-			credit,growth,growthType,progress,shiwuId
-		} = info;
-		
-		data.credit = credit;
-		data.growth = growth;
-		data.growthType = growthType;
-		data.progress = progress;
-		data.shiwuId = shiwuId;
-	}
-	
-	async function handleWeishi({id:cShiwuId,credit:cCredit}, doFinish) {
-		const [err, info] = await catchError(getYouxiWeishi({shiwuId:cCredit,credit:cShiwuId }));
-		if (err) {
-			toast("请求异常,请稍后尝试");
-			return;
-		}
-		const {
-			credit,growth,growthType,progress,shiwuId
-		} = info;
-		
-		data.credit = credit;
-		data.growthType = growthType;
-		data.progress = progress;
-		data.shiwuId = shiwuId;
-		
-		// 更新成长状态
-		updateCachegrowthType(growthType);
-		
-		doFinish && doFinish();
-	}
-	
-	// 更新缓存 大鹅成长值
-	function updateCachegrowthType(growthType) {
-		cacheManager.updateObject('auth', { growthType })
-	}
-	
-
-	onLoad(async (options) => {
-		if (UserCode !== "Visitor") {
-			getGameInfo();
-		} else {}
-	})
-	
-	return {
-		...toRefs(data),
-		UserCode,
-		handleWeishi,
-	}
-	
-}
-

+ 0 - 444
pages/login/agreeContentDialog.vue

@@ -1,444 +0,0 @@
-<template>
-	  <uni-popup ref="agreeContentPopup" :animation="false" :is-mask-click="false"
-	  mask-background-color="rgba(255, 255, 255, 0.6);">
-	  <view class="agree-content-dialog">
-		<view class="agree-content-box">
-			<view class="agree-title">{{agreeTitle}}</view>
-			<view class="agree-close-btn" @click="handleClose"></view>
-			<view class="agree-section-box" v-html="agreementSections"></view>
-		</view>
-	  </view>
-	 </uni-popup>
-</template>
-
-<script setup>
-import { ref,watch } from 'vue';
-import {onLoad} from '@dcloudio/uni-app';
-const props = defineProps({
-  agreeType: {type: String},
-})
-const agreeContentPopup = ref(null); // 索引
-let agreeTitle = ref(null); 
-let agreementSections = ref(null); 
-
-// 监听 agreeType 的变化
-watch(() => props.agreeType, (newVal, oldVal) => {
-  if (newVal !== oldVal) {
-    getText();
-  }
-});
-
-function getText(){
-	switch (props.agreeType) {
-	  case 'yhxy':
-	    agreeTitle.value = '鹅状元用户协议';
-		let yhxyText= `欢迎申请使用大连佳诚智信软件信息技术有限公司(以下简称“佳诚智信”)提供的鹅状元软件(以下简称“本软件”)。
-		
-		本服务协议是您与大连佳诚智信软件信息技术有限公司所有者(以下简称为“佳诚智信”)之间就鹅状元软件服务等相关事宜所订立的契约,具有合同效力。您(以下或简称“您”)在使用佳诚智信提供的各项服务(以下简称“本服务”)之前,请您务必审慎阅读、充分理解并选择接受或不接受本服务协议。
-
-        **一、服务条款的确认和接纳**
-
-         1.本协议条款是处理双方权利义务的契约,始终有效,法律另有强制性规定或双方另有特别约定的,依其规定。
-
-        2.您同意本协议的,即视为您确认自己具有享受本软件服务、下单购物等相应的权利能力和行为能力,能够独立承担法律责任。
-
-       3.佳诚智信有权根据相关政策规定的变更及服务需要及时地制定、修改本协议或各类规则,如本协议有任何变更,佳诚智信应当及时在网站上刊载公告,通知予您。如您不同意相关变更必须停止使用“服务”。经修订的协议公布后,立即自动生效。各类规则会在发布后生效,亦成为本协议的一部分。登录或继续使用“服务”将表示您接受经修订的协议。
-
-        4.佳诚智信保留在中华人民共和国大陆地区法施行之法律允许的范围内独自决定拒绝服务、关闭您账号、清除或编辑内容或取消订单的权利。
-
-        **二、本软件的获取**
-
-        您可以从大连佳诚智信软件信息技术有限公司授权的第三方获取本软件,如果您从未授权的第三方获取本软件或与本软件名称相同的安装程序,则大连佳诚智信软件信息技术有限公司无法保证该软件能够正常使用,并对因此给您造成的损失不予负责。
-
-         **三、本软件的安装与卸载**
-         佳诚智信为部分不同的终端设备开发了不同的软件版本,您应当根据实际情况选择合适下载的版本进行安装。下载安装程序后,您需要按照该程序提示的步骤正确安装。为提供更加优质、安全的服务。如果您不在需要使用本软件或者需要安装新版软件,可以自行卸载。
-
-        **四、本软件的更新**
-
-          为了改善您体验、完善服务内容,佳诚智信不断努力开发新的服务,并为您不时提供软件更新,为了保证本软件及服务的安全性和功能的一致性,佳诚智信有权不经向您特别通知而对软件进行更新,或者对软件的部分功能效果进行改变或限制。佳诚智信不保证旧版本软件可用及相应的客户服务,请您随时核对并下载最新版本
-       
-	   **五、用户权利与义务**
-
-        1.您承诺:
-
-        1)  不得利用佳诚智信平台制作、复制、查阅和传播下列信息:
-		
-        a)任何非法的、骚扰性的、中伤他人的、唇骂性的、恐吓性的、伤害性的、庸俗的、淫秽的信息资料;
-		
-        b)任何教唆他人进行违法犯罪行为的资料;
-		
-        c)不利于国内团结和社会安定的资料;
-		
-        d)任何不符合国家法律、法规规定的资料、信息;
-		
-        e)任何捏造或者歪曲事实,散布谣言,扰乱社会秩序的信息;
-		
-        f)损害佳诚智信及其关联主体的声誉和商业利益的信息。
-		
-        2)遵守中华人民共和国的法律、法规、规章、条例,以及其他具有法律效力的规范,不使用网络服务做非法用途;
-		
-        3)不干扰或混乱网络服务;
-		
-        4)不侵犯佳诚智信所有著作权、版权;
-		
-        5)不得在佳诚智信内发布违法信息,您对其发布的内容单独承担法律责任。
-
-        本站保有删除站内各类不符合法律政策或不真实的信息内容而无须通知您的权利。
-
-        2.您必须自行准备如下设备和承担如下开支:
-
-        1)上网设备,包括并不限于电脑或者其他上网终端、调制解调器及其他必备的上网装置;
-
-        2)上网开支,包括并不限于网络接入费、上网设备租用费、手机流量费等;
-
-        3)鹅状元App设备最低配置表:
-
-        a)Android设备:最低支持 android9版本
-
-        b)iOS设备:暂未测试
-
-        3.多设备登录限制说明:
-
-       为保护账号安全,避免账号密码共享泄露被盗,鹅状元只允许最多在3个设备上登录。
-
-       4.您应当对自己在本站的言论和行为承担法律责任。若您未遵守以上规定的,佳诚智信有权作出独立判断并采取暂停或关闭您账号等措施。
-
-        **六、用户个人信息保护**
-
-       1.您应自行诚信向本软件提供注册资料您同意其提供的资料真实、准确、完整、合法有效,您注册资料如有变动的,应及时更新其注册资料。如果您提供的注册资料不合法、不真实、不准确、不详尽的,您需承担因此引起的相应责任及后果,并且佳诚智信保留终止您使用鹅状元各项服务的权利。
-
-       2. 您在本软件进行浏览、购买、参与等活动时,会请求开启摄像头、录音等权限,涉及您真实姓名/名称、通信地址、联系电话、电子邮箱、视频、音频等隐私信息的,佳诚智信将予以严格保密,除非得到您的授权或法律另有规定,佳诚智信不会向外界披露您隐私信息。
-       
-	   3.您注册成功后,将产生账号信息,您应谨慎合理的保存、使用账号。您若发现任何非法使用您账号或存在安全漏洞的情况,请立即通知佳诚智信。
-
-       4.您务必确保账号的安全性。如果丢失,造成的损失将由本人承担全部后果。您对利用该您账号所进行的一切活动负全部责任,因此所衍生的任何损失或损害,佳诚智信不承担任何责任。
-
-       5.您不得将本软件注册获得的账号借予他人或多人使用,否则您应承担由此产生的全部责任,并与实际使用人承担连带责任。如果发现或者有正当的理由怀疑多人共用一个账号的现象佳诚智信保留立即结束或终止该账号的权利。
-
-        6.您同意,佳诚智信拥有通过邮件、短信电话等形式,向在本站注册、购物的您,发送订单信息、学习信息、促销活动等告知信息的权利。
-
-        7. 结束您的服务后,您使用佳诚智信网络服务的权利随即终止。终止后您没有权利,佳诚智信也没有义务传送任何未处理的信息或未完成的服务给您或第三方。
-
-       **七、服务使用规范**
-
-       1.用户不得以任何方式干扰、破坏、篡改本软件的正常运行,不得利用本软件传播病毒、恶意代码等有害信息。
-
-        2.用户不得利用本软件进行任何形式的商业活动,包括但不限于发布广告、销售商品或服务等;
-
-       3.用户不得利用本软件侵犯他人的知识产权、商业秘密等合法权益。
-
-        4.用户不得利用本软件进行任何损害网络安全的行为,包括但不限于非法侵入他人计算机系统、传播恶意程序等。
-
-       5.用户在使用本软件过程中所产生的行为和言论都应符合法律法规和社会公序良俗,不得侵犯他人的合法权益。
-
-       **八、免责声明**
-
-       1.佳诚智信不保证 (包括但不限于):
-
-       1)本服务不受干扰,及时、安全、可靠或不出现错误;
-
-       2)您经由本服务取得的任何产品、服务或其他材料符合您的期望。
-
-       2.您使用经由本服务下载的或取得的任何资料,其风险自行负担;
-
-       3.由于地震、台风、洪水、火灾、战争、政府禁令以及其他不能预见并且对其发生和后果不能防止或避免的不可抗力或互联网上的黑客攻击事件,致使影响本服务条款的履行,佳诚智信不承担任何责任。
-       
-	   **九、知识产权**
-
-       1.鹅状元APP及其相关内容受知识产权保护,包括但不限于著作权、商标权等;
-
-       2.未经佳诚智信书面授权,用户不得以任何方式复制、修改、传播、运用佳诚智信的知识产权。
-
-       3.用户在使用APP过程中创作的内容,视为用户主动将其知识产权转让给佳诚智信,佳诚智信有权使用、修改、传播、展示该内容。
-
-       **十、争议解决**
-
-       1.本政策之订立、生效、解释、修订、补充终止执行与争议解决均适用中华人民共和国大陆地区法律。如法律无相关规定的,参照商业惯例及/或行业惯例。
-
-        2.您因使用佳诚智信服务所产生及与佳诚智信服务有关的争议,由佳诚智信与您友好协商解决。协商不成时,任何一方均可向大连仲裁委员会申请仲裁。
-
-        **十一、其他**
-
-        1.佳诚智信有权在必要时修改本服务条款以及各单项服务的相关条款。您在享受单项服务时,应当及时查阅了解修改的内容,并自觉遵守本服务条款以及该单项服务的相关条款。
-
-       2. 本协议内容同时包括《鹅状元隐私协议》及您在使用佳诚智信某项特定服务时可能另有的单独协议、相关业务规则等 (以下统称为“单独协议”)。上述内容一经正式发布,即为本协议不可分割的组成部分,您同样应遵守。本协议与《鹅状元隐私协议》不一致的,以《鹅状元隐私协议》约定为准。您对前述任何单独协议的接受,即视为您对本协议全部的接受。
-
-        **十二、 联系方式**
-
-        当您有个人信息相关问题或其他的投诉、建议等,可以通过如下方式与佳诚智信联系,佳诚智信将尽快审核所涉及内容,并于15个工作日内对于您的问题、投诉、建议进行回复:
-
-       本软件运营主体名称:大连佳诚智信软件信息技术有限公司
-
-        联系地址:大连市沙河口区数码路北段25号201室`
-				agreementSections.value  = formatText(yhxyText)
-	    break;
-	  case 'ystk':
-	    agreeTitle.value = '鹅状元隐私政策';
-	    let ystkText= ` 鹅状元是由大连佳诚智信软件信息技术有限公司(以下简称“佳诚智信”)为您提供的一款在线教育产品。鹅状元(以下简称“我们”)深知个人信息对您的重要性,并会尽全力保护您的个人信息安全可靠。我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则、目的明确原则、选择同意原则、最少够用原则、确保安全原则、主体参与原则、公开透明原则等。同时,我们承诺,我们将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。
-
-        请在使用我们的产品或服务前,仔细阅读并了解本《鹅状元隐私政策》。
-		
-        一、我们如何收集和使用您的个人信息
-		
-        个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。
-        我们仅会出于本政策所述的以下目的,收集和使用您的个人信息:
-		
-        (一)您须授权我们收集和使用您个人信息的情形
-
-            我们的产品或服务包括一些核心功能,这些功能包含了实现网上购物所必须的功能、改进我们产品或服务所必须的功能。我们可能会收集、保存和使用下列与您有关的信息才能实现上述这些功能。如果您不提供相关信息,您将无法享受我们提供的产品或服务。这些功能包括:
-
-        1.实现保护账号安全所必须的功能
-		
-        (1)账号注册及登录
-            您首先需要注册一个鹅状元账户成为鹅状元用户。当您注册时,您需要至少向我们提供您准备使用鹅状元账户名即您本人的手机号码,我们将通过发送短信验证码的方式来验证您的身份是否有效。您的账户名为您的默认昵称,您可以修改补充您的昵称,这些信息均属于您的“账户信息”。您补充的账户信息将有助于我们为您提供更优质的体验,但如果您不提供这些补充信息,不会影响您的基本功能。
-
-        (2)头像及昵称
-        您还可以根据自身需求选择填写或更改头像名字、昵称来完善您的信息,但如您不提供此类信息,不会影响您使用本产品和相关服务
-		
-        (3)试题的展示和搜索
-        为了让您快速地找到您所需要的试题或考试,我们可能会在后台状态下收集您使用我们的产品或服务的手机状态信息
-            (包括ANDROID ID信息、IMEI、IMSI、设备 MAC 地址、SUPI、SUCI、软件安装列表、位置、联系人、通话记录、日历、短信、本机电话号码、图片、音视频)
-            应用SD卡数据、网络状态来为您提供考试或试题信息展示的最优方式和将收集的用户个人信息于消息推送。我们也会为了不断改进和优化上述的功能来使用您的上述个人信息。
-			
-        (4)客服与售后功能
-        我们的电话客服和售后功能会使用您的账号信息。为保证您的账号安全,我们的呼叫中心客服和在线客服会使用您的账号信息与您核验您的身份。
-		
-        2.我们会使用到的设备权限
-        为能保证软件的功能与服务可以正常运行,我们需要获取您以下权限,如您不授予相关权限有可能APP内部分服务无法正常使用,在授予权限后您也可以随时在手机的应用管理中取消相关权限。
-        
-		(1)请求安装文件包
-        权限功能说明:提供app在手机中安装和更新的功能。
-        xml中描述名称:android.permission.REQUEST_INSTALL_PACKAGES
-		
-        (2)写入外部存储空间
-        权限功能说明:提供写入外部储存功能允许App写入/下载/保存/修改/删除图片、文件信息
-        xml中描述名称:android.permission.WRITE_EXTERNAL_STORAGE
-		
-        (3)读取外部存储空间
-        权限功能说明:提供写入外部读取功能,允许App读取相册
-        xml中描述名称:android.permission.READ_EXTERNAL_STORAGE
-		
-        (4)读取手机状态和身份(电话权限、设备权限)
-        权限功能说明: 提供读取手机设备信息((包括ANDROID ID信息、IMEI、IMSI、设备 MAC 地址、SUPI、SUCI、软件安装列表、位置、联系人、通话记录、日历、短信、本机电话号码、图片、音视频)),请您放心该权限无法监听、获取您的任何通话内容与信息读取设备通话状态和识别码,用于完成音视频、信息展示、账
-            号登录、安全保障等主要功能
-        xml中描述名称:android.permission.READ_PHONE_STATE
-		
-        (5)使用摄像头
-        权限功能说明:当您使用头像图片设置上传功能时,为了您进行实时拍摄,平台将获取您的摄像头权限,在您使用该功能时,会获取<span class="bold-word">加速度设备传感器</span>信息,用于获取拍摄手机角度。如不开启权限,您将无法使用与实时拍摄相关的特定功能但不影响您使用App提供的其他服务。
-        xml中描述名称:android.permission.CAMERA
-		
-        (6)访问网络
-        权限功能说明:允许应用程序打开网络并接入,用于app和服务端网络通信
-        xml中描述名称:android.permission.INTERNET
-		
-        (7)获取剪贴板信息
-        我们在您分享或接受被分享的信息、参加活动等情形下,需要访问您的粘贴板信息,读取其中包含的口令、分享码、链接,以实现跳转、分享、活动联动等功能或服务。[特别说明]有些手机等终端设备的系统会提示应用(App)正在读取剪切板,但该系统提示无法区分是否收集剪切板信息,且不排除误报。因此,如果您发现类似提示,请与我们联系,以便我们定位问题。
-        
-		(8)进程信息
-        在App使用中,为提供更好的服务,我们在App前/后台运行时,需要获取运行中的进程信息,判断当前进程是否为主进程。
-        
-		(9)版本更新检测
-        为确保本应用处于关闭或后台运行状态下可正常接收到客户端推送的广播信息,本应用须使用(自启动)能力,将存在一定频率通过系统发送广播唤醒本应用自启动或关联启动行为,是因实现功能及服务所必要的;当您打开内容类推送消息,在征得您的明确同意后,会跳转打开相关内容。在未征得您同意的情况下,则不会有关联启动。
-        当您在本APP内部下载文件(比如应用内版本更新提示),根据下载状态处理HTTP连接并监控连接中的状态变化以及系统重启来确保每一个下载任务顺利完成,特别是当用户切换不同的应用以后下载需要在后台继续进行(可能会有后台进程自启动),以及当下载任务顺利完成后获取APK文件安装。
-        xml中描述名称:android.permission.BIND_DEVICE_ADMIN
-        
-		(二)我们从第三方获得您个人信息的情形
-        我们可能从第三方获取您授权共享的账户信息(头像、昵称),并在您同意本隐私政策后将您的第三方账户与您的鹅状元账户绑定,使您可以通过第三方账户直接登录并使用我们的产品与或服务。我们会将依据与第三方的约定、对个人信息来源的合法性进行确认后,在符合相关法律和法规规定的前提下,使用您的这些个人信息。
-        
-		(三)您的个人信息使用规则
-        1.我们会根据本隐私政策的约定并为实现我们的产品与/或服务功能对所收集的个人信息进行使用。
-        
-		2.在收集您的个人信息后,我们将通过技术手段对数据进行去标识化处理,去标识化处理的信息将无法识别主体。请您了解并同意,在此情况下我们有权使用已经去标识化的信息,并在不透露您个人信息的前提下,我们有权对用户数据库进行分析并予以商业化的利用。
-        
-		3.请您注意,您在使用我们的产品与/或服务时所提供的所有个人信息,除非您删除或通过系统设置拒绝我们收集,否则将在您使用我们的产品与/或服务期间持续授权我们使用。在您注销账号时,我们将停止使用并删除您的个人信息。
-        
-		4.我们会对我们的产品或服务使用情况进行统计,并可能会与公众号或第三方共享这些统计信息,以展示我们的产品或服务的整体使用趋势但这些统计信息不包含您的任何身份识别信息。
-        
-		5.当我们展示您的个人信息时,我们会采用包括内容替换、匿名处理方式对您的信息进行脱敏,以保护您的信息安全。
-        
-		6.当我们要将您的个人信息用于本政策未载明的其他用途时,或基于特定目的收集而来的信息用于其他目的时,会通过您主动做出勾选的形式事先征求您的同意。
-        
-		二、我们如何使用 Cookie 和同类技术
-        
-		(一)Cookie的使用
-        
-		1.为了使您获得更优质的访问体验。我们会在您的计算机或移动设备上发送一个或多个名为Cookie的小数据文件,制定给您的Cookie是惟一的,它只能被将Cookie发布给您的域中的Wed服务器读取。我们向您发送Cookie是为了简化您重复登录的步骤,帮助判断您的登录状态以及账户或数据安全。
-        
-		2.我们不会将Cookies 用于本隐私政策所述目的之外的任何用途。您可根据自己的偏好管理或删除 Cookies。您可以清除计算机上保存的所有 Cookies,大部分网络浏览器会自动接受Cookies,但您通常可根据自己的需要来修改浏览器的设置以拒绝 Cookies;另外,您也可以清除软件内保存的所有Cookies。但如果您这么做,您可能需要在每一次访问鹅状元APP时亲自更改用户设置,而且您之前所记录的相应信息也均会被删除,并且可能会对您所使用服务的安全性有一定影响。
-        
-		(二)Do Not Track (请勿追踪)
-        
-		很多网络浏览器均设有Do Not Track功能该功能可向网站发布Do Not Track请求。目前主要互联网标准组织尚未设立相关政策来规定网站应如何应对此类请求。但如果您的浏览器启用了Do Not Track,那么我们的所有网站都会尊重您的选择。
-        
-		三、我们如何共享、转让、公开披露您的个人信息
-        
-		(一)共享
-        
-		1.我们不会向其他任何公司、组织和个人分享您的个人信息,但以下情况除外:
-        
-		(1)在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息;
-        
-		(2)我们可能会根据法律法规规定,或按政府主管部门的强制性要求,对外共享您的个人信息;
-        
-		(3)在法律法规允许的范围内,为维护鹅状元、鹅状元的关联方或合作伙伴您或其他鹅状元用户或社会公众利益、财产或安全免遭损害而有必要提供;
-        
-		(4)只有共享您的信息,才能实现我们的产品与/或服务的核心功能或提供您需要的服务;
-        
-		(5)应您需求为您处理您与他人的纠纷或争议;
-        
-		(6)符合与您签署的相关协议(包括在线签署的电子协议以及相应的平台规则)或其他的法律文件约定所提供;
-        
-		(7)基于学术研究而使用;
-        
-		(8)基于符合法律法规的社会公共利益而使用。
-       
-		2.我们可能会将您的个人信息与我们的关联方共享。但我们只会共享必要的个人信息,且受本隐私政策中所声明目的的约束。我们的关联方如要改变个人信息的处理目的,将再次征求您的授权同意。
-      
-		3.我们可能会向合作伙伴等第三方共享您的订单信息、账户信息以保障为您提供的服务顺利完成。但我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。我们的合作伙伴包括以下类型:
-        
-		(1)商品或技术服务的供应商。我们可能会将您的个人信息共享给支持我们功能的第三方。这些支持包括为我们的供货或提供基础设施技术服务、支付服务、数据处理等。
-        
-		(2)授权合作伙伴。我们可能会与合作伙伴共享您的某些个人信息,以提供更好的客户服务和用户体验。例如,我们聘请来提供第三方数据统计和分析服务的公司可能需要采集和访问个人数据以进行数据统计和分析。在这种情况下,这些公司必须遵守我们的数据隐私和安全要求。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。
-        
-		(3)目前我们尚未接入任何第三方SDK服务
-        
-		4.为了遵守法律、执行或适用我们的使用条件和其他协议,或者为了保护鹅状元、您或其他鹅状元客户的权利及其财产或安全,比如为防止欺诈等违法活动和减少信用风险,而与其他公司和组织交换信息。不过,这并不包括违反本隐私政策中所作的承诺而为获利目的出售、出租、共享或以其它方式披露的个人信息。
-        
-		(二)转让
-        
-		我们不会将您的个人信息转让给任何公司组织和个人,但以下情况除外:
-        
-		1.在获取明确同意的情况下转让:获得您的明确同意后,我们会向其他方转让您的个人信息。
-        
-		2.在涉及合并、收购或破产清算时,如涉及到个人信息转让,我们会在要求新的持有您个人信息的公司、组织继续受此隐私政策的约束,否则我们将要求该公司、组织重新向您征求授权同意。
-        
-		(三)公开披露
-       
-		我们仅会在以下情况下,公开披露您的个人信息:
-            
-			1.获得您明确同意后。
-           
-			2.基于法律的披露:在法律、法律程序、诉讼或政府主管部门强制性要求的情况下,我们可能会公开披露您的个人信息。
-            四、我们如何保护您的个人信息
-
-                (一)我们已使用符合业界标准的安全防护措施保护您提供的个人信息,防止数据遭到未经授权访问、公开披露、使用、修改、损坏或丢失。我们会采取一切合理可行的措施,保护您的个人信息。例如,在您的浏览器与“服务”之间交换数据(如信用卡信息)时受SSL加密保护:我们会使用加密技术确保数据的保密性;我们会使用受信赖的保护机制防止数据遭到恶意攻击;我们会部署访问控制机制,确保只有授权人员才可访问个人信息;以及我们会举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。
-                
-				(二)我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。
-                
-				(三)互联网并非绝对安全的环境,而且电子邮件、即时通讯、及与其他我们用户的交流方式并未加密,我们强烈建议您不要通过此类方式发送个人信息。请使用复杂密码,协助我们保证您的账号安全。
-                
-				(四)在不幸发生个人信息安全事件后,我们将按照法律法规的要求,及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。
-
-            同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。
-            
-			五、您的权利
-           
-			按照中国相关的法律、法规、标准,以及其他国家、地区的通行做法,我们保障您对自己的个人信息行使以下权利:
-            
-			(一)访问您的个人信息
-            
-			您有权访问您的个人信息,法律法规规定的例外情况除外。如果您想行使数据访问权,可以通过以下方式自行访问:
-            
-			1.账户信息:
-            
-			您可以在“个人中心-个人资料”中访问或编辑您的账户中的昵称、手机号码。
-            
-			2.订单信息:
-            
-			您可以在“个人中心-会员中心-订单管理”中查看您的所有已完成、待付款的订单信息。
-            
-			3.练习记录
-            
-			您可以在“个人中心-练习记录”中查看个人的练习记录,包括练习时长、练习题数以及正确率等信息。
-            
-			4.对于您在使用我们的产品或服务过程中产生的其他个人信息需要访问或更正,请随时联系我们。我们会根据本隐私政策所列明的方式和期限响应您的请求。
-            
-			(二)删除您的个人信息
-            
-			在以下情形中,您可以向我们提出删除个人信息的请求:
-            
-			1.如果我们处理个人信息的行为违反法律法规。
-            
-			2.如果我们收集、使用您的个人信息,却未征得您的同意。
-            
-			3.如果我们处理个人信息的行为违反了与您的约定。
-            
-			4.如果您不再使用我们的产品或服务,或您注销了账号。
-            
-			5.如果我们不再为您提供产品或服务。
-            
-			若我们决定响应您的删除请求,我们还将同时通知从我们获得您的个人信息的实体,要求其及时删除,除非法律法规另有规定,或这些实体获得您的独立授权。
-                我们不会在网络上存储任何用户的隐私信息,所有用户的隐私信息都将直接存储在用户自己本地手机。
-            
-			(三)改变您授权同意的范围
-            
-			每个业务功能需要一些基本的个人信息才能得以完成(见本策略“第一部分”)。对于额外收集的个人信息的收集和使用,您可以随时给予或收回您的授权同意。
-                当您收回同意后,我们将不再处理相应的个人信息。但您收回同意的决定,不会影响此前基于您的授权而开展的个人信息处理。
-            
-			(四)账号注销指引
-            
-			联系客服申请账号注销。我们的客服在接收到您的请求后,将在3个工作日内为您完成账号注销工作。
-            
-			(五)响应您的上述请求
-            
-			为保障安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。我们将在15个工作日内做出答复。对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情况收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际的请求,我们可能会予以拒绝。
-                在以下情形中,按照法律法规要求,我们将无法响应您的请求:
-            
-			1.与国家安全、国防安全有关的。
-            
-			2.与公共安全、公共卫生、重大公共利益有关的。
-            
-			3.与犯罪侦查、起诉和审判等有关的。
-            
-			4.有充分证据表明您存在主观恶意或滥用权利的。
-            
-			5.响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的。
-            
-			六、未成年人的个人信息保护
-            
-			1.我们的产品、网站和服务主要面向成人。若您是18周岁以下的未成年人,在使用我们的产品或服务前,应事先取得您家长或法定监护人的书面同意。鹅状元根据国家相关法律法规的规定保护未成年人的个人信息。
-            
-			2.对于经父母同意而收集未成年人个人信息的情况,我们只会在受到法律允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用或公开披露此信息。
-            
-			七、您的个人信息如何在全球范围转移
-            
-			我们在中华人民共和国境内运营中收集和产生的个人信息,存储在中国境内,以下情形除外:
-            
-			1.法律法规有明确规定。
-            
-			2.获得您的明确授权。
-            
-			3.您通过互联网进行跨境交易等个人主动行为。
-            针对以上情形,我们会确保依据本隐私政策对您的个人信息提供足够的保护。
-            
-			八、本隐私政策如何更新
-            我们可能适时会对本隐私政策进行调整或变更,本隐私政策的任何更新将以标注更新时间的方式公布在我们网站上,除法律法规或监管规定另有强制性规定外,经调整或变更的内容一经发布后生效。如您在隐私政策调整或知或公布后的/变更后继续使用我们提供的任一服务或访问我们相关网站的,我们相信这代表您已充分阅读、理解并接受修改后的隐私政策并受其约束。
-            
-			九、如何联系我们
-            如果您对本隐私政策有任何疑问、意见或建议,通过以下方式与我们联系:
-            
-			本软件运营主体名称:大连佳诚智信软件信息技术有限公司
-            
-			联系地址:大连市沙河口区数码路北段25号201室
-            
-			一般情况下,我们将在15个工作日内回复。`
-	    	agreementSections.value  = formatText(ystkText)
-	    break;
-	}
-}
-
-function formatText(text) {
-	return text.replace(/\n/g, '<br/>');
-}
-// 打开弹窗
-function handleShow() {
-	agreeContentPopup.value.open();
-}
-// 关闭弹窗
-function handleClose() {
-	agreeContentPopup.value.close();
-}
-defineExpose({
-		handleShow
-	})
-</script>

+ 0 - 38
pages/login/agreeDialog.vue

@@ -1,38 +0,0 @@
-<template>
-	<uni-popup ref="agreePopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);">
-	 <view class="agree-sections-dialog">
-			<view class="sections-content-box">
-				<view class="agree-title">用户协议及隐私保护</view>
-				<view class="agree-tip">我已阅读并同意《用户协议》和《隐私政策》</view>
-				<view class="confirm-btn" @click="confirmBtn"></view>
-				<text class="not-confirm-btn" @click="handleClose">不同意</text>
-			</view>
-	 </view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	const agreePopup = ref(null); // 索引
-	const $emit = defineEmits(['confirm-btn'])
-	// 打开弹窗
-	function handleShow() {
-		agreePopup.value.open();
-	}
-	// 关闭弹窗
-	function handleClose() {
-		agreePopup.value.close();
-	}
-	// 同意并登录按钮
-	function confirmBtn(){
-		$emit('confirm-btn');
-		agreePopup.value.close();
-	}
-	defineExpose({
-			handleShow
-		})
-</script>
-
-<style>
-</style>

+ 0 - 242
pages/login/index.vue

@@ -1,242 +0,0 @@
-<template>
-	<view class="ezy-login-page">
-		<view class="ezy-login-wrap">
-			<icon class="login-e-img"></icon>
-			<!-- 手机号 -->
-			<view class="login-body-box">
-				<view class="index-title-img"></view>
-				<view class="phone-input-box">
-					<view class="phone-prefix">+86</view>
-					<input class="phone-input" type="text" v-model="indexData.phoneNumber" placeholder="请输入手机号"
-						maxlength="11" @input="clearTelInput" />
-					<view class="close-btn" v-if="indexData.clearTelIcon" @click="clearTel"></view>
-				</view>
-				<!-- 协议勾选框和按钮 -->
-				<view class="agreement-checkbox-box">
-					<checkbox-group @change="handleAgreementChange">
-						<checkbox class="agreement-checkbox-input" color="#FFFFFF" value="agree"
-							:checked="indexData.isAgreed" />
-					</checkbox-group>
-					<view class="agreement-text-box">
-						我已阅读并同意<view class="agreement-text" @click="agreeBtn('yhxy')">《用户协议》</view>和<view
-							@click="agreeBtn('ystk')" class="agreement-text">《隐私政策》</view>
-					</view>
-				</view>
-				<view class="login-btn" @click="getYzmBtn" :class="indexData.telStatus"></view>
-			</view>
-			<view class="bottom-btn-box">
-				<view class="wx-btn" @click="wxLoginClick"></view>
-				<view class="yk-btn" @click="ykBtn"></view>
-			</view>
-		</view>
-		<agree-content-dialog ref="agreeContentDialogRef" :agreeType="agreeType"></agree-content-dialog>
-		<agree-dialog ref="agreeDialogRef" @confirm-btn="confirmBtn"></agree-dialog>
-		<agree-dialog ref="agreeYkDialog" @confirm-btn="ykConfirmBtn"></agree-dialog>
-		<tel-dialog ref="telDialogRef" @telClose="telClose" @bindBtn="bindBtn" v-if="telDialogFlag"></tel-dialog>
-	</view>
-</template>
-
-<script setup>
-	import {
-		ref,
-		nextTick,
-		reactive
-	} from "vue"
-	import {
-		onLoad,
-		onReady
-	} from '@dcloudio/uni-app';
-	import agreeContentDialog from './agreeContentDialog.vue';
-	import agreeDialog from './agreeDialog.vue'
-	import {
-		wxLogin,
-	} from "@/api/login.js"
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import telDialog from './telDialog.vue'
-	import cacheManager from "@/utils/cacheManager.js";
-	import {
-		error
-	} from "uview-plus";
-	let indexData = reactive({
-		phoneNumber: null,
-		clearTelIcon: false,
-		telStatus: 'tel-btn-disabled',
-		isAgreed: false,
-		sliderObj: {},
-	})
-	const agreeContentDialogRef = ref(null);
-	const agreeType = ref(null);
-	const agreeDialogRef = ref(null);
-	const agreeYkDialog = ref(null);
-	const telDialogRef = ref(null);
-	let telDialogFlag = ref(false);
-
-	onLoad((options) => {})
-
-	const getYzmBtn = () => {
-		if (indexData.telStatus === 'tel-btn-normal') {
-			if (indexData.isAgreed === true) {
-				uni.navigateTo({
-					url: `/pages/login/login?telNum=${indexData.phoneNumber}`
-				})
-			} else {
-				agreeDialogRef.value.handleShow();
-			}
-		}
-	}
-	// 用户协议同意
-	const confirmBtn = () => {
-		indexData.isAgreed = true;
-		getYzmBtn();
-	}
-	const telClose = () => {
-		telDialogFlag.value = false;
-	}
-	const bindBtn = (res) => {
-		telDialogFlag.value = false;
-		if (res.cardId == 0) {
-			uni.redirectTo({
-				url: `/pages/selectGradesTerms/index`
-			})
-		} else {
-			uni.redirectTo({
-				url: `/pages/study/index`
-			})
-		}
-	}
-
-	const ykConfirmBtn = () => {
-		uni.navigateTo({
-			url: `/pages/selectGradesTerms/index`
-		})
-	}
-	// 手机号校验规则
-	const validatePhoneNumber = (value) => {
-		const phoneRegex = /^1[3-9]\d{9}$/;
-		if (phoneRegex.test(value)) {
-			indexData.telStatus = 'tel-btn-normal';
-		} else {
-			indexData.telStatus = 'tel-btn-disabled';
-		}
-	}
-
-	const clearTelInput = (event) => {
-		if (event.detail.value.length > 0) {
-			indexData.clearTelIcon = true;
-			validatePhoneNumber(event.detail.value);
-		} else {
-			indexData.clearTelIcon = false;
-		}
-	}
-
-	const clearTel = () => {
-		indexData.phoneNumber = '';
-		indexData.telStatus = 'tel-btn-disabled';
-		indexData.clearTelIcon = false;
-	}
-
-	const agreeBtn = (data) => {
-		if (data === 'yhxy') {
-			agreeType.value = 'yhxy'
-		} else {
-			agreeType.value = 'ystk'
-		}
-		agreeContentDialogRef.value.handleShow();
-	};
-
-	const handleAgreementChange = (event) => {
-		if (event.detail.value[0] === 'agree') {
-			indexData.isAgreed = true;
-		} else {
-			indexData.isAgreed = false;
-		}
-	}
-	// 游客登录
-	const ykBtn = () => {
-		if (indexData.isAgreed === true) {
-			uni.redirectTo({
-				url: `/pages/selectGradesTerms/index`
-			})
-		} else {
-			agreeYkDialog.value.handleShow();
-		}
-	}
-
-	const wxLoginClick = () => {
-		//获取服务商信息判断手机端是否安装了app
-		// uni.getProvider({
-		// 	service: 'oauth',// oauth  代表授权登录
-		// 	success: function (res) {
-		// 	  // 登录
-		// 	  uni.login({
-		// 		  // 表示授权方式  如果不设置则弹出登录列表选择界面
-		// 		  provider: 'weixin',
-		// 		 	"onlyAuthorize": true, // 微信登录仅请求授权认证
-		// 		  success: function (loginRes) {
-		// 			  		console.log('loginRes',loginRes); 
-
-		// 		  }
-		// 	  });
-		//    }
-		// });
-		uni.login({
-			"provider": "weixin",
-			"onlyAuthorize": true, // 微信登录仅请求授权认证
-			success: function(event) {
-				console.log(event);
-				const {
-					code
-				} = event
-				//客户端成功获取授权临时票据(code),向业务服务器发起登录请求。
-				let req = {
-					"apple": false,
-					"code": code
-				}
-				console.log(req);
-				wxLogin(req).then(res => {
-					console.log(res);
-					if (!res.data.bind) {
-						console.log('未绑定');
-						cacheManager.set('wxLogin', {
-							bind: res.data.bing
-						})
-						telDialogFlag.value = true;
-						nextTick(() => {
-							telDialogRef.value.getOpenId(res.data.openId);
-						})
-					} else {
-						uni.showLoading({
-							title: '登录中'
-						});
-						setTimeout(()=>{
-							cacheManager.set('auth', res.data.loginVo)
-							if (res.data.loginVo.cardId == 0) {
-							
-								uni.redirectTo({
-									url: `/pages/selectGradesTerms/index`
-								})
-									uni.hideLoading();
-							} else {
-							
-								uni.redirectTo({
-									url: `/pages/study/index`
-								})
-									uni.hideLoading();
-							}
-						},1000)	
-					}
-				}).catch((error) => {
-					console.log(error);
-				})
-			},
-			fail: function(err) {
-				console.log(err);
-				// 登录授权失败
-				// err.code是错误码
-			}
-		})
-	}
-</script>

+ 0 - 183
pages/login/login.vue

@@ -1,183 +0,0 @@
-<template>
-	<view class="ezy-login-page">
-		<view @click="goIndex" class="ezy-nav-bar-icon"></view>
-		<view class="ezy-login-wrap">
-			<icon class="login-e-img"></icon>
-			<view class="login-body-box">
-				<view class="login-title-img"></view>
-				<view class="yzm-show">验证码已发送至:{{loginData.phoneNumber}}</view>
-
-				<view class="phone-input-box">
-					<input class="phone-input" type="text" v-model="loginData.yzmNumber" placeholder="请输入验证码"
-						maxlength="6" @input="clearYzmInput" />
-					<view class="close-btn" v-if="loginData.clearYzmIcon" @click="clearYzm"></view>
-				</view>
-				<view class="login-btn yzm-btn" @click="loginBtn" :class="loginData.yzmStatus"></view>
-				<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">客服电话:400-052-2130</text>
-			</view>
-		</view>
-		<captcha ref="captcha" :config="config" @captchaSuccess="captchaSuccess" @captchaError="captchaError"
-			@captchaFail="captchaFail" @captchaReady="captchaReady" @captchaClose="captchaClose"></captcha>
-	</view>
-</template>
-
-<script>
-	import {
-		ref,
-		reactive
-	} from "vue"
-	import {
-		login,
-		sendCode
-	} from "@/api/login.js"
-	import cacheManager from "@/utils/cacheManager.js";
-	import captcha from "../../components/captcha4/index.vue";
-	import {
-		toast
-	} from "../../utils/common";
-	export default {
-		data() {
-			return {
-				loginData: {
-					phoneNumber: null,
-					yzmNumber: null,
-					clearYzmIcon: false,
-					yzmStatus: 'login-btn-disabled',
-					timeLeft: 60, // 初始倒计时时间(秒)
-					intervalId: null, // 定时器ID
-					isDisabled: false, // 按钮是否禁用
-					buttonText: '', // 按钮文本
-				},
-				sliderData: {},
-				sliderDialogRef: null,
-				config: {
-					captchaId: "9d5837b0807b8de44da0de310a0b2813",
-				},
-
-			}
-		},
-		components: {
-			captcha
-		},
-		onLoad(options) {
-			this.loginInit(options);
-		},
-		onReady() {},
-		methods: {
-
-			captchaSuccess(result) { // app端的回调
-				console.log(result)
-				this.startCountdown();
-				this.sliderData = result;
-				this.getYzmBtn();
-
-			},
-			captchaError(e) {
-				// app端的回调、
-				console.log('error',JSON.stringify(e));
-				toast(JSON.stringify(e))
-			},
-			captchaReady() {
-				// app端的回调
-			},
-			captchaFail() {
-				// app端的回调
-				toast('验证失败!')
-			},
-			captchaClose() {
-				uni.redirectTo({
-					url: `/pages/login/index`
-				})
-			},
-
-			loginInit(options) {
-				this.loginData.phoneNumber = options.telNum;
-			},
-			getYzmBtn() {
-				let req = {
-					phone: this.loginData.phoneNumber,
-					captchaOutput: this.sliderData.captcha_output,
-					genTime: this.sliderData.gen_time,
-					lotNumber: this.sliderData.lot_number,
-					passToken: this.sliderData.pass_token,
-				}
-				console.log('req', req);
-				sendCode(req).then(res => {
-
-				})
-			},
-			loginBtn() {
-				let req = {
-					tel: this.loginData.phoneNumber,
-					code: this.loginData.yzmNumber,
-				}
-				login(req).then(res => {
-					if (res.code == 0) {
-						cacheManager.set('auth', res.data)
-						if (res.data.cardId == 0) {
-							uni.redirectTo({
-								url: `/pages/selectGradesTerms/index`
-							})
-						} else {
-							uni.redirectTo({
-								url: `/pages/study/index`
-							})
-						}
-					}
-				})
-			},
-			clearYzmInput(event) {
-				if (event.detail.value.length > 0) {
-					this.loginData.clearYzmIcon = true;
-					this.loginData.yzmStatus = 'login-btn-normal';
-				} else {
-					this.loginData.clearYzmIcon = false;
-					this.loginData.yzmStatus = 'login-btn-disabled';
-				}
-			},
-			clearYzm() {
-				this.loginData.yzmNumber = '';
-				this.loginData.yzmStatus = 'login-btn-disabled';
-				this.loginData.clearYzmIcon = false;
-			},
-			startCountdown() {
-				if (this.loginData.buttonText === '重新发送') {
-					this.$refs.captcha.showCaptcha();
-				}
-				this.loginData.isDisabled = true;
-				this.loginData.buttonText = `重新发送(${this.loginData.timeLeft}S)`;
-
-				// 清除之前的定时器(如果有)
-				if (this.loginData.intervalId) {
-					clearInterval(this.loginData.intervalId);
-				}
-
-				// 设置新的定时器
-				this.loginData.intervalId = setInterval(() => {
-					this.loginData.timeLeft--;
-					if (this.loginData.timeLeft <= 0) {
-						clearInterval(this.loginData.intervalId);
-						this.loginData.timeLeft = 60; // 重置倒计时
-						this.loginData.isDisabled = false;
-						this.loginData.buttonText = '重新发送';
-					} else {
-						this.loginData.buttonText = `重新发送(${this.loginData.timeLeft}S)`;
-					}
-				}, 1000);
-			},
-
-			goIndex() {
-				uni.redirectTo({
-					url: `/pages/login/index`
-				})
-			}
-
-		},
-		mounted() {
-			this.$refs.captcha.showCaptcha();
-		},
-	}
-</script>

+ 0 - 238
pages/login/telDialog.vue

@@ -1,238 +0,0 @@
-<template>
-	<view class="my-tel-dialog">
-		<view class="my-tel-content">
-			<view class="tel-close" @click="telClose(AWSC)"></view>
-			<view class="tel-row">
-				<view class="my-tel-title">绑定手机号</view>
-				<view class="my-input-box">
-					<input class="my-input" type="text" v-model="bindObj.telNumber" placeholder="请输入手机号" maxlength="11"
-						@input="changeTelInput" />
-					<view class="close-btn" v-if="bindObj.clearTelIcon" @click="clearTel"></view>
-				</view>
-
-				<captcha ref="captcha" :config="config" @captchaSuccess="captchaSuccess" @captchaError="captchaError"
-					@captchaFail="captchaFail" @captchaReady="captchaReady" @captchaClose="captchaClose"></captcha>
-				<view class="get-yzm-btn" @click="getYzmBtn" :class="{ 'get-yzm-disabled': bindObj.isDisabled}">
-					{{bindObj.buttonText}}</view>
-			</view>
-			<view class="yzm-row">
-				<view class="yzm-tip" v-if="bindObj.getYzmFlag">验证码已发送至:{{bindObj.telNumber}}</view>
-				<view class="my-input-box">
-					<input class="my-input" type="text" v-model="bindObj.yzmNumber" placeholder="请输入验证码" maxlength="6"
-						@input="changeYzmInput" />
-					<view class="close-btn" v-if="bindObj.clearYzmIcon" @click="clearYzm"></view>
-				</view>
-				<view @click="bindBtn" class="my-bind-btn">绑定</view>
-			</view>
-
-		</view>
-	</view>
-</template>
-<script>
-	import cacheManager from '@/utils/cacheManager.js';
-	import captcha from "../../components/captcha4/index.vue";
-	import {
-		firstTelBind,
-		sendCode
-	} from "@/api/login.js"
-	import {
-		toast
-	} from "../../utils/common";
-	export default {
-		data() {
-			return {
-				myflag: 0,
-				sliderObj: {
-					sessionId: '',
-					sig: '',
-					token: '',
-				},
-				bindObj: {
-					apple: false,
-					openId: '',
-					telNumber: '',
-					clearTelIcon: false,
-					yzmNumber: '',
-					clearYzmIcon: false,
-					/*** 验证码 ***/
-					yzmStatus: 'login-btn-disabled',
-					timeLeft: 60, // 初始倒计时时间(秒)
-					intervalId: null, // 定时器ID
-					isDisabled: true, // 按钮是否禁用
-					buttonText: '获取验证码', // 按钮文本
-					getYzmFlag: false, // 是否发送验证码
-				},
-				config: {
-					captchaId: "9d5837b0807b8de44da0de310a0b2813",
-				},
-			}
-		},
-		components: {
-			captcha
-		},
-		methods: {
-
-			telClose() {
-				this.$emit('telClose')
-			},
-
-			// 清空手机号
-			clearTel() {
-				this.bindObj.telNumber = '';
-				this.bindObj.isDisabled = true;
-				this.bindObj.clearTelIcon = false;
-				this.bindObj.getYzmFlag = false;
-			},
-			// 判断是否输入手机号
-			changeTelInput(event) {
-				if (event.detail.value.length > 0) {
-					this.bindObj.clearTelIcon = true;
-					this.validatePhoneNumber(event.detail.value);
-				} else {
-					this.bindObj.clearTelIcon = false;
-				}
-			},
-
-			// 手机号校验规则
-			validatePhoneNumber(value) {
-				const phoneRegex = /^1[3-9]\d{9}$/;
-				if (phoneRegex.test(value)) {
-					// 通过
-					this.bindObj.isDisabled = false;
-				} else {
-					// 不通过
-					this.bindObj.isDisabled = true;
-				}
-			},
-			// 获取验证码按钮
-			getYzmBtn() {
-				// 判断手机号校验是否通过
-				if (this.bindObj.timeLeft != 60) {
-					toast('请在' + this.bindObj.timeLeft + '后重新获取验证码!')
-					return
-				} else if (this.bindObj.isDisabled === true) {
-					toast("请输入正确的手机号!")
-					return
-				} else {
-					this.$refs.captcha.showCaptcha();
-				}
-			},
-			captchaSuccess(result) { // app端的回调
-				console.log(result)
-				this.startCountdown();
-				this.sliderData = result;
-				this.getMessage();
-
-			},
-			captchaError(e) {
-				// app端的回调
-				toast(JSON.stringify(e))
-			},
-			captchaReady() {
-				// app端的回调
-			},
-			captchaFail() {
-				// app端的回调
-				toast('验证失败!')
-			},
-			captchaClose() {
-				uni.redirectTo({
-					url: `/pages/login/index`
-				})
-			},
-			getMessage() {
-				let req = {
-					phone: this.bindObj.telNumber,
-					captchaOutput: this.sliderData.captcha_output,
-					genTime: this.sliderData.gen_time,
-					lotNumber: this.sliderData.lot_number,
-					passToken: this.sliderData.pass_token,
-
-
-				}
-				sendCode(req).then(res => {
-					this.bindObj.getYzmFlag = true;
-				}).catch(err => {
-					toast('验证码获取失败:' + err)
-				})
-			},
-
-			// 清空验证码
-			clearYzm() {
-				this.bindObj.yzmNumber = '';
-				this.bindObj.isDisabled = true;
-				this.bindObj.clearYzmIcon = false;
-			},
-
-			// 判断是否输入验证码
-			changeYzmInput(event) {
-				if (event.detail.value.length > 0) {
-					this.bindObj.clearYzmIcon = true;
-				} else {
-					this.bindObj.clearYzmIcon = false;
-				}
-			},
-
-			// 开始计时
-			startCountdown() {
-
-				if (this.bindObj.buttonText === '重新发送') {
-					this.$refs.captcha.showCaptcha();
-				}
-				this.bindObj.isDisabled = true;
-				this.bindObj.buttonText = `重新发送(${this.bindObj.timeLeft}S)`;
-
-				// 清除之前的定时器(如果有)
-				if (this.bindObj.intervalId) {
-					clearInterval(this.bindObj.intervalId);
-				}
-
-				// 设置新的定时器
-				this.bindObj.intervalId = setInterval(() => {
-					this.bindObj.timeLeft--;
-					if (this.bindObj.timeLeft <= 0) {
-						clearInterval(this.bindObj.intervalId);
-						this.bindObj.timeLeft = 60; // 重置倒计时
-						this.bindObj.isDisabled = false;
-						this.bindObj.buttonText = '重新发送';
-					} else {
-						this.bindObj.buttonText = `重新发送(${this.bindObj.timeLeft}S)`;
-					}
-				}, 1000);
-			},
-			getOpenId(data) {
-				this.bindObj.openId = data
-
-			},
-			// 绑定按钮
-			bindBtn() {
-				if (this.bindObj.telNumber === '') {
-					toast('手机号不能为空')
-					return;
-				}
-				if (this.bindObj.yzmNumber === '') {
-					toast('验证码不能为空')
-					return;
-				}
-
-				let req = {
-					tel: this.bindObj.telNumber,
-					code: this.bindObj.yzmNumber,
-					apple: this.bindObj.apple,
-					openId: this.bindObj.openId,
-				}
-				console.log(req);
-				firstTelBind(req).then(res => {
-					if (res.code == 0) {
-						console.log(res.data);
-						toast('手机号绑定成功')
-						cacheManager.set('auth', res.data)
-						this.$emit('bindBtn', res.data)
-						//	this.telClose();
-
-					}
-				})
-			},
-		}
-	}
-</script>

+ 0 - 69
pages/my/aboutPage.vue

@@ -1,69 +0,0 @@
-<template>
-	<view class="ezy-about-page">
-		<view class="icon-title-navBar-box">
-			<view @click="handleBack" class="nav-bar-icon"></view>
-			<text class="nav-bar-title">关于我们</text>
-		</view>
-		<view class="about-body-border">
-			<view class="about-body-box">
-				<view class="content-top-box">
-					<icon class="about-icon-box"></icon>
-					<view class="top-text-box">
-						<view class="about-name">鹅状元</view>
-						<view class="about-text">客服电话:400-099-0883</view>
-						<view class="about-text">备案号:辽ICP备15006970号-7A</view>
-					</view>
-				</view>
-				<view class="content-box">
-					<p>鹅状元 APP:点亮孩子成长之路的智慧灯塔</p>
-					<p>专为 6 - 12 岁孩子量身打造的鹅状元 APP 震撼来袭!</p>
-					<p>在这里,学习就像一场奇妙冒险。数学学习不再是难题堆砌,一套独家“秘籍”让知识轻松解锁。从启蒙到进阶的 L1 - L6 阶梯式成长路径,以新颖的“画图策略”为指引,将复杂问题可视化,引领孩子畅游数字海洋。每一道精心挑选的母题都是开启智慧大门的钥匙,牵一发而动全身,让孩子触类旁通,学会举一反三,真正把知识用起来,生活处处皆数学考场。</p>
-					<p>英语学习更是趣味横生。聚焦神奇“发音密码”,带孩子从字母韵律起步,一步步叩响英语世界的大门。沉浸式学习环境,趣味互动游戏贯穿始终,随着学习深入,孩子悄然掌握自然拼读技巧,单词认读、口语表达水到渠成。</p>
-					<p>鹅状元精准锚定孩子成长关键。学习时,它化身启智伙伴,激励孩子自主找答案,点燃思考火苗;还为孩子搭起表达的“舞台”,使其能自信开麦、条理阐述观点。助力孩子在成长路上全速启航,鹅状元 APP 就是那根神奇“魔杖”,帮孩子解锁无限潜力,奔赴美好未来。</p>
-				</view>
-			</view>
-		</view>
-		<CustomTabBar :cardId="cardId" :nianji="nianji" :zhangId="zhangId" :tipFlag="tipFlag"></CustomTabBar>
-	</view>
-</template>
-
-<script setup>
-	import {onLoad} from '@dcloudio/uni-app';
-	import {ref} from "vue";
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	import cacheManager from '@/utils/cacheManager.js';
-	const zhangId = ref(null);//游客使用
-	const nianji = ref(null);//游客使用
-	const cardId = ref(null);//游客使用
-	const tipFlag = ref(null); //游客使用
-	let routerOpt  = ref(false);
-	
-	// 关于我们
-	function handleBack(){
-		if(cacheManager.get('auth')){
-			// 非游客
-			uni.redirectTo({
-				url: '/pages/my/index'
-			});
-		}else{
-			// 游客
-			uni.redirectTo({
-				url: `/pages/my/index?nianji=${routerOpt.nianji}&cardId=${routerOpt.cardId}&zhangId=${routerOpt.zhangId}&tipFlag=${routerOpt.tipFlag}`
-			});
-		}
-		
-	}
-	
-	onLoad((options) => {
-		if(options){
-			routerOpt = options;
-			zhangId.value = options.zhangId
-			nianji.value = options.nianji
-			cardId.value = options.cardId
-			tipFlag.value = options.tipFlag
-		}
-	})
-</script>
-
-<style>
-</style>

+ 0 - 303
pages/my/index.vue

@@ -1,303 +0,0 @@
-<template>
-	<view class="ezy-my-page">
-		<view class="my-head-box">
-			<icon class="head-img-box" :style="{backgroundImage: 'url(' + myInfoData.userImg + ')'}"></icon>
-			<view class="head-content-box">
-				<text>{{myInfoData.userName}}</text>
-				<view class="ezy-jf-box" v-if="loginFlag">
-					<icon class="jf-icon"></icon>
-					<text class="jf-text" >{{myInfoData.credit}}</text>
-				</view>
-			</view>
-		</view>
-		<swiper class="my-hyqy-swiper" circular :indicator-dots="hyqyData.indicatorDots" :autoplay="hyqyData.autoplay"
-		:interval="hyqyData.interval" :duration="hyqyData.duration" indicator-color="#5195d3" indicator-active-color="#83d9ff">
-			<!-- 1.数学 2.英语-->
-			<swiper-item v-for="(item, index) in 2" :key="index" class="hyqy-box" :class="getHyqyClass(index)">
-					<view class="hyqy-btn" @click="hyqyBtn(index)" v-if="getHyqyBtn(index)"></view>
-			</swiper-item>
-		</swiper>
-		<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="checkWrong">
-				<icon class="list-icon error-icon"></icon>
-				<text>我的错题</text>
-			</view>
-			<view class="list-row" @click="orderClick">
-				<icon class="list-icon order-icon"></icon>
-				<text>我的订单</text>
-			</view>
-			<view class="list-row no-jt" @click="aboutClick">
-				<icon class="list-icon about-icon"></icon>
-				<text>关于我们</text>
-			</view>
-			<view class="list-row no-jt" @click="exitLogin">
-				<icon class="list-icon login-out-icon"></icon>
-				<text>退出登录</text>
-			</view>
-		</view>
-		<CustomTabBar :cardId="cardId" :currentTabNumber="2" :nianji="nianji" :zhangId="zhangId" :tipFlag="tipFlag"></CustomTabBar>
-		<tip-small-dialog ref="exitDialogRef" @confirm-btn="exitBtn" :content="tipContent"></tip-small-dialog>
-		<tip-middle-dialog ref="youkeDialogRef" @confirm-btn="ykConfirm" :content="MESSAGE_VISITER_TO_LOGIN"></tip-middle-dialog>
-		<tel-dialog @telClose="telClose" @bindBtn="bindBtn" v-if="telDialogFlag"></tel-dialog>
-	</view>
-</template>
-
-<script setup>
-	import {toast,getUserIdentity} from "@/utils/common";
-	import cacheManager from '@/utils/cacheManager.js';
-	import {logout} from '@/api/login.js'
-	import {myInfo} from '@/api/my.js'
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	import {getCurrentInstance} from 'vue';
-	import {onLoad} from '@dcloudio/uni-app';
-	import {reactive,ref} from "vue";
-	import tipSmallDialog from '@/components/dialog/tipSmallDialog.vue';
-	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
-	import telDialog from './telDialog.vue'
-	import {MESSAGE_VISITER_TO_LOGIN} from "@/utils/constant.js"
-	import {
-		onShow
-	} from '@dcloudio/uni-app';
-	onShow(() => {
-		if(!cacheManager.get('auth')){
-			youkeFun();
-		}else{
-			// 非游客
-			noYoukeFun();
-		}
-	})
-	
-	
-	const zhangId = ref(null); //游客使用
-	const nianji = ref(null); //游客使用
-	const cardId = ref(null); //游客使用
-	const tipFlag = ref(null); //游客使用
-	const tipContent = '你确定要执行这个操作吗?';
-	let hyqyData = reactive({
-			indicatorDots: true,
-			autoplay: true,
-			interval: 10000,
-			duration: 500
-	});
-	let loginFlag = ref(false);
-	let telDialogFlag = ref(false);
-	let myInfoData = reactive({
-		userImg: '',
-		userName: '',
-		credit: '',
-		vipFlag: '',
-	});
-	let routerOpt  = ref(false);
-	const exitDialogRef = ref(null);
-	const youkeDialogRef = ref(null);
-
-	const exitLogin = () => {
-		exitDialogRef.value.handleShow();
-	}
-
-	// 退出按钮
-	const exitBtn = () => {
-		if(loginFlag.value){
-			logout().then(res => {
-				cacheManager.clearAll();
-				uni.redirectTo({
-					url: '/pages/login/index'
-				});
-			}).catch(err => {
-				toast('退出登录失败,请稍后重试')
-			})
-		}else{
-			uni.redirectTo({
-				url: '/pages/login/index'
-			});
-		}
-
-	}
-
-	// 游客弹窗---确定
-	function ykConfirm(){
-		uni.redirectTo({
-			url: '/pages/login/index'
-		});
-	}
-
-	// 手机号码
-	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?nianji=${routerOpt.nianji}&cardId=${routerOpt.cardId}&zhangId=${routerOpt.zhangId}&tipFlag=${routerOpt.tipFlag}`
-			});
-		}
-	}
-
-	// 订单
-	function orderClick(){
-		if(loginFlag.value){
-			uni.redirectTo({
-				url: '/pages/pay/order'
-			});
-		}else{
-			youkeDialogRef.value.handleShow();
-		}
-	}
-
-	// 获取用户数据
-	function getMyInfo(){
-		myInfo({}).then(res => {
-			getUserImg(res.data.growthType)
-			myInfoData.userName = res.data.userName;
-			myInfoData.credit = res.data.credit;
-		})
-	}
-
-	// 获取用户头像
-	function getUserImg(data){
-		 switch (data) {
-		    case 0:
-		        myInfoData.userImg = 'static/images/my/head-img0.png'
-		        break;
-		    case 1:
-		        myInfoData.userImg = 'static/images/my/head-img1.png'
-		        break;
-		    case 2:
-		        myInfoData.userImg = 'static/images/my/head-img2.png'
-		        break;
-		    case 3:
-		        myInfoData.userImg = 'static/images/my/head-img3.png'
-		        break;
-		    default:
-		        myInfoData.userImg = 'static/images/my/head-unlogin-img.png'
-		        break;
-
-		}
-	}
-	// 会员权益按钮
-	function hyqyBtn(index){
-		let cardId = index+1;
-		/* index为学科 1数学 2英语 */
-		if(loginFlag.value){
-			// 非游客
-			uni.redirectTo({
-				url: `/pages/pay/svip?cardId=${cardId}&formPage=my`
-			})
-		}else{
-			// 游客
-			youkeDialogRef.value.handleShow();
-		}
-	}
-
-	// 判断是否是游客
-	function myGetAuth(){
-		let LocalStorage = cacheManager.get('auth');
-		if (LocalStorage) {
-			// 非游客
-			noYoukeFun()
-		}else{
-			youkeFun();
-		}
-	}
-
-	// 游客
-	function youkeFun(){
-		zhangId.value = routerOpt.zhangId
-		nianji.value = routerOpt.nianji
-		cardId.value = routerOpt.cardId
-		tipFlag.value = routerOpt.tipFlag
-		// my游客
-		loginFlag.value = false;
-		myInfoData.userName = '游客';
-		myInfoData.userImg = 'static/images/my/head-unlogin-img.png'
-	}
-
-	// 非游客
-	function noYoukeFun(){
-		loginFlag.value = true;
-		getMyInfo();
-	}
-
-	// 获取会员权益card class
-	function getHyqyClass(index){
-		let VipIndex =index +1;
-		if(cacheManager.get('auth')){
-			// 非游客
-			let VipArr = cacheManager.get('auth').cardList;
-			if (VipArr.includes(VipIndex)) {
-			        return 'hyqy-box' + VipIndex;
-			    } else {
-			        return 'hyqy-disabled-box' + VipIndex;
-			}
-		}else{
-			// 游客
-			return 'hyqy-disabled-box' + VipIndex;
-		}
-
-	}
-
-	//获取会员权益按钮是否显示
-	function getHyqyBtn(index){
-		let VipIndex =index +1;
-		if(cacheManager.get('auth')){
-			let VipArr = cacheManager.get('auth').cardList;
-			if (VipArr.includes(VipIndex)) {
-					return false;
-				} else {
-					return true;
-				}
-		}else{
-			// 游客
-			return 'hyqy-disabled-box' + VipIndex;
-		}
-	}
-
-	onLoad((options) => {
-		if(!cacheManager.get('auth')){
-			// 游客
-			routerOpt = options;
-		}else{
-		}
-	})
-
-  function checkWrong() {
-	if(loginFlag.value){
-		const AuthCode = getUserIdentity();
-		if (AuthCode == 'Visitor') {
-			youkeDialogRef.value.handleShow();
-			return;
-		}
-		uni.redirectTo({
-		  url: '/pages/wrong/index'
-		})
-	}else{
-		youkeDialogRef.value.handleShow();
-	}
-  }
-</script>

+ 0 - 240
pages/my/telDialog.vue

@@ -1,240 +0,0 @@
-<template>
-	<view class="my-tel-dialog">
-		<view class="my-tel-content">
-			<view class="tel-close" @click="telClose(AWSC)"></view>
-			<view class="tel-row">
-				<view class="my-tel-title">修改手机号</view>
-				<view class="my-input-box">
-					<input class="my-input" type="text" v-model="bindObj.telNumber" placeholder="请输入手机号" maxlength="11"
-						@input="changeTelInput" />
-					<view class="close-btn" v-if="bindObj.clearTelIcon" @click="clearTel"></view>
-				</view>
-
-
-				<captcha ref="captcha" :config="config" @captchaSuccess="captchaSuccess" @captchaError="captchaError"
-					@captchaFail="captchaFail" @captchaReady="captchaReady" @captchaClose="captchaClose"></captcha>
-				<view class="get-yzm-btn" @click="getYzmBtn" :class="{ 'get-yzm-disabled': bindObj.isDisabled}">
-					{{bindObj.buttonText}}
-				</view>
-
-
-			</view>
-			<view class="yzm-row">
-				<view class="yzm-tip" v-if="bindObj.getYzmFlag">验证码已发送至:{{bindObj.telNumber}}</view>
-				<view class="my-input-box">
-					<input class="my-input" type="text" v-model="bindObj.yzmNumber" placeholder="请输入验证码" maxlength="6"
-						@input="changeYzmInput" />
-					<view class="close-btn" v-if="bindObj.clearYzmIcon" @click="clearYzm"></view>
-				</view>
-				<view @click="bindBtn" class="my-bind-btn">绑定</view>
-			</view>
-
-		</view>
-	</view>
-</template>
-<script>
-	import cacheManager from '@/utils/cacheManager.js';
-	import captcha from "../../components/captcha4/index.vue";
-	import {
-		telBind,
-		sendCode
-	} from "@/api/login.js"
-	import {
-		toast
-	} from "../../utils/common";
-	export default {
-		data() {
-			return {
-				myflag: 0,
-				sliderObj: {
-					sessionId: '',
-					sig: '',
-					token: '',
-				},
-				bindObj: {
-					telNumber: '',
-					clearTelIcon: false,
-					yzmNumber: '',
-					clearYzmIcon: false,
-					/*** 验证码 ***/
-					yzmStatus: 'login-btn-disabled',
-					timeLeft: 60, // 初始倒计时时间(秒)
-					intervalId: null, // 定时器ID
-					isDisabled: true, // 按钮是否禁用
-					buttonText: '获取验证码', // 按钮文本
-					getYzmFlag: false, // 是否发送验证码
-				},
-				config: {
-					captchaId: "9d5837b0807b8de44da0de310a0b2813",
-				},
-			}
-		},
-		components: {
-			captcha
-		},
-		methods: {
-			telClose() {
-				this.$emit('telClose')
-			},
-
-			// 清空手机号
-			clearTel() {
-				this.bindObj.telNumber = '';
-				this.bindObj.isDisabled = true;
-				this.bindObj.clearTelIcon = false;
-				this.bindObj.getYzmFlag = false;
-			},
-
-			// 判断是否输入手机号
-			changeTelInput(event) {
-				if (event.detail.value.length > 0) {
-					this.bindObj.clearTelIcon = true;
-					this.validatePhoneNumber(event.detail.value);
-				} else {
-					this.bindObj.clearTelIcon = false;
-				}
-			},
-
-			// 手机号校验规则
-			validatePhoneNumber(value) {
-				const phoneRegex = /^1[3-9]\d{9}$/;
-				if (phoneRegex.test(value)) {
-					// 通过
-					this.bindObj.isDisabled = false;
-				} else {
-					// 不通过
-					this.bindObj.isDisabled = true;
-				}
-			},
-			// 获取验证码按钮
-			getYzmBtn() {
-				// 判断手机号校验是否通过
-				if (this.bindObj.timeLeft != 60) {
-					toast('请在' + this.bindObj.timeLeft + '后重新获取验证码!')
-					return
-				} else if (this.bindObj.isDisabled === true) {
-					toast("请输入正确的手机号!")
-					return
-				} else {
-				this.$refs.captcha.showCaptcha();
-				}
-			},
-
-	captchaSuccess(result) { // app端的回调
-				console.log(result)
-				this.startCountdown();
-				this.sliderData = result;
-				this.getMessage();
-
-			},
-			captchaError(e) {
-				// app端的回调
-				toast(JSON.stringify(e))
-			},
-			captchaReady() {
-				// app端的回调
-			},
-			captchaFail() {
-				// app端的回调
-				toast('验证失败!')
-			},
-			captchaClose() {
-				// uni.redirectTo({
-				// 	url: `/pages/login/index`
-				// })
-			},
-
-
-			getMessage() {
-				let req = {
-				phone: this.bindObj.telNumber,
-				captchaOutput: this.sliderData.captcha_output,
-				genTime: this.sliderData.gen_time,
-				lotNumber: this.sliderData.lot_number,
-				passToken: this.sliderData.pass_token,
-				}
-				sendCode(req).then(res => {
-					this.bindObj.getYzmFlag = true;
-				}).catch(err => {
-					this.bindObj.getYzmFlag = false;
-					toast('验证码获取失败:' + err)
-				})
-			},
-
-			// 清空验证码
-			clearYzm() {
-				this.bindObj.yzmNumber = '';
-				this.bindObj.isDisabled = true;
-				this.bindObj.clearYzmIcon = false;
-			},
-
-			// 判断是否输入验证码
-			changeYzmInput(event) {
-				if (event.detail.value.length > 0) {
-					this.bindObj.clearYzmIcon = true;
-				} else {
-					this.bindObj.clearYzmIcon = false;
-				}
-			},
-
-			// 开始计时
-			startCountdown() {
-
-				if (this.bindObj.buttonText === '重新发送') {
-					this.sliderFlag = true;
-				}
-				this.bindObj.isDisabled = true;
-				this.bindObj.buttonText = `重新发送(${this.bindObj.timeLeft}S)`;
-
-				// 清除之前的定时器(如果有)
-				if (this.bindObj.intervalId) {
-					clearInterval(this.bindObj.intervalId);
-				}
-
-				// 设置新的定时器
-				this.bindObj.intervalId = setInterval(() => {
-					this.bindObj.timeLeft--;
-					if (this.bindObj.timeLeft <= 0) {
-						clearInterval(this.bindObj.intervalId);
-						this.bindObj.timeLeft = 60; // 重置倒计时
-						this.bindObj.isDisabled = false;
-						this.bindObj.buttonText = '重新发送';
-					} else {
-						this.bindObj.buttonText = `重新发送(${this.bindObj.timeLeft}S)`;
-					}
-				}, 1000);
-			},
-
-			// 绑定按钮
-			bindBtn() {
-				if (this.bindObj.telNumber === '') {
-					toast('手机号不能为空')
-					return;
-				}
-				if (this.bindObj.yzmNumber === '') {
-					toast('验证码不能为空')
-					return;
-				}
-
-				let req = {
-					tel: this.bindObj.telNumber,
-					code: this.bindObj.yzmNumber,
-				}
-				telBind(req).then(res => {
-					if (res.code == 0) {
-						toast('手机号绑定成功')
-						this.updataTel(this.bindObj.telNumber);
-						this.$emit('bindBtn')
-					}
-				})
-			},
-
-			// 在缓存中修改手机号
-			updataTel(data) {
-				cacheManager.updateObject('auth', {
-					userName: data
-				})
-			}
-		}
-	}
-</script>

+ 0 - 447
pages/pay/order.vue

@@ -1,447 +0,0 @@
-<template>
-	<view class="ezy-order-page">
-		<view class="icon-title-navBar-box">
-			<view @click="goBack" class="nav-bar-icon"></view>
-			<text class="nav-bar-title">我的订单</text>
-		</view>
-		<view class="ezy-tab-border">
-
-			<uni-segmented-control :current="dingdanData.current" :values="dingdanData.items" active-color="#3A7FE9"
-				@clickItem="onChangeTab" class="ezy-tab-box" />
-			<view>
-				<view v-if="dingdanData.current === 0">
-					<scroll-view scroll-y="true" refresher-enabled="true"
-						:refresher-triggered="dingdanData.quanbu.loading" :refresher-threshold="50"
-						refresher-background="transparent" @refresherrefresh="onRefresh" class="order-scroll-view">
-						<!--数学-->
-						<uni-list>
-							<uni-list-item v-for="item in dingdanData.quanbu.list" class="order-list-item">
-								<template v-slot:body>
-									<view class="order-item-head">
-										<view class="order-name-box">
-											<icon></icon><text>鹅状元自营</text>
-										</view>
-										<view>
-											<text>不支持退订</text>
-											<text v-if="item.status ==2" class="pay-status">已付款</text>
-											<text v-if="item.status ==3" class="pay-status">已关闭</text>
-											<text v-if="item.status ==1" class="pay-status">待付款</text>
-										</view>
-									</view>
-									<view class="order-content-box">
-										<icon :class="'content-img'+item.cardId"></icon>
-										<view class="content-body-box">
-											<view class="content-name">SVIP终身卡</view>
-											<view class="content-tag">终身有效</view>
-											<view class="content-yuanjia">¥{{item.cardYuanjia}}</view>
-										</view>
-									</view>
-									<view class="order-bottom-box">
-										<view class="bottom-money-box">
-											<text class="bottom-data">{{item.ctime}}</text>
-											<text class="bottom-money">实付款:¥{{item.money}}</text>
-										</view>
-										<!--  v-if="item.status ==1" -->
-										<view class="bottom-btn" v-if="item.status ==1" @click="handlePay(item)">立即支付</view>
-									</view>
-								</template>
-							</uni-list-item>
-							<uni-load-more :status="dingdanData.quanbu.state" @click="getMore(0)"
-								:contentText="dingdanData.quanbu.contentText">
-							</uni-load-more>
-						</uni-list>
-					</scroll-view>
-				</view>
-				<view v-if="dingdanData.current === 1">
-					<scroll-view scroll-y="true" refresher-enabled="true"
-						:refresher-triggered="dingdanData.daiFukuan.loading" :refresher-threshold="50" class="order-scroll-view"
-						refresher-background="transparent" @refresherrefresh="onRefresh">
-							<uni-list>
-								<uni-list-item v-for="item in dingdanData.daiFukuan.list" class="order-list-item">
-									<template v-slot:body>
-										<view class="order-item-head">
-											<view class="order-name-box">
-												<icon></icon><text>鹅状元自营</text>
-											</view>
-											<view>
-												<text>不支持退订</text>
-											<text v-if="item.status ==2" class="pay-status">已付款</text>
-											<text v-if="item.status ==3" class="pay-status">已关闭</text>
-											<text v-if="item.status ==1" class="pay-status">待付款</text>
-											</view>
-										</view>
-										<view class="order-content-box">
-											<icon :class="'content-img'+item.cardId"></icon>
-											<view class="content-body-box">
-												<view class="content-name">SVIP终身卡</view>
-												<view class="content-tag">终身有效</view>
-												<view class="content-yuanjia">¥{{item.cardYuanjia}}</view>
-											</view>
-										</view>
-										<view class="order-bottom-box">
-											<view class="bottom-money-box">
-												<text class="bottom-data">{{item.ctime}}</text>
-												<text class="bottom-money">实付款:¥{{item.money}}</text>
-											</view>
-											<!--  v-if="item.status ==1" -->
-											<view class="bottom-btn" v-if="item.status ==1" @click="handlePay(item)">立即支付</view>
-										</view>
-									</template>
-								</uni-list-item>
-								<uni-load-more :status="dingdanData.daiFukuan.state" @click="getMore(1)"
-									:contentText="dingdanData.daiFukuan.contentText">
-								</uni-load-more>
-							</uni-list>
-					</scroll-view>
-				</view>
-				<view v-if="dingdanData.current === 2">
-					<scroll-view scroll-y="true" refresher-enabled="true"
-						:refresher-triggered="dingdanData.yiFukuan.loading" :refresher-threshold="50" class="order-scroll-view"
-						refresher-background="transparent" @refresherrefresh="onRefresh">
-							<uni-list>
-								<uni-list-item v-for="item in dingdanData.yiFukuan.list" class="order-list-item">
-									<template v-slot:body>
-										<view class="order-item-head">
-											<view class="order-name-box">
-												<icon></icon><text>鹅状元自营</text>
-											</view>
-											<view>
-												<text>不支持退订</text>
-										<text v-if="item.status ==2" class="pay-status">已付款</text>
-										<text v-if="item.status ==3" class="pay-status">已关闭</text>
-										<text v-if="item.status ==1" class="pay-status">待付款</text>
-											</view>
-										</view>
-										<view class="order-content-box">
-											<icon :class="'content-img'+item.cardId"></icon>
-											<view class="content-body-box">
-												<view class="content-name">SVIP终身卡</view>
-												<view class="content-tag">终身有效</view>
-												<view class="content-yuanjia">¥{{item.cardYuanjia}}</view>
-											</view>
-										</view>
-										<view class="order-bottom-box">
-											<view class="bottom-money-box">
-												<text class="bottom-data">{{item.ctime}}</text>
-												<text class="bottom-money">实付款:¥{{item.money}}</text>
-											</view>
-										</view>
-									</template>
-								</uni-list-item>
-								<uni-load-more :status="dingdanData.yiFukuan.state" @click="getMore(2)"
-									:contentText="dingdanData.yiFukuan.contentText">
-								</uni-load-more>
-							</uni-list>
-
-					</scroll-view>
-				</view>
-			</view>
-		</view>
-		<CustomTabBar></CustomTabBar>
-	</view>
-</template>
-
-<script setup>
-	import {
-		reactive,
-		ref
-	} from "vue";
-	import {
-		getOrderList,
-		orderAdd
-	} from "@/api/order";
-	import {
-		onLoad
-	} from "@dcloudio/uni-app";
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import cacheManager from '@/utils/cacheManager.js';
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	const dingdanData = reactive({
-		items: ['全部', '待付款', '已付款'],
-		current: 0,
-		quanbu: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-
-		},
-		daiFukuan: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-		},
-		yiFukuan: {
-			page: 0,
-			list: [],
-			loading: false,
-			state: 'more',
-			contentText: {
-				contentdown: '查看更多',
-				contentrefresh: '加载中',
-				contentnomore: '没有更多'
-			}
-		},
-	})
-
-
-	function handlePay(item) {
-		let req = {
-			cardId:item.cardId
-		}
-		orderAdd(req).then(res=>{
-			console.log('res');
-			cacheManager.updateVipStatus('auth',cardId.value)
-			toast('开通成功!')
-			uni.redirectTo({
-				url: '/pages/study/index'
-			})
-		})
-		
-		// uni.redirectTo({
-		// 	url: `/pages/pay/orderPay?id=${item.id}`
-		// })
-	}
-
-	function onChangeTab(e) {
-		if (dingdanData.current !== e.currentIndex) {
-			dingdanData.current = e.currentIndex;
-			if (dingdanData.current == 0) {
-				dingdanData.quanbu.page = 0
-			} else if (dingdanData.current == 1) {
-				dingdanData.daiFukuan.page = 0
-			} else if (dingdanData.current == 2) {
-				dingdanData.yiFukuan.page = 0
-			}
-			refreshData(dingdanData.current);
-		}
-	}
-
-	function refreshData(code) {
-		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code
-		}
-
-		if (code == 0) {
-			dingdanData.quanbu.list = [];
-			// 数学
-			dingdanData.quanbu.state = 'loading';
-			dingdanData.quanbu.page++;
-			opt.page = dingdanData.quanbu.page;
-		} else if (code == 1) {
-			dingdanData.daiFukuan.list = [];
-			// 英语
-			dingdanData.daiFukuan.state = 'loading';
-			dingdanData.daiFukuan.page++;
-			opt.page = dingdanData.daiFukuan.page;
-		} else if (code == 2) {
-			dingdanData.yiFukuan.list = [];
-			// 英语
-			dingdanData.yiFukuan.state = 'loading';
-			dingdanData.yiFukuan.page++;
-			opt.page = dingdanData.yiFukuan.page;
-		}
-		getOrderList(opt).then(res => {
-			if (code == 0) {
-				dingdanData.quanbu.list = dingdanData.quanbu.list.concat(res.data.data);
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				dingdanData.daiFukuan.list = dingdanData.daiFukuan.list.concat(res.data.data);
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				dingdanData.yiFukuan.list = dingdanData.yiFukuan.list.concat(res.data.data);
-				dingdanData.yiFukuan.loading = false;
-			}
-			if (code == 0) {
-				if (res.data.total >= dingdanData.quanbu.list.length) {
-					// 数学
-					dingdanData.quanbu.state = 'no-more';
-					dingdanData.quanbu.loading = false;
-				} else {
-					// 数学
-					dingdanData.quanbu.state = 'more';
-					dingdanData.quanbu.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total >= dingdanData.daiFukuan.list.length) {
-					// 英语
-					dingdanData.daiFukuan.state = 'no-more';
-					dingdanData.daiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.daiFukuan.state = 'more';
-					dingdanData.daiFukuan.loading = false;
-				}
-			} else if (code == 2) {
-				if (res.data.total >= dingdanData.yiFukuan.list.length) {
-					// 英语
-					dingdanData.yiFukuan.state = 'no-more';
-					dingdanData.yiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.yiFukuan.state = 'more';
-					dingdanData.yiFukuan.loading = false;
-				}
-			}
-		}).catch(err => {
-			if (code == 0) {
-				// 数学
-				dingdanData.quanbu.state = 'more';
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				// 英语
-				dingdanData.daiFukuan.state = 'more';
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				// 英语
-				dingdanData.yiFukuan.state = 'more';
-				dingdanData.yiFukuan.loading = false;
-			}
-		})
-	}
-
-	function onRefresh() {
-		if (dingdanData.current == 0) {
-			dingdanData.quanbu.page = 0;
-			dingdanData.quanbu.list = [];
-			dingdanData.quanbu.loading = true;
-		} else if (dingdanData.current == 1) {
-			dingdanData.daiFukuan.page = 0;
-			dingdanData.daiFukuan.list = [];
-			dingdanData.daiFukuan.loading = true;
-		} else if (dingdanData.current == 2) {
-			dingdanData.yiFukuan.page = 0;
-			dingdanData.yiFukuan.list = [];
-			dingdanData.yiFukuan.loading = true;
-		}
-		refreshData(dingdanData.current);
-	}
-
-	function getMore(code) {
-		const opt = {
-			page: 1,
-			size: 10, // 固定查询10条
-			status: code // 前台索引加1为学科cardId
-		}
-
-		if (code == 0) {
-			if (dingdanData.quanbu.state == 'no-more') {
-				return;
-			}
-			// 数学
-			dingdanData.quanbu.state = 'loading';
-			dingdanData.quanbu.page++;
-			opt.page = dingdanData.quanbu.page;
-		} else if (code == 1) {
-			if (dingdanData.daiFukuan.state == 'no-more') {
-				return;
-			}
-			dingdanData.daiFukuan.state = 'loading';
-			dingdanData.daiFukuan.page++;
-			opt.page = dingdanData.daiFukuan.page;
-		} else if (code == 2) {
-			if (dingdanData.yiFukuan.state == 'no-more') {
-				return;
-			}
-			dingdanData.yiFukuan.state = 'loading';
-			dingdanData.yiFukuan.page++;
-			opt.page = dingdanData.yiFukuan.page;
-		}
-		getOrderList(opt).then(res => {
-			if (code == 0) {
-				dingdanData.quanbu.list = dingdanData.quanbu.list.concat(res.data.data);
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				dingdanData.daiFukuan.list = dingdanData.daiFukuan.list.concat(res.data.data);
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				dingdanData.yiFukuan.list = dingdanData.yiFukuan.list.concat(res.data.data);
-				dingdanData.yiFukuan.loading = false;
-			}
-			if (code == 0) {
-				if (res.data.total >= dingdanData.quanbu.list.length) {
-					// 数学
-					dingdanData.quanbu.state = 'no-more';
-					dingdanData.quanbu.state_text = '没有更多啦';
-					dingdanData.quanbu.loading = false;
-				} else {
-					// 数学
-					dingdanData.quanbu.state = 'more';
-					dingdanData.quanbu.state_text = '加载更多';
-					dingdanData.quanbu.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total >= dingdanData.daiFukuan.list.length) {
-					// 英语
-					dingdanData.daiFukuan.state = 'no-more';
-					dingdanData.daiFukuan.state_text = '没有更多啦';
-					dingdanData.daiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.daiFukuan.state = 'more';
-					dingdanData.daiFukuan.state_text = '加载更多';
-					dingdanData.daiFukuan.loading = false;
-				}
-			} else if (code == 2) {
-				if (res.data.total >= dingdanData.yiFukuan.list.length) {
-					// 英语
-					dingdanData.yiFukuan.state = 'no-more';
-					dingdanData.yiFukuan.state_text = '没有更多啦';
-					dingdanData.yiFukuan.loading = false;
-				} else {
-					// 英语
-					dingdanData.yiFukuan.state = 'more';
-					dingdanData.yiFukuan.state_text = '加载更多';
-					dingdanData.yiFukuan.loading = false;
-				}
-			}
-		}).catch(err => {
-			if (code == 0) {
-				// 数学
-				dingdanData.quanbu.state = 'more';
-				dingdanData.quanbu.state_text = '加载更多';
-				dingdanData.quanbu.loading = false;
-			} else if (code == 1) {
-				// 英语
-				dingdanData.daiFukuan.state = 'more';
-				dingdanData.daiFukuan.state_text = '加载更多';
-				dingdanData.daiFukuan.loading = false;
-			} else if (code == 2) {
-				// 英语
-				dingdanData.yiFukuan.state = 'more';
-				dingdanData.yiFukuan.state_text = '加载更多';
-				dingdanData.yiFukuan.loading = false;
-			}
-		})
-	}
-
-	function goBack() {
-		uni.redirectTo({
-			url: '/pages/my/index'
-		})
-	}
-
-	onLoad(() => {
-		getMore(dingdanData.current);
-	})
-</script>
-
-<style>
-
-</style>

+ 0 - 91
pages/pay/orderPay.vue

@@ -1,91 +0,0 @@
-<template>
-	<view class="ezy-order-pay-page">
-		<view class="ezy-navBar-box">
-			<view class="nav-bar-icon"></view>
-			<text class="nav-bar-title">订单支付</text>
-			<view class="text-btn">取消订单</view>
-		</view>
-		<view class="order-pay-border-box">
-			<!-- svip -->
-			<view class="order-pay-img-box">
-				<!-- :class="'order-pay-img'+item.cardId" 改到下方 -->
-				<icon :class="'order-pay-img1'"></icon>
-				<view class="img-content-box">
-					<view class="content-name">SVIP终身卡</view>
-					<text class="content-tag">终身有效</text>
-					<text class="content-tag">不支持退订</text>
-					<view class="content-yuanjia">¥598</view>
-				</view>
-			</view>
-			
-			<!-- 价格 -->
-			<view class="price-box">
-				<view class="price-row">
-					<text>原价合计</text>
-					<text class="price-red">¥598</text>
-				</view>
-				<view class="price-row price-line-row">
-					<text>活动合计</text>
-					<text class="price-red">-¥400</text>
-				</view>
-				<view class="price-row">
-					<text>合计</text>
-					<text>¥198</text>
-				</view>
-			</view>
-			
-			<!-- 支付方式 -->
-			<view class="pay-type-box">
-				<view class="pay-type-name">支付方式</view>
-				<radio-group @change="radioChange">
-					<view  class="type-radio-box">
-						<view class="type-radio-row">
-							<icon class="wx-radio"></icon>
-							<view class="radio-content-box">
-								<view class="radio-title">微信支付</view>
-								<text class="radio-content">支付信用卡、储蓄卡快捷支付及微信</text>
-							</view>
-							<radio value="weixin" :checked="payType==='weixin'" activeBackgroundColor="transparent"
-							:class="{'radio-checked': payType==='weixin'}"/>
-						</view>
-						<view class="type-radio-row">
-							<icon class="zfb-radio"></icon>
-							<view class="radio-content-box">
-								<view class="radio-title">支付宝</view>
-								<text class="radio-content">支付信用卡、储蓄卡快捷支付及支付宝</text>
-							</view>
-							<radio value="zhifubao" :checked="payType==='zhifubao'" activeBackgroundColor="transparent"
-							:class="{'radio-checked': payType==='zhifubao'}" style="margin-right: 0;"/>
-						</view>
-					</view>
-				</radio-group>
-			</view>
-			
-			<!-- 合计 -->
-			<view class="pay-sum-box">
-				<view>
-					<text>合计:</text>
-					<text class="sum-red">¥198</text>	
-				</view>
-				<view class="sum-btn">
-					支付
-					<icon></icon>
-					29:30
-				</view>
-			</view>
-		</view>
-		<CustomTabBar></CustomTabBar>
-	</view>
-</template>
-
-<script setup>
-	import {ref} from "vue";
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	let payType = ref('weixin')
-	function radioChange(data){
-		payType.value = data.detail.value;
-	}
-</script>
-
-<style>
-</style>

+ 0 - 27
pages/pay/paySuccess.vue

@@ -1,27 +0,0 @@
-<!-- 蛋破壳弹窗 -->
-<template>
-	<uni-popup ref="paySuccessPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-	 <view class="ezy-pay-success-dialog"> </view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	const paySuccessPopup = ref(null); // 索引
-	// 打开弹窗
-	function handleShow() {
-		paySuccessPopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		paySuccessPopup.value.close();
-	}
-	defineExpose({
-			handleShow,
-			handleClose
-		})
-</script>
-
-<style>
-</style>

+ 0 - 27
pages/pay/paySuccessAll.vue

@@ -1,27 +0,0 @@
-<!-- 蛋破壳弹窗 -->
-<template>
-	<uni-popup ref="paySuccessPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-	 <view class="ezy-pay-success-all-dialog"> </view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	const paySuccessPopup = ref(null); // 索引
-	// 打开弹窗
-	function handleShow() {
-		paySuccessPopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		paySuccessPopup.value.close();
-	}
-	defineExpose({
-			handleShow,
-			handleClose
-		})
-</script>
-
-<style>
-</style>

+ 0 - 175
pages/pay/svip.vue

@@ -1,175 +0,0 @@
-<!-- svip页面 -->
-<template>
-	<view class="ezy-svip-page">
-		<view class="icon-title-navBar-box">
-			<!-- 返回按钮 ↓ -->
-			<view class="nav-bar-icon" @click="goBack"></view>
-			<view class="nav-bar-title">开通svip</view>
-		</view>
-		<!-- :class="'svip-login'+Id" 改到下方 -->
-		<icon :class="'svip-login'+cardId"></icon>
-		<view class="svip-list-box">
-			<view v-for="(item, index) in svipArr" :key="index" class="list-item-box">
-				<icon class="list-icon" :style="{backgroundImage: 'url(' + item.iconPath + ')'}"></icon>
-				<view>
-					<view class="list-title">{{item.title}}</view>
-					<view class="list-content" v-html="item.content"></view>
-				</view>
-			</view>
-		</view>
-		<view class="open-svip-box">
-			<view class="svip-price-box">
-				<view>原价:<text class="original-price">¥598</text></view>
-				<view class="discount-price">活动价:¥198</view>
-			</view>
-			<radio-group @change="radioChange" class="pay-type-box">
-				<view class="type-radio-title">支付方式</view>
-				<view class="type-radio-content">
-					<view class="type-radio-box">
-						<icon class="wx-radio"></icon>
-						<text>微信</text>
-						<radio value="weixin" :checked="payType==='weixin'" activeBackgroundColor="transparent"
-							:class="{'radio-checked': payType==='weixin'}" />
-					</view>
-					<view class="type-radio-box">
-						<icon class="zfb-radio"></icon>
-						<text>支付宝</text>
-						<radio value="zhifubao" :checked="payType==='zhifubao'" activeBackgroundColor="transparent"
-							:class="{'radio-checked': payType==='zhifubao'}" style="margin-right: 0;" />
-					</view>
-				</view>
-			</radio-group>
-			<view class="open-svip-btn" @click="creatOrder">立即开通</view>
-		</view>
-		<CustomTabBar></CustomTabBar>
-		<!-- 蛋破壳 -->
-		<pay-success ref="daoPokeRef"></pay-success>
-		<pay-successAll ref="daoPokeAllRef"></pay-successAll>
-	</view>
-</template>
-
-<script setup>
-	import {
-		ref
-	} from "vue";
-	import {
-		orderAdd,
-		orderPayAli
-	} from "@/api/order.js"
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	import cacheManager from "@/utils/cacheManager.js";
-	import paySuccess from './paySuccess.vue';
-	import paySuccessAll from './paySuccessAll.vue';
-	import {
-		onLoad,
-		onReady
-	} from '@dcloudio/uni-app';
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	let payType = ref('weixin')
-	let cardId = ref('')
-	let formPage = ref('')
-	const daoPokeRef = ref(null);
-	const daoPokeAllRef = ref(null);
-	const isVip = getUserIdentity();
-	const svipArr = [{
-			iconPath: 'static/images/pay/svip-list-icon1.png',
-			title: '学习资源,随心畅学',
-			content: `解锁L1~L6全等级数学思维优质学习资源,<br/>满足多样学习需求`
-		},
-		{
-			iconPath: 'static/images/pay/svip-list-icon2.png',
-			title: '名师打造,优质路径',
-			content: '资深名师精心规划学习路径,引领高效提升方向'
-		},
-		{
-			iconPath: 'static/images/pay/svip-list-icon3.png',
-			title: '进度分析,个性贴心',
-			content: '优先参与丰富真题测试,精准洞察学习状况'
-		},
-		{
-			iconPath: 'static/images/pay/svip-list-icon4.png',
-			title: '真题测试,优先体验',
-			content: '成为会员,即刻畅享专属权益,开启无忧学习之旅'
-		}
-	];
-	onLoad((options) => {
-		cardId.value = options.cardId
-		formPage.value = options.formPage
-	})
-
-	function radioChange(data) {
-		payType.value = data.detail.value;
-	}
-
-	function creatOrder(data) {
-
-		if(payType.value =='weixin'){
-			toast("微信支付暂未开通,请选择支付宝")
-			return false
-		}
-		let req = {
-			cardId: cardId.value
-		}
-		orderAdd(req).then(res => {
-			console.log('res',res);
-			orderPayAli({id:res.data.id}).then(res2=>{
-				console.log('res2',res2);
-				  uni.requestPayment({
-				                "provider": "alipay",  
-				                "orderInfo": res2.data.text, //此处为服务器返回的订单信息字符串
-				                success: function (res) {
-				                   var rawdata = JSON.parse(res.rawdata);
-								   console.log('支付成功');
-								   console.log('rawdata',rawdata);
-				                  // toast("支付成功");
-								   cacheManager.updateVipStatus('auth', cardId.value)
-								   cacheManager.updateObject('auth', {
-								   	growthType: 1
-								   })
-								   if (isVip != 'VIP') {
-								   	daoPokeRef.value.handleShow();
-								   } else {
-								   	daoPokeAllRef.value.handleShow();
-								   }
-								   setTimeout(() => {
-								   	daoPokeRef.value.handleClose();
-								   	daoPokeAllRef.value.handleClose();
-								   	if(formPage.value =='my'){
-								   		uni.redirectTo({
-								   			url: '/pages/my/index'
-								   		})
-								   	}else{
-								   		uni.redirectTo({
-								   			url: '/pages/study/index'
-								   		})
-								   	}
-								   }, 3000)
-				                },
-				                fail: function (err) {
-				                   toast('支付失败:' + JSON.stringify(err));
-				                }
-				            });
-			})
-			
-	
-		})
-	}
-
-	function goBack(data) {
-		if(formPage.value =='my'){
-			uni.redirectTo({
-				url: '/pages/my/index'
-			})
-		}else{
-			uni.redirectTo({
-				url: '/pages/study/index'
-			})
-		}
-	}
-</script>
-
-<style>
-</style>

+ 0 - 35
pages/selectGradesTerms/comingSoonDialog.vue

@@ -1,35 +0,0 @@
-<!-- 大弹窗 三~四行文字 -->
-<template>
-	<uni-popup ref="comingSoonPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-	 <view class="coming-soon-dialog">
-		 <icon></icon>
-		<view class="coming-soon-return-btn" @click="returnBtn"></view>
-	 </view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	const comingSoonPopup = ref(null); // 索引
-	const $emit = defineEmits(['return-btn'])
-	// 打开弹窗
-	function handleShow() {
-		comingSoonPopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		comingSoonPopup.value.close();
-	}
-	// 返回
-	function returnBtn(){
-		comingSoonPopup.value.close();
-		$emit('return-btn');
-	}
-	defineExpose({
-			handleShow
-		})
-</script>
-
-<style>
-</style>

+ 0 - 154
pages/selectGradesTerms/index.vue

@@ -1,154 +0,0 @@
-<template>
-	<view class="grades-terms-page">
-		<view class="icon-title-navBar-box">
-			<!-- 返回按钮↓ -->
-			<view class="nav-bar-icon"  @click="handleBack"></view>
-		</view>
-		<view class="grades-body">
-			<view class="grades-change-title"></view>
-			<text class="grades-title-desc">我们会根据您选择,为您匹配对应的学习内容</text>
-			<view class="grades-terms-title terms-title-img"></view>
-			<view class="grade-item-box">
-				<view v-for="item in xueke_list" :key="item.id" @click="handleSelectXueke(item)"
-					:class="['grade-item',{active: item.id == activeXueke}]">{{item.label}}</view>
-			</view>
-			<view class="grades-terms-title grades-title-img"></view>
-			<view class="grade-item-box">
-				<view v-for="item in nianji_list" :key="item.id" @click="handleSelectGrade(item)"
-					:class="['grade-item', {active: item.id == activeNianji}]">{{item.label}}</view>
-			</view>
-			<view class="grade-line"></view>
-			<button class="grade-confirm-btn" @click="handleConfirm"></button>
-		</view>
-		<coming-soon-dialog ref="comingSoonDialogRef"></coming-soon-dialog>
-	</view>
-</template>
-
-<script setup>
-	import comingSoonDialog from './comingSoonDialog.vue';
-	import {
-		reactive,
-		toRefs,
-		ref,
-	} from "vue";
-	import {
-		nianji_list,
-		xueke_list,
-	} from "@/utils/constant.js";
-	import {
-		onLoad
-	} from "@dcloudio/uni-app";
-	import {getUserIdentity} from "@/utils/common.js"
-	import cacheManager from "@/utils/cacheManager.js"
-  import {getCardOnline} from "../../api/catalogue";
-
-	const comingSoonDialogRef = ref(null);
-	function useSelectGrade() {
-		const userCode = getUserIdentity();
-		const data = reactive({
-			activeNianji: null, // 当前年级
-			activeXueke: null, // 当前学期
-			activeTipFlag: null, // 当前学期
-		});
-
-		onLoad(({nianji,cardId,tipFlag}) => {
-
-			if (userCode !== 'Visitor') {
-				const {
-					nianji: nianji_,
-					cardId: cardId_
-				} = cacheManager.get('auth');
-				data.activeNianji = nianji_;
-				data.activeXueke = cardId_;
-			} else {
-				data.activeNianji = nianji;
-				data.activeXueke = cardId;
-				data.activeTipFlag = tipFlag || '0';
-			}
-	
-		});
-
-		// 选择 年级+学期
-		function handleConfirm() {
-			if (!data.activeXueke) {
-				uni.showToast({
-					title: "请选择课程类别",
-					duration: 2000,
-					icon: 'error'
-				});
-				return;
-			}
-			if (!data.activeNianji) {
-				uni.showToast({
-					title: "请选择课程等级",
-					duration: 2000,
-					icon: 'error'
-				});
-				return;
-			}
-
-      getCardOnline({cardId: data.activeXueke,nianji: data.activeNianji}).then(res => {
-        if (res.data) {
-          goDAOToStudy();
-        } else {
-          comingSoonDialogRef.value.handleShow();
-        }
-      })
-		}
-
-		// 跳转 岛 学习
-		function goDAOToStudy() {
-			if (userCode !== 'Visitor') {
-				const auth = cacheManager.get('auth');
-				cacheManager.updateObject('auth', {
-					nianji: data.activeNianji,
-					zhangId: data.activeNianji == auth.nianji && data.activeXueke == auth.cardId ? auth.zhangId: 0,
-					cardId: data.activeXueke,
-					currentZhang: 0
-				})
-				cacheManager.remove('daoPageCache')
-				// 数序
-				uni.redirectTo({
-					url: `/pages/study/index`
-				})
-			} else {
-				// 数序
-				uni.redirectTo({
-					url: `/pages/study/index?nianji=${data.activeNianji}&cardId=${data.activeXueke}&zhangId=0&tipFlag=${data.activeTipFlag}`
-				})
-			}
-
-		}
-		function handleBack() {
-			if (userCode !== 'Visitor') {
-				uni.redirectTo({ url: `/pages/study/index`})
-			} else {
-				uni.redirectTo({url: '/pages/login/index'})
-			}
-		}
-		
-		return {
-			...toRefs(data),
-			handleBack,
-			// 方法
-			handleConfirm, // 选择年级+学科
-		};
-	}
-
-	const {
-		activeNianji,
-		activeXueke,
-		handleConfirm,
-		handleBack
-	} = useSelectGrade()
-
-	function handleSelectGrade(item) {
-		activeNianji.value = item.id;
-	}
-
-	function handleSelectXueke(item) {
-		activeXueke.value = item.id;
-	}
-	
-
-</script>

+ 0 - 34
pages/study/daoTipDialog.vue

@@ -1,34 +0,0 @@
-<template>
-	<uni-popup ref="daoTipPopup" type="bottom" :is-mask-click="false">
-		<view class="dao-popup-box">
-			<view class="dao-popup-img" :style="{backgroundImage: 'url(' + productTip + ')'}"></view>
-			<view class="dao-popup-btn" @click="handleClose"></view>
-		</view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import {ref} from "vue";
-	const props = defineProps({
-	  productTip: {
-	    type: String,
-	    default: ''
-	  },
-	});
-	const daoTipPopup = ref(null);
-	const $emit = defineEmits(['dao-tip-close'])
-	function handleShow() {
-		daoTipPopup.value.open();
-	}
-	function handleClose() {
-		daoTipPopup.value.close();
-		$emit('dao-tip-close');
-	}
-	
-	defineExpose({
-		handleShow
-	})
-</script>
-
-<style>
-</style>

+ 0 - 29
pages/study/eggDialog.vue

@@ -1,29 +0,0 @@
-<template>
-	<uni-popup ref="eggPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(51, 137, 217, 0.65);">
-	 <view class="study-egg-dialog">
-			<view class="egg-content-box">
-				<view class="egg-img"></view>
-				<view class="egg-btn" @click="eggBtn"></view>
-			</view>
-	 </view>
-	</uni-popup>
-</template>
-
-<script setup>
-	import { ref } from 'vue';
-	 const $emit = defineEmits(['eggBtn'])
-	const eggPopup = ref(null); // 索引
-	// 打开弹窗
-	function eggShow() {
-		eggPopup.value.open();
-	}
-	// 开启提分之旅按钮
-	function eggBtn(){
-		eggPopup.value.close();
-		$emit('eggBtn')
-	}
-	defineExpose({
-			eggShow
-		})
-</script>

+ 0 - 391
pages/study/index.vue

@@ -1,391 +0,0 @@
-<template>
-	<view>
-	<swiper :circular="true"  @change="onChangeTab" :duration="currentDuration"
-		:current="current" class="ezy-study-swiper" :class="'ezy-study-swiper'+ currentProduct" >
-		<swiper-item v-for="(item,index) in zhangList" :key="index">
-			<shuxueZhangjie v-if="currentProduct ==1" @clickGradeTerm="clickGradeTerm"
-				@handleCheckCatalogue="handleCheckCatalogue(item)" @listClick="listClick" :gradeTerm='gradeTerm'
-				:options="item">
-			</shuxueZhangjie>
-			<yingyuZhangjie v-if="currentProduct ==2" @clickGradeTerm="clickGradeTerm"
-				@handleCheckCatalogue="handleCheckCatalogue(item)" @listClick="listClick" :gradeTerm='gradeTerm' :options="item">
-			</yingyuZhangjie>
-		</swiper-item>
-	</swiper>
-	<!-- 蛋 -->
-	<egg-dialog ref="eggDialogRef" @eggBtn="eggBtn"></egg-dialog>
-	<catalogue ref="catalogueRef" :list=zhangList @change-zhang="handleChangeZhang" @listSelectJieClick="listSelectJieClick"></catalogue>
-	<CustomTabBar :cardId="cardId" :currentTabNumber="0" :nianji="nianji" :zhangId="zhangId" :tipFlag="tipFlag"></CustomTabBar>
-	<tip-small-dialog ref="goPayDialogRef" @confirm-btn="goPayPage" :content="tipContent"></tip-small-dialog>
-	<tip-middle-dialog ref="youkeDialogRef" @confirm-btn="ykConfirm" :content="YouKeContent"></tip-middle-dialog>
-	<dao-tip-dialog ref="daoTipDialogRef" v-if="showDaoTip" :productTip="productTipImg" @dao-tip-close="daoTipClose"></dao-tip-dialog>
-	</view>
-</template>
-<script setup>
-	import daoTipDialog from './daoTipDialog.vue';
-	import {
-		userZhangInfo,
-		userLocate,
-		userZhangForntInfo,
-		userZhangNextInfo,
-		getCommonZhangInfo
-	} from "@/api/learnPlan.js"
-	import {
-		reactive,
-		ref,
-		nextTick,
-		getCurrentInstance,
-		onMounted
-	} from "vue";
-	import {
-		onLoad
-	} from '@dcloudio/uni-app';
-	import catalogue from "@/components/catalogue/catalogue.vue";
-	import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
-	import tipSmallDialog from '@/components/dialog/tipSmallDialog.vue'
-	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
-	import dSwiper from '@/components/wSwiper/DSwiper.vue';
-
-	import shuxueZhangjie from './product/shuxue.vue';
-	import yingyuZhangjie from './product/yingyu.vue';
-
-	import {
-		useTabBarHistory
-	} from '@/utils/emitEvents.js';
-	import eggDialog from './eggDialog.vue'
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import cacheManager from "@/utils/cacheManager.js";
-	const tipContent = '付费章节,是否前往开通付费?'; //当前产品
-	const goPayDialogRef = ref(null);
-	const youkeDialogRef = ref(null);
-	const dSwiperRef = ref(null);
-	const eggDialogRef = ref(null);
-	const current = ref(0);
-	const currentDuration = ref(500)
-	const YouKeContent = '您当前是游客身份,登录后才能浏览内容,现在去登录?';
-	const zhangId = ref(null); //游客使用
-	const nianji = ref(null); //游客使用
-	const cardId = ref(null); //游客使用
-	const tipFlag = ref(null) //游客使用
-	const catalogueRef = ref(null);
-	const youkeZhangInfoData = ref(null);
-	const currentProduct = ref(null);
-	const selectZhang = ref(null);
-	const zhangList = ref(null);
-	const gradeTerm = ref(null);
-	let infoData = reactive({
-		jieList: [],
-		haveFlag: '',
-		nianji: '',
-		number: '',
-		cardId: '',
-		zhangId: '',
-		zhangName: '',
-		numberStr: '',
-	});
-	const gradeMapping = {
-		1: 'L1',
-		2: 'L2',
-		3: 'L3',
-		4: 'L4',
-		5: 'L5',
-		6: 'L6'
-	};
-
-	const termMapping = {
-		1: ' 数学',
-		2: ' 英语'
-	};
-	
-	const daoTipDialogRef = ref(null);
-	const showDaoTip = ref(true);
-	const productTipImg = ref('');
-		
-	onLoad((options) => {
-		init(options);
-	})
-	
-	function listSelectJieClick(item,jie) {
-		if( cacheManager.get('auth')){
-			cacheManager.updateObject('auth', {
-				currentZhang: zhangList.value.findIndex(citem => citem.zhangId == item.zhangId),
-				zhangId: item.zhangId
-			})
-		}
-		listClick(jie);
-	}
-	
-	function getProjectImg(){
-		if(currentProduct.value ==1){
-			// 数学
-			productTipImg.value = 'static/images/study/shuxue/shuxue-tip.gif';
-			getBj('shuxue')
-		}else if(currentProduct.value ==2){
-			// 英语
-			productTipImg.value = 'static/images/study/yingyu/yingyu-tip.gif'
-			getBj('yingyu');
-		}
-	}
-	function getBj(data){
-		let bjType =cacheManager.get('dao-tip')[data];
-		if(cacheManager.get('auth')){
-			// 非游客
-			if(bjType!=='has'){
-				nextTick(() => {
-					daoTipDialogRef.value.handleShow();
-				})
-			}
-		}else{
-			// 游客
-			if(tipFlag.value==='0'){
-				nextTick(() => {
-					daoTipDialogRef.value.handleShow();
-				})
-			}
-		}
-	}
-	function daoTipClose(){
-		if(cacheManager.get('auth')){
-			// 非游客 记缓存
-			if(currentProduct.value ==1){
-				// 数学
-				cacheManager.updateObject('dao-tip',{shuxue:'has'})
-			}else if(currentProduct.value ==2){
-				// 英语
-				cacheManager.updateObject('dao-tip',{yingyu:'has'})
-			}
-		}else{
-			//游客
-			tipFlag.value = '1';
-		}
-	}
-	function onChangeTab(e) {
-		console.log('e',e);	
-		console.log(e.detail.current);
-		if( cacheManager.get('auth')){
-			infoData.zhangId = cacheManager.get('zhangInfo').zhangList[e.detail.current].zhangId
-			cacheManager.updateObject('auth', {
-				currentZhang: e.detail.current,
-				zhangId: infoData.zhangId
-			})
-		}
-	}
-
-	function init(options) {
-		if (cacheManager.get('auth')) {
-			//会员 取auth
-			selectZhang.value = cacheManager.get('auth');
-			currentProduct.value = cacheManager.get('auth').cardId;
-			//let currentObject = this.cacheZhangInfo.jieList.find(item => item.jieId == this.jieId);
-			console.log(selectZhang.value);
-			// 已登录
-			if (selectZhang.value.firstLogin) {
-				nextTick(() => {
-					eggDialogRef.value.eggShow();
-				})
-			}
-			// cacheManager.set('daoPageCache',{isCache:true})
-			if(!cacheManager.get('daoPageCache').isCache){
-					getZhangInfo()
-				
-			}else{
-					console.log('shiyonghuancun');
-					translateData(cacheManager.get('auth'))
-					zhangList.value = cacheManager.get('zhangInfo').zhangList
-					current.value = cacheManager.get('auth').currentZhang
-					infoData.zhangId = cacheManager.get('zhangInfo').zhangList[current.value].zhangId
-					recordZhangJie()	
-			}
-			
-			// 已登录付费未支付选择返回 -> 恢复弹窗
-			if (options.studyWithCatalgue) {
-				// 展开弹窗
-				nextTick(() => {
-					catalogueRef.value.showPopup({zhangId: infoData.zhangId});
-				}) 
-			}
-		} else {
-			zhangId.value = options.zhangId
-			nianji.value = options.nianji
-			cardId.value = options.cardId
-			tipFlag.value = options.tipFlag;
-			currentProduct.value = options.cardId
-			// 未登录 游客 
-			getCommonZhang(options)
-			getProjectImg()
-		}
-	}
-
-	function getZhangInfo(data) {
-		let req = {
-			nianji: selectZhang.value.nianji,
-			cardId: selectZhang.value.cardId,
-			zhangId: selectZhang.value.zhangId,
-		}
-		userZhangInfo(req).then(res => {
-			cacheManager.set('zhangInfo', res.data)
-			let zhang = cacheManager.get('zhangInfo').zhangList.findIndex(zhang => zhang.zhangId == selectZhang
-				.value.zhangId);
-			if (zhang != -1) {
-				cacheManager.updateObject('auth', {
-					currentZhang: zhang
-				})
-			} else {
-				cacheManager.updateObject('auth', {
-					currentZhang: 0
-				})
-			}
-			cacheManager.set('daoPageCache',{isCache:true})
-			
-			nextTick(() => {
-				translateData(res.data)
-				zhangList.value = res.data.zhangList
-				current.value = cacheManager.get('auth').currentZhang
-				infoData.zhangId = res.data.zhangList[current.value].zhangId
-				recordZhangJie()
-			})
-
-		})
-	}
-
-	function getCommonZhang(data) {
-
-		let req = {
-			nianji: data.nianji,
-			cardId: data.cardId,
-			zhangId: data.zhangId,
-		}
-		getCommonZhangInfo(req).then(res => {
-			translateData(res.data)
-			youkeZhangInfoData.value =  res.data
-			zhangList.value = res.data.zhangList
-			current.value = 0
-		})
-	}
-
-	function recordZhangJie() {
-		let req = {
-			nianji: selectZhang.value.nianji,
-			userId: cacheManager.get('auth').userId,
-			zhangId: infoData.zhangId,
-			cardId: selectZhang.value.cardId,
-
-		}
-		userLocate(req).then(res => {
-
-		})
-	}
-
-	function goPayPage() {
-		uni.redirectTo({
-			url: '/pages/pay/svip?cardId='+currentProduct.value
-		})
-	}
-
-	function handleChangeZhang(data) {
-		console.log(data);
-		selectZhang.value = data;
-		const authCode = getUserIdentity();
-		if (authCode !== 'Visitor') {
-			cacheManager.updateObject('auth', {
-				zhangId: data.zhangId,
-        currentZhang: zhangList.value.findIndex(citem => citem.zhangId == item.zhangId),
-			})
-		}
-		currentDuration.value = 0
-		setTimeout(() => {
-			current.value = data.number - 1
-			nextTick(() => {
-				currentDuration.value = 500
-			})
-		}, 100)
-		//	init()
-	}
-
-	function goKaoshi(data) {
-		uni.redirectTo({
-			// url: `/pages/unitTest/index?jieNumber=` + data.number
-			url: `/pages/unitTest/index?jieId=` + data.jieId
-		})
-	}
-
-	function goLookShipin(data) {
-		if (!cacheManager.get('auth')) {
-			console.log('zhangList.value[0].jieList[0]',zhangList.value[0].jieList);
-			let youkeData = {
-				cardId:cardId.value,
-				nianji:nianji.value,
-				zhangId:zhangId.value,
-				tipFlag:tipFlag.value,
-				jieList:zhangList.value[0].jieList,
-				jieName:zhangList.value[0].jieList[0].jieName
-			}
-			uni.redirectTo({
-				url: '/pages/study/lookShipin?youkePageData=' + JSON.stringify(youkeData)
-			})
-		} else {
-			uni.redirectTo({
-				url: '/pages/study/lookShipin?jieId=' + data.jieId
-			})
-		}
-
-
-	}
-
-	function translateData(data) {
-		gradeTerm.value = termMapping[data.cardId] +' · '+ gradeMapping[data.nianji]
-	}
-
-	function listClick(data) {
-		if (!cacheManager.get('auth') && data.firstFlag != 1) {
-			youkeDialogRef.value.handleShow();
-			return;
-		}
-		const authCode = getUserIdentity();
-		console.log('authCode', authCode);
-		if (!(authCode == 'VIP' || data.firstFlag == 1)) {
-			goPayDialogRef.value.handleShow();
-			return false
-		}
-		if (data.type == 2) {
-			// 最后一项
-			goKaoshi(data)
-		} else {
-			goLookShipin(data)
-		}
-	}
-
-	function handleCheckCatalogue(item) {
-		catalogueRef.value.showPopup(item);
-	}
-
-	function clickGradeTerm() {
-		// if(cacheManager.get('auth')){
-		// 	cacheManager.updateObject('auth', {
-		// 		currentZhang: 0
-		// 	})
-		// }
-		uni.navigateTo({
-			url: `/pages/selectGradesTerms/index?tipFlag=${tipFlag.value}`,
-		})
-	}
-	// 游客弹窗---确定
-	function ykConfirm() {
-		uni.redirectTo({
-			url: '/pages/login/index'
-		});
-	}
-
-	function eggBtn() {
-		console.log('点击:开启提分之旅');
-		getProjectImg();
-		cacheManager.updateObject('auth', {
-			firstLogin: false
-		})
-	}
-</script>
-<style>
-</style>

+ 0 - 509
pages/study/lookShipin.vue

@@ -1,509 +0,0 @@
-<template>
-	<view class="ezy-course-page" :style="{backgroundImage: 'url(' + courseBjFun() + ')'}">
-		<view class="icon-title-navBar-box">
-			<view @click="goUpPage" class="nav-bar-icon"></view>
-			<text class="nav-bar-title">{{shipinTitle}}</text>
-		</view>
-		<view class="ezy-video-box course-video-box">
-			<view ref="videoContent" id="wgy-player-test" :playAuth="playAuth"
-				:change:playAuth="renderScript.receiveMsg" :videoId="videoId" :change:videoId="renderScript.videoIdFun"
-				:hideFlag="hideFlag" :change:hideFlag="renderScript.hideFlagFun" :progressMarkers="progressMarkers"
-				:change:progressMarkers="renderScript.progressMarkersMsg" :seekTime="seekTime"
-				:change:seekTime="renderScript.seekTimeFun" class="ezy-video">
-			</view>
-		</view>
-		<view class="course-content-border">
-			<view class="course-content-box">
-				<!-- <view class="course-title">{{jieName}}</view> -->
-				<view v-for="(item,index) in progressMarkers" :key="index" @click="markersClick(item)">
-					<view class="title-play-box">
-						<icon class="course-icon" :style="{backgroundImage: 'url(' + courseIconFun() + ')'}"></icon>
-						<view class="course-title">{{item.title}}</view>
-						<view class="course-play-btn" @click="markersClick(item)">视频讲解</view>
-					</view>
-					<rich-text :nodes="item.describe" class="course-content-item"></rich-text>
-				</view>
-			</view>
-		</view>
-		<uni-popup ref="popupRef" :animation="false" :is-mask-click="false"
-			mask-background-color="rgba(51, 137, 217, 0.65);">
-			<view :class="courseClass">
-				<view class="text-score">{{credit}}</view>
-				<view class="course-btn-box">
-					<view @click="goBack" class="return-btn"></view>
-					<view @click="goNext" class="continue-btn"></view>
-				</view>
-			</view>
-		</uni-popup>
-		<tip-middle-dialog ref="youkeDialogRef" @confirm-btn="ykConfirm" :content="YouKeContent"></tip-middle-dialog>
-		<svip-dialog ref="svipDialogRef" @confirm-btn="svipConfirm"></svip-dialog>
-	</view>
-
-</template>
-
-<script>
-	import {
-		ref
-	} from 'vue';
-	import {
-		onLoad,
-		onReady
-	} from '@dcloudio/uni-app';
-	import {
-		getVideoAuth,
-		getVideoAuthYk,
-		videoWancheng
-	} from "@/api/shipin.js"
-	import tipMiddleDialog from '@/components/dialog/tipMiddleDialog.vue';
-	import svipDialog from './svipDialog.vue';
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import {
-		userZhangNextInfo,
-	} from "@/api/learnPlan.js"
-	import cacheManager from "@/utils/cacheManager.js";
-	export default {
-		data() {
-			return {
-				pageData: null, //上个页面获取的视频参数(视频id)
-				playAuth: "", //播放凭证
-				progressMarkers: [],
-				jieName: '',
-				hideFlag: 'show',
-				videoId: "", //阿里云视频id
-				cardId: '',
-				credit: '',
-				nianji: '',
-				zhangId: '',
-				seekTime: '',
-				jieId: '',
-				courseClass: '',
-				shipinTitle: '',
-				cacheZhangInfo: {},
-				cacheCurrentZhangIndex: '',
-				YouKeContent: '您当前是游客身份,登录后才能浏览内容,现在去登录?'
-			}
-		},
-		components: {
-			tipMiddleDialog,
-			svipDialog
-		},
-		onLoad(options) {
-			if (!cacheManager.get('auth')) {
-				const youkeData = JSON.parse(options.youkePageData)
-				// 游客
-				this.videoId = youkeData.jieList[0].videoId
-				this.nianji = youkeData.nianji
-				this.zhangId = youkeData.zhangId
-				this.cardId = youkeData.cardId
-				this.tipFlag=youkeData.tipFlag
-				this.shipinTitle = youkeData.jieName
-				this.progressMarkers = youkeData.jieList[0].jiedianList || []
-				this.getLiveYk(); //获取播放凭证
-			} else {
-				this.init(options)
-			}
-		},
-
-		onHide() {
-			console.log('onHideonHideonHideonHide');
-			this.hideFlag = 'hide'
-		},
-		onUnload() {
-			console.log('onUnloadonUnloadonUnloadonUnloadonUnload');
-			this.hideFlag = 'hide'
-		},
-		methods: {
-			courseBjFun() {
-				switch (Number(cacheManager.get('auth').cardId)) {
-					case 1:
-						return 'static/images/course/couse-shuxue-bj.png'
-						break;
-					case 2:
-						return 'static/images/course/course-yingyu-bj.png'
-						break;
-					default:
-						break;
-				}
-			},
-			courseIconFun() {
-				switch (Number(cacheManager.get('auth').cardId)) {
-					case 1:
-						return 'static/images/course/shuxue-icon.png'
-						break;
-					case 2:
-						return 'static/images/course/yingyu-icon.png'
-						break;
-					default:
-						break;
-				}
-			},
-			init(options) {
-				this.jieId = options.jieId
-				if (!(cacheManager.get('zhangInfo') && options.jieId)) {
-					toast('数据错误,缓存丢失/ jieId丢失')
-					return false
-				}
-				this.cacheCurrentZhangIndex = cacheManager.get('auth').currentZhang
-				this.cacheZhangInfo = cacheManager.get('zhangInfo')
-
-				// let zhang = this.cacheZhangInfo.zhangList.find(zhang => zhang.zhangId == this.zhangId);
-				// if (!zhang) {
-				// 	return
-				// }
-				let zhang = this.cacheZhangInfo.zhangList[this.cacheCurrentZhangIndex]
-				let currentObject = zhang.jieList.find(item => item.jieId == options.jieId);
-				console.log(currentObject);
-				this.shipinTitle = currentObject.jieName
-				this.pageData = {
-					...currentObject
-				}
-				console.log(this.pageData);
-				this.videoId = this.pageData.videoId
-				this.jieName = this.pageData.jieName
-				this.credit = this.pageData.credit
-				this.progressMarkers = this.pageData.jiedianList || []
-				this.getLive(); //获取播放凭证
-			},
-			goNextZhang() {
-				let that = this
-				cacheManager.updateObject('auth', {
-					currentZhang: this.cacheCurrentZhangIndex + 1
-				})
-				this.cacheZhangInfo = cacheManager.get('zhangInfo')
-				let zhang = this.cacheZhangInfo.zhangList[this.cacheCurrentZhangIndex + 1]
-				uni.redirectTo({
-					url: '/pages/study/lookShipin?jieId=' + zhang.jieList[0].jieId
-				})
-			},
-			playEnd(data) {
-				const AuthCode = getUserIdentity();
-				console.log(AuthCode);
-				if (AuthCode == 'Visitor') {
-					return false
-				} else {
-
-					let currentJieData = cacheManager.getCurrentJieData('zhangInfo', this.cacheCurrentZhangIndex, this
-						.jieId)
-					if (currentJieData.studyFlag == 1) {
-						// 学完一遍
-						this.courseClass = 'course-finish-dialog'
-						this.$refs.popupRef.open();
-					} else {
-						cacheManager.updateJieStatus('zhangInfo', this.cacheCurrentZhangIndex, this.jieId)
-						this.courseClass = 'course-score-dialog'
-						this.$refs.popupRef.open();
-						let req = {
-							credit: this.credit,
-							jieId: this.jieId,
-						}
-						videoWancheng(req).then(res => {
-
-						})
-					}
-				}
-
-			},
-			goBack() {
-				this.$refs.popupRef.close();
-				this.goUpPage()
-			},
-			goNext() {
-				this.$refs.popupRef.close();
-				if (!cacheManager.get('auth')) {
-					console.log(this);
-					this.$refs.youkeDialogRef.handleShow();
-				} else {
-					const AuthCode = getUserIdentity();
-					console.log(AuthCode);
-					if (AuthCode == 'Not-Vip') {
-						this.$refs.svipDialogRef.handleShow();
-						return false
-					}
-					//	debugger
-					Number(this.jieId++)
-					let currentObject = this.cacheZhangInfo.zhangList[this.cacheCurrentZhangIndex].jieList.find(item =>
-						item.jieId == this.jieId);
-					this.pageData = {
-						...currentObject
-					}
-					// lastFlag是否是本章最后一节,0否1是  type,1视频,2试题
-					if (this.pageData.lastFlag == 1 && this.pageData.type == 2) {
-						uni.redirectTo({
-							url: `/pages/unitTest/index?jieId=` + this.pageData.jieId
-						})
-					} else if (this.pageData.lastFlag == 1 && this.pageData.type == 1) {
-						// 当前是本章最后一节,并且是 视频 切换下一章
-						this.goNextZhang()
-					} else {
-						uni.redirectTo({
-							//url: '/pages/study/lookShipin?studyData=' + JSON.stringify(pageData)
-							url: '/pages/study/lookShipin?jieId=' + this.jieId
-						})
-					}
-				}
-			},
-			getLiveYk() {
-				let req = {
-					videoId: this.videoId
-				}
-				getVideoAuthYk(req).then(res => {
-					this.playAuth = res.data
-				})
-			},
-			getLive() {
-				let req = {
-					videoId: this.videoId
-				}
-				getVideoAuth(req).then(res => {
-					this.playAuth = res.data
-				})
-			},
-			markersClick(data) {
-				this.seekTime = ""
-				this.$nextTick(() => {
-					this.seekTime = data.offset
-				});
-			},
-			goUpPage() {
-				if (!cacheManager.get('auth')) {
-					uni.redirectTo({
-						url: '/pages/study/index?cardId=' + this.cardId + '&nianji=' + this.nianji + '&zhangId=' +
-							this.zhangId+ '&tipFlag=' + this.tipFlag
-					})
-				} else {
-					uni.redirectTo({
-						url: `/pages/study/index`
-
-					})
-				}
-
-
-
-			},
-			svipConfirm() {
-				uni.redirectTo({
-					url: '/pages/pay/svip?cardId=' + cacheManager.get('auth').cardId
-				})
-			},
-			ykConfirm() {
-				uni.redirectTo({
-					url: '/pages/login/index'
-				});
-			}
-		},
-		created() {
-			// console.log("getLive")
-			// this.getLive(); //获取播放凭证
-
-		},
-
-	}
-</script>
-
-
-
-<script module="renderScript" lang="renderjs">
-	export default {
-		mounted() {
-			console.log("renderScript1")
-			// 在适合的生命周期,通过script和link标签引入播放器sdk、css
-			//	this.loadWebPlayerSDK()
-		},
-		data() {
-			return {
-				player: null,
-				playAuth: '',
-				videoId: '',
-				progressMarkers: [],
-				seekTime: ''
-
-			}
-		},
-		methods: {
-
-			receiveMsg(newValue, oldValue, ownerInstance, instance) {
-				// console.log('service层中的options发生变化')
-				// console.log('新值', newValue)
-				// console.log('旧值', oldValue)
-				// ownerInstance和this.$ownerInstance一样,可用来向service层通信
-				// instance和ownerInstance的区别是:
-				// instance.$el指向的是触发事件的那个节点;ownerInstance.$el指向当前vue文件中的根节点;
-				// instance的作用目前尚不明确,官方没有给出用法
-				if (newValue) {
-					this.playAuth = ''
-					this.playAuth = newValue
-					this.loadWebPlayerSDK()
-
-				}
-			},
-			videoIdFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.videoId = ''
-					this.videoId = newValue
-				}
-			},
-			hideFlagFun(newValue, oldValue, ownerInstance, instance) {
-				if (this.player) {
-					this.player.pause()
-				}
-			},
-			progressMarkersMsg(newValue, oldValue, ownerInstance, instance) {
-
-				if (newValue) {
-					this.progressMarkers = newValue
-				}
-			},
-			seekTimeFun(newValue, oldValue, ownerInstance, instance) {
-				if (newValue) {
-					this.player.play()
-					this.player.seek(newValue)
-					// switch (this.player.getStatus()) {
-					// 	case 'init':
-					// 		break;
-					// 	case 'ready':
-					// 		break;
-					// 	case 'loading':
-					// 	this.player.play()
-					// 	this.player.seek(newValue)
-					// 		break;
-					// 	case 'play':
-					// 		this.player.seek(newValue)
-					// 		break;
-					// 	case 'pause':
-					// 	this.player.play()
-					// 	this.player.seek(newValue)
-					// 		break;
-					// 	case 'playing':
-					// 	this.player.seek(newValue)
-					// 		break;
-					// 	case 'waiting':
-					// 		break;
-					// 	case 'error':
-					// 		break;
-					// 	case 'ended':
-					// 		break;
-					// 	default:
-					// 		break;
-					// }
-					//	this.player.seek(newValue)
-				}
-			},
-			playAli() {
-				let that = this
-				// console.log(this.videoId);
-				// console.log(this.playAuth);
-				//配置播放器
-				if (!this.playAuth) {
-					return false;
-				}
-				var player = new Aliplayer({
-					id: "wgy-player-test",
-					"vid": this.videoId,
-					"playauth": this.playAuth,
-					extraInfo: {
-						poster: 'noposter'
-					},
-					//cover: 'https://img.alicdn.com/tps/TB1EXIhOFXXXXcIaXXXXXXXXXXX-760-340.jpg',
-					// "vid": '',
-					// "playauth": '',
-					// "playConfig": {
-					// 	"EncryptType": 'AliyunVoDEncryption'
-					// },
-					"skinLayout": [{
-							"name": "bigPlayButton",
-							"align": "blabs",
-							"x": 30,
-							"y": 80
-						},
-						{
-							"name": "H5Loading",
-							"align": "cc"
-						},
-						{
-							"name": "controlBar",
-							"align": "blabs",
-							"x": 0,
-							"y": 0,
-							"children": [{
-									"name": "progress",
-									"align": "blabs",
-									"x": 0,
-									"y": 44
-								},
-								{
-									"name": "playButton",
-									"align": "tl",
-									"x": 15,
-									"y": 12
-								},
-								{
-									"name": "fullScreenButton",
-									"align": "tr",
-									"x": 10,
-									"y": 12
-								},
-								{
-									"name": "timeDisplay",
-									"align": "tr",
-									"x": 10,
-									"y": 5
-								}
-							]
-						}
-					],
-					"qualitySort": "asc",
-					"format": "mp4",
-					"mediaType": "video",
-					"encryptType": 1,
-					"progressMarkers": this.progressMarkers,
-					"autoplay": false,
-					"isLive": false,
-					"rePlay": false,
-					"playsinline": true,
-					"preload": false,
-					"controlBarVisibility": "hover",
-					"useH5Prism": true
-
-				}, function(player) {});
-				this.player = player;
-				player.on('canplay', function() {
-					console.log('canplay', this.player.tag);
-					player.tag.play();
-
-				});
-				player.on('ended', function() {
-					that.$ownerInstance.callMethod('playEnd', {
-						data: 'end'
-					})
-					// uni.$emit('playEnd', {
-					// 	data: 'end'
-					// });
-				});
-			},
-
-
-			loadWebPlayerSDK() {
-				return new Promise((resolve, reject) => {
-					const s_tag = document.createElement('script'); // 引入播放器js
-					s_tag.type = 'text/javascript';
-					s_tag.src = 'https://g.alicdn.com/de/prismplayer/2.9.6/aliplayer-min.js';
-					s_tag.charset = 'utf-8';
-					s_tag.onload = () => {
-						//	console.log(this.playAuth);
-						this.playAli()
-						resolve();
-					}
-					document.body.appendChild(s_tag);
-					const l_tag = document.createElement('link'); // 引入播放器css
-					l_tag.rel = 'stylesheet';
-					l_tag.href =
-						'https://g.alicdn.com/de/prismplayer/2.9.6/skins/default/aliplayer-min.css';
-					document.body.appendChild(l_tag);
-				});
-			},
-		}
-	}
-</script>

+ 0 - 267
pages/study/product/shuxue.vue

@@ -1,267 +0,0 @@
-<template>
-	<view class="ezy-study-page ezy-shuxue-study-page">
-		<view class="study-school-year" @click="clickGradeTerm">{{gradeTerm}}</view>
-		<view class="ezy-study-wrap">
-			<view class="chapter-box" @click="handleCheckCatalogue">{{options.numberStr}}</view>
-			<view @click="handleCheckCatalogue" :class="getTitleClass(options.zhangName)">
-				{{getZhangName(options.zhangName)}}
-			</view>
-			<!-- 动物类型 -->
-			<view v-if="growthType!=null" :class="currentGrowth()"></view>
-			<view>
-				<!-- 小岛 -->
-				<view class="brand-item" v-for="(item, index) in options.jieList" :key="item.jieId"
-					@click="listClick(item, index)" :class="getClass(options.jieList,index,isVip)">
-					<view v-if="isVip === 'VIP'">
-						<!-- 序号 -->
-						<view class="brand-icon" v-if="item.studyFlag===0">{{ item.number }}</view>
-						<!-- 星星 -->
-						<view class="brand-finish-icon" v-if="item.studyFlag===1"></view>
-						<!-- 箭头 -->
-						<view v-if="item.daeFlag &&animalNum == index" class="brand-arrow"></view>
-						<!-- 节名称 -->
-						<view class="brand-content">{{ item.jieName }}</view>
-					</view>
-					<view v-if="isVip !== 'VIP'">
-						<!-- 序号或锁 -->
-						<view v-if="options.number ==1 && item.firstFlag ==1" class="brand-icon">{{ item.number }}
-						</view>
-						<!-- 锁 -->
-						<view v-else class="brand-lock"></view>
-						<!-- 箭头 -->
-						<view v-if="item.daeFlag  &&  animalNum == index &&isVip != 'Visitor'" class="brand-arrow"></view>
-						<!-- 节名称 -->
-						<view class="brand-content"> {{ item.jieName }} </view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script setup>
-	import {
-		reactive,
-		ref,
-		watch,
-		getCurrentInstance,
-		onMounted,
-		nextTick
-	} from "vue";
-	import cacheManager from "@/utils/cacheManager.js";
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import {
-		onShow
-	} from '@dcloudio/uni-app';
-	const growthType = ref(null);
-	onShow(() => {
-		growthType.value = cacheManager.get('auth')?cacheManager.get('auth').growthType:null
-	})
-	
-	const $emit = defineEmits(['clickGradeTerm', 'onLeft', 'onRight', 'handleCheckCatalogue', 'listClick'])
-	const props = defineProps({
-		options: {
-			type: Object,
-		},
-		gradeTerm: {
-			type: String,
-		},
-	})
-	const isVip = getUserIdentity();
-//	console.log('isVip',isVip);
-	const gradeMapping = {
-		1: '一年级',
-		2: '二年级',
-		3: '三年级',
-		4: '四年级',
-		5: '五年级',
-		6: '六年级'
-	};
-
-	const termMapping = {
-		1: ' 数学',
-		2: ' 英语'
-	};
-
-	let startX = ref(0);
-	let isSliding = ref(false);
-	let endX = ref(0);
-	let gradeTerm = ref('');
-	let animalNum = ref(0);
-
-	function clickGradeTerm() {
-		$emit('clickGradeTerm');
-	}
-
-	function listClick(data, index) {
-		data.daeFlag = true
-		nextTick(() => {
-			animalNum.value = index
-		})
-		setTimeout(() => {
-			$emit('listClick', data);
-		}, 300)
-
-	}
-	// 获取章name
-	function getZhangName(data) {
-		if (data.length <= 9) {
-			return data
-		} else {
-			return getZhangContent(data);
-		}
-	}
-
-	function currentGrowth(data) {
-		if (growthType.value == 0) {
-			return 'animal-img dan-img'
-		} else if (growthType.value == 1) {
-			return 'animal-img xiao-e-img'
-		} else if (growthType.value == 2) {
-			return 'animal-img zhong-e-img'
-		} else {
-			return 'animal-img da-e-img'
-		}
-	}
-
-	// 章换行显示
-	function getZhangContent(data) {
-
-		let length = data.length;
-		// 初始将字符串平分成两半
-		let halfLength = Math.floor(length / 2);
-
-		// 插入换行符
-		let firstLine = data.slice(0, halfLength);
-		let secondLine = data.slice(halfLength);
-		//console.log(firstLine + '\n' + secondLine, 'firstLine + + secondLine');
-		return firstLine + '\n' + secondLine;
-	}
-
-	// 章class
-	function getTitleClass(data) {
-
-		if (data.length <= 5) {
-			return 'chapter-title-box chapter-small-title-box'
-		} else if (data.length <= 9) {
-			return 'chapter-title-box chapter-middle-title-box'
-		} else if (data.length > 9) {
-			return 'chapter-title-box chapter-big-title-box'
-		}
-	}
-
-	// 获取节class
-	function getClass(data, index, isVip) {
-		let brandActive = '';
-		if (isVip === 'VIP') {
-			brandActive = 'brand-active';
-		} else if (data[index].firstFlag == 1) {
-			brandActive = 'brand-active';
-		} else {
-			brandActive = '';
-		}
-		let indexLast = data.length - 1;
-		// 判断最后一个为名称是否为单元测试,是单元测试则返回ceshi-jie
-		if (index === indexLast && data[data.length - 1].jieName == '单元测试') {
-			return 'ceshi-brand-item' + ' ' + brandActive;
-		} else {
-			return getJieClass(data, index, brandActive)
-		}
-	}
-	// 根据获取节字数获取class
-	function getJieClass(data, index, active) {
-		let itemJieName = data[index].jieName.length;
-		if (itemJieName > 7) {
-			return 'big-brand-item' + ' ' + active;
-		} else {
-			return 'small-brand-item' + ' ' + active;
-		}
-	}
-
-
-
-	function handleCheckCatalogue() {
-		$emit('handleCheckCatalogue');
-	}
-
-	function onTouchStart(event) {
-		console.log(event.touches.length);
-		isSliding.value = false
-		if (event.touches.length === 1) {
-			isSliding.value = true;
-			startX.value = event.touches[0].pageX;
-		} else {
-			isSliding.value = false;
-			event.preventDefault()
-			return
-		}
-	}
-
-	function onSwipeLeft(event) {
-		console.log('11111');
-		if (cacheManager.get('auth')) {
-			$emit('onLeft');
-		}
-	}
-
-	function onSwipeRight(event) {
-		console.log('22222');
-		console.log(cacheManager.get('auth'));
-		if (cacheManager.get('auth')) {
-			console.log('啊啊啊啊啊');
-			$emit('onRight');
-		}
-
-	}
-
-	function onTouchEnd(event) {
-		if (isSliding.value) {
-			const distanceX = event.changedTouches[0].clientX - startX.value
-			if (distanceX > 200) {
-				onSwipeLeft();
-			} else if (distanceX < -200) {
-				onSwipeRight();
-			}
-			isSliding.value = false
-		} else {
-			console.log('error');
-		}
-	}
-
-	function dataRecom(data) {
-
-		const index = data.jieList.findIndex(item => item.studyFlag == 0);
-
-		if (index !== -1) {
-			data.jieList[index].daeFlag = true;
-			animalNum.value = index
-		}
-	}
-	watch(() => props.options, (newVal, oldVal) => {
-		//	console.log('New options:', newVal);
-		//	console.log('Old options:', oldVal);
-		// 在这里可以根据新的 options 做一些操作,比如发起请求等
-
-		dataRecom(newVal)
-	}, {
-		deep: true,
-		immediate: true
-	});
-	watch(() => props.gradeTerm, (newVal, oldVal) => {
-		//	console.log('New options:', newVal);
-		//	console.log('Old options:', oldVal);
-		// 在这里可以根据新的 options 做一些操作,比如发起请求等
-		gradeTerm.value = newVal
-
-	}, {
-		deep: true,
-		immediate: true
-	});
-</script>
-
-<style>
-
-</style>

+ 0 - 227
pages/study/product/yingyu.vue

@@ -1,227 +0,0 @@
-<template>
-	<view class="ezy-study-page ezy-yingyu-study-page">
-		<view class="study-school-year" @click="clickGradeTerm">{{gradeTerm}}</view>
-		<view class="ezy-study-wrap" @touchstart="onTouchStart" @touchend="onTouchEnd">
-			<view @click="handleCheckCatalogue" class="chapter-title-box">{{options.zhangName}}</view>
-			<!-- 动物类型 -->
-			<view v-if="growthType!=null" :class="currentGrowth()"></view>
-			<view>
-				<!-- 小岛 -->
-				<view class="brand-item" v-for="(item, index) in options.jieList" :key="item.jieId"
-					@click="listClick(item, index)" :class="getClass(options.jieList,index,isVip)">
-					<view v-if="isVip === 'VIP'">
-						<!-- 序号 -->
-						<view class="brand-icon">{{ item.number }}</view>
-						<!-- 星星 -->
-						<view class="brand-finish-icon" v-if="item.studyFlag===1"></view>
-						<!-- 箭头 -->
-						<view class="brand-arrow" v-if="item.daeFlag &&animalNum == index"></view>
-						<!-- 节名称 -->
-						<view class="brand-content">{{ item.jieName }}</view>
-					</view>
-					<view v-if="isVip !== 'VIP'">
-						<!-- 序号 -->
-						<view class="brand-icon">{{ item.number }}</view>
-						<!-- 锁 -->
-						<view v-if="item.firstFlag !='1'"  class="brand-lock"></view>
-						<!-- 箭头 -->
-						<view v-if="item.daeFlag  &&  animalNum == index && isVip != 'Visitor'" class="brand-arrow"></view>
-						<!-- 节名称 -->
-						<view class="brand-content"> {{ item.jieName }} </view>
-
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script setup>
-	import {
-		reactive,
-		ref,
-		watch,
-		getCurrentInstance,
-		nextTick,
-		onMounted
-	} from "vue";
-	import cacheManager from "@/utils/cacheManager.js";
-	import {
-		toast,
-		getUserIdentity
-	} from "@/utils/common";
-	import {
-		onShow
-	} from '@dcloudio/uni-app';
-	const growthType = ref(null);
-	onShow(() => {
-		growthType.value = cacheManager.get('auth')?cacheManager.get('auth').growthType:null
-	})
-	const $emit = defineEmits(['clickGradeTerm', 'onLeft', 'onRight', 'handleCheckCatalogue', 'listClick'])
-	const props = defineProps({
-		options: {
-			type: Object,
-		},
-		gradeTerm: {
-			type: String,
-		},
-	})
-	const isVip = getUserIdentity();
-	const gradeMapping = {
-		1: '一年级',
-		2: '二年级',
-		3: '三年级',
-		4: '四年级',
-		5: '五年级',
-		6: '六年级'
-	};
-
-	const termMapping = {
-		1: ' 数学',
-		2: ' 英语'
-	};
-
-	let startX = ref(0);
-	let isSliding = ref(false);
-	let endX = ref(0);
-	let gradeTerm = ref('');
-	let animalNum = ref(0);
-
-	function clickGradeTerm() {
-		$emit('clickGradeTerm');
-	}
-
-	function listClick(data,index) {
-		data.daeFlag = true
-		nextTick(() => {
-			animalNum.value = index
-		})
-		setTimeout(() => {
-			$emit('listClick', data);
-		}, 300)
-		
-	}
-
-	function currentGrowth(data) {
-		if (growthType.value == 0) {
-			return 'animal-img dan-img'
-		} else if (growthType.value == 1) {
-			return 'animal-img xiao-e-img'
-		} else if (growthType.value == 2) {
-			return 'animal-img zhong-e-img'
-		} else {
-			return 'animal-img da-e-img'
-		}
-	}
-	// 章换行显示
-	function getZhangContent(data) {
-		console.log(data.length, 'data.length');
-		let length = data.length;
-		// 初始将字符串平分成两半
-		let halfLength = Math.floor(length / 2);
-
-		// 插入换行符
-		let firstLine = data.slice(0, halfLength);
-		let secondLine = data.slice(halfLength);
-		console.log(firstLine + '\n' + secondLine, 'firstLine + + secondLine');
-		return firstLine + '\n' + secondLine;
-	}
-
-	// 获取节class
-	function getClass(data, index, isVip) {
-		let brandActive = '';
-		if (isVip === 'VIP') {
-			brandActive = 'brand-active';
-		} else if (data[index].firstFlag == 1) {
-			brandActive = 'brand-active';
-		} else {
-			brandActive = '';
-		}
-		let indexLast = data.length - 1;
-		// 判断最后一个为名称是否为单元测试,是单元测试则返回ceshi-jie
-		if (index === indexLast && data[data.length - 1].jieName == 'Testing') {
-			return 'ceshi-brand-item' + ' ' + brandActive;
-		} else {
-			return brandActive;
-		}
-	}
-
-	function handleCheckCatalogue() {
-		$emit('handleCheckCatalogue');
-	}
-
-	function onTouchStart(event) {
-		console.log(event.touches.length);
-		isSliding.value = false
-		if (event.touches.length === 1) {
-			isSliding.value = true;
-			startX.value = event.touches[0].pageX;
-		} else {
-			isSliding.value = false;
-			event.preventDefault()
-			return
-		}
-	}
-
-	function onSwipeLeft(event) {
-		console.log('11111');
-		if (cacheManager.get('auth')) {
-			$emit('onLeft');
-		}
-	}
-
-	function onSwipeRight(event) {
-		console.log('22222');
-		if (cacheManager.get('auth')) {
-			$emit('onRight');
-		}
-
-	}
-
-	function onTouchEnd(event) {
-		if (isSliding.value) {
-			const distanceX = event.changedTouches[0].clientX - startX.value
-			if (distanceX > 0) {
-				onSwipeLeft();
-			} else if (distanceX < 0) {
-				onSwipeRight();
-			}
-			isSliding.value = false
-		} else {
-			console.log('error');
-		}
-	}
-
-	function dataRecom(data) {
-		const index = data.jieList.findIndex(item => item.studyFlag == 0);
-
-		if (index !== -1) {
-			data.jieList[index].daeFlag = true;
-			animalNum.value = index
-		}
-	}
-	watch(() => props.options, (newVal, oldVal) => {
-		//	console.log('New options:', newVal);
-		//	console.log('Old options:', oldVal);
-		// 在这里可以根据新的 options 做一些操作,比如发起请求等
-
-		dataRecom(newVal)
-	}, {
-		deep: true,
-		immediate: true
-	});
-	watch(() => props.gradeTerm, (newVal, oldVal) => {
-		//	console.log('New options:', newVal);
-		//	console.log('Old options:', oldVal);
-		// 在这里可以根据新的 options 做一些操作,比如发起请求等
-		gradeTerm.value = newVal
-
-	}, {
-		deep: true,
-		immediate: true
-	});
-</script>
-
-<style>
-
-</style>

+ 0 - 55
pages/study/svipDialog.vue

@@ -1,55 +0,0 @@
-<!-- 中弹窗 二行文字 -->
-<template>
-	<uni-popup ref="svipPopup" :animation="false" :is-mask-click="false"
-	 mask-background-color="rgba(255, 255, 255, 0.6);">
-	 <view class="ezy-svip-dialog">
-		<view class="tip-content-box">
-		
-			<icon :class="'svip-img'+cardId"></icon>
-			<view class="tip-content">开通SVIP会员解锁学习关卡</view>
-			<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';
-	import cacheManager from "@/utils/cacheManager.js";
-	const props = defineProps({
-	  title: {
-	    type: String,
-	    default: '提示'
-	  },
-	  content: {
-	    type: String,
-		require: true,
-	    default: ''
-	  },
-	});
-	const cardId =cacheManager.get('auth').cardId
-	const svipPopup = ref(null); // 索引
-	const $emit = defineEmits(['confirm-btn'])
-	// 打开弹窗
-	function handleShow() {
-		svipPopup.value.open();
-	}
-	// 取消
-	function handleClose() {
-		svipPopup.value.close();
-	}
-	// 确认
-	function confirmBtn(){
-		$emit('confirm-btn');
-		svipPopup.value.close();
-	}
-	defineExpose({
-			handleShow
-		})
-</script>
-
-<style>
-</style>

+ 0 - 55
pages/test/test.vue

@@ -1,55 +0,0 @@
-<template>
-	<view>
-		<view>试题1:</view>
-		<yingyu v-if="qa" :question="qa" :placeholders="qa.placeholders"></yingyu>
-		<hr>
-		<view>试题2:</view>
-		<yingyu v-if="qa2" :question="qa2" :placeholders="qa2.placeholders"></yingyu>
-	</view>
-	<!-- <mtaRadio></mtaRadio> -->
-</template>
-
-<script setup>
-	import yingyu from '@/components/question/yingyu/danxuan.vue'
-	import mtaRadio from '@/components/question/yingyu/mtaRadio.vue'
-	import {
-		onLoad
-	} from "@dcloudio/uni-app"
-	import {
-		catchError,
-		toast
-	} from "@/utils/common.js"
-	import {
-		ref
-	} from "vue"
-
-	const qa = ref({
-		answer: "1111",
-		jiangjie: "1111",
-		name: "这是文本区域 Hello [radio1] 哈哈,你看到 World [radio2] 就是音频,听我说 Good [radio3]。",
-		optList: [
-			"string"
-		],
-		result: 0,
-		stId: 0,
-		type: 5,
-		placeholders: ['[radio1]','[radio2]','[radio3]']
-	})
-	const qa2 = ref({
-		answer: "1111",
-		jiangjie: "1111",
-		name: "这是文本区域 Yes [radio1]哈哈,你看到 No [radio2]就是音频,听我说 So [radio3]。",
-		optList: [
-			"string"
-		],
-		result: 0,
-		stId: 1,
-		type: 5,
-		placeholders: ['[radio1]','[radio2]','[radio3]']
-	})
-
-</script>
-
-<style>
-
-</style>

+ 0 - 180
pages/unitTest/index.vue

@@ -1,180 +0,0 @@
-<template>
-	<view class="ezy-exam-page" :style="{backgroundImage: 'url(' + courseBjFun() + ')'}">
-		<view class="ezy-navBar-box">
-			<view @click="handleBack" class="nav-bar-icon"></view>
-			<text class="nav-bar-title">单元测试</text>
-			<view class="nav-bar-other"><text class="key-note">{{current+1}}</text>/<text>{{total}}</text></view>
-		</view>
-		<view class="shiti-frame-box">
-			<w-swiper :list="list" :current="current" class="ezy-exam-swiper" @change="onSwiperChange">
-				<template v-slot:default="{item}">
-					<view class="body" v-if="item.mta_show">
-						<danxuan :question="item" v-if="item.type == '1'"></danxuan>
-						<panduan :question="item" v-if="item.type == '2'"></panduan>
-						<tiankong :question="item" v-if="item.type == '3'" :placeholders="item.placeholders"></tiankong>
-						<yingyuDanxuan :question="item" v-if="item.type == '4'" :placeholders="item.placeholders">
-						</yingyuDanxuan>
-					</view>
-				</template>
-			</w-swiper>
-			<view class="exam-submit-btn" v-if="current === list.length-1" @click="handleSubmit(uniPointsRef)"></view>
-		</view>
-
-		<!--  左右滑动  -->
-		<view class="tip-mask-box" @click="handleCloseTishi" v-if="showTishi">
-			<view class="exam-tip-box">左右滑动查看更多题目</view>
-		</view>
-
-
-		<!-- 答卷 -->
-		<chengji ref="chengjiRef" :list="list" @back="handleBack" :cardId="cardId"></chengji>
-		<!-- 分数弹窗 -->
-		<uniPointsVue ref="uniPointsRef" @checkAnswer="checkAnswer" @goStudy="goStudyContinue" :isLastZhang="!!haveFlag"
-			:studyFlag="studyFlag"></uniPointsVue>
-		<!-- 填空 -->
-		<FillItem :value="result" ref="popupRef" @blur="onBlur"></FillItem>
-
-	</view>
-
-</template>
-
-<script setup>
-	import mtaRadio from '@/components/question/yingyu/mtaRadio.vue'
-	import FillItem from "@/components/question/FillItem.vue";
-	import wSwiper from '@/components/wSwiper/wSwiper.vue';
-	import danxuan from "@/components/question/danxuan.vue";
-	import panduan from "@/components/question/panduan.vue";
-	import tiankong from "@/components/question/tiankong.vue";
-	import yingyuDanxuan from "@/components/question/yingyu/danxuan.vue";
-	import chengji from "@/components/chengji/chengji.vue";
-	import uniPointsVue from '@/components/points/uni-points.vue';
-	import * as httpUnit from "@/api/unitTest.js"
-	import {
-		catchError,
-	} from "@/utils/common.js"
-	import {
-		useExam
-	} from './useUnit';
-	import {
-		ref,
-		reactive
-	} from "vue";
-	import cacheManager from "@/utils/cacheManager";
-	import {
-		onLoad
-	} from "@dcloudio/uni-app"
-
-	const {
-		count,
-		total,
-		current,
-		list,
-		rightAnswer,
-		wrongAnswer,
-		jifen,
-		zhangId,
-		jieId,
-		nianji,
-		studyFlag,
-		xueke,
-		showTishi,
-		haveFlag,
-		activeZhang,
-		handleSubmit,
-		initPage,
-		handleCloseTishi
-	} = useExam();
-	const cardId = Number(cacheManager.get('auth').cardId);
-
-	const uniPointsRef = ref(null);
-	const chengjiRef = ref(null);
-	const popupRef = ref(null);
-	const result = ref('');
-	const curTiankong = ref(null);
-	function getPopupRef() {
-		return popupRef.value;
-	}
-	onLoad(() => {
-		uni.$on('tiankong-fillItem', (val) => {
-			const {
-				index,
-				question
-			} = val;
-			curTiankong.value = val;
-			result.value = question.reply[index];
-			const dom = getPopupRef();
-			dom && dom.showPopup();
-		})
-
-	})
-
-	function onBlur({
-		result
-	}) {
-		if (curTiankong.value) {
-			uni.$emit('tiankong-setResult', {
-				index: curTiankong.value.index,
-				stId: curTiankong.value.question.stId,
-				result
-			});
-		}
-		const dom = getPopupRef();
-		dom && dom.handleClear();
-	}
-
-	// 查看答案
-	function checkAnswer() {
-		chengjiRef.value.showPopup();
-	}
-	// 继续学习
-	async function goStudyContinue() {
-		// 设置 从单元测试 到 岛 的路由参数
-		activeZhang.value.nextZhang ? activeZhang.value.nextZhang.zhangId : null;
-		cacheManager.updateObject('auth', {
-			zhangId: activeZhang.value.nextZhang.zhangId,
-		})
-		uni.redirectTo({
-			url: `/pages/study/index`
-		})
-	}
-
-	function handleBack() {
-		// 数学
-		uni.redirectTo({
-			url: `/pages/study/index`
-		})
-		uni.$emit('back-outpage')
-	}
-
-	function onSwiperChange(index) {
-		current.value = index;
-		uni.$emit('swiper-change', index)
-	}
-
-	function courseBjFun() {
-		switch (cardId) {
-			case 1:
-				return 'static/images/course/couse-shuxue-bj.png'
-				break;
-			case 2:
-				return 'static/images/course/course-yingyu-bj.png'
-				break;
-			default:
-				break;
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.swiper-box {
-		height: 200px;
-	}
-
-	.swiper-item {
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		height: 200px;
-	}
-</style>

+ 0 - 266
pages/unitTest/useUnit.js

@@ -1,266 +0,0 @@
-import {
-	onLoad,
-	onReady,
-} from "@dcloudio/uni-app"
-import {
-	reactive,
-	ref,
-	computed,
-	toRefs,
-	onMounted,
-	watch,
-	nextTick
-} from "vue";
-import {
-	catchError,
-	toast
-} from "@/utils/common.js"
-import * as httpUnit from "@/api/unitTest.js"
-import cacheManager, {
-	useUnitTestTishi
-} from "@/utils/cacheManager.js"
-
-
-function useJifen() {
-	const data = reactive({
-		rightAnswer: 0, // 答对
-		wrongAnswer: 0, // 答错
-		jifen: 0, // 积分
-	})
-
-	function updateJifen({
-		rightAnswer,
-		wrongAnswer,
-		jifen
-	}) {
-		data.rightAnswer = rightAnswer;
-		data.wrongAnswer = wrongAnswer;
-		data.jifen = jifen;
-	}
-
-	return {
-		...toRefs(data),
-		updateJifen
-	}
-}
-
-export function useExam() {
-	// 缓存
-
-	const {
-		showTishi,
-		handleCloseTishi,
-		handleShowTishi
-	} = useTishiLeftRight()
-	const {
-		rightAnswer,
-		wrongAnswer,
-		jifen,
-		updateJifen
-	} = useJifen();
-
-
-	const data = reactive({
-		count: 0, // 已答题数
-		total: 0, // 总题数
-		current: 0, // 当前试题序列
-		list: [], // 试题列表
-		jieId: null, // 节Id
-		zhangId: null,
-		nianji: null,
-		xueke: null,
-		haveFlag: false, // 是否有下一章
-		activeZhang: null,
-		studyFlag: 0, // 是否是第一次答题
-	})
-	onLoad((options) => {
-		const jieId = options.jieId
-		const cacheZhangInfo = cacheManager.get('zhangInfo');
-		const {
-			cardId,
-			zhangId,
-			nianji
-		} = cacheManager.get('auth');
-
-		data.jieId = jieId; // 需要路由参数 节Id
-		data.zhangId = zhangId; // 需要路由参数 章Id
-		data.nianji = nianji; // 需要年纪Id 来执行返回页面
-		data.xueke = cardId; // 需要年纪Id 来执行返回页面
-		data.activeZhang = getZhangInfoByJieId(cacheZhangInfo.zhangList,jieId);
-		data.haveFlag = data.activeZhang.curZhang ? data.activeZhang.curZhang.haveFlag: 0;
-		data.studyFlag = data.activeZhang.curZhang ? data.activeZhang.curZhang.jieList[data.activeZhang.curZhang.jieList.length-1].studyFlag: 0;
-		// 初始化页面数据
-		initPage();
-	})
-
-	watch(() => data.list, (val) => {
-		const list = data.list.filter(item => {
-			if (item.type == 3) {
-				// 填空题 所有试题答完
-				return !item.reply.some(citem => citem.trim() == '');
-			} else {
-				return item.reply !== null
-			}
-		});
-		data.count = list.length;
-	}, {
-		deep: true
-	})
-
-
-	// 初始化页面数据
-	async function initPage() {
-		const [err, cdata] = await catchError(httpUnit.getExamData({
-			jieId: data.jieId
-		}));
-		if (err) {
-			toast("单元测试数据获取异常");
-			return;
-		}
-		refreshExam(cdata);
-	}
-
-	function formatListToUse(list) {
-		list.forEach((item, index) => {
-			item.mta_show = false;
-			item.reply = null;
-			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 refreshExam(list) {
-		const cList = list;
-		formatListToUse(cList)
-		data.list = cList;
-		data.total = cList.length;
-
-		handleShowTishi();
-	}
-
-	// 交卷
-	async function handleSubmit(dom) {
-		uni.$emit('unitTest-submit')
-		const result = [];
-		data.list.forEach(item => {
-			if (item.type == 1) {
-				result.push({
-					reply: item.reply,
-					stId: item.stId
-				})
-			} else if (item.type == 2) {
-				result.push({
-					reply: item.reply ,
-					stId: item.stId
-				})
-			} else if (item.type ==3){
-				result.push({
-					reply: item.reply ? JSON.stringify(item.reply) : '',
-					stId: item.stId
-				})
-			} else if (item.type == 4) {
-				result.push({
-					reply: item.reply,
-					stId: item.stId
-				})
-			}
-		
-		})
-		uni.showLoading({
-			title: '交卷中...'
-		});
-		const [error, cdata] = await catchError(httpUnit.getExamSubmit({
-			jieId: data.jieId,
-			shitiList: result
-		}));
-		uni.hideLoading()
-		if (error) {
-			toast("单元测试数据提交异常");
-			return;
-		}
-		
-		const cacheCurrentZhangIndex = cacheManager.get('auth').currentZhang;
-		cacheManager.updateJieStatus('zhangInfo', cacheCurrentZhangIndex, data.jieId);
-		
-		dom.showPopup({
-			right: cdata.dui,
-			wrong: cdata.cuo,
-			jifen: cdata.jifen
-		});
-	}
-
-
-
-	return {
-		...toRefs(data),
-		rightAnswer,
-		wrongAnswer,
-		jifen,
-		showTishi,
-
-		handleSubmit,
-		initPage,
-		handleCloseTishi,
-		handleShowTishi
-	}
-}
-
-// 提示信息显示隐藏
-function useTishiLeftRight() {
-	let timer = null;
-	const {
-		updateTishi,
-		getTishi
-	} = useUnitTestTishi();
-	const showTishi = ref(false);
-	// 大鹅关闭追加缓存 --- 单独针对当前手机的缓存提示
-	function handleCloseTishi() {
-		updateTishi();
-		showTishi.value = false;
-		clearTimeout(timer);
-		timer = null;
-	}
-	// 大鹅显示追加缓存 --- 单独针对当前手机的缓存提示
-	function handleShowTishi() {
-		const isNotShow = Boolean(getTishi());
-		showTishi.value = !isNotShow;
-		timer = setTimeout(() => {
-			handleCloseTishi();
-		},3000)
-	}
-
-	return {
-		showTishi,
-		handleCloseTishi,
-		handleShowTishi
-	}
-}
-
-function getZhangInfoByJieId(list, jieId) {
-	const curZhang = list.find(item => item.jieList.some(cite => cite.jieId == jieId)) || null;
-	let nextZhang = null;
-	if (curZhang) {
-		const nextIndex = list.findIndex(item => curZhang.zhangId == item.zhangId);
-		if (nextIndex+1<list.length) {
-			nextZhang = list[nextIndex+1];
-		}
-	}
-	return {
-		curZhang,
-		nextZhang
-	};
-
-}

+ 0 - 329
pages/wrong/index.vue

@@ -1,329 +0,0 @@
-<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>
-		<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="cuoti-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="cuoti-scroll-view">
-						<!--数学-->
-						<uni-list>
-							<uni-list-item v-for="item in data.shuxue.list" class="list-item-box">
-								<template v-slot:body>
-									<!-- 时间 -->
-									<view class="item-date-row">
-										<icon class="data-icon"></icon>
-										<text>{{ item.cdate }}</text>
-									</view>
-									<!-- 数量 -->
-									<view class="item-cuoti-row">
-										<icon class="cuoti-icon"></icon>
-										<view class="cuoti-content">错题数:<text
-												class="cuoti-text">{{ item.count }}</text>题</view>
-									</view>
-									<view @click="getCuotiData(item)" class="cuoti-btn">查看错题</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="cuoti-scroll-view">
-						<!--英语-->
-						<uni-list>
-							<uni-list-item v-for="item in data.yingyu.list" class="list-item-box">
-								<template v-slot:body>
-									<!-- 时间 -->
-									<view class="item-date-row">
-										<icon class="data-icon"></icon>
-										<text>{{ item.cdate }}</text>
-									</view>
-									<!-- 数量 -->
-									<view class="item-cuoti-row">
-										<icon class="cuoti-icon"></icon>
-										<view class="cuoti-content">错题数:<text
-												class="cuoti-text">{{ item.count }}</text>题</view>
-									</view>
-									<view @click="getCuotiData(item)" class="cuoti-btn">查看错题</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>
-
-		<cuoti ref="wrongRef" :cardId="cardId" :list="data.wrongList" @back="handleBackFromCuoti"></cuoti>
-		<CustomTabBar :cardId="cardId+''" :nianji="nianji" :zhangId="zhangId"></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 cardId = 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: [],
-	})
-	cardId.value = data.current+1;
-	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;
-			cardId.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条
-			cardId: 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 = 'no-more';
-					data.shuxue.loading = false;
-				} else {
-					// 数学
-					data.shuxue.state = 'more';
-					data.shuxue.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total >= data.yingyu.list.length) {
-					// 英语
-					data.yingyu.state = 'no-more';
-					data.yingyu.loading = false;
-				} else {
-					// 英语
-					data.yingyu.state = '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条
-			cardId: 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 = 'no-more';
-					data.shuxue.state_text = '没有更多啦';
-					data.shuxue.loading = false;
-				} else {
-					// 数学
-					data.shuxue.state = 'more';
-					data.shuxue.state_text = '加载更多';
-					data.shuxue.loading = false;
-				}
-			} else if (code == 1) {
-				if (res.data.total >= data.yingyu.list.length) {
-					// 英语
-					data.yingyu.state = 'no-more';
-					data.yingyu.state_text = '没有更多啦';
-					data.yingyu.loading = false;
-				} else {
-					// 英语
-					data.yingyu.state = '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({
-			cardId: 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>

BIN
static/images/catalog/catalog-close-btn.png


BIN
static/images/catalog/catalog-lock.png


BIN
static/images/catalog/catalog-shuxue-bj.png


BIN
static/images/catalog/catalog-yingyu-bj.png


BIN
static/images/catalog/jt-active-btn.png


BIN
static/images/catalog/jt-btn.png


BIN
static/images/catalog/num-active-bj.png


BIN
static/images/catalog/num-bj.png


BIN
static/images/common/close-icon.png


BIN
static/images/common/ezy-jf-icon.png


BIN
static/images/common/ezy-page-bj.png


BIN
static/images/common/jf-bj.png


BIN
static/images/common/navBar-return-btn.png


BIN
static/images/common/tip-big-bj.png


BIN
static/images/common/tip-cancel-btn.png


BIN
static/images/common/tip-confirm-btn.png


BIN
static/images/common/tip-middle-bj.png


BIN
static/images/common/tip-small-bj.png


BIN
static/images/course/course-yingyu-bj.png


BIN
static/images/course/couse-shuxue-bj.png


BIN
static/images/course/fh-btn.png


BIN
static/images/course/jx-btn.png


BIN
static/images/course/shuxue-icon.png


BIN
static/images/course/video-finish-bj.png


BIN
static/images/course/video-play-btn.png


BIN
static/images/course/video-play.png


BIN
static/images/course/video-score-bj.png


BIN
static/images/course/video-title-bj.png


BIN
static/images/course/yingyu-icon.png


BIN
static/images/exam/answer-btn.png


BIN
static/images/exam/answer-title.png


BIN
static/images/exam/ckst-btn.png


BIN
static/images/exam/cuoti-icon.png


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.