- Filtreleme yapısı değiştirildi.

- Tarihler için başlangıç-bitiş aralığı seçilebielcek
- geri dönüldüğünde çıkan hatalar düzeltildi
- filtrede date olan alanlar için başlangıç-bitiş seçimi eklendi
- axios serializer eklendi. array ile verilen parametrelerde hata çıkıyordu
This commit is contained in:
M. Bestami
2025-10-24 10:24:05 +03:00
parent f31bd6ba9e
commit 03689a01e3
18 changed files with 311 additions and 285 deletions

View File

@ -2162,7 +2162,7 @@ section {
} }
.panel-wrapper { .panel-wrapper {
max-width: 480px; max-width: 600px;
} }
.panel-wrapper.panel-wide { .panel-wrapper.panel-wide {
@ -2175,7 +2175,7 @@ section {
} }
.panel-wrapper.panel-right.showme { .panel-wrapper.panel-right.showme {
left: calc(100% - 480px); left: calc(100% - 600px);
} }
.panel-wrapper.panel-right.panel-wide.showme { .panel-wrapper.panel-right.panel-wide.showme {

View File

@ -71,6 +71,10 @@
if (Number(pageNumber.value) < totalPage()) pageNumber.value++ if (Number(pageNumber.value) < totalPage()) pageNumber.value++
} }
localPagination.value.pageNumber = pageNumber.value localPagination.value.pageNumber = pageNumber.value
IfRouteUsing()
emit('update:pagination', localPagination.value)
}
const IfRouteUsing = () => {
if (props.isUseRoute) { if (props.isUseRoute) {
router.push({ router.push({
query: { query: {
@ -79,16 +83,13 @@
} }
}) })
} }
emit('update:pagination', localPagination.value)
} }
const InputPageControl = (e: Event) => { const InputPageControl = (e: Event) => {
if (Number((e.target as HTMLInputElement).value) < 1) if (Number((e.target as HTMLInputElement).value) < 1)
(e.target as HTMLInputElement).value = '1' (e.target as HTMLInputElement).value = '1'
if (Number((e.target as HTMLInputElement).value) > totalPage()) if (Number((e.target as HTMLInputElement).value) > totalPage())
(e.target as HTMLInputElement).value = String(totalPage()) (e.target as HTMLInputElement).value = String(totalPage())
pageNumber.value = Number((e.target as HTMLInputElement).value) pageNumber.value = Number((e.target as HTMLInputElement).value)
if ((e as KeyboardEvent).key === 'Enter') getPage() if ((e as KeyboardEvent).key === 'Enter') getPage()
} }
const PageNumberFocus = (e: Event) => { const PageNumberFocus = (e: Event) => {
@ -96,6 +97,7 @@
} }
const getPage = () => { const getPage = () => {
localPagination.value.pageNumber = pageNumber.value localPagination.value.pageNumber = pageNumber.value
IfRouteUsing()
emit('update:pagination', localPagination.value) emit('update:pagination', localPagination.value)
} }
const SetPageNumber = () => { const SetPageNumber = () => {
@ -104,6 +106,8 @@
localPagination.value.pageNumber = pageNumber.value = Number( localPagination.value.pageNumber = pageNumber.value = Number(
route.query.pageNumber route.query.pageNumber
) )
} else {
localPagination.value.pageNumber = pageNumber.value = 1
} }
} }
} }

View File

@ -61,7 +61,7 @@
@click="exportPanel = !exportPanel" @click="exportPanel = !exportPanel"
icon="export" /> icon="export" />
<icon-button <icon-button
v-if="filterable()" v-if="filterable"
classList="ico-section ico-section-header-btn" classList="ico-section ico-section-header-btn"
@click="OpenFilterPanel" @click="OpenFilterPanel"
icon="filter" /> icon="filter" />
@ -85,7 +85,7 @@
page === 'list' ? 'section-content section-inner' : '', page === 'list' ? 'section-content section-inner' : '',
page === 'form' ? 'form-part-content' : '' page === 'form' ? 'form-part-content' : ''
]"> ]">
<div class="list-filter-wrapper" v-if="filters() || searched"> <div class="list-filter-wrapper" v-if="haveFilter || searched">
<h4>Filtreler ve Arama</h4> <h4>Filtreler ve Arama</h4>
<div class="list-filter-content"> <div class="list-filter-content">
<template v-if="localQuery !== ''"> <template v-if="localQuery !== ''">
@ -97,14 +97,21 @@
<span class="list-filter-close" @click="RemoveSearch"></span> <span class="list-filter-close" @click="RemoveSearch"></span>
</div> </div>
</template> </template>
<template v-for="(filter, k) in filterParams"> <template v-for="(filterA, index) in filterParams" :key="index">
<div class="list-filter-item" data-filter="durum-onaylanmis"> <template v-for="(filter, filterIndex) in filterA.values" :key="filterIndex">
<strong>{{ filter.title }}:</strong> <div
<span> class="list-filter-item"
{{ filter.text || filter.val }} {{ filter.op === '=' ? '' : filter.op }} data-filter="durum-onaylanmis"
</span> v-if="filterA.filter && (filter.text !== '' || filter.val !== '')">
<span class="list-filter-close" @click="RemoveFilterKey(k as string)"></span> <strong>{{ filterA.title }}:</strong>
</div> <span>
{{ filter.text || filter.val }} {{ filter.op === '=' ? '' : filter.op }}
</span>
<span
class="list-filter-close"
@click="RemoveFilterKey(index, filterIndex)"></span>
</div>
</template>
</template> </template>
</div> </div>
</div> </div>
@ -127,10 +134,7 @@
<panel-wrapper v-if="filterPanel" v-model="filterPanel" :panel-title="'Filtreleme'"> <panel-wrapper v-if="filterPanel" v-model="filterPanel" :panel-title="'Filtreleme'">
<template #panelContent> <template #panelContent>
<panel-filter <panel-filter :filterHead="tableHeader" :filterParams="localFilterParams" />
:filterHead="tableHeader"
v-model:filterParams="localFilterParams"
:isUseRoute="isUseRoute" />
</template> </template>
<template #footerButton> <template #footerButton>
<div class="button-c button-save" @click="FilterData">Filtrele</div> <div class="button-c button-save" @click="FilterData">Filtrele</div>
@ -260,11 +264,10 @@
const localTotalRecord = ref<string | number>(0) const localTotalRecord = ref<string | number>(0)
if (props.totalRecord !== undefined) localTotalRecord.value = props.totalRecord if (props.totalRecord !== undefined) localTotalRecord.value = props.totalRecord
const localFilterParams = ref<Record<string, any>>({}) const localFilterParams = ref<Record<string, any>[]>([])
const filterParams = reactive<Record<string, any>>({}) const filterParams = ref<Record<string, any>[]>([])
const OpenFilterPanel = () => { const OpenFilterPanel = () => {
Object.assign(localFilterParams.value, filterParams)
filterPanel.value = true filterPanel.value = true
} }
@ -273,28 +276,74 @@
if (dest[keys] === undefined) delete source[keys] if (dest[keys] === undefined) delete source[keys]
}) })
} }
const CreateFilterData = () => {
props.tableHeader.forEach((d: Record<string, any>, ind: number) => {
if (d.filter !== undefined) {
const filterKey = d.filter.filterId || d.name
const filterItem: Record<string, any> = {}
const firstVal: Record<string, any> = {}
const secondVal: Record<string, any> = {}
const FilterData = async () => { filterItem.title = d.title
Object.keys(filterParams).forEach((k) => { filterItem.type = d.filter.type
delete filterParams[k] filterItem.between = d.filter.between || false
}) filterItem.range = d.filter.range || false
Object.assign(filterParams, localFilterParams.value) filterItem.key = filterKey
EqualObjects(filterParams, localFilterParams.value) filterItem.filter = false
filterItem.hIndex = ind
filterItem.values = []
if (props.isUseRoute) { const opKey =
Object.keys(route.query).forEach((k) => { d.filter.type === 'date'
if (k.includes('Filters[')) delete route.query[k] ? d.filter.between !== undefined && d.filter.between
}) ? '>'
const q = { : '='
query: { : '='
...route.query firstVal.op = opKey
firstVal.val = ''
firstVal.text = ''
filterItem.values.push(firstVal)
if (d.filter.between !== undefined && d.filter.between) {
secondVal.op = '<'
secondVal.val = ''
secondVal.text = ''
filterItem.values.push(secondVal)
} }
localFilterParams.value.push(filterItem)
} }
Object.keys(filterParams).forEach((f, k) => { })
q.query['Filters[' + f + ']'] = filterParams[f].op + filterParams[f].val }
const AddParamsToObject = (obj: Record<string, any>) => {
filterParams.value.forEach((filter, index) => {
if (filter.filter) {
const key = 'Filters[' + filter.key + ']'
if (obj[key] === undefined) obj[key] = [] as string[]
filter.values.forEach((val: Record<string, any>, vIndex: number) => {
if (val.val !== '') {
;(obj[key] as string[]).push(val.op + val.val)
}
})
}
})
}
const ResetFilterQueries = async () => {
if (props.isUseRoute) {
const newQuery: Record<string, any> = {
...route.query
}
Object.keys(newQuery).forEach((q) => {
if (q.includes('Filters[')) delete newQuery[q]
}) })
router.push(q) await router.replace({ query: newQuery })
AddParamsToObject(newQuery)
await router.push({ query: newQuery })
} }
}
const FilterData = async () => {
filterParams.value = JSON.parse(JSON.stringify(localFilterParams.value))
ResetFilterQueries()
setTimeout(async () => { setTimeout(async () => {
await GetLocalData() await GetLocalData()
filterPanel.value = false filterPanel.value = false
@ -306,23 +355,32 @@
(props.addAction as Function)() (props.addAction as Function)()
} }
const filterable = () => { const filterable = computed(() =>
return props.tableHeader.filter((e) => e.hasOwnProperty('filter')).length > 0 props.tableHeader.some((obj: Record<string, any>) => obj.filter !== undefined)
} )
const filters = (): boolean => { const haveFilter = computed(() =>
return Object.keys(filterParams).length > 0 filterParams.value.some((obj: Record<string, any>) => obj.filter)
} )
const RemoveFilterKey = (k: string) => { const RemoveFilterKey = (index: number, fIndex: number) => {
delete localFilterParams.value[k]
delete filterParams[k]
const query: Record<string, any> = { ...route.query } const query: Record<string, any> = { ...route.query }
Object.keys(query).forEach((q) => {
if (q.includes(k)) delete query[q] filterParams.value[index].values[fIndex].val = ''
}) filterParams.value[index].values[fIndex].text = ''
router.push({ query: query })
GetLocalData() const allEmpty: boolean = filterParams.value[index].values.every(
(obj: Record<string, any>) => obj.val === ''
)
if (allEmpty) filterParams.value[index].filter = false
localFilterParams.value = JSON.parse(JSON.stringify(filterParams.value))
ResetFilterQueries()
setTimeout(async () => {
await GetLocalData()
filterPanel.value = false
}, 50)
} }
const RemoveSearch = () => { const RemoveSearch = () => {
localQuery.value = '' localQuery.value = ''
@ -396,52 +454,61 @@
const RouteFilterControl = () => { const RouteFilterControl = () => {
if (props.isUseRoute) { if (props.isUseRoute) {
const q = { ...route.query }
localFilterParams.value = {}
Object.keys(filterParams).forEach((k) => {
delete filterParams[k]
})
filterChanging.value = true filterChanging.value = true
console.log('c', localFilterParams.value, route.query)
if (Object.keys(route.query).length > 0) { if (Object.keys(route.query).length > 0) {
Object.keys(route.query).forEach((key) => { Object.keys(route.query).forEach((key) => {
if (key.includes('Filters[')) { if (key.includes('Filters[')) {
const newKey = key.match(/(?<=\[)[^\]]+(?=\])/)![0] const newKey = key.match(/(?<=\[)[^\]]+(?=\])/)![0]
filterParams[newKey] = {}
localFilterParams.value[newKey] = {}
filterParams[newKey].op = (route.query[key]! as string).charAt(0) localFilterParams.value.forEach((filter: Record<string, any>) => {
localFilterParams.value[newKey].op = (route.query[key]! as string).charAt(0) if (filter.key === newKey) {
if (!filter.filter) {
const isArray = Array.isArray(route.query[key])
if (isArray) {
;(route.query[key]! as string[]).forEach((val, ind) => {
filter.values[ind].op = (route.query[key]! as string[])[ind].charAt(
0
)
filter.values[ind].val = (route.query[key]! as string[])[ind].slice(
1
)
if (filter.type === 'select') {
const forText = props.tableHeader[
filter.hIndex
].filter!.data.find(
(o: Record<string, any>) =>
String(
o[props.tableHeader[filter.hIndex].filter!.listVal]
) === String(filter.values[ind].val)
)
filter.values[ind].text =
forText[props.tableHeader[filter.hIndex].filter!.listText]
}
})
} else {
filter.values[0].op = (route.query[key] as string).charAt(0)
filter.values[0].val = (route.query[key] as string).slice(1)
filterParams[newKey].val = (route.query[key]! as string).slice(1) if (filter.type === 'select') {
localFilterParams.value[newKey].val = (route.query[key]! as string).slice(1) const forText = props.tableHeader[filter.hIndex].filter!.data.find(
(o: Record<string, any>) =>
String(o[props.tableHeader[filter.hIndex].filter!.listVal]) ===
String(filter.values[0].val)
)
filter.values[0].text =
forText[props.tableHeader[filter.hIndex].filter!.listText]
}
}
filter.filter = true
}
}
})
} }
}) })
}
props.tableHeader.forEach((head: Record<string, any>) => { filterParams.value = JSON.parse(JSON.stringify(localFilterParams.value))
if (head.filter !== undefined) { }
Object.keys(filterParams).forEach((key) => {
if (
(head.filter.filterId !== undefined && key === head.filter.filterId) ||
key === head.name
) {
filterParams[key].title = head.title
localFilterParams.value[key].title = head.title
if (
head.filter.type === 'select' &&
head.filter.data !== undefined &&
head.filter.data.length > 0
) {
const forText = head.filter.data.find((o: Record<string, any>) => {
return String(o[head.filter.listVal]) === String(filterParams[key].val)
})
filterParams[key].text = forText[head.filter.listText]
localFilterParams.value[key].text = forText[head.filter.listText]
}
}
})
}
})
nextTick(() => { nextTick(() => {
filterChanging.value = false filterChanging.value = false
}) })
@ -484,11 +551,7 @@
} }
// Filtre parametrelerini ekle // Filtre parametrelerini ekle
if (filters()) { if (haveFilter.value) AddParamsToObject(exportParams)
Object.keys(filterParams).forEach((f, k) => {
exportParams['Filters[' + f + ']'] = filterParams[f].op + filterParams[f].val
})
}
// Axios ile dosya indirme - interceptor otomatik olarak token ekleyecek // Axios ile dosya indirme - interceptor otomatik olarak token ekleyecek
try { try {
@ -538,10 +601,8 @@
var filterparam: Record<string, any> = {} var filterparam: Record<string, any> = {}
if (filters()) { if (haveFilter.value) {
Object.keys(filterParams).forEach((f, k) => { AddParamsToObject(filterparam)
filterparam['Filters[' + f + ']'] = filterParams[f].op + filterParams[f].val
})
Object.assign(apiData.params, filterparam) Object.assign(apiData.params, filterparam)
} }
let dt = await dataStore.dataGet(props.apiList as string, apiData) let dt = await dataStore.dataGet(props.apiList as string, apiData)
@ -587,7 +648,7 @@
let el: HTMLInputElement = document.getElementById( let el: HTMLInputElement = document.getElementById(
'listsearch' + rnd.value 'listsearch' + rnd.value
) as HTMLInputElement ) as HTMLInputElement
el.focus el.focus()
el.select() el.select()
}, 50) }, 50)
} }
@ -614,41 +675,17 @@
mobileButtons.value = false mobileButtons.value = false
} }
// Filtre başlığını almak için yardımcı fonksiyon
const getFilterTitle = (key: string): string => {
const filterTitles: Record<string, string> = {
'durumId': 'Durum',
'piyangoAmacId': 'Piyango Amacı',
'cekilisYontemiId': 'Çekiliş Yöntemi'
}
return filterTitles[key] || key
}
onBeforeMount(() => { onBeforeMount(() => {
if (globalStore.screenWidth >= globalStore.breakPoints.tabletp) if (globalStore.screenWidth >= globalStore.breakPoints.tabletp)
mobileButtons.value = true mobileButtons.value = true
CreateFilterData()
RoutePageControl() RoutePageControl()
RouteSortControl() RouteSortControl()
RouteSearchControl() RouteSearchControl()
RouteFilterControl() RouteFilterControl()
// URL query parametrelerini kontrol et ve filtreleri uygula (ilk istekten önce)
if (Object.keys(route.query).length > 0) {
Object.keys(route.query).forEach(key => {
const value = route.query[key]
if (value && typeof value === 'string') {
// Filtre parametresini filterParams'a ekle
filterParams[key] = {
val: value,
op: '=',
title: getFilterTitle(key)
}
}
})
}
if (props.apiList !== undefined) GetLocalData() if (props.apiList !== undefined) GetLocalData()
window.addEventListener('resize', Resize) window.addEventListener('resize', Resize)
}) })
@ -678,14 +715,6 @@
} }
} }
) )
watch(
() => localPagination.value.pageNumber,
() => {
if (!pageNumberChanging.value) {
GetLocalData()
}
}
)
watch( watch(
() => props.refresh, () => props.refresh,
() => { () => {

View File

@ -1,107 +1,104 @@
<template> <template>
<template v-for="(filter, i) in filterHead"> <template v-for="(filter, i) in localFilterParams">
<template v-if="filter.filter !== undefined"> <template v-if="filter.type === 'datetime-local'">
<template v-if="filter.filter.type === 'datetime-local'"> <div class="panel-content-item">
<div class="panel-content-item"> <form-date
<form-date v-model="filter.values[0].val"
v-model="localFilterData[filter.name]" :label="
:label="filter.title" filter.title +
@change="UpdateFilter(filter)" /> (filter.between !== undefined && filter.between ? ' (Başlangıç)' : '')
<form-select "
v-if="filter.filter.range !== undefined && filter.filter.range" @change="UpdateFilter(filter, 0)" />
:listData="filterOperator" <form-select
v-model="localFilterData[filter.name + 'op']" v-if="filter.range !== undefined && filter.range"
@change="UpdateFilter(filter)" /> :listData="filterOperator"
</div> v-model="filter.values[0].op"
</template> @change="UpdateFilter(filter, 0)"
<template v-if="filter.filter.type === 'date'"> label="Operator" />
<div class="panel-content-item"> <form-date
<form-date v-if="filter.between !== undefined && filter.between"
type="date" v-model="filter.values[1].val"
v-model="localFilterData[filter.name]" :label="
:label="filter.title" filter.title +
@change="UpdateFilter(filter)" /> (filter.between !== undefined && filter.between ? ' (Bitiş)' : '')
<form-select "
v-if="filter.filter.range !== undefined && filter.filter.range" @change="UpdateFilter(filter, 1)" />
:listData="filterOperator" </div>
v-model="localFilterData[filter.name + 'op']" </template>
@change="UpdateFilter(filter)" /> <template v-if="filter.type === 'date'">
</div> <div class="panel-content-item">
</template> <form-date
<template v-if="filter.filter.type === 'text'"> type="date"
<div class="panel-content-item"> v-model="filter.values[0].val"
<form-input :label="
v-model="localFilterData[filter.name]" filter.title +
:label="filter.title" (filter.between !== undefined && filter.between ? ' (Başlangıç)' : '')
@change="UpdateFilter(filter)" /> "
<form-select @change="UpdateFilter(filter, 0)" />
v-if="filter.filter.range !== undefined && filter.filter.range" <form-select
:listData="filterOperator" v-if="filter.range !== undefined && filter.range"
v-model="localFilterData[filter.name + 'op']" :listData="filterOperator"
@change="UpdateFilter(filter)" /> v-model="filter.values[0].op"
</div> @change="UpdateFilter(filter, 0)"
</template> label="Operator" />
<template v-if="filter.filter.type === 'select'"> <form-date
<div class="panel-content-item"> v-if="filter.between !== undefined && filter.between"
<form-select type="date"
:listData="filter.filter.data" v-model="filter.values[1].val"
:listText="filter.filter.listText" :label="
:listVal="filter.filter.listVal" filter.title +
:extraData="filter" (filter.between !== undefined && filter.between ? ' (Bitiş)' : '')
:label="filter.title" "
v-model="localFilterData[filter.filter.filterId || filter.name] as number" @change="UpdateFilter(filter, 1)" />
@change="UpdateFilterSelect" </div>
clearable /> </template>
</div> <template v-if="filter.type === 'text'">
</template> <div class="panel-content-item">
<form-input
v-model="filter.values[0].val"
:label="filter.title"
@change="UpdateFilter(filter, 0)" />
<form-select
v-if="filter.range !== undefined && filter.range"
:listData="filterOperator"
v-model="filter.values[0].op"
@change="UpdateFilter(filter, 0)"
label="Operator" />
</div>
</template>
<template v-if="filter.type === 'select'">
<div class="panel-content-item">
<form-select
:listData="filterHead[filter.hIndex].filter.data"
:listText="filterHead[filter.hIndex].filter.listText"
:listVal="filterHead[filter.hIndex].filter.listVal"
:extraData="{ f: filter, k: filterHead[filter.hIndex].filter.listText }"
:label="filter.title"
v-model="filter.values[0].val"
@change="UpdateFilterSelect"
clearable />
</div>
</template> </template>
</template> </template>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onBeforeMount, nextTick } from 'vue' import { ref } from 'vue'
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
const props = defineProps<{ const props = defineProps<{
filterHead: Record<string, any> filterHead: Record<string, any>[]
filterParams: Record<string, any> filterParams: Record<string, any>[]
isUseRoute?: boolean
}>() }>()
const emit = defineEmits(['update:filterParams']) const emit = defineEmits(['update:filterParams'])
const localFilterParams = ref<Record<string, any>[]>(props.filterParams)
const localFilterData = reactive<Record<string, any>>({})
const localFilterParams = reactive<Record<string, any>>(
Object.assign(props.filterParams)
)
const filterOperator = ref<string[]>(['=', '<', '>']) const filterOperator = ref<string[]>(['=', '<', '>'])
const createFilterData = () => { const UpdateFilter = (filter: Record<string, any>, index: number) => {
props.filterHead.forEach((d: Record<string, any>) => { const allEmpty: boolean = filter.values.every(
if (d.filter !== undefined) { (obj: Record<string, any>) => obj.val === ''
let filterKey = d.filter.filterId || d.name )
localFilterData[filterKey] = '' if (filter.values[index].val === '') filter.values[index].text = ''
localFilterData[filterKey + 'op'] = '=' filter.filter = !allEmpty
}
})
Object.keys(localFilterParams).forEach((k, i) => {
localFilterData[k] = localFilterParams[k].val
localFilterData[k + 'op'] = localFilterParams[k].op
})
}
const UpdateFilter = (k: Record<string, any>) => {
let filterKey = k.filter.filterId || k.name
if (localFilterData[filterKey] !== '') {
localFilterParams[filterKey] = {}
localFilterParams[filterKey].val = localFilterData[filterKey]
localFilterParams[filterKey].op = localFilterData[filterKey + 'op']
localFilterParams[filterKey].title = k.title
} else delete localFilterParams[filterKey]
emit('update:filterParams', localFilterParams)
} }
const UpdateFilterSelect = ( const UpdateFilterSelect = (
e: Event, e: Event,
@ -109,20 +106,15 @@
d: Record<string, any>, d: Record<string, any>,
ext: Record<string, any> ext: Record<string, any>
) => { ) => {
let filterKey = ext.filter.filterId || ext.name console.log(v,d)
if (v !== '' && v !== null && localFilterData[filterKey] !== '') { if (v !== '' && v !== null) {
localFilterParams[filterKey] = {} ext.f.values[0].val = v
localFilterParams[filterKey].val = localFilterData[filterKey] ext.f.values[0].text = d[ext.k]
localFilterParams[filterKey].op = localFilterData[filterKey + 'op'] ext.f.filter = true
localFilterParams[filterKey].title = ext.title
localFilterParams[filterKey].text = d[ext.filter.listText]
} else { } else {
delete localFilterParams[filterKey] console.log("-----")
ext.f.filter = false
ext.f.values[0].text = ''
} }
emit('update:filterParams', localFilterParams)
} }
onBeforeMount(() => {
createFilterData()
})
</script> </script>

View File

@ -32,7 +32,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onMounted, onBeforeMount, watch } from 'vue' import { ref, computed, onMounted, onBeforeMount, watch, nextTick } from 'vue'
import { useGlobalStore } from '@/stores/globalStore' import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
@ -85,8 +85,10 @@
currentTab.value = Number(d) currentTab.value = Number(d)
} }
if (props.isUseRoute) { if (props.isUseRoute) {
router.push({ nextTick(() => {
params: { ...route.params, tabid: props.tabList[currentTab.value].id } router.push({
params: { ...route.params, tabid: props.tabList[currentTab.value].id }
})
}) })
} }
CalculateNavPosition() CalculateNavPosition()

View File

@ -5,6 +5,23 @@ import router from '@/router'
axios.defaults.baseURL = import.meta.env.VITE_API_URL axios.defaults.baseURL = import.meta.env.VITE_API_URL
//axios.defaults.timeout = 2000; //axios.defaults.timeout = 2000;
axios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8' axios.defaults.headers['Content-Type'] = 'application/json; charset=utf-8'
//Filtrelerde aynı key birden fazla parametre array ile eklendiğinde url oluştururken [] ekleyerek oluşturmasını engellemek için serializer eklendi
axios.defaults.paramsSerializer = (params) => {
const queryParts: string[] = []
for (const key in params) {
const value = params[key]
if (Array.isArray(value)) {
value.forEach((v) => {
queryParts.push(`${key}=${encodeURIComponent(v)}`)
})
} else if (value !== undefined && value !== null) {
queryParts.push(`${key}=${encodeURIComponent(value)}`)
}
}
return queryParts.join('&')
}
import { useDataStore } from '@/stores/dataStore' import { useDataStore } from '@/stores/dataStore'
// İstek Öncesinde Çalışacak Bir Fonksiyon // İstek Öncesinde Çalışacak Bir Fonksiyon

View File

@ -59,7 +59,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {

View File

@ -32,7 +32,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {

View File

@ -62,7 +62,6 @@ export const usePiyangoKatilimciService = defineStore('piyangoKatilimciService',
const KatilimciFileUpload = async () => { const KatilimciFileUpload = async () => {
if (piyangoKatilimciValidationStore.FileFormCheck()) { if (piyangoKatilimciValidationStore.FileFormCheck()) {
console.log('Katilimci File Upload')
const formData = new FormData() const formData = new FormData()
formData.append('excelFile', piyangoKatilimciStore.piyangoKatilimciFileFormData.excelFile) formData.append('excelFile', piyangoKatilimciStore.piyangoKatilimciFileFormData.excelFile)
let dt: any let dt: any

View File

@ -1,6 +1,6 @@
<template> <template>
<AdminLayout> <AdminLayout>
<Breadcrumb currentPageText="Piyango Listesi" go="/"/> <Breadcrumb currentPageText="Piyango Listesi" go="/" />
<div <div
class="form-inner-comment waiting-d" class="form-inner-comment waiting-d"
v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4"> v-if="!usersStore.isPanelUser && usersStore.userApproveId !== 4">
@ -18,13 +18,12 @@
:addRoute="addApiControl" :addRoute="addApiControl"
:apiList="apiList" :apiList="apiList"
apiText="Piyango Listesi" apiText="Piyango Listesi"
isUseRoute/> isUseRoute />
</section> </section>
</AdminLayout> </AdminLayout>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, onBeforeMount, onMounted } from 'vue' import { ref, computed, onBeforeMount } from 'vue'
import { useRoute } from 'vue-router'
import AdminLayout from '@/layouts/AdminLayout.vue' import AdminLayout from '@/layouts/AdminLayout.vue'
import { useDateStore } from '@/stores/dateStore' import { useDateStore } from '@/stores/dateStore'
@ -40,7 +39,6 @@
const piyangoServices = usePiyangoServices() const piyangoServices = usePiyangoServices()
import router from '@/router' import router from '@/router'
const route = useRoute()
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
const apiList = ref<string>('') const apiList = ref<string>('')
@ -77,7 +75,6 @@
style: { width: '10%' } style: { width: '10%' }
}) })
if (usersStore.isAraciFirma || usersStore.isPanelUser) { if (usersStore.isAraciFirma || usersStore.isPanelUser) {
header.push({ name: 'duzenleyen', title: 'Düzenleyen' }) header.push({ name: 'duzenleyen', title: 'Düzenleyen' })
} }
@ -110,7 +107,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
} }
) )
@ -120,13 +117,13 @@
name: 'cekilisTarihi', name: 'cekilisTarihi',
title: 'Çekiliş Tarihi', title: 'Çekiliş Tarihi',
compute: (v: Record<string, any>): string => { compute: (v: Record<string, any>): string => {
if(v.piyangoAmacId === 3) return '' if (v.piyangoAmacId === 3) return ''
else return dateStore.dateFormat({ date: v.cekilisTarihi }) else return dateStore.dateFormat({ date: v.cekilisTarihi })
}, },
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}) })
} }
@ -142,7 +139,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -155,7 +152,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
} }
) )
@ -233,7 +230,7 @@
// tablodan herhangi bir satır tıklayınca çalısır // tablodan herhangi bir satır tıklayınca çalısır
const OpenPiyango = (row: any) => { const OpenPiyango = (row: any) => {
router.push('detay/' + row.id+'/piyango-bilgileri') router.push('detay/' + row.id + '/piyango-bilgileri')
} }
onBeforeMount(async () => { onBeforeMount(async () => {
@ -243,13 +240,4 @@
loaded.value = true loaded.value = true
}) })
onMounted(() => {
// URL query parametrelerini kontrol et ve filtreleri uygula
if (route.query.durumId) {
// Filtre parametresini ListTableContent bileşenine iletmek için
// Bu parametre otomatik olarak ListTableContent tarafından işlenecek
console.log('Durum filtresi uygulanıyor:', route.query.durumId)
}
})
</script> </script>

View File

@ -78,7 +78,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -90,7 +90,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -102,7 +102,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -114,7 +114,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {

View File

@ -217,7 +217,6 @@
} }
} }
const GetIkramiyeTotalValues = async () => { const GetIkramiyeTotalValues = async () => {
console.log(piyangoStore, 'piyangoStore')
let data = await dataStore.dataGet('Ikramiye/Cekilis/' + piyangoStore.selectedLottery +'?pageNumber=0') let data = await dataStore.dataGet('Ikramiye/Cekilis/' + piyangoStore.selectedLottery +'?pageNumber=0')
//todo:page 0 //todo:page 0
if (data !== 'errorfalse') { if (data !== 'errorfalse') {
@ -281,7 +280,6 @@
}) })
} }
const BasvuruBedeliMuhasebelestir = async () => { const BasvuruBedeliMuhasebelestir = async () => {
console.log('basvuru bedeli muhasebelestir')
let data = await dataStore.dataGet( let data = await dataStore.dataGet(
'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery 'MuhasebeSettings/BasvuruBedeli/' + piyangoStore.selectedLottery
) )

View File

@ -88,7 +88,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
} }
) )
@ -103,7 +103,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}) })
} }
@ -119,7 +119,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -132,7 +132,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
} }
) )

View File

@ -153,10 +153,7 @@
} }
const loadSliders = async () => { const loadSliders = async () => {
const data = await dataStore.dataGet('Slider') const data = await dataStore.dataGet('Slider')
console.log('apidata', data)
sliders.value = data sliders.value = data
console.log(sliders.value)
} }
const save = async () => { const save = async () => {

View File

@ -86,7 +86,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -98,7 +98,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -110,7 +110,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -122,7 +122,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {

View File

@ -66,7 +66,7 @@
}, },
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
}, },
style: { width: '10%' } style: { width: '10%' }
}, },

View File

@ -51,7 +51,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
}, },
style:{width:'15%'} style:{width:'15%'}
}, },

View File

@ -63,7 +63,7 @@
}, },
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
}, },
style: { width: '10%' } style: { width: '10%' }
}, },