提交代码
This commit is contained in:
1 parent
d4eb09c5a9
commit
062b545bd4
2 files changed
+92
-52
No files matched your search
@@ -212,11 +212,19 @@
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
<view class="card-actions">
|
||||
<!-- 修改按钮 -->
|
||||
<view class="action-btn info-btn" @click="handleUpdate(item)">
|
||||
<!-- 修改/查看按钮:根据审批状态动态显示 -->
|
||||
<view
|
||||
v-if="isEditableStatus(item.approvalStatus)"
|
||||
class="action-btn info-btn"
|
||||
@click="handleUpdate(item)"
|
||||
>
|
||||
<u-icon name="edit-pen" size="16" color="#3c9cff"></u-icon>
|
||||
<text class="btn-text">修改</text>
|
||||
</view>
|
||||
<view v-else class="action-btn warning-btn" @click="handleUpdate(item)">
|
||||
<u-icon name="eye" size="16" color="#ff9900"></u-icon>
|
||||
<text class="btn-text">查看</text>
|
||||
</view>
|
||||
|
||||
<!-- 删除按钮:仅草稿状态可见 -->
|
||||
<view
|
||||
@@ -237,12 +245,6 @@
|
||||
<u-icon name="checkmark-circle" size="16" color="#5ac725"></u-icon>
|
||||
<text class="btn-text">销假</text>
|
||||
</view>
|
||||
|
||||
<!-- 查看详情按钮 -->
|
||||
<!-- <view class="action-btn warning-btn" @click="handleViewDetail(item)">
|
||||
<u-icon name="eye" size="16" color="#ff9900"></u-icon>
|
||||
<text class="btn-text">详情</text>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -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;
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<view class="form-section">
|
||||
<view class="section-title">基本信息</view>
|
||||
|
||||
<u-form-item label="请假类型" prop="leaveTypeName">
|
||||
<u-form-item label="请假类型" prop="leaveTypeName" required>
|
||||
<view @click="handleLeaveTypeClick" style="width: 100%">
|
||||
<u-input
|
||||
v-model="form.leaveTypeName"
|
||||
@@ -64,13 +64,13 @@
|
||||
@cancel="showLeaveTypePicker = false"
|
||||
></u-picker>
|
||||
|
||||
<u-form-item label="类型编码" prop="leaveTypeCode">
|
||||
<u-form-item label="类型编码" prop="leaveTypeCode" v-if="false">
|
||||
<view class="readonly-input">
|
||||
<text>{{ form.leaveTypeCode || '-' }}</text>
|
||||
</view>
|
||||
</u-form-item>
|
||||
|
||||
<u-form-item label="开始时间" prop="startTime">
|
||||
<u-form-item label="开始时间" prop="startTime" required>
|
||||
<view @click="handleStartTimeClick" style="width: 100%">
|
||||
<u-input
|
||||
v-model="form.startTime"
|
||||
@@ -94,7 +94,7 @@
|
||||
@cancel="showStartTimePicker = false"
|
||||
></u-datetime-picker>
|
||||
|
||||
<u-form-item label="结束时间" prop="endTime">
|
||||
<u-form-item label="结束时间" prop="endTime" required>
|
||||
<view @click="handleEndTimeClick" style="width: 100%">
|
||||
<u-input
|
||||
v-model="form.endTime"
|
||||
@@ -124,19 +124,18 @@
|
||||
</view>
|
||||
</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 label="0" name="0" class="radio-item">不离校</u-radio>
|
||||
<u-radio label="1" name="1" class="radio-item">离校</u-radio>
|
||||
</u-radio-group>
|
||||
</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>
|
||||
</view>
|
||||
|
||||
@@ -144,7 +143,7 @@
|
||||
<view class="form-section">
|
||||
<view class="section-title">联系信息</view>
|
||||
|
||||
<u-form-item label="紧急联系人">
|
||||
<u-form-item label="紧急联系人" prop="emergencyContact" required>
|
||||
<u-input
|
||||
v-model="form.emergencyContact"
|
||||
placeholder="请输入紧急联系人"
|
||||
@@ -152,7 +151,7 @@
|
||||
/>
|
||||
</u-form-item>
|
||||
|
||||
<u-form-item label="紧急联系电话">
|
||||
<u-form-item label="紧急联系电话" prop="emergencyPhone" required>
|
||||
<u-input
|
||||
v-model="form.emergencyPhone"
|
||||
placeholder="请输入紧急联系电话"
|
||||
@@ -166,7 +165,7 @@
|
||||
<view class="form-section">
|
||||
<view class="section-title">请假详情</view>
|
||||
|
||||
<u-form-item label="请假原因" prop="leaveReason">
|
||||
<u-form-item label="请假原因" prop="leaveReason" required>
|
||||
<u-textarea
|
||||
v-model="form.leaveReason"
|
||||
placeholder="请输入请假原因"
|
||||
@@ -196,9 +195,9 @@
|
||||
</text>
|
||||
</view>
|
||||
<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>
|
||||
</view>
|
||||
</view>
|
||||
@@ -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);
|
||||
},
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user