LearnNote.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <div class="LearnNote container-height">
  3. <Breadcrumb />
  4. <div class="flex-between">
  5. <div class="detail_right">
  6. <div class="padding16 bg_color_fff border_radius_10 box_shadow_card">
  7. <div class="gap10">
  8. <div class="line_vertical"></div>
  9. <div class="font_size20 bold">{{$t('common.learnNoteList')}} </div>
  10. </div>
  11. <div class="flex-between mt10 course_List cursor-pointer"
  12. @click="selectedItem = item"
  13. :class="{'active': item.courseId === selectedItem.courseId}"
  14. v-for="item in list" :key="item.courseId">
  15. <div class="coverImageUrl border_radius_8 bg_color_f5">
  16. <img :src="item.coverImageUrl" alt="" v-if="item.coverImageUrl" class="coverImageUrl border_radius_8">
  17. </div>
  18. <div class="flex_1 ml20">
  19. <div class="font_size18 bold">{{ item.courseTitle }}</div>
  20. <div class="font_size14 line2 gray mt10">{{ item.courseIntro }}</div>
  21. <div class="flex-center-flex-end mt10" v-if="item.courseId!=-1">
  22. <div class="gap5 gradient border_radius_4 cursor-pointer xuexi" @click.stop.prevent="goDetail(item)">
  23. <img :src="playIcon" alt="" style="width:13px;height:15px">
  24. <div>{{$t('common.lijixuexi')}}</div>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. <div v-if="list.length === 0" >
  30. <el-empty :image-size="200" />
  31. </div>
  32. </div>
  33. </div>
  34. <div class="flex_1 ml20 fit_content bg_color_fff border_radius_10 padding16 box_shadow_card">
  35. <Xuxibiji :info="selectedItem" />
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. <script setup>
  41. import playIcon from '@/assets/imgs/bofang.png'
  42. import Xuxibiji from '@/pages/LearningSystem/components/xuxibiji.vue'
  43. import { getCourseWithNotesList } from '@/api/course.js'
  44. import { isLogin,openFullScreenLoading } from '@/utils/util.js'
  45. import { useI18n } from 'vue-i18n'
  46. const { t } = useI18n()
  47. import { ref, onMounted, inject } from 'vue'
  48. import { useRoute, useRouter } from 'vue-router'
  49. import { useAppStore } from '@/pinia/appStore'
  50. const appStore = useAppStore()
  51. const route = useRoute()
  52. const router = useRouter()
  53. const list = ref({})
  54. const selectedItem = ref({})
  55. const openLoginDialog = inject('openLoginDialog')
  56. onMounted(() => {
  57. //判断是否登录
  58. // if(!isLogin({callback: openLoginDialog,t})){
  59. // return;
  60. // }
  61. getList();
  62. });
  63. const getList = async () => {
  64. let token = localStorage.getItem('token');
  65. if(!token)return;
  66. // 打开loading
  67. const loading = openFullScreenLoading();
  68. getCourseWithNotesList().then(res => {
  69. // 关闭loading
  70. loading.close();
  71. if(res.code === 200){
  72. console.log(res)
  73. // list.value = res.rows || [];
  74. list.value = [
  75. {
  76. courseId:'-1',
  77. courseTitle:'个人笔记',
  78. coverImageUrl:appStore.userInfo?.userAvatar || '',
  79. courseIntro:''
  80. },
  81. ...res.rows
  82. ]
  83. if(list.value.length > 0){
  84. selectedItem.value = list.value[0]
  85. }
  86. }
  87. })
  88. };
  89. const goDetail = (item) => {
  90. //判断是否登录
  91. if(!isLogin({callback: openLoginDialog,t})){
  92. return;
  93. }
  94. //增加参数名称
  95. router.push({
  96. path: `/learning-system/detail/${item.courseId}`,
  97. query: {
  98. courseId: item.courseId,
  99. metaTitle: item.courseTitle || '课程详情'
  100. }
  101. })
  102. };
  103. </script>
  104. <style lang="scss">
  105. .LearnNote{
  106. .detail_right{
  107. max-height: calc(100% - 100px);
  108. }
  109. .course_List{
  110. padding: 16px;
  111. border-radius: 16px;
  112. &.active{
  113. background-color: rgba(45, 113, 255, 0.10) ;
  114. }
  115. .coverImageUrl{
  116. width: 160px;
  117. height: 90px;
  118. }
  119. }
  120. .xuexi{
  121. color: #ffffff;
  122. padding: 5px 10px;
  123. border-radius: 10px;
  124. font-size: 14px;
  125. }
  126. }
  127. </style>