diff --git a/src/api/base/jcApi.ts b/src/api/base/jcApi.ts
index 368e8dc..760e68d 100644
--- a/src/api/base/jcApi.ts
+++ b/src/api/base/jcApi.ts
@@ -4,89 +4,68 @@ import { get, post } from "@/utils/request";
* 获取就餐标准列表
*/
export const jcGetJcBzListApi = async (params: any) => {
- return await get("/mobile/jc/getJcBzList", params);
+ return await get("/mobile/jz/jc/getJcBzList", params);
};
/**
* 获取就餐标准详情
*/
export const jcGetJcBzDetailApi = async (params: any) => {
- return await get("/mobile/jc/getJcBzDetail", params);
+ return await get("/mobile/jz/jc/getJcBzDetail", params);
};
/**
* 学生报名就餐标准
*/
export const jcBmJcBzApi = async (params: any) => {
- return await post("/mobile/jc/bmJcBz", params);
+ return await post("/mobile/jz/jc/bmJcBz", params);
};
/**
* 获取学生已报名的就餐标准列表
*/
export const jcGetXsBmJcBzListApi = async (params: any) => {
- return await get("/mobile/jc/getXsBmJcBzList", params);
+ return await get("/mobile/jz/jc/getXsBmJcBzList", params);
};
/**
* 取消报名就餐标准
*/
export const jcCancelBmJcBzApi = async (params: any) => {
- return await post("/mobile/jc/cancelBmJcBz", params);
+ return await post("/mobile/jz/jc/cancelBmJcBz", params);
};
/**
* 获取就餐标准报名倒计时
*/
export const jcGetBmExpiredTimeApi = async (params: any) => {
- return await get("/mobile/jc/getBmExpiredTime", params);
+ return await get("/mobile/jz/jc/getBmExpiredTime", params);
};
/**
* 发起就餐标准缴费
*/
export const jcFqJcBzJfjApi = async (params: any) => {
- return await post("/mobile/jc/fqJcBzJfj", params);
+ return await post("/mobile/jz/jc/fqJcBzJfj", params);
};
/**
* 查询就餐标准缴费状态
*/
export const jcJcBzJfCxjApi = async (params: any) => {
- return await post("/mobile/jc/jcBzJfcx", params);
+ return await post("/mobile/jz/jc/jcBzJfcx", params);
};
/**
* 获取就餐标准报名学生列表
*/
export const jcGetJcBzBmXsListApi = async (params: any) => {
- return await get("/mobile/jc/getJcBzBmXsList", params);
-};
-
-/**
- * 获取就餐标准统计信息
- */
-export const jcGetJcBzTjInfoApi = async (params: any) => {
- return await get("/mobile/jc/getJcBzTjInfo", params);
-};
-
-/**
- * 获取当前学期就餐标准配置
- */
-export const jcGetDqXqJcBzConfigApi = async () => {
- return await get("/mobile/jc/getDqXqJcBzConfig");
+ return await get("/mobile/jz/jc/getJcBzBmXsList", params);
};
/**
* 获取学生就餐记录
*/
export const jcGetXsJcJlApi = async (params: any) => {
- return await get("/mobile/jc/getXsJcJl", params);
-};
-
-/**
- * 获取就餐标准支付倒计时
- */
-export const jcGetJcBzPayExpiredTimeApi = async (params: any) => {
- return await get("/mobile/jc/getJcBzPayExpiredTime", params);
+ return await get("/mobile/jz/jc/getXsJcJl", params);
};
\ No newline at end of file
diff --git a/src/api/base/server.ts b/src/api/base/server.ts
index c4ff4f6..d082d1b 100644
--- a/src/api/base/server.ts
+++ b/src/api/base/server.ts
@@ -11,28 +11,12 @@ export const glxsApi = async (params: any) => {
return await post("/open/login/glxs", params);
};
-export const xkAddXkqdApi = async (params: any) => {
- return await post("/mobile/xk/addXkqd", params);
-};
-
-export const xkListApi = async (params: any) => {
- return await get("/mobile/xk/list", params);
-};
-export const xkXkqdApi = async (params: any) => {
- return await get("/mobile/xk/xkqd", params);
-};
export const kcjhFindKcjhByKcIdApi = async (params: any) => {
return await get("/api/kcjh/findKcjhByKcId", params);
};
export const xkgzsApi = async (params: any) => {
return await get("/api/gzs/findPage", params);
};
-export const xkxkbmInfoApi = async (params: any) => {
- return await get("/mobile/xk/xkbmInfo", params);
-};
-export const xkqddeleteApi = async (params: any) => {
- return await post("/api/xkqd/delete?ids=" + params.ids);
-};
/**
* 获取当前学期和周次
@@ -67,20 +51,6 @@ export const drpkkbApi = async (params: any) => {
return await get("/mobile/jz/pkkb/drpkkb", params);
};
-/**
- * 查询学生选课列表
- */
-export const xsKxApi = async (params: any) => {
- return await get("/mobile/jz/xkkc/list", params);
-};
-
-/**
- * 学生已选课程列表
- */
-export const xsYxListApi = async (params: any) => {
- return await get("/mobile/jz/xsxk/list", params);
-};
-
/**
* 查询学生考试场次
*/
@@ -94,46 +64,6 @@ export const xsKsccApi = async (params: any) => {
export const xsKscjApi = async (params: any) => {
return await get("/mobile/jz/kscj", params);
};
-
-/**
- * 家长抢课
- */
-export const jzXkQkjApi = async (params: any) => {
- return await post("/mobile/jz/xk/qk", params);
-};
-/**
- * 家长获取抢课到期时间
- */
-export const jzGetQkExpiredTime = async (params: any) => {
- return await get("/mobile/jz/xk/getQkExpiredTime", params);
-};
-/**
- * 家长发起缴费
- */
-export const jzXkFqJfjApi = async (params: any) => {
- return await post("/mobile/jz/xk/fqjf", params);
-};
-
-/**
- * 家长取消选课,不支付
- */
-export const jzXkCancelApi = async (params: any) => {
- return await post("/mobile/jz/xk/cancel", params);
-};
-
-/**
- * 家长退课
- */
-export const jzXkTkjApi = async (params: any) => {
- return await post("/mobile/jz/xk/tk", params);
-};
-
-/**
- * 家长缴费查询
- */
-export const jzXkJfCxjApi = async (params: any) => {
- return await post("/mobile/jz/xk/jfcx", params);
-};
/**
* 家长接龙查询
*/
diff --git a/src/api/base/xkApi.ts b/src/api/base/xkApi.ts
new file mode 100644
index 0000000..45c92e0
--- /dev/null
+++ b/src/api/base/xkApi.ts
@@ -0,0 +1,95 @@
+// 选课相关接口
+import { get, post } from "@/utils/request";
+
+/**
+ * 查询学生选课列表
+ */
+export const xsKxApi = async (params: any) => {
+ return await get("/mobile/jz/xkkc/list", params);
+};
+
+/**
+ * 学生已选课程列表
+ */
+export const xsYxListApi = async (params: any) => {
+ return await get("/mobile/jz/xsxk/list", params);
+};
+
+/**
+ * 家长抢课
+ */
+export const jzXkQkjApi = async (params: any) => {
+ return await post("/mobile/jz/xk/qk", params);
+};
+
+/**
+ * 家长获取抢课到期时间
+ */
+export const jzGetQkExpiredTime = async (params: any) => {
+ return await get("/mobile/jz/xk/getQkExpiredTime", params);
+};
+
+/**
+ * 家长发起缴费
+ */
+export const jzXkFqJfjApi = async (params: any) => {
+ return await post("/mobile/jz/xk/fqjf", params);
+};
+
+/**
+ * 家长取消选课,不支付
+ */
+export const jzXkCancelApi = async (params: any) => {
+ return await post("/mobile/jz/xk/cancel", params);
+};
+
+/**
+ * 家长退课
+ */
+export const jzXkTkjApi = async (params: any) => {
+ return await post("/mobile/jz/xk/tk", params);
+};
+
+/**
+ * 家长缴费查询
+ */
+export const jzXkJfCxjApi = async (params: any) => {
+ return await post("/mobile/jz/xk/jfcx", params);
+};
+
+/**
+ * 查询学生当前学期是否选择了对应类型的选课
+ */
+export const checkXsXkByTypeApi = async (params: any) => {
+ return await get("/mobile/jz/xk/checkXsXkByType", params);
+};
+
+/**
+ * 获取学生选课状态和限制信息
+ */
+export const getXsXkStatusApi = async (params: any) => {
+ return await get("/mobile/jz/xkkc/list", params);
+};
+
+/**
+ * 选课相关其他接口
+ */
+export const xkAddXkqdApi = async (params: any) => {
+ return await post("/mobile/xk/addXkqd", params);
+};
+
+export const xkListApi = async (params: any) => {
+ return await get("/mobile/xk/list", params);
+};
+
+export const xkXkqdApi = async (params: any) => {
+ return await get("/mobile/xk/xkqd", params);
+};
+
+export const xkxkbmInfoApi = async (params: any) => {
+ return await get("/mobile/xk/xkbmInfo", params);
+};
+
+export const xkqddeleteApi = async (params: any) => {
+ return await post("/api/xkqd/delete?ids=" + params.ids);
+};
\ No newline at end of file
diff --git a/src/config.ts b/src/config.ts
index ddf376c..435a593 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -1,5 +1,5 @@
-// const ip: string = "127.0.0.1:8897";
-const ip: string = "lzcxsx.cn";
+const ip: string = "127.0.0.1:8897";
+// const ip: string = "lzcxsx.cn";
const fwqip: string = "lzcxsx.cn";
//const ip: string = "zhxy.yufangzc.com";
//const fwqip: string = "zhxy.yufangzc.com";
diff --git a/src/pages.json b/src/pages.json
index 6ab5f55..0095ac7 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -192,6 +192,13 @@
"enablePullDownRefresh": false
}
},
+ {
+ "path": "pages/base/home/xsXz",
+ "style": {
+ "navigationBarTitleText": "学生选择",
+ "enablePullDownRefresh": false
+ }
+ },
{
"path": "pages/base/xk/qk/xqk",
"style": {
@@ -271,6 +278,72 @@
"navigationBarTitleText": "俱乐部告知书",
"enablePullDownRefresh": false
}
+ },
+ {
+ "path": "pages/base/jc/index",
+ "style": {
+ "navigationBarTitleText": "检查",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/detail",
+ "style": {
+ "navigationBarTitleText": "检查详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/bm",
+ "style": {
+ "navigationBarTitleText": "报名",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/bm-detail",
+ "style": {
+ "navigationBarTitleText": "报名详情",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/record",
+ "style": {
+ "navigationBarTitleText": "记录",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/pay/index",
+ "style": {
+ "navigationBarTitleText": "支付",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/pay/wait",
+ "style": {
+ "navigationBarTitleText": "",
+ "enablePullDownRefresh": false,
+ "navigationBarBackgroundColor": "#ffffff",
+ "navigationBarTextStyle": "black",
+ "backgroundColor": "#ffffff"
+ }
+ },
+ {
+ "path": "pages/base/jc/pay/success",
+ "style": {
+ "navigationBarTitleText": "支付成功",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/jc/pay/fail",
+ "style": {
+ "navigationBarTitleText": "支付失败",
+ "enablePullDownRefresh": false
+ }
}
],
"globalStyle": {
diff --git a/src/pages/base/components/JcBzDetailCard/index.vue b/src/pages/base/components/JcBzDetailCard/index.vue
new file mode 100644
index 0000000..2b1c00b
--- /dev/null
+++ b/src/pages/base/components/JcBzDetailCard/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+ {{ jcBz.bzmc || '暂无标准名称' }}
+
+ 价格:¥{{ jcBz.jfje || 0 }}
+
+ {{ jcBz.bzms || '暂无描述' }}
+ 有效期:{{ jcBz.yxq || '暂无有效期信息' }}
+
+
+
+
+
+ 查看详情
+
+
+
+
+
+
+
+ 已选择:
+ {{ jcBzList.length }} 个就餐标准
+
+
+ 总金额:
+ ¥{{ totalPrice }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/base/components/JcBzList/index.vue b/src/pages/base/components/JcBzList/index.vue
index 4bb2269..9524593 100644
--- a/src/pages/base/components/JcBzList/index.vue
+++ b/src/pages/base/components/JcBzList/index.vue
@@ -60,7 +60,7 @@ const props = withDefaults(defineProps<{
});
// 定义一个上级传入的emit响应事件用于接收数据变更
-const emit = defineEmits(['change'])
+const emit = defineEmits(['change', 'selectedData'])
// 就餐标准列表数据
const jcBzList = ref([]);
@@ -89,6 +89,12 @@ const initSelectedStatus = () => {
jcBzList.value.forEach((jcBz: any) => {
jcBz.isSelected = selectedJcBzIds.includes(jcBz.id);
});
+
+ // 发送初始选中的数据
+ const selectedData = jcBzList.value.filter((item: any) =>
+ selectedJcBzIds.includes(item.id)
+ );
+ emit("selectedData", selectedData);
};
// 切换选餐标准
@@ -128,6 +134,12 @@ const toggleSelection = (jcBz: any) => {
// 更新本地存储
uni.setStorageSync("selectedJcBzIds", selectedJcBzIds);
emit("change", selectedJcBzIds);
+
+ // 发送选中的完整数据
+ const selectedData = jcBzList.value.filter((item: any) =>
+ selectedJcBzIds.includes(item.id)
+ );
+ emit("selectedData", selectedData);
}
const goToDetail = (jcBz: any) => {
diff --git a/src/pages/base/components/JcBzPicker/index.vue b/src/pages/base/components/JcBzPicker/index.vue
new file mode 100644
index 0000000..7cf2b40
--- /dev/null
+++ b/src/pages/base/components/JcBzPicker/index.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/base/components/XkPicker/index.vue b/src/pages/base/components/XkPicker/index.vue
index 9cefba9..b98eea8 100644
--- a/src/pages/base/components/XkPicker/index.vue
+++ b/src/pages/base/components/XkPicker/index.vue
@@ -26,13 +26,11 @@
class="xk-item"
:class="{
'xk-item-active': curXk.id === xk.id,
- 'xk-item-selected': xk.selected,
}"
@click="switchXk(xk)"
>
{{ xk.xkmc }}
- 已选择
import { ref, watch } from "vue";
-import { xsKxApi, xsYxListApi } from "@/api/base/server";
+import { xsKxApi, xsYxListApi } from "@/api/base/xkApi";
import { useUserStore } from "@/store/modules/user";
import { useDataStore } from "@/store/modules/data";
@@ -223,11 +221,6 @@ if (props.xsId) {
background-color: rgba(64, 158, 255, 0.05);
}
- &-selected {
- background-color: rgba(64, 158, 255, 0.1);
- border-left: 3px solid #409eff;
- }
-
.xk-info {
flex: 1;
margin-left: 12px;
@@ -239,14 +232,6 @@ if (props.xsId) {
margin-bottom: 4px;
display: block;
}
-
- .xk-selected-tip {
- font-size: 12px;
- color: #409eff;
- background-color: rgba(64, 158, 255, 0.1);
- padding: 2px 6px;
- border-radius: 4px;
- }
}
}
}
diff --git a/src/pages/base/gzs/jc.vue b/src/pages/base/gzs/jc.vue
index fa0726e..ed54c9c 100644
--- a/src/pages/base/gzs/jc.vue
+++ b/src/pages/base/gzs/jc.vue
@@ -50,7 +50,7 @@ async function submit() {
sign_file: sign_file.value,
});
uni.reLaunch({
- url: "/pages/base/xk/qk/jlb",
+ url: "/pages/base/jc/bm",
});
}
diff --git a/src/pages/base/home/xsXz.vue b/src/pages/base/home/xsXz.vue
new file mode 100644
index 0000000..193b2b0
--- /dev/null
+++ b/src/pages/base/home/xsXz.vue
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/base/jc/README.md b/src/pages/base/jc/README.md
new file mode 100644
index 0000000..5662603
--- /dev/null
+++ b/src/pages/base/jc/README.md
@@ -0,0 +1,78 @@
+# JC模块 - 就餐标准管理
+
+## 功能概述
+
+JC模块是用于管理学生就餐标准的前端模块,包含以下主要功能:
+
+### 1. 就餐标准列表 (`/pages/base/jc/index.vue`)
+- 显示当前学期可用的就餐标准
+- 支持学生选择器切换不同学生
+- 展示就餐标准的基本信息(名称、价格、描述)
+
+### 2. 就餐标准详情 (`/pages/base/jc/detail.vue`)
+- 显示就餐标准的详细信息
+- 包含标准描述、使用说明、注意事项等
+- 支持图片展示
+
+### 3. 就餐标准报名 (`/pages/base/jc/bm.vue`)
+- 支持多选就餐标准
+- 实时计算总金额
+- 确认报名后跳转到支付页面
+
+### 4. 支付流程 (`/pages/base/jc/pay/`)
+- 支付页面 (`index.vue`):显示报名信息和支付倒计时
+- 支付等待页面 (`wait.vue`):处理支付回调
+- 支付成功页面 (`success.vue`):支付成功提示
+- 支付失败页面 (`fail.vue`):支付失败处理
+
+### 5. 就餐记录 (`/pages/base/jc/record.vue`)
+- 显示学生的就餐记录历史
+- 包含就餐日期、状态、地点等信息
+
+## 组件结构
+
+### 核心组件
+- `JcBzList` (`/pages/base/components/JcBzList/index.vue`):就餐标准列表组件
+- `JcRecordList` (`/pages/base/components/JcRecordList/index.vue`):就餐记录列表组件
+
+### API接口
+所有JC相关的API接口都集中在 `jcApi.ts` 文件中,包括:
+- 获取就餐标准列表
+- 获取就餐标准详情
+- 学生报名就餐标准
+- 取消报名
+- 发起支付
+- 查询支付状态
+- 获取就餐记录等
+
+## 数据流
+
+1. **报名流程**:
+ - 学生选择就餐标准 → 确认报名 → 跳转支付页面 → 完成支付
+
+2. **数据存储**:
+ - 使用 Pinia store 管理状态
+ - 本地存储保存选中状态
+ - 支付数据通过 store 传递
+
+## 技术特点
+
+- 采用 Vue 3 Composition API
+- 使用 TypeScript 进行类型检查
+- 响应式设计,支持移动端
+- 模块化组件设计
+- 统一的错误处理机制
+
+## 注意事项
+
+1. 支付倒计时功能需要后端提供倒计时接口
+2. 多选功能需要合理处理数据同步
+3. 支付状态查询需要定时轮询
+4. 图片资源需要正确的路径处理
+
+## 扩展建议
+
+1. 可以添加就餐标准筛选功能
+2. 支持按时间范围查询就餐记录
+3. 添加就餐统计功能
+4. 支持批量操作就餐标准
\ No newline at end of file
diff --git a/src/pages/base/jc/bm-detail.vue b/src/pages/base/jc/bm-detail.vue
new file mode 100644
index 0000000..3a8c7d0
--- /dev/null
+++ b/src/pages/base/jc/bm-detail.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+ 学生信息
+
+
+ 姓名:
+ {{ curXs.xm }}
+
+
+ 班级:
+ {{ curXs.bjmc }}
+
+
+
+
+
+
+ 报名信息
+
+
+ 报名时间:
+ {{ bmInfo.bmTime || '暂无' }}
+
+
+ 报名状态:
+ 已报名
+
+
+
+
+
+
+
+
+
+ 支付信息
+
+
+ 缴费金额:
+ ¥{{ totalAmount }}
+
+
+ 支付状态:
+ {{ paymentStatusText }}
+
+
+
+
+
+
+
+ 立即支付
+
+
+ 返回
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/base/jc/bm.vue b/src/pages/base/jc/bm.vue
index 6de015f..86abe52 100644
--- a/src/pages/base/jc/bm.vue
+++ b/src/pages/base/jc/bm.vue
@@ -10,18 +10,38 @@
-
+
+
+
+
+
+
+
- 已选择:{{ selectedCount }} 个就餐标准
- 总金额:¥{{ totalPrice }}
+ 缴费金额:¥{{ totalPrice }}
取消
- 确认报名
+ 确认报名
@@ -29,46 +49,72 @@
diff --git a/src/pages/system/launchPage/launchPage.vue b/src/pages/system/launchPage/launchPage.vue
index c5deb02..c892b40 100644
--- a/src/pages/system/launchPage/launchPage.vue
+++ b/src/pages/system/launchPage/launchPage.vue
@@ -19,25 +19,9 @@ import { checkOpenId } from "@/api/system/login";
import { refreshPermissionCache } from "@/utils/permission";
const { setGlobal } = useDataStore();
-const { afterLoginAction } = useUserStore();
+const userStore = useUserStore();
const isShow = ref(true);
-function toHome(data: any) {
- if (data.type == 1) {
- uni.reLaunch({
- url: "/pages/base/gzs/xkXqk",
- });
- } if (data.type == 2) {
- uni.reLaunch({
- url: "/pages/base/gzs/xkJlb",
- });
- } else {
- uni.reLaunch({
- url: "/pages/base/home/index",
- });
- }
-}
-
onLoad(async (data: any) => {
setGlobal(data);
if (data && data.openId) {
@@ -46,20 +30,18 @@ onLoad(async (data: any) => {
if (res.resultCode == 1 && res.result) {
// 执行登录操作
- afterLoginAction(res.result);
+ userStore.afterLoginAction(res.result);
// 如果有changeTime参数,更新权限缓存
if (data.changeTime) {
- const userStore = useUserStore();
const currentPermissions = userStore.getAuth;
if (currentPermissions && currentPermissions.length > 0) {
refreshPermissionCache(currentPermissions, data.changeTime);
}
}
-
// 直接跳转到首页,关注检查在首页进行
- toHome(data);
+ userStore.toHome(data.type);
} else {
uni.reLaunch({
url: "/pages/system/login/login",
diff --git a/src/pages/system/login/login.vue b/src/pages/system/login/login.vue
index 0b0a086..fdde29f 100644
--- a/src/pages/system/login/login.vue
+++ b/src/pages/system/login/login.vue
@@ -266,24 +266,8 @@ function removeStudent(index: number) {
}
}
-function toHome() {
- if (getGlobal.type == 1) {
- uni.reLaunch({
- url: "/pages/base/gzs/xkXqk",
- });
- } else if (getGlobal.type == 2) {
- uni.reLaunch({
- url: "/pages/base/gzs/xkJlb",
- });
- } else {
- uni.reLaunch({
- url: "/pages/base/home/index",
- });
- }
-}
-
const { getGlobal, getAppCode } = useDataStore();
-const { afterLoginAction } = useUserStore();
+const userStore = useUserStore();
async function submit() {
for (const student of students.value) {
if (!student.xstx) {
@@ -313,19 +297,16 @@ async function submit() {
});
hideLoading();
if (res.resultCode == 1) {
- afterLoginAction(res.result);
-
+ userStore.afterLoginAction(res.result);
// 如果有changeTime参数,更新权限缓存
if (res.result && res.result.changeTime) {
- const userStore = useUserStore();
const currentPermissions = userStore.getAuth;
if (currentPermissions && currentPermissions.length > 0) {
refreshPermissionCache(currentPermissions, res.result.changeTime);
}
}
-
- toHome();
+ userStore.toHome(getGlobal.type);
} else {
showToast({ title: res.message || "提交失败", icon: "none" });
}
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 34959b5..cc1954e 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -1,5 +1,6 @@
import { defineStore } from "pinia";
import { authenticationApi, loginCode, loginPass, weChatLogin, checkOpenId } from "@/api/system/login";
+import { checkXsXkByTypeApi, xsKxApi } from "@/api/base/xkApi";
import { AUTH_KEY } from "@/config";
import { imagUrl } from "@/utils";
import { useWebSocket } from '@/utils/webSocket/webSocket'
@@ -194,6 +195,192 @@ export const useUserStore = defineStore({
}
})
},
+ /**
+ * 跳转逻辑
+ * @param type 跳转类型
+ */
+ async toHome(type: number) {
+ if (type == 1) {
+ // 兴趣课逻辑: 判断当前学生列表
+ if (this.userdata.xsList && this.userdata.xsList.length === 1) {
+ this.checkXqk();
+ } else if (this.userdata.xsList && this.userdata.xsList.length > 1) {
+ uni.reLaunch({
+ url: "/pages/base/home/xsXz",
+ });
+ }
+ } else if (type == 2) {
+ // 俱乐部逻辑: 判断当前学生列表
+ if (this.userdata.xsList && this.userdata.xsList.length == 1) {
+ this.checkJlb();
+ } else if (this.userdata.xsList && this.userdata.xsList.length > 1) {
+ uni.reLaunch({
+ url: "/pages/base/home/xsXz",
+ });
+ }
+ } else {
+ uni.reLaunch({
+ url: "/pages/base/home/index",
+ });
+ }
+ },
+ // 校验兴趣课 - 优化版本
+ async checkXqk() {
+ try {
+ // 使用getXsKx接口获取详细选课信息
+ const res = await xsKxApi({
+ xsId: this.curXs.id,
+ njmcId: this.curXs.njmcId,
+ xklxId: "962488654" // 兴趣课类型ID
+ });
+
+ if (res.resultCode === 1) {
+ const data = res.result;
+ const type = data.type;
+
+ switch (type) {
+ case 1: // 待支付
+ uni.reLaunch({
+ url: "/pages/base/xk/pay/index",
+ });
+ return;
+ case 2: // 可选课列表 - 跳转到抢课页面
+ uni.reLaunch({
+ url: "/pages/base/xk/qk/xqk",
+ });
+ return;
+ case 3: // 已支付 - 跳转到详情页
+ uni.reLaunch({
+ url: "/pages/base/xk/xqk",
+ });
+ return;
+ default:
+ // 默认跳转到告知书页面
+ uni.reLaunch({
+ url: "/pages/base/gzs/xqk",
+ });
+ return;
+ }
+ }
+
+ // 接口调用失败,使用备用方案
+ this.checkXqkFallback();
+ } catch (error) {
+ console.error("查询兴趣课状态失败:", error);
+ // 异常情况,使用备用方案
+ this.checkXqkFallback();
+ }
+ },
+ // 兴趣课备用检查方案
+ async checkXqkFallback() {
+ try {
+ const res = await checkXsXkByTypeApi({
+ xsId: this.curXs.id,
+ xklxId: "962488654" // 兴趣课类型ID
+ });
+ if (res.resultCode === 1) {
+ const checkResult = res.result;
+ if (checkResult === 1) {
+ uni.reLaunch({
+ url: "/pages/base/xk/pay/index",
+ });
+ return;
+ } else if (checkResult === 2) {
+ uni.reLaunch({
+ url: "/pages/base/xk/xqk",
+ });
+ return;
+ }
+ }
+ uni.reLaunch({
+ url: "/pages/base/gzs/xqk",
+ });
+ } catch (error) {
+ console.error("备用方案也失败:", error);
+ uni.reLaunch({
+ url: "/pages/base/gzs/xqk",
+ });
+ }
+ },
+ // 校验俱乐部 - 优化版本
+ async checkJlb() {
+ try {
+ // 使用getXsKx接口获取详细选课信息
+ const res = await xsKxApi({
+ xsId: this.curXs.id,
+ njmcId: this.curXs.njmcId,
+ xklxId: "816059832" // 俱乐部类型ID
+ });
+
+ if (res.resultCode === 1) {
+ const data = res.result;
+ const type = data.type;
+
+ switch (type) {
+ case 1: // 待支付
+ uni.reLaunch({
+ url: "/pages/base/xk/pay/index",
+ });
+ return;
+ case 2: // 可选课列表 - 跳转到抢课页面
+ uni.reLaunch({
+ url: "/pages/base/xk/qk/jlb",
+ });
+ return;
+ case 3: // 已支付 - 跳转到详情页
+ uni.reLaunch({
+ url: "/pages/base/xk/jlb",
+ });
+ return;
+ default:
+ // 默认跳转到告知书页面
+ uni.reLaunch({
+ url: "/pages/base/gzs/jlb",
+ });
+ return;
+ }
+ }
+
+ // 接口调用失败,使用备用方案
+ this.checkJlbFallback();
+ } catch (error) {
+ console.error("查询俱乐部状态失败:", error);
+ // 异常情况,使用备用方案
+ this.checkJlbFallback();
+ }
+ },
+ // 俱乐部备用检查方案
+ async checkJlbFallback() {
+ try {
+ const res = await checkXsXkByTypeApi({
+ xsId: this.curXs.id,
+ xklxId: "816059832" // 俱乐部类型ID
+ });
+
+ if (res.resultCode === 1) {
+ const checkResult = res.result;
+ if (checkResult === 1) {
+ uni.reLaunch({
+ url: "/pages/base/xk/pay/index",
+ });
+ return;
+ } else if (checkResult === 2) {
+ uni.reLaunch({
+ url: "/pages/base/xk/jlb",
+ });
+ return;
+ }
+ }
+ uni.reLaunch({
+ url: "/pages/base/gzs/jlb",
+ });
+ } catch (error) {
+ console.error("备用方案也失败:", error);
+ uni.reLaunch({
+ url: "/pages/base/gzs/jlb",
+ });
+ }
+ },
/**
* @description: 注销
*/
diff --git a/src/utils/xkUtils.ts b/src/utils/xkUtils.ts
new file mode 100644
index 0000000..9980d57
--- /dev/null
+++ b/src/utils/xkUtils.ts
@@ -0,0 +1,95 @@
+import { getXsXkStatusApi } from "@/api/base/xkApi";
+import { useUserStore } from "@/store/modules/user";
+
+/**
+ * 抢课工具类
+ */
+export class XkUtils {
+ /**
+ * 检查学生选课状态
+ * @param xklxId 选课类型ID
+ * @returns 选课状态信息
+ */
+ static async checkXkStatus(xklxId: string) {
+ const userStore = useUserStore();
+ const curXs = userStore.getCurXs;
+
+ try {
+ const res = await getXsXkStatusApi({
+ xsId: curXs.id,
+ njmcId: curXs.njmcId,
+ xklxId: xklxId
+ });
+
+ if (res.resultCode === 1) {
+ return res.result;
+ }
+ return null;
+ } catch (error) {
+ console.error("检查选课状态失败:", error);
+ return null;
+ }
+ }
+
+ /**
+ * 获取选课状态描述
+ * @param type 状态类型
+ * @returns 状态描述
+ */
+ static getStatusDescription(type: number): string {
+ switch (type) {
+ case 1:
+ return "有待支付的选课,请先完成支付";
+ case 2:
+ return "可以选择的课程";
+ case 3:
+ return "已选择并完成支付的选课";
+ default:
+ return "暂无可选课程";
+ }
+ }
+
+ /**
+ * 检查是否可以抢课
+ * @param xkList 选课列表
+ * @returns 是否可以抢课
+ */
+ static canQk(xkList: any[]): boolean {
+ if (!xkList || xkList.length === 0) {
+ return false;
+ }
+
+ // 检查是否有可选的课程
+ return xkList.some((xk: any) => {
+ return !xk.selected && xk.xkkcs && xk.xkkcs.length > 0;
+ });
+ }
+
+ /**
+ * 获取可抢课的选课列表
+ * @param xkList 选课列表
+ * @returns 可抢课的选课列表
+ */
+ static getAvailableXkList(xkList: any[]): any[] {
+ if (!xkList || xkList.length === 0) {
+ return [];
+ }
+
+ return xkList.filter((xk: any) => {
+ return !xk.selected && xk.xkkcs && xk.xkkcs.length > 0;
+ });
+ }
+
+ /**
+ * 获取已选课的选课信息
+ * @param xkList 选课列表
+ * @returns 已选课的选课信息
+ */
+ static getSelectedXk(xkList: any[]): any | null {
+ if (!xkList || xkList.length === 0) {
+ return null;
+ }
+
+ return xkList.find((xk: any) => xk.selected) || null;
+ }
+}
\ No newline at end of file