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

257 lines
8.7 KiB
JavaScript
Raw Normal View History

2021-11-06 06:45:57 +00:00
$(function () {
//绑定删除按钮删除当前行
bindDeleteBtn();
//绑定收入和采购成本的输入框【都有税率】
bindChangeableInput();
$("#saveDraft").click(function () {
2021-12-15 05:39:57 +00:00
$("#saveDraft").attr('disabled',true);
var message = verifyProjectContributionProfitRate();
if (message) {
2021-12-15 05:39:57 +00:00
$("#saveDraft").attr('disabled',false);
2021-12-09 12:09:45 +00:00
layuiAlert(message);
return ;
}
console.log(message);
2021-12-08 09:37:57 +00:00
var startTime = $("#startDate").val();
var endTime = $("#endDate").val();
if (startTime > endTime) {
2021-12-15 05:39:57 +00:00
$("#saveDraft").attr('disabled',false);
2021-12-08 09:37:57 +00:00
window.confirm('开始日期应早于结束日期');
return;
}
$("#pmsForm").attr("action",base+"/project/budgetEditSave");
$("#pmsForm").submit();
2021-12-15 06:08:44 +00:00
$("#saveDraft").attr('disabled',false);
});
$("#saveApprove").click(function () {
2021-12-15 05:39:57 +00:00
$("#saveApprove").attr('disabled',true);
var message = verifyProjectContributionProfitRate();
if (message) {
2021-12-15 05:39:57 +00:00
$("#saveApprove").attr('disabled',false);
2021-12-09 12:09:45 +00:00
layuiAlert(message);
return;
}
2021-12-08 09:37:57 +00:00
var startTime = $("#startDate").val();
var endTime = $("#endDate").val();
if (startTime > endTime) {
2021-12-15 05:39:57 +00:00
$("#saveApprove").attr('disabled',false);
2021-12-08 09:37:57 +00:00
window.confirm('开始日期应早于结束日期');
return;
}
$("#pmsForm").attr("action",base+"/project/budgetEditSaveAndApprove");
$("#pmsForm").submit();
2021-12-15 06:08:44 +00:00
$("#saveApprove").attr('disabled',false);
});
2021-11-06 06:45:57 +00:00
});
2021-11-08 06:45:41 +00:00
/**
* 一维数组变二维数组
* @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;
}
/**
* 根据映射关系将数组变为对象
2021-11-24 12:36:50 +00:00
* @param arr 一行数据
* @param mapArr 映射数组
* @param keepBlank 如果有空的并且不保留空就返回空废弃这一行
* @returns {*}
2021-11-08 06:45:41 +00:00
*/
2021-11-24 12:36:50 +00:00
function arr2Object(arr, mapArr, keepBlank) {
2021-11-08 06:45:41 +00:00
var obj = {};
for (var i = 0; i < mapArr.length; i++) {
2021-11-24 12:36:50 +00:00
if(!arr[i] && !keepBlank){
2021-11-08 06:45:41 +00:00
return null;
}
obj[mapArr[i]]=arr[i];
}
return obj;
}
2021-12-09 11:49:42 +00:00
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]){
2021-12-09 12:09:45 +00:00
layuiAlert("第 "+(line+1)+" 行的 "+o[1]+" 不允许为空");
2021-12-09 11:49:42 +00:00
return null;
}
obj[detailPropertyArr[i]]=arr[i];
}
return obj;
}
2021-11-08 06:45:41 +00:00
/**
* 收集收入明细的数据因为动态添加的行modal无法识别所以自己来收集
* @returns {Array}
*/
function collectData(className) {
var a= [];
$("." + className).each(function (t) {
console.log("收集:" + className + "," + $(this).val())
2021-11-08 06:45:41 +00:00
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
2021-11-24 12:37:30 +00:00
* @param keepBlank
2021-11-08 06:45:41 +00:00
* @returns {Array}
*/
2021-11-24 12:36:50 +00:00
function convertDetail(data,detailPropertyArr, keepBlank) {
2021-11-08 06:45:41 +00:00
var arr = arrayToMatrix(data,detailPropertyArr.length);
var details = [];
for (var i=0;i<arr.length;i++){
2021-11-24 12:36:50 +00:00
var obj = arr2Object(arr[i], detailPropertyArr, keepBlank);
2021-11-08 06:45:41 +00:00
if(obj){
details.push(obj);
}
}
return details;
}
2021-12-09 11:49:42 +00:00
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;
}
2021-11-08 06:45:41 +00:00
2021-11-24 12:36:50 +00:00
function prepareAjaxData(data,detailPropertyArr,projectId, keepBlank){
var details = convertDetail(data, detailPropertyArr, keepBlank);
2021-11-08 06:45:41 +00:00
return {
"details":details,
"projectId":projectId
};
}
2021-12-09 11:49:42 +00:00
function prepareAjaxDataVerify(data,detailProperty,projectId){
var details = convertDetailVerify(data, detailProperty);
return {
"details":details,
"projectId":projectId
};
}
2021-11-08 06:45:41 +00:00
/**
* 绑定每个可改变的输入框修改后改变对应输入框的值
*/
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);
2021-12-27 01:37:46 +00:00
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount*price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount*price/(1+taxRate/100)));
2021-11-08 06:45:41 +00:00
});
//单价改变
$(".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);
2021-12-27 01:37:46 +00:00
$(this).parent().parent().find(".input-changeable-total-tax-include").val(f2Fixed(amount*price));
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount*price/(1+taxRate/100)));
2021-11-08 06:45:41 +00:00
});
//税率改变
$(".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);
2021-12-27 01:37:46 +00:00
$(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount*price/(1+taxRate/100)));
2021-11-08 06:45:41 +00:00
});
}
/**
* 校验项目贡献利润率必须大于阀值
* 低于阀值就返回提示信息否则返回""
*/
function verifyProjectContributionProfitRate() {
2021-11-17 09:28:55 +00:00
var projectContributionProfitRate = f2(inputVal("projectContributionProfitRate"));
var projectContributionProfitRateThreshold = f2($("#projectContributionProfitRateThreshold").val());
if(projectContributionProfitRate<projectContributionProfitRateThreshold){
return "项目贡献利润率["+projectContributionProfitRate+"]低于阀值["+projectContributionProfitRateThreshold+"],请调整后重新提交";
}
return "";
}
2021-11-05 10:33:13 +00:00
/**
* 更新
* 毛利=收入总计不含税-成本总计不含税-财务费用总计不含税
* 毛利率=毛利不含税/收入总计不含税
* 贡献利润=项目毛利不含税-公司管理费用总计不含税
* 贡献利润率=贡献利润不含税/收入总计不含税
*/
function updateProjectContributionProfitRate() {
//收入总计不含税
2021-11-17 09:28:55 +00:00
var incomeTotalTaxExclude = f2(inputVal("incomeTotalTaxExclude"));
2021-11-05 10:33:13 +00:00
//成本总计不含税
2021-11-17 09:28:55 +00:00
var costTotalTaxExclude = f2(inputVal("costTotalTaxExclude"));
2021-11-05 10:33:13 +00:00
//资金使用成本不含税
2021-11-17 09:28:55 +00:00
var costExpropriationTaxExclude = f2(inputVal("costExpropriationTaxExclude"));
2021-11-05 10:33:13 +00:00
//公司管理费用
2021-11-17 09:28:55 +00:00
var costCompanyManageTaxExclude = f2(inputVal("costCompanyManageTaxExclude"));
2021-11-05 10:33:13 +00:00
2021-12-27 01:37:46 +00:00
var projectGrossProfit = f2Fixed(incomeTotalTaxExclude-costTotalTaxExclude-costExpropriationTaxExclude);
var projectGrossProfitRate = f2Fixed(rate(projectGrossProfit, incomeTotalTaxExclude));
var projectContributionProfit = f2Fixed(projectGrossProfit-costCompanyManageTaxExclude);
var projectContributionProfitRate = f2Fixed(rate(projectContributionProfit, incomeTotalTaxExclude));
2021-11-05 10:33:13 +00:00
$("input[name='projectGrossProfit']").val(projectGrossProfit);
$("input[name='projectGrossProfitRate']").val(projectGrossProfitRate);
$("input[name='projectContributionProfit']").val(projectContributionProfit);
$("input[name='projectContributionProfitRate']").val(projectContributionProfitRate);
}