diff --git a/src/api/base/xkApi.ts b/src/api/base/xkApi.ts
index ee2a680..55a9360 100644
--- a/src/api/base/xkApi.ts
+++ b/src/api/base/xkApi.ts
@@ -86,4 +86,36 @@ export const xkkclxFindAllApi = async () => {
*/
export const getXkkcDetailByIdApi = async (id: string) => {
return await get("/api/xkkc/getXkkcDetailById?id=" + id);
-};
\ No newline at end of file
+};
+
+/**
+ * 校验学生选课退费(用于退费时使用)
+ */
+export const checkXkTfApi = async (params: any) => {
+ return await get("/mobile/jz/checkXkTf", params);
+};
+
+/**
+ * 获取选课退费分页查询
+ * @param params
+ * @returns
+ */
+export const findPageXkTfApi = async (params: any) => {
+ return await get("/api/xkTf/findPage", params);
+};
+
+/**
+ * 获取选课退费详情
+ * @param params
+ * @returns
+ */
+export const getXkTfDetailByIdApi = async (id: string) => {
+ return await get("/api/xkTf/getDetailById?id=" + id);
+};
+
+/**
+ * 家长申请退费
+ */
+export const xkTfSqApi = async (params: any) => {
+ return await post("/api/xkTf/sq", params);
+};
diff --git a/src/components/BasicForm/components/BasicDateTimes.vue b/src/components/BasicForm/components/BasicDateTimes.vue
index ad8ad73..25a1c72 100644
--- a/src/components/BasicForm/components/BasicDateTimes.vue
+++ b/src/components/BasicForm/components/BasicDateTimes.vue
@@ -43,4 +43,4 @@ function change(e: string) {
}
}
-
+
diff --git a/src/components/BasicUpload/CustomUpload.vue b/src/components/BasicUpload/CustomUpload.vue
index d9c5b9e..d2f6b73 100644
--- a/src/components/BasicUpload/CustomUpload.vue
+++ b/src/components/BasicUpload/CustomUpload.vue
@@ -21,7 +21,7 @@
const attrs = useAttrs()
const blob = ref(null)
-const popup = ref<{ open: (v: string) => void } | null>(null)
+const popup = ref<{ open: (v: string) => void, close: () => void }>({ open: () => { }, close: () => { }})
const emits = defineEmits(['select', 'close'])
diff --git a/src/components/BasicUpload/Upload.vue b/src/components/BasicUpload/Upload.vue
index b610cf1..86a9715 100644
--- a/src/components/BasicUpload/Upload.vue
+++ b/src/components/BasicUpload/Upload.vue
@@ -1,25 +1,20 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/src/components/PreviewImage/index.vue b/src/components/PreviewImage/index.vue
new file mode 100644
index 0000000..247b174
--- /dev/null
+++ b/src/components/PreviewImage/index.vue
@@ -0,0 +1,134 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+ {{ emptyText || '暂无图片' }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages.json b/src/pages.json
index 1b2d63b..a66dc14 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -227,6 +227,20 @@
"enablePullDownRefresh": false
}
},
+ {
+ "path": "pages/base/xk/tf/sq",
+ "style": {
+ "navigationBarTitleText": "选课退费申请",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/base/xk/tf/detail",
+ "style": {
+ "navigationBarTitleText": "选课退费详情",
+ "enablePullDownRefresh": false
+ }
+ },
{
"path": "pages/base/xk/qk/wks",
"style": {
@@ -286,6 +300,13 @@
"enablePullDownRefresh": false
}
},
+ {
+ "path": "pages/base/gzs/tf",
+ "style": {
+ "navigationBarTitleText": "退费告知书",
+ "enablePullDownRefresh": false
+ }
+ },
{
"path": "pages/base/jc/index",
"style": {
diff --git a/src/pages/base/gzs/index.vue b/src/pages/base/gzs/index.vue
index a6d38f1..4092afa 100644
--- a/src/pages/base/gzs/index.vue
+++ b/src/pages/base/gzs/index.vue
@@ -63,6 +63,10 @@ onLoad(async (options: any) => {
async function submit() {
// 显示加载中
const data = await signCompRef.value.getSyncSignature();
+ if (!data) {
+ console.log("请签名");
+ return;
+ }
sign_file.value = data.base64;
setFile({
sign_file: sign_file.value,
diff --git a/src/pages/base/gzs/tf.vue b/src/pages/base/gzs/tf.vue
new file mode 100644
index 0000000..4b0980c
--- /dev/null
+++ b/src/pages/base/gzs/tf.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/base/home/index.vue b/src/pages/base/home/index.vue
index b8c78da..af2e379 100644
--- a/src/pages/base/home/index.vue
+++ b/src/pages/base/home/index.vue
@@ -223,6 +223,7 @@ const menuItems = ref([
icon: "/static/base/home/file-text-line.png",
path: "/pages/base/gzs/index",
permissionKey: "school-xqkxk", // 兴趣课选课权限编码
+ action: 'jf',
lxId: '962488654',
},
{
@@ -230,6 +231,7 @@ const menuItems = ref([
icon: "/static/base/home/contacts-book-3-line.png",
path: "/pages/base/gzs/index",
permissionKey: "school-jlbxk", // 俱乐部选课权限编码
+ action: 'jf',
lxId: '816059832',
},
{
@@ -237,13 +239,24 @@ const menuItems = ref([
icon: "/static/base/home/contacts-book-3-line.png",
path: "/pages/base/gzs/index",
permissionKey: "school-jcjf",
+ action: 'jf',
lxId: 'JC',
},
{
- title: "退费申请",
+ title: "兴趣课退费",
icon: "/static/base/home/contacts-book-3-line.png",
- path: "/pages/base/tf/index",
- permissionKey: "school-jlb",
+ path: "/pages/base/gzs/tf",
+ permissionKey: "school-xqk-tf",
+ action: "tf",
+ lxId: "962488654",
+ },
+ {
+ title: "俱乐部退费",
+ icon: "/static/base/home/contacts-book-3-line.png",
+ path: "/pages/base/gzs/tf",
+ permissionKey: "school-jlb-tf",
+ action: "tf",
+ lxId: "816059832",
},
]);
@@ -268,13 +281,13 @@ const goToGlxs = () => {
// 处理菜单点击
const handleMenuClick = debounce(async (item: any) => {
if (item.path) {
- if (!item.lxId) {
+ if (item.lxId) {
+ setGlobal({ lxId: item.lxId, action: item.action, from: 'home' });
+ PageUtils.toHome(item.lxId, item.action);
+ } else {
uni.navigateTo({
url: item.path,
});
- } else {
- setGlobal({ lxId: item.lxId, from: 'home' });
- PageUtils.toHome(item.lxId);
}
}
});
diff --git a/src/pages/base/home/xsXz.vue b/src/pages/base/home/xsXz.vue
index df1d058..a728208 100644
--- a/src/pages/base/home/xsXz.vue
+++ b/src/pages/base/home/xsXz.vue
@@ -23,7 +23,7 @@ const switchXs = (xs: any) => {
// 设置学生选择器已初始化标记
setXsPickerInitialized(true);
// 检查逻辑页面
- PageUtils.checkLogicPage(xs.lxId);
+ PageUtils.checkLogicPage(getGlobal.lxId, getGlobal.action);
}
diff --git a/src/pages/base/tf/indexvue b/src/pages/base/tf/indexvue
deleted file mode 100644
index e69de29..0000000
diff --git a/src/pages/base/xk/components/XkPaySuccessXkkc/index.vue b/src/pages/base/xk/components/XkPaySuccessXkkc/index.vue
index 1b40b81..24f4f17 100644
--- a/src/pages/base/xk/components/XkPaySuccessXkkc/index.vue
+++ b/src/pages/base/xk/components/XkPaySuccessXkkc/index.vue
@@ -1,8 +1,20 @@
-
- 课程信息
+
+
+
@@ -27,72 +39,108 @@
\ No newline at end of file
diff --git a/src/pages/base/xk/qk/index.vue b/src/pages/base/xk/qk/index.vue
index ce8ee34..f5a4985 100644
--- a/src/pages/base/xk/qk/index.vue
+++ b/src/pages/base/xk/qk/index.vue
@@ -173,7 +173,7 @@ const submit = debounce(async () => {
title: res.message,
icon: "none",
});
- PageUtils.toHome(xklxId.value);
+ PageUtils.toHome(xklxId.value, "jf");
}
} catch (error: any) {
uni.hideLoading();
@@ -182,7 +182,7 @@ const submit = debounce(async () => {
title: error.message || "报名失败",
icon: "none",
});
- PageUtils.toHome(xklxId.value);
+ PageUtils.toHome(xklxId.value, "jf");
}
});
@@ -204,7 +204,7 @@ onLoad((options:any) => {
if (dataObj.action === 'qk') {
if (dataObj.code === 1 && dataObj.data === "qk") {
clearXkkcSelected();
- PageUtils.toHome(xklxId.value);
+ PageUtils.toHome(xklxId.value, "jf");
} else if (dataObj.code === 2) { // 课程提示
uni.hideLoading();
setTimeout(() => {
diff --git a/src/pages/base/xk/qk/jlb.vue b/src/pages/base/xk/qk/jlb.vue
index 4013a3a..f9533b5 100644
--- a/src/pages/base/xk/qk/jlb.vue
+++ b/src/pages/base/xk/qk/jlb.vue
@@ -136,7 +136,7 @@ const submit = async () => {
xkId: curXk.value.id,
xkkcIds: selectedXkkcIds.value,
jzId: getUser.jzId,
- qmFile: sign_file ? sign_file.value : "",
+ qmFile: sign_file ? sign_file : "",
};
const res = await jzXkQkjApi(params);
uni.hideLoading();
diff --git a/src/pages/base/xk/qk/xqk.vue b/src/pages/base/xk/qk/xqk.vue
index 4d82a2c..66ac83d 100644
--- a/src/pages/base/xk/qk/xqk.vue
+++ b/src/pages/base/xk/qk/xqk.vue
@@ -136,7 +136,7 @@ const submit = async () => {
xkId: curXk.value.id,
xkkcIds: selectedXkkcIds.value,
jzId: getUser.jzId,
- qmFile: sign_file ? sign_file.value : "",
+ qmFile: sign_file ? sign_file : "",
};
const res = await jzXkQkjApi(params);
uni.hideLoading();
diff --git a/src/pages/base/xk/tf/components/progressList.vue b/src/pages/base/xk/tf/components/progressList.vue
new file mode 100644
index 0000000..3e33360
--- /dev/null
+++ b/src/pages/base/xk/tf/components/progressList.vue
@@ -0,0 +1,276 @@
+
+
+
+ 审批进度
+
+
+
+
+
+
+
+
+
+ {{ approver.userName }}
+ {{ getSpTypeText(approver.spType) }}
+
+
+ {{ formatTime(approver.approveTime) }}
+
+ {{ getStatusText(approver.approveStatus) }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/pages/base/xk/tf/detail.vue b/src/pages/base/xk/tf/detail.vue
new file mode 100644
index 0000000..db0cf27
--- /dev/null
+++ b/src/pages/base/xk/tf/detail.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 退费说明:
+ {{ xkTf.tfSm }}
+
+
+ 缴费凭证:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/base/xk/tf/sq.vue b/src/pages/base/xk/tf/sq.vue
new file mode 100644
index 0000000..0be2dde
--- /dev/null
+++ b/src/pages/base/xk/tf/sq.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/system/launchPage/launchPage.vue b/src/pages/system/launchPage/launchPage.vue
index 0c4fbc9..73a2fbd 100644
--- a/src/pages/system/launchPage/launchPage.vue
+++ b/src/pages/system/launchPage/launchPage.vue
@@ -37,13 +37,24 @@ const initGlobalData = (data: any) => {
if (!lxId && gData.type) {
switch (gData.type + '') {
case "1":
- lxId = '962488654';
+ lxId = '962488654';
+ gData.action = "jf";
break;
case "2":
- lxId = '816059832';
+ lxId = '816059832';
+ gData.action = "jf";
break;
case "3":
- lxId = 'JC';
+ lxId = 'jf';
+ gData.action = "jf";
+ break;
+ case "4":
+ lxId = '962488654';
+ gData.action = "tf";
+ break;
+ case "5":
+ lxId = '816059832';
+ gData.action = "tf";
break;
}
}
@@ -72,7 +83,7 @@ onLoad(async (data: any) => {
}
}
// 直接跳转到首页,关注检查在首页进行
- PageUtils.toHome(gData.lxId);
+ PageUtils.toHome(gData.lxId, gData.action);
return;
}
} catch (err) {
diff --git a/src/pages/system/login/login.vue b/src/pages/system/login/login.vue
index c06a231..5545aa9 100644
--- a/src/pages/system/login/login.vue
+++ b/src/pages/system/login/login.vue
@@ -309,7 +309,7 @@ async function submit() {
refreshPermissionCache(currentPermissions, res.result.changeTime);
}
}
- PageUtils.toHome(getGlobal.lxId);
+ PageUtils.toHome(getGlobal.lxId, getGlobal.action);
} else {
showToast({ title: res.message || "提交失败", icon: "none" });
}
diff --git a/src/store/modules/data.ts b/src/store/modules/data.ts
index 6d8afc5..b5778dc 100644
--- a/src/store/modules/data.ts
+++ b/src/store/modules/data.ts
@@ -10,7 +10,8 @@ export const useDataStore = defineStore({
file: {},
params: {},
appCode: "JZ",
- qk: {}
+ qk: {},
+ tf: {}
}),
getters: {
getData(): any {
@@ -36,6 +37,9 @@ export const useDataStore = defineStore({
},
getQk(): any {
return this.qk;
+ },
+ getTf(): any {
+ return this.tf;
}
},
actions: {
@@ -47,6 +51,7 @@ export const useDataStore = defineStore({
this.file = {};
this.params = {};
this.qk = {};
+ this.tf = {};
},
setData(data: any) {
this.data = data;
@@ -69,6 +74,9 @@ export const useDataStore = defineStore({
setQk(data: any) {
this.qk = data;
},
+ setTf(data: any) {
+ this.tf = data;
+ },
},
persist: {
enabled: true,
diff --git a/src/utils/pageUtil.ts b/src/utils/pageUtil.ts
index 455e20c..0577532 100644
--- a/src/utils/pageUtil.ts
+++ b/src/utils/pageUtil.ts
@@ -1,4 +1,4 @@
-import { checkXsXkApi } from "@/api/base/xkApi";
+import { checkXsXkApi, checkXkTfApi } from "@/api/base/xkApi";
import { checkXsJcApi } from "@/api/base/jcApi";
import { useUserStore } from "@/store/modules/user";
import { useDataStore } from "@/store/modules/data";
@@ -15,8 +15,9 @@ export const PageUtils = {
/**
* 跳转逻辑
* @param lxId 类型( JC: 就餐,816059832: 俱乐部,962488654: 兴趣课)
+ * @param action 动作(jf: 缴费,tf: 退费)
*/
- async toHome(lxId?: string) {
+ async toHome(lxId: string, action: string) {
// 没有类型,则跳转首页
if (!lxId) {
uni.reLaunch({
@@ -38,12 +39,12 @@ export const PageUtils = {
}
}
// 判断业务逻辑,并跳转界面
- await this.checkLogicPage(lxId);
+ await this.checkLogicPage(lxId, action);
},
/**
* 判断业务逻辑,并跳转界面
*/
- async checkLogicPage(lxId: string) {
+ async checkLogicPage(lxId: string, action: string) {
switch (lxId) {
// 就餐逻辑单独处理
case "JC": {
@@ -51,7 +52,11 @@ export const PageUtils = {
} break;
// 默认当作 选课的选课类型ID(xkLxId)处理
default: {
- await this.checkQkLogic(lxId);
+ if (action === "jf") {
+ await this.checkQkLogic(lxId);
+ } else if (action === "tf") {
+ await this.checkXkTfLogic(lxId);
+ }
}
}
},
@@ -113,5 +118,43 @@ export const PageUtils = {
} break;
}
},
+
+ // 判断退费页面切换逻辑
+ async checkXkTfLogic(xklxId: string) {
+ const res = await checkXkTfApi({
+ xsId: userStore.getCurXs.id,
+ njmcId: userStore.getCurXs.njmcId,
+ xklxId: xklxId,
+ });
+ console.log('checkXkTfLogic', res);
+ if (res.resultCode != 1) {
+ uni.showToast({
+ title: res.message,
+ icon: 'none',
+ duration: 2000,
+ });
+ uni.reLaunch({
+ url: "/pages/base/home/index",
+ });
+ return;
+ }
+ const result = res.result || {};
+ // 记录到缓存数据中
+ dataStore.setTf(result);
+ // 状态判断
+ switch (result.status) {
+ case 'KTF': { // KTF可退费
+ uni.reLaunch({
+ url: "/pages/base/gzs/tf?lxId=" + xklxId,
+ });
+ } break;
+ case 'TFZ': { // TFZ退费中
+ uni.reLaunch({
+ url: "/pages/base/xk/tf/detail?xklxId=" + xklxId,
+ });
+ } break;
+ }
+ },
+
}