feat(hrm): 统一审批状态显示并添加外出条打印功能

- 在请假、外出申请页面统一审批状态显示为标签样式
- 将审批状态字段从approveStatus改为approvalStatus
- 添加外出条打印组件,支持PDF格式打印
- 优化审批状态标签颜色和文本显示
- 修复已撤销状态显示错误问题
This commit is contained in:
砂糖
2026-01-21 10:54:04 +08:00
parent 9d484f0a8a
commit 9d35f39906
4 changed files with 452 additions and 42 deletions

View File

@@ -40,36 +40,36 @@
<div class="custom-tabs-nav">
<div
class="custom-tabs-item"
:class="{ active: queryParams.approveStatus === undefined || queryParams.approveStatus === '' }"
@click="handleTabClick('approveStatus', '')"
:class="{ active: queryParams.approvalStatus === undefined || queryParams.approvalStatus === '' }"
@click="handleTabClick('approvalStatus', '')"
>
全部
</div>
<div
class="custom-tabs-item"
:class="{ active: queryParams.approveStatus === 'pending' }"
@click="handleTabClick('approveStatus', 'pending')"
:class="{ active: queryParams.approvalStatus === '待审批' }"
@click="handleTabClick('approvalStatus', '待审批')"
>
待审批
</div>
<div
class="custom-tabs-item"
:class="{ active: queryParams.approveStatus === 'approved' }"
@click="handleTabClick('approveStatus', 'approved')"
:class="{ active: queryParams.approvalStatus === '已同意' }"
@click="handleTabClick('approvalStatus', '已同意')"
>
审批
同意
</div>
<div
class="custom-tabs-item"
:class="{ active: queryParams.approveStatus === 'rejected' }"
@click="handleTabClick('approveStatus', 'rejected')"
:class="{ active: queryParams.approvalStatus === '已驳回' }"
@click="handleTabClick('approvalStatus', '已驳回')"
>
已驳回
</div>
<div
class="custom-tabs-item"
:class="{ active: queryParams.approveStatus === 'withdrawn' }"
@click="handleTabClick('approveStatus', 'withdrawn')"
:class="{ active: queryParams.approvalStatus === '已撤销' }"
@click="handleTabClick('approvalStatus', '已撤销')"
>
已撤回
</div>
@@ -320,10 +320,12 @@ export default {
}).then(async () => {
this.buttonLoading = true
try {
const approvalTime = this.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}')
// 这里替换为你的审批接口调用
await updateApproval({
approvalId: row.approvalId,
approvalStatus: '已同意',
approvalTime: approvalTime,
})
this.$message.success('审批通过成功!')
this.getTodoList() // 重新查询列表
@@ -344,10 +346,12 @@ export default {
}).then(async ({ value }) => {
this.buttonLoading = true
try {
const approvalTime = this.parseTime(new Date(), '{y}-{m}-{d} {h}:{i}:{s}')
// 这里替换为你的驳回接口调用
await updateApproval({
approvalId: row.approvalId,
approvalStatus: '已驳回'
approvalStatus: '已驳回',
approvalTime: approvalTime,
})
this.$message.success('驳回成功!')
this.getTodoList() // 重新查询列表
@@ -371,7 +375,7 @@ export default {
'待审批': 'warning',
'已同意': 'success',
'已驳回': 'danger',
'已撤': 'info',
'已撤': 'info',
}
return typeMap[status] || 'default'
},
@@ -382,7 +386,7 @@ export default {
'待审批': '待审批',
'已同意': '已同意',
'已驳回': '已驳回',
'已撤': '已撤',
'已撤': '已撤',
}
return textMap[status] || '未知状态'
},
@@ -411,17 +415,11 @@ export default {
.filter-container {
background: #f5f7fa;
padding: 20px;
/* padding: 20px; */
border-radius: 4px;
height: fit-content;
}
.filter-container h4 {
margin: 0 0 20px 0;
font-size: 16px;
color: #333;
}
/* 自定义tabs样式 */
.custom-tabs {
margin-bottom: 20px;
@@ -438,14 +436,14 @@ export default {
.custom-tabs-nav {
display: flex;
flex-direction: column;
gap: 8px;
gap: 4px;
width: 100%;
}
.custom-tabs-item {
padding: 10px 15px;
text-align: center;
border-radius: 4px;
border-radius: 2px;
cursor: pointer;
font-size: 14px;
transition: all 0.2s ease;
@@ -459,9 +457,9 @@ export default {
}
.custom-tabs-item.active {
background: #409eff;
background: #667996;
color: #ffffff;
border-color: #409eff;
border-color: #667996;
}
.detail-content {