gaoluyang
6 天以前 441d95cce3ee7a498ac4860cbc2650b64e0a438a
feat(hrm): 薪酬核算改为先预览再保存

- 去掉「一键核算并保存」入口,只能先预览核算结果;核算周期/部门变化时作废旧预览
- 预览结果可逐项调整后保存,未预览不允许保存

Co-Authored-By: Claude Code <noreply@anthropic.com>
已修改1个文件
40 ■■■■■ 文件已修改
src/views/hrm/salary/calculation/index.vue 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/salary/calculation/index.vue
@@ -2,7 +2,7 @@
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { HrmSalaryCalculationApi } from '#/api/hrm/salary/calculation';
import { ref } from 'vue';
import { ref, watch } from 'vue';
import { Page } from '#/packages/effects/common-ui/src';
import { downloadFileFromBlobPart } from '#/packages/utils/src';
@@ -14,7 +14,6 @@
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  calculateSalary,
  confirmSalary,
  deleteSalaryCalculation,
  exportSalaryCalculation,
@@ -37,7 +36,6 @@
const previewLoading = ref(false);
const previewData = ref<HrmSalaryCalculationApi.SalaryCalculation[]>([]);
const submitLoading = ref(false);
const calculateLoading = ref(false);
// 打开核算弹窗
async function openCalculateModal() {
@@ -56,27 +54,7 @@
  gridApi.query();
}
/** 执行薪酬核算(自动计算并保存) */
async function handleCalculate() {
  if (!calculatePeriod.value) {
    message.warning('请选择核算周期');
    return;
  }
  calculateLoading.value = true;
  try {
    await calculateSalary({
      period: calculatePeriod.value,
      deptId: calculateDeptId.value,
    });
    message.success('薪酬核算执行成功');
    calculateVisible.value = false;
    handleRefresh();
  } finally {
    calculateLoading.value = false;
  }
}
/** 预览核算数据 */
/** 预览核算数据(核算唯一入口:必须先预览,再保存) */
async function handlePreview() {
  if (!calculatePeriod.value) {
    message.warning('请选择核算周期');
@@ -95,6 +73,11 @@
    previewLoading.value = false;
  }
}
// 周期/部门一变,已有的预览结果就作废,避免把旧周期的数据按新周期保存
watch([calculatePeriod, calculateDeptId], () => {
  previewData.value = [];
});
/** 计算实发工资 */
function calculateActualSalary(record: HrmSalaryCalculationApi.SalaryCalculation) {
@@ -274,7 +257,7 @@
      :maskClosable="false"
    >
      <Alert
        message="两种核算方式:1. 执行核算 - 自动计算并保存;2. 预览数据 - 手动调整后保存"
        message="核算流程:选择核算周期后点「预览数据」查看核算结果,确认或调整各员工的工资项目后点「保存核算」才会写入数据;未预览不能保存。"
        type="info"
        show-icon
        style="margin-bottom: 16px"
@@ -303,12 +286,7 @@
          />
        </FormItem>
        <FormItem>
          <a-button type="primary" :loading="calculateLoading" @click="handleCalculate">
            执行核算
          </a-button>
        </FormItem>
        <FormItem>
          <a-button :loading="previewLoading" @click="handlePreview">
          <a-button type="primary" :loading="previewLoading" @click="handlePreview">
            预览数据
          </a-button>
        </FormItem>