1
This commit is contained in:
150
pages/gpa/gpa.js
Normal file
150
pages/gpa/gpa.js
Normal file
@@ -0,0 +1,150 @@
|
||||
// pages/gpa/gpa.js
|
||||
const { calculateGPA, showSuccess, showError } = require('../../utils/util.js')
|
||||
const learningTracker = require('../../utils/learningTracker.js')
|
||||
|
||||
Page({
|
||||
data: {
|
||||
courses: [],
|
||||
courseName: '',
|
||||
courseScore: '',
|
||||
courseCredit: '',
|
||||
totalGPA: 0,
|
||||
totalCredits: 0
|
||||
},
|
||||
|
||||
onLoad() {
|
||||
this.loadCourses()
|
||||
},
|
||||
|
||||
onShow() {
|
||||
// 开始跟踪学习时间
|
||||
learningTracker.onPageShow('tools')
|
||||
},
|
||||
|
||||
onHide() {
|
||||
// 停止跟踪学习时间
|
||||
learningTracker.onPageHide()
|
||||
},
|
||||
|
||||
onUnload() {
|
||||
// 记录学习时长
|
||||
learningTracker.onPageUnload()
|
||||
},
|
||||
|
||||
// 加载已保存的课程
|
||||
loadCourses() {
|
||||
const courses = wx.getStorageSync('gpaCourses') || []
|
||||
this.setData({ courses })
|
||||
this.calculateTotal()
|
||||
},
|
||||
|
||||
// 课程名称输入
|
||||
onNameInput(e) {
|
||||
this.setData({ courseName: e.detail.value })
|
||||
},
|
||||
|
||||
// 成绩输入
|
||||
onScoreInput(e) {
|
||||
this.setData({ courseScore: e.detail.value })
|
||||
},
|
||||
|
||||
// 学分输入
|
||||
onCreditInput(e) {
|
||||
this.setData({ courseCredit: e.detail.value })
|
||||
},
|
||||
|
||||
// 添加课程
|
||||
onAddCourse() {
|
||||
const { courseName, courseScore, courseCredit, courses } = this.data
|
||||
|
||||
if (!courseName.trim()) {
|
||||
showError('请输入课程名称')
|
||||
return
|
||||
}
|
||||
|
||||
const score = parseFloat(courseScore)
|
||||
const credit = parseFloat(courseCredit)
|
||||
|
||||
if (isNaN(score) || score < 0 || score > 100) {
|
||||
showError('请输入有效的成绩(0-100)')
|
||||
return
|
||||
}
|
||||
|
||||
if (isNaN(credit) || credit <= 0) {
|
||||
showError('请输入有效的学分')
|
||||
return
|
||||
}
|
||||
|
||||
const newCourse = {
|
||||
id: Date.now(),
|
||||
name: courseName.trim(),
|
||||
score: score,
|
||||
credit: credit
|
||||
}
|
||||
|
||||
courses.push(newCourse)
|
||||
wx.setStorageSync('gpaCourses', courses)
|
||||
|
||||
this.setData({
|
||||
courses,
|
||||
courseName: '',
|
||||
courseScore: '',
|
||||
courseCredit: ''
|
||||
})
|
||||
|
||||
this.calculateTotal()
|
||||
showSuccess('添加成功')
|
||||
},
|
||||
|
||||
// 删除课程
|
||||
onDeleteCourse(e) {
|
||||
const { id } = e.currentTarget.dataset
|
||||
|
||||
wx.showModal({
|
||||
title: '确认删除',
|
||||
content: '确定要删除这门课程吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
let { courses } = this.data
|
||||
courses = courses.filter(course => course.id !== id)
|
||||
wx.setStorageSync('gpaCourses', courses)
|
||||
|
||||
this.setData({ courses })
|
||||
this.calculateTotal()
|
||||
showSuccess('删除成功')
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 计算总GPA
|
||||
calculateTotal() {
|
||||
const { courses } = this.data
|
||||
const gpa = calculateGPA(courses)
|
||||
const totalCredits = courses.reduce((sum, course) => sum + course.credit, 0)
|
||||
|
||||
this.setData({
|
||||
totalGPA: gpa,
|
||||
totalCredits: totalCredits
|
||||
})
|
||||
},
|
||||
|
||||
// 清空所有
|
||||
onClearAll() {
|
||||
wx.showModal({
|
||||
title: '确认清空',
|
||||
content: '确定要清空所有课程吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
wx.removeStorageSync('gpaCourses')
|
||||
this.setData({
|
||||
courses: [],
|
||||
totalGPA: 0,
|
||||
totalCredits: 0
|
||||
})
|
||||
showSuccess('已清空')
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user