diff --git a/src/main/resources/static/assets/js/project_budget.js b/src/main/resources/static/assets/js/project_budget.js index 0451eda..b15b73f 100644 --- a/src/main/resources/static/assets/js/project_budget.js +++ b/src/main/resources/static/assets/js/project_budget.js @@ -1,3 +1,56 @@ +INCOME_DETAIL = { + "type": [true, "类别"], + "name": [true, "名称"], + "unit": [true, "单位"], + "amount": [true, "数量"], + "price": [true, "单价"], + "taxRate": [true, "税率"], + "totalTaxInclude": [true, "含税总金额"], + "totalTaxExclude": [true, "不含税金额"] +}; + +COST_DETAIL={ + "type":[true,"大类"], + "category":[true,"类别"], + "name":[true,"名称"], + "unit":[true,"单位"], + "amount":[true,"数量"], + "price":[true,"单价"], + "taxRate":[true,"税率"], + "totalTaxInclude":[true,"含税总金额"], + "totalTaxExclude":[true,"不含税金额"] +}; + +COST_PROJECT_MANAGE_DETAIL={ + "type":[true,"财务费用类别"], + "name1":[false,"业务项目"], + "name2":[false,"业务项目"], + "detail":[true,"项目明细"], + "unit":[true,"单位"], + "amount":[true,"数量"], + "price":[true,"单价"], + "total":[true,"总金额"], + "predictMethod":[false,"预估计算方法"], + "predictWhy":[false,"预估依据"], + "remark":[false,"备注"], + "deletable":[true,"是否可删除"] +}; + +BUDGET_PLAN_DETAIL={ + "month":[true,"月份"], + "deviceCost":[true,"设备支出"], + "engineerCost":[true,"工程支出"], + "projectManageCost":[true,"经营性开支"], + "earnestMoneyCost":[true,"保证金支出"], + "totalCost":[true,"支出合计"], + "saleIncome":[true,"销售收款"], + "earnestMoneyIncome":[true,"保证金收款"], + "totalIncome":[true,"收款合计"], + "fundBalance":[true,"资金余额"], + "capitalInterest":[true,"资金利息"], + "underwrittenPlan":[true,"垫资计划"], + "repaymentPlan":[true,"还款计划"] +}; $(function () { //绑定删除按钮删除当前行 @@ -8,82 +61,122 @@ $(function () { $("#saveDraft").click(function () { var dataIncome = collectData("am-modal-prompt-input-income"); - if(dataIncome.length <= 0){ + if (dataIncome.length <= 0) { window.confirm('请填写收入明细表'); return; } + var dataIncomeCheck = convertDetailVerifyCheck(dataIncome, INCOME_DETAIL, "收入明细表"); + if (dataIncomeCheck == null) { + return; + } + var dataCost = collectData("am-modal-prompt-input-cost"); - if(dataCost.length <= 0){ + if (dataCost.length <= 0) { window.confirm('请填写采购成本明细表'); return; } + var dataCostCheck = convertDetailVerifyCheck(dataCost, COST_DETAIL, "采购成本明细表"); + if (dataCostCheck == null) { + return; + } + var dataManage = collectData("am-modal-prompt-input-cost-project-manage"); - if(dataManage.length <= 0){ + if (dataManage.length <= 0) { window.confirm('请填写项目管理成本表'); return; } + var dataManageCheck = convertDetailVerifyCheck(dataManage, COST_PROJECT_MANAGE_DETAIL, "项目管理成本表"); + if (dataManageCheck == null) { + return; + } + var dataPlan = collectData("am-modal-prompt-input-budget-plan-detail"); - if(dataPlan.length <= 0){ + if (dataPlan.length <= 0) { window.confirm('请填写项目资金计划表'); return; } - $("#saveDraft").attr('disabled',true); + var dataPlanCheck = convertDetailVerifyCheck(dataPlan, BUDGET_PLAN_DETAIL, "项目资金计划表"); + if (dataPlanCheck == null) { + return; + } + + $("#saveDraft").attr('disabled', true); var message = verifyProjectContributionProfitRate(); if (message) { - $("#saveDraft").attr('disabled',false); + $("#saveDraft").attr('disabled', false); layuiAlert(message); - return ; + return; } console.log(message); var startTime = $("#startDate").val(); var endTime = $("#endDate").val(); if (startTime > endTime) { - $("#saveDraft").attr('disabled',false); + $("#saveDraft").attr('disabled', false); window.confirm('开始日期应早于结束日期'); return; } - $("#pmsForm").attr("action",base+"/project/budgetEditSave"); + $("#pmsForm").attr("action", base + "/project/budgetEditSave"); $("#pmsForm").submit(); - $("#saveDraft").attr('disabled',false); + $("#saveDraft").attr('disabled', false); }); $("#saveApprove").click(function () { var dataIncome = collectData("am-modal-prompt-input-income"); - if(dataIncome.length <= 0){ + if (dataIncome.length <= 0) { window.confirm('请填写收入明细表'); return; } + var dataIncomeCheck = convertDetailVerifyCheck(dataIncome, INCOME_DETAIL, "收入明细表"); + if (dataIncomeCheck == null) { + return; + } + var dataCost = collectData("am-modal-prompt-input-cost"); - if(dataCost.length <= 0){ + if (dataCost.length <= 0) { window.confirm('请填写采购成本明细表'); return; } + var dataCostCheck = convertDetailVerifyCheck(dataCost, COST_DETAIL, "采购成本明细表"); + if (dataCostCheck == null) { + return; + } + var dataManage = collectData("am-modal-prompt-input-cost-project-manage"); - if(dataManage.length <= 0){ + if (dataManage.length <= 0) { window.confirm('请填写项目管理成本表'); return; } + var dataManageCheck = convertDetailVerifyCheck(dataManage, COST_PROJECT_MANAGE_DETAIL, "项目管理成本表"); + if (dataManageCheck == null) { + return; + } + var dataPlan = collectData("am-modal-prompt-input-budget-plan-detail"); - if(dataPlan.length <= 0){ + if (dataPlan.length <= 0) { window.confirm('请填写项目资金计划表'); return; } - $("#saveApprove").attr('disabled',true); + var dataPlanCheck = convertDetailVerifyCheck(dataPlan, BUDGET_PLAN_DETAIL, "项目资金计划表"); + if (dataPlanCheck == null) { + return; + } + + $("#saveApprove").attr('disabled', true); var message = verifyProjectContributionProfitRate(); if (message) { - $("#saveApprove").attr('disabled',false); + $("#saveApprove").attr('disabled', false); layuiAlert(message); return; } @@ -91,14 +184,14 @@ $(function () { var startTime = $("#startDate").val(); var endTime = $("#endDate").val(); if (startTime > endTime) { - $("#saveApprove").attr('disabled',false); + $("#saveApprove").attr('disabled', false); window.confirm('开始日期应早于结束日期'); return; } - $("#pmsForm").attr("action",base+"/project/budgetEditSaveAndApprove"); + $("#pmsForm").attr("action", base + "/project/budgetEditSaveAndApprove"); $("#pmsForm").submit(); - $("#saveApprove").attr('disabled',false); + $("#saveApprove").attr('disabled', false); }); }); @@ -133,23 +226,38 @@ function arrayToMatrix(list, elementsPerSubArray) { function arr2Object(arr, mapArr, keepBlank) { var obj = {}; for (var i = 0; i < mapArr.length; i++) { - if(!arr[i] && !keepBlank){ + if (!arr[i] && !keepBlank) { return null; } - obj[mapArr[i]]=arr[i]; + 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]+" 不允许为空"); + if (!arr[i] && o[0]) { + layuiAlert("第 " + (line + 1) + " 行的 " + o[1] + " 不允许为空"); return null; } - obj[detailPropertyArr[i]]=arr[i]; + obj[detailPropertyArr[i]] = arr[i]; + } + return obj; +} + +function arr2ObjectVerifyCheck(line, arr, detailPropertyArr, detailProperty, s) { + var obj = {}; + for (var i = 0; i < detailPropertyArr.length; i++) { + var o = detailProperty[detailPropertyArr[i]]; + //空但是要求非空 + if (!arr[i] && o[0]) { + layuiAlert(s + "第 " + (line + 1) + " 行的 " + o[1] + " 不允许为空"); + return null; + } + obj[detailPropertyArr[i]] = arr[i]; } return obj; } @@ -160,7 +268,7 @@ function arr2ObjectVerify(line, arr, detailPropertyArr, detailProperty) { * @returns {Array} */ function collectData(className) { - var a= []; + var a = []; $("." + className).each(function (t) { console.log("收集:" + className + "," + $(this).val()) a.push($(this).val()); @@ -185,26 +293,27 @@ function bindDeleteBtn() { * @param keepBlank * @returns {Array} */ -function convertDetail(data,detailPropertyArr, keepBlank) { - var arr = arrayToMatrix(data,detailPropertyArr.length); +function convertDetail(data, detailPropertyArr, keepBlank) { + var arr = arrayToMatrix(data, detailPropertyArr.length); var details = []; - for (var i=0;i<arr.length;i++){ + for (var i = 0; i < arr.length; i++) { var obj = arr2Object(arr[i], detailPropertyArr, keepBlank); - if(obj){ + if (obj) { details.push(obj); } } return details; } -function convertDetailVerify(data,detailProperty) { + +function convertDetailVerify(data, detailProperty) { var detailPropertyArr = Object.keys(detailProperty); - var arr = arrayToMatrix(data,detailPropertyArr.length); + var arr = arrayToMatrix(data, detailPropertyArr.length); var details = []; - for (var i=0;i<arr.length;i++){ + for (var i = 0; i < arr.length; i++) { var obj = arr2ObjectVerify(i, arr[i], detailPropertyArr, detailProperty); - if(!obj){ + if (!obj) { return null; } details.push(obj); @@ -213,20 +322,37 @@ function convertDetailVerify(data,detailProperty) { return details; } -function prepareAjaxData(data,detailPropertyArr,projectId, keepBlank){ +function convertDetailVerifyCheck(data, detailProperty, s) { + var detailPropertyArr = Object.keys(detailProperty); + var arr = arrayToMatrix(data, detailPropertyArr.length); + var details = []; + for (var i = 0; i < arr.length; i++) { + var obj = arr2ObjectVerifyCheck(i, arr[i], detailPropertyArr, detailProperty, s); + 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 + "details": details, + "projectId": projectId }; } -function prepareAjaxDataVerify(data,detailProperty,projectId){ + +function prepareAjaxDataVerify(data, detailProperty, projectId) { var details = convertDetailVerify(data, detailProperty); return { - "details":details, - "projectId":projectId + "details": details, + "projectId": projectId }; } + /** * 绑定每个可改变的输入框,修改后改变对应输入框的值 */ @@ -237,10 +363,10 @@ function bindChangeableInput() { //找到对应的单价和税率 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); + console.log(amount, price, taxRate); - $(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))); + $(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))); }); //单价改变 $(".input-changeable-price").change(function () { @@ -248,10 +374,10 @@ function bindChangeableInput() { //找到对应的数量和税率 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); + console.log(amount, price, taxRate); - $(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))); + $(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))); }); //税率改变 $(".input-changeable-tax-rate").change(function () { @@ -259,11 +385,12 @@ function bindChangeableInput() { //找到对应的数量和单价 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); + console.log(amount, price, taxRate); - $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount*price/(1+taxRate/100))); + $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(f2Fixed(amount * price / (1 + taxRate / 100))); }); } + /** * 校验项目贡献利润率必须大于阀值 * 低于阀值就返回提示信息,否则返回"" @@ -271,8 +398,8 @@ function bindChangeableInput() { function verifyProjectContributionProfitRate() { var projectContributionProfitRate = f2(inputVal("projectContributionProfitRate")); var projectContributionProfitRateThreshold = f2($("#projectContributionProfitRateThreshold").val()); - if(projectContributionProfitRate<projectContributionProfitRateThreshold){ - return "项目贡献利润率["+projectContributionProfitRate+"]低于阀值["+projectContributionProfitRateThreshold+"],请调整后重新提交"; + if (projectContributionProfitRate < projectContributionProfitRateThreshold) { + return "项目贡献利润率[" + projectContributionProfitRate + "]低于阀值[" + projectContributionProfitRateThreshold + "],请调整后重新提交"; } return ""; @@ -295,9 +422,9 @@ function updateProjectContributionProfitRate() { //公司管理费用 var costCompanyManageTaxExclude = f2(inputVal("costCompanyManageTaxExclude")); - var projectGrossProfit = f2Fixed(incomeTotalTaxExclude-costTotalTaxExclude-costExpropriationTaxExclude); + var projectGrossProfit = f2Fixed(incomeTotalTaxExclude - costTotalTaxExclude - costExpropriationTaxExclude); var projectGrossProfitRate = f2Fixed(rate(projectGrossProfit, incomeTotalTaxExclude)); - var projectContributionProfit = f2Fixed(projectGrossProfit-costCompanyManageTaxExclude); + var projectContributionProfit = f2Fixed(projectGrossProfit - costCompanyManageTaxExclude); var projectContributionProfitRate = f2Fixed(rate(projectContributionProfit, incomeTotalTaxExclude)); $("input[name='projectGrossProfit']").val(projectGrossProfit);