From e19469796447e44904f28dce9ea742b8d73d8c43 Mon Sep 17 00:00:00 2001
From: xxssyyyyssxx <xxssyyyyssxx@126.com>
Date: Wed, 3 Nov 2021 13:18:31 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=B6=E5=85=A5=E6=98=8E=E7=BB=86=E4=BF=9D?=
 =?UTF-8?q?=E5=AD=98=E5=AE=8C=E6=88=90=EF=BC=8C=E4=B8=8B=E4=B8=80=E6=AD=A5?=
 =?UTF-8?q?=E5=9B=9E=E6=98=BE=E5=88=B0=E9=A1=B5=E9=9D=A2=E4=B8=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../static/assets/js/project_budget.js        | 65 ++++++++++++++++++-
 .../templates/admin/project_budget_edit.ftl   | 54 +++++++++++----
 2 files changed, 106 insertions(+), 13 deletions(-)

diff --git a/src/main/resources/static/assets/js/project_budget.js b/src/main/resources/static/assets/js/project_budget.js
index 1c91c96..41675e0 100644
--- a/src/main/resources/static/assets/js/project_budget.js
+++ b/src/main/resources/static/assets/js/project_budget.js
@@ -36,10 +36,25 @@ function arr2Object(arr, mapArr) {
 INCOME_DETAIL_ARR=["type","name","unit","amount","price","taxRate"];
 INCOME_DETAIL_PROP_LENGTH=8;
 
+/**
+ * 收集收入明细的数据,因为动态添加的行modal无法识别,所以自己来收集
+ * @returns {Array}
+ */
+function collectIncomeData(className) {
+    var a= [];
+    $("." + className).each(function (t) {
+        a.push($(this).val());
+    });
+    return a;
+}
+
+/**
+ * 保存收入明细数据
+ */
 function saveIncome(url, data, projectId) {
     if(Array.isArray(data) && data.length != 0){
+        console.log(data);
         var arr = arrayToMatrix(data,INCOME_DETAIL_PROP_LENGTH);
-        console.log(arr);
         var incomeDetails = [];
         for (var i=0;i<arr.length;i++){
             incomeDetails.push(arr2Object(arr[i], INCOME_DETAIL_ARR));
@@ -62,4 +77,52 @@ function saveIncome(url, data, projectId) {
             }
         });
     }
+}
+
+/**
+ * 绑定每一行的删除事件,删除当前的一行tr
+ */
+function bindDeleteBtn() {
+    $(".am-modal-line-delete").click(function () {
+        //删除自己对应的tr
+        $(this).parent().parent().remove();
+    });
+}
+
+/**
+ * 绑定每个可改变的输入框,修改后改变对应输入框的值
+ */
+function bindIncomeChangeableInput() {
+    //数量改变
+    $(".input-changeable-amount").change(function () {
+        var amount = parseFloat($(this).val());
+        //找到对应的单价和税率
+        var price = parseFloat($(this).parent().parent().find(".input-changeable-price").val());
+        var taxRate = parseFloat($(this).parent().parent().find(".input-changeable-tax-rate").val());
+        console.log(amount,price,taxRate);
+
+        $(this).parent().parent().find(".input-changeable-total-tax-include").val(amount*price);
+        $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(amount*price/(1+taxRate/100));
+    });
+    //单价改变
+    $(".input-changeable-price").change(function () {
+        var price = parseFloat($(this).val());
+        //找到对应的数量和税率
+        var amount = parseFloat($(this).parent().parent().find(".input-changeable-amount").val());
+        var taxRate = parseFloat($(this).parent().parent().find(".input-changeable-tax-rate").val());
+        console.log(amount,price,taxRate);
+
+        $(this).parent().parent().find(".input-changeable-total-tax-include").val(amount*price);
+        $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(amount*price/(1+taxRate/100));
+    });
+    //税率改变
+    $(".input-changeable-tax-rate").change(function () {
+        var taxRate = parseFloat($(this).val());
+        //找到对应的数量和单价
+        var amount = parseFloat($(this).parent().parent().find(".input-changeable-amount").val());
+        var price = parseFloat($(this).parent().parent().find(".input-changeable-price").val());
+        console.log(amount,price,taxRate);
+
+        $(this).parent().parent().find(".input-changeable-total-tax-exclude").val(amount*price/(1+taxRate/100));
+    });
 }
\ No newline at end of file
diff --git a/src/main/resources/templates/admin/project_budget_edit.ftl b/src/main/resources/templates/admin/project_budget_edit.ftl
index 1d3b2c3..0c6780a 100644
--- a/src/main/resources/templates/admin/project_budget_edit.ftl
+++ b/src/main/resources/templates/admin/project_budget_edit.ftl
@@ -406,13 +406,13 @@
     </div>
 
 
-    <div class="am-modal am-modal-prompt" style="width: 1000px;max-height:600px;overflow-y:auto;" tabindex="-1" id="my-prompt-income-detail">
+    <div class="am-modal am-modal-prompt" style="width: 1200px;max-height:600px;overflow-y:auto;" tabindex="-1" id="my-prompt-income-detail">
         <div class="am-modal-dialog">
             <div class="am-modal-hd">新增销售收入明细表——${project.name}</div>
             <div class="am-modal-bd">
-                <table class="am-table am-table-bordered am-table-radius table-main" style="padding:0;">
+                <table class="am-table am-table-bordered am-table-radius table-main" style="padding:0;" id="incomeTable">
                     <tbody>
-                    <tr class="am-text-xl">
+                    <tr>
                         <td>类别</td>
                         <td>名称</td>
                         <td>单位</td>
@@ -421,25 +421,27 @@
                         <td>税率(%)</td>
                         <td>含税总金额(元)</td>
                         <td>不含税金额(元)</td>
+                        <td>操作</td>
                     </tr>
 
                     <#if incomeDetails??>
                         <#list incomeDetails as incomeDetail>
                         <tr>
                             <td>
-                                <select data-am-selected class="am-modal-prompt-input">
+                                <select style="width: auto" class="am-modal-prompt-input am-modal-prompt-input-income">
                                     <option value="1" <#if incomeDetail.type == 1>selected</#if>>设备类</option>
                                     <option value="2" <#if incomeDetail.type == 2>selected</#if>>工程类</option>
                                     <option value="3" <#if incomeDetail.type == 3>selected</#if>>服务类</option>
                                 </select>
                             </td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.name!}"></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.unit!}"></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.amount!}"></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.price!}"></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.taxRate!}"></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.totalTaxInclude!}" readonly></td>
-                            <td><input type="text" class="am-modal-prompt-input" value="${incomeDetail.totalTaxExclude!}" readonly></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income" value="${incomeDetail.name!}"></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income" value="${incomeDetail.unit!}"></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-amount" value="${incomeDetail.amount!}"></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-price" value="${incomeDetail.price!}"></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-tax-rate" value="${incomeDetail.taxRate!}"></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-include" value="${incomeDetail.totalTaxInclude!}" readonly></td>
+                            <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude" value="${incomeDetail.totalTaxExclude!}" readonly></td>
+                            <td><button type="button" class="am-btn am-btn-warning am-btn-xs am-modal-line-delete">删除</button></td>
                         </tr>
                         </#list>
                     </#if>
@@ -463,6 +465,7 @@
                     </tr>-->
                     </tbody>
                 </table>
+                <button type="button" id="incomeAddBtn" class="am-btn am-btn-primary am-btn-xs">添加一行</button>
             </div>
             <div class="am-modal-footer">
                 <span class="am-modal-btn" data-am-modal-cancel>取消</span>
@@ -500,12 +503,39 @@
             $('#my-prompt-income-detail').modal({
                 relatedTarget: this,
                 onConfirm: function(e) {
-                    saveIncome("${base}/project/budgetEditSaveIncomeDetail", e.data, $("#id").val());
+                    //不能使用e.data,因为无法获取动态添加的
+                    var data = collectIncomeData("am-modal-prompt-input-income");
+                    saveIncome("${base}/project/budgetEditSaveIncomeDetail", data, $("#id").val());
                 },
                 onCancel: function(e) {
                 }
             });
         });
+        $("#incomeAddBtn").click(function () {
+            var template = '<tr>\n' +
+                    '                        <td>\n' +
+                    '                            <select style="width: auto" class="am-modal-prompt-input am-modal-prompt-input-income">\n' +
+                    '                                <option value="1">设备类</option>\n' +
+                    '                                <option value="2">工程类</option>\n' +
+                    '                                <option value="3">服务类</option>\n' +
+                    '                            </select>\n' +
+                    '                        </td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income"></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income"></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-amount"></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-price"></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-tax-rate"></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-include" readonly></td>\n' +
+                    '                        <td><input type="text" class="am-modal-prompt-input am-modal-prompt-input-income input-changeable-total-tax-exclude" readonly></td>\n' +
+                    '                        <td><button type="button" class="am-btn am-btn-warning am-btn-xs am-modal-line-delete">删除</button></td>\n' +
+                    '                    </tr>';
+            $("#incomeTable").append(template);
+            bindDeleteBtn();
+            bindIncomeChangeableInput();
+        });
+
+        bindDeleteBtn();
+        bindIncomeChangeableInput();
     });
 </script>
 </@defaultLayout.layout>