前情回顾与本节目标

在上一节中,我们完成了回款管理功能,实现了从应收监控到回款登记再到离职交接的完整闭环。

本节我们将继续完善财务管理模块,实现薪酬与提成引擎功能。在MBA培训业务中,销售人员的薪资由基本工资、绩效工资和销售提成三部分组成。提成基于回款金额按比例自动计算,不同职级对应不同的提成比例。当发生退费时,还需要自动扣减已发放的提成。

本节核心目标:

  • 数据模型设计:创建提成记录表、薪资结构表、薪资计算记录表
  • 提成管理:基于回款金额自动计算提成,支持退款扣减

在这里插入图片描述


第一步:数据模型准备

1.1 提成记录表(MBA_Commissions)

用于记录每一笔销售提成:

字段名称 字段标识 字段类型 说明
记录ID _id 文本 主键,系统自动生成
关联订单 rel_order_id 关联关系 关联 MBA_Orders 表
关联客户 rel_customer_id 关联关系 关联 MBA_Customer 表
关联回款记录 rel_receivable_id 关联关系 关联 MBA_Receivables 表
关联销售人员 rel_salesperson_id 关联关系 关联 MBA_Users 表
课程名称 course_name 文本 课程名称
回款金额 amount 数字 回款金额
提成比例 commission_rate 数字 提成比例(%)
提成金额 commission_amount 数字 提成金额
回款日期 payment_date 日期 回款日期
发放状态 status 枚举 1-待发放、2-已发放、3-已退款
退款金额 refund_amount 数字 退款金额
退款日期 refund_date 日期 退款日期
创建时间 created_at 日期时间 自动生成
更新时间 updated_at 日期时间 自动更新

1.2 薪资结构表(MBA_SalaryStructure)

用于配置不同职级的薪资和提成比例:

字段名称 字段标识 字段类型 说明
记录ID _id 文本 主键,系统自动生成
职级名称 level_name 文本 如:初级顾问、中级顾问、高级顾问、资深顾问
基本工资 base_salary 数字 基本工资金额
绩效工资 performance_salary 数字 绩效工资金额
总裁班提成比例 president_rate 数字 总裁班提成比例(%)
高管班提成比例 executive_rate 数字 高管班提成比例(%)
VIP班提成比例 vip_rate 数字 VIP班提成比例(%)
精品班提成比例 premium_rate 数字 精品班提成比例(%)
体验班提成比例 trial_rate 数字 体验班提成比例(%)
创建时间 created_at 日期时间 自动生成
更新时间 updated_at 日期时间 自动更新

1.3 薪资计算记录表(MBA_SalaryRecords)

用于记录每月的薪资计算结果:

字段名称 字段标识 字段类型 说明
记录ID _id 文本 主键,系统自动生成
关联销售人员 rel_salesperson_id 关联关系 关联 MBA_Users 表
计算月份 calc_month 文本 如:2025-02
关联职级 rel_level_id 关联关系 关联 MBA_SalaryStructure 表
基本工资 base_salary 数字 基本工资金额
绩效工资 performance_salary 数字 绩效工资金额
销售提成 commission_total 数字 当月提成总额
个人所得税 tax 数字 个人所得税
实发工资 net_salary 数字 实发工资金额
创建时间 created_at 日期时间 自动生成
更新时间 updated_at 日期时间 自动更新

第二步:薪酬提成页面搭建

2.1 创建薪酬提成页面

点击创建页面图标,输入"薪酬提成",选择财务布局
在这里插入图片描述

切换到布局管理,选择财务布局,添加平级菜单,添加"薪酬提成"菜单
在这里插入图片描述

2.2 页面整体布局

切换回页面设计,在财务布局的内容插槽下添加布局组件,修改标题为"薪酬与提成引擎"
在这里插入图片描述

2.3 统计卡片区域

在页面顶部添加网格组件
在这里插入图片描述
选中行组件,将列的数量改为4
在这里插入图片描述

在容器内添加4个卡片组件,分别展示核心指标:

卡片 指标 数据来源
本月提成总额 ¥21,500 汇总当月提成记录中待发放+已发放金额
已发放提成 ¥15,200 汇总提成记录中已发放状态的金额
待发放提成 ¥6,300 汇总提成记录中待发放状态的金额
销售人员 4人 统计有提成记录的销售人员数量

在这里插入图片描述
创建自定义变量用来存储统计的结果
在这里插入图片描述

创建自定义方法 loadCommissionDashboard

export default async function loadCommissionDashboard({ event, data }) {
  try {
    const now = new Date();
    const currentMonth = now.getMonth();
    const currentYear = now.getFullYear();

    // 1. 查询所有提成记录
    const commissionRes = await $w.cloud.callDataSource({
      dataSourceName: 'MBA_Commissions',
      methodName: 'wedaGetRecordsV2',
      params: {
        filter: { where: {} },
        select: { $master: true }
      }
    });

    const commissions = commissionRes.records || [];

    // 2. 筛选本月记录
    const monthCommissions = commissions.filter(c => {
      const d = new Date(c.payment_date);
      return d.getMonth() === currentMonth && d.getFullYear() === currentYear;
    });

    // 3. 计算各项指标
    const totalCommission = monthCommissions.reduce((sum, c) => sum + (c.commission_amount || 0), 0);
    const paidCommission = monthCommissions
      .filter(c => c.status === '2')
      .reduce((sum, c) => sum + (c.commission_amount || 0), 0);
    const pendingCommission = monthCommissions
      .filter(c => c.status === '1')
      .reduce((sum, c) => sum + (c.commission_amount || 0), 0);

    // 4. 统计销售人员数量(去重)
    const salespersonIds = [...new Set(monthCommissions.map(c => c.rel_salesperson_id))];
    const salespersonCount = salespersonIds.length;

    // 5. 更新页面状态
    $w.page.dataset.state.commissionDashboard = {
      totalCommission,
      paidCommission,
      pendingCommission,
      salespersonCount
    };

  } catch (error) {
    console.error('加载提成仪表盘数据失败:', error);
  }
}

在页面加载时调用 loadCommissionDashboard 方法。
在这里插入图片描述
给统计卡片绑定具体的文本内容
在这里插入图片描述


第三步:提成管理

3.1 标签页配置

在统计卡片下方添加标签页组件,配置三个标签页:

标签页 名称 内容
commissions 提成管理 提成列表和筛选
salary-structure 薪资结构 薪资结构设置表格
performance 业绩分析 月度趋势图和业绩排名

在这里插入图片描述

3.2 提成管理标签页

3.2.1 提成列表表格

添加数据表格组件,数据模型选择提成记录表(MBA_Commissions),勾选全部场景
在这里插入图片描述
配置表格的操作列,添加退款扣减按钮
在这里插入图片描述

3.2.2 筛选区域

在提成管理标签页内容区域添加筛选区域,包含以下筛选条件:

  • 搜索订单或客户(文本搜索)
  • 销售人员(关联选择)
  • 发放状态(下拉选择:待发放/已发放/已退款)

在这里插入图片描述

3.2.3 退款扣减功能

在操作列配置退款扣减按钮,点击打开退款扣减弹窗。

在页面组件下添加弹窗组件,修改标题为"退款扣减"
在这里插入图片描述

在弹窗内容区域展示订单信息和扣减计算,添加表单容器,场景选择更新,数据模型选择提成记录表:
在这里插入图片描述
修改表单布局为三列布局
在这里插入图片描述
绑定数据标识,绑定为弹窗的入参
在这里插入图片描述
给提成扣减按钮配置点击事件,打开弹窗,传入所在行的数据标识
在这里插入图片描述

创建自定义方法 submitRefund

export default async function submitRefund({ event, data }) {
  const commissionId = data.target;
  const refundAmount = $w.input_refund.value;

  if (!refundAmount || refundAmount <= 0) {
    return $w.utils.showToast({ title: '请输入有效的退款金额', icon: 'error' });
  }

  try {
    $w.utils.showLoading({ title: '处理中...' });

    // 1. 查询提成记录
    const commissionRes = await $w.cloud.callDataSource({
      dataSourceName: 'MBA_Commissions',
      methodName: 'wedaGetItemV2',
      params: {
        filter: { where: { _id: { $eq: commissionId } } },
        select: { $master: true }
      }
    });

    const commission = commissionRes;
    const refundCommissionAmount = Math.round((refundAmount * commission.commission_rate) / 100);

    // 2. 更新提成记录
    await $w.cloud.callDataSource({
      dataSourceName: 'MBA_Commissions',
      methodName: 'wedaUpdateV2',
      params: {
        filter: { where: { _id: { $eq: commissionId } } },
        data: {
          amount: commission.amount - refundAmount,
          commission_amount: commission.commission_amount - refundCommissionAmount,
          status: '3',
          refund_amount: refundAmount,
          refund_date: $w.Now(),
         
        }
      }
    });

    $w.utils.hideLoading();
    $w.utils.showToast({
      title: '提成扣减成功',
      icon: 'success'
    });
    $w.modal1.close({});
    $w.table1.refresh();

  } catch (error) {
    console.error('退款扣减失败:', error);
    $w.utils.hideLoading();
    $w.utils.showToast({ title: '操作失败,请重试', icon: 'error' });
  }
}

将表单容器的提交方法改为调用自定义方法,传入弹窗的入参
在这里插入图片描述


最终效果

财务人员进入薪酬提成页面,首先看到4个核心指标卡片:本月提成总额、已发放提成、待发放提成和销售人员数量。

通过标签页切换,可以在提成管理、薪资结构和业绩分析三个模块之间切换。

在提成管理模块,可以按销售人员、发放状态筛选提成记录。当发生退费时,点击"退款扣减"按钮,输入退款金额后系统自动计算需要扣减的提成金额并更新记录。

在这里插入图片描述


总结

本节完成了薪酬与提成引擎功能的实现:

  1. 数据模型设计:创建提成记录表(MBA_Commissions)、薪资结构表(MBA_SalaryStructure)、薪资计算记录表(MBA_SalaryRecords)
  2. 提成管理:基于回款金额自动计算提成,支持退款扣减自动调整

通过本节的学习,我们完善了财务管理的薪酬计算流程,实现了从提成自动计算到薪资结构配置再到自动算薪的完整闭环。下一节我们将继续完善财务管理模块的其他功能。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐