首页 > 解决方案 > 项目以 dB 为单位创建两次

问题描述

解释

它是一个带有许多从数据库(optionsDB)加载的 V-Radio-Button 的表单

options in db:  [{ID: 21, Name: "Cellphones"}, {ID: 32, Name: "Computer",}]].

然后加载组件从数据库中加载一些用户可能之前配置过的选项,或者可能不加载任何东西(OrginalOptions)

 orginalOptions: [{ID: 1, Inventory_Id: 21, Quantity: 32, Status: 1}, {ID: 2, Inventory_ID: 21, Quantity: 32, Status: 1}]

我所做的是走安排看看用户是否对任何选项进行了更改,首先检查他是否有inventory_id 将数据发送到另一个编辑项目的函数。到目前为止,该程序运行良好。

从这里其他:

   } else {
            if ((allOptions[indexOpcionesTablas].state ....

然后这是ELSE,它是针对在Web上配置的新项目,因此没有从dB分配的服务并且不在OrginalOptions []中,仅存在于AllOps []中。

AllOps [] 自动配置并根据用户修改的内容创建状态或数量字段(这里都很好)

 allOptions item changed:  [{ID: 37, Name: "itemx", Quantity: 50}] 

我在此步骤中尝试做的是检查更改是变量“数量”和“状态”,以这种方式将数据发送到数据库并创建它们。(这会将项目放在 orginalopions [] 中)

所有这一切的问题是该项目在数据库中创建了两次

 alloption[] a future..
 [{ID: 3, Inventory_Id: 37, status: 1, Quantity: 50}]
 [{ID: 4, Inventory_Id: 37, status: 1, Quantity: 50}]

我认为问题出在 for-in 循环上。该程序没有如何检查项目是否已添加.. 谢谢。

    async saveInventarioItemsUser () {
          let self = this
          let itemsToDb = []
          let allOptions = self.items_config_inventario
          let orginalOptions = self.items_config_inventario_original
          for (let indexOpcionesUsuarioOriginal in orginalOptions) {
            for (let indexOpcionesTablas in allOptions) {
              if (allOptions[indexOpcionesTablas].inventario) {
                if (orginalOptions[indexOpcionesUsuarioOriginal].inventario === allOptions[indexOpcionesTablas].inventario) {
                  if (allOptions[indexOpcionesTablas].cantidad !== orginalOptions[indexOpcionesUsuarioOriginal].cantidad || allOptions[indexOpcionesTablas].state !== orginalOptions[indexOpcionesUsuarioOriginal].state) {
                    let inventario = {
                      orden_trabajo: self.$route.params.editar,
                      inventario: allOptions[indexOpcionesTablas].inventario,
                      cantidad: allOptions[indexOpcionesTablas].cantidad,
                      state: allOptions[indexOpcionesTablas].state
                    }
                    self.saveIndividualItemInventario(allOptions[indexOpcionesTablas].id, inventario)
                  }
                } else {
                  console.log('No coincide con .inventario_id', allOptions[indexOpcionesTablas])
                }
              } else {
                if ((allOptions[indexOpcionesTablas].state !== 0 && allOptions[indexOpcionesTablas].state > 0) || allOptions[indexOpcionesTablas].cantidad >= 1) {
                  console.log('ITEM SIN INVENTARIO, CREAR')
                  console.log('ITEM SIN INVENTARIO, CREAR', allOptions[indexOpcionesTablas])
                  if (itemsToDb.length > 0) {
                    itemsToDb.map(item => {
                      if (item.id === allOptions[indexOpcionesTablas].id) {
                        console.log('ITEM EN ARRAY', allOptions[indexOpcionesTablas])
                        let data = {
                          orden_trabajo: self.$route.params.editar,
                          inventario: allOptions[indexOpcionesTablas].id,
                          cantidad: allOptions[indexOpcionesTablas].cantidad || 1,
                          state: allOptions[indexOpcionesTablas].state || 1
                        }
                        self.pushDBNewOpt(data)
                      } else {
                        console.log('PUSH ITEM')
                        itemsToDb.push(allOptions[indexOpcionesTablas])
                        console.log('PUSH ITEM', itemsToDb)
                      }
                    })
                  } else {
                    console.log('PUSH ITEM ELSE')
                    itemsToDb.push(allOptions[indexOpcionesTablas])
                  }
                }
              }
            }
          }
          itemsToDb = []
        }

pushDBNewOpt

async pushDBNewOpt (data) {
  let self = this
  await self._create(`endpoint/item/`, data, (response) => {
    console.log('RESP saveInventarioItemsUser', response)
    self.loadInventarioItemsUser()
  })
},

标签: javascriptvue.jsasync-await

解决方案


推荐阅读