diff --git a/src/api/base/xkApi.ts b/src/api/base/xkApi.ts
index 55a9360..181c05c 100644
--- a/src/api/base/xkApi.ts
+++ b/src/api/base/xkApi.ts
@@ -8,6 +8,13 @@ export const checkXsXkApi = async (params: any) => {
return await get("/mobile/jz/checkXsXk", params);
};
+/**
+ * 校验学生选课并附带告知书内容(聚合接口,KQK 时一次返回选课状态与告知书,减少二次请求)
+ */
+export const checkXsXkWithGzsApi = async (params: any) => {
+ return await get("/mobile/jz/checkXsXkWithGzs", params);
+};
+
/**
* 学生已选课程列表
*/
diff --git a/src/config.ts b/src/config.ts
index b7a1482..b2b0335 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -1,22 +1,32 @@
-const ip: string = "127.0.0.1:8897";
-const fwqip: string = "127.0.0.1:8897";
-//const ip: string = "lzcxsx.cn";
-//const fwqip: string = "lzcxsx.cn";
+// 测试环境 / 正式环境:开发时用测试地址,打包时用正式地址
+const isDev = process.env.NODE_ENV === "development";
+const ip: string = isDev ? "127.0.0.1:8897" : "lzcxsx.cn";
+const fwqip: string = isDev ? "127.0.0.1:8897" : "lzcxsx.cn";
+
//const ip: string = "zhxy.yufangzc.com";
//const fwqip: string = "zhxy.yufangzc.com";
+//const ip: string = "lzcxsx.cn";
+//const fwqip: string = "lzcxsx.cn";
+
//打包服务器接口代理标识
const SERVERAGENT: string = "/jzd-api";
//本地代理url地址,配置了就启动代理,没配置就不启动代理
export const HOMEAGENT: string = "";
+// 开发环境下,手机/平板访问时(非localhost)使用当前页面 host,避免 127.0.0.1 指向设备自身导致请求失败
+function getDevBaseUrl(): string {
+ if (typeof window !== "undefined" && window.location?.hostname && window.location.hostname !== "localhost" && window.location.hostname !== "127.0.0.1") {
+ return `http://${window.location.hostname}:8897/zhxy`;
+ }
+ return `http://${ip}/zhxy`;
+}
// 接口地址
export const BASE_URL: string =
- process.env.NODE_ENV == "development" ? `http://${ip}/zhxy` : SERVERAGENT;
-// WebSocket地址
-export const BASE_WS_URL: string =
- process.env.NODE_ENV == "development" ? `ws://${ip}` : `wss://${fwqip}`;
+ process.env.NODE_ENV == "development" ? getDevBaseUrl() : SERVERAGENT;
+// WebSocket地址:开发环境用 ws(无 SSL),正式环境用 wss
+export const BASE_WS_URL: string = isDev ? `ws://${ip}` : `wss://${ip}`;
//图片地址
-// export const BASE_IMAGE_URL: string = process.env.NODE_ENV == "development" ? `https://${ip}` : `http://${fwqip}`;
-export const BASE_IMAGE_URL: string = `http://${fwqip}`;
+// export const BASE_IMAGE_URL: string = process.env.NODE_ENV == "development" ? `https://${ip}` : `https://${fwqip}`;
+export const BASE_IMAGE_URL: string = `https://${fwqip}`;
// kkFileView预览服务地址
export const KK_FILE_VIEW_URL: string = `https://${fwqip}/kkpro`;
//存token的key
@@ -33,3 +43,6 @@ export const WHITELIST: WhiteList = [];
export const THEMECOLOR: string = "#35468C";
// 启动vconsole
export const ENABLE_VCONSOLE: boolean = false; // process.env.NODE_ENV != "development";
+
+/** 就餐报名成功后跳转的支付链接(后续可改为接口/动态配置) */
+export const JC_PAY_REDIRECT_URL: string = "https://app.xiaoyuan.ccb.com/LHECRESM/V6/JFPAGENEW/index.html#/?schoolId=213245500";
diff --git a/src/pages/base/gzs/index.vue b/src/pages/base/gzs/index.vue
index 8a73dc0..fab0b8f 100644
--- a/src/pages/base/gzs/index.vue
+++ b/src/pages/base/gzs/index.vue
@@ -25,13 +25,15 @@
@@ -351,12 +426,26 @@ const teachingPhilosophy = computed(() => {
line-height: 1.6;
.teaching-phase {
- margin-bottom: 10px;
+ margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
+
+ .phase-title {
+ display: block;
+ font-weight: 600;
+ color: #333;
+ margin-bottom: 8px;
+ }
+
+ .phase-content {
+ display: block;
+ font-size: 14px;
+ color: #666;
+ line-height: 1.6;
+ }
.empty-data {
display: flex;
@@ -372,6 +461,26 @@ const teachingPhilosophy = computed(() => {
}
}
+.attachment-list {
+ .attachment-item {
+ display: flex;
+ align-items: center;
+ padding: 12px 0;
+ border-bottom: 1px solid #f0f0f0;
+
+ &:last-child {
+ border-bottom: none;
+ }
+ }
+
+ .attachment-name {
+ flex: 1;
+ margin-left: 10px;
+ font-size: 14px;
+ color: #333;
+ }
+}
+
.bottom-action {
padding: 15px;
margin-top: 20px;
diff --git a/src/pages/base/xk/pay/index.vue b/src/pages/base/xk/pay/index.vue
index ccc8519..2f1d332 100644
--- a/src/pages/base/xk/pay/index.vue
+++ b/src/pages/base/xk/pay/index.vue
@@ -30,8 +30,8 @@
-
- 取消报名
+
+ 返回
{{ isPaySubmitting ? '支付中...' : '立即支付' }}
@@ -54,9 +54,6 @@ const { getQk } = useDataStore();
// 为支付按钮创建防抖函数和状态
const { isProcessing: isPaySubmitting, debounce: payDebounce } = useDebounce(2000);
-// 为取消报名按钮创建防抖函数和状态
-const { isProcessing: isCancelSubmitting, debounce: cancelDebounce } = useDebounce(2000);
-
const qk = ref({});
// 总金额
const totalJe = ref(0);
@@ -168,40 +165,13 @@ const startCountdown = () => {
}, 1000);
};
-// 返回上一页
+// 返回首页
const goBack = () => {
uni.reLaunch({
url: '/pages/base/home/index'
});
};
-// 取消报名
-const cancelRegistration = () => {
- uni.showModal({
- title: "取消报名",
- content: "确定要取消报名吗?",
- success: cancelDebounce(async (res) => {
- if (res.confirm) {
- try {
- const res = await jzXkCancelApi({
- xsId: qk.value.xsId,
- xkId: qk.value.xkId
- });
- if (res.resultCode === 1) {
- uni.showLoading({ title: "取消报名中,请稍后..." });
- } else {
- uni.showToast({ title: res.message, icon: "none" });
- goBack();
- }
- } catch (error) {
- console.log(error);
- goBack();
- }
- }
- }),
- });
-};
-
// 立即支付
const payNow = payDebounce(async () => {
try {
diff --git a/src/pages/base/xk/qk/index.vue b/src/pages/base/xk/qk/index.vue
index f5a4985..583ec5c 100644
--- a/src/pages/base/xk/qk/index.vue
+++ b/src/pages/base/xk/qk/index.vue
@@ -74,9 +74,12 @@ const checkEnrollmentStatus = (xk: any) => {
const endTime = new Date(xk.xkjstime).getTime();
if (now > endTime) {
- // 选课已结束,跳转到结束页面
+ // 选课已结束,用 redirectTo 替换当前页,避免浏览器返回时回到选课页
+ console.log('[qk/index] 跳转 yjz,xk 数据:', xk);
+ console.log('[qk/index] xk 字段:', { xkmc: xk?.xkmc, xkkstime: xk?.xkkstime, xkjstime: xk?.xkjstime });
const courseInfo = encodeURIComponent(JSON.stringify(xk));
- uni.navigateTo({
+ console.log('[qk/index] courseInfo 长度:', courseInfo.length);
+ uni.redirectTo({
url: `/pages/base/xk/qk/yjz?courseInfo=${courseInfo}`
});
return true;
@@ -119,11 +122,14 @@ const changeXkkc = (ids: any) => {
selectedXkkcIds.value = ids;
}
-// 回到首页
+// 返回(有页面栈则返回上一页,否则回首页)
const goBack = () => {
- uni.reLaunch({
- url: '/pages/base/home/index'
- });
+ const pages = getCurrentPages();
+ if (pages.length > 1) {
+ uni.navigateBack();
+ } else {
+ uni.reLaunch({ url: '/pages/base/home/index' });
+ }
}
// 提交选课
diff --git a/src/pages/base/xk/qk/jlb.vue b/src/pages/base/xk/qk/jlb.vue
index f9533b5..92d635c 100644
--- a/src/pages/base/xk/qk/jlb.vue
+++ b/src/pages/base/xk/qk/jlb.vue
@@ -59,9 +59,11 @@ const checkEnrollmentStatus = (xk: any) => {
const endTime = new Date(xk.xkjstime).getTime();
if (now > endTime) {
- // 选课已结束,跳转到结束页面
+ // 选课已结束,用 redirectTo 替换当前页,避免浏览器返回时回到选课页
+ console.log('[qk/jlb] 跳转yjz,传入的xk:', xk);
+ console.log('[qk/jlb] xk.xkmc:', xk?.xkmc, 'xk.xkkstime:', xk?.xkkstime, 'xk.xkjstime:', xk?.xkjstime);
const courseInfo = encodeURIComponent(JSON.stringify(xk));
- uni.navigateTo({
+ uni.redirectTo({
url: `/pages/base/xk/qk/yjz?courseInfo=${courseInfo}`
});
return true;
diff --git a/src/pages/base/xk/qk/wks.vue b/src/pages/base/xk/qk/wks.vue
index 9e40829..8811ab8 100644
--- a/src/pages/base/xk/qk/wks.vue
+++ b/src/pages/base/xk/qk/wks.vue
@@ -53,11 +53,14 @@ const { getData } = useDataStore();
const title = ref("");
-// 返回首页
+// 返回(有页面栈则返回上一页,否则回首页)
const goHome = () => {
- uni.reLaunch({
- url: "/pages/base/home/index"
- });
+ const pages = getCurrentPages();
+ if (pages.length > 1) {
+ uni.navigateBack();
+ } else {
+ uni.reLaunch({ url: "/pages/base/home/index" });
+ }
};
onLoad((options:any) => {
diff --git a/src/pages/base/xk/qk/xqk.vue b/src/pages/base/xk/qk/xqk.vue
index 66ac83d..853d857 100644
--- a/src/pages/base/xk/qk/xqk.vue
+++ b/src/pages/base/xk/qk/xqk.vue
@@ -60,7 +60,10 @@ const checkEnrollmentStatus = (xk: any) => {
if (now > endTime) {
// 选课已结束,跳转到结束页面
+ console.log('[qk/xqk] 跳转 yjz,xk 数据:', xk);
+ console.log('[qk/xqk] xk 字段:', { xkmc: xk?.xkmc, xkkstime: xk?.xkkstime, xkjstime: xk?.xkjstime });
const courseInfo = encodeURIComponent(JSON.stringify(xk));
+ console.log('[qk/xqk] courseInfo 长度:', courseInfo.length);
uni.navigateTo({
url: `/pages/base/xk/qk/yjz?courseInfo=${courseInfo}`
});
diff --git a/src/pages/base/xk/qk/yjz.vue b/src/pages/base/xk/qk/yjz.vue
index 8345691..77665e9 100644
--- a/src/pages/base/xk/qk/yjz.vue
+++ b/src/pages/base/xk/qk/yjz.vue
@@ -72,8 +72,8 @@
diff --git a/src/pages/base/xszp/submit.vue b/src/pages/base/xszp/submit.vue
index 29a53ec..38f7096 100644
--- a/src/pages/base/xszp/submit.vue
+++ b/src/pages/base/xszp/submit.vue
@@ -354,7 +354,7 @@ const generateFormSchema = () => {
}
};
} else if (zplx.zpfl === "scsp") {
- // 上传视频
+ // 上传视频(视频大小限制 50MB)
componentConfig = {
component: "ImageVideoUpload",
componentProps: {
@@ -363,7 +363,13 @@ const generateFormSchema = () => {
enableFile: false,
maxVideoCount: 30,
uploadApi: attachmentUpload,
- compressConfig: COMPRESS_PRESETS.medium,
+ compressConfig: {
+ ...COMPRESS_PRESETS.medium,
+ video: {
+ ...COMPRESS_PRESETS.medium.video,
+ maxSize: 50 * 1024 * 1024
+ }
+ },
videoList: formData.value[fieldName] || [],
showSectionTitle: false
}
diff --git a/src/store/modules/menu.ts b/src/store/modules/menu.ts
index 26e24a2..2328748 100644
--- a/src/store/modules/menu.ts
+++ b/src/store/modules/menu.ts
@@ -2,9 +2,9 @@ import { defineStore } from "pinia";
import type { MobileMenuTreeNode } from "@/api/system/menu";
export const useMenuStore = defineStore({
- id: "app-Menu",
+ id: "app-Menu-jzd",
state: () => ({
- /** 树形菜单数据,持久化到 localStorage key: app-Menu */
+ /** 树形菜单数据,持久化到 localStorage key: app-Menu-jzd(家长端,与教师端 app-Menu-jsd 区分,避免同域下菜单互相覆盖) */
mobileMenu: [] as MobileMenuTreeNode[],
}),
getters: {
diff --git a/src/utils/pageUtil.ts b/src/utils/pageUtil.ts
index 9ace9fc..9307fa8 100644
--- a/src/utils/pageUtil.ts
+++ b/src/utils/pageUtil.ts
@@ -1,4 +1,4 @@
-import { checkXsXkApi, checkXkTfApi } from "@/api/base/xkApi";
+import { checkXsXkWithGzsApi, checkXkTfApi } from "@/api/base/xkApi";
import { useUserStore } from "@/store/modules/user";
import { useDataStore } from "@/store/modules/data";
const userStore = useUserStore();
@@ -75,7 +75,7 @@ export const PageUtils = {
* @param xklxId
*/
async checkQkLogic(xklxId: string) {
- const res: any = await checkXsXkApi({
+ const res: any = await checkXsXkWithGzsApi({
xsId: userStore.getCurXs.id,
njmcId: userStore.getCurXs.njmcId,
xklxId: xklxId,
@@ -94,35 +94,35 @@ export const PageUtils = {
const result = res.result || {};
// 记录到缓存数据中
dataStore.setQk(result);
- // 状态判断
+ // 状态判断(使用 navigateTo 保留页面栈,支持浏览器返回)
switch (result.xsXkStatus) {
- case 'WFB': { // KQK可抢课
- uni.reLaunch({
+ case 'WFB': { // 未开放
+ uni.navigateTo({
url: "/pages/base/xk/qk/wks?xklxId=" + xklxId,
});
} break;
- case 'KQK': { // KQK可抢课
- uni.reLaunch({
+ case 'KQK': { // 可抢课-告知书
+ uni.navigateTo({
url: "/pages/base/gzs/index?lxId=" + xklxId,
});
} break;
- case 'QKZ': { // QKZ抢课中
- uni.reLaunch({
+ case 'QKZ': { // 抢课中
+ uni.navigateTo({
url: "/pages/base/xk/qk/index?xklxId=" + xklxId,
});
} break;
- case 'YQK': { // YQK已选课
- uni.reLaunch({
+ case 'YQK': { // 已选课
+ uni.navigateTo({
url: "/pages/base/xk/pay/index?xklxId=" + xklxId,
});
} break;
- case 'DZF': { // DZF待支付
- uni.reLaunch({
+ case 'DZF': { // 待支付
+ uni.navigateTo({
url: "/pages/base/xk/pay/index?xklxId=" + xklxId,
});
} break;
- case 'YZF': { // YZF已支付
- uni.reLaunch({
+ case 'YZF': { // 已支付
+ uni.navigateTo({
url: "/pages/base/xk/pay/success?xklxId=" + xklxId,
});
} break;
@@ -166,9 +166,9 @@ export const PageUtils = {
}
},
- // 判断就餐逻辑
+ // 判断就餐逻辑(使用 navigateTo 保留页面栈,支持浏览器返回)
async checkJcLogic() {
- uni.reLaunch({
+ uni.navigateTo({
url: "/pages/base/jc/bm",
});
},
diff --git a/src/utils/request/index.ts b/src/utils/request/index.ts
index 7fb37f6..9087573 100644
--- a/src/utils/request/index.ts
+++ b/src/utils/request/index.ts
@@ -120,14 +120,14 @@ export function get(
} else {
if (res.resultCode) {
if (res.resultCode != RESULT_CODE_NOT_LOGIN) {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常1");
reject(res);
}
} else {
if (res.rows) {
resolve(res);
} else {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常2");
reject(res);
}
}
@@ -169,14 +169,14 @@ export function post(
} else {
if (res.resultCode) {
if (res.resultCode != RESULT_CODE_NOT_LOGIN) {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常3");
reject(res);
}
} else {
if (res.rows) {
resolve(res);
} else {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常4");
reject(res);
}
}
@@ -216,14 +216,14 @@ export function file(
} else {
if (res.resultCode) {
if (res.resultCode != RESULT_CODE_NOT_LOGIN) {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常5");
reject(res);
}
} else {
if (res.rows) {
resolve(res);
} else {
- showToast(res.message || "接口异常");
+ showToast(res.message || "接口异常6");
reject(res);
}
}