318 lines
8.3 KiB
Vue
318 lines
8.3 KiB
Vue
<template>
|
||
<view class="con-body">
|
||
<view class="con-bg">
|
||
<!-- 头部 -->
|
||
<customHeader ref="customHeaderRef" :title="'审批详情'" :leftFlag="true" :rightFlag="false">
|
||
</customHeader>
|
||
|
||
<!-- 高度来避免头部遮挡 -->
|
||
<view class="top-height"></view>
|
||
|
||
<view class="white-bg">
|
||
<view class="example">
|
||
<view v-if="baseFormData.applyType != '请假'" style="display: flex;font-size: 14px;padding-top: 32rpx;
|
||
background-color: #03aa0315;height: 76rpx;">
|
||
<view class="r-left">
|
||
<label style="color: #03aa03;font-size: 34rpx;
|
||
padding: 32rpx;background-color: #dcd8d933;">
|
||
{{ baseFormData.days.replace('.0', '') }} 天</label>
|
||
</view>
|
||
<view style="margin-top: -20rpx;">
|
||
<view class="r-right" style="margin-left: 30rpx;">
|
||
{{ baseFormData.startDate }}
|
||
至
|
||
{{ baseFormData.endDate }}
|
||
</view>
|
||
<view class="r-right" style="margin-left: 30rpx;color: #00000095;">
|
||
{{ baseFormData.reason }}
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<uni-forms ref="baseForm" :modelValue="baseFormData" :label-width="80" style="margin-top: 10rpx;">
|
||
<uni-forms-item :label="baseFormData.applyType == '请假' ? '请假模式' : '销假模式'"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.typeName" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item label="开始日期" :class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.startDate" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item v-show="baseFormData.typeval == '1'" label="结束日期"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.endDate" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item label="开始时间" v-show="baseFormData.typeval != '1'"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.startTime" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item label="结束时间" v-show="baseFormData.typeval != '1'"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.endTime" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item :label="baseFormData.applyType == '请假' ? '请假天数' : '销假天数'"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple' : 'backLeave'">
|
||
<uni-easyinput v-model="baseFormData.days" class="inputborder" :disabled="true"
|
||
style="text-align: center;" />
|
||
</uni-forms-item>
|
||
<uni-forms-item label="详细说明"
|
||
:class="baseFormData.applyType == '请假' ? 'leaveApple custom-label-height' : 'backLeave custom-label-height'">
|
||
<uni-easyinput type="textarea" v-model="baseFormData.reason" :disabled="true" />
|
||
</uni-forms-item>
|
||
<view class="border-bottom" style="width: 100%;"></view>
|
||
<view style="margin-top: 20rpx;">
|
||
<uni-forms-item label="审核意见" class="custom-label-height">
|
||
<uni-easyinput type="textarea" v-model="rejectReason" />
|
||
</uni-forms-item>
|
||
</view>
|
||
</uni-forms>
|
||
</view>
|
||
<view class="footer-con" style="display: flex;" v-if="baseFormData.reviewerId != 0">
|
||
<button class="btn-warning" type="warning" @click="submit('驳回')" size="mini">驳回</button>
|
||
<button class="btn-success" type="success" @click="submit('同意')" size="mini">同意</button>
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import {
|
||
ref,
|
||
onMounted,
|
||
reactive
|
||
} from 'vue'
|
||
import {
|
||
onLoad
|
||
} from '@dcloudio/uni-app'
|
||
import customHeader from '@/components/customHeader.vue'
|
||
import customTabs from '@/components/customTabs.vue';
|
||
import {
|
||
addReviewLeave
|
||
} from '@/api/crm/activity/activity';
|
||
|
||
// 表单ref
|
||
let baseForm = ref(null);
|
||
|
||
let rejectReason = ref(null);
|
||
|
||
let baseFormData = reactive({
|
||
typeName: "全天",
|
||
typeval: 1,
|
||
startDate: getDate(Date.now()),
|
||
endDate: getDate(Date.now()),
|
||
days: 1,
|
||
reason: '',
|
||
startTime: '08:30',
|
||
endTime: '12:30',
|
||
});
|
||
|
||
onLoad((options) => {
|
||
rejectReason.value = ""
|
||
if (options.data) {
|
||
baseFormData = JSON.parse(decodeURIComponent(options.data))
|
||
change()
|
||
|
||
baseFormData.days = baseFormData.days.toString()
|
||
baseFormData.leaveDays = baseFormData.leaveDays.replace('.0', '')
|
||
|
||
if (baseFormData.reviewerIdR != null) {
|
||
rejectReason.value = baseFormData.rejectReason
|
||
}
|
||
}
|
||
})
|
||
|
||
// 查询详情
|
||
let item = ref({});
|
||
const submit = async (status) => {
|
||
if (status == '驳回' && (rejectReason.value == null || rejectReason.value == "")) {
|
||
uni.showToast({
|
||
title: '请填写驳回原因',
|
||
duration: 2000
|
||
});
|
||
} else {
|
||
let param = {
|
||
reviewStatus: status == '同意' ? '完成' : '驳回',
|
||
reviewResult: status == '同意' ? '通过' : '驳回',
|
||
rejectReason: rejectReason.value,
|
||
applyType: baseFormData.applyType,
|
||
leaveId: baseFormData.leaveId,
|
||
backId: baseFormData.backId,
|
||
days: baseFormData.days,
|
||
}
|
||
addReviewLeave(param).then(
|
||
res => {
|
||
if (res.code == 200) {
|
||
uni.showToast({
|
||
title: '提交成功',
|
||
duration: 2000
|
||
});
|
||
setTimeout(function () {
|
||
uni.navigateBack({
|
||
success: () => {
|
||
uni.$emit('isRefresh');
|
||
}
|
||
})
|
||
}, 500);
|
||
} else {
|
||
uni.showToast({
|
||
title: res.msg,
|
||
icon: 'none',
|
||
});
|
||
}
|
||
},
|
||
);
|
||
}
|
||
}
|
||
|
||
function getDate(dateval) {
|
||
const date = new Date(dateval)
|
||
const year = date.getFullYear()
|
||
const month = date.getMonth() + 1
|
||
const day = date.getDate()
|
||
return `${year}-${addZero(month)}-${addZero(day)}`
|
||
}
|
||
|
||
function addZero(num) {
|
||
if (num < 10) {
|
||
num = `0${num}`
|
||
}
|
||
return num
|
||
}
|
||
|
||
let change = () => {
|
||
if (baseFormData.typeval != 1) {
|
||
if (baseFormData.typeval == 2) {
|
||
baseFormData.startTime = '08:30'
|
||
baseFormData.endTime = '12:30'
|
||
|
||
baseFormData.typeName = '前半个班次'
|
||
} else {
|
||
baseFormData.startTime = '13:00'
|
||
baseFormData.endTime = '17:00'
|
||
|
||
baseFormData.typeName = '后半个班次'
|
||
}
|
||
|
||
baseFormData.days = 0.5
|
||
} else {
|
||
let start = baseFormData.startDate
|
||
let end = baseFormData.endDate
|
||
baseFormData.days = getDayDiff(start, end);
|
||
|
||
baseFormData.typeName = '全天'
|
||
}
|
||
|
||
baseFormData.days = baseFormData.days.toString()
|
||
}
|
||
|
||
// 计算两个日期的天数差
|
||
function getDayDiff(startDate, endDate) {
|
||
// 处理日期格式(兼容iOS)
|
||
const start = startDate.replace(/-/g, '/');
|
||
const end = endDate.replace(/-/g, '/');
|
||
|
||
const date1 = new Date(start).getTime();
|
||
const date2 = new Date(end).getTime();
|
||
|
||
if (date2 < date1) {
|
||
return 0
|
||
}
|
||
|
||
// 计算天数差(含边界值+1天)
|
||
return Math.floor(Math.abs(date2 - date1) / (24 * 3600 * 1000)) + 1;
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.white-bg {
|
||
width: 690rpx;
|
||
margin: 0;
|
||
border-radius: 8px 8px 0 0;
|
||
}
|
||
|
||
.white-bg.white-bg-2 {
|
||
border-radius: 0;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
|
||
:deep(.tabs-header) {
|
||
/* background: none !important; */
|
||
border-bottom: none !important;
|
||
margin: 0 auto;
|
||
gap: 5px;
|
||
}
|
||
|
||
:deep(.tab-item) {
|
||
color: #919191;
|
||
font-size: 32rpx;
|
||
font-weight: bold;
|
||
/* flex:none; */
|
||
/* margin: 0 -50rpx; */
|
||
/* padding: 0 50rpx; */
|
||
}
|
||
|
||
:deep(.tab-item:first-child) {
|
||
text-align: right;
|
||
margin-left: 230rpx;
|
||
}
|
||
|
||
:deep(.tab-item:last-child) {
|
||
text-align: left;
|
||
margin-right: 230rpx;
|
||
}
|
||
|
||
:deep(.tab-item.active) {
|
||
color: #3384DF;
|
||
font-weight: bold;
|
||
}
|
||
|
||
:deep(.tab-item.active::after) {
|
||
width: 100rpx;
|
||
height: 8rpx;
|
||
}
|
||
|
||
:deep(.is-disabled) {
|
||
background-color: rgba(255, 255, 255, 1) !important;
|
||
color: #333;
|
||
}
|
||
|
||
.btn-success {
|
||
background-color: #67d23a;
|
||
border: 1px solid #67d23a;
|
||
color: #fff;
|
||
/* padding: 0rpx 60rpx; */
|
||
}
|
||
|
||
.btn-warning {
|
||
background-color: #f6b23c;
|
||
border: 1px solid #f6b23c;
|
||
color: #fff;
|
||
/* padding: 0rpx 60rpx; */
|
||
}
|
||
|
||
.leaveApple {
|
||
background-color: rgba(103, 194, 58, 0.2);
|
||
}
|
||
|
||
.backLeave {
|
||
background-color: rgba(230, 162, 60, 0.2);
|
||
}
|
||
|
||
:deep(.uni-forms-item__label) {
|
||
padding: 0 12px;
|
||
}
|
||
|
||
:deep(.custom-label-height .uni-forms-item__label) {
|
||
height: 190rpx;
|
||
}
|
||
|
||
::v-deep .uni-easyinput__content-textarea {
|
||
height: 166rpx !important;
|
||
}
|
||
</style> |