feat:完成出差申请提前结束功能
This commit is contained in:
@@ -46,3 +46,9 @@ export function allTravelReq(query) {
|
||||
params: query
|
||||
})
|
||||
}
|
||||
export function earlyEndTravel(bizId) {
|
||||
return request({
|
||||
url: `/hrm/travel/earlyEnd/${bizId}`,
|
||||
method: 'put'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,6 +2,30 @@
|
||||
<BizDetailContainer :bizId="currentBizId" bizType="travel" :preview="preview">
|
||||
<template slot-scope="{ detail }">
|
||||
<div>
|
||||
<!-- ===== 新增:提前结束按钮区域 ===== -->
|
||||
<div class="action-buttons" v-if="showEarlyEndButton(detail)">
|
||||
<el-button
|
||||
type="warning"
|
||||
size="small"
|
||||
icon="el-icon-finished"
|
||||
:loading="earlyEndLoading"
|
||||
@click="handleEarlyEnd"
|
||||
>
|
||||
提前结束
|
||||
</el-button>
|
||||
<span class="hint-text">提前结束将把当前时间记录为实际结束时间</span>
|
||||
</div>
|
||||
<!-- ===== 新增:显示已提前结束的信息 ===== -->
|
||||
<div v-if="detail.actualEndTime" class="early-end-info">
|
||||
<el-alert
|
||||
type="info"
|
||||
:closable="false"
|
||||
show-icon>
|
||||
<template slot="default">
|
||||
该出差已于 {{ formatDate(detail.actualEndTime) }} 提前结束
|
||||
</template>
|
||||
</el-alert>
|
||||
</div>
|
||||
<!-- 出差时间与行程 -->
|
||||
<div class="block-title">出差时间与行程</div>
|
||||
<el-card class="inner-card" shadow="never">
|
||||
@@ -41,6 +65,7 @@
|
||||
<script>
|
||||
import FilePreview from "@/components/FilePreview/index.vue";
|
||||
import BizDetailContainer from '@/views/hrm/components/BizDetailContainer/index.vue';
|
||||
import { earlyEndTravel } from '@/api/hrm/travel'
|
||||
|
||||
export default {
|
||||
name: 'TravelDetail',
|
||||
@@ -53,7 +78,11 @@ export default {
|
||||
BizDetailContainer,
|
||||
FilePreview
|
||||
},
|
||||
name: 'HrmTravelDetail',
|
||||
data() {
|
||||
return {
|
||||
earlyEndLoading: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
currentBizId () {
|
||||
return this.bizId || this.$route?.params?.bizId || this.$route?.query?.bizId || this.$route?.params?.id
|
||||
@@ -66,7 +95,41 @@ export default {
|
||||
const p = n => (n < 10 ? `0${n}` : n)
|
||||
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`
|
||||
},
|
||||
// 新增:处理提前结束
|
||||
showEarlyEndButton(detail) {
|
||||
if (!detail) return false
|
||||
// 已经提前结束的不显示
|
||||
if (detail.actualEndTime) return false
|
||||
// 只有已通过或进行中状态才显示
|
||||
const status = detail.status
|
||||
return status === 'approved' || status === 'in_progress'
|
||||
},
|
||||
|
||||
handleEarlyEnd() {
|
||||
this.$confirm('确认提前结束本次出差吗?结束后的实际时间将记录为当前时间。', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.earlyEndLoading = true
|
||||
try {
|
||||
const bizId = this.currentBizId
|
||||
await earlyEndTravel(bizId)
|
||||
this.$message.success('提前结束成功')
|
||||
// 刷新页面
|
||||
setTimeout(() => {
|
||||
location.reload()
|
||||
}, 1000)
|
||||
} catch (error) {
|
||||
this.$message.error(error.message || '提前结束失败')
|
||||
} finally {
|
||||
this.earlyEndLoading = false
|
||||
}
|
||||
}).catch(() => {})
|
||||
},
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -375,4 +438,17 @@ export default {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.action-buttons {
|
||||
margin-bottom: 16px;
|
||||
padding: 12px;
|
||||
background: #fdf6ec;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.early-end-info {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user