表格+表单 同时计算

 要求:

标准限额 =  培训类别 * 培训天数 * 参会人数  +  讲师级别 * 讲师人数 * 课时数 

1 计算表格数据时使用标准金额作为小计

由于此处 复用的单子过多 所以此页面我单独抽出来了

import { watch, reactive, ref } from 'vue';
import { billFormData } from '@/types/approval/bill';
import { tableConfigs } from '@/types/uiView';
import { approvalBillTypeCode, getPayStandData } from './applyCommon';
import { message } from 'ant-design-vue';

type billInputParams = {
  billlInfoData: billFormData;
  bill_type_name: any;
  bill_type_code: string | undefined;
  operateflag: any;
  allUiViews: any;
};
/**
 * 培训申请单(与会议费相同逻辑部分写在会议费了)
 * @param param0
 * @returns
 */
const useTrainInfo = ({
  billlInfoData,
  operateflag,
  bill_type_name,
  allUiViews,
  bill_type_code,
}: billInputParams) => {
  let sumMoney = 0; //培训明细-申请金额
  let auditSumMoney = 0; //培训明细-核定金额
  let temMoney = 0; //培训-师资费标准合计
  let applyMoney = 0; //培训-师资费申请合计
  let auditApplyMoney = 0; //培训-师资费核定合计
  let trainType = [] as any;
  const trainTypeStandCode = '02'; // 培训标准code
  const trainTableConfig = reactive<tableConfigs>({
    TRAIN_TEACHER_FEE: {
      noOp: false,
      numberFields: {},
      footerConfig: {
        titleKey: 'standard_money',
        title: '总计',
        footerData: {},
        hide: false,
        isShowSelection: false,
      },
    },
  });
  const trainCusFormObj = reactive<any>({
    meeting_type_code: {
      chooseModal: async function (column: any, val: any, option: any) {
        clearTeacherRank();
        const res: any = await getPayStandData({
          cost_code: trainTypeStandCode,
          standard_code: val,
        });
        if (res && res.standard_money) {
          (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).standard_money_temp =
            res.standard_money;
          (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).standard_money = res.standard_money;
          calculateTrainStandard();
        }
      },
    },
    meeting_period: {
      chooseModal: async function (column: any, val: any) {
        if (!val || val.length < 2) {
          return;
        }
        if ([approvalBillTypeCode.train].includes(bill_type_code || '')) {
          let start_date = new Date(val[0] as any);
          let end_date = new Date(val[1] as any);
          let travel_days = (end_date.getTime() - start_date.getTime()) / (1000 * 60 * 60 * 24) + 1;
          (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).meeting_days = travel_days;
          calculateTrainStandard();
        }
      },
    },
    delegates: {
      chooseModal: async function (column: any, val: any, option: any) {
        calculateTrainStandard();
      },
    },
  });
  /** 清空师资费的教师职级和标准 */
  const clearTeacherRank = () => {
    billlInfoData.dataSource.TRAIN_TEACHER_FEE?.forEach((element: any) => {
      element.teacher_rank_code = '';
      element.teacher_standard = 0;
      element.standard_money = 0;
    });
  };

  /** 计算标准合计 */
  const calculateTrainStandard = () => {
    let meeting_days = billlInfoData.formData.PAY_BUSINESS_INFO_DTO?.meeting_days;
    let delegates = billlInfoData.formData.PAY_BUSINESS_INFO_DTO?.delegates;
    let standard_money_temp = billlInfoData.formData.PAY_BUSINESS_INFO_DTO?.standard_money_temp;
    let standard_total = 0;
    if (meeting_days && delegates && standard_money_temp) {
      // standard_money_temp
      standard_total = Number(meeting_days) * Number(delegates) * Number(standard_money_temp);
    }
    let teacherStandardAll = 0;
    billlInfoData.dataSource.TRAIN_TEACHER_FEE?.forEach((element: any) => {
      teacherStandardAll += Number(element['standard_money'] || 0);
    });
    (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).standard_money =
      standard_total + teacherStandardAll;
  };

  const trainInfoOptionsSet = (uiView: any, column: any, cusOptionObj: any) => {
    if (
      uiView.get_attribute == 'PAY_BUSINESS_INFO_DTO' &&
      column.field_code == 'meeting_type_code'
    ) {
      trainType = [
        { value: '1', label: '一类会议', train_type_value: 600 },
        { value: '2', label: '二类会议', train_type_value: 550 },
        { value: '3', label: '三类会议', train_type_value: 450 },
      ];
      column.options = trainType;
      cusOptionObj[column.field_code] = trainType;
    }
  };


 
  //培训计算使用金额
  const trainUseMoney = (trainList: any, selectedRows: any) => {
    //选择一条指标时申请金额是使用金额 多条不赋值
    if (selectedRows?.length == 1) {
      selectedRows[0].employ_money = trainList.apply_money;
    }
  };

  //培训计算表单申请金额
  const trainApplyMoney = () => {
    //计算总得申请金额
    applyMoney = 0; //师资费明细
    billlInfoData.dataSource.TRAIN_TEACHER_FEE?.forEach((element: any) => {
      if (element.apply_money) {
        applyMoney += Number(element.apply_money);
      }
    });
    sumMoney = 0; //培训明细
    billlInfoData.dataSource.MEETING_PAY_DETAIL?.forEach((element: any) => {
      if (element.apply_money_detail) {
        sumMoney += Number(element.apply_money_detail);
      }
    });
    (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).apply_money = sumMoney + applyMoney;
  };

  // 培训申请单表格计算
  const trainTableFormChange = async (column: any, record: any, val: any, getAttribute: string) => {
    console.log('approvalBillTypeCode.train', approvalBillTypeCode.train);

    if (
      bill_type_code === approvalBillTypeCode.train ||
      String(bill_type_name).indexOf('培训') > -1
    ) {
      // 培训申请单费用明细申请金额合计
      if (column.dataIndex === 'apply_money_detail') {
        sumMoney = 0;
        billlInfoData.dataSource.MEETING_PAY_DETAIL?.forEach((element: any) => {
          if (element.apply_money_detail) {
            sumMoney += Number(element.apply_money_detail);
          }
        });
        (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).apply_money = sumMoney + applyMoney;
      }

      // 培训申请单审核费用明细核定金额合计----培训明细
      if (column.dataIndex === 'check_money') {
        auditSumMoney = 0;
        billlInfoData.dataSource.MEETING_PAY_DETAIL?.forEach((element: any) => {
          if (element.check_money) {
            auditSumMoney += +element.check_money;
          }
        });
        (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).check_money =
          auditSumMoney + auditApplyMoney;
      }

      // 培训申请单师资费明细标准计算-标准赋值/金额合计
      if (column.dataIndex === 'teacher_rank_code') {
        let standard_code = (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).meeting_type_code;
        if (!standard_code) {
          message.error('请先选择培训类型!');
          record['teacher_rank_code'] = '';
          return;
        }
        const res: any = await getPayStandData({
          cost_code: trainTypeStandCode,
          standard_code,
          teacher_rank_code: val,
        });
        // res.lecture_expense = res.food_money;
        if (res && res.lecture_expense) {
          record['teacher_standard'] = res.lecture_expense;
        } else {
          record['teacher_standard'] = 0;
        }

        let teacher_standard = Number(record['teacher_standard'] || 0);
        let class_hours = Number(record['class_hours'] || 0);
        let lecturer_user = Number(record['lecturer_user'] || 0);
        record['standard_money'] = teacher_standard * class_hours * lecturer_user;
        record['apply_money'] = teacher_standard * class_hours * lecturer_user;

        trainApplyMoney();
        calculateTrainStandard();
      }
      if (column.dataIndex === 'class_hours' || column.dataIndex === 'lecturer_user') {
        let teacher_standard = Number(record['teacher_standard'] || 0);
        let class_hours = Number(record['class_hours'] || 0);
        let lecturer_user = Number(record['lecturer_user'] || 0);
        record['standard_money'] = teacher_standard * class_hours * lecturer_user;
        record['apply_money'] = teacher_standard * class_hours * lecturer_user;
        calculateTrainStandard();
        trainApplyMoney();
      }

      // 培训申请单师资费明细标准计算-标准赋值/申请金额合计
      if (column.dataIndex === 'apply_money') {
        trainApplyMoney();
      }

      // 培训申请单师资费明细标准计算-标准赋值/核定金额合计  --师资费明细
      if (column.dataIndex === 'check_money') {
        auditApplyMoney = 0;
        billlInfoData.dataSource.TRAIN_TEACHER_FEE?.forEach((element: any) => {
          if (element.check_money) {
            auditApplyMoney += +element.check_money;
          }
        });
        (billlInfoData.formData.PAY_BUSINESS_INFO_DTO as any).check_money =
          auditSumMoney + auditApplyMoney;
      }
    }
  };

  //培训申请单申请金额校验
  const trainApplyMoneyCheck = (PAY_BUSINESS_INFO_DTO: any, QUOTA_LIST: any) => {
    //表单申请金额  = 使用金额之和
    let useMonetSum = 0;
    console.log('QUOTA_LIST:', QUOTA_LIST);
    QUOTA_LIST.forEach((item: any) => {
      useMonetSum += item.use_money;
    });
    if (PAY_BUSINESS_INFO_DTO.apply_money != useMonetSum) {
      message.error('申请金额应等于使用金额之和');
      return;
    }
  };

  return {
    trainTableConfig,
    trainInfoOptionsSet,
    trainTableFormChange,
    trainDetailTableSet,
    trainUseMoney,
    trainCusFormObj,
    trainApplyMoneyCheck,
  };
};

export default useTrainInfo;

主页面

import useTrainInfo from './billInput/trainApplyHN';

    const {
      trainTableConfig,
      trainUseMoney,
      trainApplyMoneyCheck,
      trainInfoOptionsSet,
      trainDetailTableSet,
      trainTableFormChange,
      trainCusFormObj,
    } = useTrainInfo({
      billlInfoData,
      bill_type_name,
      bill_type_code,
      allUiViews,
      operateflag,
    }); // 培训申请单配置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值