fourcal/src/main/resources/static/assets/js/project_budget.js

257 lines
8.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

$(function () {
//绑定删除按钮删除当前行
bindDeleteBtn();
//绑定收入和采购成本的输入框【都有税率】
bindChangeableInput();
$("#saveDraft").click(function () {
$("#saveDraft").attr('disabled',true);
var message = verifyProjectContributionProfitRate();
if (message) {
$("#saveDraft").attr('disabled',false);
layuiAlert(message);
return ;
}
console.log(message);
var startTime = $("#startDate").val();
var endTime = $("#endDate").val();
if (startTime > endTime) {
$("#saveDraft").attr('disabled',false);
window.confirm('开始日期应早于结束日期');
return;
}
$("#pmsForm").attr("action",base+"/project/budgetEditSave");
$("#pmsForm").submit();
$("#saveDraft").attr('disabled',false);
});
$("#saveApprove").click(function () {
$("#saveApprove").attr('disabled',true);
var message = verifyProjectContributionProfitRate();
if (message) {
$("#saveApprove").attr('disabled',false);
layuiAlert(message);
return;
}
var startTime = $("#startDate").val();
var endTime = $("#endDate").val();
if (startTime > endTime) {
$("#saveApprove").attr('disabled',false);
window.confirm('开始日期应早于结束日期');
return;
}
$("#pmsForm").attr("action",base+"/project/budgetEditSaveAndApprove");
$("#pmsForm").submit();
$("#saveApprove").attr('disabled',false);
});
});
/**
* 一维数组变二维数组
* @param list
* @param elementsPerSubArray
* @returns {Array}
*/
function arrayToMatrix(list, elementsPerSubArray) {
var matrix = [], i, k;
for (i = 0, k = -1; i < list.length; i++) {
if (i % elementsPerSubArray === 0) {
k++;
matrix[k] = [];
}
matrix[k].push(list[i]);
}
return matrix;
}
/**
* 根据映射关系将数组变为对象
* @param arr 一行数据
* @param mapArr 映射数组
* @param keepBlank 如果有空的并且不保留空就返回空,废弃这一行
* @returns {*}
*/
function arr2Object(arr, mapArr, keepBlank) {
var obj = {};
for (var i = 0; i < mapArr.length; i++) {
if(!arr[i] && !keepBlank){
return null;
}
obj[mapArr[i]]=arr[i];
}
return obj;
}
function arr2ObjectVerify(line, arr, detailPropertyArr, detailProperty) {
var obj = {};
for (var i = 0; i < detailPropertyArr.length; i++) {
var o = detailProperty[detailPropertyArr[i]];
//空但是要求非空
if(!arr[i] && o[0]){
layuiAlert("第 "+(line+1)+" 行的 "+o[1]+" 不允许为空");
return null;
}
obj[detailPropertyArr[i]]=arr[i];
}
return obj;
}
/**
* 收集收入明细的数据因为动态添加的行modal无法识别所以自己来收集
* @returns {Array}
*/
function collectData(className) {
var a= [];
$("." + className).each(function (t) {
a.push($(this).val());
});
return a;
}
/**
* 绑定每一行的删除事件删除当前的一行tr
*/
function bindDeleteBtn() {
$(".am-modal-line-delete").click(function () {
//删除自己对应的tr
$(this).parent().parent().remove();
});
}
/**
* 将页面收集到的数据转换为ajax请求的数据【一维数组转换为对象数组】
* @param data
* @param detailPropertyArr
* @param keepBlank
* @returns {Array}
*/
function convertDetail(data,detailPropertyArr, keepBlank) {
var arr = arrayToMatrix(data,detailPropertyArr.length);
var details = [];
for (var i=0;i<arr.length;i++){
var obj = arr2Object(arr[i], detailPropertyArr, keepBlank);
if(obj){
details.push(obj);
}
}
return details;
}
function convertDetailVerify(data,detailProperty) {
var detailPropertyArr = Object.keys(detailProperty);
var arr = arrayToMatrix(data,detailPropertyArr.length);
var details = [];
for (var i=0;i<arr.length;i++){
var obj = arr2ObjectVerify(i, arr[i], detailPropertyArr, detailProperty);
if(!obj){
return null;
}
details.push(obj);
}
return details;
}
function prepareAjaxData(data,detailPropertyArr,projectId, keepBlank){
var details = convertDetail(data, detailPropertyArr, keepBlank);
return {
"details":details,
"projectId":projectId
};
}
function prepareAjaxDataVerify(data,detailProperty,projectId){
var details = convertDetailVerify(data, detailProperty);
return {
"details":details,
"projectId":projectId
};
}
/**
* 绑定每个可改变的输入框,修改后改变对应输入框的值
*/
function bindChangeableInput() {
//数量改变
$(".input-changeable-amount").change(function () {
var amount = parseInt($(this).val());
//找到对应的单价和税率
var price = f2($(this).parent().parent().find(".input-changeable-price").val());
var taxRate = f2($(this).parent().parent().find(".input-changeable-tax-rate").val());
console.log(amount,price,taxRate);
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2(amount*price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2(amount*price/(1+taxRate/100)));
});
//单价改变
$(".input-changeable-price").change(function () {
var price = f2($(this).val());
//找到对应的数量和税率
var amount = parseInt($(this).parent().parent().find(".input-changeable-amount").val());
var taxRate = f2($(this).parent().parent().find(".input-changeable-tax-rate").val());
console.log(amount,price,taxRate);
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2(amount*price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2(amount*price/(1+taxRate/100)));
});
//税率改变
$(".input-changeable-tax-rate").change(function () {
var taxRate = f2($(this).val());
//找到对应的数量和单价
var amount = parseInt($(this).parent().parent().find(".input-changeable-amount").val());
var price = f2($(this).parent().parent().find(".input-changeable-price").val());
console.log(amount,price,taxRate);
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2(amount*price/(1+taxRate/100)));
});
}
/**
* 校验项目贡献利润率必须大于阀值
* 低于阀值就返回提示信息,否则返回""
*/
function verifyProjectContributionProfitRate() {
var projectContributionProfitRate = f2(inputVal("projectContributionProfitRate"));
var projectContributionProfitRateThreshold = f2($("#projectContributionProfitRateThreshold").val());
if(projectContributionProfitRate<projectContributionProfitRateThreshold){
return "项目贡献利润率["+projectContributionProfitRate+"]低于阀值["+projectContributionProfitRateThreshold+"],请调整后重新提交";
}
return "";
}
/**
* 更新
* 毛利=收入总计(不含税)-成本总计(不含税)-财务费用总计(不含税)
* 毛利率=毛利(不含税)/收入总计(不含税)
* 贡献利润=项目毛利(不含税)-公司管理费用总计(不含税)
* 贡献利润率=贡献利润(不含税)/收入总计(不含税)
*/
function updateProjectContributionProfitRate() {
//收入总计不含税
var incomeTotalTaxExclude = f2(inputVal("incomeTotalTaxExclude"));
//成本总计不含税
var costTotalTaxExclude = f2(inputVal("costTotalTaxExclude"));
//资金使用成本不含税
var costExpropriationTaxExclude = f2(inputVal("costExpropriationTaxExclude"));
//公司管理费用
var costCompanyManageTaxExclude = f2(inputVal("costCompanyManageTaxExclude"));
var projectGrossProfit = f2(incomeTotalTaxExclude-costTotalTaxExclude-costExpropriationTaxExclude);
var projectGrossProfitRate = rate(projectGrossProfit, incomeTotalTaxExclude);
var projectContributionProfit = f2(projectGrossProfit-costCompanyManageTaxExclude);
var projectContributionProfitRate = rate(projectContributionProfit, incomeTotalTaxExclude);
$("input[name='projectGrossProfit']").val(projectGrossProfit);
$("input[name='projectGrossProfitRate']").val(projectGrossProfitRate);
$("input[name='projectContributionProfit']").val(projectContributionProfit);
$("input[name='projectContributionProfitRate']").val(projectContributionProfitRate);
}