diff --git a/src/pages/base/gzs/jc.vue b/src/pages/base/gzs/jc.vue
index ed54c9c..613602c 100644
--- a/src/pages/base/gzs/jc.vue
+++ b/src/pages/base/gzs/jc.vue
@@ -49,9 +49,9 @@ async function submit() {
setData({
sign_file: sign_file.value,
});
- uni.reLaunch({
- url: "/pages/base/jc/bm",
- });
+ uni.reLaunch({
+ url: "/pages/base/jc/bm",
+ });
}
diff --git a/src/pages/base/home/xsXz.vue b/src/pages/base/home/xsXz.vue
index 1814a2e..0326956 100644
--- a/src/pages/base/home/xsXz.vue
+++ b/src/pages/base/home/xsXz.vue
@@ -16,7 +16,7 @@ import XsPicker from "@/pages/base/components/XsPicker/index.vue"
import { useDataStore } from "@/store/modules/data";
import { useUserStore } from "@/store/modules/user";
const { getGlobal } = useDataStore();
-const { checkXqk, checkJlb, setXsPickerInitialized } = useUserStore();
+const { checkXqk, checkJlb, checkJc, setXsPickerInitialized } = useUserStore();
const switchXs = (xs: any) => {
// 设置学生选择器已初始化标记
@@ -26,6 +26,8 @@ const switchXs = (xs: any) => {
checkXqk();
} else if (getGlobal.type == 2) {
checkJlb();
+ } else if (getGlobal.type == 3) {
+ checkJc();
} else {
}
}
diff --git a/src/pages/base/jc/README.md b/src/pages/base/jc/README.md
index 5662603..153da0f 100644
--- a/src/pages/base/jc/README.md
+++ b/src/pages/base/jc/README.md
@@ -1,78 +1,75 @@
-# JC模块 - 就餐标准管理
+# 就餐模块业务逻辑调整说明
-## 功能概述
+## 概述
+参照选课的处理和业务逻辑,对就餐相关的业务逻辑进行了调整,实现了统一的状态管理和页面跳转逻辑。
-JC模块是用于管理学生就餐标准的前端模块,包含以下主要功能:
+## 主要调整
-### 1. 就餐标准列表 (`/pages/base/jc/index.vue`)
-- 显示当前学期可用的就餐标准
-- 支持学生选择器切换不同学生
-- 展示就餐标准的基本信息(名称、价格、描述)
+### 1. useUserStore中的checkJc方法完善
+- **位置**: `src/store/modules/user.ts`
+- **功能**: 根据后端返回的type值进行页面跳转
+- **逻辑**:
+ - `type = 1`: 未选择(返回可选标准列表)→ 跳转到报名页面 `/pages/base/jc/bm`
+ - `type = 2`: 待支付 → 跳转到支付页面 `/pages/base/jc/pay/index`
+ - `type = 3`: 已支付 → 跳转到已选择页面 `/pages/base/jc/index`
-### 2. 就餐标准详情 (`/pages/base/jc/detail.vue`)
-- 显示就餐标准的详细信息
-- 包含标准描述、使用说明、注意事项等
-- 支持图片展示
+### 2. 页面整合
+- **删除页面**:
+ - `detail.vue` - 就餐标准详情页面
+ - `bm-detail.vue` - 报名详情页面
+- **整合到**: `index.vue` - 已选择就餐标准展示页面
-### 3. 就餐标准报名 (`/pages/base/jc/bm.vue`)
-- 支持多选就餐标准
-- 实时计算总金额
-- 确认报名后跳转到支付页面
+### 3. index.vue页面重构
+- **功能**: 展示已选择的就餐标准信息
+- **包含内容**:
+ - 就餐标准基本信息(名称、价格、描述、有效期)
+ - 报名信息(报名时间、支付状态、订单号)
+ - 使用说明
+ - 注意事项
+- **状态处理**:
+ - 有已选择标准:显示详细信息
+ - 无已选择标准:显示空状态,提供"立即报名"按钮
-### 4. 支付流程 (`/pages/base/jc/pay/`)
-- 支付页面 (`index.vue`):显示报名信息和支付倒计时
-- 支付等待页面 (`wait.vue`):处理支付回调
-- 支付成功页面 (`success.vue`):支付成功提示
-- 支付失败页面 (`fail.vue`):支付失败处理
+### 4. bm.vue页面调整
+- **跳转逻辑**: 已报名时跳转到 `index.vue` 而不是已删除的 `bm-detail.vue`
-### 5. 就餐记录 (`/pages/base/jc/record.vue`)
-- 显示学生的就餐记录历史
-- 包含就餐日期、状态、地点等信息
+### 5. 后端接口对应
+- **接口**: `/mobile/jz/jc/getJcBzList`
+- **返回类型**: `AppJzXsJcVo`
+- **type字段含义**:
+ - `1`: 未选择(返回可选标准列表)
+ - `2`: 待支付
+ - `3`: 已支付
-## 组件结构
+## 页面跳转流程
-### 核心组件
-- `JcBzList` (`/pages/base/components/JcBzList/index.vue`):就餐标准列表组件
-- `JcRecordList` (`/pages/base/components/JcRecordList/index.vue`):就餐记录列表组件
+### 通过launchPage的type=3进入
+1. **useUserStore.toHome(type=3)** → 调用checkJc()
+2. **checkJc()** → 调用后端接口获取就餐状态
+3. **根据返回的type值跳转**:
+ - type=1 → `/pages/base/jc/bm` (报名页面)
+ - type=2 → `/pages/base/jc/pay/index` (支付页面)
+ - type=3 → `/pages/base/jc/index` (已选择页面)
-### API接口
-所有JC相关的API接口都集中在 `jcApi.ts` 文件中,包括:
-- 获取就餐标准列表
-- 获取就餐标准详情
-- 学生报名就餐标准
-- 取消报名
-- 发起支付
-- 查询支付状态
-- 获取就餐记录等
+### 页面间跳转
+- **报名成功** → 跳转到支付页面
+- **支付成功** → 跳转到已选择页面
+- **查看详情** → 在已选择页面中展示完整信息
-## 数据流
+## 技术实现
-1. **报名流程**:
- - 学生选择就餐标准 → 确认报名 → 跳转支付页面 → 完成支付
+### 前端
+- **状态管理**: 使用Pinia store管理用户状态和就餐数据
+- **页面路由**: 使用uni.reLaunch进行页面跳转
+- **数据获取**: 通过API接口获取就餐状态和详情信息
-2. **数据存储**:
- - 使用 Pinia store 管理状态
- - 本地存储保存选中状态
- - 支付数据通过 store 传递
-
-## 技术特点
-
-- 采用 Vue 3 Composition API
-- 使用 TypeScript 进行类型检查
-- 响应式设计,支持移动端
-- 模块化组件设计
-- 统一的错误处理机制
+### 后端
+- **状态检查**: 通过Redis缓存和数据库查询确定就餐状态
+- **类型定义**: 使用AppJzXsJcVo统一返回格式
+- **业务逻辑**: 参照选课模块的实现方式
## 注意事项
-
-1. 支付倒计时功能需要后端提供倒计时接口
-2. 多选功能需要合理处理数据同步
-3. 支付状态查询需要定时轮询
-4. 图片资源需要正确的路径处理
-
-## 扩展建议
-
-1. 可以添加就餐标准筛选功能
-2. 支持按时间范围查询就餐记录
-3. 添加就餐统计功能
-4. 支持批量操作就餐标准
\ No newline at end of file
+1. 确保后端接口返回的type值与前端期望一致
+2. 页面跳转使用uni.reLaunch确保正确的页面栈管理
+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
deleted file mode 100644
index 3a8c7d0..0000000
--- a/src/pages/base/jc/bm-detail.vue
+++ /dev/null
@@ -1,295 +0,0 @@
-
-
-
-
-
-
-
- 学生信息
-
-
- 姓名:
- {{ 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 86abe52..fc8b166 100644
--- a/src/pages/base/jc/bm.vue
+++ b/src/pages/base/jc/bm.vue
@@ -170,15 +170,15 @@ const confirmBm = async () => {
title: '提示',
content: '您已经报名了该就餐标准,是否查看报名详情?',
success: (modalRes) => {
- if (modalRes.confirm) {
- // 跳转到报名详情页面
- uni.redirectTo({
- url: '/pages/base/jc/bm-detail'
- });
- } else {
- // 返回上一页
- uni.navigateBack();
- }
+ if (modalRes.confirm) {
+ // 跳转到已选择页面
+ uni.redirectTo({
+ url: '/pages/base/jc/index'
+ });
+ } else {
+ // 返回上一页
+ uni.navigateBack();
+ }
}
});
} else {
diff --git a/src/pages/base/jc/detail.vue b/src/pages/base/jc/detail.vue
deleted file mode 100644
index fb3871d..0000000
--- a/src/pages/base/jc/detail.vue
+++ /dev/null
@@ -1,285 +0,0 @@
-
-
-
-
-
- 就餐标准信息
-
-
-
-
-
-
- {{ jcDetail.bzmc }}
-
- 价格:¥{{ jcDetail.jfje }}
-
- {{ jcDetail.bzms || '暂无描述' }}
- 有效期:{{ jcDetail.yxq || '暂无有效期信息' }}
-
-
-
-
-
-
- 标准详情
-
-
-
- {{ jcDetail.bzms || "暂无详细信息" }}
-
-
-
-
-
- 使用说明
-
-
-
-
-
- {{ instruction }}
-
-
-
-
-
- 暂无使用说明
-
-
-
-
-
-
-
- 注意事项
-
-
-
-
-
- {{ precaution }}
-
-
-
-
-
- 暂无注意事项
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/pages/base/jc/index.vue b/src/pages/base/jc/index.vue
index 7f52abc..c69d4ac 100644
--- a/src/pages/base/jc/index.vue
+++ b/src/pages/base/jc/index.vue
@@ -1,42 +1,214 @@
-
-
-
diff --git a/src/pages/system/launchPage/launchPage.vue b/src/pages/system/launchPage/launchPage.vue
index c892b40..b124d74 100644
--- a/src/pages/system/launchPage/launchPage.vue
+++ b/src/pages/system/launchPage/launchPage.vue
@@ -22,6 +22,12 @@ const { setGlobal } = useDataStore();
const userStore = useUserStore();
const isShow = ref(true);
+const toLogin = () => {
+ uni.reLaunch({
+ url: "/pages/system/login/login",
+ });
+};
+
onLoad(async (data: any) => {
setGlobal(data);
if (data && data.openId) {
@@ -42,20 +48,12 @@ onLoad(async (data: any) => {
}
// 直接跳转到首页,关注检查在首页进行
userStore.toHome(data.type);
- } else {
- uni.reLaunch({
- url: "/pages/system/login/login",
- });
+ return;
}
} catch (err) {
- uni.reLaunch({
- url: "/pages/system/login/login",
- });
+ toLogin();
}
- } else {
- uni.reLaunch({
- url: "/pages/system/login/login",
- });
}
+ toLogin();
});
diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts
index 43875b1..4d1e611 100644
--- a/src/store/modules/user.ts
+++ b/src/store/modules/user.ts
@@ -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 { jcGetJcBzListApi } from "@/api/base/jcApi";
import { AUTH_KEY } from "@/config";
import { imagUrl } from "@/utils";
import { useWebSocket } from '@/utils/webSocket/webSocket'
@@ -228,6 +229,15 @@ export const useUserStore = defineStore({
url: "/pages/base/home/xsXz",
});
}
+ } else if (type == 3) {
+ // 俱乐部逻辑: 判断当前学生列表
+ if (this.userdata.xsList && this.userdata.xsList.length == 1) {
+ this.checkJc();
+ } 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",
@@ -267,12 +277,11 @@ export const useUserStore = defineStore({
default:
// 默认跳转到告知书页面
uni.reLaunch({
- url: "/pages/base/gzs/xqk",
+ url: "/pages/base/gzs/xkXqk",
});
return;
}
}
-
// 接口调用失败,使用备用方案
this.checkXqkFallback();
} catch (error) {
@@ -303,12 +312,12 @@ export const useUserStore = defineStore({
}
}
uni.reLaunch({
- url: "/pages/base/gzs/xqk",
+ url: "/pages/base/gzs/xkXqk",
});
} catch (error) {
console.error("备用方案也失败:", error);
uni.reLaunch({
- url: "/pages/base/gzs/xqk",
+ url: "/pages/base/gzs/xkXqk",
});
}
},
@@ -345,7 +354,7 @@ export const useUserStore = defineStore({
default:
// 默认跳转到告知书页面
uni.reLaunch({
- url: "/pages/base/gzs/jlb",
+ url: "/pages/base/gzs/xkJlb",
});
return;
}
@@ -382,12 +391,71 @@ export const useUserStore = defineStore({
}
}
uni.reLaunch({
- url: "/pages/base/gzs/jlb",
+ url: "/pages/base/gzs/xkJlb",
});
} catch (error) {
console.error("备用方案也失败:", error);
uni.reLaunch({
- url: "/pages/base/gzs/jlb",
+ url: "/pages/base/gzs/xkJlb",
+ });
+ }
+ },
+ // 就餐查询 - 优化版本
+ async checkJc() {
+ try {
+ // 使用getJcBzList接口获取详细就餐信息
+ const res = await jcGetJcBzListApi({
+ xsId: this.curXs.id
+ });
+
+ if (res.resultCode === 1) {
+ const data = res.result;
+ const type = data.type;
+
+ switch (type) {
+ case 1: // 未选择(返回可选标准列表)- 跳转到报名页面
+ uni.reLaunch({
+ url: "/pages/base/jc/bm",
+ });
+ return;
+ case 2: // 待支付 - 跳转到支付页面
+ uni.reLaunch({
+ url: "/pages/base/jc/pay/index",
+ });
+ return;
+ case 3: // 已支付 - 跳转到已选择页面
+ uni.reLaunch({
+ url: "/pages/base/jc/index",
+ });
+ return;
+ default:
+ // 默认跳转到报名页面
+ uni.reLaunch({
+ url: "/pages/base/gzs/jc",
+ });
+ return;
+ }
+ }
+
+ // 接口调用失败,使用备用方案
+ this.checkJcFallback();
+ } catch (error) {
+ console.error("查询就餐状态失败:", error);
+ // 异常情况,使用备用方案
+ this.checkJcFallback();
+ }
+ },
+ // 就餐备用检查方案
+ async checkJcFallback() {
+ try {
+ // 备用方案:直接跳转到报名页面
+ uni.reLaunch({
+ url: "/pages/base/gzs/jc",
+ });
+ } catch (error) {
+ console.error("备用方案也失败:", error);
+ uni.reLaunch({
+ url: "/pages/base/gzs/jc",
});
}
},