This commit is contained in:
ChuXun
2025-10-19 20:28:31 +08:00
parent c81f8a8b03
commit eaab9a762a
100 changed files with 23416 additions and 0 deletions

150
pages/gpa/gpa.js Normal file
View 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('已清空')
}
}
})
}
})