Initial commit
This commit is contained in:
148
wechat-mini-program/pages/course/course.js
Normal file
148
wechat-mini-program/pages/course/course.js
Normal file
@@ -0,0 +1,148 @@
|
||||
const app = getApp()
|
||||
const { request } = require('../../utils/request')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
user: {},
|
||||
honors: [],
|
||||
projects: [],
|
||||
filteredProjects: [],
|
||||
currentFilter: 'all', // all, enrolled, completed
|
||||
showHonorModal: false,
|
||||
currentHonor: null
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.fetchHonors()
|
||||
this.fetchProjects()
|
||||
},
|
||||
|
||||
onShow() {
|
||||
this.getUserInfo()
|
||||
},
|
||||
|
||||
getUserInfo() {
|
||||
const app = getApp()
|
||||
// Try to get from globalData first to speed up rendering
|
||||
if (app.globalData.userInfo) {
|
||||
this.setData({ user: app.globalData.userInfo })
|
||||
}
|
||||
|
||||
request({ url: '/user/' }).then(user => {
|
||||
app.globalData.userInfo = user;
|
||||
this.setData({ user: user });
|
||||
// Re-fetch data if needed based on user status change
|
||||
// this.fetchHonors();
|
||||
// this.fetchProjects();
|
||||
}).catch(err => {
|
||||
console.error('Failed to fetch user info', err)
|
||||
})
|
||||
},
|
||||
|
||||
onPullDownRefresh() {
|
||||
Promise.all([this.fetchHonors(), this.fetchProjects()]).then(() => {
|
||||
wx.stopPullDownRefresh()
|
||||
})
|
||||
},
|
||||
|
||||
fetchHonors() {
|
||||
return request({
|
||||
url: '/user-honors/',
|
||||
method: 'GET'
|
||||
}).then(res => {
|
||||
this.setData({ honors: res || [] })
|
||||
}).catch(err => {
|
||||
console.error('Failed to fetch honors', err)
|
||||
})
|
||||
},
|
||||
|
||||
fetchProjects() {
|
||||
return request({
|
||||
url: '/user-projects/',
|
||||
method: 'GET'
|
||||
}).then(res => {
|
||||
const list = Array.isArray(res) ? res : []
|
||||
const projects = list.map(item => {
|
||||
// Format date
|
||||
if (item.enrolled_at) {
|
||||
item.enrolled_at_formatted = item.enrolled_at.split('T')[0]
|
||||
}
|
||||
|
||||
const statusMap = {
|
||||
'enrolled': '已报名',
|
||||
'studying': '在读',
|
||||
'graduated': '毕业',
|
||||
'finished': '结束',
|
||||
'completed': '已完成',
|
||||
'cancelled': '已取消'
|
||||
};
|
||||
item.status_display = statusMap[item.status] || item.status;
|
||||
|
||||
return item
|
||||
})
|
||||
|
||||
// Sort projects by status: enrolled, studying, finished, graduated
|
||||
const sortOrder = {
|
||||
'enrolled': 1,
|
||||
'studying': 2,
|
||||
'finished': 3,
|
||||
'graduated': 4
|
||||
};
|
||||
|
||||
projects.sort((a, b) => {
|
||||
const orderA = sortOrder[a.status] || 99;
|
||||
const orderB = sortOrder[b.status] || 99;
|
||||
return orderA - orderB;
|
||||
});
|
||||
|
||||
this.setData({ projects })
|
||||
this.filterProjects()
|
||||
}).catch(err => {
|
||||
console.error('Failed to fetch projects', err)
|
||||
})
|
||||
},
|
||||
|
||||
setFilter(e) {
|
||||
const type = e.currentTarget.dataset.type
|
||||
this.setData({ currentFilter: type })
|
||||
this.filterProjects()
|
||||
},
|
||||
|
||||
filterProjects() {
|
||||
const { projects, currentFilter } = this.data
|
||||
let filtered = []
|
||||
if (currentFilter === 'all') {
|
||||
filtered = projects
|
||||
} else if (currentFilter === 'enrolled') {
|
||||
// 进行中: 已报名, 在读
|
||||
const activeStatuses = ['enrolled', 'studying']
|
||||
filtered = projects.filter(p => activeStatuses.includes(p.status))
|
||||
} else if (currentFilter === 'completed') {
|
||||
// 已完成: 毕业, 结束, 已完成
|
||||
const completedStatuses = ['graduated', 'finished', 'completed']
|
||||
filtered = projects.filter(p => completedStatuses.includes(p.status))
|
||||
} else {
|
||||
filtered = projects.filter(p => p.status === currentFilter)
|
||||
}
|
||||
this.setData({ filteredProjects: filtered })
|
||||
},
|
||||
|
||||
showHonorDetail(e) {
|
||||
const item = e.currentTarget.dataset.item
|
||||
this.setData({
|
||||
showHonorModal: true,
|
||||
currentHonor: item
|
||||
})
|
||||
},
|
||||
|
||||
closeHonorModal() {
|
||||
this.setData({
|
||||
showHonorModal: false,
|
||||
currentHonor: null
|
||||
})
|
||||
},
|
||||
|
||||
preventBubble() {
|
||||
// Prevent tap event from bubbling to mask
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user