Files
ys-app/src/pages/business/CRM/leave/reviewDetail.vue

318 lines
8.3 KiB
Vue
Raw Normal View History

2025-12-12 15:12:47 +08:00
<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>