CourseDetails.vue 6.22 KB
<template>
  <div>
    <!-- LOADER -->
    <div class="loader" v-if="showLoader">
      <v-progress-circular indeterminate color="white"></v-progress-circular>
    </div>

    <!-- SNACKBAR -->
    <v-snackbar
      :timeout="timeout"
      :top="y === 'top'"
      :right="x === 'right'"
      :vertical="mode === 'vertical'"
      v-model="snackbar"
      :color="snackbarColor"
    >
      {{ text }}
      <v-spacer></v-spacer>
      <v-btn flat text @click="snackbar = false">X</v-btn>
    </v-snackbar>

    <v-container class="pt-0">
      <v-layout row wrap class="mt-1">
        <v-flex xs12 md8>
          <div
            class="title side-bar-color font-weight-bold"
          >Welcome to the {{courseDetails[0].courseId.courseName}} Course for {{courseDetails[0].classId.classNum}} class</div>
          <v-flex xs12 class="subheading mt-2">
            Lorem Ipsum sdjjkhsdf sdklfjs dkfjskdjfk fjsdklf sdjfksljf sdfkls fljlkj kl
            jkhjkfhjksd sdfjkhsdjk fsdjkl sfkljkl ldkfjkl kjlfs dlkjlskd fljsldk fklj
            lksjdfljklsdj flkjs dflkjsd flkjsd lfkjsd lfjsdjf lkj kl
          </v-flex>

          <div class="mt-5">
            <span
              style="cursor: pointer;"
              class="grey--text lighten-1"
              @click="$router.push({name: 'Announcement', query:{courseId: $route.query.courseId}})"
            >
              <v-icon>question_answer</v-icon>
              <span class="ml-2">Announcement</span>
            </span>
          </div>
          <div>
            <span
              style="cursor: pointer;"
              @click="$router.push({name: 'Course Discussion Forum', query:{courseId: $route.query.courseId}})"
              class="grey--text lighten-1"
            >
              <v-icon>question_answer</v-icon>
              <span class="ml-2">Course discussion forum</span>
            </span>
          </div>
          <!-- CHAPTERS -->
          <v-layout column class="mt-5">
            <v-flex
              v-for="(chapter,index) in courseDetails[0].chapters"
              :key="index"
              style="cursor: pointer;"
              @click="routeToChapterInfo(chapter._id)"
            >
              <v-card class="mt-2 elevation-0 card-border">
                <v-container class="pt-0">
                  <div class="title side-bar-color font-weight-bold">{{chapter.chapterName}}</div>
                  <div class="grey--text lighten-1 subheading">{{chapter.description}}</div>
                  <div
                    v-for="(point,index) in chapter.chapterPoints"
                    :key="index"
                    class="ml-2 mt-2"
                  >
                    <span class="grey--text lighten-1 subheading">{{index +1}}. {{point}}</span>
                  </div>
                </v-container>
              </v-card>
            </v-flex>
          </v-layout>
        </v-flex>
        <v-spacer></v-spacer>

        <!-- COURSES -->
        <v-flex xs12 md3>
          <v-card class="elevation-0 card-border" height="100%">
            <v-container class="pt-0">
              <div class="side-bar-color font-weight-bold title">Courses</div>

              <div v-for="(course,index) in courseData">
                <v-btn
                  flat
                  class="subheading text-xs-start justify-left"
                  style="cursor: pointer;"
                  block
                  @click="routeToCourseDetails(course._id)"
                >
                  <div style="width: 100%;text-align: left;">
                    <v-icon style="color: red;padding-bottom: 3px;" size="15">play_arrow</v-icon>
                    {{course.courseName}}
                  </div>
                </v-btn>
              </div>
              <!-- <v-expansion-panel focusable class="elevation-0">
                <v-expansion-panel-content v-for="(item,i) in courseData" :key="i">
                  <template v-slot:header>
                    <div class="subheading">{{item.courseName}}</div>
                  </template>
                </v-expansion-panel-content>
              </v-expansion-panel>-->
            </v-container>
          </v-card>
        </v-flex>
      </v-layout>
    </v-container>
  </div>
</template>
<script>
import AllApiCalls from "@/Services/AllApiCalls.js";
import http from "@/Services/http.js";
import moment from "moment";
export default {
  mixins: [AllApiCalls],
  data() {
    return {
      showLoader: false,
      courseDetails: [{ courseId: {}, classId: {} }],
      chapterIds: [],
      // courseData: [],
      courseDataTree: []
    };
  },
  methods: {
    routeToChapterInfo(chapterId) {
      /* set value of present chapter selected, and other chapters ids in the obj */
      let obj = {};
      for (var i = 0; i < this.courseDetails[0].chapters.length; i++) {
        obj[
          this.courseDetails[0].chapters[i].chapterName
        ] = this.courseDetails[0].chapters[i]._id;
      }
      obj.chapterId = chapterId;
      obj.courseDetailId = this.courseDetails[0]._id;
      this.$router.push({
        name: "Chapter Info",
        query: obj
      });
    },
    async routeToCourseDetails(courseId) {
      /* getParticularCourseDetail- To get courseDetail - defined in GetApis.js*/
      let response = await this.getParticularCourseDetail(courseId);

      /* If the response is null then dont route */
      if (response.data.data.length > 0) {
        this.$router.push({
          name: "Course Details",
          query: { courseId: courseId }
        });
      } else {
        this.seeSnackbar("No Data Available", "warning");
      }
    }
  },
  async created() {
    /* getParticularCourseDetail- To get courseDetail - defined in GetApis.js*/
    let response = await this.getParticularCourseDetail(
      this.$route.query.courseId
    );
    this.courseDetails = response.data.data;

    /* getStudentCourses - to get courseData - defined in GetApis.js*/
    await this.getStudentCourses({
      classId: localStorage.getItem("parentClassId"),
      studentId: localStorage.getItem("parentStudentId")
    });
  }
};
</script>
<style scoped>
.side-bar-color {
  color: #827bfa !important;
  /* border-top-right-radius: 74px !important; */
}
.card-border {
  border: 1px #bdbdbd solid;
  border-radius: 3px;
}
/* .v-treeview-node__toggle {
  color: red !important;
} */
</style>