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); }, },