257 lines
8.6 KiB
JavaScript
257 lines
8.6 KiB
JavaScript
|
||
$(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);
|
||
} |