Browse Source

add api course

course
郑锦全 4 years ago
parent
commit
d01a0f4b4d
  1. 2
      src/pages/index/index.vue
  2. 1
      src/store/index.js
  3. 59
      src/subpackage/course/components/manage/bclass_reserve_item/bclass_reserve_item.vue
  4. 32
      src/subpackage/course/components/manage/class_manage_item/class_manage_item.vue
  5. 35
      src/subpackage/course/components/manage/private_reserve_item/private_reserve_item.vue
  6. 32
      src/subpackage/course/components/manage/student_course_item/student_course_item.vue
  7. 17
      src/subpackage/course/components/sclass_record_section/sclass_record_section.vue
  8. 2
      src/subpackage/course/components/store_name/store_name.vue
  9. 11
      src/subpackage/course/components/task_section/task_section.vue
  10. 23
      src/subpackage/course/pages/arrange_class/arrange_class.vue
  11. 24
      src/subpackage/course/pages/class_add_student/class_add_student.vue
  12. 57
      src/subpackage/course/pages/class_student_detail/class_student_detail.vue
  13. 16
      src/subpackage/course/pages/class_time_change/class_time_change.vue
  14. 51
      src/subpackage/course/pages/index/index.vue
  15. 172
      src/subpackage/course/pages/manage_detail/bclass_reserve_detail/bclass_reserve_detail.vue
  16. 247
      src/subpackage/course/pages/manage_detail/class_manage_detail/class_manage_detail.vue
  17. 115
      src/subpackage/course/pages/manage_detail/private_reserve_detail/private_reserve_detail.vue
  18. 153
      src/subpackage/course/pages/manage_detail/student_course_detail/student_course_detail.vue
  19. 200
      src/subpackage/course/pages/manage_list/manage_list.vue
  20. 12
      src/subpackage/course/pages/task_detail/task_detail.vue
  21. 35
      src/subpackage/course/pages/task_finish_list/task_finish_list.vue

2
src/pages/index/index.vue

@ -130,7 +130,7 @@
id: 8,
name: '课程管理',
path: '/subpackage/course/pages/index/index',
serverKey: 1011 //
serverKey: 1011 // 1013
}
];

1
src/store/index.js

@ -29,6 +29,7 @@ export default new Vuex.Store({
'1010': '设备管理',
'1011': '商品零售',
'1012': '订单管理',
'1013': '课程管理',
},
// 场地占用提交页面信息

59
src/subpackage/course/components/manage/bclass_reserve_item/bclass_reserve_item.vue

@ -2,28 +2,39 @@
<!-- 大班约课记录 -->
<view class="bclass-reserve-item" @click="toDetail">
<view class="bri-line">
<view class="bl-store">欧轩智能场馆(羽毛球馆永泰店)</view>
<view class="bl-status" :class="[false?'status-gray':false?'status-red':'']">待上课</view>
<view class="bl-store">{{orderInfo.brand_name ||''}}({{orderInfo.stadium_name||'-'}})</view>
<view class="bl-status" :class="[orderInfo.status_text=='已上课'?'status-gray':orderInfo.status_text=='已取消'?'status-red':'']">{{orderInfo.status_text||'-'}}</view>
</view>
<view class="bri-view">已预约人数<text>3上课区间5-10</text></view>
<view class="bri-view">上课时间<text>2021.06.02周五 14:00-16:00</text></view>
<view class="bri-view">上课地点<text>羽毛球3号场</text></view>
<view class="bri-view">上课教练<text>周扎米</text></view>
<view class="bri-view">课程名称<text>羽毛球培训课</text></view>
<block v-if="false">
<view class="bri-view">取消时间<text>2021.06.03 11:42:50</text></view>
<view class="bri-view">取消原因<text>教练取消大雨停课</text></view>
<view class="bri-view">已预约人数<text>{{orderInfo.bclass_nums||0}}上课区间{{orderInfo.bclass_nums_min||0}}-{{orderInfo.bclass_nums_max||0}}</text></view>
<view class="bri-view">上课时间<text>{{ formatDate({date: orderInfo.date, partition: '.'}) || ''}}{{orderInfo.week||'-'}} {{orderInfo.start_duration||''}}-{{orderInfo.end_duration||''}}</text></view>
<view class="bri-view">上课地点<text>{{orderInfo.addr||''}}</text></view>
<view class="bri-view">上课教练<text>{{orderInfo.coach_name||''}}</text></view>
<view class="bri-view">课程名称<text>{{orderInfo.course_name||''}}</text></view>
<block v-if="orderInfo.status_text=='已取消'">
<view class="bri-view">取消时间<text>{{orderInfo.cancel_time||''}}</text></view>
<view class="bri-view">取消原因<text>{{orderInfo.cancel_reason||''}}</text></view>
</block>
<view class="bri-btn" v-if="true">
<view class="bb-btn1" hover-class="hover-active" @click.stop="">取消上课</view>
<view class="bb-btn2" hover-class="hover-active" @click.stop="">确认上课</view>
<view class="bri-btn" v-if="orderInfo.status_text=='待确认'||orderInfo.status_text=='待上课'">
<view class="bb-btn1" hover-class="hover-active" @click.stop="isCancelClass=true">取消上课</view>
<view class="bb-btn2" hover-class="hover-active" @click.stop="confirmClass" v-if="orderInfo.status_text=='待确认'">确认上课</view>
</view>
<!-- 弹框 取消上课 -->
<cancel-class-modal
v-if="isCancelClass"
@reasonConfirm="reasonConfirm"
@reasonClose="isCancelClass=false"
></cancel-class-modal>
</view>
</template>
<script>
import util from '@/utils/util';
import cancel_class_modal from '../../cancel_class_modal/cancel_class_modal.vue';
export default {
components: {
'cancel-class-modal': cancel_class_modal,
},
props:{
orderInfo: {
type: Object,
@ -35,12 +46,32 @@ export default {
},
data(){
return {
isCancelClass: false,
}
},
methods: {
formatDate: util.formatDate,
toDetail(){
let { orderInfo } = this
util.routeTo(`/subpackage/course/pages/manage_detail/bclass_reserve_detail/bclass_reserve_detail`,'nT');
util.routeTo(`/subpackage/course/pages/manage_detail/bclass_reserve_detail/bclass_reserve_detail?id=${orderInfo.id}`,'nT');
},
//
reasonConfirm(e){
this.isCancelClass = false
let { orderInfo } = this
let _info = {
id: orderInfo.id,
reason: e,
course_kind: orderInfo.course_kind,
}
this.$emit('bclassCancel', _info)
},
//
confirmClass(){
let { orderInfo } = this
this.$emit('bclassConfirm', orderInfo.subscribe_no)
},
},
}

32
src/subpackage/course/components/manage/class_manage_item/class_manage_item.vue

@ -2,25 +2,25 @@
<!-- 班级管理 -->
<view class="class-manage-item" @click="toDetail">
<view class="cmi-line">
<view class="cl-store">欧轩智能场馆(羽毛球馆永泰店)</view>
<view class="cl-status" :class="[false?'status-gray':false?'status-red':'']">进行中</view>
<view class="cl-store">{{orderInfo.barnd_name||''}}({{orderInfo.stadium_name||'-'}})</view>
<view class="cl-status" :class="[orderInfo.sclass_status_text=='已结束'?'status-gray':orderInfo.sclass_status_text=='成班失败'?'status-red':'']">{{orderInfo.sclass_status_text||'-'}}</view>
</view>
<block v-if="true">
<view class="cmi-view">课程名称<text>羽毛球培训课</text></view>
<view class="cmi-view">班级id<text>2-3</text></view>
<view class="cmi-view">成班人数区间<text>2-6</text></view>
<view class="cmi-view">已报名人数<text>2</text></view>
<view class="cmi-view">报名截止时间<text>2020.12.27 22:55:56</text></view>
<block v-if="orderInfo.sclass_status_text=='成班中'||orderInfo.sclass_status_text=='成班失败'">
<view class="cmi-view">课程名称<text>{{orderInfo.course_name||''}}</text></view>
<view class="cmi-view">班级id<text>{{orderInfo.sclass_no||''}}</text></view>
<view class="cmi-view">成班人数区间<text>{{orderInfo.sclass_min_nums||0}}-{{orderInfo.sclass_max_nums||0}}</text></view>
<view class="cmi-view">已报名人数<text>{{orderInfo.sclass_nums||0}}</text></view>
<view class="cmi-view">报名截止时间<text>{{orderInfo.sclass_join_deadline||''}}</text></view>
</block>
<block v-if="false">
<view class="cmi-view">班级名称<text>冲锋班</text></view>
<view class="cmi-view">班级人数<text>20</text></view>
<view class="cmi-view">上课教练<text>何其多</text></view>
<view class="cmi-view">上课地点<text>欧轩智能场馆3号馆</text></view>
<view class="cmi-view">课程日期<text>2021.08.08-2021.10.10</text></view>
<view class="cmi-view">课程名称<text>羽毛球培训课</text></view>
<block v-if="orderInfo.sclass_status_text=='进行中'||orderInfo.sclass_status_text=='已结束'">
<view class="cmi-view">班级名称<text>{{orderInfo.sclass_name||''}}</text></view>
<view class="cmi-view">班级人数<text>{{orderInfo.sclass_nums||0}}</text></view>
<view class="cmi-view">上课教练<text>{{orderInfo.sclass_coach||''}}</text></view>
<view class="cmi-view">上课地点<text>{{orderInfo.sclass_addr||''}}</text></view>
<view class="cmi-view">课程日期<text>{{orderInfo.sclass_stime||''}}-{{orderInfo.sclass_etime||''}}</text></view>
<view class="cmi-view">课程名称<text>{{orderInfo.course_name||''}}</text></view>
</block>
</view>
@ -45,7 +45,7 @@ export default {
methods: {
toDetail(){
let { orderInfo } = this
util.routeTo(`/subpackage/course/pages/manage_detail/class_manage_detail/class_manage_detail`,'nT');
util.routeTo(`/subpackage/course/pages/manage_detail/class_manage_detail/class_manage_detail?id=${orderInfo.id}`,'nT');
},
},
}

35
src/subpackage/course/components/manage/private_reserve_item/private_reserve_item.vue

@ -2,20 +2,25 @@
<!-- 私教约课记录 -->
<view class="private-reserve-item" @click="toDetail">
<view class="pri-line">
<view class="pl-store">欧轩智能场馆(羽毛球馆永泰店)</view>
<view class="pl-status" :class="[false?'status-gray':false?'status-red':'']">待上课</view>
<view class="pl-store">{{orderInfo.brand_name||''}}({{orderInfo.stadium_name||'-'}})</view>
<view class="pl-status" :class="[orderInfo.status_text=='已上课'?'status-gray':orderInfo.status_text=='已取消'?'status-red':'']">{{orderInfo.status_text||'-'}}</view>
</view>
<view class="pri-view">学员信息<text>张安 18316536894</text></view>
<view class="pri-view">上课时间<text>2021.06.02周五 14:00-16:00</text></view>
<view class="pri-view">上课地点<text>羽毛球3号场</text></view>
<view class="pri-view">上课教练<text>张夏欧</text></view>
<view class="pri-view">课程名称<text>羽毛球培训课</text></view>
<view class="pri-btn" v-if="true">
<view class="pri-view">学员信息<text>{{orderInfo.student_name||'-'}}{{orderInfo.student_gender||'-'}} {{orderInfo.student_phone||''}}</text></view>
<view class="pri-view">上课时间<text>{{ formatDate({date: orderInfo.date, partition: '.'}) || ''}}{{orderInfo.week||'-'}} {{orderInfo.start_duration||''}}-{{orderInfo.end_duration||''}}</text></view>
<view class="pri-view">上课地点<text>{{orderInfo.addr||''}}</text></view>
<view class="pri-view">上课教练<text>{{orderInfo.coach_name||''}}</text></view>
<view class="pri-view">课程名称<text>{{orderInfo.course_name||''}}</text></view>
<block v-if="orderInfo.status_text=='已取消'">
<view class="pri-view">取消时间<text>{{orderInfo.cancel_time||''}}</text></view>
<view class="pri-view">取消原因<text>{{orderInfo.cancel_reason||''}}</text></view>
</block>
<view class="pri-btn" v-if="orderInfo.status_text=='待上课'">
<view hover-class="hover-active" @click.stop="isCancelClass=true">取消上课</view>
</view>
<cancel-class-modal
v-if="isCancelClass"
@reasonConfirm="reasonConfirm"
@reasonClose="isCancelClass=false"
></cancel-class-modal>
</view>
@ -43,9 +48,21 @@ export default {
}
},
methods: {
formatDate: util.formatDate,
toDetail(){
let { orderInfo } = this
util.routeTo(`/subpackage/course/pages/manage_detail/private_reserve_detail/private_reserve_detail`,'nT');
util.routeTo(`/subpackage/course/pages/manage_detail/private_reserve_detail/private_reserve_detail?id=${orderInfo.id}`,'nT');
},
reasonConfirm(e){
this.isCancelClass = false
let { orderInfo } = this
let _info = {
subscribe_no: orderInfo.subscribe_no,
reason: e,
course_kind: orderInfo.course_kind,
}
this.$emit('priclassCancel', _info)
},
},
}

32
src/subpackage/course/components/manage/student_course_item/student_course_item.vue

@ -1,13 +1,13 @@
<template>
<!-- 学员课程 -->
<view class="student-course-item" @click="toDetail">
<view class="sci-status" :class="[false?'status-gray':false?'status-red':'']">进行中</view>
<view class="sci-view">学员信息<text>张安 18316536894</text></view>
<view class="sci-view">剩余课时<text>10课时 2/12)</text></view>
<view class="sci-view">课程名称<text>羽毛球培训课</text></view>
<view class="sci-view">有效期至<text>2020.12.27</text></view>
<view class="sci-view">课程类型<text>私教课</text></view>
<view class="sci-view">上课教练<text>一级教练</text></view>
<view class="sci-status" :class="[orderInfo.order_status==2?'status-gray':orderInfo.order_status==3?'status-red':'']">{{zh_order_status()}}</view>
<view class="sci-view">学员信息<text>{{orderInfo.student_name || '-'}}{{orderInfo.student_gender||'-'}} {{orderInfo.student_phone||''}}</text></view>
<view class="sci-view">剩余课时<text>{{orderInfo.period_nums_surplus||0}}课时 {{orderInfo.period_nums_use||0}}/{{orderInfo.period_nums||0}})</text></view>
<view class="sci-view">课程名称<text>{{orderInfo.course_name||''}}</text></view>
<view class="sci-view">有效期至<text>{{ formatDate({date: orderInfo.course_end, partition: '.'}) || ''}}</text></view>
<view class="sci-view">课程类型<text>{{orderInfo.course_kind||''}}</text></view>
<view class="sci-view" v-if="orderInfo.course_kind!='成班课'">上课教练<text>{{orderInfo.course_coach||''}}</text></view>
</view>
</template>
@ -28,11 +28,25 @@ export default {
}
},
methods: {
formatDate: util.formatDate,
zh_order_status(){
let { orderInfo } = this
if(orderInfo.order_status==2)return "已结束";
if(orderInfo.order_status==3)return "已退款";
if(orderInfo.sclass_status){
if(orderInfo.sclass_status==0)return "成班中";
if(orderInfo.sclass_status==1)return "进行中";
if(orderInfo.sclass_status==2)return "已结束";
if(orderInfo.sclass_status==3)return "成班失败";
if(orderInfo.sclass_status==4)return "已退款";
}
return "进行中";
},
toDetail(){
// this.$emit('closeChange')
let { orderInfo } = this
// ?query=${util.jsonStr(_query)}
util.routeTo(`/subpackage/course/pages/manage_detail/student_course_detail/student_course_detail`,'nT');
util.routeTo(`/subpackage/course/pages/manage_detail/student_course_detail/student_course_detail?order_no=${orderInfo.order_no}`,'nT');
},
},
}

17
src/subpackage/course/components/sclass_record_section/sclass_record_section.vue

@ -5,15 +5,14 @@
<view>上课时间</view>
<view>考勤状态</view>
</view>
<view class="cds-list" v-for="(e,i) in 6" :key="i">
<view class="cds-list" v-for="(e,i) in recordInfo" :key="i">
<view class="cl-item">
<view>{{ i+1|| '-'}}</view>
<!-- <view>{{formatDate({date: e.period_date, partition: '.'}) ||'-'}}{{`${' '+e.period_start_time || ''}-${e.period_end_time || ''}` ||''}}</view> -->
<view>2021.06.01 10:00-12:00</view>
<view>{{ e.user_lesson|| '-'}}</view>
<view>{{e.period_date!=''?formatDate({date: e.period_date, partition: '.'}) :'-'}}{{`${' '+e.period_start_time || ''}-${e.period_end_time || ''}` ||''}}</view>
<view
:class="[e.user_status==0?'ci-txt-green':
e.user_status==4?'ci-txt-red':'']"
>{{ '正常'||zh_status(e.user_status)}}</view>
>{{ zh_status(e.user_status)}}</view>
</view>
</view>
</view>
@ -23,9 +22,11 @@
import util from '@/utils/util';
export default {
props:{
orderInfo: {
type: Object,
default: ()=>({})
recordInfo: {
type: Array,
default() {
return [];
}
},
},
computed: {

2
src/subpackage/course/components/store_name/store_name.vue

@ -28,7 +28,7 @@ export default {
},
props: ["theme"],//, "light":
created() {
console.log("store_name theme: ", this.theme);
// console.log("store_name theme: ", this.theme);
},
methods: {
storeChange(e){

11
src/subpackage/course/components/task_section/task_section.vue

@ -3,10 +3,9 @@
<view class="ts-list" v-for="(e,i) in taskList" :key="i">
<view class="tl-item">
<view class="ti-line">
<!-- {{formatDate({date: e.created_at}) || '-'}} -->
<view>2020-09-08</view>
<view v-if="taskType==''" :class="[true?'status-red':'status-gray']">未完成</view>
<view v-if="taskType=='finish'" class="status-gray">完成情况0/10</view>
<view>{{e.created_at!=''?formatDate({date: e.created_at}) : '-'}}</view>
<view v-if="taskType==''" :class="[e.work_status==0?'status-red':'status-gray']">{{e.work_status==0?'未完成':e.work_status==1?'已完成':'-'}}</view>
<view v-if="taskType=='finish'" class="status-gray">完成情况{{e.complete_nums||0}}/{{e.total_nums||0}}</view>
</view>
<view class="ti-desc" :class="e.expande?'desc-omit':''" :id="'noname'+i">
@ -110,8 +109,8 @@ export default {
// created_at: item.created_at,
// }
if(this.taskType == 'finish')return util.routeTo(`/subpackage/course/pages/task_finish_list/task_finish_list`,'nT');;
util.routeTo(`/subpackage/course/pages/task_detail/task_detail`,'nT');
if(this.taskType == 'finish')return util.routeTo(`/subpackage/course/pages/task_finish_list/task_finish_list?work_number=${item.work_number}`,'nT');;
util.routeTo(`/subpackage/course/pages/task_detail/task_detail?id=${item.id}`,'nT');
},
// toTaskDetail(item){

23
src/subpackage/course/pages/arrange_class/arrange_class.vue

@ -5,8 +5,8 @@
<view>课程名称{{pageInfo.course_name || '-'}}</view>
<view>上课教练{{pageInfo.course_coach || '-'}}</view>
<view>
<text>学员信息{{pageInfo.student_name || ''}}{{pageInfo.student_gender!=''?`${pageInfo.student_gender||''}`:''}} {{userInfo.type==2?(' '+pageInfo.student_phone) : ''}}</text>
<image v-if="userInfo.type==2" src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
<text>学员信息{{pageInfo.student_name || ''}}{{pageInfo.student_gender!=''?`${pageInfo.student_gender||''}`:''}} {{' '+(pageInfo.student_phone||'')}}</text>
<image src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
</view>
<view>剩余课时{{pageInfo.period_nums_surplus || 0}} {{pageInfo.period_nums || 0}})</view>
</view>
@ -26,7 +26,8 @@
<!-- 上课日期 -->
<view class="as-line">
<view class="al-txt"><text>*</text>上课日期</view>
<picker class="al-picker" mode="date" :value="submitInfo.date" :start="startDate" :end="endDate" @change="bindDateChange" >
<!-- :start="startDate" :end="endDate" -->
<picker class="al-picker" mode="date" :value="submitInfo.date" @change="bindDateChange" >
<view class="al-view al-date">
<view class="ad-txt">{{submitInfo.date}}</view>
<view class="ad-img">
@ -73,9 +74,11 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
export default {
computed: {
...mapState([ 'brandInfo',]),
startDate() {
return this.getDate('start');
},
@ -131,7 +134,7 @@ export default {
async onLoad(options){
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
// this.getStuInfo(options.order_no)
this.getStuInfo(options.order_no)
},
methods: {
getDate(type) {
@ -215,7 +218,7 @@ export default {
if(pageInfo.is_booking_venue == true)_data["venue_id"] = venue_id; //ID
util.showLoad();
boxServer.get({
url: BOX_API.student.arrangeStudentAc, //[]
url: BOX_API.arrangeStuAc, //[]
data: _data,
failMsg: '加载失败!'
})
@ -228,10 +231,12 @@ export default {
// -
getStuInfo(order_no){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.student.stuInfo,
url: BOX_API.stuInfo,
data: {
brand_id: brandInfo.brand.id,
order_no,
},
failMsg: '加载失败!'
@ -246,10 +251,12 @@ export default {
// [] -
getArrangeAcCoach(order_no){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.student.arrangeStudentAcCoach,
url: BOX_API.arrangeStuAcCoach,
data: {
brand_id: brandInfo.brand.id,
order_no,
},
failMsg: '加载失败!'

24
src/subpackage/course/pages/class_add_student/class_add_student.vue

@ -7,8 +7,7 @@
</view>
</view>
<view class="as-name">课程名称{{pageInfo.course_name||'-'}}</view>
<!-- studentList -->
<view class="as-list" v-for="(e,i) in 3" :key="i">
<view class="as-list" v-for="(e,i) in studentList" :key="i">
<view class="al-item" @click="itemChange(e,i)">
<image :class="[submitInfo.order_no==e.order_no?'ai-img':'ai-icon']" :src="submitInfo.order_no==e.order_no?'/static/images/icon/selected_987.png':''"></image>
<view class="ai-info">
@ -18,7 +17,7 @@
</view>
</view>
<view class="as-fixed">
<view hover-class="hover-active" @click="btnChange(1)">确认添加学员</view>
<view hover-class="hover-active" @click="btnChange()">确认添加学员</view>
</view>
</view>
</template>
@ -26,10 +25,11 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
export default {
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
@ -45,8 +45,8 @@ export default {
}
},
onLoad(options) {
// this.submitInfo.subscribe_no = options.subscribe_no
// this.getSubStudent(options.subscribe_no)
this.submitInfo.subscribe_no = options.subscribe_no
this.getSubStudent(options.subscribe_no)
},
methods: {
//
@ -58,7 +58,7 @@ export default {
itemChange(info){
this.submitInfo.order_no = info.order_no
},
btnChange(type){
btnChange(){
if(this.submitInfo.order_no=='')return util.showNone('请选择需要添加的学员!');
util.showModal({
title: '是否确认添加学员上课?',
@ -74,11 +74,13 @@ export default {
//
getSubAdd(){
let { brandInfo } = this
let { order_no, subscribe_no} = this.submitInfo
util.showLoad();
boxServer.get({
url: BOX_API.appointment.subAdd,
url: BOX_API.bclassStuAdd,
data: {
brand_id: brandInfo.brand.id,
order_no,
subscribe_no,
},
@ -99,10 +101,12 @@ export default {
//
getSubStudent(subscribe_no){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.appointment.subStudent,
url: BOX_API.bclassStus,
data: {
brand_id: brandInfo.brand.id,
subscribe_no,
},
failMsg: '加载失败!'

57
src/subpackage/course/pages/class_student_detail/class_student_detail.vue

@ -8,14 +8,14 @@
<image src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
</view>
<view class="cs-view">剩余课时{{pageInfo.course_period_residue ||0}}课时 {{pageInfo.course_period_nums_use||0}}/{{pageInfo.course_period_nums||0}})</view>
<view class="cs-end">
<view class="cs-end" v-if="pageInfo.order_status==0||pageInfo.order_status==1">
<!-- 只有教务才有 -->
<view class="ce-btn1" hover-class="hover-active" @click="isShowClass=true">转班</view>
<view class="ce-btn1" hover-class="hover-active" @click="isShowClass=true" >转班</view>
</view>
</view>
<view class="csd-record">
<view class="cr-tit">上课记录</view>
<sclass-record-section ></sclass-record-section>
<sclass-record-section :recordInfo="pageInfo.student_period_time"></sclass-record-section>
</view>
<!-- 转班弹框 -->
<class-reset-modal
@ -31,7 +31,8 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
import class_reset_modal from '../../components/class_reset_modal/class_reset_modal.vue';
import sclass_record_section from '../../components/sclass_record_section/sclass_record_section.vue';
export default {
@ -40,7 +41,7 @@ export default {
'sclass-record-section': sclass_record_section,
},
computed: {
...mapState([ 'brandInfo',]),
},
data() {
return {
@ -51,13 +52,13 @@ export default {
}
},
async onLoad(options){
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
// this.$nextTick(_=>{
// })
let _query = util.jsonPar(options.query);
this.pageInfo = _query
this.$nextTick(_=>{
this.getCanlist(this.pageInfo.course_id);
})
},
methods: {
formatDate: util.formatDate,
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
@ -71,32 +72,14 @@ export default {
})
},
zh_status(status){
let arr = ["待上课","已上课","申请请假中","已请假","缺勤"]
return arr[status] || '';
},
//
toAppraise(){
let { pageInfo } = this
let _query = {
course_kind: "成班课",
course_name: pageInfo.course_name,
student_name: pageInfo.student_name,
student_gender: pageInfo.student_gender,
student_phone: pageInfo.student_phone,
sclass_name: pageInfo.sclass_name,
sclass_nums: pageInfo.sclass_nums,
}
util.routeTo(`/subpackage/manage/pages/appointment/appraise/appraise?order_no=${pageInfo.order_no}&query=${util.jsonStr(_query)}`,'nT');
},
//
confirmReset(e){
let { pageInfo } = this
let { brandInfo, pageInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.class.reset,
url: BOX_API.resetStuSclass,
data: {
brand_id: brandInfo.brand.id,
old_id: pageInfo.sclass_id,
new_id: e.new_id,
user_id: pageInfo.user_id,
@ -107,16 +90,24 @@ export default {
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{uni.navigateBack({delta:2})}, 1200)
setTimeout(_=>{
uni.navigateBack({delta:2})
util.previousPageFunction({
fnName: 'refreshList',
query: { isLoad: false},
});
}, 1200)
})
},
//
getCanlist(course_id){
let { brandInfo, pageInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.class.canlist,
url: BOX_API.stuCanChangeSclass,
data: {
brand_id: brandInfo.brand.id,
course_id,
},
failMsg: '加载失败!'

16
src/subpackage/course/pages/class_time_change/class_time_change.vue

@ -9,7 +9,8 @@
<view class="cs-tit">{{pageInfo.lesson_no|| 0}}</view>
<view class="cs-line">
<view class="cl-txt"><text>*</text>上课日期</view>
<picker class="cl-picker" mode="date" :value="pageInfo.period_date" :start="startDate" :end="endDate" @change="bindDateChange" >
<!-- :start="startDate" :end="endDate" -->
<picker class="cl-picker" mode="date" :value="pageInfo.period_date" @change="bindDateChange" >
<view class="cl-box">
<view class="cb-txt">{{pageInfo.period_date}}</view>
<view class="cb-img">
@ -44,9 +45,11 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
export default {
computed: {
...mapState([ 'brandInfo',]),
startDate() {
return this.getDate('start');
},
@ -71,8 +74,8 @@ export default {
}
},
onLoad(options){
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
let _query = util.jsonPar(options.query);
this.pageInfo = _query
},
methods: {
getDate(type) {
@ -109,7 +112,7 @@ export default {
//
sclassTimeChange(){
let { pageInfo } = this
let { pageInfo, brandInfo } = this
if(pageInfo.period_date==''|| pageInfo.period_start_time==''|| pageInfo.period_end_time=='')return util.showNone("请完善必选项!");
let nowTime = util.formatDate(new Date(),'-') // 2020-07-21
if(new Date(nowTime).getTime() > new Date(pageInfo.period_date).getTime())return util.showNone("上课日期不能小于当前系统日期!");
@ -118,8 +121,9 @@ export default {
this.$emit('closeChange')
util.showLoad();
boxServer.get({
url: BOX_API.schedule.sclassTimeChange,
url: BOX_API.sclassTimeChange,
data: {
brand_id: brandInfo.brand.id,
id: pageInfo.sclass_id,
lesson_no: pageInfo.lesson_no,
period_date: pageInfo.period_date,

51
src/subpackage/course/pages/index/index.vue

@ -8,23 +8,23 @@
<view class="ib-line">
<view class="il-view">
<view>进行中</view>
<view>20</view>
<view>{{pageInfo.ongoing_nums || 0}}</view>
</view>
<view class="il-cut"></view>
<view class="il-view">
<view>已结束</view>
<view>10</view>
<view>{{pageInfo.ended_nums || 0}}</view>
</view>
</view>
<view class="ib-line">
<view class="il-view">
<view>今日待上课</view>
<view>6</view>
<view>{{pageInfo.dsk_nums || 0}}</view>
</view>
<view class="il-cut"></view>
<view class="il-view">
<view>今日已上课</view>
<view>3</view>
<view>{{pageInfo.ysk_nums || 0}}</view>
</view>
</view>
</view>
@ -58,22 +58,19 @@ const tabList = [
{
id: 0,
name: "学员课程",
path: "/subpackage/course/pages/manage_list/manage_list",
// path: "/subpackage/course/pages/manage_list/manage_list",
},
{
id: 1,
name: "私教课上课记录",
path: "",
},
{
id: 2,
name: "大班上课记录",
path: "",
},
{
id: 3,
name: "班级管理",
path: "",
},
],
},
@ -83,26 +80,42 @@ export default {
'store-name': store_name
},
computed:{
...mapState([ 'brandInfo', 'storeInfo' ]),
...mapState([ 'brandInfo',]),
...mapState({
curStoreInfo: state => state.device.curStoreInfo,
}),
},
watch: {
curStoreInfo(newVal, oldVal) {
this.pageInfo = {};
this.getCourseHome({
stadium_id: newVal.id,
})
}
},
data() {
return {
tabList,
pageInfo: {},
isShowAgain: false,
}
},
async onLoad(){
// console.log("",this.brandInfo)
// this.getCourseHome();
// console.log("",this.brandInfo)
try{
util.showLoad();
let _brandInfo = await this.$store.dispatch('getBrandInfo');
await this.$store.dispatch('getStoreList');
// this.getCourseHome();
this.getCourseHome({
stadium_id: this.curStoreInfo.id,
})
util.hideLoad();
}catch(err){
util.hideLoad();
}
},
onShow() {
if(this.isShowAgain)this.getCourseHome({stadium_id: this.curStoreInfo.id,});
},
methods: {
tabChange(id1,id2){
@ -111,24 +124,24 @@ export default {
util.routeTo(`/subpackage/course/pages/manage_list/manage_list?type_id=${_type_id}`,'nT')
},
getCourseHome(){
getCourseHome({stadium_id}){
let { brandInfo } = this
util.showLoad();
// util.showLoad();
boxServer.get({
url: BOX_API.courseHome,
data: {
brand_id: brandInfo.brand.id,
stadium_id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
// this.pageInfo = res
// console.log("",res)
// util.hideLoad();
this.pageInfo = res
this.isShowAgain = true
})
.catch(util.hideLoad)
},
}
}

172
src/subpackage/course/pages/manage_detail/bclass_reserve_detail/bclass_reserve_detail.vue

@ -1,59 +1,66 @@
<template>
<view class="bclass-reserve-detail">
<view class="brd-line">
<view>欧轩智能场馆(羽毛球馆永泰店)</view>
<view :class="[false?'bl-gray':false?'bl-red':'bl-green']">待上课</view>
<view>{{pageInfo.brand_name||''}}({{pageInfo.stadium_name||'-'}})</view>
<view :class="[pageInfo.status_text=='已上课'?'bl-gray':pageInfo.status_text=='已取消'?'bl-red':'bl-green']">{{pageInfo.status_text||'-'}}</view>
</view>
<view class="brd-section">
<view>预约单号<text>yy202106031256568595</text></view>
<view>预约时间<text>2021.06.03 11:42:50 </text></view>
<view>预约单号<text>{{pageInfo.subscribe_no||''}}</text></view>
<view>预约时间<text>{{pageInfo.subscribe_at||''}} </text></view>
<!-- 已取消才显示 -->
<block v-if="false">
<view>取消时间<text>2021.06.03 11:42:50</text></view>
<view>取消原因<text>学员取消有事请假</text></view>
<block v-if="pageInfo.status_text=='已取消'">
<view>取消时间<text>{{pageInfo.cancel_time||''}}</text></view>
<view>取消原因<text>{{pageInfo.cancel_reason||''}}</text></view>
</block>
</view>
<view class="brd-section">
<view>上课信息</view>
<view>上课时间<text>2021.06.02周五 14:00-16:00</text></view>
<view>上课地点<text>羽毛球3号场</text></view>
<view>上课教练<text>张瀚</text></view>
<view>课程名称<text>羽毛球培训课</text></view>
<view>课程类型<text>大班课</text></view>
<view>上课时间<text>{{pageInfo.date||''}}{{pageInfo.week||''}} {{pageInfo.start_duration||''}}-{{pageInfo.end_duration||''}}</text></view>
<view>上课地点<text>{{pageInfo.addr||''}}</text></view>
<view>上课教练<text>{{pageInfo.coach_name||''}}</text></view>
<view>课程名称<text>{{pageInfo.course_name||''}}</text></view>
<view>课程类型<text>{{pageInfo.course_kind||''}}</text></view>
</view>
<view class="brd-stu">
<view class="bs-tit">学员信息</view>
<view class="bs-line">
<view>已预约人数3<text>上课区间5-10</text></view>
<view>已预约人数{{pageInfo.bclass_nums||0}}<text>上课区间{{pageInfo.bclass_nums_min||0}}-{{pageInfo.bclass_nums_max||0}}</text></view>
<!-- 待确认待上课才显示 -->
<view v-if="true" @click="toAddStu">添加学员</view>
<view v-if="pageInfo.status_text=='待确认'||pageInfo.status_text=='待上课'" @click="toAddStu">添加学员</view>
</view>
<view class="bs-list" v-for="i in 3" :key="i">
<view class="bs-list" v-for="(e,i) in pageInfo.students" :key="i">
<view class="bl-item">
<view class="bi-info">
<view>熊启()
<text>18096895331</text>
<image src="/subpackage/course/static/images/icon/phone.png"></image>
<view>{{e.student_name||'-'}}({{e.student_gender||'-'}})
<block v-if="e.student_phone!=''">
<text>{{e.student_phone||'-'}}</text>
<image src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(e.student_phone)"></image>
</block>
</view>
<view>预约时间2020.12.27 22:55:56</view>
<view>预约时间{{e.subscribe_at||''}}</view>
</view>
<!-- 待确认待上课才显示 -->
<view class="bi-btn" hover-class="hover-active" v-if="true">取消上课</view>
<view
class="bi-btn"
hover-class="hover-active"
v-if="pageInfo.status_text=='待确认'||pageInfo.status_text=='待上课'"
@click="cancelClassStuChange(1,e)"
>取消上课</view>
</view>
</view>
</view>
<!-- 待确认待上课才显示 -->
<view class="brd-fixed" v-if="true">
<view class="brd-fixed" v-if="pageInfo.status_text=='待确认'||pageInfo.status_text=='待上课'">
<view class="bf-line">
<view class="bl-btn1" hover-class="hover-active" @click="isCancelClass=true">取消上课</view>
<!-- v-if="pageInfo.status_text=='待确认'" -->
<view class="bl-btn2" hover-class="hover-active" >确认上课</view>
<view class="bl-btn1" hover-class="hover-active" @click="cancelClassChange(0)">取消上课</view>
<view class="bl-btn2" hover-class="hover-active" v-if="pageInfo.status_text=='待确认'">确认上课</view>
</view>
</view>
<cancel-class-modal
v-if="isCancelClass"
@reasonConfirm="reasonConfirm"
@reasonClose="isCancelClass=false"
></cancel-class-modal>
</view>
@ -62,20 +69,133 @@
<script>
import util from '@/utils/util';
import boxServer from '../../../js/course_server';
import { BOX_API } from '../../../js/course_api';
import BOX_API from '../../../js/course_api';
import { mapState } from 'vuex';
import cancel_class_modal from '../../../components/cancel_class_modal/cancel_class_modal.vue';
export default {
components: {
'cancel-class-modal': cancel_class_modal,
},
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
isCancelClass: false,
pageInfo: {},
cancelType: "",
submitInfo: {
type: "", // 0 1
id: -1,
subscribe_no: "",
},
}
},
onLoad(options) {
this.submitInfo.id = options.id
this.getDetail(options.id)
},
methods: {
getDetail(id){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.subscribeInfo,
data: {
brand_id: brandInfo.brand.id,
id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.pageInfo = res
})
},
refreshList(){
let { submitInfo } = this
this.getDetail(submitInfo.id)
},
toAddStu(){
util.routeTo(`/subpackage/course/pages/class_add_student/class_add_student`,'nT');
let { pageInfo } = this
util.routeTo(`/subpackage/course/pages/class_add_student/class_add_student?subscribe_no=${pageInfo.subscribe_no}`,'nT');
},
// -
cancelClassChange(type){
this.submitInfo.type = type
this.isCancelClass = true
},
// -
cancelClassStuChange(type,info){
this.submitInfo.type = type
this.submitInfo.subscribe_no = info.student_no
this.isCancelClass = true
},
reasonConfirm(e){
this.isCancelClass = false
let { submitInfo } = this
if(submitInfo.type == 0){
this.getCancelPabAc({
id: submitInfo.id,
reason: e,
})
return;
}
if(submitInfo.type == 1){
this.getCancelPabAc({
subscribe_no: submitInfo.subscribe_no,
reason: e,
})
return;
}
},
// [/]
getCancelPabAc({subscribe_no, id, reason}){
let { brandInfo, submitInfo } = this
let _data = {
brand_id: brandInfo.brand.id,
reason, //
}
if(submitInfo.type == 0)_data["id"] = id;
if(submitInfo.type == 1)_data["subscribe_no"] = subscribe_no;
util.showLoad();
boxServer.get({
url: submitInfo.type == 0? BOX_API.cancelBclassAc:submitInfo.type == 1? BOX_API.cancelStuAc:'',
data: _data,
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{
this.refreshList()
util.previousPageFunction({
fnName: 'refreshList',
query: { isLoad: false},
});
}, 1200)
})
},
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
uni.showActionSheet({
itemList: _phoneArr,
success: res =>{
uni.makePhoneCall({
phoneNumber: _phoneArr[res.tapIndex]
})
}
})
},
}
}

247
src/subpackage/course/pages/manage_detail/class_manage_detail/class_manage_detail.vue

@ -6,77 +6,78 @@
<!-- 班级详情 -->
<block v-if="curTabID==0">
<view class="cmd-status">课程状态<text :class="[false?'cs-gray':false?'cs-red':'cs-green']">成班中</text></view>
<view class="cmd-status">课程状态<text :class="[pageInfo.sclass_status==2?'cs-gray':pageInfo.sclass_status==3?'cs-red':'cs-green']">{{zh_sclass_status(pageInfo.sclass_status)||'-'}}</text></view>
<view class="cmd-section">
<view>课程信息</view>
<view>欧轩智能羽毛球馆番禺店</view>
<view><text>课程名称</text>羽毛球培训课</view>
<view><text>课程课时数量</text>10节课</view>
<view><text>课时时长</text>1小时</view>
<view><text>课程有效期</text>2021.06.30-2021.09.30</view>
<view>{{pageInfo.brand_name||''}}{{pageInfo.stadium_name||'-'}}</view>
<view><text>课程名称</text>{{pageInfo.course_name||''}}</view>
<view><text>课程课时数量</text>{{pageInfo.course_number ||0}}节课</view>
<view><text>课时时长</text>{{pageInfo.course_time_length}}分钟</view>
<view><text>课程有效期</text>{{pageInfo.course_valid_period||''}}</view>
<!-- 成班中失败 -->
<block v-if="true">
<view><text>成班区间人数</text>2-6</view>
<view><text>报名截止时间</text>2021.07.12 23:50:50</view>
<block v-if="pageInfo.sclass_status==0||pageInfo.sclass_status==3">
<view><text>成班区间人数</text>{{pageInfo.sclass_min_nums||''}}-{{pageInfo.sclass_max_nums||''}}</view>
<view><text>报名截止时间</text>{{pageInfo.sclass_join_deadline||''}}</view>
</block>
</view>
<view class="cmd-section">
<view>班级信息</view>
<view><text>班级id</text>2-3</view>
<view><text>班级名称</text></view>
<view><text>班级人数</text>20</view>
<view><text>上课教练</text></view>
<view><text>上课地点</text></view>
<view><text>课程日期</text></view>
<view><text>班级id</text>{{pageInfo.sclass_number||''}}</view>
<view><text>班级名称</text>{{pageInfo.sclass_name||''}}</view>
<view><text>班级人数</text>{{pageInfo.sclass_nums||''}}</view>
<view><text>上课教练</text>{{pageInfo.sclass_coach||''}}</view>
<view><text>上课地点</text>{{pageInfo.sclass_addr||''}}</view>
<view><text>课程日期</text>{{pageInfo.sclass_date||''}}</view>
</view>
<view class="cmd-fixed">
<view class="cmd-fixed" v-if="pageInfo.sclass_status==0">
<view hover-class="hover-active" @click="confirmClass()">确认成班</view>
</view>
</block>
<!-- 班级学员 -->
<view class="cmd-stu" v-for="(item,i) in 3" :key="i" v-if="curTabID==1">
<view class="cs-item" @click="toStuDetail()">
<view class="cmd-stu" v-for="(e,i) in pageInfo.students" :key="i" v-if="curTabID==1">
<view class="cs-item" @click="toStuDetail(e)">
<view class="ci-line">
<view>张安
<text>18316536894</text>
<image src="/subpackage/course/static/images/icon/phone.png"></image>
<view>{{e.student_name||'-'}}{{e.student_gender||'-'}}
<block v-if="e.student_phone!=''">
<text>{{e.student_phone||'-'}}</text>
<image src="/subpackage/course/static/images/icon/phone.png" @click.stop="phoneCall(e.student_phone)"></image>
</block>
</view>
<image src="/subpackage/course/static/images/icon/arrow_black.png"></image>
</view>
<view class="ci-view">剩余课时10 12)</view>
<view class="ci-view"><text>有效期2020.12.27 22:55:56</text></view>
<view class="ci-btn">
<view hover-class="hover-active" @click.stop="isShowClass=true">转班</view>
<view class="ci-view">剩余课时{{e.course_period_residue||0}} {{e.course_period_nums||0}})</view>
<view class="ci-view"><text>有效期{{e.end_at || ''}}</text></view>
<view class="ci-btn" v-if="e.order_status==0||e.order_status==1">
<view hover-class="hover-active" @click.stop="resetBtn(e)" >转班</view>
</view>
</view>
</view>
<!-- 上课表 -->
<view class="cmd-schedule" v-if="curTabID==2">
<block v-if="true">
<block v-if="pageInfo.sclass_period_time.length > 0">
<view class="cs-tab">
<view>课时</view>
<view>上课时间</view>
<view>上课状态</view>
<view>操作</view>
</view>
<view class="cs-list" v-for="(e,i) in 6" :key="i">
<view class="cs-list" v-for="(e,i) in pageInfo.sclass_period_time" :key="i">
<view class="cl-item">
<view>{{e.lesson_no|| '-'}}</view>
<!-- ${formatDate({date: e.period_date, partition: '.'}) ||'-'} -->
<view>{{`${' '+e.period_start_time || ''}-${e.period_end_time || ''}`}}</view>
<view>{{e.period_date!=''?formatDate({date: e.period_date, partition: '.'}):'-'}}{{`${' '+e.period_start_time || ''}-${e.period_end_time || ''}`}}</view>
<view
:class="[!e.status?'ci-txt-green':'']"
>{{e.status?'已上课':'待上课'}}</view>
<view>
<view hover-class="hover-active" v-if="!e.status" @click="toChange(e)">更改</view>
<view hover-class="hover-active" v-if="!e.status" @click="toChangeTime(e)">更改</view>
</view>
</view>
</view>
</block>
<view class="cmd-no" v-if="false">
<view class="cmd-no" v-if="pageInfo.sclass_period_time.length == 0">
<image src="/subpackage/course/static/images/no_order.png"></image>
<view>暂未排课</view>
</view>
@ -84,8 +85,8 @@
<!-- 作业列表 -->
<view class="cmd-task" v-if="curTabID==3">
<task-section ref="refTask" :taskInfo="taskList" taskType="finish" v-if="true"></task-section>
<view class="cmd-no" v-if="false">
<task-section ref="refTask" :taskInfo="pageInfo.work_list" taskType="finish" v-if="pageInfo.work_list.length>0"></task-section>
<view class="cmd-no" v-if="pageInfo.work_list.length==0">
<image src="/subpackage/course/static/images/no_order.png"></image>
<view>暂未布置作业</view>
</view>
@ -94,8 +95,8 @@
<!-- 转班弹框 -->
<class-reset-modal
:isShowClass="isShowClass"
:info="6"
:canlist="canlist"
:info="pageInfo"
:canlist="classList"
@confirmReset="confirmReset"
@closeReset="isShowClass=false"
></class-reset-modal>
@ -105,7 +106,8 @@
<script>
import util from '@/utils/util';
import boxServer from '../../../js/course_server';
import { BOX_API } from '../../../js/course_api';
import BOX_API from '../../../js/course_api';
import { mapState } from 'vuex';
import tabBar from '../../../components/tab_bar/tab_bar.vue';
import class_reset_modal from '../../../components/class_reset_modal/class_reset_modal.vue';
import task_section from '../../../components/task_section/task_section.vue';
@ -118,77 +120,182 @@ export default {
'class-reset-modal': class_reset_modal,
'task-section': task_section,
},
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
tabList,
curTabID: 0,
isShowClass: false,
canlist: [],
classList: [],
taskList: [
{
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安",
pageInfo: {
students: [], //
work_list: [], //
sclass_period_time: [], //
},
{
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安排的不同,大部分在9日到10日间仍有部分科目的考试。今年新增的8个高考综合改革省份的考生,将在明天完成高中学业水平选考科目的考试后结束高考。",
},
{
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安今年第三批高考综合改革省份迎来“新高考”,目前省份,由于考试科目安",
}
],
optionsId: -1,
resetInfo: {}, //
}
},
onLoad(options) {
this.optionsId = options.id
this.getDetail(options.id)
},
methods: {
formatDate: util.formatDate,
getDetail(id){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.sclassInfo,
data: {
brand_id: brandInfo.brand.id,
id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
let _res = res
_res.students = res.students || []
_res.work_list = res.work_list || []
_res.sclass_period_time = res.sclass_period_time || []
this.pageInfo = _res
this.getCanlist(res.course_id);
})
},
zh_sclass_status(status){
let _arr = ["成班中","进行中","已结束","成班失败"]
return _arr[status] || '-';
},
tabChange: util.debounce(function(e){
this.curTabID = e.id;
this.refreshList();
this.$nextTick(() => {
if(this.curTabID==3 && this.taskList.length>0)this.$refs.refTask.initDesc();
if(this.curTabID==3 && this.pageInfo.work_list.length>0)this.$refs.refTask.initDesc();
});
}, 300, true),
refreshList(){
this.curTabID = 0
this.getDetail(this.optionsId)
},
//
confirmClass(){
let { brandInfo, pageInfo } = this
util.showModal({
title: '是否确认成班',
content: '确认后代表用户报名成功,提前成立班级安排上课',
showCancel: true,
success: modalRes=>{
if(modalRes.confirm){
// util.showLoad();
// boxServer.get({
// url: BOX_API.schedule.cancelBclassAc,
// data: {
// subscribe_no,
// },
// failMsg: ''
// })
// .then(res=>{
// util.hideLoad();
// this.doSuccess()
// })
util.showLoad();
boxServer.get({
url: BOX_API.sclassConfirm,
data: {
brand_id: brandInfo.brand.id,
id: pageInfo.sclass_id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{this.refreshList()}, 1200)
})
}
}
})
},
btnChange(){},
toStuDetail(){
util.routeTo(`/subpackage/course/pages/class_student_detail/class_student_detail`,'nT');
toStuDetail(item){
let { pageInfo } = this
let _query = item
_query["course_id"] = pageInfo.course_id
_query["course_name"] = pageInfo.course_name
// _query["sclass_name"] = pageInfo.sclass_name
// _query["sclass_nums"] = pageInfo.sclass_nums
_query["sclass_id"] = pageInfo.sclass_id
console.log("的点点滴滴:", _query)
util.routeTo(`/subpackage/course/pages/class_student_detail/class_student_detail?query=${util.jsonStr(_query)}`,'nT')
},
//
getCanlist(course_id){
let { brandInfo, pageInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.stuCanChangeSclass,
data: {
brand_id: brandInfo.brand.id,
course_id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.classList = res.list || []
})
},
//
resetBtn(item){
this.isShowClass = true
this.resetInfo.user_id = item.user_id
this.resetInfo.order_no = item.order_no
},
//
//
confirmReset(e){
// this.resetInfo["new_id"] = e.new_id
// this.$emit('confirmReset',this.resetInfo)
let { brandInfo, pageInfo, resetInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.resetStuSclass,
data: {
brand_id: brandInfo.brand.id,
old_id: pageInfo.sclass_id,
new_id: e.new_id,
user_id: resetInfo.user_id,
user_order_no: resetInfo.order_no,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
this.isShowClass = false
setTimeout(_=>{this.refreshList()}, 1200)
})
},
toChange(){
util.routeTo(`/subpackage/course/pages/class_time_change/class_time_change`,'nT');
//
toChangeTime(item){
let { pageInfo } = this
let _query = {
brand_name: `${pageInfo.brand_name||''}${pageInfo.stadium_name||''}`,
course_name: pageInfo.course_name,
sclass_name: pageInfo.sclass_name,
sclass_id: pageInfo.sclass_id,
lesson_no: item.lesson_no,
period_date: item.period_date,
period_start_time: item.period_start_time,
period_end_time: item.period_end_time,
}
util.routeTo(`/subpackage/course/pages/class_time_change/class_time_change?query=${util.jsonStr(_query)}`,'nT');
},
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
uni.showActionSheet({
itemList: _phoneArr,
success: res =>{
uni.makePhoneCall({
phoneNumber: _phoneArr[res.tapIndex]
})
}
})
},
}
}

115
src/subpackage/course/pages/manage_detail/private_reserve_detail/private_reserve_detail.vue

@ -1,44 +1,47 @@
<template>
<view class="private-reserve-detail">
<view class="prd-line">
<view>欧轩智能场馆(羽毛球馆永泰店)</view>
<view :class="[false?'pl-gray':false?'pl-red':'pl-green']">待上课</view>
<view>{{pageInfo.brand_name||''}}({{pageInfo.stadium_name||'-'}})</view>
<view :class="[pageInfo.status_text=='已上课'?'pl-gray':pageInfo.status_text=='已取消'?'pl-red':'pl-green']">{{pageInfo.status_text||'-'}}</view>
</view>
<view class="prd-section">
<view>预约单号<text>yy202106031256568595</text></view>
<view>预约时间<text>2021.06.03 11:42:50 </text></view>
<view>预约单号<text>{{pageInfo.subscribe_no||''}}</text></view>
<view>预约时间<text>{{pageInfo.subscribe_at||''}}</text></view>
<!-- 已取消才显示 -->
<block v-if="false">
<view>取消时间<text>2021.06.03 11:42:50</text></view>
<view>取消原因<text>学员取消有事请假</text></view>
<block v-if="pageInfo.status_text=='已取消'">
<view>取消时间<text>{{pageInfo.cancel_time||''}}</text></view>
<view>取消原因<text>{{pageInfo.cancel_reason||''}}</text></view>
</block>
</view>
<view class="prd-section">
<view>上课信息</view>
<view>上课时间<text>2021.06.02周五 14:00-16:00</text></view>
<view>上课地点<text>羽毛球3号场</text></view>
<view>上课教练<text>张瀚</text></view>
<view>课程名称<text>羽毛球培训课</text></view>
<view>课程类型<text>私教课</text></view>
<view>课程节数<text>3节共12</text></view>
<view>上课时间<text>{{pageInfo.date||''}}{{pageInfo.week||'-'}} {{pageInfo.start_duration||''}}-{{pageInfo.end_duration||''}}</text></view>
<view>上课地点<text>{{pageInfo.addr||''}}</text></view>
<view>上课教练<text>{{pageInfo.coach_name||''}}</text></view>
<view>课程名称<text>{{pageInfo.course_name||''}}</text></view>
<view>课程类型<text>{{pageInfo.course_kind||''}}</text></view>
<view>课程节数<text>{{pageInfo.course_period_number_cur||0}}{{pageInfo.course_period_number||0}}</text></view>
</view>
<view class="prd-stu">
<view class="ps-tit">学员信息</view>
<view class="ps-line">
<view class="pl-info">
<view>熊启()
<text>18096895331</text>
<image src="/subpackage/course/static/images/icon/phone.png"></image>
<view>{{pageInfo.student_name||'-'}}({{pageInfo.student_gender||'-'}})
<block v-if="pageInfo.student_phone!=''">
<text>{{pageInfo.student_phone||'-'}}</text>
<image src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
</block>
</view>
<view>预约时间2020.12.27 22:55:56</view>
<view>预约时间{{pageInfo.subscribe_at||''}}</view>
</view>
<!-- 待上课才显示 -->
<view class="pl-btn" hover-class="hover-active" v-if="true" @click="isCancelClass=true">取消上课</view>
<view class="pl-btn" hover-class="hover-active" v-if="pageInfo.status_text=='待上课'" @click="isCancelClass=true">取消上课</view>
</view>
</view>
<cancel-class-modal
v-if="isCancelClass"
@reasonConfirm="reasonConfirm"
@reasonClose="isCancelClass=false"
></cancel-class-modal>
</view>
@ -47,19 +50,93 @@
<script>
import util from '@/utils/util';
import boxServer from '../../../js/course_server';
import { BOX_API } from '../../../js/course_api';
import BOX_API from '../../../js/course_api';
import { mapState } from 'vuex';
import cancel_class_modal from '../../../components/cancel_class_modal/cancel_class_modal.vue';
export default {
components: {
'cancel-class-modal': cancel_class_modal,
},
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
isCancelClass: false,
pageInfo: {},
optionsId: -1,
}
},
onLoad(options) {
this.optionsId = options.id
this.getDetail(options.id)
},
methods: {
getDetail(id){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.subscribeInfo,
data: {
brand_id: brandInfo.brand.id,
id,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.pageInfo = res
})
},
// [/]
getCancelPabAc({ subscribe_no, reason}){
let { brandInfo } = this
let _data = {
brand_id: brandInfo.brand.id,
reason, //
subscribe_no,
}
util.showLoad();
boxServer.get({
url: BOX_API.cancelStuAc,
data: _data,
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{
this.getDetail(this.optionsId)
util.previousPageFunction({
fnName: 'refreshList',
query: { isLoad: false},
});
}, 1200)
})
},
reasonConfirm(e){
this.isCancelClass = false
let { pageInfo } = this
this.getCancelPabAc({
subscribe_no: pageInfo.subscribe_no,
reason: e,
})
},
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
uni.showActionSheet({
itemList: _phoneArr,
success: res =>{
uni.makePhoneCall({
phoneNumber: _phoneArr[res.tapIndex]
})
}
})
},
}
}
</script>

153
src/subpackage/course/pages/manage_detail/student_course_detail/student_course_detail.vue

@ -1,82 +1,83 @@
<template>
<view class="student-course-detail" :class="[false?'scd-content':'']">
<view class="scd-section">
<view class="ss-status">进行中</view>
<view class="ss-view">学员姓名张安 </view>
<view class="ss-view">学员电话18316536894
<image src="/subpackage/course/static/images/icon/phone.png"></image>
<view class="ss-status" :class="[pageInfo.order_status==2?'ss-gary':'']">{{pageInfo.order_status==1?'进行中':pageInfo.order_status==2?'已结束':''}}</view>
<view class="ss-view">学员姓名{{pageInfo.student_name || ''}}{{pageInfo.student_gender ||'-'}}</view>
<view class="ss-view">学员电话{{pageInfo.student_phone||''}}
<image src="/subpackage/course/static/images/icon/phone.png" @click="phoneCall(pageInfo.student_phone)"></image>
</view>
<view class="ss-view">剩余课时10课时 12)</view>
<view class="ss-view">剩余课时{{pageInfo.period_nums_surplus||0}}课时 {{pageInfo.period_nums||0}})</view>
<!-- 私教课大班课 才有安排上课 -->
<view class="ss-line" v-if="true">
<view class="ss-line" v-if="pageInfo.order_status==1&&(pageInfo.course_kind=='私教课'||pageInfo.course_kind=='大班课')">
<view hover-class="hover-active" @click="toArrangeClass">安排上课</view>
</view>
</view>
<view class="scd-tab">
<tab-bar :tabList="tabList" :curTabID="curTabID" @change="tabChange"></tab-bar>
</view>
<!-- 课程详情 -->
<view class="scd-info" v-if="curTabID==0">
<view class="si-tit">欧轩智能场馆(羽毛球馆永泰店)</view>
<view>羽毛球杀球训练私教课</view>
<view><text>课程类型</text>私教课</view>
<view><text>总课时</text>14</view>
<view class="si-tit">{{pageInfo.brand_name || ''}}({{pageInfo.stadium_name||'-'}})</view>
<view>{{pageInfo.course_name||''}}</view>
<view><text>课程类型</text>{{pageInfo.course_kind||''}}</view>
<view><text>总课时</text>{{pageInfo.period_nums||0}}</view>
<!-- 私教课大班课 -->
<block v-if="true">
<view><text>购买课时</text>10</view>
<view><text>赠送课时</text>4</view>
<view><text>有效期至</text>至2022.06.02</view>
<view><text>课时时长</text>2小时/</view>
<view><text>上课教练</text>一级教练</view>
<block v-if="pageInfo.course_kind=='私教课'||pageInfo.course_kind=='大班课'">
<view><text>购买课时</text>{{pageInfo.period_nums_gm||0}}</view>
<view><text>赠送课时</text>{{pageInfo.period_nums_zs||0}}</view>
<view><text>有效期至</text>{{pageInfo.course_end||''}}</view>
<view><text>课时时长</text>{{pageInfo.period_time||'-'}}/</view>
<view><text>上课教练</text>{{pageInfo.course_coach||''}}</view>
<!-- 私教课才有上课内容 -->
<view v-if="true"><text>上课内容</text></view>
<view v-if="pageInfo.course_kind=='私教课'"><text>上课内容</text></view>
<view><text>上课是否需要场地</text>不含场地费用</view>
</block>
<!-- 成班课 -->
<block v-if="false">
<view><text>课时时长</text>45分钟/</view>
<view><text>有效期至</text>2022.06.02-2022.12.02</view>
<block v-if="pageInfo.course_kind=='成班课'">
<view><text>课时时长</text>{{pageInfo.period_time||'-'}}/</view>
<view><text>有效期至</text>{{pageInfo.course_end||''}}</view>
<view class="si-tit si-mar">班级信息</view>
<view><text>班级id</text>2-1</view>
<view><text>班级名称</text>冲锋班</view>
<view><text>班级人数</text>20</view>
<view><text>上课教练</text>张三</view>
<view><text>上课地点</text>欧轩智能场馆3号馆</view>
<view><text>课程日期</text>2021.08.08-2021.10.10</view>
<view><text>班级id</text>{{pageInfo.sclass_no||''}}</view>
<view><text>班级名称</text>{{pageInfo.sclass_name||''}}</view>
<view><text>班级人数</text>{{pageInfo.sclass_nums||0}}</view>
<view><text>上课教练</text>{{pageInfo.course_coach||''}}</view>
<view><text>上课地点</text>{{pageInfo.sclass_addr||''}}</view>
<view><text>课程日期</text>{{pageInfo.sclass_date||''}}</view>
</block>
</view>
<!-- 上课记录 -->
<view class="scd-record" v-if="curTabID==1">
<!-- 私教课大班课 -->
<view class="sr-list" v-for="i in 3" :key="i" v-if="false">
<view class="sr-list" v-for="(e,i) in pageInfo.subscribe_period_time" :key="i" v-if="pageInfo.course_kind=='私教课'||pageInfo.course_kind=='大班课'">
<view class="sl-item">
<view>
<view class="si-box">
<view>预约单号yy202106031256568595</view>
<view :class="[true?'sb-red':false?'sb-gray':'sb-green']">已取消</view>
<view>预约单号{{e.subscribe_no}}</view>
<view :class="[e.status_text=='已取消'?'sb-red':e.status_text=='已上课'?'sb-gray':'sb-green']">{{e.status_text||'-'}}</view>
</view>
<view class="si-time">2021.06.03 11:42:50 预约</view>
<view class="si-time">{{e.created_at||'-'}} 预约</view>
</view>
<view class="si-wei">课程节数3节共12</view>
<view><text>上课时间</text>2021.06.02周五 14:00-16:00</view>
<view><text>上课地点</text>羽毛球3号场</view>
<view><text>上课教练</text>张三</view>
<view class="si-wei">课程节数{{e.lesson_no||0}}{{e.lesson_no_total||0}}</view>
<view><text>上课时间</text>{{e.date||''}}{{e.week||'-'}} {{e.start_duration||''}}-{{e.end_duration||''}}</view>
<view><text>上课地点</text>{{e.addr||''}}</view>
<view><text>上课教练</text>{{e.coach_name||''}}</view>
<!-- 已取消显示 -->
<block v-if="true">
<view><text>取消时间</text>2021.06.03 11:42:50</view>
<view><text>取消原因</text>教练取消</view>
<block v-if="e.status_text=='已取消'">
<view><text>取消时间</text>{{e.cancel_time||''}}</view>
<view><text>取消原因</text>{{e.cancel_reason||''}}</view>
</block>
</view>
</view>
<view class="sr-sclass" v-if="true">
<sclass-record-section ></sclass-record-section>
<view class="sr-sclass" v-if="pageInfo.course_kind=='成班课'">
<sclass-record-section :recordInfo="pageInfo.sclass_period_time"></sclass-record-section>
</view>
</view>
<!-- 作业列表 -->
<view class="scd-task" v-if="curTabID==2">
<task-section ref="refTask" :taskInfo="taskList"></task-section>
<task-section ref="refTask" :taskInfo="pageInfo.student_work_list"></task-section>
</view>
</view>
</template>
@ -84,7 +85,7 @@
<script>
import util from '@/utils/util';
import boxServer from '../../../js/course_server';
import { BOX_API } from '../../../js/course_api';
import BOX_API from '../../../js/course_api';
import { mapState } from 'vuex';
import tabBar from '../../../components/tab_bar/tab_bar.vue';
import sclass_record_section from '../../../components/sclass_record_section/sclass_record_section.vue';
@ -98,34 +99,41 @@ export default {
'sclass-record-section': sclass_record_section,
'task-section': task_section,
},
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
tabList,
curTabID: 0,
taskList: [
{
// isShowExpande: false,
// expande: false,
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安",
},
{
// isShowExpande: false,
// expande: false,
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安排的不同,大部分在9日到10日间仍有部分科目的考试。今年新增的8个高考综合改革省份的考生,将在明天完成高中学业水平选考科目的考试后结束高考。",
pageInfo: {
subscribe_period_time: [], //[/]
sclass_period_time: [], //[]
student_work_list: [], //
},
{
// isShowExpande: false,
// expande: false,
work_content: "今年第三批高考综合改革省份迎来“新高考”,目前,全国实施新高考的省份达到了14个。实施新高考的省份,由于考试科目安今年第三批高考综合改革省份迎来“新高考”,目前省份,由于考试科目安",
}
],
}
},
onLoad() {
onLoad(options) {
this.getDetail(options.order_no)
},
methods: {
getDetail(order_no){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.stuInfo,
data: {
brand_id: brandInfo.brand.id,
order_no,
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
this.pageInfo = res
})
},
tabChange: util.debounce(function(e){
this.curTabID = e.id;
this.refreshList();
@ -138,11 +146,21 @@ export default {
},
toArrangeClass(){
util.routeTo(`/subpackage/course/pages/arrange_class/arrange_class`,'nT');
let { pageInfo } = this
util.routeTo(`/subpackage/course/pages/arrange_class/arrange_class?order_no=${pageInfo.order_no}`,'nT');
},
phoneCall(mobile) {
let _phoneStr = mobile || ''
let _phoneArr = _phoneStr.split(',') || [];
uni.showActionSheet({
itemList: _phoneArr,
success: res =>{
uni.makePhoneCall({
phoneNumber: _phoneArr[res.tapIndex]
})
}
})
},
}
}
</script>
@ -166,6 +184,9 @@ page{
font-size: 28rpx;
line-height: 52rpx;
}
.ss-gary{
color: #9A9A9D;
}
.ss-view{
padding-right: 84rpx;
color: #1A1A1A;

200
src/subpackage/course/pages/manage_list/manage_list.vue

@ -1,27 +1,29 @@
<template>
<view class="manage-list">
<block v-if="true">
<view class="ml-head">
<store-name></store-name>
<block v-if="isShowOrder">
<view class="mh-view">
<image class="mv-icon" src="/static/images/icon/search.png"></image>
<input class="mv-ipt" :placeholder="plaTxt" />
<input class="mv-ipt" :placeholder="plaTxt" confirm-type="search" v-model="searchText" @confirm="onSearch"/>
</view>
<tab-bar :tabList="tabList" :curTabID="curTabID" @change="tabChange"></tab-bar>
</block>
</view>
<view class="ml-list" v-for="(e,i) in 6" :key="i" v-if="true">
<block v-if="isShowOrder">
<view class="ml-list" v-for="(e,i) in orderList" :key="i" v-if="orderList.length > 0">
<student-course-item :orderInfo="e" v-if="typeId == '0-0'"></student-course-item>
<private-reserve-item :orderInfo="e" v-if="typeId == '0-1'"></private-reserve-item>
<bclass-reserve-item :orderInfo="e" v-if="typeId == '0-2'"></bclass-reserve-item>
<private-reserve-item :orderInfo="e" v-if="typeId == '0-1'" @priclassCancel="cancelCalss"></private-reserve-item>
<bclass-reserve-item :orderInfo="e" v-if="typeId == '0-2'" @bclassCancel="cancelCalss" @bclassConfirm="bclassConfirm"></bclass-reserve-item>
<class-manage-item :orderInfo="e" v-if="typeId == '0-3'"></class-manage-item>
</view>
<view class="no-item no-list" v-if="false">
<view class="no-item no-list" v-if="orderList.length == 0">
<image src="/subpackage/course/static/images/no_order.png"></image>
<view>{{ tipsText }}</view>
</view>
</block>
<view class="no-list" v-if="false">
<view class="no-list" v-if="!isShowOrder">
<image src="/subpackage/course/static/images/no_order.png"></image>
<view>{{ tipsText }}</view>
</view>
@ -31,7 +33,7 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
import tabBar from '../../components/tab_bar/tab_bar.vue';
import store_name from '../../components/store_name/store_name';
@ -49,7 +51,10 @@ export default {
'class-manage-item': class_manage_item,
},
computed:{
// ...mapState([ 'storeInfo' ]),
...mapState([ 'brandInfo',]),
...mapState({
curStoreInfo: state => state.device.curStoreInfo,
}),
titleName(){
let { typeId } = this;
if(typeId == '0-0')return '学员管理';
@ -75,10 +80,10 @@ export default {
return '';
},
tabList(){
let _list0 = [{name: '全部', id: 0}, {name: '进行中', id: 1}, {name: '已结束', id: 2}, {name: '已退款', id: 3}];
let _list1 = [{name: '全部', id: 0}, {name: '待上课', id: 1}, {name: '已上课', id: 2}, {name: '已取消', id: 3}];
let _list2 = [{name: '全部', id: 0}, {name: '待确认', id: 1}, {name: '待上课', id: 2}, {name: '已上课', id: 3}, {name: '已取消', id: 4}];
let _list3 = [{name: '全部', id: 0}, {name: '成班中', id: 1}, {name: '进行中', id: 2}, {name: '已结束', id: 3}, {name: '失败', id: 4}];
let _list0 = [{name: '全部', id: 0, status: ''}, {name: '进行中', id: 1, status: 1}, {name: '已结束', id: 2, status: 2}, {name: '已退款', id: 3, status: 3}];
let _list1 = [{name: '全部', id: 0, status: 'all'}, {name: '待上课', id: 1, status: 'dsk'}, {name: '已上课', id: 2, status: 'ysk'}, {name: '已取消', id: 3, status: 'yqx'}];
let _list2 = [{name: '全部', id: 0, status: 'all'}, {name: '待确认', id: 1, status: 'dqr'}, {name: '待上课', id: 2, status: 'dsk'}, {name: '已上课', id: 3, status: 'ysk'}, {name: '已取消', id: 4, status: 'yqx'}];
let _list3 = [{name: '全部', id: 0, status: ''}, {name: '成班中', id: 1, status: 0}, {name: '进行中', id: 2, status: 1}, {name: '已结束', id: 3, status: 2}, {name: '失败', id: 4, status: 3}];
let { typeId } = this;
if(typeId == '0-0')return _list0;
@ -88,34 +93,193 @@ export default {
return [];
},
},
watch: {
curStoreInfo(newVal, oldVal) {
this.orderList = [];
// console.log("", newVal)
this.storeInfo = newVal
// this.$nextTick(_=>{
// })
this.getOrderList({})
}
},
data() {
return {
typeId: "",
curTabID: 0,
curStatus: "",
searchText: "",
storeInfo: {},
isShowOrder: false,
orderList: [],
page: 1,
typeId: "",
}
},
onLoad(options){
async onLoad(options){
// let _query = util.jsonPar(options.query);
// this.optionsQuery = _query
try{
util.showLoad();
let _brandInfo = await this.$store.dispatch('getBrandInfo');
await this.$store.dispatch('getStoreList');
util.hideLoad();
this.typeId = options.type_id || ''
this.storeInfo.id = this.curStoreInfo.id || ''
this.$nextTick(_=>{
uni.setNavigationBarTitle({
title: this.titleName
})
// this.getCommentList({});
this.getOrderList({})
})
}catch(err){
util.hideLoad();
}
},
onReachBottom(){
let { page } = this;
this.getOrderList({
page: ++page
})
},
methods: {
tabChange: util.debounce(function(e){
this.curTabID = e.id;
this.curStatus = e.status
this.refreshList();
}, 300, true),
refreshList(){
this.page = 1;
// this.subList = [];
// this.getSubscribeList({});
this.orderList = [];
this.getOrderList({});
},
//
onSearch(){
this.page = 1
this.orderList = []
this.getOrderList({})
},
getApi(){
let { typeId } = this
if(typeId == '0-0')return BOX_API.stuCourse; //
if(typeId == '0-1')return BOX_API.subscribePri; //
if(typeId == '0-2')return BOX_API.subscribeBclass; //
if(typeId == '0-3')return BOX_API.sclassManage; //
},
getOrderList({page=1, page_size=20}){
let { brandInfo, storeInfo, curTabID, typeId, curStatus, searchText } = this
let _data = {
page,
page_size,
stadium_id: storeInfo.id,
brand_id: brandInfo.brand.id,
}
if(searchText!='')_data["keyword"] = searchText;
if(typeId=='0-0')_data["order_status"] = curStatus;
if(typeId!='0-0')_data["status"] = curStatus;
util.showLoad();
boxServer.get({
url: this.getApi(),
data: _data,
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
let _list = res.list || [];
if(page == 1){
this.orderList = _list;
if(curTabID==0 && this.orderList.length==0)this.isShowOrder = false;
else this.isShowOrder = true;
return;
}
if(_list.length<=0)return util.showNone('没有更多!');
this.page = page;
this.orderList = [...this.orderList, ...res.list];
})
},
//
cancelCalss(e){
if(e.course_kind=='私教课'){
this.getCancelPabAc({
course_kind: e.course_kind,
subscribe_no: e.subscribe_no,
reason: e.reason,
})
return;
}
if(e.course_kind=='大班课'){
this.getCancelPabAc({
course_kind: e.course_kind,
id: e.id,
reason: e.reason,
})
return;
}
},
// [/]
getCancelPabAc({ course_kind, subscribe_no, id, reason}){
let { brandInfo } = this
let _data = {
brand_id: brandInfo.brand.id,
reason, //
}
if(course_kind=='私教课')_data["subscribe_no"] = subscribe_no;
if(course_kind=='大班课')_data["id"] = id;
util.showLoad();
boxServer.get({
url: course_kind=='大班课'? BOX_API.cancelBclassAc:course_kind=='私教课'? BOX_API.cancelStuAc:'',
data: _data,
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{ this.refreshList() }, 1200)
})
},
//
bclassConfirm(e){
util.showModal({
title: '提示',
content: '是否确认上课?',
showCancel: true,
success: modalRes=>{
if(modalRes.confirm){
this.getBclassAc({subscribe_no: e})
}
}
})
},
//
getBclassAc({ subscribe_no}){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.setBclassAc,
data: {
brand_id: brandInfo.brand.id,
subscribe_no, //
},
failMsg: '加载失败!'
})
.then(res=>{
util.hideLoad();
util.showNone('操作成功!');
setTimeout(_=>{ this.refreshList() }, 1200)
})
},
}
}
</script>

12
src/subpackage/course/pages/task_detail/task_detail.vue

@ -29,8 +29,12 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
export default {
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
pageInfo: {},
@ -39,7 +43,7 @@ export default {
async onLoad(options){
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
// this.getWorkInfo(options.id)
this.getWorkInfo(options.id)
},
methods: {
formatDate: util.formatDate,
@ -63,10 +67,12 @@ export default {
// -
getWorkInfo(id){
let { brandInfo } = this
util.showLoad();
boxServer.get({
url: BOX_API.student.workInfo,
url: BOX_API.stuWorkInfo,
data: {
brand_id: brandInfo.brand.id,
id,
},
failMsg: '加载失败!'

35
src/subpackage/course/pages/task_finish_list/task_finish_list.vue

@ -1,20 +1,18 @@
<template>
<view class="task-finish-list">
<!-- v-if="workList.length>0" -->
<block >
<block v-if="workList.length>0">
<view class="tfl-box">
<view>布置作业时间{{formatDate({date: pageInfo.created_at, partition: '/'}) || '-'}}</view>
<view>布置作业时间{{ pageInfo.created_at!=''?formatDate({date: pageInfo.created_at, partition: '/'}) : '-'}}</view>
<view>发布人{{pageInfo.work_coach_name||'-'}}</view>
</view>
<!-- workList -->
<view class="tfl-list" v-for="(e,i) in 3" :key="i">
<view class="tfl-list" v-for="(e,i) in workList" :key="i">
<view class="tl-item" @click="toDetail(e)">
<view class="ti-info">
<view>{{e.student_name||'-'}}{{e.student_gender||'-'}}</view>
<view>{{'-'}}</view>
<view>{{e.student_phone ||'-'}}</view>
</view>
<view class="ti-section">
<view v-if="e.work_status==1">{{formatDate({date: pageInfo.student_work_at,}) ||'-'}}</view>
<view v-if="e.work_status==1">{{e.student_work_at!=''?formatDate({date: e.student_work_at,}) :'-'}}</view>
<view class="ts-line">
<view :class="[e.work_status==1?'':'tl-txt']">{{e.work_status==1?'已完成':'未完成'}}</view>
<image src="/subpackage/course/static/images/icon/arrow_black.png"></image>
@ -33,10 +31,11 @@
<script>
import util from '@/utils/util';
import boxServer from '../../js/course_server';
import { BOX_API } from '../../js/course_api';
import BOX_API from '../../js/course_api';
import { mapState } from 'vuex';
export default {
computed:{
...mapState([ 'brandInfo',]),
},
data() {
return {
@ -45,23 +44,23 @@ export default {
}
},
onLoad(options) {
// let _query = util.jsonPar(options.query);
// this.pageInfo = _query
// let { work_number } = options
// this.pageInfo = options
// this.$nextTick(_=>{
// this.getClassWork()
// })
let { work_number } = options
this.pageInfo = options
this.$nextTick(_=>{
this.getClassWork()
})
},
methods: {
formatDate: util.formatDate,
// -
getClassWork(){
let { brandInfo } = this
let { work_number } = this.pageInfo
util.showLoad();
boxServer.get({
url: BOX_API.class.classWork,
url: BOX_API.sclassStuWork,
data: {
brand_id: brandInfo.brand.id,
work_number,
},
failMsg: '加载失败!'
@ -78,7 +77,7 @@ export default {
},
toDetail(item){
util.routeTo(`/subpackage/manage/pages/student/task_detail/task_detail?id=${item.id}`,'nT')
util.routeTo(`/subpackage/course/pages/task_detail/task_detail?id=${item.id}`,'nT')
},
//

Loading…
Cancel
Save