Files
ys-app/src/pages/business/CRM/leave/myApply.vue
jiangyanshan fc8a324a9f CRM请假
2025-12-12 15:12:47 +08:00

237 lines
6.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="con-body">
<view class="con-bg">
<customHeader ref="customHeaderRef" :title="'我的表单'" :leftFlag="true">
</customHeader>
<!-- #ifdef H5 -->
<view style="height:50rpx"></view>
<!-- #endif -->
<!-- 高度来避免头部遮挡 -->
<view class="top-height"></view>
<view class="white-bg">
<view class="tabs-container">
<view class="tabs-scorll">
<view class="tabs-header">
<view v-for="(tab, index) in tabList" :key="index"
:class="['tab-item', { 'active': activeTab === index }]"
@click="switchTab(index)">
{{ tab }}
</view>
</view>
</view>
<view class="white-bg-2" v-for="item in detailList">
<view class="report-list" @click="showDetail(item)">
<view class="title" style="margin-top: 20rpx;font-size: 30rpx">
{{ item.typeval=="1"?'全天':item.typeval=="2"?'前半个班次':'后半个班次' }}
<label v-if="item.applyType=='请假'"
style="float: right;color: #03ca03;">
{{ item.applyType}}</label>
<label v-if="item.applyType=='销假'"
style="float: right;color: #eaa303;">
{{ item.applyType}}</label>
</view>
<view class="r-list">
<view class="r-left" style="font-size: 30rpx;font-weight: 500;">
申请日期{{ item.applyDate }}
<label v-if="item.status=='待审批'"
style="color: #03ca03;">{{ item.reviewStatus }}</label>
<label v-if="item.status=='审批中'"
style="color: #03ca03;">{{ item.reviewStatus }}</label>
<label v-if="item.status=='驳回'"
style="color: #fa3303;">{{ item.reviewStatus }}</label>
<label v-if="item.status=='完成'"
style="color: #03aaf3;">{{ item.reviewStatus }}</label>
</view>
</view>
<view class="r-list">
<view class="r-left">休假日期</view>
<view class="r-right">{{ item.startDate }} {{ item.endDate }}
<label v-if="item.applyType=='请假'" style="color: #03ca03;">
{{ item.days.replace('.0','')}}</label>
<label v-if="item.applyType=='销假'" style="color: #eaa303;">
{{ item.days.replace('.0','')}}</label>
</view>
</view>
<view class="r-list">
<view class="r-left">详细说明</view>
<view v-if="item.reason && item.reason.length <= 18"
class="r-right">{{ item.reason }}</view>
</view>
<view class="border-bottom" style="margin: 20rpx 0;"></view>
</view>
</view>
<view class="uni-pagination-box"><uni-pagination show-icon :page-size="pageSize"
:current="pageCurrent" :total="total" @change="change" /></view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted,
reactive
} from 'vue'
import {
onShow
} from '@dcloudio/uni-app'
import customHeader from '@/components/customHeader.vue'
import {
getNavBarPaddingTop
} from '@/utils/system.js'
import {
getLeaveApplyList
} from '@/api/crm/activity/activity';
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
getlist();
})
onShow(() => {
uni.$on('isRefresh', function() {
getlist();
})
})
const pageSize = ref(4);
const pageCurrent = ref(1);
const loading = ref(false);
let tabList = ref([])
let total = ref(0);
const totalAll = ref(0);
const totalReview = ref(0);
const totalReject = ref(0);
const totalPass = ref(0);
let activeTab = ref(0);
let detailList = ref([])
let detailLists = ref([])
let reviewList = ref([])
let rejectList = ref([])
let passList = ref([])
const getlist = async () => {
loading.value = true
let res = await getLeaveApplyList();
detailLists.value = res.rows;
reviewList.value = res.rows.filter(t => t.status == '待审批' || t.status == '审批中')
rejectList.value = res.rows.filter(t => t.status == '驳回')
passList.value = res.rows.filter(t => t.status == '完成')
total.value = res.total
totalAll.value = res.total
totalReview.value = reviewList.value.length
totalReject.value = rejectList.value.length
totalPass.value = passList.value.length
change({
current: 1
})
loading.value = false
let all = '全部(' + totalAll.value + ')'
let review = '审核中(' + totalReview.value + ')'
let reject = '已驳回(' + totalReject.value + ')'
let pass = '已通过(' + totalPass.value + ')'
tabList.value = [all, review, reject, pass]
}
const switchTab = (index) => {
activeTab.value = index
change({
current: 1
})
}
// 分页触发
let change = (e) => {
pageCurrent.value = e.current
let end = pageSize.value * e.current
let start = end - pageSize.value
if (activeTab.value == 0) {
detailList.value = detailLists.value.slice(start, end)
total.value = totalAll.value
} else if (activeTab.value == 1) {
detailList.value = reviewList.value.slice(start, end)
total.value = totalReview.value
} else if (activeTab.value == 2) {
detailList.value = rejectList.value.slice(start, end)
total.value = totalReject.value
} else if (activeTab.value == 3) {
detailList.value = passList.value.slice(start, end)
total.value = totalPass.value
}
}
// 跳转
let showDetail = (item) => {
uni.navigateTo({
url: "/pages/business/CRM/leave/myApplyDetail?data=" + encodeURIComponent(JSON
.stringify(item))
})
}
</script>
<style lang="scss" scoped>
.apply-row {
margin: 5px;
}
.border-bottom {
margin: 5px;
width: 100%;
}
.tabs-header {
display: flex;
height: 80rpx;
background: #fff;
border-bottom: 1rpx solid #eee;
}
.tab-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #666;
}
.tab-item.active {
color: #007AFF;
position: relative;
}
.tab-item.active::after {
content: '';
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 150rpx;
height: 4rpx;
background-color: #007AFF;
}
:deep(.report-list .r-list) {
padding: 0.5rem 0;
}
</style>