要求:
标准限额 = 培训类别 * 培训天数 * 参会人数 + 讲师级别 * 讲师人数 * 课时数
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,
}); // 培训申请单配置