Bläddra i källkod

景聚庭-页面库存展示调整,限制小数输入

huangguoce 11 timmar sedan
förälder
incheckning
2169e4c2f8

+ 49 - 24
src/views/psiManagement/collect/CollectForm.vue

@@ -116,7 +116,7 @@
 							<template #default="scope">
 								<span
 									v-if="scope.row.surplusNumber !== undefined && scope.row.surplusNumber !== null && scope.row.spec !== undefined && scope.row.spec !== null">
-									{{ parseInt(scope.row.spec) * parseFloat(scope.row.surplusNumber) }}
+									{{ scope.row.surplusNumber }}
 								</span>
 								<span v-else>
 									{{ scope.row.surplusNumber }}
@@ -129,6 +129,7 @@
 								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>-->
 								<!--              <el-input @change="changeValue" v-model="scope.row.tradeNumber" @blur="scope.row.tradeNumber = twoDecimalPlaces2(scope.row.tradeNumber)" maxlength="10"></el-input>-->
 								<el-input v-model="scope.row.collectNumber"
+									@input="scope.row.collectNumber = twoDecimalPlaces2($event)"
 									@blur="scope.row.collectNumber = twoDecimalPlaces2(scope.row.collectNumber)"
 									maxlength="10"></el-input>
 							</template>
@@ -228,7 +229,7 @@
 								<template #default="scope">
 									<span
 										v-if="scope.row.surplusNumber !== undefined && scope.row.surplusNumber !== null && scope.row.spec !== undefined && scope.row.spec !== null">
-										{{ parseInt(scope.row.spec) * parseFloat(scope.row.surplusNumber) }}
+										{{ scope.row.surplusNumber }}
 									</span>
 									<span v-else>
 										{{ scope.row.surplusNumber }}
@@ -689,6 +690,11 @@ export default {
 								this.loading = false
 								return
 							}
+							if (!/^[1-9]\d*(?:\.0+)?$/.test(String(this.inputForm.detailInfos[j].collectNumber))) {
+								this.$message.error('领用详情第' + k + '行领用数量请输入正整数')
+								this.loading = false
+								return
+							}
 
 							if (parseFloat(this.inputForm.detailInfos[j].collectNumber) > parseFloat(this.inputForm.detailInfos[j].surplusNumber)) {
 								this.$message.error('领用详情第' + k + '行领用数量不能大于库存数量')
@@ -728,6 +734,33 @@ export default {
 					if (this.commonJS.isEmpty(this.inputForm.files)) {
 						this.inputForm.files = []
 					}
+
+					let i = this.inputForm.detailInfos.length
+					for (let j = 0; j < i; j++) {
+						let k = j + 1
+						if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].collectType)) {
+							this.$message.error('领用详情第' + k + '行请选择商品')
+							this.loading = false
+							return
+						}
+						if (this.commonJS.isEmpty(this.inputForm.detailInfos[j].collectNumber)) {
+							this.$message.error('领用详情第' + k + '行请输入领用数量')
+							this.loading = false
+							return
+						}
+						if (!/^[1-9]\d*(?:\.0+)?$/.test(String(this.inputForm.detailInfos[j].collectNumber))) {
+							this.$message.error('领用详情第' + k + '行领用数量请输入正整数')
+							this.loading = false
+							return
+						}
+
+						if (parseFloat(this.inputForm.detailInfos[j].collectNumber) > parseFloat(this.inputForm.detailInfos[j].surplusNumber)) {
+							this.$message.error('领用详情第' + k + '行领用数量不能大于库存数量')
+							this.loading = false
+							return
+						}
+
+					}
 					this.inputForm.files = this.$refs.uploadComponent.getDataList()
 					this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data) => {
 						if (this.commonJS.isNotEmpty(data)) {
@@ -846,31 +879,23 @@ export default {
 		//   this.inputForm.detailInfos[index].priceSum = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 		// },
 		twoDecimalPlaces2(num) {
-			let str = num.toString()
-			var len1 = str.substr(0, 1)
-			var len2 = str.substr(1, 1)
-			// eslint-disable-next-line eqeqeq
-			if (str.length > 1 && len1 == 0 && len2 != '.') {
-				str = str.substr(1, 1)
+			if (this.commonJS.isEmpty(num)) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (len1 == '.') {
-				str = ''
+			let str = String(num).replace(/[^\d.]/g, '')
+			if (str.endsWith('.')) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (str.indexOf('.') != -1) {
-				var str_ = str.substr(str.indexOf('.') + 1)
-				// eslint-disable-next-line eqeqeq
-				if (str_.indexOf('.') != -1) {
-					str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
-				}
-				if (str_.length > 2) {
-					this.$message.warning(`领用数量小数点后只能输入两位,请正确输入!`)
-					return (str = '')
-				}
+			const dotIndex = str.indexOf('.')
+			if (dotIndex !== -1) {
+				const integerPart = str.substring(0, dotIndex)
+				const decimalPart = str.substring(dotIndex + 1).replace(/\./g, '').replace(/[1-9]/g, '')
+				str = integerPart + '.' + decimalPart
+			}
+			str = str.replace(/^0+(\d)/, '$1')
+			if (str === '.') {
+				return ''
 			}
-			// eslint-disable-next-line no-useless-escape
-			str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 			return str
 		},
 		countAmount(row) {

+ 22 - 27
src/views/psiManagement/collect/CollectReturnForm.vue

@@ -89,7 +89,8 @@
 								<span v-if="status == 'taskFormDetail' && inputForm.statusReturn == '5'">{{
 									scope.row.returnedNum }}</span>
 								<el-input v-else :disabled="scope.row.returnedNum == scope.row.collectNumber"
-									v-model="scope.row.surplusStock" @input="handleSurplusStockChange(scope.row)"
+									v-model="scope.row.surplusStock"
+									@input="scope.row.surplusStock = twoDecimalPlaces2($event); handleSurplusStockChange(scope.row)"
 									@blur="scope.row.surplusStock = twoDecimalPlaces2(scope.row.surplusStock)"
 									maxlength="10"></el-input>
 							</template>
@@ -703,51 +704,45 @@ export default {
 		//   this.inputForm.detailInfos[index].priceSum = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 		// },
 		twoDecimalPlaces2(num) {
-			let str = num.toString()
-			var len1 = str.substr(0, 1)
-			var len2 = str.substr(1, 1)
-			// eslint-disable-next-line eqeqeq
-			if (str.length > 1 && len1 == 0 && len2 != '.') {
-				str = str.substr(1, 1)
+			if (this.commonJS.isEmpty(num)) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (len1 == '.') {
-				str = ''
+			let str = String(num).replace(/[^\d.]/g, '')
+			if (str.endsWith('.')) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (str.indexOf('.') != -1) {
-				var str_ = str.substr(str.indexOf('.') + 1)
-				// eslint-disable-next-line eqeqeq
-				if (str_.indexOf('.') != -1) {
-					str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
-				}
-				if (str_.length > 2) {
-					this.$message.warning(`领用数量小数点后只能输入两位,请正确输入!`)
-					return (str = '')
-				}
+			const dotIndex = str.indexOf('.')
+			if (dotIndex !== -1) {
+				const integerPart = str.substring(0, dotIndex)
+				const decimalPart = str.substring(dotIndex + 1).replace(/\./g, '').replace(/[1-9]/g, '')
+				str = integerPart + '.' + decimalPart
 			}
-			// eslint-disable-next-line no-useless-escape
-			str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
-			return str
+			str = str.replace(/^0+(\d)/, '$1')
+			return str === '.' ? '' : str
 		},
 		// 自动计算:surplusStock = collectNumber - 输入的数字
 		handleSurplusStockChange(row) {
+			if (!/^[1-9]\d*(?:\.0+)?$/.test(String(row.surplusStock || ''))) {
+				this.$message.error('退回数量请输入大于0的整数')
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
+				return
+			}
 			//完善判断。如果退回数量超过领用数量,弹出提示并清空输入框
 			if (parseInt(row.surplusStock) < 0) {
 				this.$message.error('退回数量不能小于0')
-				row.surplusStock = row.surplusStockBak || '0'
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
 				return
 			}
 			//完善判断。如果退回数量超过领用数量,弹出提示并清空输入框
 			if (parseInt(row.surplusStock) > parseInt(row.notSurplusStockBak)) {
 				this.$message.error('退回数量不能大于未退回数量')
-				row.surplusStock = row.surplusStockBak || '0'
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
 				return
 			}
 			//如果输入的退回数量不是数字,弹出提示并清空输入框
 			if (isNaN(parseInt(row.surplusStock))) {
 				this.$message.error('请输入有效的退回数量')
-				row.surplusStock = row.surplusStockBak || '0'
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
 				return
 			}
 

+ 31 - 24
src/views/psiManagement/collect/CollectReturnHiForm.vue

@@ -75,7 +75,8 @@
 									<span v-if="status == 'taskFormDetail' && inputForm.statusReturn == '5'">{{
 										scope.row.returnedNum }}</span>
 									<el-input v-else :disabled="scope.row.returnedNum == scope.row.collectNumber"
-										v-model="scope.row.surplusStock" @input="handleSurplusStockChange(scope.row)"
+										v-model="scope.row.surplusStock"
+										@input="scope.row.surplusStock = twoDecimalPlaces2($event); handleSurplusStockChange(scope.row)"
 										@blur="scope.row.surplusStock = twoDecimalPlaces2(scope.row.surplusStock)"
 										maxlength="10"></el-input>
 								</template>
@@ -692,32 +693,38 @@ export default {
 		//   this.inputForm.detailInfos[index].priceSum = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 		// },
 		twoDecimalPlaces2(num) {
-			let str = num.toString()
-			var len1 = str.substr(0, 1)
-			var len2 = str.substr(1, 1)
-			// eslint-disable-next-line eqeqeq
-			if (str.length > 1 && len1 == 0 && len2 != '.') {
-				str = str.substr(1, 1)
+			if (this.commonJS.isEmpty(num)) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (len1 == '.') {
-				str = ''
+			let str = String(num).replace(/[^\d.]/g, '')
+			if (str.endsWith('.')) {
+				return ''
 			}
-			// eslint-disable-next-line eqeqeq
-			if (str.indexOf('.') != -1) {
-				var str_ = str.substr(str.indexOf('.') + 1)
-				// eslint-disable-next-line eqeqeq
-				if (str_.indexOf('.') != -1) {
-					str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
-				}
-				if (str_.length > 2) {
-					this.$message.warning(`领用数量小数点后只能输入两位,请正确输入!`)
-					return (str = '')
-				}
+			const dotIndex = str.indexOf('.')
+			if (dotIndex !== -1) {
+				const integerPart = str.substring(0, dotIndex)
+				const decimalPart = str.substring(dotIndex + 1).replace(/\./g, '').replace(/[1-9]/g, '')
+				str = integerPart + '.' + decimalPart
+			}
+			str = str.replace(/^0+(\d)/, '$1')
+			return str === '.' ? '' : str
+		},
+		handleSurplusStockChange(row) {
+			if (!/^[1-9]\d*(?:\.0+)?$/.test(String(row.surplusStock || ''))) {
+				this.$message.error('退回数量请输入大于0的整数')
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
+				return
+			}
+			if (parseInt(row.surplusStock) > parseInt(row.notSurplusStockBak)) {
+				this.$message.error('退回数量不能大于未退回数量')
+				row.surplusStock = row.surplusStockBak && Number(row.surplusStockBak) > 0 ? row.surplusStockBak : ''
+				return
+			}
+			if ((parseInt(row.surplusStock) + parseInt(row.returnedNum || 0)) == parseInt(row.collectNumber)) {
+				row.isReturn = '1'
+			} else {
+				row.isReturn = '2'
 			}
-			// eslint-disable-next-line no-useless-escape
-			str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
-			return str
 		},
 		countAmount(row) {
 			let amount

+ 16 - 18
src/views/psiManagement/loss/LossForm.vue

@@ -105,6 +105,7 @@
 							<template #edit="scope">
 								<el-input v-model="scope.row.lossNumber" maxlength="10"
 									:disabled="formReadOnly || method === 'view'"
+									@input="scope.row.lossNumber = normalizeNumber($event)"
 									@blur="handleLossNumberBlur(scope.row)" />
 							</template>
 						</vxe-table-column>
@@ -597,26 +598,18 @@ export default {
 			if (this.commonJS.isEmpty(num)) {
 				return "";
 			}
-			let str = num.toString();
-			const len1 = str.substr(0, 1);
-			const len2 = str.substr(1, 1);
-			if (str.length > 1 && len1 === "0" && len2 !== ".") {
-				str = str.substr(1, 1);
-			}
-			if (len1 === ".") {
-				str = "";
+			let str = String(num).replace(/[^\d.]/g, "");
+			if (str.endsWith(".")) {
+				return "";
 			}
-			if (str.indexOf(".") !== -1) {
-				const str2 = str.substr(str.indexOf(".") + 1);
-				if (str2.indexOf(".") !== -1) {
-					str = str.substr(0, str.indexOf(".") + str2.indexOf(".") + 1);
-				}
-				if (str2.length > 2) {
-					this.$message.warning("数量小数点后只能输入两位");
-					return "";
-				}
+			const dotIndex = str.indexOf(".");
+			if (dotIndex !== -1) {
+				const integerPart = str.substring(0, dotIndex);
+				const decimalPart = str.substring(dotIndex + 1).replace(/\./g, "").replace(/[1-9]/g, "");
+				str = integerPart + "." + decimalPart;
 			}
-			return str.replace(/[^\d^.]+/g, "");
+			str = str.replace(/^0+(\d)/, "$1");
+			return str === "." ? "" : str;
 		},
 		formatNumber(value) {
 			const num = Number(value || 0);
@@ -667,6 +660,11 @@ export default {
 							resolve(false);
 							return;
 						}
+						if (!/^[1-9]\d*(?:\.0+)?$/.test(String(detail.lossNumber))) {
+							this.$message.error(`报损明细第${lineNo}行报损数量请输入正整数`);
+							resolve(false);
+							return;
+						}
 						if (this.commonJS.isEmpty(detail.lossReason)) {
 							this.$message.error(`报损明细第${lineNo}行请输入报损原因`);
 							resolve(false);

+ 22 - 1
src/views/psiManagement/wareHouse/WareHouseAddForm.vue

@@ -172,7 +172,8 @@
 								:edit-render="{}">
 								<template v-slot:edit="scope">
 									<el-input @change="changeValue2" v-model="scope.row.tradeNumber"
-										@blur="scope.row.tradeNumber = twoDecimalPlaces2(scope.row.tradeNumber)"
+										@input="scope.row.tradeNumber = formatPositiveInteger($event)"
+										@blur="scope.row.tradeNumber = formatPositiveInteger(scope.row.tradeNumber)"
 										maxlength="10"></el-input>
 								</template>
 							</vxe-table-column>
@@ -654,6 +655,20 @@ export default {
 			str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
 			return str
 		},
+		formatPositiveInteger(value) {
+			if (value === null || value === undefined || value === '') {
+				return ''
+			}
+			let text = String(value).replace(/[^\d.]/g, '')
+			const dotIndex = text.indexOf('.')
+			if (dotIndex !== -1) {
+				const integerPart = text.substring(0, dotIndex)
+				const decimalPart = text.substring(dotIndex + 1).replace(/\./g, '').replace(/[1-9]/g, '')
+				text = integerPart + '.' + decimalPart
+			}
+			text = text.replace(/^0+(\d)/, '$1')
+			return text === '.' ? '' : text
+		},
 		// 采购人下拉弹窗
 		userPullListForm(rowIndex) {
 			this.indexRow = rowIndex
@@ -769,6 +784,12 @@ export default {
 					this.inputForm.functionFlag = ''
 					return
 				}
+				if (!/^[1-9]\d*(?:\.0+)?$/.test(String(this.inputForm.wareHouse[j].tradeNumber))) {
+					this.$message.error('入库详情第' + k + '行入库数量请输入正整数')
+					this.loading = false
+					this.inputForm.functionFlag = ''
+					return
+				}
 				// if (this.commonJS.isEmpty(this.inputForm.wareHouse[j].specification)) {
 				// 	this.$message.error('入库详情第' + k + '行请填写规格')
 				// 	this.loading = false

+ 16 - 3
src/views/psiManagement/wareHouse/WareHouseUpdateForm.vue

@@ -752,6 +752,12 @@ export default {
 							this.inputForm.functionFlag = ''
 							return
 						}
+						if (!/^[1-9]\d*(?:\.0+)?$/.test(String(this.inputForm.wareHouse[j].tradeNumber))) {
+							this.$message.error('入库详情第' + k + '行商品数量请输入正整数')
+							this.loading = false
+							this.inputForm.functionFlag = ''
+							return
+						}
 
 					}
 					for (let j = 0; j < i; j++) {
@@ -891,11 +897,18 @@ export default {
 			if (value === null || value === undefined || value === '') {
 				return ''
 			}
-			const text = String(value).replace(/[^\d]/g, '')
-			if (text === '') {
+			let newText = String(value).replace(/[^\d.]/g, '')
+			const dotIndex = newText.indexOf('.')
+			if (dotIndex !== -1) {
+				const integerPart = newText.substring(0, dotIndex)
+				const decimalPart = newText.substring(dotIndex + 1).replace(/\./g, '').replace(/[1-9]/g, '')
+				newText = integerPart + '.' + decimalPart
+			}
+			newText = newText.replace(/^0+(\d)/, '$1')
+			if (newText === '.' || newText === '') {
 				return ''
 			}
-			return String(Number(text))
+			return newText
 		},
 		countAmount(row) {
 			let amount