From 54d814f9b259f2e6ecb73155f286caa24127761e Mon Sep 17 00:00:00 2001 From: nquidox Date: Tue, 4 Nov 2025 14:20:08 +0300 Subject: [PATCH 1/4] image handling fixes --- src/services/apiClient.js | 4 +- src/views/DetailsView/DetailsViewImages.vue | 59 ++++++++++----------- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/services/apiClient.js b/src/services/apiClient.js index 082f10a..639fb84 100644 --- a/src/services/apiClient.js +++ b/src/services/apiClient.js @@ -7,8 +7,10 @@ let refreshPromise = null function createConfig(options = {}) { const token = localStorage.getItem('accessToken'); + const isFormData = options.body instanceof FormData; + const headers = { - 'Content-Type': 'application/json', + ...(isFormData ? {} : { 'Content-Type': 'application/json' }), ...options.headers, }; diff --git a/src/views/DetailsView/DetailsViewImages.vue b/src/views/DetailsView/DetailsViewImages.vue index 7284760..dc7a258 100644 --- a/src/views/DetailsView/DetailsViewImages.vue +++ b/src/views/DetailsView/DetailsViewImages.vue @@ -54,37 +54,21 @@ function onFileInputChange(event) { event.target.value = '' } -async function handleUpload({ fileList: newFileList }) { - const file = newFileList[newFileList.length - 1] +async function fetchImage(bustCache = false) { try { - await uploadImage(props.merchUuid, file.file) + let imgUrl = getImageUrl(props.merchUuid, 'full') - const { imgUrl } = await getImageUrl(props.merchUuid, 'full') - - message.success('Image uploaded successfully.') - - fileList.value = [ - { - name: file.name, - url: imgUrl, - status: 'finished', - }, - ] - } catch (error) { - message.error('Upload error: ' + (error.message || 'Unknown error.')) - } -} - -onMounted(async () => { - try { - const imgUrl = getImageUrl(props.merchUuid, 'full'); + if (bustCache) { + const separator = imgUrl.includes('?') ? '&' : '?' + imgUrl += `${separator}_t=${Date.now()}` + } await new Promise((resolve, reject) => { - const img = new Image(); - img.src = imgUrl; - img.onload = () => resolve(imgUrl); - img.onerror = () => reject(new Error('Image not found')); - }); + const img = new Image() + img.src = imgUrl + img.onload = () => resolve(imgUrl) + img.onerror = () => reject(new Error('Image not found')) + }) fileList.value = [ { @@ -92,13 +76,28 @@ onMounted(async () => { url: imgUrl, status: 'finished', }, - ]; + ] } catch (error) { - fileList.value = []; + fileList.value = [] if (!error.message.includes('404')) { - console.error('Error getting image: ', error); + console.error('Error getting image:', error) } } +} + +async function handleUpload({ fileList: newFileList }) { + const file = newFileList[newFileList.length - 1] + try { + await uploadImage(props.merchUuid, file.file) + message.success('Image uploaded successfully.') + await fetchImage(true) + } catch (error) { + message.error('Upload error: ' + (error.message || 'Unknown error.')) + } +} + +onMounted(async () => { + await fetchImage(false) }); const showConfirmDelete = ref(false) From 504f215c5ac66b15b51fdf487a9bf39be7193264 Mon Sep 17 00:00:00 2001 From: nquidox Date: Tue, 4 Nov 2025 16:46:37 +0300 Subject: [PATCH 2/4] zero prices fixes --- src/views/ZeroPricesView.vue | 21 ++++++++++++++++--- src/views/ZeroPricesView/ZeroPriceCard.vue | 15 ++++++------- .../ZeroPricesView/ZeroPricesToolbar.vue | 10 ++++++++- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/views/ZeroPricesView.vue b/src/views/ZeroPricesView.vue index adab776..6e5820e 100644 --- a/src/views/ZeroPricesView.vue +++ b/src/views/ZeroPricesView.vue @@ -17,10 +17,17 @@ const handleToggle = ({ id, merch_uuid, checked }) => { } } +const handleSelectAll = () => { + toDelete.value = zeroPrices.value.map(item => ({ + id: item.id, + merch_uuid: item.merch_uuid + })) +} + const fetchZeroPrices = async () => { try { const response = await getZeroPrices() - zeroPrices.value = response.data + zeroPrices.value = Array.isArray(response.data) ? response.data : [] } catch (error) { console.error(error) } @@ -43,10 +50,18 @@ onMounted(() => {
- +
- +
diff --git a/src/views/ZeroPricesView/ZeroPriceCard.vue b/src/views/ZeroPricesView/ZeroPriceCard.vue index 10c80d7..44236ee 100644 --- a/src/views/ZeroPricesView/ZeroPriceCard.vue +++ b/src/views/ZeroPricesView/ZeroPriceCard.vue @@ -1,21 +1,22 @@ @@ -24,7 +25,7 @@ const handleCheckboxChange = () => {
- + Delete diff --git a/src/views/ZeroPricesView/ZeroPricesToolbar.vue b/src/views/ZeroPricesView/ZeroPricesToolbar.vue index 122e3d5..abe01cb 100644 --- a/src/views/ZeroPricesView/ZeroPricesToolbar.vue +++ b/src/views/ZeroPricesView/ZeroPricesToolbar.vue @@ -10,7 +10,7 @@ const props = defineProps({ const messages = useMessage() const { deleteZeroPrices } = useZeroPrices() -const emit = defineEmits(['deleted']) +const emit = defineEmits(['deleted', 'selectAll']) const handleDelete = async () => { try { @@ -22,6 +22,11 @@ const handleDelete = async () => { messages.error("Error deleting selected prices") } } + +const handleSelectAll = async () => { + emit('selectAll') +} +