index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433
  1. <template>
  2. <view class="ezy-study-page">
  3. <view class="study-school-year" @click="clickGradeTerm">{{gradeTerm}}</view>
  4. <view class="ezy-study-wrap" @touchstart="onTouchStart" @touchend="onTouchEnd">
  5. <view class="chapter-box" @click="handleCheckCatalogue">{{infoData.numberStr}}</view>
  6. <view class="chapter-title-box">{{infoData.zhangName}}</view>
  7. <view>
  8. <view class="brand-item" v-for="(item, index) in infoData.jieList" :key="item.jieId"
  9. @click="listClick(item, index)" :class="{ 'brand-active': index === 0 }">
  10. <view class="brand-icon">
  11. <template v-if="item.vipFlag">{{ index + 1 }}</template>
  12. <template v-else-if="index === 0">1</template>
  13. </view>
  14. <view class="brand-lock" v-if="item.vipFlag==0 && index !== 0"></view>
  15. <view class="brand-growth">
  16. <template v-if="item.vipFlag ==1">
  17. <template v-if="item.growth === 0">蛋</template>
  18. <template v-else-if="item.growth === 10">小鹅</template>
  19. <template v-else-if="item.growth === 20">中鹅</template>
  20. <template v-else-if="item.growth === 50">大鹅</template>
  21. </template>
  22. </view>
  23. <view class="brand-content">{{ item.jieName }}</view>
  24. </view>
  25. </view>
  26. </view>
  27. <!-- <uni-button style="margin-top: 200px;display: block;" @click="goKaoshi">goKaoshi</uni-button>
  28. -->
  29. <!-- <uni-button @click="handleCheckCatalogue">go catalogue</uni-button>
  30. <uni-button @click="goKaoshi">goKaoshi</uni-button>
  31. <!-- 蛋 -->
  32. <egg-dialog ref="eggDialogRef" @eggBtn="eggBtn"></egg-dialog>
  33. <catalogue ref="catalogueRef" :nianji="routeParams.nianji" :xueke="routeParams.xueke"
  34. @change-zhang="handleChangeZhang"></catalogue>
  35. <CustomTabBar></CustomTabBar>
  36. </view>
  37. </template>
  38. <script setup>
  39. import {
  40. userZhangFirstInfo,
  41. getCommonZhangFirstInfo,
  42. userZhangInfo,
  43. userLocate,
  44. getCommonZhangInfo
  45. } from "@/api/learnPlan.js"
  46. import {
  47. reactive,
  48. ref,
  49. getCurrentInstance,
  50. onMounted
  51. } from "vue";
  52. import {
  53. onLoad,
  54. } from '@dcloudio/uni-app';
  55. import catalogue from "@/components/catalogue/catalogue.vue";
  56. import CustomTabBar from '@/components/custom-tabbar/custom-tabbar.vue';
  57. import {
  58. getAuth
  59. } from '@/utils/auth.js';
  60. import {
  61. useTabBarHistory
  62. } from '@/utils/emitEvents.js';
  63. import eggDialog from './eggDialog.vue'
  64. import {
  65. toast
  66. } from "../../utils/common";
  67. import cacheManager from "../../utils/cacheManager.js";
  68. const eggDialogRef = ref(null);
  69. const catalogueRef = ref(null);
  70. let gradeTerm = ref('');
  71. let startX = ref(0);
  72. let isSliding = ref(false);
  73. let endX = ref(0);
  74. const selectZhang = ref(null);
  75. let infoData = reactive({
  76. jieList: [],
  77. haveFlag: '',
  78. nianji: '',
  79. number: '',
  80. xueke: '',
  81. zhangId: '',
  82. zhangName: '',
  83. numberStr: '',
  84. });
  85. // 来自单元测试的路由参数缓存
  86. const gradeMapping = {
  87. 1: '一年级',
  88. 2: '二年级',
  89. 3: '三年级',
  90. 4: '四年级',
  91. 5: '五年级',
  92. 6: '六年级'
  93. };
  94. const termMapping = {
  95. 1: '上',
  96. 2: '下'
  97. };
  98. const routeParams = ref(null);
  99. onLoad((options) => {
  100. // appContext.config.globalProperties.$state
  101. // const state = appContext.config.globalProperties.$state;
  102. console.log(options)
  103. console.log(cacheManager);
  104. // 获取路由参数
  105. routeParams.value = options;
  106. if (getAuth()) {
  107. // 已登录
  108. // 选择年级进入调用此接口
  109. if (options.flag == 'selectGrades') {
  110. getZhangFirst()
  111. } else {
  112. getZhangInfo()
  113. }
  114. // 设置全局变量
  115. // 蛋
  116. // eggDialogRef.value.eggShow();
  117. } else {
  118. if (options.flag == 'selectGrades') {
  119. getCommonZhangFirst()
  120. } else {
  121. getCommonZhang();
  122. }
  123. // 未登录
  124. }
  125. })
  126. function getCommonZhang(data) {
  127. let req = data ? {
  128. nianji: selectZhang.value.nianji,
  129. xueke: selectZhang.value.xueke,
  130. zhangId: selectZhang.value.zhangId,
  131. } : {
  132. nianji: routeParams.value.nianji,
  133. xueke: routeParams.value.xueke,
  134. zhangId: routeParams.value.zhangId,
  135. };
  136. getCommonZhangInfo(req).then(res => {
  137. infoData.jieList = res.data.jieList
  138. infoData.haveFlag = res.data.haveFlag
  139. infoData.nianji = res.data.nianji
  140. infoData.number = res.data.number
  141. infoData.numberStr = res.data.numberStr
  142. infoData.xueke = res.data.xueke
  143. infoData.zhangId = res.data.zhangId
  144. infoData.zhangName = res.data.zhangName
  145. gradeTerm.value = translateData(res.data);
  146. useTabBarHistory().setTabBarStorage({
  147. nianji: res.data.nianji,
  148. zhangId: res.data.zhangId,
  149. xueke: res.data.xueke
  150. })
  151. cacheManager.set("zhangJieCacheInfo", res.data)
  152. })
  153. }
  154. function onTouchStart(event) {
  155. console.log(event.touches.length);
  156. isSliding.value = false
  157. if (event.touches.length === 1) {
  158. isSliding.value = true;
  159. startX.value = event.touches[0].pageX;
  160. } else {
  161. isSliding.value = false;
  162. event.preventDefault()
  163. return
  164. }
  165. }
  166. function onSwipeLeft(event) {
  167. console.log('用户左滑了');
  168. }
  169. function onSwipeRight(event) {
  170. console.log('用户又滑了');
  171. }
  172. function onTouchEnd(event) {
  173. if (isSliding.value) {
  174. const distanceX = event.changedTouches[0].clientX - startX.value
  175. if (distanceX > 0) {
  176. onSwipeLeft();
  177. } else if (distanceX < 0) {
  178. onSwipeRight();
  179. }
  180. isSliding.value = false
  181. }else{
  182. console.log(11111);
  183. }
  184. }
  185. function recordZhangJie() {
  186. let req = {
  187. nianji: routeParams.value.nianji,
  188. userId: JSON.parse(getAuth()).userId,
  189. zhangId: infoData.zhangId,
  190. xueke: routeParams.value.xueke,
  191. }
  192. userLocate(req).then(res => {
  193. })
  194. }
  195. function getCommonZhangFirst() {
  196. let req = {
  197. nianji: routeParams.value.nianji,
  198. xueke: routeParams.value.xueke,
  199. }
  200. getCommonZhangFirstInfo(req).then(res => {
  201. infoData.jieList = res.data.jieList
  202. infoData.haveFlag = res.data.haveFlag
  203. infoData.nianji = res.data.nianji
  204. infoData.number = res.data.number
  205. infoData.numberStr = res.data.numberStr
  206. infoData.xueke = res.data.xueke
  207. infoData.zhangId = res.data.zhangId
  208. infoData.zhangName = res.data.zhangName
  209. gradeTerm.value = translateData(res.data);
  210. useTabBarHistory().setTabBarStorage({
  211. nianji: res.data.nianji,
  212. zhangId: res.data.zhangId,
  213. xueke: res.data.xueke
  214. })
  215. cacheManager.set("zhangJieCacheInfo", res.data)
  216. })
  217. }
  218. function getZhangFirst() {
  219. let req = {
  220. nianji: routeParams.value.nianji,
  221. xueke: routeParams.value.xueke,
  222. }
  223. userZhangFirstInfo(req).then(res => {
  224. infoData.jieList = res.data.jieList
  225. infoData.haveFlag = res.data.haveFlag
  226. infoData.nianji = res.data.nianji
  227. infoData.number = res.data.number
  228. infoData.numberStr = res.data.numberStr
  229. infoData.xueke = res.data.xueke
  230. infoData.zhangId = res.data.zhangId
  231. infoData.zhangName = res.data.zhangName
  232. gradeTerm.value = translateData(res.data);
  233. recordZhangJie()
  234. useTabBarHistory().setTabBarStorage({
  235. nianji: res.data.nianji,
  236. zhangId: res.data.zhangId,
  237. xueke: res.data.xueke
  238. })
  239. })
  240. }
  241. function getZhangInfo(data) {
  242. let req = data ? {
  243. nianji: selectZhang.value.nianji,
  244. xueke: selectZhang.value.xueke,
  245. zhangId: selectZhang.value.zhangId,
  246. } : {
  247. nianji: routeParams.value.nianji,
  248. xueke: routeParams.value.xueke,
  249. zhangId: routeParams.value.zhangId,
  250. };
  251. userZhangInfo(req).then(res => {
  252. infoData.jieList = res.data.jieList
  253. infoData.haveFlag = res.data.haveFlag
  254. infoData.nianji = res.data.nianji
  255. infoData.number = res.data.number
  256. infoData.numberStr = res.data.numberStr
  257. infoData.xueke = res.data.xueke
  258. infoData.zhangId = res.data.zhangId
  259. infoData.zhangName = res.data.zhangName
  260. gradeTerm.value = translateData(res.data);
  261. recordZhangJie()
  262. useTabBarHistory().setTabBarStorage({
  263. nianji: res.data.nianji,
  264. zhangId: res.data.zhangId,
  265. xueke: res.data.xueke
  266. })
  267. })
  268. }
  269. function translateData(data) {
  270. return gradeMapping[data.nianji] + termMapping[data.xueke]
  271. }
  272. function handleChangeZhang(data) {
  273. console.log("章", data);
  274. selectZhang.value = data;
  275. getZhangInfo(true)
  276. }
  277. function goKaoshi(data) {
  278. let zhangId = selectZhang.value ? selectZhang.value.zhangId : infoData.zhangId;
  279. let nianji = routeParams.value.nianji;
  280. let xueke = routeParams.value.xueke;
  281. uni.navigateTo({
  282. url: `/pages/unitTest/index?jieId=${data.jieId}&zhangId=${zhangId}&nianji=${nianji}&xueke=${xueke}`
  283. })
  284. }
  285. function goLookShipin(data) {
  286. data.progressMarkers = [{
  287. offset: 30,
  288. isCustomized: true,
  289. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/9A3F562E595E4764AD1DD546FA52C6E5-6-2.png',
  290. title: '变式1',
  291. time: '00:00:30',
  292. describe: 'test string',
  293. }, {
  294. offset: 120,
  295. isCustomized: true,
  296. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/1E7F402241CD4C0F94AD2BBB5CCC3EC7-6-2.png',
  297. title: '变式2',
  298. time: '00:02:00',
  299. describe: 'test string',
  300. }, {
  301. offset: 300,
  302. isCustomized: true,
  303. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/553AEA01161342C8A2B1756E83B69B5B-6-2.png',
  304. title: '变式3',
  305. time: '00:05:00',
  306. describe: 'test string',
  307. }]
  308. data.zhangId = infoData.zhangId
  309. data.nianji = infoData.nianji
  310. data.xueke = infoData.xueke
  311. const pageData = {
  312. // videoId:data.videoId,
  313. videoId: 'b997f16cb9cb474cb93526cff77d8801',
  314. progressMarkers: [{
  315. offset: 30,
  316. isCustomized: true,
  317. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/9A3F562E595E4764AD1DD546FA52C6E5-6-2.png',
  318. title: 'test title',
  319. describe: 'test string',
  320. }, {
  321. offset: 150,
  322. isCustomized: true,
  323. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/1E7F402241CD4C0F94AD2BBB5CCC3EC7-6-2.png',
  324. title: 'test title',
  325. describe: 'test string',
  326. }, {
  327. offset: 250,
  328. isCustomized: true,
  329. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/553AEA01161342C8A2B1756E83B69B5B-6-2.png',
  330. title: 'test title',
  331. describe: 'test string',
  332. }, {
  333. offset: 550,
  334. isCustomized: true,
  335. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/553AEA01161342C8A2B1756E83B69B5B-6-2.png',
  336. title: 'test title',
  337. describe: 'test string',
  338. }, {
  339. offset: 320,
  340. isCustomized: true,
  341. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/553AEA01161342C8A2B1756E83B69B5B-6-2.png',
  342. title: 'test title',
  343. describe: 'test string',
  344. }, {
  345. offset: 650,
  346. isCustomized: true,
  347. coverUrl: 'https://alivc-demo-vod.aliyuncs.com/image/cover/553AEA01161342C8A2B1756E83B69B5B-6-2.png',
  348. title: 'test title',
  349. describe: 'test string',
  350. }],
  351. }
  352. uni.navigateTo({
  353. //url: '/pages/study/lookShipin?studyData=' + JSON.stringify(pageData)
  354. url: '/pages/study/lookShipin?studyData=' + JSON.stringify(data)
  355. })
  356. }
  357. function listClick(data, index) {
  358. if (!getAuth()) {
  359. toast("当前为游客模式请登录!")
  360. uni.redirectTo({
  361. url: '/pages/login/index'
  362. })
  363. return;
  364. }
  365. // if(index !=0&&data.jieId!=79){
  366. // toast("付费章节!")
  367. // return false
  368. // }
  369. if (!data.vipFlag) {
  370. toast("付费章节!")
  371. return false
  372. }
  373. if (index == infoData.jieList.length - 1) {
  374. // 最后一项
  375. goKaoshi(data)
  376. } else {
  377. goLookShipin(data)
  378. }
  379. }
  380. function handleCheckCatalogue() {
  381. catalogueRef.value.showPopup();
  382. }
  383. function clickGradeTerm() {
  384. uni.navigateTo({
  385. url: `/pages/selectGradesTerms/index?&nianji=${routeParams.value.nianji}&xueke=${routeParams.value.xueke}`,
  386. })
  387. }
  388. function eggBtn() {
  389. console.log('点击:开启提分之旅');
  390. }
  391. </script>
  392. <style>
  393. </style>