@KORICA67

Как в computed обьеденить две data в одну новую?

Есть такой элемент (карточка товара) с возможностью выбора опций / без
<template>

    <div class="ar-catalog-item">
        <span class="ar-catalog-item__badge">
            <img :src="('../assets/images/' + product_data.badge)" alt="">
            {{ product_data.badge }}
        </span>

        <img class="ar-catalog-item__img" :src="require('../assets/images/' + product_data.image)" alt="img">
        <!-- <div v-for="(index, weight) in selectedVariation"
         :key="weight"> Вес {{ index.weight }}</div> -->

        <p class="ar-catalog-item__sku">{{ product_data.sku }}</p>
        <i class="ar-catalog-item__bju">i</i>
        <p class="ar-catalog-item__name">{{ product_data.name }} {{product_data.topping}}</p>
        <p class="ar-catalog-item__except">{{ product_data.except }}</p>

        <p v-if="product_data.type == 'pizza'" class="ar-catalog-item_sku_variations">Выберите размер</p>

        <div v-if="product_data.type == 'pizza'">
            <div class="variations" v-for="(variation,index) in product_data.variations"
                :key="variation.variation_index">
                <a class="ar-variable" :class="{ active:selectedVariation == index  }"
                    @click.prevent="selectSize(variation)">
                    {{ variation.size }}
                </a>
            </div>
        </div>


        <p v-if="product_data.type == 'wok'" class="ar-catalog-item_sku_variations">Выберите начинку</p>


        <div v-if="product_data.type == 'wok'">
            <div class="variations" v-for="(variation,index) in product_data.variations" :key="variation.topping">
                <a class="ar-variable" :class="{ active: selectedVariation == index }" @click="selectSize(variation)">
                    {{ variation.topping }}
                </a>
            </div>
        </div>



        <div class="ar-catalog-item-bottom">
            <p class="ar-catalog-item-bottom__price"> Цена: {{ product_data.price }}₽</p>


            <button @click="addToCart" class="ar-catalog-item-bottom__add_to_cart_btn btn">хочу</button>
            <!-- <div class="ar-catalog-item-qty">
                <span 
                v-if="product_data.quantity > 1"
                 class="ar-catalog-item-qty_btns">
                    <button class="item_quantity_btn"
                     @click="decrementInProductCard">-</button>
                    {{ product_data.quantity }}
                    <button class="item_quantity_btn" 
                    @click="addToCart">+</button>
                </span>
            </div> -->
        </div>
    </div>

</template>

<script>

import { mapActions } from 'vuex';

export default {

    name: 'ar-catalog-item',
    components: {


    },

    props: {
        product_data: {
            type: Object,
            default() {
                return {}
            }
        },

    },

    data() {

        return {

            selectedVariation: {},

        }
    },


    created() { },

    watch: {},

    computed: {

        productDataResult() {
            
return this.product_data || this.selectedVariation


        }




    },

    methods: {


        selectSize(i) {


            i = i || 0
            let vm = this;
            vm.$set(vm.selectedVariation, i || !vm.selectedVariation, i);
            vm.product_data.price = vm.selectedVariation[i].price
            vm.product_data.size = vm.selectedVariation[i].size
            vm.product_data.sku = vm.selectedVariation[i].weight
            vm.product_data.topping = vm.selectedVariation[i].topping
            vm.$emit('select-size', this.selectedVariation, i);

        },




        ...mapActions([

        ]),
        //* Кнопки отвечающие за действие увелечения и убавления количества в корзине из карточки товара *//

        addToCart() {
            this.$emit('addToCart', this.productDataResult); //* Добавляем в корзину товар

        },

        decrementInProductCard() {  //* Убавляем товар
            let pd = this;
            pd.$emit(
                'decrementInProductCard',
                pd.product_data.quantity--)

        }

    },
    mounted() {
        this.$set(this.product_data, 'quantity', 1)

    }
}


,есть основной массив из которой берутся основные данные для заполнения карточки товара ,так же есть подмассив для опций некоторых товаров . столкнулся с проблемой : если я выбираю товар без опции он без проблем попадает в корзину по клику и отображается его цена и тп ,но если я при этом добавляю еще и товар с опцией то в корзине уже отображается NaN

вот если что образец массива

"products":[

{
"badge":"новинка",
"image": "8.jpg",
"sku":"420гр",
"name": "Болоньезе",
"except":"Томатный соус, моцарелла, красный лук, фарш, помидор",
"price":369,
"id": "1",
"size":"25",
"avalible": true,
"category":"Роллы",
"type":"pizza",
"variations":
[

{
"id":"1110",
"size":"25",
"weight":"320гр",
"price":500},

{ "id":"3335",
"size":"33",
"weight":"550гр",
"price":1020
},
{"id":"3338",
"size":"40",
"weight":"720гр",
"price":1020
}
]

},

{

"image":"3.jpg",
"sku":"250 гр/8 шт.",
"name": "Аляска",
"except": "Рис , нори ,сыр ,огурец ,лосось ,стружка тунца",
"price": 309,
"id": "2",
"avalible": true,
"category":"Роллы",
"type":"rolly",
"variations": null

},
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы