Viking - style Medieval Coin Purse: A Retro - embossed Waist and Cross - body Shoulder Bag for Knights

$69.99
Colors:  Backpack (black)
Quantity

Description

Product Description

  1. Unique Design
    Inspired by the Viking style, this bag exudes a medieval retro charm. The bag is round - shaped, with a striking embossed eagle totem on the surface, surrounded by ancient Nordic characters, which is highly mysterious. The edges of the bag are crafted with a braiding technique, adding texture and a retro atmosphere.
  2. Practical Function
    It comes with a shoulder strap for cross - body carrying. If you purchase a leather belt separately, it can also be used as a waist bag. The internal space is suitable for storing small items such as change and keys, meeting daily carrying needs.
  3. Material and Specifications
    Made of PU leather. It measures approximately 19 cm in length, 7 cm in width, and 19 cm in height, and weighs 0.38 kg. 
  4. Applicable Scenarios
    Suitable for retro - themed parties, medieval cultural events, COSPLAY gatherings, etc. It can also serve as a highlight accessory for daily wear, enhancing the unique sense of the overall look.
class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "592ea909-66ce-4d09-98ff-d1a6e1c8fab0"; // 促销活动数据 this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // 挂载bind函数 解决this指向问题 this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // 获取数据 this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); if (this.flashsaleData.product_setting.is_redirection && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(`/promotions/discount-default/${this.flashsaleData.discount_info.id}`); } } // 绑定 this.viewport_.onResize(this.resize); // 监听子款式切换,重新渲染 this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // 解绑 this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '9e365360-b08c-4c24-b6b1-ca58a8680272' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "9e365360-b08c-4c24-b6b1-ca58a8680272", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);