From 062b545bd4e327a938bf39011c5d3365bcb0a786 Mon Sep 17 00:00:00 2001
From: zlwu <704541015@qq.com>
Date: Mon, 11 Aug 2025 05:56:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/pages/xg/xsjcxx/xsqj/leave/index.vue | 27 ++--
.../pages/xg/xsjcxx/xsqj/leaveEdit/index.vue | 117 +++++++++++-------
2 files changed, 92 insertions(+), 52 deletions(-)
diff --git a/mobile/src/pages/xg/xsjcxx/xsqj/leave/index.vue b/mobile/src/pages/xg/xsjcxx/xsqj/leave/index.vue
index 98bb869f..dca37893 100644
--- a/mobile/src/pages/xg/xsjcxx/xsqj/leave/index.vue
+++ b/mobile/src/pages/xg/xsjcxx/xsqj/leave/index.vue
@@ -212,11 +212,19 @@
-
-
+
+
修改
+
+
+ 查看
+
销假
-
-
-
@@ -596,6 +598,13 @@ export default {
return getDictTagType(this.sys_yesno, value, fallbackMap);
},
+ // 判断审批状态是否可编辑(显示修改按钮)
+ isEditableStatus(status) {
+ // draft(草稿)、cancel(已取消)、back(退回)状态可编辑
+ const editableStatuses = ['draft', 'cancel', 'back'];
+ return editableStatuses.includes(status);
+ },
+
// 格式化请假时间
formatLeaveTime(startTime, endTime) {
if (!startTime || !endTime) return '时间待定';
@@ -939,7 +948,7 @@ export default {
// 操作按钮
.card-actions {
display: flex;
- justify-content: space-around;
+ justify-content: flex-end;
padding: 20rpx;
border-top: 1px solid #f0f0f0;
gap: 16rpx;
diff --git a/mobile/src/pages/xg/xsjcxx/xsqj/leaveEdit/index.vue b/mobile/src/pages/xg/xsjcxx/xsqj/leaveEdit/index.vue
index 111cf56e..2fffc70a 100644
--- a/mobile/src/pages/xg/xsjcxx/xsqj/leaveEdit/index.vue
+++ b/mobile/src/pages/xg/xsjcxx/xsqj/leaveEdit/index.vue
@@ -42,7 +42,7 @@
基本信息
-
+
-
+
{{ form.leaveTypeCode || '-' }}
-
+
-
+
-
+
不离校
离校
-
-
-
- {{ form.needCancel === '1' ? '需要' : '不需要' }}
-
-
+
+
+ 需要
+ 不需要
+
@@ -144,7 +143,7 @@
联系信息
-
+
-
+
请假详情
-
+
-
-
- 查看位置
+
+
+ 查看位置
@@ -594,6 +593,14 @@ export default {
leaveTypeName: [{ required: true, message: '请选择请假类型', trigger: 'change' }],
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
endTime: [{ required: true, message: '请选择结束时间', trigger: 'change' }],
+ isLeaveSchool: [{ required: true, message: '请选择是否离校', trigger: 'change' }],
+ needCancel: [{ required: true, message: '请选择是否需要销假', trigger: 'change' }],
+ emergencyContact: [
+ { required: true, message: '请输入紧急联系人', trigger: 'blur' },
+ ],
+ emergencyPhone: [
+ { required: true, message: '请输入紧急联系电话', trigger: 'blur' },
+ ],
leaveReason: [{ required: true, message: '请输入请假原因', trigger: 'blur' }],
},
@@ -844,20 +851,20 @@ export default {
)}&referer=智慧校园`;
// #ifdef H5
- window.open(url, '_blank');
+ // window.open(url, '_blank');
// #endif
// #ifndef H5
- uni.showModal({
- title: '查看地图',
- content: '是否打开外部地图应用查看位置?',
- success: (res) => {
- if (res.confirm) {
- // 在非H5环境中,可以尝试使用系统的地图应用
- plus.runtime.openURL(url);
- }
- },
- });
+ // uni.showModal({
+ // title: '查看地图',
+ // content: '是否打开外部地图应用查看位置?',
+ // success: (res) => {
+ // if (res.confirm) {
+ // // 在非H5环境中,可以尝试使用系统的地图应用
+ // plus.runtime.openURL(url);
+ // }
+ // },
+ // });
// #endif
},
@@ -2890,9 +2897,15 @@ export default {
try {
this.buttonLoading = true;
- // 表单验证
- const valid = await this.validateForm();
- if (!valid) return;
+ // 使用 uview2 官方表单验证
+ try {
+ await this.$refs.formRef.validate();
+ uni.$u.toast('表单校验通过');
+ } catch (errors) {
+ uni.$u.toast('请检查表单填写是否正确');
+ console.log('表单校验失败:', errors);
+ return;
+ }
// 业务校验
if (!this.validateLeaveRequest()) return;
@@ -2935,11 +2948,14 @@ export default {
icon: 'success',
duration: 1500,
});
- // 延迟跳转,确保 Toast 能够显示,并通知上一页刷新
+ // 延迟跳转,确保 Toast 能够显示,并通知目标页面刷新
setTimeout(() => {
- // 发送事件通知上一页刷新数据
+ // 发送事件通知目标页面刷新数据
uni.$emit('refreshLeaveList');
- uni.navigateBack();
+ // 跳转到请假列表页面
+ uni.navigateTo({
+ url: '/pages/xg/xsjcxx/xsqj/leave/index',
+ });
}, 1600);
} else {
console.log('response', response);
@@ -3034,7 +3050,24 @@ export default {
return false;
}
- // 校验是否可以提前请假
+ // 1. 校验是否需要上传地理位置
+ if (leaveType.needLocationOnApply === '1') {
+ if (!this.form.leaveLocation) {
+ uni.showToast({ title: '该请假类型需要上传地理位置', icon: 'none' });
+ return false;
+ }
+ }
+
+ // 2. 校验和设置销假状态
+ if (leaveType.needCancelForNonLeave === '0' && this.form.isLeaveSchool === '0') {
+ // 非离校请假且该类型不需要销假时,自动设置为不需要销假
+ this.form.needCancel = '0';
+ } else {
+ // 其他情况都需要销假
+ this.form.needCancel = '1';
+ }
+
+ // 3. 校验是否可以提前请假
if (leaveType.canApplyInAdvance === '0') {
const now = new Date();
now.setHours(23, 59, 59, 999);
@@ -3045,7 +3078,7 @@ export default {
}
}
- // 校验最大申请时长
+ // 4. 校验最大申请时长
if (leaveType.maxApplyDuration && leaveType.maxApplyDuration > 0) {
const start = new Date(this.form.startTime);
const end = new Date(this.form.endTime);
@@ -3193,15 +3226,13 @@ export default {
// 延迟执行后续操作,确保用户看到成功提示
setTimeout(() => {
- // 发送事件通知上一页刷新数据
+ // 发送事件通知请假列表页面刷新数据
uni.$emit('refreshLeaveList');
- // 如果是编辑模式,刷新当前页面数据;否则返回上一页
- if (this.routeParams.id) {
- this.getLeaveDetail(this.routeParams.id);
- } else {
- uni.navigateBack();
- }
+ // 无论是编辑模式还是新增模式,都跳转到请假列表页面
+ uni.navigateTo({
+ url: '/pages/xg/xsjcxx/xsqj/leave/index',
+ });
}, 1600);
},
},