From 939c982c40f605a4cacd34c2894bf9effb181fcc Mon Sep 17 00:00:00 2001 From: Julian Krauser <jkrauser209@gmail.com> Date: Wed, 30 Apr 2025 10:43:11 +0200 Subject: [PATCH] image upload and keep if not changed --- .../management/setting/ClubImageSetting.vue | 16 ++++++++++------ src/stores/admin/management/setting.ts | 8 ++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/components/admin/management/setting/ClubImageSetting.vue b/src/components/admin/management/setting/ClubImageSetting.vue index 1a1d675..adc4630 100644 --- a/src/components/admin/management/setting/ClubImageSetting.vue +++ b/src/components/admin/management/setting/ClubImageSetting.vue @@ -12,14 +12,14 @@ > Kein eigenes Icon ausgewählt </div> - <img ref="icon_img" class="hidden w-full h-20 object-contain" /> + <img ref="icon_img" class="hidden w-full h-10 object-contain" /> <XMarkIcon v-if="enableEdit && (icon != '' || overwriteIcon)" class="h-5 w-5 cursor-pointer" @click="resetImage('icon')" /> </div> - <input class="hidden!" type="file" ref="icon" accept="image/*" @change="previewImage('icon')" /> + <input class="hidden!" type="file" ref="icon" accept="image/png" @change="previewImage('icon')" /> </div> <div class="w-full"> <p>Vereins-Logo</p> @@ -33,14 +33,14 @@ > Kein eigenes Logo ausgewählt </div> - <img ref="logo_img" class="hidden w-full h-20 object-contain" /> + <img ref="logo_img" class="hidden w-full h-10 object-contain" /> <XMarkIcon v-if="enableEdit && (logo != '' || overwriteLogo)" class="h-5 w-5 cursor-pointer" @click="resetImage('logo')" /> </div> - <input class="hidden!" type="file" ref="logo" accept="image/*" @change="previewImage('logo')" /> + <input class="hidden!" type="file" ref="logo" accept="image/png" @change="previewImage('logo')" /> </div> </BaseSetting> </template> @@ -135,11 +135,15 @@ export default defineComponent({ return this.uploadImage([ { key: "club.icon", - value: (this.$refs.icon as HTMLInputElement).files?.[0], + value: + (this.$refs.icon as HTMLInputElement).files?.[0] ?? + (this.icon != "" && !this.overwriteIcon ? "keep" : undefined), }, { key: "club.logo", - value: (this.$refs.logo as HTMLInputElement).files?.[0], + value: + (this.$refs.logo as HTMLInputElement).files?.[0] ?? + (this.logo != "" && !this.overwriteLogo ? "keep" : undefined), }, ]); }, diff --git a/src/stores/admin/management/setting.ts b/src/stores/admin/management/setting.ts index 98bd8a8..da8b455 100644 --- a/src/stores/admin/management/setting.ts +++ b/src/stores/admin/management/setting.ts @@ -74,10 +74,14 @@ export const useSettingStore = defineStore("setting", { return res; }); }, - async uploadImage(data: { key: "club.logo" | "club.icon"; value?: File }[]): Promise<AxiosResponse<any, any>> { + async uploadImage( + data: { key: "club.logo" | "club.icon"; value?: File | "keep" }[] + ): Promise<AxiosResponse<any, any>> { const formData = new FormData(); for (let entry of data) { - if (entry.value) formData.append(entry.key, entry.value); + if (entry.value) { + formData.append(typeof entry.value == "string" ? entry.key : entry.key.split(".")[1], entry.value); + } } return await http .put("/admin/setting/images", formData, {