src/views/inventoryManagement/stockManagement/index.vue
@@ -26,6 +26,7 @@
    <div class="table_list">
      <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
        :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
        :row-class-name="tableRowClassName"
        :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
        <el-table-column align="center" type="selection" width="55" />
        <el-table-column align="center" label="序号" type="index" width="60" />
@@ -35,7 +36,7 @@
        <el-table-column label="规格型号" prop="specificationModel" width="200" show-overflow-tooltip />
        <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip />
        <el-table-column label="库存数量" prop="inboundNum0" width="100" show-overflow-tooltip />
        <el-table-column label="最低库存数量" prop="minStock" width="130" show-overflow-tooltip />
        <el-table-column label="库存预警数量" prop="warnNum" width="130" show-overflow-tooltip />
        <el-table-column label="含税单价" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />
        <el-table-column label="含税总价" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="taxRate" width="100" show-overflow-tooltip />
@@ -61,7 +62,7 @@
          </el-col>
          <el-col :span="12">
            <el-form-item label="产品大类:" prop="productId">
              <el-select disabled v-model="form.productCategory" placeholder="请选择" clearable filterable @change="handleProductChange">
              <el-select disabled v-model="form.productCategory" placeholder="请选择" clearable filterable>
                <el-option v-for="item in productList" :key="item.id" :label="item.productName"
                           :value="item.productName" />
              </el-select>
@@ -71,8 +72,7 @@
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="规格型号:" prop="productManageId">
              <el-select disabled v-model="form.specificationModel" placeholder="请先选择产品大类" clearable filterable :disabled="!form.productCategory"
                         @change="handleModelChange">
              <el-select disabled v-model="form.specificationModel" placeholder="请先选择产品大类" clearable filterable :disabled="!form.productCategory">
                <el-option v-for="item in productModelList" :key="item.id" :label="item.model"
                           :value="item.id" />
              </el-select>
@@ -132,11 +132,11 @@
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
          <el-form-item label="最低库存:" prop="minStock">
            <el-input v-model="form.minStock" placeholder="请输入最低库存" clearable />
          </el-form-item>
        </el-col>
<!--          <el-col :span="12">-->
<!--          <el-form-item label="库存预警数量:" prop="warnNum">-->
<!--            <el-input v-model="form.warnNum" placeholder="请输入最低库存" clearable />-->
<!--          </el-form-item>-->
<!--        </el-col>-->
        </el-row>
      </el-form>
      <template #footer>
@@ -151,19 +151,17 @@
<script setup>
import pagination from '@/components/PIMTable/Pagination.vue'
import { ref } from 'vue'
import { ref, reactive, toRefs, onMounted, getCurrentInstance } from 'vue'
import { ElMessageBox } from "element-plus";
import useUserStore from '@/store/modules/user'
import { userListNoPageByTenantId } from "@/api/system/user.js";
import { productTreeList,modelList } from "@/api/basicData/product.js"
import {
  getStockManagePage ,
  updateStockManage,
  getStockManagePage,
  delStockManage,
  exportStockManage
} from "@/api/inventoryManagement/stockManage.js";
import {
  updateManagement,addSutockIn,selectProductRecordListByPuechaserId,updateStockIn
  updateManagement,updateStockIn
} from "@/api/inventoryManagement/stockIn.js";
@@ -212,7 +210,7 @@
    inboundBatch: '',
    stockQuantity: '',
    boundTime: '',
    minStock: '', // 新增最低库存字段
      warnNum: '', // 新增最低库存字段
    salesLedgerProductId: null,
  },
  rules: {
@@ -228,7 +226,7 @@
    boundTime: [{ required: true, message: '请选择库存时间', trigger: 'change' }],
    inboundTime: [{ required: true, message: '请选择入库时间', trigger: 'change' }],
    inboundPerson: [{ required: true, message: '请选择出库人', trigger: 'change' }],
    minStock: [{ required: true, message: '请输入最低库存', trigger: 'blur' }],
      warnNum: [{ required: true, message: '请输入最低库存', trigger: 'blur' }],
  }
})
const { searchForm, form, rules } = toRefs(data)
@@ -249,13 +247,9 @@
  getStockManagePage({ ...searchForm.value, ...page }).then(res => {
    tableLoading.value = false
    tableData.value = res.data.records
    // console.log('res', res)
    // tableData.value.map(item => {
    //   item.children = []
    // })
    total.value = res.data.total
    // 数据加载完成后检查库存
    checkStockAndCreatePurchase();
    // checkStockAndCreatePurchase();
  }).catch(() => {
    tableLoading.value = false
  })
@@ -275,6 +269,16 @@
  return proxy.summarizeTable(param, ['contractAmount', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice']);
};
// 表格行类名
const tableRowClassName = ({ row }) => {
  const stock = Number(row?.inboundNum0 ?? 0);
  const warn = Number(row?.warnNum ?? 0);
  if (!Number.isFinite(stock) || !Number.isFinite(warn)) {
    return '';
  }
  return stock < warn ? 'row-low-stock' : '';
};
// 打开弹框
const openForm = async (type, row) => {
  operationType.value = type
@@ -282,11 +286,6 @@
  productData.value = []
  let userLists = await userListNoPageByTenantId()
  userList.value = userLists.data
  // customerList().then(res => {
  //   customerOption.value = res
  // })
  // console.log('userStore.id', userStore.id)
  // form.value.entryPerson = userStore.id
  if (type === 'edit') {
    form.value = { ...row }
    productTreeList().then(res =>{
@@ -299,14 +298,6 @@
        }
      })
    })
    // getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => {
    //   form.value.entryPerson = Number(res.entryPerson)
    //   productData.value = form.value.productData
    //   fileList.value = form.value.salesLedgerFiles
    // })
  }
  form.value.entryDate = getCurrentDate() // 设置默认录入日期为当前日期
  dialogFormVisible.value = true
@@ -323,63 +314,33 @@
        closeDia()
        getList()
        // 提交后检查库存并尝试创建请购单
        checkStockAndCreatePurchase();
        // checkStockAndCreatePurchase();
      })
    }
  })
}
// const handList = () => {
//   selectProductRecordListByPuechaserId().then(res => {
//     productModelList.value = res.data.filter(item => item.productName === value)
//     console.log('productModelList.value', productModelList.value)
//   })
// }
// 检查库存并创建请购单
const checkStockAndCreatePurchase = async () => {
  const stockList = tableData.value;
  // handList()
  for (const item of stockList) {
    if (item.inboundNum0 < item.minStock) {
      try {
        console.log('item', item)
          // const stockInData = {
          //   nickName: userStore.nickName,// 使用新格式化函数
          //   details: [{
          //     id: item.salesLedgerProductId,
          //     inboundQuantity: item.minStock - item.inboundNum0
          //   }]
          // };
          const stockInData = {
            id: item.id,
            quantityStock: item.minStock + item.totalInboundNum,// 使用新格式化函数
          };
        console.log('准备提交的数据:', JSON.parse(JSON.stringify(stockInData)));
          loading.value = true
          // await addSutockIn(stockInData)
          await updateStockIn(stockInData)
          proxy.$modal.msgSuccess(`产品 ${item.productCategory} 修改入库成功`)
          loading.value = false
        // // 生成请购单
        // const createRes = await createPurchaseRequest({
        //   productId: item.productId,
        //   requiredQuantity: item.minStock - item.inboundNum0,
        //   supplierId: item.supplierId
        // });
        // if (createRes.code === 200) {
        //   // 流转请购单到采购模块
        //   await transferPurchaseRequest({ requestId: createRes.data.id });
        //   proxy.$modal.msgSuccess(`产品 ${item.productName} 请购单已生成并流转`);
        // }
      } catch (error) {
        proxy.$modal.msgError(`产品 ${item.productCategory} 生成请购单失败,请手动处理`);
      }
    }
  }
};
// const checkStockAndCreatePurchase = async () => {
//   const stockList = tableData.value;
//   // handList()
//   for (const item of stockList) {
//     if (item.inboundNum0 < item.warnNum) {
//       try {
//             const stockInData = {
//                id: item.id,
//                quantityStock: item.warnNum + item.totalInboundNum,// 使用新格式化函数
//             };
//             loading.value = true
//             await updateStockIn(stockInData)
//             proxy.$modal.msgSuccess(`产品 ${item.productCategory} 修改入库成功`)
//             loading.value = false
//       } catch (error) {
//         proxy.$modal.msgError(`产品 ${item.productCategory} 生成请购单失败,请手动处理`);
//
//       }
//     }
//   }
// };
// 关闭弹框
const closeDia = () => {
  proxy.resetForm("formRef")
@@ -442,15 +403,24 @@
}
onMounted(() => {
  getList()
  checkStockAndCreatePurchase();
  // checkStockAndCreatePurchase();
    // 每小时检查一次库存
    const intervalId = setInterval(checkStockAndCreatePurchase, 60 * 60 * 1000);
    // const intervalId = setInterval(checkStockAndCreatePurchase, 60 * 60 * 1000);
onUnmounted(() => {
  // 组件卸载时清除定时器
  clearInterval(intervalId);
});
// onUnmounted(() => {
//   // 组件卸载时清除定时器
//   clearInterval(intervalId);
// });
})
</script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
:deep(.row-low-stock td) {
  background-color: #fde2e2;
  color: #c45656;
}
:deep(.row-low-stock:hover > td) {
  background-color: #fcd4d4;
}
</style>