{"version":3,"file":"course.cea0eae6.mjs","sources":["../../../../node_modules/@element-plus/icons-vue/dist/es/circle-check-filled.mjs","../../../../pages/account/course.vue"],"sourcesContent":["import { defineComponent, openBlock, createElementBlock, createElementVNode } from 'vue';\nimport _export_sfc from './_virtual/plugin-vue_export-helper.mjs';\n\nconst _sfc_main = defineComponent({\n  name: \"CircleCheckFilled\"\n});\nconst _hoisted_1 = {\n  viewBox: \"0 0 1024 1024\",\n  xmlns: \"http://www.w3.org/2000/svg\"\n};\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n  fill: \"currentColor\",\n  d: \"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896zm-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336L456.192 600.384z\"\n}, null, -1);\nconst _hoisted_3 = [\n  _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"svg\", _hoisted_1, _hoisted_3);\n}\nvar circleCheckFilled = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\n\nexport { circleCheckFilled as default };\n"," <template>\n     <NuxtLayout name=\"account\">\n        <div class=\"page-account-course\">\n          <el-tabs v-model=\"courseType\" class=\"demo-tabs\" @tab-click=\"handleClick\">\n            <el-tab-pane\n              v-for=\"(item, index) in data.tabsList\"\n              :key=\"index\"\n              :label=\"item.desc\"\n              :name=\"item.code\"\n            ></el-tab-pane>\n          </el-tabs>\n          <div class=\"list\" v-if=\"data.list.length\">\n            <div class=\"item\" v-for=\"(item, index) in data.list\" :key=\"index\">\n              <div class=\"pic\" @click=\"handleOpenCourse(item)\">\n                <img :src=\"item.courseCover\" alt=\"\" />\n                <div class=\"label\">{{ data.CourseTypeEnum[item.courseType] }}</div>\n              </div>\n              <div class=\"rt\">\n                <div class=\"name\" @click=\"handleOpenCourse(item)\">{{ item.courseName }}</div>\n                <div class=\"have\" v-if=\"item.courseType !== 1 || item.coursePracticeNum > 0 || item.courseExamNum > 0 || item.courseCertNum > 0\">包含内容：\n                  <span class=\"have_item\" v-if=\"item.courseType === 5\">课时数：{{item.courseResourceNum}}个</span>\n                  <span class=\"have_item\" v-if=\"item.courseType === 6 \">专题课数：{{item.courseResourceNum}}个</span>\n                  <span class=\"have_item\" v-if=\"item.coursePracticeNum > 0\">随堂练习：{{item.coursePracticeNum}}场</span>\n                  <span class=\"have_item\" v-if=\"item.courseExamNum > 0\">随堂考试：{{item.courseExamNum}}场</span>\n                  <span class=\"have_item\" v-if=\"item.courseCertNum > 0\">课程证书：{{item.courseCertNum}}张</span>\n                </div>\n                <div class=\"time\">\n                  有效期：\n                  <span class=\"red\" v-if=\"item.userCourseType === 4\">已过期</span>\n                  <span v-else>{{ item.longEffective ? \"永久有效\" : item.beginTime + \" 至 \" + item.endTime }}</span>\n                </div>\n                <div class=\"bottom\">\n                  <div\n                      v-if=\"item.courseType !== 1 && item.courseType !== 6\"\n                    class=\"propress cgray\"\n                    :class=\"{ cred: item.studyProgress < 100 }\"\n                  >\n                    <el-progress\n                      :stroke-width=\"10\"\n                      :percentage=\"item.studyProgress > 100 ? 100 :item.studyProgress\"\n                    >\n                    <span v-if=\"item.studyProgress < 100\">已学{{ item.studyProgress.toFixed(2) }}%</span>\n                      <el-icon class=\"success_progress\" v-else><circle-check-filled /></el-icon>\n                    </el-progress>\n                  </div>\n                  <div v-else></div>\n                  <el-button\n                    class=\"btn\"\n                    type=\"primary\"\n                    v-if=\"item.userCourseType !== 3 && item.userCourseType !== 4\"\n                    @click.stop=\"toCourse(item)\"\n                    >继续学习</el-button>\n                  <el-button\n                      class=\"btn\"\n                      type=\"primary\"\n                      v-else\n                      @click.stop=\"handleOpenCourse(item)\"\n                  >查看课程</el-button>\n                </div>\n              </div>\n            </div>\n          </div>\n          <client-only v-if=\"data.pages > 1\">\n            <el-pagination\n              class=\"pagination\"\n              v-model:currentPage=\"data.current\"\n              layout=\"prev, pager, next, jumper\"\n              :total=\"data.totalCount\"\n              background\n              @current-change=\"handleCurrentChange\"\n            >\n            </el-pagination>\n          </client-only>\n        </div>\n     </NuxtLayout>\n</template>\n\n<script setup>\nimport { userCoursePage, courseCheckWatchPermission } from \"~/api/user\";\nimport {useUserStore} from \"../../stores/user\";\nimport {CircleCheckFilled} from \"@element-plus/icons-vue\";\nuseHead({\n  title:'我的课程'\n});\n\nconst router = useRouter();\nconst courseType = ref(\"\");\nconst {getEnumList} = useUserStore()\nconst data = reactive({\n  tabsList: [],\n  CourseTypeEnum:{},\n  list: [],\n  pages: 0,\n  current: 1,\n  totalCount: 0\n});\nconst route = useRoute()\nconst toObj = (arr = []) =>{\n  const obj = {}\n  for (let i = 0; i < arr.length; i++) {\n    obj[arr[i].code] = arr[i].desc\n  }\n  return obj\n}\nonMounted(() => {\n  if(route.query.courseType){\n    courseType.value = Number(route.query.courseType)\n  }\n  getEnumList(\"CourseTypeEnum\", \"arr\").then((res) => {\n    data.CourseTypeEnum = toObj(res)\n  });\n  getEnumList(\"UserCourseTypeEnum\", \"arr\").then((res) => {\n    res.unshift({code:'',desc:'全部课程'})\n    data.tabsList = res;\n  });\n  getData();\n});\n\nconst getSearch = (query) => {\n  courseType.value = query.courseType?Number(query.courseType):''\n  getData();\n}\nconst handleClick = (tab, event) => {\n  let query = route.query || {}\n  courseType.value = tab.paneName !== '0' ? tab.paneName : ''\n  let obj = Object.assign({...query},{courseType:tab.paneName !== '0' ? tab.paneName :''},() => {})\n  if(tab.paneName === '0'){\n    delete obj.courseType\n  }\n  router.replace({\n    query:obj ,\n  })\n  getData()\n};\n\nconst handleOpenCourse = (row) => {\n  let urlType = {\n    1:'live',\n    2:'video',\n    3:'audio',\n    4:'graphic',\n    5:'subject',\n    6:'topic'\n  }\n  router.push({\n    path:`/course/${urlType[row.courseType]}`,\n    query:{\n      id:row.courseId\n    }\n  })\n}\nconst toCourse = async row => {\n  let res\n  if (row.courseType !== 6) {\n    res = await courseCheckWatchPermission({courseId: row.courseId})\n  }\n  if (res || row.courseType === 6) {\n    let urlType = {\n      1:'single',\n      2:'single',\n      3:'single',\n      4:'single',\n      5:'combine',\n      6:'topic'\n    }\n    console.log(res);\n    router.push({\n      path:`/course/${urlType[row.courseType]}`,\n      query:{\n        id:row.courseId\n      }\n    })\n  }\n};\n\nconst handleCurrentChange = (val) => {\n  getData(val);\n  document.querySelector('#app').scrollTop = 150\n};\n\nconst getData = (page = 1) => {\n  userCoursePage({\n    userCourseType: parseInt(courseType.value) || '',\n    pageCurrent: page,\n    pageSize: 10,\n  }).then((res) => {\n    console.log('res', res)\n    if (res) {\n      data.list = res.list;\n      data.pages = res.totalPage;\n      data.current = res.pageCurrent;\n      data.totalCount = res.totalCount\n    }\n  });\n};\n</script>\n\n<style lang=\"scss\">\n.page-account-course {\n  .el-tabs__header {\n    margin: 0;\n  }\n  .el-tabs__nav-wrap {\n    padding: 0 30px;\n  }\n  .el-tabs__nav {\n    padding: 10px 0;\n  }\n}\n</style>\n<style lang=\"scss\" scoped>\n.list {\n  padding: 0 30px;\n  .item {\n    padding: 30px 0;\n    border-bottom: 1px solid #EBEEF5;\n    display: flex;\n    flex-wrap: wrap;\n    .pic {\n      width: 180px;\n      height: 100px;\n      border-radius: 5px;\n      overflow: hidden;\n      position: relative;\n      color: #333;\n      cursor: pointer;\n      img {\n        width: 100%;\n        height: 100%;\n        object-fit: cover;\n      }\n      .label {\n        position: absolute;\n        left: 5px;\n        bottom: 5px;\n        background: rgba(0, 0, 0, 0.5);\n        border-radius: 5px;\n        color: #fff;\n        padding: 2px 5px;\n        font-style: normal;\n        font-weight: 400;\n        font-size: 10px;\n      }\n    }\n    .rt {\n      display: flex;\n      flex-direction: column;\n      flex: 1;\n      margin-left: 20px;\n      position: relative;\n      .name {\n        width: 460px;\n        font-size: 16px;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n        cursor: pointer;\n        &:hover {\n          color: #3D7FFF;\n        }\n      }\n      .time,.have {\n        color: #999;\n        margin-top: 5px;\n      }\n      .red{\n        color: #F23C3C;\n      }\n      .have_item{\n        padding-right: 12px;\n      }\n      .have_item+.have_item{\n        padding-left: 10px;\n        position: relative;\n      }\n      .have_item+.have_item:before{\n        width: 0;\n        height: 10px;\n        padding-left: 1px;\n        background-color: #BECADB;\n        content: '';\n        position: absolute;\n        left: 0;\n        top: 25%;\n      }\n      .bottom {\n        position: absolute;\n        left: 0;\n        bottom: 0;\n        width: 100%;\n        display: flex;\n        justify-content: space-between;\n        align-items: flex-end;\n        .btn {\n          width: 100px;\n          height: 40px;\n          border-radius: 5px;\n        }\n      }\n      .cgray {\n        color: #999;\n\n        width: 161px;\n\n      }\n      .cred {\n        color: #999999;\n      }\n    }\n  }\n}\n.cgray :deep(.el-progress__text span){\n  font-size: 12px;\n  margin-left: 10px;\n  color: #999999;\n}\n.cgray :deep(.el-progress){\n  align-items: center;\n}\n.bottom .btn:hover {\n  background: #2256F6;\n  color: #FFFFFF;\n}\n.success_progress{\n  color: #6FCF97;\n}\n</style>\n"],"names":["_sfc_main","defineComponent","name","_hoisted_1","viewBox","xmlns","_hoisted_3","fill","d","circleCheckFilled","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","useHead","title","router","useRouter","courseType","ref","getEnumList","useUserStore","data","reactive","tabsList","CourseTypeEnum","list","pages","current","totalCount","route","useRoute","onMounted","query","value","Number","then","res","arr","obj","i","length","code","desc","toObj","unshift","handleClick","tab","event","paneName","Object","assign","replace","getData","handleOpenCourse","row","push","path","id","courseId","handleCurrentChange","val","document","querySelector","scrollTop","page","userCoursePage","userCourseType","parseInt","pageCurrent","pageSize","totalPage","async","courseCheckWatchPermission","urlType"],"mappings":"6OAGA,MAAMA,EAAYC,EAAgB,CAChCC,KAAM,sBAEFC,EAAa,CACjBC,QAAS,gBACTC,MAAO,8BAMHC,EAAa,GAJmC,OAAQ,CAC5DC,KAAM,eACNC,EAAG,uNACF,MAAQ,IAOX,IAAIC,IAAgDT,EAAW,CAAC,CAAC,SAHjE,SAAqBU,EAAMC,EAAQC,EAAQC,EAAQC,EAAOC,GACxD,OAAOC,IAAaC,EAAmB,MAAOd,EAAYG,EAC5D,ydC8DAY,EAAA,CACAC,MAAA,SAGA,MAAAC,EAAAC,IACAC,EAAAC,EAAA,KACAC,YAAAA,GAAAC,IACAC,EAAAC,EAAA,CACAC,SAAA,GACAC,eAAA,CAAA,EACAC,KAAA,GACAC,MAAA,EACAC,QAAA,EACAC,WAAA,IAEAC,EAAAC,IAQAC,GAAA,KACAF,EAAAG,MAAAf,aACAA,EAAAgB,MAAAC,OAAAL,EAAAG,MAAAf,aAEAE,EAAA,iBAAA,OAAAgB,MAAAC,IACAf,EAAAG,eAZA,EAAAa,EAAA,MACA,MAAAC,EAAA,CAAA,EACA,IAAA,IAAAC,EAAA,EAAAA,EAAAF,EAAAG,OAAAD,IACAD,EAAAD,EAAAE,GAAAE,MAAAJ,EAAAE,GAAAG,KAEA,OAAAJ,CAAA,EAOAK,CAAAP,EAAA,IAEAjB,EAAA,qBAAA,OAAAgB,MAAAC,IACAA,EAAAQ,QAAA,CAAAH,KAAA,GAAAC,KAAA,SACArB,EAAAE,SAAAa,CAAA,YASA,MAAAS,EAAA,CAAAC,EAAAC,KACA,IAAAf,EAAAH,EAAAG,OAAA,CAAA,EACAf,EAAAgB,MAAA,MAAAa,EAAAE,SAAAF,EAAAE,SAAA,GACA,IAAAV,EAAAW,OAAAC,OAAA,IAAAlB,GAAA,CAAAf,WAAA,MAAA6B,EAAAE,SAAAF,EAAAE,SAAA,KAAA,SACA,MAAAF,EAAAE,iBACAV,EAAArB,WAEAF,EAAAoC,QAAA,CACAnB,MAAAM,IAEAc,IAAA,EAGAC,GAAAC,IASAvC,EAAAwC,KAAA,CACAC,KAAA,WATA,CACA,EAAA,OACA,EAAA,QACA,EAAA,QACA,EAAA,UACA,EAAA,UACA,EAAA,SAGAF,EAAArC,cACAe,MAAA,CACAyB,GAAAH,EAAAI,WAEA,EA0BAC,GAAAC,IACAR,GAAAQ,GACAC,SAAAC,cAAA,QAAAC,UAAA,GAAA,EAGAX,GAAA,CAAAY,EAAA,KACAC,EAAA,CACAC,eAAAC,SAAAlD,EAAAgB,QAAA,GACAmC,YAAAJ,EACAK,SAAA,KACAlC,MAAAC,IAEAA,IACAf,EAAAI,KAAAW,EAAAX,KACAJ,EAAAK,MAAAU,EAAAkC,UACAjD,EAAAM,QAAAS,EAAAgC,YACA/C,EAAAO,WAAAQ,EAAAR,WACA,GACA,24DA1CA2C,OAAAjB,IACA,IAAAlB,EAIA,GAHA,IAAAkB,EAAArC,aACAmB,QAAAoC,EAAA,CAAAd,SAAAJ,EAAAI,YAEAtB,GAAA,IAAAkB,EAAArC,WAAA,CACA,IAAAwD,EAAA,CACA,EAAA,SACA,EAAA,SACA,EAAA,SACA,EAAA,SACA,EAAA,UACA,EAAA,SAGA1D,EAAAwC,KAAA,CACAC,KAAA,WAAAiB,EAAAnB,EAAArC,cACAe,MAAA,CACAyB,GAAAH,EAAAI,WAGA"}