Browse Source

feat(student): 优化学生课程安排详情页面

- 新增学生课程安排详情接口和相关功能
- 重构课程安排详情页面,展示更详细的信息
- 添加请假和取消请假功能
- 优化页面跳转逻辑,增加状态传递
master
liutong 10 months ago
parent
commit
d133f69ed7
  1. 19
      api/apiRoute.js
  2. 8
      common/axios.js
  3. 20
      pages/student/index/index.vue
  4. 4
      pages/student/login/login.vue
  5. 99
      pages/student/timetable/info.vue

19
api/apiRoute.js

@ -507,6 +507,25 @@ export default {
}) })
}, },
//学生端-学生课程安排-详情
xy_personCourseScheduleInfo(data = {}) {
let url = '/xy/personCourseSchedule/info'
return http.get(url, data).then(res => {
return res;
})
},
//学生端-学生课程安排-详情
xy_personCourseScheduleEditStatus(data = {}) {
let url = '/xy/personCourseSchedule/editStatus'
return http.post(url, data).then(res => {
return res;
})
},

8
common/axios.js

@ -37,7 +37,7 @@ export default {
title:'加载中...' title:'加载中...'
}) })
return new Promise((cback, reject) => { return new Promise((cback, reject) => {
console.log(Api_url + url) console.log('请求地址',Api_url + url)
uni.request({ uni.request({
url: Api_url + url, url: Api_url + url,
data: param, data: param,
@ -55,8 +55,8 @@ export default {
if (res_code == 200) { if (res_code == 200) {
if (res_codes == 401) { if (res_codes == 401) {
uni.navigateTo({ uni.navigateTo({
url: '/pages/student/login/login' url: `/pages/student/login/login?res_codes=${res_codes}`
}) })
}else{ }else{
cback(res.data); cback(res.data);
} }
@ -70,7 +70,7 @@ export default {
} else { } else {
if (res_codes == 401) { if (res_codes == 401) {
uni.navigateTo({ uni.navigateTo({
url: '/pages/student/login/login' url: `/pages/student/login/login?res_codes=${res_codes}`
}) })
} else { } else {
console.log('400/500', url, error, res) console.log('400/500', url, error, res)

20
pages/student/index/index.vue

@ -58,7 +58,7 @@
<view class="upcomin-classes-div-con-centre"></view> <view class="upcomin-classes-div-con-centre"></view>
<view class="centre"> <view class="centre">
<view>{{$util.formatToDateTime(personCourseScheduleInfo.course_date,'m-d')}} {{personCourseScheduleInfo.time_slot}}</view> <view>{{$util.formatToDateTime(personCourseScheduleInfo.course_date,'m-d')}} {{personCourseScheduleInfo.time_slot}}</view>
<view style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{personCourseScheduleInfo.venue.venue_name}} {{personCourseScheduleInfo.course.course_name}}xxxx123123</view> <view style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis;">{{personCourseScheduleInfo.courseScheduleHasOne.venue.venue_name}} {{personCourseScheduleInfo.courseScheduleHasOne.course.course_name}}</view>
</view> </view>
</view> </view>
<view class="upcomin-classes-div-con-right" @click="openViewTimetableInfo(personCourseScheduleInfo)"> <view class="upcomin-classes-div-con-right" @click="openViewTimetableInfo(personCourseScheduleInfo)">
@ -135,7 +135,6 @@
}, },
data() { data() {
return { return {
inited: false, // init
// //
uploadApiUrl: ``, uploadApiUrl: ``,
@ -185,15 +184,9 @@
},// },//
} }
}, },
onLoad() { onLoad() {},
this.openViewHome()//-
},
onShow(){ onShow(){
// onShow init this.init()
if (!this.inited) {
this.init()
this.inited = true
}
}, },
methods: { methods: {
// //
@ -237,6 +230,7 @@
limit: 1,// limit: 1,//
total: 1,// total: 1,//
resources_id:this.member_info.id,//id resources_id:this.member_info.id,//id
status:'0',//012
} }
let res = await apiRoute.xy_personCourseSchedule(params) let res = await apiRoute.xy_personCourseSchedule(params)
if(res.code != 1){ if(res.code != 1){
@ -246,7 +240,7 @@
}) })
} }
console.log('kc',res.data) console.log('课程安排',res.data)
let arr = res.data.data let arr = res.data.data
if(arr.length){ if(arr.length){
@ -532,9 +526,9 @@
//- //-
openViewTimetableInfo(item) { openViewTimetableInfo(item) {
let id = item.id let person_course_schedule_id = item.id
uni.navigateTo({ uni.navigateTo({
url: `/pages/student/timetable/info?id=${id}` url: `/pages/student/timetable/info?person_course_schedule_id=${person_course_schedule_id}`
}) })
}, },

4
pages/student/login/login.vue

@ -103,7 +103,9 @@ export default {
// uni.hideHomeButton() // uni.hideHomeButton()
// console.log(uni.getStorageSync('um_id')) // console.log(uni.getStorageSync('um_id'))
// onShow init // onShow init
if (!this.inited) {
// let res_codes = options.res_codes || ''
if (!this.inited && !res_codes) {
this.openViewHome() this.openViewHome()
this.inited = true this.inited = true
} }

99
pages/student/timetable/info.vue

@ -3,55 +3,55 @@
<view class="main_box"> <view class="main_box">
<view class="main_section"> <view class="main_section">
<view class="section_1"> <view class="section_1">
<view class="title_box">{{infoData.courses_name}}</view> <view class="title_box">{{infoData.courseScheduleHasOne.course.course_name}}</view>
<view class="ul"> <view class="ul">
<view class="li"> <view class="li">
<view class="title">课程名称</view> <view class="title">课程名称</view>
<view class="content">{{infoData.courses_name}}</view> <view class="content">{{infoData.courseScheduleHasOne.course.course_name}}</view>
</view> </view>
<view class="li"> <!-- <view class="li">-->
<view class="title">班级</view> <!-- <view class="title">班级</view>-->
<view class="content">{{infoData.classes_name}}</view> <!-- <view class="content">{{infoData.classes_name}}</view>-->
</view> <!-- </view>-->
<view class="li"> <view class="li">
<view class="title">上课时间</view> <view class="title">上课时间</view>
<view class="content">{{infoData.date_time}} {{infoData.time_slot.replace(',', '-')}}</view> <view class="content">{{infoData.courseScheduleHasOne.course_date}} {{infoData.courseScheduleHasOne.time_slot}}</view>
</view> </view>
<view class="li"> <view class="li">
<view class="title">上课地址</view> <view class="title">上课地址</view>
<view class="content">{{infoData.address}}</view> <view class="content">{{infoData.courseScheduleHasOne.campus_name}} {{infoData.courseScheduleHasOne.venue.venue_name}}</view>
</view> </view>
<view class="li"> <view class="li">
<view class="title">教练</view> <view class="title">教练</view>
<view class="content">{{infoData.staff_name}}</view> <view class="content">{{infoData.courseScheduleHasOne.coach.name}}</view>
</view> </view>
<view class="li"> <view class="li">
<view class="title">教练号码</view> <view class="title">教练号码</view>
<view class="content">{{infoData.staff_phone}}</view> <view class="content">{{infoData.courseScheduleHasOne.coach.phone}}</view>
</view> </view>
<view class="li"> <view class="li">
<view class="title">扣除课时</view> <view class="title">扣除课时</view>
<view class="content">{{infoData.hour}}个课时</view> <view class="content">{{infoData.courseScheduleHasOne.course.single_session_count}}个课时</view>
</view> </view>
<!--1未上课 2已上课--> <!--状态0待上课1已上课2请假-->
<view class="state_box" v-if="infoData.status == 2"> <view class="state_box" v-if="infoData.status == 1">
<view>已上</view> <view>已上</view>
</view> </view>
<view class="state_box_btn" v-if="infoData.status != 2"> <view class="state_box_btn" v-if="infoData.status != 1">
<!--sign_status字段| 0未签到 1已签到 2请假--> <!--状态0待上课1已上课2请假-->
<view v-if="!['1','2'].includes(String(infoData.sign_status))" @click="askForLeave(1)">请假</view> <view v-if="['2'].includes(String(infoData.status))" @click="askForLeave(2)">取消请假</view>
<view v-else @click="askForLeave(2)">取消请假</view> <view v-else @click="askForLeave(1)">请假</view>
</view> </view>
</view> </view>
@ -61,11 +61,11 @@
<!-- 请假模态框--> <!-- 请假模态框-->
<fui-modal class="leave_section" :buttons="[{text: '取消',plain: true}, {text: '保存'}]" width="600" :show="leaveShow" @cancel="closeLeaveModal" @click="closeLeaveModal"> <fui-modal class="leave_section" :buttons="[{text: '取消',plain: true}, {text: '保存'}]" width="600" :show="leaveShow" @cancel="closeLeaveModal" @click="closeLeaveModal">
<text class="fui-title" style="font-size: 30rpx;padding: 15rpx">请假申请</text> <text class="fui-title" style="font-size: 30rpx;padding: 15rpx">请假申请</text>
<view class="form_box" style="width: 100%;padding: 20rpx"> <!-- <view class="form_box" style="width: 100%;padding: 20rpx">-->
<view class="input_box" style="border: 1px solid #888888;font-size: 28rpx;"> <!-- <view class="input_box" style="border: 1px solid #888888;font-size: 28rpx;">-->
<fui-input style="font-size: 28rpx;height: 60rpx;line-height: 60rpx;padding-left: 15rpx" :borderBottom="false" placeholder="请输入请假原因" v-model="leaveFormData.reason"></fui-input> <!-- <fui-input style="font-size: 28rpx;height: 60rpx;line-height: 60rpx;padding-left: 15rpx" :borderBottom="false" placeholder="请输入请假原因" v-model="leaveFormData.reason"></fui-input>-->
</view> <!-- </view>-->
</view> <!-- </view>-->
</fui-modal> </fui-modal>
<!--取消请假--> <!--取消请假-->
@ -74,6 +74,7 @@
</template> </template>
<script> <script>
import apiRoute from '@/api/apiRoute.js';
import memberApi from '@/api/member.js'; import memberApi from '@/api/member.js';
import AQTabber from "@/components/AQ/AQTabber.vue" import AQTabber from "@/components/AQ/AQTabber.vue"
@ -84,18 +85,19 @@ export default {
}, },
data() { data() {
return { return {
infoData:{},// memberInfo:{id:''},//
infoData:{id:''},//
// //
filteredData: { filteredData: {
id: '',//id person_course_schedule_id: '',//id
}, },
leaveShow:false,// leaveShow:false,//
// //
leaveFormData:{ leaveFormData:{
schedules_id: '',// id person_course_schedule_id: '',//id
courses_id: '',//id status: '',//012
reason: '',// reason: '',//
file_url: '',// file_url: '',//
}, },
@ -105,9 +107,10 @@ export default {
} }
}, },
onLoad(options) { onLoad(options) {
this.filteredData.id = options.id//id
this.leaveFormData.courses_id = options.id//id this.filteredData.person_course_schedule_id = options.person_course_schedule_id//id
this.leaveFormData.schedules_id = options.id//id
this.leaveFormData.person_course_schedule_id = options.person_course_schedule_id//id
}, },
onShow(){ onShow(){
this.init() this.init()
@ -115,13 +118,27 @@ export default {
methods: { methods: {
// //
async init(){ async init(){
await this.getMemberInit()
await this.getInfo() await this.getInfo()
}, },
//
async getMemberInit(){
let res = await apiRoute.xy_memberInfo({})
if(res.code != 1){
uni.showToast({
title: res.msg,
icon: 'none'
})
return
}
this.memberInfo = res.data
},
// //
async getInfo(){ async getInfo(){
let res = await memberApi.courseInfo({ let res = await apiRoute.xy_personCourseScheduleInfo({
id: this.filteredData.id, person_course_schedule_id: this.filteredData.person_course_schedule_id,
}) })
if(res.code != 1){ if(res.code != 1){
uni.showToast({ uni.showToast({
@ -162,13 +179,13 @@ export default {
this.leaveFormData.reason = '' this.leaveFormData.reason = ''
}else{ }else{
// //
if (!this.leaveFormData.reason){ // if (!this.leaveFormData.reason){
uni.showToast({ // uni.showToast({
title: '请输入请假原因', // title: '',
icon: 'none' // icon: 'none'
}) // })
return // return
} // }
this.submitLeave()// this.submitLeave()//
} }
this.leaveShow = false this.leaveShow = false
@ -176,7 +193,8 @@ export default {
// //
async submitLeave(){ async submitLeave(){
let data = {...this.leaveFormData} let data = {...this.leaveFormData}
let res = await memberApi.askForLeave(data) data.status = 2
let res = await apiRoute.xy_personCourseScheduleEditStatus(data)
if(res.code != 1){ if(res.code != 1){
uni.showToast({ uni.showToast({
title: res.msg, title: res.msg,
@ -203,7 +221,8 @@ export default {
// //
this.leaveFormData.reason = ''// this.leaveFormData.reason = ''//
let data = {...this.leaveFormData} let data = {...this.leaveFormData}
let res = await memberApi.delAskForLeave(data) data.status = 0
let res = await apiRoute.xy_personCourseScheduleEditStatus(data)
this.cancelLeaveShow = false this.cancelLeaveShow = false
if(res.code != 1){ if(res.code != 1){
uni.showToast({ uni.showToast({

Loading…
Cancel
Save