feat(我的绩效): 开发我的绩效功能。
fix(加班申请、工作报告): 重构加班申请在审批时的样式,工作报告在新增时的对话框、报告详情页的样式。
This commit is contained in:
@@ -29,7 +29,6 @@ import TaskWorklogDialog from '@/views/project/project/execution/modules/task-wo
|
||||
import PersonalItemDetailDialog from '@/views/personal-center/my-item/modules/personal-item-detail-dialog.vue';
|
||||
import PersonalItemOperateDialog from '@/views/personal-center/my-item/modules/personal-item-operate-dialog.vue';
|
||||
import PersonalItemStatusActionDialog from '@/views/personal-center/my-item/modules/personal-item-status-action-dialog.vue';
|
||||
import OvertimeApplicationActionDialog from '@/views/personal-center/overtime-application/modules/overtime-application-action-dialog.vue';
|
||||
import OvertimeApplicationBatchDetailDialog from '@/views/personal-center/overtime-application/modules/overtime-application-batch-detail-dialog.vue';
|
||||
import OvertimeApplicationDetailDialog from '@/views/personal-center/overtime-application/modules/overtime-application-detail-dialog.vue';
|
||||
import WorkReportPrototypePageDialog from '@/views/personal-center/work-report/shared/components/prototype-page-dialog.vue';
|
||||
@@ -169,12 +168,9 @@ const taskStatusAction = ref<Api.Project.LifecycleAction<Api.Project.ProjectTask
|
||||
const taskWorklogVisible = ref(false);
|
||||
const taskWorklogTask = ref<Api.Project.ProjectTask | null>(null);
|
||||
const overtimeDetailVisible = ref(false);
|
||||
const overtimeActionVisible = ref(false);
|
||||
const overtimeActionSubmitting = ref(false);
|
||||
const currentOvertimeApplication = ref<Api.OvertimeApplication.OvertimeApplication | null>(null);
|
||||
const currentOvertimeActionType = ref<OvertimeApprovalActionType>('approve');
|
||||
const batchDetailVisible = ref(false);
|
||||
const batchActionVisible = ref(false);
|
||||
const batchSubmitting = ref(false);
|
||||
const workReportDetailVisible = ref(false);
|
||||
const currentWorkReport = ref<WorkReportRow | null>(null);
|
||||
@@ -183,9 +179,6 @@ const currentWorkReportType = ref<WorkReportType>('weekly');
|
||||
// 批量审批选中状态(存原始加班申请 id,避免映射转换)
|
||||
const selectedOvertimeIds = ref<Set<string>>(new Set());
|
||||
|
||||
// 批量审批是否为当前操作来源(区分单条审批和批量审批的 submit 回调)
|
||||
const isBatchActionMode = ref(false);
|
||||
|
||||
const OVERTIME_APPROVAL_ACTION_ICONS = {
|
||||
detail: markRaw(IconMdiEyeOutline)
|
||||
};
|
||||
@@ -569,13 +562,6 @@ function openOvertimeDetail(item: WorkbenchTodoItem) {
|
||||
overtimeDetailVisible.value = true;
|
||||
}
|
||||
|
||||
function openCurrentOvertimeAction(actionType: OvertimeApprovalActionType) {
|
||||
if (!currentOvertimeApplication.value) return;
|
||||
|
||||
currentOvertimeActionType.value = actionType;
|
||||
overtimeActionVisible.value = true;
|
||||
}
|
||||
|
||||
function findWorkReportApprovalRow(item: WorkbenchTodoItem) {
|
||||
if (!item.approvalBizId || !isWorkReportApprovalBizType(item.approvalBizType)) {
|
||||
return null;
|
||||
@@ -601,25 +587,24 @@ function openWorkReportDetail(item: WorkbenchTodoItem) {
|
||||
workReportDetailVisible.value = true;
|
||||
}
|
||||
|
||||
async function handleOvertimeActionSubmit(reason: string | null) {
|
||||
async function handleOvertimeActionSubmit(payload: { actionType: OvertimeApprovalActionType; reason: string | null }) {
|
||||
if (!currentOvertimeApplication.value) {
|
||||
return;
|
||||
}
|
||||
|
||||
overtimeActionSubmitting.value = true;
|
||||
const result =
|
||||
currentOvertimeActionType.value === 'approve'
|
||||
? await fetchApproveOvertimeApplication(currentOvertimeApplication.value.id, { reason })
|
||||
: await fetchRejectOvertimeApplication(currentOvertimeApplication.value.id, { reason });
|
||||
payload.actionType === 'approve'
|
||||
? await fetchApproveOvertimeApplication(currentOvertimeApplication.value.id, { reason: payload.reason })
|
||||
: await fetchRejectOvertimeApplication(currentOvertimeApplication.value.id, { reason: payload.reason });
|
||||
overtimeActionSubmitting.value = false;
|
||||
|
||||
if (result.error) {
|
||||
return;
|
||||
}
|
||||
|
||||
overtimeActionVisible.value = false;
|
||||
overtimeDetailVisible.value = false;
|
||||
window.$message?.success(currentOvertimeActionType.value === 'approve' ? '加班申请已通过' : '加班申请已退回');
|
||||
window.$message?.success(payload.actionType === 'approve' ? '加班申请已通过' : '加班申请已退回');
|
||||
await loadOvertimeApprovalItems();
|
||||
}
|
||||
|
||||
@@ -748,30 +733,20 @@ function handleBatchReview() {
|
||||
batchDetailVisible.value = true;
|
||||
}
|
||||
|
||||
// 批量详情弹窗中点击"通过"或"退回"
|
||||
function openBatchActionDialog(actionType: OvertimeApprovalActionType) {
|
||||
currentOvertimeActionType.value = actionType;
|
||||
isBatchActionMode.value = true;
|
||||
batchActionVisible.value = true;
|
||||
}
|
||||
|
||||
// 批量审批提交(对所有选中项执行批量 API)
|
||||
async function handleBatchActionSubmit(reason: string | null) {
|
||||
async function handleBatchActionSubmit(payload: { actionType: OvertimeApprovalActionType; reason: string | null }) {
|
||||
const ids = Array.from(selectedOvertimeIds.value);
|
||||
if (ids.length === 0) return;
|
||||
|
||||
const fn =
|
||||
currentOvertimeActionType.value === 'approve'
|
||||
? fetchBatchApproveOvertimeApplication
|
||||
: fetchBatchRejectOvertimeApplication;
|
||||
payload.actionType === 'approve' ? fetchBatchApproveOvertimeApplication : fetchBatchRejectOvertimeApplication;
|
||||
|
||||
batchSubmitting.value = true;
|
||||
const { error, data } = await fn({ ids, reason });
|
||||
const { error, data } = await fn({ ids, reason: payload.reason });
|
||||
batchSubmitting.value = false;
|
||||
|
||||
if (error || !data) return;
|
||||
|
||||
batchActionVisible.value = false;
|
||||
batchDetailVisible.value = false;
|
||||
clearOvertimeSelection();
|
||||
|
||||
@@ -1206,34 +1181,16 @@ onMounted(async () => {
|
||||
show-approval-actions
|
||||
:action-loading="overtimeActionSubmitting"
|
||||
append-to-body
|
||||
@approve="openCurrentOvertimeAction('approve')"
|
||||
@reject="openCurrentOvertimeAction('reject')"
|
||||
/>
|
||||
<OvertimeApplicationActionDialog
|
||||
v-model:visible="overtimeActionVisible"
|
||||
:action-type="currentOvertimeActionType"
|
||||
:loading="overtimeActionSubmitting"
|
||||
append-to-body
|
||||
@submit="handleOvertimeActionSubmit"
|
||||
/>
|
||||
|
||||
<!-- 批量审批详情弹窗(左右箭头切换 + 通过/退回按钮) -->
|
||||
<!-- 批量审批详情弹窗(左右箭头切换 + 通过/退回按钮 + 意见输入) -->
|
||||
<OvertimeApplicationBatchDetailDialog
|
||||
v-model:visible="batchDetailVisible"
|
||||
:selected-ids="batchSelectedIds"
|
||||
:rows="overtimeApprovalRows"
|
||||
:action-loading="batchSubmitting"
|
||||
append-to-body
|
||||
@approve="openBatchActionDialog('approve')"
|
||||
@reject="openBatchActionDialog('reject')"
|
||||
/>
|
||||
|
||||
<!-- 批量审批意见/退回原因对话框 -->
|
||||
<OvertimeApplicationActionDialog
|
||||
v-model:visible="batchActionVisible"
|
||||
:action-type="currentOvertimeActionType"
|
||||
:loading="batchSubmitting"
|
||||
append-to-body
|
||||
@submit="handleBatchActionSubmit"
|
||||
/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user