Refactor SliderListe.vue to improve data handling and validation. Update table data binding to an empty array, enhance form validation for image uploads, and streamline slider data processing with a new rowToPanelSlider function. Adjust save logic to ensure proper handling of form data and improve user feedback with toast notifications.

This commit is contained in:
burakovec
2026-07-20 09:57:39 +03:00
parent bec6171a45
commit 6030dedbdb

View File

@ -9,7 +9,7 @@
icon="sitemanagement"
title="Slider Listesi"
listText="Slider"
:tableData="sliders"
:tableData="[]"
apiText="Slider Listesi"
apiList="Slider"
v-model:refresh="refresh"
@ -25,6 +25,7 @@
<form-file
v-model="panelSlider.resimUrl"
label="Resim Url"
:required="!isUpdate"
:fileTypes="['png', 'jpg', 'jpeg']"
elclass="panel-documents-item"
fileType="img" />
@ -43,53 +44,64 @@
</AdminLayout>
</template>
<script setup lang="ts">
import { ref, onMounted, computed } from 'vue'
import { ref, computed } from 'vue'
import AdminLayout from '@/layouts/AdminLayout.vue'
import { Breadcrumb } from '@/components/global'
import router from '@/router'
import { useDataStore } from '@/stores/dataStore'
import PanelWrapper from '@/components/PanelWrapper.vue'
import { useDialogStore } from '@/components/global/dialogStore'
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { useToastStore } from '@/components/global/toastStore'
const dialogStore = useDialogStore()
const toastStore = useToastStore()
const dataStore = useDataStore()
const panel = ref<boolean>(false)
const isUpdate = ref<boolean>(false)
const refresh = ref<boolean>(false)
const panelSlider = ref<Record<string, any>>({})
const sliders = ref<Record<string, any>[]>([])
const rowToPanelSlider = (row: Record<string, any>) => ({
id: row.id ?? row.Id,
baslik: row.baslik ?? row.Baslik ?? '',
resimUrl: row.resimUrl ?? row.ResimUrl ?? '',
url: row.url ?? row.Url ?? '',
sira: row.sira ?? row.Sira ?? 1
})
const tableHeader = ref<Record<string, any>[]>([
{
name: 'baslik',
title: 'Başlık',
sort: true
sort: true,
compute: (v: Record<string, any>) => v.baslik ?? v.Baslik
},
{
name: 'sira',
title: 'Sıra',
sort: true
sort: true,
compute: (v: Record<string, any>) => v.sira ?? v.Sira
},
{
name: 'resimUrl',
title: 'Resim Url',
computeHtml: (v: Record<string, any>) => {
if (v.resimUrl !== null && v.resimUrl !== undefined) {
return `<a href="${ v.resimUrl }" target="_blank" onclick="event.stopPropagation()"><img class="table-cell-image" src="${ v.resimUrl }" /></a>`
const src = v.resimUrl ?? v.ResimUrl
if (src !== null && src !== undefined && src !== '') {
return `<a href="${ src }" target="_blank" onclick="event.stopPropagation()"><img class="table-cell-image" src="${ src }" /></a>`
}
}
},
{
name: 'url',
title: 'Url',
sort: true
sort: true,
compute: (v: Record<string, any>) => v.url ?? v.Url
}
])
const DeleteRowPop = (data: Record<string, any>, i: number) => {
const id = data.id ?? data.Id
dialogStore.CreateDialog({
title: 'Slider Sil',
id: 'deleteslider',
@ -99,7 +111,7 @@
{
label: 'Slider Sil',
type: 'alert',
function: () => DeleteRow(data.id)
function: () => DeleteRow(id)
}
]
})
@ -133,9 +145,6 @@
return URL.createObjectURL(panelSlider.value.resimUrl)
})
const OpenMenu = (row: any) => {
router.push('slider-yonetimi/' + row.id)
}
const addAction = async () => {
isUpdate.value = false
panelSlider.value = {
@ -147,28 +156,25 @@
panel.value = true
}
const updateAction = (row: any) => {
panelSlider.value = sliders.value.find((x) => x.id == row.id) || {}
panelSlider.value = rowToPanelSlider(row)
panel.value = true
isUpdate.value = true
}
const loadSliders = async () => {
const data = await dataStore.dataGet('Slider')
sliders.value = data
}
const save = async () => {
if (isUpdate.value) {
const id = panelSlider.value.id ?? panelSlider.value.Id
const formData = new FormData()
formData.append('Baslik', panelSlider.value.baslik)
formData.append('Url', panelSlider.value.url)
formData.append('Sira', panelSlider.value?.sira)
formData.append('Baslik', panelSlider.value.baslik ?? '')
formData.append('Url', panelSlider.value.url ?? '')
const siraVal = panelSlider.value.sira ?? panelSlider.value.Sira ?? 0
formData.append('Sira', String(siraVal))
if (panelSlider.value.resimUrl instanceof File) {
formData.append('ResimUrl', panelSlider.value.resimUrl)
}
let update: any = dataStore.dataPut('Slider/' + panelSlider.value.id, {
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
let update: any = await dataStore.dataPut('Slider/' + id, {
data: formData
})
if (update !== 'errorfalse') {
panel.value = false
@ -176,9 +182,19 @@
refresh.value = true
}
} else {
let add = await dataStore.dataPost('Slider/CreateSlider', {
data: panelSlider.value,
headers: { 'Content-Type': 'multipart/form-data' }
if (!(panelSlider.value.resimUrl instanceof File)) {
toastStore.AddToast('Lütfen bir resim yükleyin.', 'error', 5000)
return
}
const formData = new FormData()
formData.append('Baslik', panelSlider.value.baslik ?? '')
formData.append('Url', panelSlider.value.url ?? '')
const siraVal = panelSlider.value.sira ?? panelSlider.value.Sira ?? 0
formData.append('Sira', String(siraVal))
formData.append('ResimUrl', panelSlider.value.resimUrl)
let add: any = await dataStore.dataPost('Slider/CreateSlider', {
data: formData
})
if (add !== 'errorfalse') {
panel.value = false