فهرست منبع

pms 数量格式校验

zhangcl 2 ماه پیش
والد
کامیت
70e15495df

+ 17 - 3
src/views/pms/iotlockstock/IotAddToStock.vue

@@ -255,9 +255,15 @@ const submitForm = async () => {
 
 /** 已经选择了 SAP工厂 */
 const selectedFactoryChange = async (selectedId: number | undefined) => {
+  if (!selectedId) {
+    costCenterList.value = []
+    formData.value.costCenterId = undefined
+    return
+  }
 
   // 获取选中的factoryCode数组
   const selectedFactory = factoryList.value.find(item => item.id === selectedId)
+  if (!selectedFactory) return
   const selectedFactoryCodes = selectedFactory ? [selectedFactory.factoryCode] : []
 
   // 获得已经选择的 SAP 工厂 数组
@@ -265,6 +271,8 @@ const selectedFactoryChange = async (selectedId: number | undefined) => {
   selectedFactoryReqVO.value.type = 2
   selectedFactoryReqVO.value.factoryCodes = selectedFactoryCodes
   costCenterList.value = await SapOrgApi.getSelectedList(selectedFactoryReqVO.value)
+  // 重置成本中心选择
+  formData.value.costCenterId = undefined
 }
 
 /** 重置表单 */
@@ -278,13 +286,19 @@ onMounted(async () => {
   // 加载工厂(SAP) 全集
   factoryList.value = await SapOrgApi.getSimpleSapOrgList(1)
   // 成本中心 全集
-  costCenterList.value = await SapOrgApi.getSimpleSapOrgList(2)
-  if (dept.value.factoryIds[0] !== undefined) {
+  // costCenterList.value = await SapOrgApi.getSimpleSapOrgList(2)
+  if (dept.value.factoryIds?.[0]) {
     formData.value.factoryId = dept.value.factoryIds[0]
     await selectedFactoryChange(formData.value.factoryId)
   }
-  if (dept.value.costCenterIds[0] !== undefined) {
+  if (dept.value.costCenterIds?.[0]) {
+    /* const validCostCenter = costCenterList.value.some(
+      item => item.id === dept.value.costCenterIds[0]
+    )
+    console.log('随机显示一个成本中心:' + dept.value.costCenterIds[0]) */
+    // if (validCostCenter) {
     formData.value.costCenterId = dept.value.costCenterIds[0]
+    // }
   }
 })
 

+ 56 - 2
src/views/pms/iotlockstock/SelectMaterial.vue

@@ -17,7 +17,7 @@
               :placeholder="t('chooseMaintain.materialName')"
               clearable
               @keyup.enter="handleQuery"
-              class="!w-240px"
+              class="!w-200px"
             />
           </el-form-item>
           <el-form-item :label="t('chooseMaintain.materialCode')" prop="code">
@@ -26,7 +26,7 @@
               :placeholder="t('chooseMaintain.materialCode')"
               clearable
               @keyup.enter="handleQuery"
-              class="!w-240px"
+              class="!w-200px"
             />
           </el-form-item>
           <el-form-item>
@@ -71,18 +71,24 @@
           <el-table-column :label="t('workOrderMaterial.unitPrice')" align="center" prop="unitPrice">
             <template #default="scope">
               <el-input
+                type="number"
+                :controls="false"
                 v-model="scope.row.unitPrice"
                 @click.stop=""
                 @focus="handleInputFocus(scope.row)"
+                @blur="(event) => handleUnitPriceBlur(event, scope.row)"
               />
             </template>
           </el-table-column>
           <el-table-column :label="t('route.quantity')" align="center" prop="quantity">
             <template #default="scope">
               <el-input
+                type="number"
+                :controls="false"
                 v-model="scope.row.quantity"
                 @click.stop=""
                 @focus="handleInputFocus(scope.row)"
+                @blur="(event) => handleQuantityBlur(event, scope.row)"
               />
             </template>
           </el-table-column>
@@ -164,6 +170,18 @@ const selectRow = (row) => {
 
 // 确认选择
 const handleConfirm = () => {
+  // 检查是否有未通过校验的行
+  const invalidRows = selectedRows.value.filter(row => {
+    const quantity = parseFloat(row.quantity);
+    const unitPrice = parseFloat(row.unitPrice);
+    return isNaN(quantity) || quantity <= 0 || isNaN(unitPrice) || unitPrice <= 0;
+  });
+
+  if (invalidRows.length > 0) {
+    ElMessage.error('存在无效的 单价 或 数量,请检查');
+    return;
+  }
+
   if (selectedRows.value.length === 0) {
     ElMessage.warning('请至少选择一个物料')
     return
@@ -180,6 +198,42 @@ const handleConfirm = () => {
   handleClose()
 };
 
+// 处理 单价 unitPrice 输入框失焦事件
+const handleUnitPriceBlur = (event: Event, row: any) => {
+  const inputValue = (event.target as HTMLInputElement).value;
+  let num = parseFloat(inputValue);
+  // 处理无效值
+  if (isNaN(num)) {
+    row.unitPrice = 0;
+    return;
+  }
+  // 处理小于等于0的情况
+  if (num <= 0) {
+    row.unitPrice = 0;
+    return;
+  }
+  // 保留两位小数
+  row.unitPrice = parseFloat(num.toFixed(2));
+};
+
+// 处理 入库数量 quantity 输入框失焦事件
+const handleQuantityBlur = (event: Event, row: any) => {
+  const inputValue = (event.target as HTMLInputElement).value;
+  let num = parseFloat(inputValue);
+  // 处理无效值
+  if (isNaN(num)) {
+    row.quantity = 0;
+    return;
+  }
+  // 处理小于等于0的情况
+  if (num <= 0) {
+    row.quantity = 0;
+    return;
+  }
+  // 保留两位小数
+  row.quantity = parseFloat(num.toFixed(2));
+};
+
 // 点击整行选中
 const handleRowClick = (row) => {
   toggleRow(row);

+ 32 - 0
src/views/pms/iotmainworkorder/WorkOrderMaterial.vue

@@ -126,9 +126,12 @@
         <el-table-column :label="t('workOrderMaterial.ConsumptionQuantity')" align="center" prop="quantity">
           <template #default="scope">
             <el-input
+              type="number"
+              :controls="false"
               v-model="scope.row.quantity"
               @click.stop=""
               @focus="handleInputFocus(scope.row)"
+              @blur="(event) => handleQuantityBlur(event, scope.row)"
             />
           </template>
         </el-table-column>
@@ -250,6 +253,17 @@ const getList = async () => {
 
 // 确认选择
 const handleConfirm = () => {
+  // 检查是否有未通过校验的行
+  const invalidRows = selectedRows.value.filter(row => {
+    const quantity = parseFloat(row.quantity);
+    return isNaN(quantity) || quantity <= 0;
+  });
+
+  if (invalidRows.length > 0) {
+    ElMessage.error('存在无效的 消耗数量,请检查');
+    return;
+  }
+
   if (selectedRows.value.length === 0) {
     ElMessage.warning('请至少选择一个物料')
     return
@@ -345,6 +359,24 @@ const toggleRow = (row) => {
   }
 }
 
+// 处理 消耗数量 quantity 输入框失焦事件
+const handleQuantityBlur = (event: Event, row: any) => {
+  const inputValue = (event.target as HTMLInputElement).value;
+  let num = parseFloat(inputValue);
+  // 处理无效值
+  if (isNaN(num)) {
+    row.quantity = 0;
+    return;
+  }
+  // 处理小于等于0的情况
+  if (num <= 0) {
+    row.quantity = 0;
+    return;
+  }
+  // 保留两位小数
+  row.quantity = parseFloat(num.toFixed(2));
+};
+
 // 处理输入框焦点事件(自动选中当前行)
 const handleInputFocus = (row: WorkOrderBomMaterialApi.IotMainWorkOrderBomMaterialVO) => {
   const getRowUniqueKey = (row) => {

+ 32 - 0
src/views/pms/iotsapstock/SelectSapStock.vue

@@ -74,9 +74,12 @@
           <el-table-column :label="t('route.safetyStock')" align="center" prop="safetyStock">
             <template #default="scope">
               <el-input
+                type="number"
+                :controls="false"
                 v-model="scope.row.safetyStock"
                 @click.stop=""
                 @focus="handleInputFocus(scope.row)"
+                @blur="(event) => handleSafetyStockBlur(event, scope.row)"
               />
             </template>
           </el-table-column>
@@ -152,6 +155,17 @@ const selectRow = (row) => {
 
 // 确认选择
 const handleConfirm = () => {
+  // 检查是否有未通过校验的行
+  const invalidRows = selectedRows.value.filter(row => {
+    const safetyStock = parseFloat(row.safetyStock);
+    return isNaN(safetyStock) || safetyStock <= 0;
+  });
+
+  if (invalidRows.length > 0) {
+    ElMessage.error('存在无效的 安全库存,请检查');
+    return;
+  }
+
   if (selectedRows.value.length === 0) {
     ElMessage.warning('请至少选择一个库存')
     return
@@ -187,6 +201,24 @@ const getList = async () => {
   }
 }
 
+// 处理 安全库存数量 safetyStock 输入框失焦事件
+const handleSafetyStockBlur = (event: Event, row: any) => {
+  const inputValue = (event.target as HTMLInputElement).value;
+  let num = parseFloat(inputValue);
+  // 处理无效值
+  if (isNaN(num)) {
+    row.safetyStock = 0;
+    return;
+  }
+  // 处理小于等于0的情况
+  if (num <= 0) {
+    row.safetyStock = 0;
+    return;
+  }
+  // 保留两位小数
+  row.safetyStock = parseFloat(num.toFixed(2));
+};
+
 // 处理输入框焦点事件(自动选中当前行)
 const handleInputFocus = (row: MaterialApi.MaterialVO) => {
   // 如果未选中则添加到选中列表