Liste sayfası, sayfalandırma, sıralama, filtreleme, dışa aktarma vb. gibi işlemleri gerçekleştirebileceğiniz temel sayfalardır. Liste seçeneklerini kullanmak için bir VaList bileşeni ve VaDataTableServer bileşeni ile sunucu taraflı bir veri tablosunu kolayca oluşturabilirsiniz.
/olobase-demo-ui/src/resources/Employees/List.vue
<template>
<va-list
:filters="filters"
:fields="fields"
:items-per-page="10"
disable-create
enable-save-dialog
>
<va-data-table-server
row-show
row-save-dialog
row-save-dialog-width="1024"
row-save-dialog-height="600"
disable-clone
disable-show
>
</va-data-table-server>
</va-list>
</template>
Her CRUD sayfası için istediğiniz her şeyi koymakta özgür olduğunuzu ve sağlanan optimize edilmiş bileşenleri kullanmak zorunda olmadığınızı unutmayın. Tüm veri sağlayıcı yöntemleri, her kaynak için özel bir depolama modülünde mevcut olduğundan, verilerinizi getirecek kendi liste bileşenlerinizi oluşturmak o kadar da karmaşık değildir. Veri sağlayıcı mantığından çıkan her türlü özel veriyi getirmeniz gerekiyorsa elbette mevcut global $axios örneğini kullanabilirsiniz. Bunun için store bölümündeki kullanıma bakın.
List bileşeni veri tablosuna ait ayarlar, filtreler ve üst seçeneklerin görüntülenmesini sağlar.
<va-list
:filters="filters"
:fields="fields"
disable-settings
hide-header
>
<va-data-table-server></data-va-data-table-server>
</va-list>
Seçenekler
Özellik | Tür | Açıklama | Varsayılan |
---|---|---|---|
class | String |
Bileşene bir css sınıfı atamanızı sağlar. | mb-0 |
title | String |
Liste başlığını belirler eğer bu değer boş ise geçerli kaynağın başlığı titles.resource nesnesi ile çevirilir. | null |
filters | array |
Veri sağlayıcınıza filter parametrelerinin içinde gönderilir. Geçerli özellikler şunlardır: source , type , label , attributes .
|
[] |
fields | Array |
Kaynak verilerinin oluşturabilmesi için gereken sütunların listesi. Her sütun basit bir dize veya gelişmiş alan özelliklerine sahip tam bir nesne olabilir. `source`, `type`, `label`, `sortable`, `align`, `link`, `attributes`, `editable`, `width`. | [] |
hideTitle | Boolean |
Liste başlığını görünmez hale getirir. | false |
hideHeader | boolean |
Başlık araç çubuğunu gizler; böylece filtreler ve ayarlar gibi eylemler gizlenmiş olurlar. | false |
hideBulkDelete | boolean |
Seçim listesinden bir kayıt seçildiğinde ortaya çıkan çoklu silme tuşunu görünmez hale getirir. | false |
hideBulkCopy | boolean |
Seçim listesinden bir kayıt seçildiğinde ortaya çıkan çoklu kopyalama tuşunu görünmez hale getirir. | false |
disableSettings | Boolean |
Ayarlar tuşunu görünmez hale getirir. | false |
disableCreate | Boolean |
Standart kayıt etme tuşunu görünmez hale getirir. | false |
rowCreate | Boolean |
Düzenlenebilir bir tablo kullanıyorsanız ayarlar butonunun yanında Satır Ekle butonunun aktif hale getirmenizi sağlar. | false |
disableCreateRedirect | Boolean |
Yaratma aksiyonundan sonraki yönlendirme işlemini devre dışı bırakır. | false |
disableQueryString | boolean |
Sayfalandırma, sıralama, filtreleme vb. gibi bir işlemde URL sorgu dizesinin gönderilmesini devre dışı bırakır. | false |
defaultQueryString | object |
Kaynak çağırma url adresinizin örneğin; /api/example/findAllByPaging gibi arka uç adresinizin sonuna varsayılan olarak /api/example/findAllByPaging?a=1 gibi query string ekler. Örnek değer: { id: 4fd4eeac-8ab2-48b9-99e5-fbfd14334ff3 }. | {} |
disableActions | boolean |
Tüm aksiyonlara ait bölümü görünmez hale getirir. | false |
disableGlobalSearch | boolean |
Genel aramayı devre dışı bırakır. | false |
disableItemsPerPage | boolean |
Arka uca gönderilen perPage parametresini devre dışı bırakır. | false |
globalSearchQuery | string |
Genel arama sorgusunun anahtar adını belirler. Varsayılan değeri değiştirmek bazı ön ve arka taraf fonksiyonlarda değişikliği gerektirebilir. | q |
disablePositioning | boolean |
Ayarlar panelinde pozisyonlama satırını gizler. | false |
disableVisibility | boolean |
Ayarlar panelinde görünürlülük satırını gizler. | false |
enableSaveDialog | boolean |
Sağ köşedeki iletişim kutusunda kaydetme özelliği için oluştur düğmesini gösterir/gizler. | false |
itemsPerPage | array |
Sayfa başına mevcut öğe seçimlerinin listesi. | 10 |
Slotlar
Ad | Açıklama |
---|---|
actions | Liste içinde görüntülenen tuşların yanına yeni tuşlar eklenebilmesini sağlar. |
content | Liste şablonu içerisinde veri tablosu eklemenizi sağlar. |
VaDataTableServer ızgara yapısına uyan bir listenin sayfalanması ve herhangi bir kaynak tarama ve listeleme için kullanılır. Sıralama, arama, sayfalandırma, filtreleme ve seçim gibi özellikleri içerir. Varsayılan slot içinde liste düzeni tamamen özelleştirilebilir.
Mixinler
Seçenekler
Özellik | Tür | Açıklama | Varsayılan |
---|---|---|---|
class | String |
Data table etrafını saran div elementinin html class niteliğine bir değer atar. | va-data-table |
density | String |
Vuetify orjinal density özelliğini seçmenizi sağlar. Alınabileck değerler: default, comfortable, ve compact. | compact |
rowClick | String , Boolean |
Her satırı tıklanabilir hale getirir. Düzenleme veya gösterme olarak önceden tanımlanmış işlevi kullanın. | null |
rowCreate | boolean |
Güncellenebilir bir veri tablosu listesi eylemlerinde satır yaratma tuşunu görünür/görünmez hale getirir. | false |
rowEdit | boolean |
Güncellenebilir bir veri tablosu listesi eylemlerinde satır düzenleme tuşunu görünür/görünmez hale getirir. | false |
rowSaveDialog | boolean |
Bir veri tablosu listesi eylemlerinde kayıt düzenlemenin/yaratmanın bir pencere içerisinde gerçekleşmesini sağlayan tuşu görünür/görünmez hale getirir. | false |
rowSaveDialogWidth | boolean |
rowSaveDialog tuşuna ait pencerenin genişliğini ayarlar. | 1024 |
rowSaveDialogHeight | boolean |
rowSaveDialog tuşuna ait pencerenin yüksekliğini ayarlar. | 600 |
rowClone | boolean |
Güncellenebilir bir veri tablosu listesi eylemlerinde satır kopyalama tuşunu görünür/görünmez hale getirir. | false |
rowShow | boolean |
Güncellenebilir bir veri tablosu listesi eylemlerinde satır detay penceresi açan tuşu görünür/görünmez hale getirir. | false |
showExpand | boolean |
Hızlı ayrıntılı görünüm için satır genişletme modunu etkinleştirir. | false |
expandOnClick | boolean |
Tablo satırlarına tıklanıldığında satırın genişletilir olmasını sağlar. | false |
groupBy | array |
Vuetify orjinal groupBy fonksiyonunu kullanarak tablo verilerini klasörler. Birden fazla değer alabilir. | [] |
visible | boolean |
Veri tablosunun görünürlüğünü kontrol eder. | true |
disableSelect | boolean |
Hepsini seç seçim listesini devre dışı bırakır. | false |
selectStrategy | boolean |
Listedeki öğeleri seçme stratejisini tanımlar. Olası değerler: single, page, all. | page |
disableSort | boolean |
Liste sıralama fonksiyonunu devre dışı bırakır. | false |
disableShow | boolean |
Standart detay aksiyonuna ait tuşu devre dışı bırakır. | false |
disableEdit | boolean |
Standart kayıt düzenleme aksiyonuna ait tuşu devre dışı bırakır. | false |
disableClone | boolean |
Standart kayıt kopyalama aksiyonuna ait tuşu devre dışı bırakır. | false |
disableDelete | boolean |
Standart kayıt silme aksiyonuna ait tuşu devre dışı bırakır. | false |
disableCreateRedirect | boolean |
Standart yaratma aksiyonundan sonraki yönlendirme işlemini devre dışı bırakır. | false |
disableShowRedirect | boolean |
Standart detay aksiyonundan sonraki yönlendirme işlemini devre dışı bırakır. | false |
disableEditRedirect | boolean |
Standart güncelleme aksiyonundan sonraki yönlendirme işlemini devre dışı bırakır. | false |
enableDeleteRedirect | boolean |
Standart silme aksiyonundan sonraki yönlendirme işlemini etkinleştirir. | false |
multiSort | boolean |
Varsayılan olarak etkin olan çoklu sıralama özelliğini etkinleştirir/devre dışı bırakır. | true |
disableGenerateUid | boolean |
Güncellenebilir bir veri tablosu listesi kayıt eyleminde Uid oluşturmayı devre dışı bırakır. | false |
itemsPerPageOptions | array |
Sayfa başına mevcut öğe seçimlerinin listesi | [5, 10, 15, 20, 25, 50, 100] |
Slotlar
Ad | Açıklama |
---|---|
cell.actions | Veri tablosu standart aksiyonlar bölümü içinde görüntülenen tuşların yanına yeni tuşlar eklenebilmesini sağlar. |
row.actions | Güncelenebilir veri tablosunda aksiyonlar bölümü içinde görüntülenen tuşların yanına yeni tuşlar eklenebilmesini sağlar. |
no-data | Herhangi veri bulunamadığında görüntülenen bölümü özelleştirmenizi sağlar. |
Olaylar
Ad | Açıklama |
---|---|
update:options | Sayfalandırma değişikliğinde tetiklenir. |
update:filter | Filtreleme değişiminde tetiklenir. |
selected | Seçim listesinden kayıt seçildiğinde tetiklenir. Bu olay, dizi türünde kayıt edilir. |
item-action | Belirli bir satırdaki eylemde tetiklenir. Bu olay, API'nizden yenilenmiş bir nesne döndürecektir. |
save | Güncellenebilir listede kayıt etme aşamasından önce tetiklenir. |
saved | Güncellenebilir listede kayıt etme aşamasından sonra tetiklenir. |
Tüm sütunları tanımlamak için fields niteliğini kullanın. En azından getirmek istediğiniz kaynak alanını tanımlayan kaynak özelliğini, ardından basit metin formatından farklıysa veri formatlayıcının türünü ayarlamanız gerekir. Desteklenen tüm alanlar için fields bölümünü kontrol edin.
/olobase-demo-ui/src/resources/Employees/List.vue
<template>
<va-list
disable-create
enable-save-dialog
:filters="filters"
:fields="fields"
:items-per-page="10"
>
<va-data-table-server
row-show
row-save-dialog
row-save-dialog-width="1024"
row-save-dialog-height="600"
disable-clone
disable-show
>
</va-data-table-server>
</va-list>
</template>
<script>
import { required } from "@vuelidate/validators";
export default {
props: ["resource", "title"],
provide() {
return {
validations: {
form: {
companyId: {
required
},
employeeNumber: {
required
},
name: {
required
},
surname: {
required
},
}
},
errors: {
companyIdErrors: (v$) => {
const errors = [];
if (!v$['form'].companyId.$dirty) return errors;
v$['form'].companyId.required.$invalid &&
errors.push(this.$t("v.text.required"));
return errors;
},
employeeNumberErrors: (v$) => {
const errors = [];
if (!v$['form'].employeeNumber.$dirty) return errors;
v$['form'].employeeNumber.required.$invalid &&
errors.push(this.$t("v.text.required"));
return errors;
},
nameErrors: (v$) => {
const errors = [];
if (!v$['form'].name.$dirty) return errors;
v$['form'].name.required.$invalid &&
errors.push(this.$t("v.text.required"));
return errors;
},
surnameErrors: (v$) => {
const errors = [];
if (!v$['form'].surname.$dirty) return errors;
v$['form'].surname.required.$invalid &&
errors.push(this.$t("v.text.required"));
return errors;
}
}
};
},
data() {
return {
loading: false,
yearId: new Date().getFullYear(),
filters: [
{
source: "companyId",
type: "select",
attributes: {
optionText: "name",
multiple: true,
reference: "companies",
}
},
{
source: "jobTitleId",
type: "select",
attributes: {
optionText: "name",
multiple: true,
reference: "jobtitles",
}
},
{
source: "gradeId",
type: "select",
attributes: {
optionText: "name",
multiple: true,
reference: "employeegrades",
}
},
],
fields: [
{
source: "companyId",
type: "select",
attributes: {
reference: "companies",
},
sortable: true,
width: "10%"
},
{
source: "employeeNumber",
sortable: true,
width: "10%"
},
{
source: "name",
sortable: true,
width: "10%"
},
{
source: "surname",
sortable: true,
width: "10%"
},
{
source: "jobTitleId",
type: "select",
attributes: {
reference: "jobtitles",
},
sortable: true,
width: "20%"
},
{
source: "gradeId",
type: "select",
attributes: {
reference: "employeegrades",
},
sortable: true,
width: "10%"
},
],
};
}
};
</script>
Alan Nitelikleri
Nitelik | Tür | Açıklama |
---|---|---|
source | string |
Görüntülenecek kaynağın anahtar adı. |
type | string |
Kullanılacak field türü. |
label | string |
Sütun başlığı başlığı, varsayılan olarak yerelleştirilmiş özellik kaynağını kullanın. |
labelKey | string |
Varsayılan kaynağı i18n anahtar mesajı olarak geçersiz kılar. |
sortable | boolean |
Sunucu tarafı sıralamayı etkinleştirir. |
align | string |
Her hücrenin align özelliği için left, right, center'ı kullanabilirsiniz. |
link | string |
Alanı kaynak eylemi bağlantısının içine sarmak istiyorsanız geçerli herhangi bir göster veya düzenle eylemini kullanın. |
input | string |
Düzenlenebilir form satırları için kullanılacak input türü. Varsayılan olarak kullanılan type değerini geçersiz kılar. |
attributes | object |
Alt alan veya giriş bileşeniyle birleştirilecek tüm öznitelikler veya nitelikler. |
editable | boolean |
Alanı canlı düzenleme giriş alanı ile değiştirin. Hızlı canlı güncellemeler için idealdir. |
row.actions slotu kullanılarak satır aksiyonları özelleştirebilir. Takip eden örnekte yazılımcılara ait bir veri tablosunda özel bir silme tuşu developerId parametresi ile delete-developer adlı bir rotaya yönlendiriliyor.
<template>
<div>
<va-list
disable-settings
hide-bulk-copy
:filters="filters"
:fields="fields"
:items-per-page="50"
>
<va-data-table-server
disable-show
disable-clone
disable-delete
>
<template v-slot:row.actions="{ item }">
<va-action-button
icon="mdi-delete-forever"
:color="color || 'red'"
text
:to="{ name: 'delete-developer', params: { developerId: item.id } }"
></va-action-button>
</template>
</va-data-table-server>
</va-list>
</div>
</template>
Yukarıdaki tüm alan seçeneklerinin ihtiyaçlarınızı karşılamaması durumunda, her alan için gelişmiş slot şablonlamasını kullanabilirsiniz. Hatta içindeki tüm Olobase Admin alanlarını bile kullanabilirsiniz. Bu alan bileşenini, aşağıda gösterildiği gibi ana bileşenin içine yerleştirmeniz gerektiğinde çok kullanışlıdır:
<template>
<va-list
:fields="fields"
>
<va-data-table-server
>
<template v-slot:[`field.authors`]="{ value }">
<v-chip-group column>
<va-reference-field
reference="authors"
v-for="(item, i) in value"
:key="i"
color="primary"
small
chip
:item="item"
>
</va-reference-field>
</v-chip-group>
</template>
</va-data-table-server>
</va-list>
</template>
<script>
export default {
props: ["resource", "title"],
data() {
return {
fields: [
//...
"authors",
//...
],
//...
};
},
//...
};
</script>
Bunun için field.{source} adında bir slotunu kullanmanız yeterlidir; burada source, alanın adıdır. Bu slot size tam satır kaynak öğesini ve varsayılan olarak işlenecek hücrenin değerini sağlayacaktır.
Bir başka örnek:
<template>
<va-list
:fields="fields"
>
<va-data-table-server
>
<template v-slot:[`field.orderStatusId`]="{ item }">
<v-chip
label
:color="getOrderStatusColor(item.orderStatusId)"
>
<v-icon icon="mdi-label" start></v-icon>
{{ $t("resources.orders.chips." + item.orderStatusId) }}
</v-chip>
</template>
</va-data-table-server>
</va-list>
</template>
<script>
export default {
props: ["resource", "title"],
methods: {
getOrderStatusColor(val) {
if (val == "waiting") {
return 'orange-darken-1';
}
if (val == "canceled") {
return 'red-darken-1';
}
if (val == "completed") {
return 'green-darken-1';
}
},
}
//...
};
</script>
Öğe satırının altında ek bir tam colspan hücresi için genişletilmiş öğe özelliğini show-expand desteğiyle kullanabilirsiniz. Bu yöntem satır verisinin uzun olduğu durumlarda ya da hızlı görüntüleme için kullanılabilir.
<template>
<va-list
:filters="filters"
:fields="fields"
>
<va-data-table-server
disable-show
:show-expand="true"
:expand-on-click="true"
:disable-actions="false"
>
<template v-slot:top>
<v-toolbar flat>
<v-toolbar-title>Expandable Table</v-toolbar-title>
</v-toolbar>
</template>
<template v-slot:expanded-row="{ columns, item }">
<tr>
<td :colspan="columns.length">
More info about {{ item.raw.roleName }}
</td>
</tr>
</template>
</va-data-table-server>
</va-list>
</template>
Güncelenebilir satırları olan bir veri tablosu yaratmak için aşağıdaki nitelikleri VaDataTableServer bileşeninde kullanmalısınız. Bu nitelikleri kullanılırken standart disable-edit, disable-show ve disable-clone gibi işlemleri pasif hale getirmeniz gerekir.
Güncellenebilir bir tablo aşağıdaki aksiyonları içerebilir:
<template>
<va-list
disable-create
:fields="fields"
:items-per-page="50"
>
<va-data-table-server
row-create
row-clone
row-edit
disable-edit
disable-show
disable-clone
disable-create-redirect
>
</va-data-table-server>
</va-list>
</template>
Bir seçim alanını seçtikten sonra başka bir seçim alanının etkileşimli olarak değişmesini istiyorsanız, aşağıdaki örnekte yer alan koda göz atın.
<script>
export default {
props: ["resource", "title"],
data() {
return {
fields: [
{
source: "companyId",
type: "select",
attributes: {
reference: "companies",
},
sortable: true,
width: "15%"
},
{
source: "departmentId",
type: "select",
attributes: {
reference: "departments",
},
key: "companyId",
filters: ["companyId"],
sortable: true,
width: "15%"
},
],
};
}
};
</script>
Eğer veri listesinde sıralanan her bir kayıt için güncelleme işleminin yeni bir pencere içerisinde yapılmasını istiyorsanız aşağıdaki nitelikleri kullanmalısınız.
/va-demo/src/resources/Employees/List.vue
<template>
<va-list
disable-create
enable-save-dialog
:filters="filters"
:fields="fields"
:items-per-page="10"
>
<va-data-table-server
row-show
row-save-dialog
row-save-dialog-width="1024"
row-save-dialog-height="600"
disable-clone
disable-show
>
</va-data-table-server>
</va-list>
</template>
VaDataIteratorServer bileşeni, ızgara yapısına uymayan veya özelleştirilmesi gereken verileri görüntülemek için kullanılır ve işlevsellik yönünden v-data-table bileşenine benzer. Sıralama, arama, sayfalandırma, filtreleme ve seçim gibi özellikleri içerir. Varsayılan slot içindeki liste düzeni tamamen özelleştirilebilir.
Mixinler:
<template>
<va-list
:filters="filters"
:fields="fields"
disable-create
disable-positioning
disable-visibility
:items-per-page="2"
>
<va-data-iterator-server
:pagination="{
density: 'default',
activeColor: 'primary',
top: false,
bottom: true,
rounded: 'pill',
}"
>
<template v-slot:default="{ items }">
<v-row no-gutters class="bordered pt-1 pb-1 justify-center" v-if="$store.state.api.loading">
<v-progress-circular
color="primary"
indeterminate
></v-progress-circular>
</v-row>
<v-row no-gutters v-else>
<v-col
v-for="(item, i) in items"
:key="i"
cols="12"
sm="6"
xl="3"
class="mb-3"
>
<v-sheet border rounded :class="(isOdd(i)) ? '' : 'mr-5'">
<v-list-item
:title="item.raw.username"
:subtitle="item.raw.id"
lines="two"
density="comfortable"
>
<template v-slot:title>
<strong class="text-h6">
{{ item.raw.username }}
</strong>
</template>
</v-list-item>
<v-table density="compact" class="text-caption">
<tbody>
<tr align="right">
<th width="20%">{{ $t("resources.failedlogins.fields.attemptedAt") }}:</th>
<td>{{ item.raw.attemptedAt }}</td>
</tr>
<tr align="right">
<th>{{ $t("resources.failedlogins.fields.ip") }}:</th>
<td>{{ item.raw.ip }}</td>
</tr>
<tr align="right">
<th>{{ $t("resources.failedlogins.fields.userAgent") }}:</th>
<td>{{ item.raw.userAgent }}</td>
</tr>
</tbody>
</v-table>
</v-sheet>
</v-col>
</v-row>
</template>
<template v-slot:bottom.pagination.header="{ page, pageCount }">
<v-footer class="text-body-3 mt-6 mb-2" style="padding:0;">
<div>{{ $t("dataiterator.displaying_page", {page, pageCount}) }}</div>
</v-footer>
</template>
<template v-slot:no-data>
<v-row no-gutters class="bordered pt-1 pb-1 justify-center" v-if="$store.state.api.loading">
<v-progress-circular
color="primary"
indeterminate
></v-progress-circular>
</v-row>
<v-row no-gutters class="bordered pt-2 pb-2 justify-center" v-else>
{{ $t("va.datatable.nodata")}}
</v-row>
</template>
</va-data-iterator-server>
</va-list>
</template>
<script>
export default {
props: ["resource", "title"],
data() {
return {
filters: [
{
source: "username",
type: "select",
attributes: {
reference: "failedloginusernames",
multiple: true,
}
},
{
source: "ip",
type: "select",
attributes: {
reference: "failedloginips",
multiple: true,
}
},
{
source: "attemptedAtStart",
type: "date",
},
{
source: "attemptedAtEnd",
type: "date",
}
],
fields: [
{
source: "username",
type: "text",
sortable: true,
width: "10%"
},
{
source: "attemptedAt",
type: "date",
sortable: true,
width: "10%"
},
{
source: "userAgent",
sortable: true,
width: "10%"
},
{
source: "ip",
sortable: true,
width: "10%"
},
],
};
},
methods: {
isOdd(number) {
return (number & 1) === 1;
}
}
};
</script>
Seçenekler
Özellik | Tür | Açıklama | Varsayılan |
---|---|---|---|
class | String |
Data table etrafını saran div elementinin html class niteliğine bir değer atar. | va-data-table |
pagination | object |
Sayfalama bileşenlerine ait özelleştiribilen değişkenlerini kontrol eder. Top ve bottom seçenekleri true olduğunda hem altta hem de üst bölümde sayfalama görüntülenebilir. | { density: 'default', activeColor: 'primary', top: false, bottom: true, rounded: 'pill', } |
showExpand | boolean |
Hızlı ayrıntılı görünüm için satır genişletme modunu etkinleştirir. | false |
expandOnClick | boolean |
Tablo satırlarına tıklanıldığında satırın genişletilir olmasını sağlar. | false |
groupBy | array |
Vuetify orjinal groupBy fonksiyonunu kullanarak tablo verilerini klasörler. Birden fazla değer alabilir. | [] |
selectStrategy | boolean |
Listedeki öğeleri seçme stratejisini tanımlar. Olası değerler: single, page, all. | page |
returnObject | boolean |
Öğe değeriyle belirtilen değer yerine doğrudan nesneyi döndürmek için seçim davranışını değiştirir. | false |
mustSort | boolean |
Değer true ise sıralama devre dışı bırakılamaz, her zaman artan ve azalan arasında geçiş yapılır. | false |
multiSort | boolean |
Varsayılan olarak etkin olan çoklu sıralama özelliğini etkinleştirir/devre dışı bırakır. | true |
Slotlar
Ad | Açıklama |
---|---|
top.pagination.header | Üst sayfalamanın üst kısmının özelleştirilmesini sağlar. |
top.pagination.footer | Üst sayfalamanın alt kısmının özelleştirilmesini sağlar. |
bottom.pagination.header | Alt sayfalamanın üst kısmının özelleştirilmesini sağlar. |
bottom.pagination.footer | Alt sayfalamanın alt kısmının özelleştirilmesini sağlar. |
no-data | Herhangi veri bulunamadığında görüntülenen bölümü özelleştirmenizi sağlar |
Genel arama filtresi varsayılan olarak etkin olacaktır. Bunu devre dışı bırakmak için, disableGlobalSearch özelliğini kullanın. Bu filtre, varsayılan olarak q olan ve globalSearchQuery değişkeninde yapılandırılan anahtar aracılığıyla arka uca arama sorgusunu gönderecektir. Daha sonra SQL işleme için arka uç tarafında, örneğin çok sütunlu LIKE aramasını ilgili model Olobase\Mezzio\ColumnFilters sınıfı sayesinde otomatik olarak yapılacaktır.
<template>
<va-list
:fields="fields"
:filters="filters"
>
<va-data-table-server
disable-show
:disable-actions="false"
>
</va-data-table-server>
</va-list>
</template>
<script>
export default {
props: ["resource"],
data() {
return {
filters: [],
fields: [
{
source: "roleName",
sortable: true,
},
{
source: "roleKey",
sortable: true,
},
{
source: "roleLevel",
sortable: true,
},
],
};
}
};
</script>
<?php
namespace App\Model;
use Exception;
use Olobase\Mezzio\ColumnFiltersInterface;
use Laminas\Db\Sql\Sql;
use Laminas\Db\Sql\Expression;
use Laminas\Paginator\Paginator;
use Laminas\Paginator\Adapter\DbSelect;
use Laminas\Db\Adapter\AdapterInterface;
use Laminas\Cache\Storage\StorageInterface;
use Laminas\Db\TableGateway\TableGatewayInterface;
class RoleModel
{
private $conn;
private $roles;
private $rolePermissions;
private $cache;
private $adapter;
private $columnFilters;
public function __construct(
TableGatewayInterface $roles,
TableGatewayInterface $rolePermissions,
StorageInterface $cache,
ColumnFiltersInterface $columnFilters
)
{
$this->roles = $roles;
$this->rolePermissions = $rolePermissions;
$this->cache = $cache;
$this->adapter = $roles->getAdapter();
$this->columnFilters = $columnFilters;
$this->conn = $this->adapter->getDriver()->getConnection();
}
public function findAllBySelect()
{
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->columns([
'id' => 'roleId',
'roleKey',
'roleName',
'roleLevel',
]);
$select->from(['r' => 'roles']);
return $select;
}
public function findAllByPaging(array $get)
{
$select = $this->findAllBySelect();
$this->columnFilters->clear();
$this->columnFilters->setColumns([
'roleKey',
'roleName',
'roleLevel',
]);
$this->columnFilters->setData($get);
$this->columnFilters->setSelect($select);
if ($this->columnFilters->searchDataIsNotEmpty()) {
$nest = $select->where->nest();
foreach ($this->columnFilters->getSearchData() as $col => $words) {
$nest = $nest->or->nest();
foreach ($words as $str) {
$nest->or->like(new Expression($col), '%'.$str.'%');
}
$nest = $nest->unnest();
}
$nest->unnest();
}
if ($this->columnFilters->orderDataIsNotEmpty()) {
foreach ($this->columnFilters->getOrderData() as $order) {
$select->order(new Expression($order));
}
}
// echo $select->getSqlString($this->adapter->getPlatform());
// die;
$paginatorAdapter = new DbSelect(
$select,
$this->adapter
);
$paginator = new Paginator($paginatorAdapter);
return $paginator;
}
}
Varsayılan olarak gözüken filtrelere ek olarak, kullanıcının kullanıcı arayüzü aracılığıyla değiştiremeyeceği bazı dahili filtrelere de ihtiyacınız olabilir. Bunun için filter özelliğini kullanın. Bu, veri sağlayıcınıza otomatik olarak gönderilecek ve diğer etkin filtrelerle birleştirilecek basit bir key/value nesnesidir.
Eklediğiniz tüm filtereler varsayılan olarak aktifdir. Aktif olan bu filterler ve sütunlar ayarlar tabında kullanıcı tarafından göster/gizle eylemleri ile özelleşririlebilir. Küresel aramaya ek olarak VaDataTableServer, burada gösterildiği gibi birçok desteklenen girişle birlikte gelişmiş özel filtreleri de destekler:
Filtreleme için desteklenen girişler aşağıdaki gibidir:
Yeni filtreler tanımlamak için filtre özelliklerini kullanın. Bu gelişmiş filtrelerin kod örneği kullanımını burada bulabilirsiniz:
<script>
export default {
props: ["resource", "title"],
data() {
return {
loading: false,
yearId: new Date().getFullYear(),
filters: [
{
source: "companyId",
type: "select",
col: 2,
attributes: {
optionText: "name",
multiple: true,
reference: "companies",
}
},
{
source: "jobTitleId",
type: "select",
col: 2,
attributes: {
optionText: "name",
multiple: true,
reference: "jobtitles",
}
},
{
source: "gradeId",
type: "select",
returnObject: false, // sends ids as array
col: 3,
attributes: {
optionText: "name",
multiple: true,
reference: "employeegrades",
}
},
],
};
}
};
</script>
Giriş türü için esas olarak zorunlu kaynak özelliğinin yanı sıra türü de kullanmalısınız. Belirli nitelikleri giriş bileşeniyle birleştirmek için attributes özelliğini kullanın.
Desteklenen tüm alan özelliklerine bakın:
Nitelik | Tür | Açıklama |
---|---|---|
source | string |
Görüntülenecek kaynak özelliği. |
col | number |
Filtrenin sütün sayısını yani diğer bir deyişle çoklu aygıt duyarlılığına ait genişliğini belirler. |
type | string |
Kullanılacak girdi türü. |
returnObject | boolean |
Eğer bu değeri false olarak ayarlarsanız, id değeri/değerleri nesne içerisinde değil dizi içerisinde gönderilir. |
label | string |
Sütun başlığı, varsayılan olarak yerelleştirilmiş özellik kaynağını kullanır. |
labelKey | string |
Varsayılan kaynağı i18n anahtar mesajı olarak geçersiz kılar. |
attributes | object |
Giriş bileşeniyle birleştirilecek tüm nitelikler veya özellikleri bu nesne içinde tanımlamalısnız. |
Eğer bir filtreyi seçtikten sonra diğer bir filtrenin/filtrelerin etkileşimli olarak değişmesini istiyorsanız takip eden örnekteki kodu inceleyelin.
<script>
export default {
props: ["resource", "title"],
data() {
return {
filters: [
{
source: "yearId",
type: "select",
attributes: {
optionText: "name",
multiple: false,
reference: "years",
},
label: this.$t("employees.yearId"),
},
{
source: "salaryListId",
type: "select",
attributes: {
optionText: "name",
multiple: false,
reference: "salarylists",
},
key: "yearId",
filters: ['yearId'],
label: this.$t("salaries.salaryListId"),
},
]
};
},
};
</script>
Eğer bir tarih sütununu belirtilen iki tarih sütunu aralığında filtrelemek istiyorsanız sütun adının sonlarına Start ve End önadlarını eklemelisiniz.
Takip eden örnekte attemptedAt sütun adı için attemptedAtStart ve attemptedAtEnd adlı 2 adet tarih filtresi ekleniyor.
<script>
export default {
props: ["resource", "title"],
data() {
return {
filters: [
{
source: "username",
type: "text",
},
{
source: "attemptedAtStart",
type: "date",
},
{
source: "attemptedAtEnd",
type: "date",
}
],
fields: [
{
source: "username",
type: "text",
sortable: true,
width: "10%"
},
{
source: "attemptedAt",
type: "date",
sortable: true,
width: "10%"
},
],
};
},
};
</script>
Bu VaList bileşeni, create adında sadece 1 küresel eylemle birlikte gelir. Oluştur düğmesi yalnızca mevcut kaynağın oluşturma eylemi varsa ve kimliği doğrulanmış kullanıcının bu kaynak üzerinde oluşturma izni varsa görünecektir.
Aksiyon Olayları
Varsayılan yönlendirme davranışına uymak zorunda değilsiniz. Bir oluşturma eylemi tercih ederseniz, yalnızca eylem olayına abone olun ve oluşturma tuşunun bağlantılı eylem sayfasına yönlendirmesini önlemek için, disableCreateRedirect özelliği ile yönlendirme oluşturmayı devre dışı bırakın. VaDataTableServer'ın içindeki show, edit ve clone eylemleri için de aynı davranış geçerlidir. Bir Aside veya diyalog içerisinde özel bir davranışa ihtiyacınız varsa, item-action olayını kullanın ve varsayılan yönlendirmeyi devre dışı bırakın. İlgili tuşlar için herhangi bir işlem yapılmaması durumunda tüm bu tuşların otomatik olarak gizleneceğini unutmayın. İlgili eylem yönlendirmelerinin her birinin devre dışı bırakılması, tuşların yeniden görünmesine neden olur.
Bu eylem etkinlikleri size her zaman API'dan yenilenen öğenin yanı sıra uyarlanmış CRUD başlığını da sağlayacaktır.
Standart eylemlere ek olarak başka öğe eylemlerine ihtiyacınız varsa, özel item.actions slotunu kullanın. Güncellenebilir bir veri tablosu için ise row.actions slotunu kullanmalısınız.
<template>
<va-list
:fields="fields"
>
<va-data-table-server>
<template v-slot:[`item.actions`]="{ resource, item }">
<va-my-custom-button
:resource="resource"
:item="item"
></va-my-custom-button>
</template>
</va-data-table-server>
</va-list>
</template>
Veri listeleme, ister kopyalama ister silme olsun, her türlü toplu işlemi destekler. Bu özellik, veri sağlayıcınızın copyMany, updateMany ve deleteMany yöntemlerini kullanacaktır. Bazı öğeleri seçtiğinizde, mevcut tüm toplu işlemler başlıkta görünecektir.
Varsayılan olarak Olobase Admin toplu silme eylemi sağlar, ancak bulk.actions slotlarını ve updateMany'yi kullanacak VaBulkActionButton'u kullanarak gerektiği gibi birden fazla toplu eylem ekleyebilirsiniz. Bu son bileşen, API'nize gönderilecek nesne olacak gerekli bir eylem desteğine ihtiyaç duyar. Bu nesne, toplu güncellemek istediğiniz tüm özellikleri içerecektir. Bir sonraki örnekte size toplu yayınlama/yayından kaldırma toplu işlemlerine ait bir örnek gösterilecektir:
<template>
<va-list
:filters="filters"
:fields="fields"
:items-per-page="10"
>
<template v-slot:bulk.actions="{ selected }">
<va-bulk-action-button
:label="$t('users.enable')"
icon="mdi-publish"
color="success"
:value="selected"
:action="{ active: true }"
text
></va-bulk-action-button>
<va-bulk-action-button
:label="$t('users.disable')"
icon="mdi-download"
color="orange"
:value="selected"
:action="{ active: false }"
text
></va-bulk-action-button>
</template>
<va-data-table-server
row-create
row-show
row-edit
disable-clone
disable-show
disable-edit
>
</va-data-table-server>
</va-list>
</template>