🛍️ Trocas rápidas, dentro dos 14 dias. »

0
enpt

Michael Kors

In 1972, Gucci became one of the first fashion houses to branch out to watches, creating iconic and successful models that combined contemporary spirit and tradition, innovation and perfection, fashion and elegance.

% Saldos Michael Kors até -30% · stock limitado
  • Functionality

  • Collection

  • Case Type

  • Case Size

  • Gender

  • Watch Movement

  • Brand

  • Water Resistance

  • Dial Colour

  • Band Material

  • Outlet / Promotions

  • Case Type

  • Material

  • Size

  • Tipo

  • Categoria

  • Edição Especial

  • Novidade

  • Destaque

  • Price

products
|

More Information

Do you want more information about the brand? Ask us for a catalog or schedule a visit to our stores to see the different products.

Comprar Michael Kors Online

In 1972, Gucci became one of the first fashion houses to branch out to watches, creating iconic and successful models that combined contemporary spirit and tradition, innovation and perfection, fashion and elegance.

não são interpretadas aqui. $postalErrorEs = Yii::t('frontend/repairs', 'Código Postal de Espanha inválido (5 dígitos, ex: 28001)'); $postalErrorPt = Yii::t('frontend/repairs', 'Código Postal de Portugal inválido (formato 0000-000)'); $scriptJS = << { const activeStep = document.querySelector(".form-content-active"); const nextStep = document.querySelector(".form-content[data-step='" + idStep + "']"); const activeStepBullet = document.querySelector(".form-step.active"); const nextStepBullet = document.querySelector(".form-step[data-step='" + idStep + "']"); const elmResume = document.querySelector(".modal-form-resume"); if(activeStep && nextStep && activeStepBullet && idStep){ if (idStep == 3) { elmResume.classList.add("show"); } else { elmResume.classList.remove("show"); } activeStep.classList.remove("form-content-active"); activeStep.classList.add("d-none"); nextStep.classList.add("form-content-active"); nextStep.classList.remove("d-none"); activeStepBullet.classList.remove("active"); nextStepBullet.classList.add("active"); } } const validateFields = (idStep) => { let formData = {}; var isValid = true; switch (idStep) { case "2": let step1 = $('#step-1').serialize(); decodeURIComponent(step1).split('&').forEach(function (pair) { pair = pair.split('='); formData[pair[0]] = pair[1] || ''; }); let requiredFields = document.querySelectorAll('#step-1 [required]'); // trim antes do truthy check — espaço/whitespace já não passa // como válido, e validamos o formato do email para apanhar typos // antes de chegar ao servidor. const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; requiredFields.forEach(function (field) { let fieldName = field.name; let value = (formData[fieldName] || '').trim(); let invalid = !value; if (!invalid && fieldName === 'email' && !emailRegex.test(value)) { invalid = true; } if (invalid) { isValid = false; field.style.cssText = 'border:1px solid rgb(165, 0, 0)!important;'; } else { field.style.border = ''; } }); return isValid; break; case "3": if(validateFields("2")) { let checkboxes = document.querySelectorAll('.btn-checkbox'); let checkboxesChoices = document.querySelectorAll('.btn-checkbox-choice'); let typeChecked = Array.from(checkboxes).some(function (checkbox) { return checkbox.checked; }); let choicesChecked = Array.from(checkboxesChoices).some(function (checkbox) { return checkbox.checked; }); if(!typeChecked) { isValid = false; let errorSelection = document.querySelector(".error-selection"); if(errorSelection == null) { let warningMessage = document.createElement('div'); warningMessage.className = 'help-block help-block-error error-selection'; warningMessage.textContent = '$messageError'; warningMessage.style = 'color: #a50000;display:block;text-align:center;margin-bottom:10px'; let formButtonsSelectionDiv = document.querySelector(".form-buttons-selection"); formButtonsSelectionDiv.parentNode.insertBefore(warningMessage, formButtonsSelectionDiv); } } else { let errorSelection = document.querySelector(".error-selection"); if(errorSelection != null) { errorSelection.remove() } } if(!choicesChecked) { isValid = false; let errorOptions = document.querySelector(".error-options"); if(errorOptions == null) { let warningMessageChoice = document.createElement('div'); warningMessageChoice.className = 'help-block help-block-error error-options'; warningMessageChoice.textContent = '$messageError'; warningMessageChoice.style = 'color: #a50000;display:block;text-align:center;margin-bottom:10px'; let formButtonsSelectionDivChoice = document.querySelector(".form-checkbox-options"); formButtonsSelectionDivChoice.parentNode.insertBefore(warningMessageChoice, formButtonsSelectionDivChoice); } }else { let errorOptions = document.querySelector(".error-options"); if(errorOptions != null) { errorOptions.remove() } } return isValid; } else { return false; } break; default: return true; break; } } const elmNavNextButton = document.querySelectorAll(".next-step"); if(elmNavNextButton && elmNavNextButton.length > 0){ elmNavNextButton.forEach((node) =>{ node.addEventListener("click",(e)=>{ e.preventDefault(); let idStep = node.getAttribute("data-step"); if(idStep){ let isValid = validateFields(idStep); if(isValid) { handleIdNavigation(idStep); } else { toastr.error('Preencha todos os campos', 'Erro', { closeButton: true, progressBar: true, positionClass: "toast-top-right", timeOut: 5000 }); } } scrollToTop(); }) }); } const elmNavPrevButton = document.querySelectorAll(".back-step"); if(elmNavPrevButton && elmNavPrevButton.length > 0){ elmNavPrevButton.forEach((node) =>{ node.addEventListener("click",(e)=>{ e.preventDefault(); let idStep = node.getAttribute("data-step"); if(idStep){ handleIdNavigation(idStep); } scrollToTop(); }) }) } const elmNavBullets = document.querySelectorAll('.form-steps-wrapper .form-step'); if(elmNavBullets && elmNavBullets.length > 0){ elmNavBullets.forEach((node) =>{ node.addEventListener("click",(e)=>{ e.preventDefault(); let idStep = node.getAttribute("data-step"); if(idStep){ let isValid = validateFields(idStep); if(isValid) { handleIdNavigation(idStep); } } scrollToTop(); }) }) } /* === UPLOAD FILE === */ const elmWarrantyCheck = document.querySelectorAll(".warranty-upload"); //console.log(elmWarrantyCheck) if(elmWarrantyCheck){ elmWarrantyCheck.forEach((node)=>{ node.addEventListener("click", (e)=>{ node.closest(".file-upload-wrapper").classList.toggle("active"); }) }) } const elmWarrantyButtonUpload = document.querySelector(".open-warranty-file"); const elmWarrantyFileUpload = document.querySelector(".warranty-file"); if(elmWarrantyButtonUpload && elmWarrantyFileUpload){ elmWarrantyButtonUpload.addEventListener("click",()=>{ elmWarrantyFileUpload.click(); }) } const btnProblem = document.querySelectorAll(".btn-problem"); if (btnProblem && btnProblem.length > 0) { btnProblem.forEach((node) => { node.addEventListener("click", (e) => { e.preventDefault(); btnProblem.forEach((btn) => { if (btn !== node) { const btnCheckbox = btn.querySelector(".btn-checkbox"); if (btnCheckbox) { btnCheckbox.removeAttribute("checked"); } btn.classList.remove("btn-selected"); btn.classList.remove("grey"); btn.classList.add("grey-clear"); } }); const btnCheckbox = node.querySelector(".btn-checkbox"); if (btnCheckbox) { btnCheckbox.setAttribute("checked", "true"); } node.classList.add("btn-selected"); node.classList.remove("grey-clear"); node.classList.add("grey"); }); }); } const scrollToTop = () => { const modal = document.querySelector('.modal-wrapper.repairs-modal'); if (modal) { modal.scrollTo({ top: 0, behavior: 'smooth' }); } }; $('input[name="delivery_option"]').on('change', function() { if ($(this).val() === 'store') { $("#store").removeClass("d-none"); $("#home").addClass("d-none"); $("#pickup_date").prop('required', true); $("#pickup_time_start").prop('required', true); $("#pickup_time_end").prop('required', true); $("#pickup_date").val(''); $("#pickup_time_start").val(''); $("#pickup_time_end").val(''); $('#final-step').removeClass('d-none'); // Limpar os campos da recolha, mas repor o país no default (PT) — // um val('') no select deixava-o sem seleção e o CP espanhol passava // a ser validado como português. $("#home input, #home textarea").val(''); $("#home select").not('#pickup_country').val(''); $('#pickup_country').val('PT'); } else { $("#store").addClass("d-none"); $("#home").removeClass("d-none"); $("#pickup_date").prop('required', false); $("#pickup_time_start").prop('required', false); $("#pickup_time_end").prop('required', false); $('#final-step').addClass('d-none'); $('.pickup-form').removeClass('d-none'); } }); $('#request-pickup').on('click', function() { var requiredFields = ['pickup_name', 'pickup_address', 'pickup_city', 'pickup_postal_code', 'pickup_country', 'pickup_phone', 'pickup_email', 'pickup_date', 'pickup_time_start', 'pickup_time_end', 'watch_front', 'watch_back']; var isValid = true; requiredFields.forEach(function(field) { var fieldInput = $('[name="' + field + '"]'); var value = fieldInput.val(); if (fieldInput.attr('type') === 'file') { if (!fieldInput[0].files.length) { isValid = false; fieldInput.css('border', '1px solid rgb(165, 0, 0)'); } else { fieldInput.css('border', ''); } } else { if (!value || !value.trim()) { isValid = false; fieldInput.css('border', '1px solid rgb(165, 0, 0)'); } else { fieldInput.css('border', ''); } } }); // Formato do código postal por país (PT 0000-000, ES 5 dígitos) — validar // aqui evita que o erro só apareça do servidor com o formulário já escondido. var pickupCountryVal = $('#pickup_country').val() || 'PT'; var postalRaw = ($('#pickup_postal_code').val() || '').trim(); var postalDigits = postalRaw.replace(/\D/g, ''); var postalOk = pickupCountryVal === 'ES' ? /^\d{5}$/.test(postalDigits) : /^\d{7}$/.test(postalDigits); if (isValid && !postalOk) { isValid = false; $('#pickup_postal_code').css('border', '1px solid rgb(165, 0, 0)'); toastr.error( pickupCountryVal === 'ES' ? '{$postalErrorEs}' : '{$postalErrorPt}', 'Erro', { closeButton: true, progressBar: true, positionClass: "toast-top-right" } ); return; } if (!isValid) { toastr.error('Preencha todos os campos', 'Erro', { closeButton: true, progressBar: true, positionClass: "toast-top-right", timeOut: 5000 }); return; } var pickupDetails = { name: $('[name="pickup_name"]').val(), address: $('[name="pickup_address"]').val(), city: $('[name="pickup_city"]').val(), postal: $('[name="pickup_postal_code"]').val(), phone: $('[name="pickup_phone"]').val(), email: $('[name="pickup_email"]').val(), date: $('[name="pickup_date"]').val(), timeStart: $('[name="pickup_time_start"]').val(), timeEnd: $('[name="pickup_time_end"]').val() }; $('#summary-name').text(pickupDetails.name); $('#summary-address').text(pickupDetails.address); $('#summary-city').text(pickupDetails.city); $('#summary-postal').text(pickupDetails.postal); $('#summary-country').text($('#pickup_country option:selected').text()); $('#summary-phone').text(pickupDetails.phone); $('#summary-email').text(pickupDetails.email); $('#summary-date').text(new Date(pickupDetails.date).toLocaleDateString()); $('#summary-time').text(pickupDetails.timeStart + ' - ' + pickupDetails.timeEnd); $('.pickup-form').addClass('d-none'); $('#pickup-success').removeClass('d-none'); $('#final-step').removeClass('d-none'); $('.form-steps-info').addClass('d-none'); }); $('#pickup_country').on('change', function() { $('#pickup_postal_code').attr('placeholder', $(this).val() === 'ES' ? '28001' : '0000-000'); }); $('#pickup_time_start, #pickup_time_end').on('change', function() { const startTime = $('#pickup_time_start').val(); const endTime = $('#pickup_time_end').val(); if (startTime && endTime && startTime >= endTime) { toastr.error('A hora final deve ser posterior à hora inicial', 'Erro', { closeButton: true, progressBar: true, positionClass: "toast-top-right", timeOut: 5000 }); $('#pickup_time_end').val(''); } // Validate minimum time difference (2 hours) if (startTime && endTime) { // Convert times to minutes for comparison const [startHour, startMinute] = startTime.split(':').map(Number); const [endHour, endMinute] = endTime.split(':').map(Number); const startTotalMinutes = startHour * 60 + startMinute; const endTotalMinutes = endHour * 60 + endMinute; // Check if difference is less than 2 hours (120 minutes) if (endTotalMinutes - startTotalMinutes < 120) { toastr.error('O período de recolha deve ser de pelo menos 2 horas', 'Erro', { closeButton: true, progressBar: true, positionClass: "toast-top-right", timeOut: 5000 }); $('#pickup_time_end').val(''); } } }); JS; $this->registerJS($scriptJS); ?>