Parcourir la source

fix: improved warehouse modal and added missing translations

unknown il y a 1 jour
Parent
commit
c6b521eff5
2 fichiers modifiés avec 66 ajouts et 14 suppressions
  1. 24 14
      src/components/admin/WarehouseSection.vue
  2. 42 0
      src/locales/translations.admin.json

+ 24 - 14
src/components/admin/WarehouseSection.vue

@@ -80,29 +80,30 @@
 
     <!-- Add/Edit Modal -->
     <div v-if="showAddModal" class="fixed inset-0 z-[10000] flex items-center justify-center p-4">
-      <div class="absolute inset-0 bg-background/90 backdrop-blur-md" @click="closeModal" />
+      <div class="absolute inset-0 bg-background/95 backdrop-blur-xl" @click="closeModal" />
       <div class="relative w-full max-w-md bg-card border border-primary/20 rounded-3xl p-8 shadow-2xl">
         <h3 class="text-xl font-black font-display text-gradient mb-6">
-          {{ editingId ? t('admin.modals.editMaterial') : t('admin.actions.add') }}
+          {{ editingId ? t('admin.modals.editStock') : t('admin.modals.addStock') }}
         </h3>
         
-        <form @submit.prevent="handleSubmit" class="space-y-4">
+        <form v-if="materials && materials.length > 0" @submit.prevent="handleSubmit" class="space-y-4">
           <div class="space-y-1">
-            <label class="text-[10px] font-bold uppercase text-muted-foreground ml-1">{{ t('admin.fields.material') }}</label>
-            <select v-model="form.material_id" required class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none">
-              <option v-for="m in materials" :key="m.id" :value="m.id">{{ m.name_en }}</option>
+            <label class="text-[10px] font-black uppercase text-muted-foreground ml-1 tracking-widest">{{ t('admin.fields.material') }}</label>
+            <select v-model="form.material_id" required class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none appearance-none">
+              <option value="0" disabled>{{ t('admin.actions.select') || 'Select material...' }}</option>
+              <option v-for="m in materials" :key="m.id" :value="m.id">{{ m.name_en || m.name_ru }}</option>
             </select>
           </div>
 
           <div class="space-y-1">
-            <label class="text-[10px] font-bold uppercase text-muted-foreground ml-1">{{ t('admin.fields.colors') }}</label>
-            <input v-model="form.color_name" required placeholder="Ex: Black, Emerald, Red..." class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none" />
+            <label class="text-[10px] font-black uppercase text-muted-foreground ml-1 tracking-widest">{{ t('admin.fields.color') }}</label>
+            <input v-model="form.color_name" required placeholder="Ex: Black, Red, Gold..." class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none" />
           </div>
 
           <div class="grid grid-cols-2 gap-4">
             <div class="space-y-1">
-              <label class="text-[10px] font-bold uppercase text-muted-foreground ml-1">{{ t('admin.fields.quantity') }}</label>
-              <input v-model.number="form.quantity" type="number" step="0.1" class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none" />
+              <label class="text-[10px] font-black uppercase text-muted-foreground ml-1 tracking-widest">{{ t('admin.fields.quantity') }}</label>
+              <input v-model.number="form.quantity" type="number" step="0.1" required class="w-full bg-background border border-border/50 rounded-xl px-4 py-3 text-sm focus:ring-2 ring-primary/20 outline-none" />
             </div>
             <div class="space-y-1 flex flex-col justify-end pb-2">
               <label class="flex items-center gap-2 cursor-pointer group">
@@ -110,18 +111,27 @@
                 <div class="w-5 h-5 rounded border border-border/50 flex items-center justify-center group-hover:border-primary transition-colors" :class="form.is_active ? 'bg-primary border-primary' : ''">
                   <Check v-if="form.is_active" class="w-3 h-3 text-white" />
                 </div>
-                <span class="text-xs font-bold uppercase">{{ t('admin.fields.publishImmediately') }}</span>
+                <span class="text-[10px] font-black uppercase tracking-wider text-muted-foreground">{{ t('admin.fields.active') || 'Active' }}</span>
               </label>
             </div>
           </div>
 
           <div class="flex gap-4 pt-4">
-             <button type="button" @click="closeModal" class="flex-1 px-4 py-3 rounded-xl border border-border/50 hover:bg-white/5 transition-colors text-xs font-bold">{{ t('admin.actions.cancel') }}</button>
-             <button type="submit" class="flex-2 bg-primary text-white px-8 py-3 rounded-xl text-xs font-bold hover:shadow-glow transition-all">
-               {{ editingId ? t('admin.actions.save') : t('admin.actions.add') }}
+             <button type="button" @click="closeModal" class="flex-1 px-4 py-3 rounded-xl border border-border/50 hover:bg-white/5 transition-colors text-xs font-black uppercase tracking-widest">
+               {{ t('common.actions.cancel') || 'Cancel' }}
+             </button>
+             <button type="submit" class="flex-2 bg-primary text-white px-8 py-3 rounded-xl text-xs font-black uppercase tracking-widest hover:shadow-glow transition-all">
+               {{ editingId ? t('common.actions.save') : t('admin.actions.add') }}
              </button>
           </div>
         </form>
+        <div v-else class="text-center py-10">
+          <PackageOpen class="w-12 h-12 text-muted-foreground/20 mx-auto mb-4" />
+          <p class="text-xs text-muted-foreground uppercase font-black tracking-widest mb-6">No materials found in catalog</p>
+          <button @click="closeModal" class="px-6 py-2 bg-primary text-white rounded-xl text-[10px] font-black uppercase tracking-widest">
+            {{ t('common.actions.close') || 'Close' }}
+          </button>
+        </div>
       </div>
     </div>
   </div>

+ 42 - 0
src/locales/translations.admin.json

@@ -429,6 +429,36 @@
         "ru": "Slug (URL)",
         "ua": "Slug (URL)"
       },
+      "material": {
+        "en": "Material",
+        "me": "Materijal",
+        "ru": "Материал",
+        "ua": "Матеріал"
+      },
+      "color": {
+        "en": "Color Name",
+        "me": "Naziv boje",
+        "ru": "Название цвета",
+        "ua": "Назва кольору"
+      },
+      "quantity": {
+        "en": "Quantity / Weight",
+        "me": "Količina / Težina",
+        "ru": "Количество / Вес",
+        "ua": "Кількість / Вага"
+      },
+      "notes": {
+        "en": "Notes",
+        "me": "Napomene",
+        "ru": "Заметки",
+        "ua": "Замітки"
+      },
+      "status": {
+        "en": "Status",
+        "me": "Status",
+        "ru": "Статус",
+        "ua": "Статус"
+      },
       "snapshotInfo": {
         "en": "These are the parameters recorded at the moment of order submission.",
         "me": "Ovo su parametri zabilježeni u trenutku slanja narudžbe.",
@@ -601,6 +631,18 @@
         "ru": "Изменить материал и цвет",
         "ua": "Змінити матеріал та колір"
       },
+      "editStock": {
+        "en": "Edit Stock Item",
+        "me": "Uredi stavku skladišta",
+        "ru": "Редактировать остаток",
+        "ua": "Редагувати залишок"
+      },
+      "addStock": {
+        "en": "Add Stock Item",
+        "me": "Dodaj stavku na sklad",
+        "ru": "Добавить на склад",
+        "ua": "Додати на склад"
+      },
       "createMaterial": {
         "en": "Create New Material",
         "me": "Novi materijal",