|  | @@ -0,0 +1,384 @@
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="template_details">
 | 
	
		
			
				|  |  | +    <div
 | 
	
		
			
				|  |  | +      v-if="isData && CourseData.is_release === 'true' && CourseData.is_deleted === 'false'"
 | 
	
		
			
				|  |  | +      v-loading="loading"
 | 
	
		
			
				|  |  | +      class="details_container"
 | 
	
		
			
				|  |  | +    >
 | 
	
		
			
				|  |  | +      <header class="title">{{ CourseData.name }}</header>
 | 
	
		
			
				|  |  | +      <main class="main">
 | 
	
		
			
				|  |  | +        <div v-for="(item, i) in CourseData.cs_item_list" :key="i" class="course-list">
 | 
	
		
			
				|  |  | +          <div class="courseOne">
 | 
	
		
			
				|  |  | +            <div class="title">
 | 
	
		
			
				|  |  | +              <div>
 | 
	
		
			
				|  |  | +                <span>{{ i + 1 }}.</span>
 | 
	
		
			
				|  |  | +                <span>{{ item.name }}</span>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <div class="courseOne-time">{{ item.begin_time }} ~ {{ item.end_time }}</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +          <div class="course-content">
 | 
	
		
			
				|  |  | +            <el-collapse @change="handleChange(item.id)">
 | 
	
		
			
				|  |  | +              <el-collapse-item :name="item.id">
 | 
	
		
			
				|  |  | +                <div slot="title" class="Coursetasks">
 | 
	
		
			
				|  |  | +                  {{ $t('Key392') }}
 | 
	
		
			
				|  |  | +                  <img
 | 
	
		
			
				|  |  | +                    class="arrow"
 | 
	
		
			
				|  |  | +                    :src="
 | 
	
		
			
				|  |  | +                      openList.includes(item.id)
 | 
	
		
			
				|  |  | +                        ? require('../../assets/course_details/open1.png')
 | 
	
		
			
				|  |  | +                        : require('../../assets/course_details/open2.png')
 | 
	
		
			
				|  |  | +                    "
 | 
	
		
			
				|  |  | +                  />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div class="courseContent">
 | 
	
		
			
				|  |  | +                  <template v-for="li in courseContentList">
 | 
	
		
			
				|  |  | +                    <div v-if="item[li.id].length > 0" :key="li.id" class="tasks">
 | 
	
		
			
				|  |  | +                      <div class="title">
 | 
	
		
			
				|  |  | +                        <span class="red-circle" /><span>{{ $t(li.name) }}</span>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                      <div class="content">
 | 
	
		
			
				|  |  | +                        <el-collapse-item v-for="(it, it_i) in item[li.id]" :key="it_i" :name="it.id">
 | 
	
		
			
				|  |  | +                          <div slot="title" :class="openList.includes(it.id) ? 'contenttitle2' : 'contenttitle'">
 | 
	
		
			
				|  |  | +                            <span :title="it.name">{{ it.name }}</span>
 | 
	
		
			
				|  |  | +                            <span>
 | 
	
		
			
				|  |  | +                              <span class="gray">{{ it.begin_time }} ~ {{ it.end_time }}</span>
 | 
	
		
			
				|  |  | +                              <span class="gray">···</span>
 | 
	
		
			
				|  |  | +                            </span>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +                          <div class="detail">
 | 
	
		
			
				|  |  | +                            <div>
 | 
	
		
			
				|  |  | +                              <span>{{ $t('Key393') }}</span>
 | 
	
		
			
				|  |  | +                              <p>
 | 
	
		
			
				|  |  | +                                {{ it.content }}
 | 
	
		
			
				|  |  | +                              </p>
 | 
	
		
			
				|  |  | +                            </div>
 | 
	
		
			
				|  |  | +                            <div v-if="it.courseware_list.length > 0">
 | 
	
		
			
				|  |  | +                              <span>{{ $t('Key309') }}</span>
 | 
	
		
			
				|  |  | +                              <div>
 | 
	
		
			
				|  |  | +                                <div
 | 
	
		
			
				|  |  | +                                  v-for="(courseware, courseware_i) in it.courseware_list"
 | 
	
		
			
				|  |  | +                                  :key="courseware_i"
 | 
	
		
			
				|  |  | +                                  class="btn"
 | 
	
		
			
				|  |  | +                                >
 | 
	
		
			
				|  |  | +                                  <img src="../../assets/course_details/file.png" alt="" />
 | 
	
		
			
				|  |  | +                                  <span> {{ courseware.courseware_name }} </span>
 | 
	
		
			
				|  |  | +                                </div>
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                            </div>
 | 
	
		
			
				|  |  | +                            <div v-if="it.accessory_list.length > 0">
 | 
	
		
			
				|  |  | +                              <span>{{ $t('Key394') }}</span>
 | 
	
		
			
				|  |  | +                              <div>
 | 
	
		
			
				|  |  | +                                <div
 | 
	
		
			
				|  |  | +                                  v-for="(accessory, accessory_i) in it.accessory_list"
 | 
	
		
			
				|  |  | +                                  :key="accessory_i"
 | 
	
		
			
				|  |  | +                                  class="btn"
 | 
	
		
			
				|  |  | +                                >
 | 
	
		
			
				|  |  | +                                  <img src="../../assets/course_details/fileType1.png" alt="" />
 | 
	
		
			
				|  |  | +                                  <span> {{ accessory.file_name }} </span>
 | 
	
		
			
				|  |  | +                                </div>
 | 
	
		
			
				|  |  | +                              </div>
 | 
	
		
			
				|  |  | +                            </div>
 | 
	
		
			
				|  |  | +                          </div>
 | 
	
		
			
				|  |  | +                        </el-collapse-item>
 | 
	
		
			
				|  |  | +                      </div>
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  </template>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              </el-collapse-item>
 | 
	
		
			
				|  |  | +            </el-collapse>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </main>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <div v-else-if="!loading" class="non-existent">
 | 
	
		
			
				|  |  | +      {{
 | 
	
		
			
				|  |  | +        CourseData.is_deleted === 'true'
 | 
	
		
			
				|  |  | +          ? '无法查看,课程已删除'
 | 
	
		
			
				|  |  | +          : CourseData.is_release === 'false'
 | 
	
		
			
				|  |  | +          ? '无法查看,课程已下架'
 | 
	
		
			
				|  |  | +          : '课程不存在'
 | 
	
		
			
				|  |  | +      }}
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import { GetCourseInfoBox } from '@/api/course';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    const query = this.$route.query;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      id: query.id,
 | 
	
		
			
				|  |  | +      CourseData: null,
 | 
	
		
			
				|  |  | +      isData: false,
 | 
	
		
			
				|  |  | +      loading: true,
 | 
	
		
			
				|  |  | +      openList: [],
 | 
	
		
			
				|  |  | +      courseContentList: [
 | 
	
		
			
				|  |  | +        { id: 'pre_task_list', name: 'Key353' },
 | 
	
		
			
				|  |  | +        { id: 'mid_task_list', name: 'Key354' },
 | 
	
		
			
				|  |  | +        { id: 'after_task_list', name: 'Key355' }
 | 
	
		
			
				|  |  | +      ]
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  created() {
 | 
	
		
			
				|  |  | +    GetCourseInfoBox({ id: this.id })
 | 
	
		
			
				|  |  | +      .then(res => {
 | 
	
		
			
				|  |  | +        this.CourseData = res;
 | 
	
		
			
				|  |  | +        this.isData = 'id' in res;
 | 
	
		
			
				|  |  | +        this.loading = false;
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      .catch(() => {
 | 
	
		
			
				|  |  | +        this.loading = false;
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    // 课程任务的打开和关闭
 | 
	
		
			
				|  |  | +    handleChange(val) {
 | 
	
		
			
				|  |  | +      this.openList.includes(val) ? this.openList.splice(this.openList.indexOf(val), 1) : this.openList.push(val);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style lang="scss" scoped>
 | 
	
		
			
				|  |  | +.template_details {
 | 
	
		
			
				|  |  | +  min-height: 100%;
 | 
	
		
			
				|  |  | +  padding: 52px 0 20px;
 | 
	
		
			
				|  |  | +  background: #e5e5e5;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .details_container {
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    flex-direction: column;
 | 
	
		
			
				|  |  | +    row-gap: 24px;
 | 
	
		
			
				|  |  | +    width: 1200px;
 | 
	
		
			
				|  |  | +    min-height: calc(100vh - 168px);
 | 
	
		
			
				|  |  | +    margin: 0 auto;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  header.title {
 | 
	
		
			
				|  |  | +    font-size: 20px;
 | 
	
		
			
				|  |  | +    font-weight: 700;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    &::before {
 | 
	
		
			
				|  |  | +      display: inline-block;
 | 
	
		
			
				|  |  | +      width: 4px;
 | 
	
		
			
				|  |  | +      height: 13px;
 | 
	
		
			
				|  |  | +      margin-right: 16px;
 | 
	
		
			
				|  |  | +      content: '';
 | 
	
		
			
				|  |  | +      background-color: $basic-color;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .main {
 | 
	
		
			
				|  |  | +    flex: 1;
 | 
	
		
			
				|  |  | +    width: 100%;
 | 
	
		
			
				|  |  | +    padding: 40px;
 | 
	
		
			
				|  |  | +    background-color: #fff;
 | 
	
		
			
				|  |  | +    border-radius: 8px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .course-list {
 | 
	
		
			
				|  |  | +      font-size: 18px;
 | 
	
		
			
				|  |  | +      background: #fff;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      & + .course-list {
 | 
	
		
			
				|  |  | +        margin-top: 30px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      > :not(.courseOne) {
 | 
	
		
			
				|  |  | +        padding-left: 40px;
 | 
	
		
			
				|  |  | +        margin-top: 16px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .courseOne {
 | 
	
		
			
				|  |  | +        .title {
 | 
	
		
			
				|  |  | +          display: flex;
 | 
	
		
			
				|  |  | +          justify-content: space-between;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          > div:nth-child(1) {
 | 
	
		
			
				|  |  | +            font-size: 20px;
 | 
	
		
			
				|  |  | +            font-weight: bold;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            span {
 | 
	
		
			
				|  |  | +              margin-right: 24px;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        &-time {
 | 
	
		
			
				|  |  | +          color: #737373;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .course-content {
 | 
	
		
			
				|  |  | +        width: 670px;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .Coursetasks {
 | 
	
		
			
				|  |  | +        display: flex;
 | 
	
		
			
				|  |  | +        align-items: center;
 | 
	
		
			
				|  |  | +        font-size: 16px;
 | 
	
		
			
				|  |  | +        cursor: pointer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        .arrow {
 | 
	
		
			
				|  |  | +          width: 24px;
 | 
	
		
			
				|  |  | +          margin-left: 8px;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      .courseContent {
 | 
	
		
			
				|  |  | +        .tasks {
 | 
	
		
			
				|  |  | +          padding-left: 10px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          .title {
 | 
	
		
			
				|  |  | +            font-size: 16px;
 | 
	
		
			
				|  |  | +            color: #2c2c2c;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            .red-circle {
 | 
	
		
			
				|  |  | +              position: relative;
 | 
	
		
			
				|  |  | +              right: 3px;
 | 
	
		
			
				|  |  | +              display: inline-block;
 | 
	
		
			
				|  |  | +              width: 8px;
 | 
	
		
			
				|  |  | +              height: 8px;
 | 
	
		
			
				|  |  | +              margin-right: 16px;
 | 
	
		
			
				|  |  | +              background: #fe6d68;
 | 
	
		
			
				|  |  | +              border-radius: 50%;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +          .content {
 | 
	
		
			
				|  |  | +            padding-bottom: 10px;
 | 
	
		
			
				|  |  | +            padding-left: 20px;
 | 
	
		
			
				|  |  | +            margin-top: 16px;
 | 
	
		
			
				|  |  | +            border-left: 1px solid #fe6d68;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            %contenttitle,
 | 
	
		
			
				|  |  | +            .contenttitle {
 | 
	
		
			
				|  |  | +              display: flex;
 | 
	
		
			
				|  |  | +              align-items: center;
 | 
	
		
			
				|  |  | +              justify-content: space-between;
 | 
	
		
			
				|  |  | +              width: 670px;
 | 
	
		
			
				|  |  | +              padding: 0 10px;
 | 
	
		
			
				|  |  | +              font-size: 16px;
 | 
	
		
			
				|  |  | +              cursor: pointer;
 | 
	
		
			
				|  |  | +              background: #fff;
 | 
	
		
			
				|  |  | +              border: 1px solid #e6e6e6;
 | 
	
		
			
				|  |  | +              border-radius: 8px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              img {
 | 
	
		
			
				|  |  | +                width: 16px;
 | 
	
		
			
				|  |  | +                margin-left: 8px;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              span {
 | 
	
		
			
				|  |  | +                margin-left: 16px;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              > span:first-child {
 | 
	
		
			
				|  |  | +                width: 180px;
 | 
	
		
			
				|  |  | +                overflow: hidden;
 | 
	
		
			
				|  |  | +                text-overflow: ellipsis;
 | 
	
		
			
				|  |  | +                white-space: nowrap;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              .gray {
 | 
	
		
			
				|  |  | +                opacity: 0.5;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            .contenttitle2 {
 | 
	
		
			
				|  |  | +              @extend %contenttitle;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              background: #f9f9f9;
 | 
	
		
			
				|  |  | +              border-bottom-right-radius: 0;
 | 
	
		
			
				|  |  | +              border-bottom-left-radius: 0;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            .detail {
 | 
	
		
			
				|  |  | +              width: 599px;
 | 
	
		
			
				|  |  | +              padding-bottom: 24px;
 | 
	
		
			
				|  |  | +              background: #fff;
 | 
	
		
			
				|  |  | +              border: 1px solid #e7e7e7;
 | 
	
		
			
				|  |  | +              border-bottom-right-radius: 8px;
 | 
	
		
			
				|  |  | +              border-bottom-left-radius: 8px;
 | 
	
		
			
				|  |  | +              box-shadow: 0 2px 8px rgba(0, 0, 0, 10%);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +              > div {
 | 
	
		
			
				|  |  | +                display: flex;
 | 
	
		
			
				|  |  | +                align-items: center;
 | 
	
		
			
				|  |  | +                margin-top: 24px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                > :nth-child(1) {
 | 
	
		
			
				|  |  | +                  width: 78px;
 | 
	
		
			
				|  |  | +                  min-width: 78px;
 | 
	
		
			
				|  |  | +                  margin-left: 24px;
 | 
	
		
			
				|  |  | +                  font-size: 16px;
 | 
	
		
			
				|  |  | +                  color: #000;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                > :nth-child(2) {
 | 
	
		
			
				|  |  | +                  margin-left: 16px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                  img {
 | 
	
		
			
				|  |  | +                    width: 24px;
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                  .btn {
 | 
	
		
			
				|  |  | +                    display: flex;
 | 
	
		
			
				|  |  | +                    align-items: center;
 | 
	
		
			
				|  |  | +                    width: 270px;
 | 
	
		
			
				|  |  | +                    height: 40px;
 | 
	
		
			
				|  |  | +                    cursor: pointer;
 | 
	
		
			
				|  |  | +                    background: #fff;
 | 
	
		
			
				|  |  | +                    border: 1px solid #dbdbdb;
 | 
	
		
			
				|  |  | +                    border-radius: 4px;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                    img {
 | 
	
		
			
				|  |  | +                      margin-right: 8px;
 | 
	
		
			
				|  |  | +                      margin-left: 16px;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                  .btn:not(:nth-child(1)) {
 | 
	
		
			
				|  |  | +                    margin-top: 8px;
 | 
	
		
			
				|  |  | +                  }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +<style lang="scss">
 | 
	
		
			
				|  |  | +.el-collapse {
 | 
	
		
			
				|  |  | +  border-style: none;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  &-item + &-item {
 | 
	
		
			
				|  |  | +    margin-top: 12px;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .el-collapse-item__header {
 | 
	
		
			
				|  |  | +    border-style: none;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .l-collapse-item__arrow,
 | 
	
		
			
				|  |  | +    .el-icon-arrow-right {
 | 
	
		
			
				|  |  | +      display: none;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .el-collapse-item__wrap {
 | 
	
		
			
				|  |  | +    border-style: none;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  .el-collapse-item__content {
 | 
	
		
			
				|  |  | +    padding-bottom: 0;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +</style>
 |