选课调整
This commit is contained in:
parent
259c50828a
commit
b1dbb96435
@ -18,6 +18,21 @@ export const xkgzsApi = async (params: any) => {
|
||||
return await get("/api/gzs/findPage", params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取最新兴趣课选课信息
|
||||
*/
|
||||
export const getLatestInterestCourseApi = async (params: any) => {
|
||||
return await get("/api/xk/getLatestInterestCourse", params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取当前学期教师上课课程列表
|
||||
*/
|
||||
export const getCurrentSemesterTeacherCoursesApi = async (jsId?: string) => {
|
||||
const params = jsId ? { jsId } : {};
|
||||
return await get("/api/xkkc/getCurrentSemesterTeacherCourses", params);
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取当前学期和周次
|
||||
*/
|
||||
|
||||
@ -20,6 +20,10 @@
|
||||
<text class="register-count">{{ xkkc.hasNum || 0 }}</text>
|
||||
<text> | {{ xkkc.maxNum || 0 }}</text>
|
||||
</view>
|
||||
<view class="study-time-info" v-if="xkkc.studyTime">
|
||||
<text></text>
|
||||
<text class="study-time">{{ xkkc.studyTime }}</text>
|
||||
</view>
|
||||
<view v-if="xkkc.isSelected" class="selected-mark">
|
||||
<uni-icons
|
||||
type="checkbox-filled"
|
||||
@ -82,26 +86,53 @@ const toggleSelection = (xkkc: any) => {
|
||||
}
|
||||
// xkkc.hasNum--;
|
||||
} else {
|
||||
// 如果是未选中,判断是否已选满
|
||||
// 选择课程时的验证逻辑
|
||||
const maxNum = xkkc.maxNum || 0;
|
||||
const hasNum = xkkc.hasNum || 0;
|
||||
if (maxNum > hasNum) {
|
||||
if (props.multiple) {
|
||||
// 如果是多选,则添加到已选数组
|
||||
if (!selectedXkkcIds.includes(xkkc.id)) {
|
||||
selectedXkkcIds.push(xkkc.id);
|
||||
// xkkc.hasNum++;
|
||||
}
|
||||
} else {
|
||||
// 如果是单选,则清空已选数组并添加当前课程
|
||||
selectedXkkcIds = [xkkc.id];
|
||||
// 清理选中状态
|
||||
xkkcList.value.forEach((xkkc: any) => {
|
||||
xkkc.isSelected = false;
|
||||
});
|
||||
}
|
||||
xkkc.isSelected = true;
|
||||
|
||||
if (maxNum <= hasNum) {
|
||||
uni.showToast({
|
||||
title: '该课程已满员',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查上课时间是否重复
|
||||
if (xkkc.studyTime && props.multiple) {
|
||||
const hasTimeConflict = xkkcList.value.some((item: any) => {
|
||||
// 检查已选课程中是否有相同上课时间
|
||||
return item.isSelected &&
|
||||
item.id !== xkkc.id &&
|
||||
item.studyTime === xkkc.studyTime;
|
||||
});
|
||||
|
||||
if (hasTimeConflict) {
|
||||
uni.showToast({
|
||||
title: '上课时间重复,请重新选择!',
|
||||
icon: 'none',
|
||||
duration: 3000
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 通过验证,可以选课
|
||||
if (props.multiple) {
|
||||
// 如果是多选,则添加到已选数组
|
||||
if (!selectedXkkcIds.includes(xkkc.id)) {
|
||||
selectedXkkcIds.push(xkkc.id);
|
||||
}
|
||||
} else {
|
||||
// 如果是单选,则清空已选数组并添加当前课程
|
||||
selectedXkkcIds = [xkkc.id];
|
||||
// 清理选中状态
|
||||
xkkcList.value.forEach((item: any) => {
|
||||
item.isSelected = false;
|
||||
});
|
||||
}
|
||||
xkkc.isSelected = true;
|
||||
}
|
||||
// 更新本地存储
|
||||
uni.setStorageSync("selectedXkkcIds", selectedXkkcIds);
|
||||
@ -214,12 +245,24 @@ if (props.xk && props.xk.xkkcs) {
|
||||
.register-info {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.register-count {
|
||||
color: #2879ff;
|
||||
}
|
||||
}
|
||||
|
||||
.study-time-info {
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
margin-bottom: 8px;
|
||||
|
||||
.study-time {
|
||||
color: #ff6b35;
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.selected-mark {
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
|
||||
@ -51,9 +51,9 @@ const selectedXkkcIds = ref<any>([]);
|
||||
|
||||
const xsFlag = ref(true);
|
||||
|
||||
// 检查选课是否已结束
|
||||
// 检查选课是否已结束(保留作为备用验证)
|
||||
const checkEnrollmentStatus = (xk: any) => {
|
||||
if (!xk || !xk.xkjstime) return;
|
||||
if (!xk || !xk.xkjstime) return false;
|
||||
|
||||
const now = new Date().getTime();
|
||||
const endTime = new Date(xk.xkjstime).getTime();
|
||||
@ -76,7 +76,7 @@ const switchXk = (xk: any) => {
|
||||
selectedXkkcIds.value = [];
|
||||
uni.setStorageSync("selectedXkkcIds", []);
|
||||
|
||||
// 检查选课状态
|
||||
// 备用验证:检查选课状态(主要验证已在xkXqk.vue中完成)
|
||||
if (checkEnrollmentStatus(xk)) {
|
||||
return;
|
||||
}
|
||||
@ -86,7 +86,7 @@ const switchXs = (xs: any) => {
|
||||
xsFlag.value = false;
|
||||
}
|
||||
|
||||
// 选课时间结束
|
||||
// 选课时间结束(保留作为备用验证)
|
||||
const xkTimeOver = (val: any) => {
|
||||
console.log('选课时间结束:', val);
|
||||
// 选课开始时不再跳转,让用户继续选课
|
||||
@ -109,7 +109,7 @@ const submit = async () => {
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查选课时间
|
||||
// 检查选课时间(保留作为备用验证)
|
||||
if (curXk.value && curXk.value.xkkstime) {
|
||||
const now = dayjs().valueOf();
|
||||
const startTime = dayjs(curXk.value.xkkstime).valueOf();
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import { defineStore } from "pinia";
|
||||
import { authenticationApi, loginCode, loginPass, weChatLogin, checkOpenId } from "@/api/system/login";
|
||||
import { checkXsXkByTypeApi, xsKxApi } from "@/api/base/xkApi";
|
||||
import { getLatestInterestCourseApi } from "@/api/base/server";
|
||||
import { jcGetJcBzListApi } from "@/api/base/jcApi";
|
||||
import { AUTH_KEY } from "@/config";
|
||||
import { imagUrl } from "@/utils";
|
||||
@ -244,9 +245,77 @@ export const useUserStore = defineStore({
|
||||
});
|
||||
}
|
||||
},
|
||||
// 验证选课状态(时间验证)- 通用版本
|
||||
async validateEnrollmentStatus(xklxId: string, courseType: string = '兴趣课') {
|
||||
try {
|
||||
// 获取选课信息进行验证
|
||||
const res = await getLatestInterestCourseApi({ xklxId });
|
||||
const xkInfo = res.result;
|
||||
|
||||
if (!xkInfo) {
|
||||
uni.showToast({
|
||||
title: '获取选课信息失败',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查选课状态:如果 xkzt 等于 0,表示未发布
|
||||
if (xkInfo.xkzt === 0) {
|
||||
// 选课未发布,跳转到课程报名尚未开放页面
|
||||
uni.setStorageSync('title', courseType);
|
||||
uni.reLaunch({
|
||||
url: "/pages/base/xk/qk/wks",
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查选课是否已结束
|
||||
if (xkInfo.xkjstime) {
|
||||
const now = new Date().getTime();
|
||||
const endTime = new Date(xkInfo.xkjstime).getTime();
|
||||
|
||||
if (now > endTime) {
|
||||
// 选课已结束,跳转到结束页面
|
||||
const courseInfo = encodeURIComponent(JSON.stringify(xkInfo));
|
||||
uni.navigateTo({
|
||||
url: `/pages/base/xk/qk/yjz?courseInfo=${courseInfo}`
|
||||
});
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 所有验证通过
|
||||
return true;
|
||||
|
||||
} catch (error) {
|
||||
console.error('验证选课状态失败:', error);
|
||||
uni.showToast({
|
||||
title: '验证选课状态失败',
|
||||
icon: 'none'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
// 验证兴趣课选课状态(保持向后兼容)
|
||||
async validateInterestCourseEnrollmentStatus() {
|
||||
return this.validateEnrollmentStatus("962488654", "兴趣课");
|
||||
},
|
||||
|
||||
// 验证俱乐部选课状态
|
||||
async validateClubEnrollmentStatus() {
|
||||
return this.validateEnrollmentStatus("816059832", "俱乐部");
|
||||
},
|
||||
// 校验兴趣课 - 优化版本
|
||||
async checkXqk() {
|
||||
try {
|
||||
// 先验证选课状态(时间验证)
|
||||
const validateResult = await this.validateInterestCourseEnrollmentStatus();
|
||||
if (!validateResult) {
|
||||
return; // 验证失败,已处理跳转
|
||||
}
|
||||
|
||||
// 使用getXsKx接口获取详细选课信息
|
||||
const res = await xsKxApi({
|
||||
xsId: this.curXs.id,
|
||||
@ -264,9 +333,9 @@ export const useUserStore = defineStore({
|
||||
url: "/pages/base/xk/pay/index",
|
||||
});
|
||||
return;
|
||||
case 2: // 可选课列表 - 跳转到抢课页面
|
||||
case 2: // 可选课列表 - 跳转到告知书页
|
||||
uni.reLaunch({
|
||||
url: "/pages/base/xk/qk/xqk",
|
||||
url: "/pages/base/gzs/xkXqk",
|
||||
});
|
||||
return;
|
||||
case 3: // 已支付 - 跳转到详情页
|
||||
@ -324,6 +393,12 @@ export const useUserStore = defineStore({
|
||||
// 校验俱乐部 - 优化版本
|
||||
async checkJlb() {
|
||||
try {
|
||||
// 先验证俱乐部选课状态(时间验证)
|
||||
const validateResult = await this.validateClubEnrollmentStatus();
|
||||
if (!validateResult) {
|
||||
return; // 验证失败,已处理跳转
|
||||
}
|
||||
|
||||
// 使用getXsKx接口获取详细选课信息
|
||||
const res = await xsKxApi({
|
||||
xsId: this.curXs.id,
|
||||
@ -341,9 +416,9 @@ export const useUserStore = defineStore({
|
||||
url: "/pages/base/xk/pay/index",
|
||||
});
|
||||
return;
|
||||
case 2: // 可选课列表 - 跳转到抢课页面
|
||||
case 2: // 可选课列表 - 跳转到告知书
|
||||
uni.reLaunch({
|
||||
url: "/pages/base/xk/qk/jlb",
|
||||
url: "/pages/base/gzs/xkJlb",
|
||||
});
|
||||
return;
|
||||
case 3: // 已支付 - 跳转到详情页
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user