lex-xin пре 5 година
родитељ
комит
0df7fce796
50 измењених фајлова са 542 додато и 4 уклоњено
  1. 1 0
      dist/css/AppLogin.e92f1d3a.css
  2. 0 0
      dist/css/ClassDetail.0512cc1b.css
  3. 0 0
      dist/css/CourseDetail.03540c35.css
  4. 0 0
      dist/css/CourseDetail.42a82618.css
  5. 1 0
      dist/css/CourseEvaluation.65b5c304.css
  6. 0 0
      dist/css/CourseEvaluation.faa8f6af.css
  7. 0 0
      dist/css/ExchangeRecord.16e31609.css
  8. 0 0
      dist/css/ManageEvaluation.5db3b127.css
  9. 0 0
      dist/css/ManageEvaluation.a5188072.css
  10. 0 0
      dist/css/PeriodAdjust~PeriodChange.99ea5fe1.css
  11. BIN
      dist/img/logo.334a5ce4.png
  12. 0 0
      dist/index.html
  13. 0 0
      dist/js/Account.87043cde.js
  14. 0 0
      dist/js/Account.8c979f07.js
  15. 0 0
      dist/js/Account~AppLogin~Approval~Attendance~CallNames~ClassDetail~CourseApply~CourseDetail~CourseEvaluation~fd18cf5c.d5b67f4b.js
  16. 0 0
      dist/js/AppLogin.6612f6d1.js
  17. 0 0
      dist/js/ClassDetail.65fa4eae.js
  18. 0 0
      dist/js/CourseApply.2d24d4f3.js
  19. 0 0
      dist/js/CourseDetail.5cc85ac8.js
  20. 0 0
      dist/js/CourseDetail.eb3e3e2f.js
  21. 0 0
      dist/js/CourseEvaluation.3dab05bd.js
  22. 0 0
      dist/js/CourseEvaluation.c218341f.js
  23. 0 0
      dist/js/ExchangeRecord.d308fafe.js
  24. 0 0
      dist/js/HelpCenter.081faabf.js
  25. 0 0
      dist/js/HelpCenter~PeriodExchange.9f4dd30c.js
  26. 0 0
      dist/js/Leave.efaaada7.js
  27. 0 0
      dist/js/ManageEvaluation.a8f24c68.js
  28. 0 0
      dist/js/ManageEvaluation.b0b195a5.js
  29. 0 0
      dist/js/PaymentResult.daa0e2c9.js
  30. 0 0
      dist/js/PeriodAdjust.22c8f9c1.js
  31. 0 0
      dist/js/PeriodChange.240a1f27.js
  32. 0 0
      dist/js/PeriodExchange.91e8f372.js
  33. 0 0
      dist/js/PeriodRecord.42456e60.js
  34. 0 0
      dist/js/TeachingSchool.6578e107.js
  35. 0 0
      dist/js/VIPApply.c0849c13.js
  36. 0 0
      dist/js/app.9a1de1ed.js
  37. 0 0
      dist/js/app.b796a08c.js
  38. 0 0
      dist/js/privacy.54be2a02.js
  39. 40 0
      src/api/app.js
  40. BIN
      src/assets/images/app/icon_b.png
  41. BIN
      src/assets/images/app/icon_step.png
  42. BIN
      src/assets/images/app/icon_teacher.png
  43. BIN
      src/assets/images/logo.png
  44. 27 1
      src/common/common.js
  45. 16 0
      src/router/appRouter.js
  46. 206 0
      src/views/app/AppLogin.vue
  47. 246 0
      src/views/app/ClassDetail.vue
  48. 1 0
      src/views/app/CourseDetail.vue
  49. 2 1
      src/views/audition/CourseEvaluation.vue
  50. 2 2
      src/views/audition/ManageEvaluation.vue

+ 1 - 0
dist/css/AppLogin.e92f1d3a.css

@@ -0,0 +1 @@
+.login[data-v-44c2b6d8]{min-height:100vh;background:-webkit-gradient(linear,left top,left bottom,from(#15938b),to(#6dbeba));background:linear-gradient(180deg,#15938b,#6dbeba)}.container[data-v-44c2b6d8]{padding:0 .48rem}.logo[data-v-44c2b6d8]{padding-top:1rem;padding-bottom:.9rem;width:1.6rem;margin:0 auto}.logo img[data-v-44c2b6d8]{width:inherit}.input-group[data-v-44c2b6d8]{position:relative;height:.44rem;border-radius:.5rem;border:.02rem solid #fff;margin-bottom:.2rem;padding-left:.3rem;padding-right:.3rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group .input[data-v-44c2b6d8]{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:.14rem;color:#fff;background:transparent;border:none}.input-group .input[data-v-44c2b6d8]::-webkit-input-placeholder{color:#fff}.input-group .input[data-v-44c2b6d8]::-moz-placeholder{color:#fff}.input-group .input[data-v-44c2b6d8]:-ms-input-placeholder{color:#fff}.input-group .input[data-v-44c2b6d8]::-ms-input-placeholder{color:#fff}.input-group .input[data-v-44c2b6d8]::placeholder{color:#fff}.input-group .code-text[data-v-44c2b6d8]{position:absolute;right:0;-webkit-box-flex:1;-ms-flex:1;flex:1;display:block;width:.94rem;text-align:center;border-left:.02rem solid #fff}.input-group .code-text[data-v-44c2b6d8],[data-v-44c2b6d8] .van-count-down{font-size:.14rem;color:#fff;line-height:.3rem;height:.3rem}[data-v-44c2b6d8] .van-button--large{height:.44rem;line-height:.42rem;color:#14928a;border:0}[data-v-44c2b6d8] .van-button:active:before{opacity:.05}[data-v-44c2b6d8] .van-button--disabled{opacity:1;color:rgba(0,0,0,.25)}.login-change[data-v-44c2b6d8]{padding-top:.08rem;font-size:.14rem;color:#fff;float:right}

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/ClassDetail.0512cc1b.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/CourseDetail.03540c35.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/CourseDetail.42a82618.css


+ 1 - 0
dist/css/CourseEvaluation.65b5c304.css

@@ -0,0 +1 @@
+[data-v-00fbc00b] .van-cell-group{margin-top:.15rem}[data-v-00fbc00b] .van-cell-group /deep/ .van-cell{padding:.14rem .16rem}.title-item[data-v-00fbc00b]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:.05rem 0}.title-item .text[data-v-00fbc00b]{margin-right:.15rem;font-size:.17rem;color:#1a1a1a}.title-item[data-v-00fbc00b] .van-rate{line-height:0}[data-v-00fbc00b] .van-cell__title{font-size:.17rem;color:#1a1a1a;-webkit-box-flex:1;-ms-flex:auto 1;flex:auto 1}[data-v-00fbc00b] .van-cell__value,[data-v-00fbc00b] .van-field__control{font-size:.17rem;color:#666;width:70%;-webkit-box-flex:1;-ms-flex:auto;flex:auto}.textarea[data-v-00fbc00b]{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.textarea[data-v-00fbc00b] .van-cell__value{margin-top:.1rem;width:100%}.twoConnect[data-v-00fbc00b]{width:55%}[data-v-00fbc00b] .van-radio-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}[data-v-00fbc00b] .van-radio-group /deep/ .van-radio{margin-left:.18rem}[data-v-00fbc00b] .van-radio__icon .van-icon{border-color:#aaa}[data-v-00fbc00b] .van-radio__icon--checked .van-icon{border-color:#14928a;background:#14928a}.button-group[data-v-00fbc00b]{margin:.3rem .26rem .2rem}.button-group .van-button--primary[data-v-00fbc00b]{background:#14928a;border:1px solid #14928a;font-size:.18rem}

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/CourseEvaluation.faa8f6af.css


+ 0 - 0
dist/css/ExchangeRecord.e8654f0c.css → dist/css/ExchangeRecord.16e31609.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/ManageEvaluation.5db3b127.css


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/css/ManageEvaluation.a5188072.css


+ 0 - 0
dist/css/PeriodAdjust~PeriodChange.bec5c878.css → dist/css/PeriodAdjust~PeriodChange.99ea5fe1.css


BIN
dist/img/logo.334a5ce4.png


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/index.html


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/Account.87043cde.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/Account.8c979f07.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/Account~AppLogin~Approval~Attendance~CallNames~ClassDetail~CourseApply~CourseDetail~CourseEvaluation~fd18cf5c.d5b67f4b.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/AppLogin.6612f6d1.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/ClassDetail.65fa4eae.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/CourseApply.2d24d4f3.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/CourseDetail.5cc85ac8.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/CourseDetail.eb3e3e2f.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/CourseEvaluation.3dab05bd.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/CourseEvaluation.c218341f.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/ExchangeRecord.d308fafe.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/HelpCenter.081faabf.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/HelpCenter~PeriodExchange.9f4dd30c.js


+ 0 - 0
dist/js/Leave.20a3d8cb.js → dist/js/Leave.efaaada7.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/ManageEvaluation.a8f24c68.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/ManageEvaluation.b0b195a5.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/PaymentResult.daa0e2c9.js


+ 0 - 0
dist/js/PeriodAdjust.036033de.js → dist/js/PeriodAdjust.22c8f9c1.js


+ 0 - 0
dist/js/PeriodChange.82d864c9.js → dist/js/PeriodChange.240a1f27.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/PeriodExchange.91e8f372.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/PeriodRecord.42456e60.js


+ 0 - 0
dist/js/TeachingSchool.6dafa3d6.js → dist/js/TeachingSchool.6578e107.js


+ 0 - 0
dist/js/VIPApply.25a5b6fd.js → dist/js/VIPApply.c0849c13.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/app.9a1de1ed.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
dist/js/app.b796a08c.js


+ 0 - 0
dist/js/privacy.c88b2e4c.js → dist/js/privacy.54be2a02.js


+ 40 - 0
src/api/app.js

@@ -3,6 +3,42 @@ import qs from 'qs'
 // import axios from '@/common/axios'
 const api = '/api-teacher'
 
+// 发送登录短信验证码
+const sendSms = (data) => {
+  return axios({
+      url: '/api-student/code/sendSms',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 短信验证码的方式登录
+const smsLogin = (data) => {
+  return axios({
+      url: '/api-auth/smsLogin',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
+// 获取课程组详情
+const getGroupDetail = (data) => {
+  return axios({
+      url: '/api-student/courseGroup/getGroupDetail',
+      method: 'get',
+      params: data
+  })
+}
+
+// 购买课程组
+const buyCourseGroup = (data) => {
+  return axios({
+      url: '/api-student/courseGroup/buyCourseGroup',
+      method: 'post',
+      data: qs.stringify(data)
+  })
+}
+
 // 创建课程
 const createCourseGroup = (data) => {
   return axios({
@@ -111,6 +147,10 @@ const batchAdd = (data) => {
 
 
 export {
+  sendSms,
+  smsLogin,
+  getGroupDetail,
+  buyCourseGroup,
   createCourseGroup,
   sysTenantAccountGet,
   queryTenantAccountDetail,

BIN
src/assets/images/app/icon_b.png


BIN
src/assets/images/app/icon_step.png


BIN
src/assets/images/app/icon_teacher.png


BIN
src/assets/images/logo.png


+ 27 - 1
src/common/common.js

@@ -37,7 +37,33 @@ const calcMinute = (minute) => {
   return text
 }
 
+/**
+ * 小于10的数变成 (0x)
+ * @param {数值} num 
+ */
+const getSTD = (num) => {
+  return Number(num) >= 10 ? num : '0' + num
+}
+
+/**
+ * 获取格式化的年月日
+ * @param {日期} time 
+ * @param {不是IOS里使用(多用于接口参数)} noIos 
+ */
+const getYMD = (time, noIos) => {
+  let tempDate = time || new Date()
+  if(typeof(tempDate) == 'string') {
+      tempDate = new Date(time.replace(/-/ig, '/'))
+  }
+  let t = noIos ? '-' : '/'
+  let month = getSTD(tempDate.getMonth() + 1)
+  let day = getSTD(tempDate.getDate())
+  return tempDate.getFullYear() + t + month + t + day
+}
+
 export {
   browser,
-  calcMinute
+  calcMinute,
+  getSTD,
+  getYMD
 }

+ 16 - 0
src/router/appRouter.js

@@ -1,4 +1,20 @@
 let teacherRouter = [{
+  path: '/appLogin',
+  name: 'appLogin',
+  component: () => import(/* webpackChunkName:'AppLogin'*/'@/views/app/AppLogin.vue'),
+  meta: {
+      descrition: '登录',
+      weight: 3 // 页面权重
+  }
+}, {
+  path: '/classDetail',
+  name: 'classDetail',
+  component: () => import(/* webpackChunkName:'ClassDetail'*/'@/views/app/ClassDetail.vue'),
+  meta: {
+      descrition: 'VIP课堂详情',
+      weight: 3 // 页面权重
+  }
+}, {
   path: "/courseApply",
   name: "courseApply",
   component: () =>

+ 206 - 0
src/views/app/AppLogin.vue

@@ -0,0 +1,206 @@
+<template>
+    <div class="login">
+        <div class="logo">
+            <img src="../../assets/images/logo.png" alt="">
+        </div>
+
+        <div class="container">
+            <div class="input-group">
+                <input type="number" @blur="codeBlur" placeholder="请输入手机号报名或查询进度" class="input" v-model="phoneNumber" pattern="[0-9]">
+            </div>
+            <div class="input-group">
+                <input type="text" @blur="codeBlur" placeholder="请输入验证码" class="input" v-model="code" >
+                <span class="code-text" v-show="countDownStatus" @click="onSendCode">{{ codeText }}</span>
+                <span class="code-text" v-show="!countDownStatus">
+                    <van-count-down 
+                        ref="countdown"
+                        :auto-start="false"
+                        :time="countDownTime" 
+                        @finish="onFinished"
+                        format="ss秒" />
+                </span>
+            </div>
+
+            <van-button round size="large" @click="onCodeLogin" :disabled="codeDisable">登录</van-button>
+        </div>
+    </div>
+</template>
+<script>
+import {sendSms, smsLogin } from '@/api/app'
+export default {
+    name: 'login',
+    data() {
+        return {
+            groupId: this.$route.query.groupId,
+            codeDisable: true, // 验证码登录按钮状态
+            countDownStatus: true, // 到计时状态
+            phoneNumber: null,
+            code: null,
+            codeText: '获取验证码',
+            countDownTime: 1000 * 120 // 倒计时时间
+        }
+    },
+    mounted() {
+        // 登录时删除无用的token
+        localStorage.removeItem('userInfo')
+        localStorage.removeItem('Authorization')
+    },
+    watch: {
+        phoneNumber(newValue) {
+            this.onKeyUp(newValue, this.code)
+        },
+        code(newValue) {
+            this.onKeyUp(this.phoneNumber, newValue)
+        }
+    },
+    methods: {
+        codeBlur() {
+            setTimeout(() => {
+                const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0;
+                window.scrollTo(0, Math.max(scrollHeight - 1, 0));
+            }, 100);
+        },
+        onKeyUp(phoneNumber, code) {
+            if(!phoneNumber || !code) {
+                this.codeDisable = true
+            } else {
+                this.codeDisable = false
+            }
+        },
+        onSendCode() { // 发送验证码
+            if(!this.checkPhone(this.phoneNumber)) {
+                return
+            }
+            sendSms({
+                mobile: this.phoneNumber
+            }).then(res => {
+                let result = res.data
+                if(result.code == 200) {
+                    this.countDownStatus = false
+                    this.$refs.countdown.start() // 倒计时开始
+                } else {
+                    this.$toast(result.msg)
+                }
+            })
+        },
+        onCodeLogin() { // 短信登录
+            smsLogin({
+                clientId: 'student',
+                clientSecret: 'student',
+                phone: this.phoneNumber,
+                smsCode: this.code,
+                channel: 'H5',
+                isLessee: 'true'
+            }).then(sms => {
+                let s = sms.data
+                // 保存用户信息
+                if(s.code == 200) {
+                    let auth = s.data.authentication
+                    localStorage.setItem('userInfo', auth.token_type + ' ' + auth.access_token)
+                    
+                    this.$router.push({
+                        path: '/classDetail',
+                        query: {
+                            groupId: this.groupId
+                        }
+                    })
+                } else {
+                    this.$toast(s.msg)
+                }
+            })
+        },
+        onFinished() { // 倒计时结束
+            this.countDownStatus = true
+            this.$refs.countdown.reset()
+        },
+        checkPhone(phoneNumber) {
+            let result = true
+            if(!(/^1(3|4|5|6|7|8|9)\d{9}$/.test(phoneNumber))){ 
+                this.$toast('手机号输入有误')
+                result = false
+            }
+            return result
+        }
+    }
+}
+</script>
+<style lang='less' scoped>
+@import url("../../assets/commonLess/variable.less");
+
+.login {
+    min-height: 100vh;
+    background: linear-gradient(to bottom, #15938B, #6dbeba);
+}
+.container {
+    padding: 0 .48rem;
+}
+.logo {
+    padding-top: 1rem;
+    padding-bottom: .9rem;
+    width: 1.6rem;
+    margin: 0 auto;
+    img {
+        width: inherit;
+    }
+}
+.input-group {
+    position: relative;
+    height: .44rem;
+    border-radius: .5rem;
+    border: .02rem solid @whiteColor;
+    margin-bottom: .2rem;
+    padding-left: .3rem;
+    padding-right: .3rem;
+    display: flex;
+    align-items: center;
+    .input {
+        flex: 1;
+        font-size: .14rem;
+        color: @whiteColor;
+        
+        background: transparent;
+        border: none;
+        &::placeholder {
+            color: @whiteColor;
+        }
+    }
+    .code-text {
+        position: absolute;
+        right: 0;
+        flex: 1;
+        display: block;
+        width: .94rem;
+        text-align: center;
+        border-left: .02rem solid @whiteColor;
+        font-size: .14rem;
+        color: @whiteColor;
+        line-height: .3rem;
+        height: .3rem;
+    }
+}
+/deep/.van-count-down {
+    font-size: .14rem;
+    color: @whiteColor;
+    line-height: .3rem;
+    height: .3rem;
+}
+/deep/.van-button--large {
+    height: .44rem;
+    line-height: .42rem;
+    color: @mColor;
+    border: 0;
+}
+/deep/.van-button:active::before {
+    opacity: 0.05;
+}
+/deep/.van-button--disabled {
+    opacity: 1;
+    color: rgba(0, 0, 0, 0.25);
+}
+.login-change {
+    padding-top: .08rem;
+    font-size: .14rem;
+    color: @whiteColor;
+    float: right;
+}
+</style>

+ 246 - 0
src/views/app/ClassDetail.vue

@@ -0,0 +1,246 @@
+<template>
+    <div class="classdetail">
+        <MHeader :isBack="false" />
+        
+        <div class="header van-hairline--bottom">
+            <h3>{{ dataInfo.groupName }}</h3>
+            <p>{{ dataInfo.courseStartDate | getMonthDay }}—{{ dataInfo.courseEndDate | getMonthDay }}</p>
+        </div>
+
+        <div class="teahcerInfo van-hairline--bottom">
+            <div class="logo">
+                <img v-if="dataInfo.avatar" :src="dataInfo.avatar" alt="">
+                <img v-else src="../../assets/images/app/icon_teacher.png" alt="">
+            </div>
+            <div class="info">
+                <p class="name van-ellipsis">{{ dataInfo.teacherName }}-{{ dataInfo.subjectNames }}</p>
+                <p class="memo van-multi-ellipsis--l2">简介:{{ dataInfo.introduction }}</p>
+                <p class="times">授课次数:{{ dataInfo.lectureNum ? dataInfo.lectureNum : 0 }}次</p>
+            </div>
+        </div>
+
+        <div class="classdetails">
+            <h3>课时安排</h3>
+            <p class="detail"><i class="books"></i>线下课{{ dataInfo.offlineClassesTimes }}次+线上课{{ dataInfo.onlineClassesTimes }}次<span>总{{ dataInfo.totalClassesTimes }}次</span></p>
+
+            <div class="detaillist">
+                <div class="detailitem" v-for="(item, index) in courseList" :key="index">
+                    <span class="time">第{{ ++index }}节</span>
+                    <i class="icon_prossess"></i>
+                    <span class="content">{{ item.classDate | getMonthDay}} {{ item.startClassTime | getHourMinute }}-{{ item.endClassTime | getHourMinute }} {{ item.status == 'FINISH' ? '(已结束)' : '' }}</span>
+                </div>
+            </div>
+        </div>
+
+        <div class="pay_btn" @click="onJoin">确认加入</div>
+    </div>
+</template>
+<script>
+import MHeader from '@/components/MHeader'
+import { browser, getSTD } from '@/common/common'
+import { getGroupDetail, buyCourseGroup } from '@/api/app'
+export default {
+    name: 'classdetail',
+    components: { MHeader },
+    data () {
+        return {
+            dataInfo: {},
+            courseList: []
+        }
+    },
+    mounted() {
+        let params = this.$route.query
+        if(params.Authorization) {
+            localStorage.setItem('Authorization', decodeURI(params.Authorization))
+            localStorage.setItem('userInfo', decodeURI(params.Authorization))
+        }
+        // 判断是否在app里面
+        if(!browser().android && !browser().iPhone) {
+            this.headerStatus = true
+        } else {
+            document.title = 'VIP课堂详情'
+        }
+
+        this.__init()
+    },
+    methods: {
+        __init() {
+            let params = this.$route.query
+            this.$toast.loading({
+                duration: 0,
+                message: '加载中...',
+                forbidClick: true,
+                loadingType: 'spinner'
+            })
+            getGroupDetail({ groupId: params.groupId }).then(res => {
+                let result = res.data
+                this.$toast.clear()
+                if(result.code == 200) {
+                    if(result.data) {
+                        this.dataInfo = result.data
+                        this.courseList = result.data.courseSchedules
+                    }
+                } else {
+                    this.$toast(result.msg)
+                }
+            })
+        },
+        onJoin() {
+            // 
+            let params = this.$route.query
+            this.$dialog.confirm({
+                message: '是否确定加入该课程'
+            }).then(() => {
+                this.$toast.loading({
+                    duration: 0,
+                    message: '加载中...',
+                    forbidClick: true,
+                    loadingType: 'spinner'
+                })
+                buyCourseGroup({ courseGroupId: params.groupId }).then(res => {
+                    let result = res.data
+                    this.$toast.clear()
+                    if(result.code == 200) {
+                        this.$dialog.alert({
+                            message: '恭喜你,加入成功此课程组'
+                        }).then(() => {
+                            this.$router.push('/studentDownLoad')
+                        });
+                    } else {
+                        this.$toast(result.msg)
+                    }
+                })
+            }).catch(() => {
+            // on cancel
+            });
+        }
+    },
+    filters: {
+        getMonthDay(time) {
+            let tempDate = time || new Date()
+            if(typeof(tempDate) == 'string') {
+                tempDate = new Date(time.replace(/-/ig, '/'))
+            }
+            let month = getSTD(tempDate.getMonth() + 1)
+            let day = getSTD(tempDate.getDate())
+            return month + '月' + day + '日'
+        },
+        getHourMinute(time) {
+            let tempDate = time || new Date()
+            if(typeof(tempDate) == 'string') {
+                tempDate = new Date(time.replace(/-/ig, '/'))
+            }
+            let hour = getSTD(tempDate.getHours())
+            let minute = getSTD(tempDate.getMinutes())
+            return hour + ':' + minute
+        }
+    }
+}
+</script>
+<style lang="less" scoped>
+@import url("../../assets/commonLess/variable.less");
+.classdetail {
+    position: relative;
+    background-color: #fff;
+    min-height: 100vh;
+}
+
+.header {
+    padding: .2rem .16rem .15rem;
+    font-size: .14rem;
+    color: #444444;
+    h3 {
+        font-size: .18rem;
+        color: #444444;
+        padding-bottom: .05rem;
+    }
+}
+.teahcerInfo {
+    padding: .16rem;
+    display: flex;
+    align-items: center;
+    p {
+        line-height: 1.2;
+    }
+    .logo {
+        width: .72rem;
+        height: .72rem;
+        margin-right: .16rem;
+        img {
+            border-radius: .04rem;
+            width: .72rem;
+            height: .72rem;
+        }
+    }
+    .info {
+        font-size: .12rem;
+        color: #777777;
+    }
+    .name {
+        display: flex;
+        justify-content: space-between;
+        font-size: .14rem;
+        color: #444444;
+    }
+    .memo {
+        padding: .05rem 0;
+    }
+    .times {
+        color: #F97215;
+    }
+}
+.classdetails {
+    padding: .13rem .16rem;
+    font-size: .14rem;
+    color: #444444;
+    h3 {
+        font-size: .18rem;
+        color: #444444;
+        padding-bottom: .05rem;
+    }
+    .books {
+        display: inline-block;
+        margin-right: .05rem;
+        width: .11rem;
+        height: .11rem;
+        background: url('../../assets/images/app/icon_b.png') no-repeat center center;
+        background-size: contain;
+    }
+
+    .detaillist {
+        margin-top: .12rem;
+        margin-left: .75rem;
+        border-left: 1px solid #B6D3BD;
+    }
+    .detailitem {
+        line-height: 1;
+        padding-bottom: 0.1rem;
+        display: flex;
+        align-items: center;
+        margin-left: -.61rem;
+        .time {
+            width: .45rem;
+        }
+    }
+    .icon_prossess {
+        display: inline-block;
+        width: .16rem;
+        height: .16rem;
+        background: url('../../assets/images/app/icon_step.png') no-repeat center center;
+        background-size: contain;
+        margin: 0 .15rem 0 .08rem;
+    }
+}
+.pay_btn {
+    margin: .25rem .3rem .2rem;
+    background: #14928A;
+    line-height: .45rem;
+    color: #fff;
+    font-size: .18rem;
+    border-radius:.5rem;
+    text-align: center;
+}
+.van-hairline--bottom::after {
+    color: #414141;
+}
+</style>

+ 1 - 0
src/views/app/CourseDetail.vue

@@ -78,6 +78,7 @@
     </div>
 </template>
 <script>
+/* eslint-disable */
 import MHeader from '@/components/MHeader'
 import { getStuAndTeaReview, batchAdd } from '@/api/app'
 import { browser }  from '@/common/common'

+ 2 - 1
src/views/audition/CourseEvaluation.vue

@@ -98,6 +98,7 @@
   </div>
 </template>
 <script>
+/* eslint-disable */
 import {
   getCourseInfoHead,
   courseReviewAdd,
@@ -105,7 +106,7 @@ import {
   updateReviewInfo
 } from "@/api/teacher";
 import { browser } from "@/common/common";
-import MHeader from "@/components/MHeader";
+// import MHeader from "@/components/MHeader";
 export default {
   name: "teacherList",
   data() {

+ 2 - 2
src/views/audition/ManageEvaluation.vue

@@ -124,11 +124,11 @@
   </div>
 </template>
 <script>
-import MEmpty from "@/components/MEmpty";
+// import MEmpty from "@/components/MEmpty";
 import { getPracticeGroup } from "@/api/teacher";
 export default {
   name: "teacherList",
-  components: { MEmpty },
+  // components: { MEmpty },
   data() {
     return {
       str: "2020-01-23 12:12:12",

Неке датотеке нису приказане због велике количине промена