diff --git a/web/vue-app/src/assets/edit-forms.css b/web/vue-app/src/assets/edit-forms.css index d3afa0d..6be12ec 100644 --- a/web/vue-app/src/assets/edit-forms.css +++ b/web/vue-app/src/assets/edit-forms.css @@ -46,28 +46,6 @@ input[type='number'], box-sizing: border-box; } -.btn.cancel, -button[type='button'] { - background: #f3f3f3; - color: #666; -} -.btn.save, -button[type='submit'] { - background: #667eea; - color: #fff; - border: none; - border-radius: 8px; - padding: 0.6rem 1.4rem; - font-weight: 600; - font-size: 1rem; - cursor: pointer; - transition: background 0.18s; -} -.btn.save:hover, -button[type='submit']:hover:not(:disabled) { - background: #5a67d8; -} - .loading-message { text-align: center; color: #666; diff --git a/web/vue-app/src/components/ImagePicker.vue b/web/vue-app/src/components/ImagePicker.vue index 10833d0..6dc45cd 100644 --- a/web/vue-app/src/components/ImagePicker.vue +++ b/web/vue-app/src/components/ImagePicker.vue @@ -41,18 +41,7 @@ const onFileChange = async (event: Event) => { if (localImageUrl.value) URL.revokeObjectURL(localImageUrl.value) const { blob, url } = await resizeImageFile(file, 512) localImageUrl.value = url - const idx = availableImages.value.findIndex((img) => img.id === 'local-upload') - if (idx === -1) { - availableImages.value.unshift({ id: 'local-upload', url }) - } else { - availableImages.value[idx].url = url - } - emit('add-image', { - id: 'local-upload', - url, - file: new File([blob], file.name, { type: 'image/png' }), - }) - emit('update:modelValue', 'local-upload') + updateLocalImage(url, new File([blob], file.name, { type: 'image/png' })) } } @@ -100,14 +89,7 @@ const confirmPhoto = async () => { const { blob, url } = await resizeImageFile(originalBlob, 512) localImageUrl.value = url cameraFile.value = new File([blob], 'camera.png', { type: 'image/png' }) - const idx = availableImages.value.findIndex((img) => img.id === 'local-upload') - if (idx === -1) { - availableImages.value.unshift({ id: 'local-upload', url }) - } else { - availableImages.value[idx].url = url - } - emit('add-image', { id: 'local-upload', url, file: cameraFile.value }) - emit('update:modelValue', 'local-upload') + updateLocalImage(url, cameraFile.value) } closeCamera() } @@ -125,6 +107,9 @@ const closeCamera = () => { cameraStream.value.getTracks().forEach((track) => track.stop()) cameraStream.value = null } + if (cameraVideo.value) { + cameraVideo.value.srcObject = null + } } const resumeCameraStream = async () => { @@ -204,6 +189,17 @@ async function resizeImageFile( URL.revokeObjectURL(url) return { blob, url: URL.createObjectURL(blob) } } + +function updateLocalImage(url: string, file: File) { + const idx = availableImages.value.findIndex((img) => img.id === 'local-upload') + if (idx === -1) { + availableImages.value.unshift({ id: 'local-upload', url }) + } else { + availableImages.value[idx].url = url + } + emit('add-image', { id: 'local-upload', url, file }) + emit('update:modelValue', 'local-upload') +}