|
@@ -42,7 +42,7 @@
|
|
|
<view class="form-section">
|
|
<view class="form-section">
|
|
|
<view class="section-title">基本信息</view>
|
|
<view class="section-title">基本信息</view>
|
|
|
|
|
|
|
|
- <u-form-item label="请假类型" prop="leaveTypeName">
|
|
|
|
|
|
|
+ <u-form-item label="请假类型" prop="leaveTypeName" required>
|
|
|
<view @click="handleLeaveTypeClick" style="width: 100%">
|
|
<view @click="handleLeaveTypeClick" style="width: 100%">
|
|
|
<u-input
|
|
<u-input
|
|
|
v-model="form.leaveTypeName"
|
|
v-model="form.leaveTypeName"
|
|
@@ -64,13 +64,13 @@
|
|
|
@cancel="showLeaveTypePicker = false"
|
|
@cancel="showLeaveTypePicker = false"
|
|
|
></u-picker>
|
|
></u-picker>
|
|
|
|
|
|
|
|
- <u-form-item label="类型编码" prop="leaveTypeCode">
|
|
|
|
|
|
|
+ <u-form-item label="类型编码" prop="leaveTypeCode" v-if="false">
|
|
|
<view class="readonly-input">
|
|
<view class="readonly-input">
|
|
|
<text>{{ form.leaveTypeCode || '-' }}</text>
|
|
<text>{{ form.leaveTypeCode || '-' }}</text>
|
|
|
</view>
|
|
</view>
|
|
|
</u-form-item>
|
|
</u-form-item>
|
|
|
|
|
|
|
|
- <u-form-item label="开始时间" prop="startTime">
|
|
|
|
|
|
|
+ <u-form-item label="开始时间" prop="startTime" required>
|
|
|
<view @click="handleStartTimeClick" style="width: 100%">
|
|
<view @click="handleStartTimeClick" style="width: 100%">
|
|
|
<u-input
|
|
<u-input
|
|
|
v-model="form.startTime"
|
|
v-model="form.startTime"
|
|
@@ -94,7 +94,7 @@
|
|
|
@cancel="showStartTimePicker = false"
|
|
@cancel="showStartTimePicker = false"
|
|
|
></u-datetime-picker>
|
|
></u-datetime-picker>
|
|
|
|
|
|
|
|
- <u-form-item label="结束时间" prop="endTime">
|
|
|
|
|
|
|
+ <u-form-item label="结束时间" prop="endTime" required>
|
|
|
<view @click="handleEndTimeClick" style="width: 100%">
|
|
<view @click="handleEndTimeClick" style="width: 100%">
|
|
|
<u-input
|
|
<u-input
|
|
|
v-model="form.endTime"
|
|
v-model="form.endTime"
|
|
@@ -124,19 +124,18 @@
|
|
|
</view>
|
|
</view>
|
|
|
</u-form-item>
|
|
</u-form-item>
|
|
|
|
|
|
|
|
- <u-form-item label="是否离校">
|
|
|
|
|
|
|
+ <u-form-item label="是否离校" prop="isLeaveSchool" required>
|
|
|
<u-radio-group v-model="form.isLeaveSchool" class="radio-group">
|
|
<u-radio-group v-model="form.isLeaveSchool" class="radio-group">
|
|
|
<u-radio label="0" name="0" class="radio-item">不离校</u-radio>
|
|
<u-radio label="0" name="0" class="radio-item">不离校</u-radio>
|
|
|
<u-radio label="1" name="1" class="radio-item">离校</u-radio>
|
|
<u-radio label="1" name="1" class="radio-item">离校</u-radio>
|
|
|
</u-radio-group>
|
|
</u-radio-group>
|
|
|
</u-form-item>
|
|
</u-form-item>
|
|
|
|
|
|
|
|
- <u-form-item label="是否需要销假">
|
|
|
|
|
- <view class="readonly-input">
|
|
|
|
|
- <text class="duration-text">
|
|
|
|
|
- {{ form.needCancel === '1' ? '需要' : '不需要' }}
|
|
|
|
|
- </text>
|
|
|
|
|
- </view>
|
|
|
|
|
|
|
+ <u-form-item label="是否需要销假" prop="needCancel" required v-if="false">
|
|
|
|
|
+ <u-radio-group v-model="form.needCancel" class="radio-group">
|
|
|
|
|
+ <u-radio label="1" name="1" class="radio-item">需要</u-radio>
|
|
|
|
|
+ <u-radio label="0" name="0" class="radio-item">不需要</u-radio>
|
|
|
|
|
+ </u-radio-group>
|
|
|
</u-form-item>
|
|
</u-form-item>
|
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
@@ -144,7 +143,7 @@
|
|
|
<view class="form-section">
|
|
<view class="form-section">
|
|
|
<view class="section-title">联系信息</view>
|
|
<view class="section-title">联系信息</view>
|
|
|
|
|
|
|
|
- <u-form-item label="紧急联系人">
|
|
|
|
|
|
|
+ <u-form-item label="紧急联系人" prop="emergencyContact" required>
|
|
|
<u-input
|
|
<u-input
|
|
|
v-model="form.emergencyContact"
|
|
v-model="form.emergencyContact"
|
|
|
placeholder="请输入紧急联系人"
|
|
placeholder="请输入紧急联系人"
|
|
@@ -152,7 +151,7 @@
|
|
|
/>
|
|
/>
|
|
|
</u-form-item>
|
|
</u-form-item>
|
|
|
|
|
|
|
|
- <u-form-item label="紧急联系电话">
|
|
|
|
|
|
|
+ <u-form-item label="紧急联系电话" prop="emergencyPhone" required>
|
|
|
<u-input
|
|
<u-input
|
|
|
v-model="form.emergencyPhone"
|
|
v-model="form.emergencyPhone"
|
|
|
placeholder="请输入紧急联系电话"
|
|
placeholder="请输入紧急联系电话"
|
|
@@ -166,7 +165,7 @@
|
|
|
<view class="form-section">
|
|
<view class="form-section">
|
|
|
<view class="section-title">请假详情</view>
|
|
<view class="section-title">请假详情</view>
|
|
|
|
|
|
|
|
- <u-form-item label="请假原因" prop="leaveReason">
|
|
|
|
|
|
|
+ <u-form-item label="请假原因" prop="leaveReason" required>
|
|
|
<u-textarea
|
|
<u-textarea
|
|
|
v-model="form.leaveReason"
|
|
v-model="form.leaveReason"
|
|
|
placeholder="请输入请假原因"
|
|
placeholder="请输入请假原因"
|
|
@@ -196,9 +195,9 @@
|
|
|
</text>
|
|
</text>
|
|
|
</view>
|
|
</view>
|
|
|
<view class="location-action-container">
|
|
<view class="location-action-container">
|
|
|
- <u-button size="mini" type="success" plain @click="openLocationInMap">
|
|
|
|
|
- <u-icon name="eye" size="16" />
|
|
|
|
|
- <text style="margin-left: 20rpx">查看位置</text>
|
|
|
|
|
|
|
+ <u-button size="mini" type="primary" plain @click="openLocationInMap">
|
|
|
|
|
+ <!-- <u-icon name="eye" size="16" color="#0051d9" /> -->
|
|
|
|
|
+ <text>查看位置</text>
|
|
|
</u-button>
|
|
</u-button>
|
|
|
</view>
|
|
</view>
|
|
|
</view>
|
|
</view>
|
|
@@ -594,6 +593,14 @@ export default {
|
|
|
leaveTypeName: [{ required: true, message: '请选择请假类型', trigger: 'change' }],
|
|
leaveTypeName: [{ required: true, message: '请选择请假类型', trigger: 'change' }],
|
|
|
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
startTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
endTime: [{ 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' }],
|
|
leaveReason: [{ required: true, message: '请输入请假原因', trigger: 'blur' }],
|
|
|
},
|
|
},
|
|
|
|
|
|
|
@@ -844,20 +851,20 @@ export default {
|
|
|
)}&referer=智慧校园`;
|
|
)}&referer=智慧校园`;
|
|
|
|
|
|
|
|
// #ifdef H5
|
|
// #ifdef H5
|
|
|
- window.open(url, '_blank');
|
|
|
|
|
|
|
+ // window.open(url, '_blank');
|
|
|
// #endif
|
|
// #endif
|
|
|
|
|
|
|
|
// #ifndef H5
|
|
// #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
|
|
// #endif
|
|
|
},
|
|
},
|
|
|
|
|
|
|
@@ -2890,9 +2897,15 @@ export default {
|
|
|
try {
|
|
try {
|
|
|
this.buttonLoading = true;
|
|
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;
|
|
if (!this.validateLeaveRequest()) return;
|
|
@@ -2935,11 +2948,14 @@ export default {
|
|
|
icon: 'success',
|
|
icon: 'success',
|
|
|
duration: 1500,
|
|
duration: 1500,
|
|
|
});
|
|
});
|
|
|
- // 延迟跳转,确保 Toast 能够显示,并通知上一页刷新
|
|
|
|
|
|
|
+ // 延迟跳转,确保 Toast 能够显示,并通知目标页面刷新
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
- // 发送事件通知上一页刷新数据
|
|
|
|
|
|
|
+ // 发送事件通知目标页面刷新数据
|
|
|
uni.$emit('refreshLeaveList');
|
|
uni.$emit('refreshLeaveList');
|
|
|
- uni.navigateBack();
|
|
|
|
|
|
|
+ // 跳转到请假列表页面
|
|
|
|
|
+ uni.navigateTo({
|
|
|
|
|
+ url: '/pages/xg/xsjcxx/xsqj/leave/index',
|
|
|
|
|
+ });
|
|
|
}, 1600);
|
|
}, 1600);
|
|
|
} else {
|
|
} else {
|
|
|
console.log('response', response);
|
|
console.log('response', response);
|
|
@@ -3034,7 +3050,24 @@ export default {
|
|
|
return false;
|
|
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') {
|
|
if (leaveType.canApplyInAdvance === '0') {
|
|
|
const now = new Date();
|
|
const now = new Date();
|
|
|
now.setHours(23, 59, 59, 999);
|
|
now.setHours(23, 59, 59, 999);
|
|
@@ -3045,7 +3078,7 @@ export default {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 校验最大申请时长
|
|
|
|
|
|
|
+ // 4. 校验最大申请时长
|
|
|
if (leaveType.maxApplyDuration && leaveType.maxApplyDuration > 0) {
|
|
if (leaveType.maxApplyDuration && leaveType.maxApplyDuration > 0) {
|
|
|
const start = new Date(this.form.startTime);
|
|
const start = new Date(this.form.startTime);
|
|
|
const end = new Date(this.form.endTime);
|
|
const end = new Date(this.form.endTime);
|
|
@@ -3193,15 +3226,13 @@ export default {
|
|
|
|
|
|
|
|
// 延迟执行后续操作,确保用户看到成功提示
|
|
// 延迟执行后续操作,确保用户看到成功提示
|
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
|
- // 发送事件通知上一页刷新数据
|
|
|
|
|
|
|
+ // 发送事件通知请假列表页面刷新数据
|
|
|
uni.$emit('refreshLeaveList');
|
|
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);
|
|
}, 1600);
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|