55000 IQD
جزئیات
(تمام فصول) این خانه سگ میتواند در تمام طول سال به عنوان یک تخت تابستانی برای محافظت از حیوان خانگی شما در برابر گرما استفاده شود. در زمستان، به یک خانه دنج و نرم تبدیل میشود. این خانه رویایی آنهاست!
(خانه شیک حیوانات خانگی) این خانه سگ تاشوی داخلی نه تنها شیک است، بلکه دارای یک دریچه تهویه نیز میباشد. درها و پنجرههای جانبی گردش هوا را بهبود میبخشند.
(نصب و تمیز کردن آسان) نصب سریع و آسان است و فقط به یک پیچ گوشتی نیاز دارد. اگر خانه سگ کثیف شد، کافیست آن را با آب بشویید. برای تمیز نگه داشتن آن، مرتباً آن را بشویید. نصب و جداسازی آن آسان است و به راحتی میتوانید آن را به هر کجا که نیاز دارید حمل کنید. برای پاسیو یا حیاط خلوت عالی است.
(مقاوم در برابر آب و هوا و باران): سقف شیبدار آن اجازه میدهد باران و برف از آن سرازیر شود و آن را برای استفاده در داخل و خارج از منزل ایدهآل میکند. همچنین دارای سایبان است. این خانه سگ حتی در بدترین آب و هوا سگ شما را راحت نگه میدارد. (اطلاعات اندازه) مناسب برای سگهای کوچک و متوسط مانند شیبا اینو، پودل، چیواوا، یورکشایر تریر، کورگی، اشناوزر و داشهوند. ایدهآل برای انواع گربهها. این خانه حیوانات خانگی به اندازه کافی بزرگ است تا سگهای کوچک و متوسط با اندازههای مختلف را در خود جای دهد. لطفاً قبل از خرید، اندازه را بررسی کنید. {
Alpine.data("productDetails", () => ({
productId: '13521',
error: false,
auth: false,
isLoading: false,
quantity: 0,
cartId: null,
isInCart: false,
showSizeTooltip: false,
tooltipX: 0,
tooltipY: 0,
init() {
if (this.auth) {
this.fetchCart();
}
// Listen for cart updates from other components
this.$watch('quantity', (value) => {
this.isInCart = value > 0;
});
},
async addToCart() {
// Check if user is authenticated
if (!'') {
window.dispatchEvent(new CustomEvent('open-auth-modal'));
return;
}
await this.createOrUpdateCart(1);
},
async increaseQuantity() {
const newQuantity = this.quantity + 1;
await this.updateQuantity(this.productId, newQuantity);
},
async decreaseQuantity() {
const newQuantity = this.quantity - 1;
await this.updateQuantity(this.productId, newQuantity);
},
// Creates cart for the first time or updates existing cart
async createOrUpdateCart(initialQuantity = 1) {
this.isLoading = true;
try {
const response = await fetch('/carts/store', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
},
body: JSON.stringify({
product_id: this.productId,
quantity: initialQuantity
})
});
const data = await response.json();
if (response.ok) {
this.quantity = initialQuantity;
this.showNotification(data.message ||
`${this.productName} added to cart!`, 'success');
} else {
this.showNotification(data.message || 'Failed to add to cart!',
'error');
throw new Error('Failed to add to cart.');
}
} catch (error) {
console.error('Error creating/updating cart:', error);
this.showNotification('Failed to add to cart. Please try again.', 'error');
} finally {
this.isLoading = false;
}
},
// Updates the quantity of an item
async updateQuantity(itemId, quantity) {
// Basic validation
if (quantity < 1) {
// If user enters 0 or less, treat it as a remove action
await this.removeItem(itemId);
return;
}
this.isLoading = true;
try {
const response = await fetch(`/carts/product/${itemId}`, {
method: 'PATCH',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
},
body: JSON.stringify({
quantity: quantity
})
});
const data = await response.json();
console.log(data);
if (response.ok) {
// Update local state
// window.cartManager.setQuantity(itemId, quantity);
this.quantity = quantity;
if (quantity === 0) {
this.showNotification(data.message || 'Item removed from cart!',
'info');
} else {
this.showNotification(data.message || 'Quantity updated!',
'success');
}
} else {
this.showNotification(data.message || 'Failed to update quantity!',
'error');
// throw new Error('Failed to update quantity.');
}
} catch (error) {
console.error('Error updating quantity:', error);
this.showNotification('Failed to update quantity. Please try again.',
'error');
// Refresh local state from server if needed
await this.fetchCart();
} finally {
this.isLoading = false;
}
},
// Remove item from cart
async removeItem(itemId) {
this.isLoading = true;
try {
const response = await fetch(`/carts/product/${itemId}`, {
method: 'DELETE',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': document.querySelector(
'meta[name="csrf-token"]').getAttribute(
'content')
}
});
const data = await response.json();
if (response.ok) {
// Update local state
// window.cartManager.setQuantity(itemId, 0);
this.quantity = 0;
this.showNotification(data.message || 'Item removed from cart!',
'success');
} else {
this.showNotification(data.message || 'Failed to remove item!',
'error');
throw new Error('Failed to remove item.');
}
} catch (error) {
console.error('Error removing item:', error);
this.showNotification('Failed to remove item. Please try again.', 'error');
} finally {
this.isLoading = false;
}
},
// Fetch current cart state from server (for consistency)
async fetchCart() {
try {
const response = await fetch('/carts/index', {
method: 'GET',
headers: {
'Accept': 'application/json',
'X-Requested-With': 'XMLHttpRequest',
}
});
const data = await response.json();
if (response.ok && data.data.cart) {
// Update local cart state
const newCart = {};
data.data.cart.forEach(item => {
newCart[item.product_id] = item.quantity;
});
// Update this component's quantity
this.quantity = newCart[this.productId] || 0;
if (this.quantity > 0) {
this.isInCart = true;
}
this.cartId = data.data.cart.id;
}
} catch (error) {
console.error('Error fetching cart:', error);
}
},
updateTooltipPosition(event) {
this.tooltipX = event.pageX + 14;
this.tooltipY = event.pageY + 14;
},
showNotification(message, type = 'info') {
setTimeout(() => {
setTimeout(() => {
if (typeof notify !== 'undefined') {
notify(message, type);
} else {
console.log(`${type.toUpperCase()}: ${message}`);
}
}, 300);
});
},
}))
})
دوباره خوش آمدید ایجاد حساب کاربری
با شماره تلفن خود وارد شوید ثبتنام خود را تکمیل کنید
این شماره تلفن برای حساب کاربری شما استفاده خواهد شد
من موافقم که پتلند آنلاین ممکن است بیکنهای تحلیلی وب را در خبرنامه وارد کند و بر اساس رفتار خرید و استفاده من، یک پروفایل کاربری شخصیسازی شده ایجاد کند، که شامل ارسال اعلان در زمانی که کالایی را در سبد خرید قرار دادهام نیز میشود. جزئیات بیشتر را میتوان در سیاست حفظ حریم خصوصی ما، بند ۵، یافت. میدانم که میتوانم رضایت خود را در هر زمان با ارسال ایمیل به [email protected] لغو کنم.




