基础版本库3.4.1
这个是js代码部分
import { asyncSetStorage, asyncGetStorage } from "@/utils/storage";
import { dataCourse } from "@/api/course";
Page({
data: {
nowWeek: 1, // 当前周
tempWeek: null,
totalWeek: 22, // 周总数
totalWeeks: [],
weekRange: [],
swiperDirection: null, // 新增的数据属性,用于跟踪swiper组件的滑动方向
swiperIndex: 0, // 新增的数据属性,用于跟踪swiper组件的当前索引
showModal: false, // 控制模态对话框的显示和隐藏
weekDayCount: 7,
startDate: "2023/02/20", // 开学日期
weekIndexText: ["一", "二", "三", "四", "五", "六", "日"],
nowMonth: 1, // 当前周的月份
courseList: [],
colorList: [
"#FFDAB9",
"#90EE90",
"#AFEEEE",
"#FFB6C1",
"#ADD8E6",
"#E0FFFF",
"#FFDAB9",
"#90EE90",
"#AFEEEE",
"#FFB6C1",
"#ADD8E6",
"#E0FFFF",
"#FFDAB9",
"#90EE90",
],
courseColor: {},
weekCalendar: [0, 1, 2, 3, 4, 5, 6],
date_day_list: [],
firstEntry: true,
weekItemWidth: 0, // 初始值
},
getDate(offset = 0) {
let date = new Date();
// 计算当前周的起始日期
let firstDayOfWeek = new Date(
date.setDate(date.getDate() - date.getDay() + 1)
);
let weekCalendar = [];
for (let index = 0; index < 7; index++) {
let newDate = new Date(firstDayOfWeek);
newDate.setDate(firstDayOfWeek.getDate() + index + offset * 7);
let month = newDate.getMonth() + 1;
let day = newDate.getDate();
// 将日期加入weekCalendar
weekCalendar.push(`${month}/${day}`);
}
this.setData({
weekCalendar,
nowMonth: weekCalendar[0].split("/")[0], // 更新月份
});
},
async onShow() {
this.getDate();
let weekRange = [];
for (let i = 1; i <= this.data.totalWeek; i++) {
weekRange.push("第" + i + "周");
}
let nowWeek = wx.getStorageSync("nowWeek");
if (!nowWeek) {
nowWeek = 1; // 设置默认周数为第一周
}
this.setData({
weekRange,
nowWeek,
});
this.course_data();
},
showModal() {
this.setData({ showModal: true }); // 显示模态对话框
},
toggleModal() {
this.setData({
showModal: !this.data.showModal,
});
},
async selectWeek(e) {
this.setData({
nowWeek: e.currentTarget.dataset.week, // 更新当前周数
showModal: false,
});
asyncSetStorage("nowWeek", e.currentTarget.dataset.week);
},
async swiperSwitchWeek(e) {
const { current, source } = e.detail;
if (source === "touch") {
const tempWeek = this.data.tempWeek || this.data.swiperIndex; // 使用tempWeek或swiperIndex作为当前索引
const newWeek = this.data.nowWeek + (current - tempWeek);
// 检查是否到达左边界
if (newWeek < 1) {
if (current < tempWeek) {
this.setData({
swiperIndex: tempWeek, // 保持当前swiper位置不变
});
}
return;
}
// 检查是否到达右边界
if (newWeek > this.data.totalWeek) {
if (current > tempWeek) {
this.setData({
swiperIndex: tempWeek, // 保持当前swiper位置不变
});
}
return;
}
// 如果没有达到边界,正常处理
this.setData({
swiperIndex: current, // 更新swiper位置
nowWeek: newWeek, // 更新当前周数
});
}
},
async course_data(options) {
var that = this;
// 请求后端数据
const { data } = await dataCourse();
// 整理课程数据
let courseData = []; // 存储整理后的课程数据
for (let key in data) {
let course = data[key]; // 获取每门课程的信息
let weeksAndPeriods = course.Weeks_and_Periods; // 获取课程的上课时间安排
let i = 1;
let z = 1;
// 遍历课程的上课时间安排
for (let week in weeksAndPeriods) {
let j = 1;
let periods = weeksAndPeriods[week].split("-"); // 将上课节数拆分成数组
periods.forEach((period) => {
let weekIndex = parseInt(week) - 1; // 将周数转换为数组索引
let dayIndex = parseInt(course.week_day) - 1; // 将星期几转换为数组索引
let periodIndex = parseInt(period) - 1; // 将课程数转换为数组索引
// 构造课程对象
let courseItem = {
Class: course.Class,
Course: course.Course,
Teacher: course.Teacher,
Location: course.Location,
class_num: course.class_num,
course_num: course.course_num,
week_day: course.week_day,
count: i,
color: this.getRandomLightColor(),
};
if (periods.length > 2) {
courseItem.course_length = periods.length;
courseItem.go = j;
} else {
courseItem.duan = z;
}
i += 1;
j += 1;
z += 1;
// 确保对应位置存在数组,避免空指针异常
if (!courseData[weekIndex]) {
courseData[weekIndex] = [];
}
if (!courseData[weekIndex][dayIndex]) {
courseData[weekIndex][dayIndex] = [];
}
if (!courseData[weekIndex][dayIndex][periodIndex]) {
courseData[weekIndex][dayIndex][periodIndex] = [];
}
// 将课程对象添加到对应的位置
// 检查该位置是否已经有课程对象
if (courseData[weekIndex][dayIndex][periodIndex].length === 0) {
// 如果没有课程对象,才添加课程对象
courseData[weekIndex][dayIndex][periodIndex].push(courseItem);
}
});
}
}
// 循环14次,如果没有值就用null填充
for (let weekIndex = 0; weekIndex < 22; weekIndex++) {
for (let dayIndex = 0; dayIndex < 7; dayIndex++) {
for (let periodIndex = 0; periodIndex < 14; periodIndex++) {
if (!courseData[weekIndex]) {
courseData[weekIndex] = [];
}
if (!courseData[weekIndex][dayIndex]) {
courseData[weekIndex][dayIndex] = [];
}
if (!courseData[weekIndex][dayIndex][periodIndex]) {
courseData[weekIndex][dayIndex][periodIndex] = null;
}
}
}
}
wx.getSystemInfo({
success: function (res) {
var windowWidth = res.windowWidth; // 获取屏幕的宽度
let weekItemWidth = (windowWidth - 50) / 7; // 计算weekItemWidth的值
that.setData({
weekItemWidth: weekItemWidth,
});
},
});
wx.setStorageSync("courseData", courseData);
// 更新数据
this.setData({
courseData: courseData,
});
},
getRandomLightColor() {
// 生成随机的 R、G、B 分量(200-255),确保颜色较浅
const r = Math.floor(Math.random() * 56) + 200;
const g = Math.floor(Math.random() * 56) + 200;
const b = Math.floor(Math.random() * 56) + 200;
// 将 RGB 转换为十六进制表示
const hex =
"#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
return hex;
},
detail_course(e) {
const { _relatedInfo } = e;
console.log(_relatedInfo);
let title =
typeof _relatedInfo.anchorTargetText === "string"
? _relatedInfo.anchorTargetText
: "默认标题";
let content =
typeof _relatedInfo.anchorRelatedText === "string"
? _relatedInfo.anchorRelatedText
: "默认内容";
wx.showModal({
title: title,
showCancel: false,
});
},
});
