首页 > 解决方案 > Vue 在从后端 Laravel 接收数据时更改变量值

问题描述

我希望你们一切都好。

我有一个奇怪的问题,我找不到解决方法,最糟糕的是,我什至不知道如何开始在互联网上寻找这个问题。情况如下:我在 Laravel 中使用以下代码发出数据库请求:

public function previsao(){
    $dados = [];
    $tempoEntrega = 0;
    $tempoTroca = 0;
    $sugestaoCompra = 0;
    $frequencia = 0;
    $qnt = 0;
    $qntI = 0;
    $qntR = 0;

    $todosOsDados = $this->TecManutencaoEstoquePecaRegM
        ->join('tec_manutencao_pecas', 'tec_manutencao_estoque_peca_regs.pecaId', 'tec_manutencao_pecas.id')
        ->where('dataComp', '!=', null)
        ->get();

    foreach ($todosOsDados as $todId) {
        $toIds[] = $todId->pecaId;
    }

    $idsUnicos = array_unique($toIds);
    foreach ($idsUnicos as $idu) {
        $ids[] = $idu;
    }

    foreach ($ids as $id) {
        $peca = $this->TecManutencaoPecasM
            ->select('peca')
            ->where('id', $id)
            ->first();

        $entrega = $this->TecManutencaoEstoquePecaRegM
            ->join('tec_manutencao_pecas', 'tec_manutencao_estoque_peca_regs.pecaId', 'tec_manutencao_pecas.id')
            ->where('dataComp', '!=', null)
            ->where('pecaId', $id)
            ->where('mov', 'i')
            ->select('data', 'dataComp', 'qnt', 'est_min')
            ->get();

        foreach ($entrega as $e) {
            $tempoEntrega += (Carbon::parse($e->data)->diffInDays(Carbon::parse($e->dataComp)));
            $estMin = $e->est_min; 
            $qntI += $e->qnt; 
        }

        $qntRetirada = $this->TecManutencaoEstoquePecaRegM
            ->join('tec_manutencao_pecas', 'tec_manutencao_estoque_peca_regs.pecaId', 'tec_manutencao_pecas.id')
            ->where('dataComp', '!=', null)
            ->where('pecaId', $id)
            ->where('mov', 'r')
            ->select('qnt')
            ->get();

        foreach ($qntRetirada as $qr) {                    
            $qntR += $qr->qnt;
        }

        $qnt = $qntI - $qntR;

        $uso = $this->TecManutencaoEstoquePecaRegM
            ->where('pecaId', $id)
            ->where('mov', 'r')
            ->select('data')
            ->get();

        foreach ($uso as $u) {
            $ultimaEntrega = $this->TecManutencaoEstoquePecaRegM
                ->join('tec_manutencao_pecas', 'tec_manutencao_estoque_peca_regs.pecaId', 'tec_manutencao_pecas.id')
                ->where('pecaId', $id)
                ->where('mov', 'i')
                ->where('data', '<=', $u->data)
                ->select('data')
                ->orderBy('data', 'DESC')
                ->first();
            
            $tempoTroca += (Carbon::parse($u->data)->diffInDays(Carbon::parse($ultimaEntrega->data)));

            $ultimaTroca = $u->data;
        }

        $frequencia = count($entrega);

        $sugestaoCompra = round(($tempoTroca * ($tempoEntrega + $frequencia)) - ($qnt - $estMin));

        $tempoTrocaMedio = count($uso) == 0 ? $tempoTroca : round($tempoTroca / count($uso));

        $tempoAteEstminAcabar = $qnt * $tempoTrocaMedio;

        $dataProxComp = $tempoAteEstminAcabar - round($tempoEntrega / count($entrega));

        $diasTroca = $tempoTroca <= 0 ? round($tempoEntrega / count($entrega)) : $dataProxComp;

        $dados[] = [
            'id' => $id,
            'peca' => $peca->peca,
            'tempoEntrega' => $tempoEntrega <= 0 ? $tempoEntrega : round($tempoEntrega / count($entrega)),
            'tempoTroca' => $tempoTroca <= 0 ? $tempoTroca : round($tempoTroca / count($uso)),
            'qntProxComp' => $sugestaoCompra,
            //'dataProxComp' => date('d/m/Y', strtotime($ultimaTroca.'+'.$diasTroca.' days')),
            'dataProxComp' => $ultimaTroca == 0 || $ultimaTroca == null ? 
                date('d/m/Y', strtotime($ultimaEntrega->data.'+'.$diasTroca.' days')) : 
                date('d/m/Y', strtotime($ultimaTroca.'+'.$diasTroca.' days')),
            'qnt' => $qnt,
            'estMin' => $estMin
        ];

        $tempoEntrega = 0;
        $tempoTroca = 0;
        $sugestaoCompra = 0;
        $frequencia = 0;
        $qnt = 0;
        $qntI = 0;
        $qntR = 0;
    }

    //dd($dados);

    return $dados;     
}

此代码返回我所期望的:

从后端返回

然后像这样使用 Vue 获得这个回报:

methods: {
    getPredictions(){
        axios.get(this.rotagetprevisoes, this.dadosIniciais).then(res => {
            this.dadosIniciais = res.data
            console.log(res.data)
        })
    },
    rowClass(filtered, type){
        if (!filtered) return
        if (filtered.estMin < filtered.qnt) return 'table-success'
        if (filtered.estMin = filtered.qnt) return 'table-warning'
        if (filtered.estMin > filtered.qnt) return 'table-danger'
    },
    openRepModal(){
        this.$root.$emit('bv::show::modal', 'gerRelPrev', '#btnShow')
    },
    sugModal(item){
        if(item.qntProxComp >= 0){
            this.qntSuges = item.qntProxComp
            this.acimaEstMin = 'n'
        } else {
            this.qntSuges = Math.abs(item.qntProxComp)
            this.acimaEstMin = 's'
        }
        this.dataSuges = item.dataProxComp
        this.$root.$emit('bv::show::modal', 'adminSugestao', '#btnShow')
    }
},

但我在这里得到的是:

Vue 控制台日志

请注意,“ estMin ”在发送和接收时具有不同的值,最奇怪的是它只从 Laravel 到 Vue,中间什么都没有。我已经尝试更改我的代码的很多部分,重新​​做一遍,但最终得到相同的结果,尝试在互联网上搜索相关的东西,但没有成功。这个字段“ estMin ”是唯一受影响的字段,它甚至不是一个计算字段,它只是我从数据库中获得的数据。我根本不明白为什么“ estMin ”来自 Laravel 并具有我期望的值并以不同的值到达 Vue。还有一件事,这是一组对象,只挑一个例子给大家看。有人能帮助我吗?

标签: laravelvue.js

解决方案


感谢您试图帮助我,我只是想知道我做错了什么,这很愚蠢。我已经编辑了这个问题,所以你们可以更好地理解: 在 rowClass 方法中,我有这一行:

if (filtered.estMin = filtered.qnt) return 'table-warning'

我没有注意到 '=' 符号,这就是为什么 estMin 的值不同的原因,所以我将 '=' 符号更改为 '===' 并解决了问题:

if (filtered.estMin === filtered.qnt) return 'table-warning'

老实说,我不明白为什么这种方法会干扰另一种方法,但它确实有效。

再次感谢所有试图帮助我的人。


推荐阅读