Girdiler

Olobase Admin girdi bileşenleri, mevcut API kaynak nesnesinin belirli özelliklerinin düzenlenmesine olanak tanır. Temel olarak görünüm oluşturmak ve düzenlemek için form'larda kullanılır. VaList için filtre girişi olarak da kullanılabilir. Kaynak desteği için, öğe eklemeyi ve hata mesajlarıyla model sağlamayı işleyen VaForm bileşeni içinde kullanılması gerekir.

Kaynak ve Model

Va girdileri hem kaynak hem de model desteğini destekler. Kaynak, değerin getirileceği orijinal özellik nesnesidir ve model, veri sağlayıcınıza gönderilecek yeni değerle birlikte son özellik adı olacaktır.

Nokta Gösterim Desteği

Olobase Admin girişleri kaynak desteği için nokta gösterimini kabul eder. İçiçe nesne için çok kullanışlıdır:

<template>
  <va-text-input source="address.street"></va-text-input>
  <va-text-input source="address.postcode"></va-text-input>
  <va-text-input source="address.city"></va-text-input>
</template>

Yukarıdaki örnekte görüldüğü gibi doğrudan adres nesnesinin sokak özelliğinin değerini alınıyor. Veri sağlayıcınıza gönderilecek son form model verileri de bu iç içe geçmiş yapıya uygundur.

Olobase Admin Girdileri

Bu bölümde packages/admin/src/components/ui/inputs klasöründeki Olobase Admin girdi bileşenlerine değinilecektir.

Text

Temel metin girişi yoluyla metin değeri türü için metin düzenler. Çok satırlı destek aracılığıyla uzun metinler için textarea modunu destekler. Herhangi bir tarih, tarihsaat veya saat düzenlemesi için kullanılabilir; tarih, tarihsaat-yerel veya saate göre ayarlanan türü kullanın. İşlem tarayıcı desteğine bağlı olacaktır.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Editable

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
type string Metin girişi türü. Tüm HTML türlerine izin verilir.
multiline boolean Metin girişini textarea'ya dönüştürün.
variant string Bileşene farklı stiller uygular (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).

Örnek

Form

<template>
 <v-row>
   <v-col lg="3" md="4" sm="6">
     <va-text-input :label="$t('demo.text')" source="founder"></va-text-input>
   </v-col>
   <v-col lg="3" md="4" sm="6">
     <va-text-input :label="$t('demo.text')" source="headquarter"></va-text-input>
   </v-col>
 </v-row>
 <v-row>
   <v-col lg="3" md="4" sm="6">
     <va-text-input :label="$t('demo.text')" source="description" multiline></va-text-input>
   </v-col>
 </v-row>
</template>

Password

Şifre alanları için kullanılır. Geçerli giriş için gösterme/gizleme davranışı vardır.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
variant string Bileşene farklı stiller uygular (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).

Örnek

Form

<template>
 <v-row>
   <v-col lg="3" md="4" sm="6">
     <va-password-input label="Password" source="password"></va-password-input>
   </v-col>
 </v-row>
</template>

Number

Sayı düzenleme için optimize edilmiştir. Min, max ve step özelliklerini destekler.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Editable

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
v-model string Düzenlenecek metin.
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
step number Aralık adımı.
min number Kabul edilen minimum değer.
max number Kabul edilen maksimum değer.

Örnek

Form

<template>
 <v-row>
   <v-col lg="3" md="4" sm="6">
      <va-number-input source="level" label="Level" :step="1" :min="0" :max="99"></va-number-input>
   </v-col>
 </v-row>
</template>

Date

Tarih türü değerini düzenlemek için kullanılır. Vuetify tarih seçiciyle ilişkili salt okunur bir metin alanından oluşur. Zamanı değerini desteklemez, bu durum için klasik VaTextInput'u kullanın.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Editable

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
header string Başlık altında gösterilen bölüme bir metin yazmanızı sağlar. Varsayılan değer boş.
format string Kullanılacak tarih formatı. Örneğin: (dd-mm-YYYY).
allowedDates function, array Hangi tarihlerin seçilebileceğini kısıtlar.
color string Belirtilen rengi bileşene uygular - yardımcı renkleri (örneğin success veya purple) veya css rengini (örneğin success veya purple) veya css rengini (#033 veya rgba(255, 0, 0, 0,5)) gibi destekler. Varsayılan değer: primary.
elevation string, number Bileşene 0 ile 24 arasında uygulanan bir yüksekliği belirtir. Daha fazla bilgiyi yükseklik sayfasında bulabilirsiniz.
hideHeader boolean Bileşenin başlık bölümünü tamamen gizler (Varsayılan: false).
height string, number Bileşenin yüksekliğini ayarlar.
width string, number Bileşenin genişliğini ayarlar.
max string, number, date İzin verilen maksimum tarih/ay (ISO 8601 biçimi).
maxHeight string, number Bileşenin maksiumum yüksekliğini ayarlar.
maxWidth string, number Bileşenin maksiumum genişliğini ayarlar.
min string, number, date İzin verilen minumum tarih/ay (ISO 8601 biçimi).
minHeight string, number Bileşenin minumum yüksekliğini ayarlar.
minWidth string, number Bileşenin minumum genişliğini ayarlar.
multiple boolean Birden fazla tarih seçimine izin ver.
position boolean Bileşenin konumunu ayarlar. (static, relative, fixed, absolute, sticky).
rounded string, number, boolean Bileşene uygulanan kenar yarıçapını belirtir.
showAdjacentMonths boolean Önceki ve sonraki ayların günlerinin görünürlüğünü değiştirir.
showWeek boolean Takvimin gövdesindeki hafta numaralarının görünürlüğünü değiştirir.
hideActions boolean Seçme eylemlerini gizler.
hideWeekdays boolean Hafta içi günleri gizler.
inputPlaceholder string Girdiye ait placeholder değerini atar.
variant string Bileşene farklı stiller uygular (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
viewMode string Ay ya da yıl görünümü arasında geçiş sağlar (month, year).
disabled boolean Bileşene tıklama özelliğini kaldırır.

Örnek

Form

<template>
 <v-row>
   <v-col lg="3" md="4" sm="6">
      <va-date-input source="publishDate" label="Publish Date" format="shortFormat"></va-date-input>
   </v-col>
 </v-row>
</template>

Boolean

Boolean girdi türüne değer boolean ya da 0/1 olarak gönderildiğinde girdi bir düğme olarak gösterilir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Editable

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.

Örnek

Form

<template>
 <v-row>
   <v-col lg="3" md="4" sm="6">
      <va-boolean-input source="active" label="Active"></va-boolean-input>
   </v-col>
 </v-row>
</template>

Rating

Sayı değerini derecelendirme yıldızları olarak düzenleyin. Yarım artışlar etkinse değer geçerli bir tam sayı veya ondalık sayı olmalıdır. Simgeler, Vuetify ayarlarında $ratingFull, $ratingEmpty ve $ratingHalf aracılığıyla düzenlenebilir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Rating
  • Editable
Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
active-color string Bileşene etkin durumdayken uygulanan renk.
clearable boolean Geçerli değere tıklanarak bileşenin temizlenmesine olanak sağlar.
color string Belirtilen rengi denetime uygular
density string Bileşenin kullandığı dikey yüksekliği ayarlar. (default, comfortable, compact).
disabled boolean Bileşene tıklama özelliğini kaldırır.
empty-icon string, array, function Boş olduğunda görüntülenen simge.
full-icon string, array, function Dolu olduğunda görüntülenen simge.
half-increments boolean Yarım artışların seçimine izin verir.
hover boolean Görsellik sağlar simgelerin üzerine gelindiğinde geri bildirim.
item-aria-label string Öğe etiketlerinin ayarlar.
item-label-position string Öğe etiketlerinin konumu 'top' ve 'bottom'ı kabul eder.
item-labels array Her öğenin yanında görüntülenecek etiket dizisi.
length string, number Gösterilecek öğe miktarı
model-value string, number Bileşenin v-model değeri. Bileşen çoklu desteği destekliyorsa, bu varsayılan olarak boş bir diziye dönüşür.
name string Bileşenin ad özelliğini ayarlar.
readonly boolean Tüm fareyle üzerine gelme efektlerini ve işaretçi olaylarını kaldırır.
size string, number Bileşenin yüksekliğini ve genişliğini ayarlar. Varsayılan birim pikseldir. (x-small, small, default, large, x-large).

Örnek

Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-rating-input source="rating" length="10" half-increments></va-rating-input>
    </v-col>
  </v-row>
</template>

Rich Text

Tiptap kullanarak bir Wysiwyg HTML editörü oluşturur.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.

Örnek

Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-rich-text-editor
        :label="$t('demo.richtext')"
        source="richtext"
        v-model="model.richText"
        :active-buttons="[
          'bold',
          'italic',
          'strike',
          'underline',
          'code',
          'h1',
          'h2',
          'h3',
          'bulletList',
          'orderedList',
          'blockquote',
          'codeBlock',
          'horizontalRule',
          'undo',
          'redo',
        ]"
      >
      </va-rich-text-editor>
    </v-col>
  </v-row>
</template>

Tiny MCE

Tiny MCE GPL lisansını kullanarak bir Wysiwyg HTML editörü oluşturur.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.

Örnek

Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-tiny-mce-editor
        :options="{ min_height: 250 }"
        v-model="model.richText"
      >
      </va-tiny-mce-editor>
    </v-col>
  </v-row>
</template>

Select

Bir seçim listesinden değer veya değerler seçmenizi sağlar. Çoklu seçimleri ve referansları destekler. Hiçbir seçenek yoksa, varsayılan olarak, src/I18n/locales/tr.json dosyasından kaynak içeren yerelleştirilmiş listeleri alabilir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Multiple
  • Editable
  • Choices
  • Search

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
reference string Aranacak kaynağın adı
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
multiple boolean Çoklu seçimi aktif hale getirir.

Örnek

Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-select-input
        label="Select"
        clearable
        multiple
        reference="employeegrades"
        v-model="model.grades"
      >
      </va-select-input>
    </v-col>
  </v-row>
</template>

Yerel Enumerik Değerler

Burada açıklandığı gibi tüm yeniden kullanım seçeneklerini doğrudan yerel ayarlarınızda merkezileştirebilirsiniz. Hiçbir seçenek ayarlanmadıysa, VaSelectInput şu geçerli çevrilmiş anahtar biçimini arayacaktır: resources.{resource}.enums.{source}.{value}

Referanslar

Mevcut kaynak referansından seçim yapmak istiyorsanız referans opsiyonunu aşağıdaki gibi kullanın:

<template>
  <va-select-input
    source="companyId"
    model="companyId"
    reference="companies"
    :filter="{ active: true }"
  ></va-select-input>
</template>

Yukarıdaki örnek tüm şirketleri api servisinden getirecek ve bunları seçenek olarak listeleyecektir. Filtreleme için filtre opsiyonunu kullanın. Arka uç tarafındaki şema adının kaynaktan farklı olması durumunda model seçeneğini kullanabilirsiniz. Aksi durumda bu seçeneği kullanmanız gerekli değildir.

İnteraktif Seçim Alanları

Bir seçim alanını seçtikten sonra başka bir seçim alanını etkileşimli olarak değiştirmek istiyorsanız aşağıdaki örnekteki koda göz atın.

Form

<va-select-input
  source="companyId"
  v-model="model.companyId"
  reference="departments"
  variant="outlined"
></va-select-input>

<va-select-input
  source="departmentId"
  :key="model.companyId"
  :filter="{ companyId: model.companyId }"
  v-model="model.departmentId"
  reference="departments"
  variant="outlined"
></va-select-input>

Radio Group

Bir seçim listesinden değer seçmenizi sağlar. Referansları destekler. Hiçbir seçenek yoksa, varsayılan olarak, src/I18n/locales/tr.json dosyasından kaynak içeren yerelleştirilmiş listeleri alabilir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Choices
  • Search

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
reference string Aranacak kaynağın adı.
inline boolean Seçenekleri yatay olarak gösterir. (Varsayılan: false).

Örnek

Form Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-radio-group-input
        clearable
        label="Currencies"
        v-model="model.radios"
        reference="currencies"
      >
      </va-radio-group-input>
    </v-col>
    <v-col lg="3" md="4" sm="6">
      <va-radio-group-input
        clearable
        inline
        label="Currencies"
        v-model="model.radios"
        reference="currencies"
      >
      </va-radio-group-input>
    </v-col>
  </v-row>
</template>

Referanslar

Yukarıdaki ilgili VaSelectInput referans açıklamasının aynısı geçerlidir, çoklu seçenek desteklenmez.

AutoComplete

Aranabilir seçenekler arasından değer veya değerler seçimi sağlar. Çoklu seçim ve referansları destekler. API servisinizden bağlantılı kaynakların aranmasına izin verir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Multiple
  • Choices
  • Search

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
reference string Aranacak kaynağın adı.
minChars number Arama sorgusu başlatılmadan önce dokunulması gereken minimum karakterler.
searchQuery string API servisinizde arama yapmak için istek sorgusunun adı. (Varsayılan değer: "q")
taggable boolean Etiketlenebilir modu etkinleştirin. Otomatik tamamlamayı açılan kutuya dönüştürün.

Slotlar

Ad Açıklama
selection Özel bir seçim görünümü tanımlayın.
item Özel bir öğe görünümü tanımlama.

Örnek

Form

<template>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-auto-complete-input
        density="compact"
        source="userId"
        resource="employees"
        reference="employees"
        variant="outlined"
        multiple
      >
        <template v-slot:chip="{ props, item }">
          <v-chip v-if="item.raw.name"
            class="cursor-pointer"
            v-bind="props"
            :text="item.raw.name"
          >
           {{ item.raw.name }}
          </v-chip>
        </template>
      </va-auto-complete-input>
    </v-col>
  </v-row>
</template>

searchQuery ve minChars:

Arama yapmadan önce gereken minimum karakteri ve varsayılan olarak q olan sorgu arama parametre anahtarını yapılandırmak için minChars ve searchQuery'yi kullanın. Bu element GetList veri sağlayıcı yöntemini özel bir arama filtresiyle yeniden kullanacak.

Daha iyi performans için API sorgusunun aşırı alımını azaltmak amacıyla fields opsiyonunu kullanın.

taggable

Otomatik tamamlama, etiketlenebilir desteği etkinleştirdiğiniz anda birleşik giriş kutusu bileşenine dönüştürülecektir. Anında yeni etiketler oluşturmanıza olanak tanır.

File

Tek satır halinde dosya yüklemelerine izin verir. Bir veya birden fazla yüklemelerin her ikisi de aynı anda desteklenir. Yüklenen dosyaların önizlemesini göstermek için VaFileField veya VaImageField'ı bu elementle birlikte kullanın.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Multiple

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
itemValue string Silinecek dosyaları tanımlamak için kimlik değerinin nereden alınacağını belirtir. (Varsayılan: "id").
accept string Basit istemci tarafı doğrulaması için HTML5 `kabul etme` özelliğini ekler.
base64 boolean Yüklemenin base64 kodlama ile yapılmasını sağlar.
tableName string Veritabanında genel yükleme dosyalarının tutulduğu tablonun adı.
download boolean Tıkla ve dosya indir seçeneğini aktif eder.

Örnek

Form

<template>
  <v-row no-gutters>
    <v-col sm="3" class="mr-3">
      <va-file-field 
        source="files" 
        :item="model" 
        action-type="download"
        table-name="employeeFiles"
      ></va-file-field>
    </v-col>
  </v-row>
  <v-row>
    <v-col lg="3" md="4" sm="6">
      <va-file-input
        source="files" 
        table-name="employeeFiles"
      ></va-file-input>
    </v-col>
  </v-row>
</template>

Array Table

Tablo biçiminde dizi olarak birden fazla veri girişine izin verir. Yeni veri ekleme, silme ve veri güncellemeyi destekler.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
class String Dizi tablosu etrafını saran div elementinin html class niteliğine bir değer atar.
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
title string Dizi tablosunun başlığını belirler.
headers array Dizi tablosunun sütun başlıklarını belirlerir.
fields array Dizi tablosundan kullanılacak va-girdilerini yerleştirir.
primaryKey string Dizi'ye ait anahtar alan adını ayarlar. Bu ad arka uç taraflı doğrulama ve veritabanı kayıdı için gereklidir.
errorMessages array Atanan form doğrulama hatalarının gösterilmesini sağlar.

Slotlar

Ad Açıklama
top İhtiyaç duyulduğunda dizi başlığına ait bölümü düzenler.
bottom Dizi tablosunun en alt bölümünü düzenler.
headers Dizi tablosuna ait sütunları özelleştirir.
item.actions Dizi tablosuna ait işlemler bölümünü özelleştirir.

Olaylar

Array Table olayları form kaydetme aşamadından sonra sunucudan dönen yanıtları alarak buna göre aksiyon almanızı kolaylaştırır.

Olay Adı Açıklama
save Form satırı kayıt edildikten sonra silinen veriye ait nesneye erişmenizi sağlar.
delete Form satırı silindikten sonra silinen veriye ait nesneye erişmenizi sağlar.
edit Form satırı açıkken düzenlenen veriye ait nesneye erişmenizi sağlar.

Örnek

Form

<template>
  <v-row no-gutters>
    <v-col lg="8" md="12" sm="12">
      <va-array-table-input
        source="employeeChildren"
        :title="$t('resources.employees.fields.employeeChildren')"
        primary-key="childId"
        :headers="headers"
        :fields="fields"
        :generate-uid="true"
      >
       <template v-slot:[`input.childName`]="{ field }">
         <va-text-input
           :key="field.source"
           v-model="employeeChildrenForm.childName"
           variant="outlined"
           :error-messages="childNameErrors"
           clearable
         >
         </va-text-input>
       </template>
       <template v-slot:[`input.childBirthdate`]="{ field }">
         <va-date-input
           :key="field.source"
           v-model="employeeChildrenForm.childBirthdate"
           variant="outlined"
           :error-messages="childBirthdateErrors"
         >
         </va-date-input>
       </template>
      </va-array-table-input>
    </v-col>
  </v-row>
</template>
<script>
import { useVuelidate } from "@vuelidate/core";
import { required, maxLength, numeric } from "@vuelidate/validators";
import Utils from "vuetify-admin/src/mixins/utils";
import Resource from "vuetify-admin/src/mixins/resource";
import { provide } from 'vue'

export default {
  props: ["id", "item"],
  mixins: [Utils, Resource],
  setup() {
    let vuelidate = useVuelidate();
    provide('v$', vuelidate)
    return { v$: vuelidate }
  },
  data() {
    return {
      model: {
        id: null,
        employeeChildren: null,
      },
      employeeChildrenHeaders: [
        { key: "childName", width: "40%" },
        { key: "childBirthdate", width: "40%" },
        { key: "actions" },
      ],
      employeeChildrenFields: [
        {
          source: "childName",
          type: "text",
        },
        {
          source: "childBirthdate",
          type: "date",
        },
      ]
    };
  },
  validations() {
    return {
      // model: {},
      employeeChildrenForm: {
        childName: {
          required,
        },
        childBirthdate: {
          required,
        }
      }
    }
  },
  created() {
    this.model.id = this.generateId(this);
  },
  computed: {
    employeeChildrenForm: {
      get() {
        return this.$store.getters[`${this.resource}/getRow`];
      },
      set(val) {
        this.$store.commit(`${this.resource}/setRow`, val);
      } 
    },
    childNameErrors() {
      const errors = [];
      const field = "childName";
      if (!this.v$["employeeChildrenForm"][field].$dirty) return errors;
      this.v$["employeeChildrenForm"][field].required.$invalid &&
        errors.push(this.$t("v.text.required"));
      return errors;
    },
    childBirthdateErrors() {
      const errors = [];
      const field = "childBirthdate";
      if (!this.v$["employeeChildrenForm"][field].$dirty) return errors;
      this.v$["employeeChildrenForm"][field].required.$invalid &&
        errors.push(this.$t("v.text.required"));
      return errors;
    },
  },
}
</script>

Avatar

Kesme ve küçültme seçenekleri ile kullanıcıya ait bir profil resminin oluşturulmasını kolaylaştırır.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
backgroundColor string Arka plan rengini belirler. Varsayılan değer #ededed değeridir.
defaultSrc string Varsayılan olarak gösterilen resmi belirler. Varsayılan değer /src/assets/avatar_2x.png değeridir.
setLabel string Avatar ekleme işlemine ait tuşun etiketini belirler.
delLabel string Avatar silme işlemine ait tuşun etiketini belirler.

Örnek

Form

<template>
  <v-row no-gutters>
    <v-col sm="3" class="mr-3">
      <va-avatar-input
        source="avatarImage"
        :set-label="$t('resources.account.fields.avatar.set')"
        :del-label="$t('resources.account.fields.avatar.delete')"
      >
      </va-avatar-input>      
    </v-col>
  </v-row>
</template>

Check List

Birinci seviyede alt alta gruplanmış checkbox input bileşenlerinin birlikte oluşturulmasını sağlar. Açılıp kapanma (toggle) özelliği, tüm girdilerin bir üst checkbox ile seçilebilmesi ve liste içinde arama gibi özellikler varsayılan olarak desteklenir.

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
disableSearch boolean Üst kısımda çıkan arama özelliğini gizler/gösterir. (Varsayılan: false).
disableFooter boolean Alt kısımda çıkan sayfalama özelliğini gizler/gösterir. (Varsayılan: false).
primaryKey string Gruplama işlemleri için birincil anahatar adını belirler.
itemsPerPage string Sayfalama başına gösterilecek veri sayısını belirler.
headers array Sütun başlıklarını belirler.
fields string Sütun alanlarını belirler.
initUrl string Tüm listeyi getiren arka uç url adresini belirler.
groupBy string Girilen değere göre hangi sütunun gruplanacağını belirler.

Örnek

Form

<template>
  <h2 class="h2 mb-4">
    {{ $t("menu.permissions") }}
  </h2>
  <v-row no-gutters>
    <v-col cols="6">
      <va-check-list-input
        source="rolePermissions"
        :headers="headers"
        :fields="fields"
        primary-key="permId"
        items-per-page="25"
        :group-header="$t('resources.roles.fields.moduleName')"
        group-by="moduleName"
        init-url="/permissions/findAll"
      >
      </va-check-list-input>    
    </v-col>
  </v-row>
</template>
<script>
import utils from "vuetify-admin/src/mixins/utils";
import { provide } from 'vue'

export default {
  props: ["id", "item"],
  mixins: [utils],
  setup() {
    let vuelidate = useVuelidate();
    provide('v$', vuelidate)
    return { v$: vuelidate }
  },
  data() {
    return {
      rolePermissions: [],
      model: {
        rolePermissions: null,
      },
      fields: [
        { source: "moduleName" },
        { source: "action" },
        { source: "route" },
        { source: "method"},
      ],
    };
  },
  computed: {
    headers() {
      return [
        {
          key: "moduleName",
          sortable: false,
        },
        {
          key: "action",
          sortable: false,
        },
        {
          key: "route",
          sortable: false,
        },
        {
          key: "method",
          sortable: false,
        },
      ];
    }
  }
}
</script>

Color Picker

HEX renk kodlarının seçilmesini kolaylaştıran bileşeni oluşturur.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
color string Bileşenin genel rengini belirler.
border string Bileşene kenarlık stilleri uygular.
rounded boolean, string, number Bileşene uygulanan kenar yarıçapını belirtir.
dotSize string Tuval üzerindeki seçim noktasının boyutunu değiştirir.
hideCanvas boolean Tuvali gizler.
canvasHeight string, Number Tuvalin yüksekliğini belirler.
mode string Geçerli seçili giriş türü. v-model:mode ile girdi senkronize edilebilir. Alabileceği Değerler: 'rgb' | 'rgba' | 'hsl' | 'hsla' | 'hex' | 'hexa'
modes Array Kullanılabilir giriş türlerini ayarlar. Verilebilecek Değerler: ['rgb', 'rgba', 'hsl', 'hsla', 'hex', 'hexa'].
hideInputs boolean Girdi alanlarını gizler. (Varsayılan: false).
hideSliders boolean Girdi alanlarını gizler. (Varsayılan: false).
showSwatches boolean Tuval üzerinde renk örneklerini görüntüler. (Varsayılan: false).
swatchesMaxHeight string, Number Renk örnekleri bölümünün maksimum yüksekliğini ayarlar.
position string Bileşenin konumunu ayarlar. (Varsayılan: undefined). Alabileceği Değerler: 'static' | 'relative' | 'fixed' | 'absolute' | 'sticky'.
width string Renk seçicinin genişliğini ayarlar.
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).

Örnek

Form

<template>
  <v-row no-gutters>
    <v-col sm="3" class="mr-3">
      <va-color-picker-input
        source="themeColor"
        resource="account"
        dot-size="25"
        mode="hexa"
        show-swatches
        swatches-max-height="150"
        v-model="themeColor"
        :error-messages="themeColorErrors"
      ></va-color-picker-input>
    </v-col>
  </v-row>
</template>

Currency

Para birimi gösterimi için vue-currency-input bileşenini kullanarak mevcut değeri varolan param birimine göre biçimlendirir.

Mixinler

  • Input
  • InputWrapper
  • Source
  • Resource
  • Editable

Özellikler

Özellik Tür Açıklama
source string Gösterilecek değeri getirmek için kaynağın özelliği. Slot kullanılmış nesne için nokta gösterimini destekler.
model string Varsayılan olarak source, create/update için API servisine gönderilecek son ad olacaktır. Bu destek, bu varsayılan davranışı geçersiz kılmanıza olanak tanır.
variant string Bileşene farklı stiller uygular. (outlined, plain, underlined, solo, filled, solo-filled, solo-inverted).
options object vue-currency-input opsiyonlarını girmenizi sağlar. Örnek: options="{ currency: "USD", precision: 2 }

Örnek

Form

<template>
  <v-row no-gutters>
    <v-col lg="3" md="4" sm="6">
      <va-select-input
        :label="$t('demo.currencyId')"
        reference="currencies"
        v-model="model.currencyId"
      >
      </va-select-input>
      <va-currency-input
        clearable
        :label="$t('demo.amount')"
        v-model="model.amount"
        :key="'amount_' + getCurrencyId"
        :options="{ currency: getCurrencyId, precision: 2 }"
      ></va-currency-input>
    </v-col>
  </v-row>
</template>
<script>
export default {
  data() {
    return {
      model: {
        amount: 0,
        currencyId: { id: "USD", name: "Usd" },
      },
    };
  },
  computed: {
    getCurrencyId() {
      if (this.model && this.model.currencyId && this.model.currencyId.id) {
        return this.model.currencyId.id;
      }
      return "TRY";
    },
  }
};
</script>

Sheet

Yüksek sayıdaki excel verilerini okuyup cli modunda veritabanına eklemenize olanak sağlayan girdi bileşenidir. İçeri alınan verileri kaydetmek için kendi oluşturduğunuz bir sheet kaydetme şablonu ile kullanılmalıdır.

Örnek

  1. Takip eden resim dosya yükleme aşamasını gösteriyor.

Form

  1. Takip eden resim dosya yüklendikten sonraki aşamayı gösteriyor.

Form

<template>
   <va-list 
      disable-create
      :filters="filters"
      :fields="fields"
      :items-per-page="50"
   >
      <va-data-table-server
         row-edit
         row-create
         disable-edit
         disable-create
         disable-clone
         disable-show
         :disable-empty-data-row-create="true"
      >
         <template v-slot:row.actions="{ item }">
            <v-btn
               :item="item"
               :label="$t('va.actions.show')"
               :color="'blue'"
               variant="text"
               exact
               @click.stop="getRoute(item)"
            >
               <v-icon size="small">mdi-eye</v-icon>
            </v-btn>
         </template>
      </va-data-table-server>
   </va-list>

 <v-card
      class="mx-auto mt-2"
      variant="flat"
   >
      <template v-slot:title>
         {{ $t("resources.jobtitles.createNewList") }}
      </template>
      <v-card-text>
         <div>
            {{ $t("resources.jobtitles.importDescription") }}
         </div>
      </v-card-text>
      <v-card-actions>
         <v-btn 
            color="primary"
            @click="downloadEmptyXls()">
            {{ $t("resources.jobtitles.downloadXls") }}
         </v-btn>
      </v-card-actions>
   </v-card>

   <v-card
      variant="flat"
      class="mt-2"
   >
      <v-card-text>
         <v-row class="mt-2">
            <v-col sm="2">
               <va-select-input
                  v-model="yearId"
                  reference="years"
                  variant="outlined"
                  clearable
                  :disabled="loadingStatus"
                  :error-messages="yearIdErrors"
               ></va-select-input>        
            </v-col>
            <v-col sm="2">
               <va-text-input
                  v-model="listName"
                  variant="outlined"
                  clearable
                  :disabled="loadingStatus"
                  :error-messages="listNameErrors"
               ></va-text-input>        
            </v-col>
            <v-col sm="8">
               <v-btn
                  v-if="loadingStatus"
                  color="primary"
                  class="mr-2"
                  @click="cancelSaveList()"
                  variant="outlined"
               >
                  {{ $t("va.actions.cancel") }}
               </v-btn>
               <v-btn 
                  :loading="loadingStatus"
                  color="primary"
                  variant="outlined" 
                  @click="saveList()">
                  {{ $t("resources.jobtitles.saveList") }}
               </v-btn>
            </v-col>
         </v-row>
      </v-card-text>
   </v-card>

   <v-card
      variant="flat"
      class="mt-2"
      v-if="!loadingStatus"
   >
      <v-card-text>
      <h5 class="h4 mb-3">Sheet Input Component</h5>
      <va-sheet-input
         icon="mdi-file-excel"
         items-per-page="100"
         upload-url="/jobtitlelists/upload"
         preview-url="/jobtitlelists/preview"
         remove-url="/jobtitlelists/remove"
         @importedItems="onItems"
      >
      </va-sheet-input>
      </v-card-text>
   </v-card>
</template>
<script>
import { useVuelidate } from "@vuelidate/core";
import { required } from "@vuelidate/validators";
import { provide } from 'vue';
import { mapActions } from "vuex"

export default {
  props: [],
  inject: ['admin'],
  setup() {
    provide('v$', useVuelidate() )
    return { v$: useVuelidate() }
  },
  provide() {
    return {
      validations: {
        form: {
          listName: {
            required
          },
        }
      },
      errors: {
        listNameErrors: (v$) => {
          const errors = [];
          if (!v$['form'].listName.$dirty) return errors;
          v$['form'].listName.required.$invalid &&
            errors.push(this.$t("v.text.required"));
          return errors;
        },
      }
    };
  },
  validations() {
    return {
      yearId: {
        required
      },   
      listName: {
        required
      }
    }
  },
  data() {
    return {
   cancel: false,
   status: false,
   loadingStatus: false,
   listId: null,
   listName: null,
   companyId: null,
   yearId: new Date().getFullYear(),
   loading: false,
   loadingList: false,
   importData: [],
   validationError: null,
      filters: [
        {
          source: "yearId",
          type: "selectfilter",
          attributes: {
            optionText: "name",
            multiple: true,
            reference: "years",
          }
        },
      ],
      fields: [
        {
          source: "yearId",
          type: "select",
          attributes: {
            reference: "years",
          },
          sortable: true,
        },
        {
          source: "listName",
          sortable: true,
        },
      ],
    }
  },
  computed: {
    yearIdErrors() {
      const errors = [];
      if (!this.v$.yearId.$dirty) return errors;
      this.v$.yearId.required.$invalid &&
        errors.push(this.$t("v.text.required"));
      return errors;
    },
    listNameErrors() {
      const errors = [];
      if (!this.v$.listName.$dirty) return errors;
      this.v$.listName.required.$invalid &&
        errors.push(this.$t("v.text.required"));
      return errors;
    }
  },
  methods: {
    ...mapActions({
      checkAuth: "auth/checkAuth",
    }),
   onItems(items, vError) {
      this.importData = items;
      if (items.length == 0) {
         this.validationError = null
      } else {
         this.validationError = vError
      }
   },
    getRoute(item) {
      let filter = null
      if (item.listId) {
         filter = '{ "yearId" : ["'+ item.yearId.id + '"] , "listId" : ["' + item.listId + '"] }';
      }
         this.$router.push({ name: "jobtitles_list", query: { filter: filter } });
    },
    async importStatus() {
      let Self = this;
      this.loadingStatus = true;
      try {
        //
        // get status with EventSource
        // 
        let user = await this.checkAuth();
        if (user) {
          const apiUrl = import.meta.env.VITE_API_URL;
          this.source = new EventSource(apiUrl + '/stream/events?userId=' + user.id + '&route=list');
          this.source.onmessage = function(e) {
            if (e.data) {
              let data = JSON.parse(e.data);
              if (data.status == 1 || data.status == true) {
                Self.source.close(); // lets close it when the process is done !
                Self.status = false;
                Self.loadingStatus = false
                Self.importData = []; // reset import data
                Self.admin.http({ method: "DELETE", url: "/jobtitlelists/reset" }); // reset all status
                Self.$store.dispatch("api/refresh", 'jobtitlelists');
              }
            }
          };
        }
      } catch (e) {
        if (e["response"]
          && e["response"]["status"]
          && e.response.status === 400) {
          this.admin.message("error", e.response.data.data.error);
        }
      }
    },
   saveList() {
      this.cancel = false;
      this.v$.yearId.$touch();
      this.v$.listName.$touch();
      if (this.v$.listName.$invalid || this.v$.yearId.$invalid) {
        return false;
      }
      if (this.validationError) {
         this.$store.commit("messages/show", { type: 'error', message: this.$t("employees.fixErrorsMessage") });
      } else {
         if (this.importData.length == 0) {
            this.$store.commit("messages/show", { type: 'error', message: this.$t("employees.importDataMessage") });
         } else {
            // save imported data
            // 
            this.admin.http({ method: "POST", url: "/jobtitlelists/import", data: { yearId: this.yearId, listName: this.listName } });
               // check status every 1 seconds
               // 
            this.importStatus();
         }
      }
   },
    cancelSaveList() {
      this.cancel = true;
      this.loadingStatus = false;
      this.importData = []; // reset import data
      this.admin.http({ method: "DELETE", url: "/jobtitlelists/reset" }); // reset all status
      this.$store.dispatch("api/refresh", 'jobtitlelists'); // refresh page
    },
   downloadEmptyXls() {
      window.location.href = "/src/assets/JobTitles.xlsx"
   }
  }
}
</script>