the merge project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

189 lines
5.9 KiB

<template>
<div class="container container-fluid" id="main-container">
<div class="float-right shop-tab-wrapper row">
<div class="col-6">
<div v-on:click="active = 'buy'" :class="'btn btn-sm btn-pixel' + (active === 'buy' ? '-mono' : '') + ' shop-tab'">Buy</div>
</div>
<div class="col-6">
<div v-on:click="active = 'sell'" :class="'btn btn-sm btn-pixel' + (active === 'sell' ? '-mono' : '') + ' shop-tab'">Sell</div>
</div>
</div>
<div v-if="active === 'buy'" class="pixel-border-static shop-front" style="border-bottom: none;">
<template v-for="item in items" v-bind:key="item">
<div class="item-info row">
<div class="col-9">
<img :src="item.icon" class="item-icon" :alt="item.name">
<span>{{ item.name }}</span>
<span class="float-end price-view">{{ item.economy.buy }}$</span>
</div>
<div class="col-3">
<div class="btn-pixel buy-button" v-on:click="selectQuantity(item)">Buy</div>
</div>
</div>
</template>
</div>
<div class="modal fade" id="quantityModal" tabindex="-1" aria-labelledby="quantityModalLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-sm">
<div class="modal-content steel-border" v-if="selectedItem">
<div class="modal-header">
Buy {{ selectedItem.name }}
<div class="float-end">
<img src="@/assets/gui/close.png" alt="" data-bs-dismiss="modal">
</div>
</div>
<div class="modal-body">
<div class="row">
<div class="col-12" v-if="selectedItem.cropData">
<small class="text-muted">Seed info</small><br/>
Sells for <span class="number-marker">{{ selectedItem.economy.sell }}$</span> when harvested<br/>
Takes <span class="number-marker">{{ selectedItem.cropData.timeToGrow }}</span> minutes to grow
<hr>
</div>
<div class="col-4">
<input type="number" class="d-inline quantity-input pixel-border-green" v-model="quantity">
</div>
<div class="col-4 text-center">
<div class="btn btn-sm btn-pixel" v-on:click="quantity = getMaxQuantity(selectedItem)">
MAX
</div>
</div>
<div class="col-4 text-center">
<img src="@/assets/gui/minus.png" alt="minus" class="quantity-button" v-on:click="quantity--">
<img src="@/assets/gui/plus.png" alt="plus" class="quantity-button" v-on:click="quantity++">
</div>
</div>
</div>
<div class="modal-footer">
<div class="btn-pixel" data-bs-dismiss="modal" v-on:click="$store.commit('buyItem', {item: selectedItem, quantity: quantity})">
Buy for {{ selectedItem.economy.buy * quantity }}$
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ItemService from "@/services/ItemService";
import {ItemTypes} from "@/data/ItemTypes";
import {openModal} from "@/helpers";
export default {
name: "CropShopView",
data() {
return {
active: 'buy',
selectedItem: null,
quantity: 1
}
},
methods: {
selectQuantity(item) {
this.selectedItem = item;
openModal('quantityModal');
console.log(item);
},
getMaxQuantity(item) {
return Math.floor(this.$store.state.player.money / item.economy.buy).toFixed(0);
}
},
mounted() {
},
watch: {
selectedItem() {
this.quantity = 1;
},
quantity() {
if (this.quantity < 1) {
this.quantity = 1;
}
if (this.quantity > this.getMaxQuantity(this.selectedItem)) {
this.quantity = this.getMaxQuantity(this.selectedItem);
}
}
},
computed: {
items() {
return ItemService.getItemsByType([ItemTypes.Seeds, ItemTypes.AnimalProducts]);
}
}
}
</script>
<style scoped>
#main-container {
padding: 4.9em 1em;
}
.item-icon {
display: inline-block;
max-height: 3.5em;
width: 42px;
background-color: rgba(100, 100, 100, 0.2);
padding: 5px;
border-radius: 5px;
border: 1px solid saddlebrown;
margin-right: 0.4em;
}
.btn-pixel {
margin: 0 0 0.5em;
font-size: 0.8em;
white-space: nowrap;
padding-left: 0;
padding-right: 0;
width: 100%;
}
.buy-buttons a {
width: 100%;
}
.shop-tab {
text-align: center;
padding : 0.1em;
width: 100%;
border-radius: 20px;
}
.shop-tab:not(.active) {
display: inline-block;
}
.shop-front {
background-color: white;
margin-top: 0.5em;
border-radius: 20px;
}
.buy-button {
width: 100%;
text-align: center;
}
.price-view {
padding-top: 0.5em;
color: green;
}
#quantityModal .btn-pixel {
text-align: center;
}
.quantity-input {
text-align: right;
max-width: 100%;
height: 2.7em;
}
.quantity-button {
height: 2.7em;
width: auto;
margin: 0 0.1em;
display: inline-block;
}
</style>