Browse Source

数电发票报销调整

sangwenwei 6 months ago
parent
commit
1ab08fa55d
1 changed files with 118 additions and 34 deletions
  1. 118 34
      src/views/common/DigitalInvoiceUploadComponent.vue

+ 118 - 34
src/views/common/DigitalInvoiceUploadComponent.vue

@@ -28,9 +28,11 @@
         ref="uploadTable"
         v-loading="loading"
         :key="tableKey"
+		:summary-method="getSummaries"
+		show-summary
         :data="dataListNew">
-        <el-table-column type="seq" width="40"></el-table-column>
-        <el-table-column label="文件名称" prop="name" align="center">
+<!--        <el-table-column type="seq" width="40"></el-table-column>-->
+        <el-table-column label="文件名称" prop="name" align="center" width="290">
           <template #default="scope">
             <div v-if="ifName(scope.row) === true">
               <el-image
@@ -46,7 +48,7 @@
           </template>
         </el-table-column>
         <el-table-column label="创建人" prop="createBy.name" align="center"></el-table-column>
-        <el-table-column label="创建时间" prop="createTime" align="center"></el-table-column>
+        <el-table-column label="创建时间" prop="createTime" align="center" width="110"></el-table-column>
         <el-table-column label="文件大小" prop="size" align="center">
           <template #default="scope">
             {{getSize(scope.row.size)}}
@@ -63,42 +65,42 @@
 				  }}
 			  </template>
 		  </el-table-column>
-		  <el-table-column  prop="invoiceProjectName" label="发票项目名" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="invoiceProjectName" label="发票项目名" align="center" width="150" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input maxlength="50" readonly="true" v-model="scope.row.invoiceProjectName" ></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="number" label="发票号" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="number" label="发票号" align="center" width="150" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input oninput ="value=value.replace(/\D|^/g,'')" readonly="true" maxlength="30" @change="isExict(scope.row)"  v-model="scope.row.number" ></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="invoiceDate" label="开票日期" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="invoiceDate" label="开票日期" align="center" width="110" :edit-render="{}" show-overflow="title">
 			  <template v-slot:edit="scope">
 				  <el-input v-model="scope.row.invoiceDate" readonly="true" type="date" transfer placeholder="请选择日期"></el-input>
 			  </template>
 		  </el-table-column  >
-		  <el-table-column  prop="invoiceUnit" label="开票单位" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="invoiceUnit" label="开票单位" align="center" width="200" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input maxlength="50" readonly="true" v-model="scope.row.invoiceUnit" ></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="buyerName" label="购买方名称" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="buyerName" label="购买方名称" align="center" width="200" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input maxlength="50" readonly="true" v-model="scope.row.buyerName" ></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="amount" label="金额" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="amount" label="金额" align="center" width="90" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input maxlength="15" readonly="true" v-model="scope.row.amount" @input="scope.row.amount = twoDecimalPlaces(scope.row.amount)" @change="countAmount(scope.row)"></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="taxAmount" label="税额" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="taxAmount" label="税额" align="center" width="90" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input maxlength="15" readonly="true" v-model="scope.row.taxAmount" @input="scope.row.taxAmount = twoDecimalPlaces(scope.row.taxAmount)" @change="countAmount(scope.row)"></el-input>
 			  </template>
 		  </el-table-column >
-		  <el-table-column  prop="count" label="价税合计" align="center" :edit-render="{}" show-overflow="title">
+		  <el-table-column  prop="count" label="价税合计" align="center" width="90" :edit-render="{}" show-overflow="title">
 			  <template #edit="scope">
 				  <el-input disabled="true" v-model="scope.row.count" ></el-input>
 			  </template>
@@ -106,7 +108,7 @@
         <el-table-column label="操作" width="200px" fixed="right" align="center">
           <template  #default="scope">
             <el-button text type="primary" key="01" icon="el-icon-download" size="small" @click="toHref(scope.row)" >下载</el-button>
-            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteFileById(scope.row, scope.$index,fileList)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>
+            <el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteFileById(scope.row, scope.$index,this.dataListNew)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -316,6 +318,25 @@
 				if (!isXml) {
 					this.$message.error('只能上传 XML 文件');
 					return false; // 取消上传
+				}else{
+					try {
+						//对上传的xml文件信息进行处理并通过后端接口进行解析返回到父页面进行调整
+						const formBody = new FormData()
+						formBody.append('file', file)
+						await this.ossService.disposeXmlFile(formBody).then((data) => {
+							if(!data && JSON.stringify(data) === "{}"){
+								this.$message.warning('上传的数电发票格式错误');
+								this.loading = false;
+								// 在验证失败时删除已经添加的行
+								const index = this.fileList.findIndex(item => item.name === file.name);
+								if (index !== -1) {
+									this.deleteFileById(this.fileList[index], index, this.fileList);
+								}
+							}
+						})
+					} catch (error) {
+						console.error(error);
+					}
 				}
 				// 其他判定逻辑...
 				return true; // 允许上传
@@ -539,11 +560,12 @@
 								continue;
 							}
 							validCompanyFiles.push(item);  // 符合条件的文件
-						}else {
-							console.log('error',data)
-							errorFiles.push(item.raw.name)
-							continue;
 						}
+						// else {
+						// 	console.log('error',data)
+						// 	errorFiles.push(item.raw.name)
+						// 	continue;
+						// }
 					}
 				}
 			}
@@ -697,9 +719,9 @@
 	  	// this.$refs.upload.handleRemove(this.dataListNew[index])
         await this.dataListNew.splice(index, 1)
 		await this.dataList.splice(index, 1)
-		  if (this.commonJS.isNotEmpty(row.id)) {
-			  this.ossService.deleteMsgById(row.id)
-		  }
+		  // if (this.commonJS.isNotEmpty(row.id)) {
+			//   this.ossService.deleteMsgById(row.id)
+		  // }
 		var newFileList = [];
 		for (var i = 0; i < fileList.length; i++) {
 		  if (fileList[i].name !== row.name) {
@@ -708,20 +730,22 @@
 		}
 		  this.fileList = newFileList;
       },
-		async deleteFileById (row, index,fileList) {
+		 deleteFileById (row, index,fileList) {
 			// this.$refs.upload.handleRemove(this.dataListNew[index])
-			await this.dataListNew.splice(index, 1)
-			await this.dataList.splice(index, 1)
+			 this.dataListNew.splice(index, 1)
+
+			 this.dataList = this.dataListNew
 			// if (this.commonJS.isNotEmpty(row.id)) {
 			// 	this.ossService.deleteMsgById(row.id)
 			// }
-			var newFileList = [];
-			for (var i = 0; i < fileList.length; i++) {
-				if (fileList[i].name !== row.name) {
-					newFileList.push(fileList[i])
-				}
-			}
-			this.fileList = newFileList;
+			// var newFileList = [];
+			// for (var i = 0; i < this.dataListNew.length; i++) {
+			// 	if (this.dataListNew[i].name !== row.name) {
+			// 		newFileList.push(this.dataListNew[i])
+			// 	}
+			// }
+
+			 // this.fileList = newFileList;
 			// 更新表格数据
 			this.$nextTick(() => {
 				this.$forceUpdate(); // 强制更新表格
@@ -783,13 +807,73 @@
         } else {
           this.loading = false
         }
-      }
+      },
+		getSummaries(param) {
+			const { columns, data } = param;
+
+			// 初始化汇总数组
+			const sums = [];
+
+			// 遍历列
+			columns.forEach((column, index) => {
+				if (index === 0) {
+					// 第一列(通常是序号列),我们不需要进行汇总,直接设置为“汇总”
+					sums[index] = '汇总';
+				}
+				if (column.property === 'amount'){
+					// 如果当前列是 'amount',进行汇总
+					const values = data.map((item) => Number(item[column.property]));
+					sums[index] = this.formatNumber(values.reduce((prev, curr) => {
+						return prev + curr;  // 汇总价税合计列
+					}, 0));
+				}
+				if (column.property === 'taxAmount'){
+					// 如果当前列是 'amount',进行汇总
+					const values = data.map((item) => Number(item[column.property]));
+					sums[index] = this.formatNumber(values.reduce((prev, curr) => {
+						return prev + curr;  // 汇总价税合计列
+					}, 0));
+				}
+				if (column.property === 'count'){
+					// 如果当前列是 'amount',进行汇总
+					const values = data.map((item) => Number(item[column.property]));
+					sums[index] = this.formatNumber(values.reduce((prev, curr) => {
+						return prev + curr;  // 汇总价税合计列
+					}, 0));
+				}
+			});
+
+			return sums;
+		},
+
+		formatNumber(number) {
+			return number.toFixed(2);  // 保留两位小数,返回字符串
+		},
     }
   }
 </script>
+<style scoped lang="scss">
+	::v-deep .el-table{
+		.el-table__footer-wrapper tbody td.el-table__cell, .el-table__header-wrapper tbody td.el-table__cell{
+			background-color: #fff;  /* 设置背景颜色与表格一致 */
+
+		}
+		/* 设置汇总行的背景颜色与表格一致 */
+		.el-table__footer {
+			background-color: #fff;  /* 设置背景颜色与表格一致 */
+
+		}
+		/* 让第一列的汇总居中 */
+		.el-table__footer .el-table__cell:nth-child(1) {
+			text-align: center;  /* 让第一列居中 */
+			font-weight: bold;   /* 可以根据需要加粗 */
+		}
+	}
+	.el-divider__text {
+		font-size: 16px;
+		font-weight: bold;
+	}
+</style>
 <style>
-  .el-divider__text {
-    font-size: 16px;
-    font-weight: bold;
-  }
+
 </style>