Browse Source

数电发票费用可填写

huangguoce 3 days ago
parent
commit
a3b5249ff6
1 changed files with 89 additions and 40 deletions
  1. 89 40
      src/views/common/reimbursement/ReimbursementComponent.vue

+ 89 - 40
src/views/common/reimbursement/ReimbursementComponent.vue

@@ -100,15 +100,16 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -226,15 +227,15 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
-                                </template>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input> </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -347,15 +348,16 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -454,15 +456,16 @@
                             :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                             <template #edit="scope">
                                 <el-input maxlength="15" v-model="scope.row.number"
-                                    @input="handleNumberInput(scope.row)"></el-input>
+                                    @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                    @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                             </template>
                         </vxe-table-column>
                         <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}" show-overflow="title"
                             :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                             <template #edit="scope">
                                 <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                    @input="handleOrdinaryNumberInput(scope.row)"
-                                    @blur="handleNumberInput(scope.row)"></el-input>
+                                    @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                    @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                             </template>
                         </vxe-table-column>
                         <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -572,19 +575,20 @@
                             </template>
                         </vxe-table-column>
                         <vxe-colgroup title="费用" align="center">
-                            <vxe-table-column field="number" title="数电发票" show-overflow="title"
+                            <vxe-table-column field="number" title="数电发票" show-overflow="title" :edit-render="{}"
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -696,15 +700,16 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -819,15 +824,16 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -925,15 +931,16 @@
                             :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                             <template #edit="scope">
                                 <el-input maxlength="15" v-model="scope.row.number"
-                                    @input="handleNumberInput(scope.row)"></el-input>
+                                    @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                    @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                             </template>
                         </vxe-table-column>
                         <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}" show-overflow="title"
                             :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                             <template #edit="scope">
                                 <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                    @input="handleOrdinaryNumberInput(scope.row)"
-                                    @blur="handleNumberInput(scope.row)"></el-input>
+                                    @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                    @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                             </template>
                         </vxe-table-column>
                         <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -1064,15 +1071,16 @@
                                 :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.number"
-                                        @input="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 1)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 1)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="ordinaryNumber" title="非数电发票" :edit-render="{}"
                                 show-overflow="title" :rules="[{ required: true, message: '请输入费用', trigger: 'blur' }]">
                                 <template #edit="scope">
                                     <el-input maxlength="15" v-model="scope.row.ordinaryNumber"
-                                        @input="handleOrdinaryNumberInput(scope.row)"
-                                        @blur="handleNumberInput(scope.row)"></el-input>
+                                        @input="handleOrdinaryNumberInput(scope.row, 2)"
+                                        @blur="handleOrdinaryNumberInput(scope.row, 2)"></el-input>
                                 </template>
                             </vxe-table-column>
                             <vxe-table-column field="numberCount" title="汇总" show-overflow="title"
@@ -2506,7 +2514,13 @@ export default {
         async uploadFile(row, index) {
             this.handleTableInfo(this.inputForm.sourceType)
             await this.tableRef.clearEdit()
-            this.tableRef.setRowExpand(this.tableData[index], true)
+            let tempIndex = this.tableRef.getRowExpandRecords().findIndex(item => {
+                return row.id == item.id
+            })
+            if (tempIndex == -1) {
+                this.tableRef.setRowExpand(this.tableData[index], true)
+
+            }
             setTimeout(() => {
                 this.$refs[row.uniqueId + "Upload"].$el.querySelector('.upload-btn').click();
 
@@ -2554,7 +2568,7 @@ export default {
             this.tableRef.updateFooter(this.tableData)
             row.receiptNumber = files.length
             this.handleReceiptNumberInput(row)
-            this.handleNumberInput(row)
+            // this.handleNumberInput(row)
         },
         handleCheckAmount() {
             let countFlag = false
@@ -2601,25 +2615,60 @@ export default {
 
             return arr
         },
-        handleOrdinaryNumberInput(row) {
-            let value = row.ordinaryNumber;
+        handleOrdinaryNumberInput(row, index) {
+            console.log(row);
+            console.log(row);
+            console.log(row);
+            console.log(row);
 
-            // 正则:允许整数、带1~2位小数,也允许末尾点
+            let value = 0
+            if (index == 1) {
+                value = row.number
+            } else {
+                value = row.ordinaryNumber
+            }
             const regex = /^(?:[1-9]\d*|0)?(?:\.\d{0,2})?$/;
-
-            // 非法字符直接删除
+            // 如果是非数字,直接删除
             if (!regex.test(value)) {
-                row.ordinaryNumber = value.slice(0, -1);
+                if (index == 1) {
+                    row.number = value.slice(0, -1);
+                } else {
+                    row.ordinaryNumber = value.slice(0, -1);
+                }
+                this.$message.warning('确保输入数字格式且小数点后只能输入两位')
                 return;
             } else {
+                if (index == 1) {
+                    let numberCount = 0
+                    this.inputForm.invoiceReimbursementFiles.forEach(item => {
+                        if (item.remarks == row.uniqueId) {
+                            numberCount += parseFloat(item.count || 0)
+                        }
+                    })
+                    if (numberCount > 0 && row.number > numberCount) {
+                        row.number = value.slice(0, -1);
+                        this.$message.warning('输入结果不可大于发票费用总和')
+                        return
+                    }
+                }
+
                 row.numberCount = parseFloat(Number(row.number || 0) + Number(row.ordinaryNumber || 0)).toFixed(2)
                 this.handleTableInfo(this.inputForm.sourceType)
                 this.tableRef.updateFooter(this.tableData)
             }
         },
-        handleNumberInput(row) {
-            if (this.commonJS.isNotEmpty(row.number)) {
-                row.number = this.twoDecimalPlaces(row.number)
+        handleNumberInput(row, index) {
+            let value = 0
+            if (index == 1) {
+                value = row.number
+            } else {
+                value = row.ordinaryNumber
+            }
+            const regex = /^(?:[1-9]\d*|0)?(?:\.\d{0,2})?$/;
+            // 如果是非数字,直接删除
+            if (!regex.test(value)) {
+                row.ordinaryNumber = value.slice(0, -1);
+                return;
             }
             row.numberCount = parseFloat(Number(row.number || 0) + Number(row.ordinaryNumber || 0)).toFixed(2)
             this.handleTableInfo(this.inputForm.sourceType)