14 Commits

Author SHA1 Message Date
e8f914b321 Update refreshList logic in PiyangoOnay components to prevent immediate refresh. Introduce a timeout before setting refreshList to true after form submission, ensuring smoother user experience. 2025-12-10 12:34:12 +03:00
bd93496e4d Add new fields for "Müdürlük" and "Çekiliş Görevlisi" in FormPiyangoOnay component. Implement conditional rendering based on "onayDurumuIslemTipiId". Update data store to ensure toast notifications are handled correctly after API calls. 2025-12-10 12:31:25 +03:00
9da5f9946b Refactor filter handling in DashPiyangoListe and ListTableContent components. Updated tableData type to an array and improved query parameter construction for filters, including error handling during navigation. Enhanced filter value retrieval logic to ensure proper text assignment based on available data. 2025-12-09 16:12:49 +03:00
b0386d53e5 Add row deletion functionality and enhance table filters in Piyango views. Implemented confirmation dialog for row deletion and updated filter options for various table columns to improve user experience. 2025-12-09 14:01:25 +03:00
f6c1b242b2 Enhance Piyango and Muhasebe views with additional table headers and computed properties for better data representation. Added global store integration for currency formatting and improved date handling. Updated conditional rendering for user roles and refined filter options. 2025-12-09 07:47:04 +03:00
b422187704 . 2025-12-09 07:35:42 +03:00
678a96d76f dosyaları ayırarak kaydedildiğinde build hatası verenlerin ayrılması kaldırıldı 2025-10-24 20:09:48 +03:00
cb9d2f220f - build için dosyalar ayrı kaydedilecek şekilde düzenleme yapıldı
- gereksiz paketler package.json dan silindi
- Kullanılmayan quill dosyaları silindi
2025-10-24 12:03:32 +03:00
03689a01e3 - 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
2025-10-24 10:24:05 +03:00
f31bd6ba9e Listablecontent 2025-10-17 09:48:18 +03:00
5fe3a36893 signalrService.ts 2025-10-06 11:58:09 +03:00
4dae2824fb piyangoDosyaKapamaStore.ts 2025-10-06 11:57:57 +03:00
6d4d0c8be9 PanelPiyangoDosyaKapamaIkramiye.vue 2025-10-06 11:57:36 +03:00
bf047e36f3 - Pasword alanları için şifreyi görüntüle-gizle özelliği 2025-10-06 11:29:39 +03:00
43 changed files with 1583 additions and 817 deletions

23
Configs.ts Normal file
View File

@ -0,0 +1,23 @@
// build olurken bazı klasorlerin ayri script olarak kaydedilmesi
export const TEMPLATE_CHUNK_GROUPS: Record<string, (RegExp | string)[]> = {
store: [/\/src\/stores\//],
//lott: [/\/src\/module\/cekilisler\//],
//user: [/\/src\/module\/kullanicilar\//],
//cust: [/\/src\/module\/uyeler\//],
//acc: [/\/src\/module\/muhasebe\//],
//site: [/\/src\/module\/site-yonetimi\//],
//aut: [/\/src\/module\/auth\//]
}
// id -> group_name
export function SetTemplateGroup(id: string): string | undefined {
const cleanId = id.split('?')[0]
for (const [group, pats] of Object.entries(TEMPLATE_CHUNK_GROUPS)) {
if (
pats.some((p) => (typeof p === 'string' ? cleanId.includes(p) : p.test(cleanId)))
) {
return group
}
}
return undefined
}

View File

@ -21,8 +21,6 @@
"jquery": "^3.7.1", "jquery": "^3.7.1",
"parchment": "^3.0.0", "parchment": "^3.0.0",
"pinia": "^2.1.7", "pinia": "^2.1.7",
"quill": "^2.0.3",
"quill-image-resize-module": "^3.0.0",
"summernote": "^0.9.1", "summernote": "^0.9.1",
"uuid": "^11.1.0", "uuid": "^11.1.0",
"vue": "^3.4.29", "vue": "^3.4.29",

Binary file not shown.

Binary file not shown.

17
public/web.config Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Handle History Mode and custom 404/500" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

View File

@ -251,4 +251,14 @@
d="M14.3272 17.4867H5.66513C5.33609 17.4867 5.07048 17.7574 5.07048 18.0928C5.07048 18.4281 5.33609 18.6989 5.66513 18.6989H14.3232C14.6522 18.6989 14.9179 18.4281 14.9179 18.0928C14.9179 17.7574 14.6522 17.4867 14.3232 17.4867H14.3272Z" d="M14.3272 17.4867H5.66513C5.33609 17.4867 5.07048 17.7574 5.07048 18.0928C5.07048 18.4281 5.33609 18.6989 5.66513 18.6989H14.3232C14.6522 18.6989 14.9179 18.4281 14.9179 18.0928C14.9179 17.7574 14.6522 17.4867 14.3232 17.4867H14.3272Z"
/> />
</symbol> </symbol>
<symbol id="eyeclose" viewBox="0 0 59 22">
<path
d="M56.61,11.89l2.55-1.57L52.83.03l-2.55,1.57h0s-11.76,7.25-11.76,7.25c-.94.58-1.91,1.05-2.91,1.43l-2.61.74v.02c-2.43.5-4.94.45-7.36-.14l-1.2-.34c-1.28-.41-2.53-.98-3.72-1.71L7.68.82h0s-1.35-.82-1.35-.82L0,10.28l2.55,1.57,4.76-7.73,6.18,3.81-4.79,7.77,2.55,1.57,4.79-7.77,3.09,1.9c1.15.71,2.35,1.28,3.58,1.74l-2.48,8.78,2.89.82,2.48-8.76c1.32.27,2.66.41,4.01.41,1.41,0,2.82-.16,4.2-.46l2.46,8.7,2.89-.82-2.48-8.75c1.16-.44,2.3-.99,3.39-1.66l3.12-1.92,4.79,7.77,2.55-1.57-4.79-7.77,6.08-3.75,4.75,7.72Z" />
</symbol>
<symbol id="eye" viewBox="0 0 51 24">
<path
d="M25.59,24.58c-3.62,0-7.24-.99-10.47-2.98L0,12.29,15.11,2.98c6.46-3.98,14.48-3.98,20.94,0l15.11,9.31-15.11,9.31c-3.23,1.99-6.85,2.98-10.47,2.98ZM5.72,12.29l10.97,6.75c5.49,3.38,12.31,3.38,17.8,0l10.97-6.75-10.97-6.75c-5.49-3.38-12.31-3.38-17.8,0l-10.97,6.75Z" />
<path
d="M25.59,21.71c-5.19,0-9.42-4.23-9.42-9.42S20.39,2.87,25.59,2.87s9.42,4.23,9.42,9.42-4.23,9.42-9.42,9.42ZM25.59,5.87c-3.54,0-6.42,2.88-6.42,6.42s2.88,6.42,6.42,6.42,6.42-2.88,6.42-6.42-2.88-6.42-6.42-6.42Z" />
</symbol>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -454,6 +454,7 @@ label {
flex-wrap: wrap; flex-wrap: wrap;
width: 100%; width: 100%;
padding: 2px; padding: 2px;
position: relative;
} }
label>span { label>span {
@ -726,6 +727,99 @@ svg {
background-color: #f1f1f1; background-color: #f1f1f1;
} }
/* İşlem durumu badge stilleri - basit ve kompakt */
.islem-status-badge {
display: inline-block;
padding: 4px 10px;
color: #fff;
border-radius: 12px;
font-size: 0.875em;
font-weight: 500;
white-space: nowrap;
line-height: 1.4;
}
.form-select-list-item .islem-status-badge {
display: inline-block;
width: auto;
}
.form-select-activator .islem-status-badge {
display: inline-block;
width: auto;
}
/* Her durum için benzersiz canlı renkler */
.islem-status-coral {
background: #e74c3c;
}
.islem-status-amber {
background: #f39c12;
}
.islem-status-sky {
background: #3498db;
}
.islem-status-rose {
background: #e91e63;
}
.islem-status-pink {
background: #ec407a;
}
.islem-status-slate {
background: #607d8b;
color: #fff;
}
.islem-status-emerald {
background: #27ae60;
}
.islem-status-red {
background: #c0392b;
}
.islem-status-salmon {
background: #e67e22;
}
.islem-status-mint {
background: #2ecc71;
}
.islem-status-peach {
background: #ff9800;
}
.islem-status-yellow {
background: #f1c40f;
color: #333;
}
.islem-status-teal {
background: #1abc9c;
}
.islem-status-cyan {
background: #00bcd4;
}
.islem-status-orange {
background: #ff5722;
}
.islem-status-blue {
background: #2196f3;
}
.islem-status-gold {
background: #ffc107;
color: #333;
}
.islem-status-lavender {
background: #9c27b0;
}
.islem-status-violet {
background: #673ab7;
}
.islem-status-crimson {
background: #d32f2f;
}
.islem-status-indigo {
background: #3f51b5;
}
.islem-status-default {
background: #757575;
}
/* login */ /* login */
.login-w { .login-w {
min-width: 100%; min-width: 100%;
@ -2161,7 +2255,7 @@ section {
} }
.panel-wrapper { .panel-wrapper {
max-width: 480px; max-width: 600px;
} }
.panel-wrapper.panel-wide { .panel-wrapper.panel-wide {
@ -2174,7 +2268,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

@ -67,7 +67,7 @@
const router = useRouter() const router = useRouter()
const props = defineProps<{ const props = defineProps<{
tableData: Record<string, any> tableData: Record<string, any>[]
lineFunction?: Function lineFunction?: Function
title?: string title?: string
listText?: string listText?: string
@ -97,16 +97,36 @@
} }
const goToListWithFilter = () => { const goToListWithFilter = () => {
const query: Record<string, any> = {} try {
const query: Record<string, any> = {}
// Filtre parametrelerini query'ye ekle
if (props.filterParams) { // Filtre parametrelerini query'ye ekle (Filters[...] formatına dönüştür)
Object.assign(query, props.filterParams) if (props.filterParams && typeof props.filterParams === 'object') {
Object.keys(props.filterParams).forEach((key) => {
const value = props.filterParams![key]
if (value !== undefined && value !== null && value !== '') {
// Değer zaten operatör içeriyorsa olduğu gibi kullan, yoksa '=' ekle
let filterValue = String(value)
// Eğer değer zaten operatör içermiyorsa '=' ekle
if (!filterValue.match(/^[<>=]/)) {
filterValue = '=' + filterValue
}
// Query parametresine string olarak ekle (Vue Router array'leri yanlış serialize ediyor)
query[`Filters[${key}]`] = filterValue
}
})
}
router.push({
path: '/piyangolar/piyango-listesi',
query: query
})
} catch (error) {
console.error('goToListWithFilter hatası:', error)
// Hata durumunda filtre olmadan yönlendir
router.push({
path: '/piyangolar/piyango-listesi'
})
} }
router.push({
path: '/piyangolar/piyango-listesi',
query: query
})
} }
</script> </script>

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

@ -11,7 +11,7 @@
</span> </span>
<input <input
:value="modelValue" :value="modelValue"
:type="type" :type="inputType"
:placeholder="placeholder" :placeholder="placeholder"
:disabled="disabled" :disabled="disabled"
@input="OnInput" @input="OnInput"
@ -22,12 +22,24 @@
@keyup="OnKeyUp" @keyup="OnKeyUp"
:class="[ :class="[
invalidText !== undefined && invalidText !== '' ? 'invalid' : '', invalidText !== undefined && invalidText !== '' ? 'invalid' : '',
iclass || '' iclass || '',
isPasswordVisible || props.type === 'password' ? 'password-visible' : ''
]" ]"
:min="min" :min="min"
:max="max" :max="max"
:minlength="minlength" :minlength="minlength"
:maxlength="maxlength" /> :maxlength="maxlength" />
<i
class="ico-c ico-password-visible"
v-if="props.type === 'password'"
@click="PasswordVisibleToggle">
<svg>
<use
:href="
'/src/assets/images/icons.svg#' + (isPasswordVisible ? 'eye' : 'eyeclose')
"></use>
</svg>
</i>
<span <span
class="form-item-alert" class="form-item-alert"
v-if="InvalidMessages.length > 0 && InvalidMessages !== ''"> v-if="InvalidMessages.length > 0 && InvalidMessages !== ''">
@ -82,9 +94,18 @@
'keydown', 'keydown',
'keyup' 'keyup'
]) ])
const localValue = ref<any>() const isPasswordVisible = ref<boolean>(false)
const InvalidMessageText = reactive<Record<string, any>>({}) const InvalidMessageText = reactive<Record<string, any>>({})
const inputType = computed(() => {
if (props.type !== 'password') {
return props.type
} else {
if (isPasswordVisible.value) return 'text'
else return 'password'
}
})
const InvalidMessages = computed<string>(() => { const InvalidMessages = computed<string>(() => {
let text = '' let text = ''
Object.keys(InvalidMessageText).forEach((k: string, i: number) => { Object.keys(InvalidMessageText).forEach((k: string, i: number) => {
@ -138,7 +159,9 @@
emit('update:modelValue', (e.target as HTMLInputElement).value) emit('update:modelValue', (e.target as HTMLInputElement).value)
emit('keyup', e) emit('keyup', e)
} }
const PasswordVisibleToggle = () => {
if (props.type === 'password') isPasswordVisible.value = !isPasswordVisible.value
}
watch( watch(
() => props.invalidText, () => props.invalidText,
() => { () => {
@ -151,3 +174,16 @@
} }
) )
</script> </script>
<style scoped>
.ico-password-visible {
position: absolute;
right: 8px;
top: 32px;
min-width: 32px;
min-height: 32px;
cursor: pointer;
}
.password-visible {
padding: 8px 40px 8px 8px;
}
</style>

View File

@ -1,210 +0,0 @@
<template>
<div :class="['form-item', half ? 'form-item-half' : '', elclass || '']">
<span class="form-item-title" v-if="title !== undefined && title !== ''">
{{ title }}
</span>
<slot name="input">
<label>
<span v-if="label !== undefined && label !== ''">
{{ label }}
<i v-if="required" class="form-item-alert">*</i>
</span>
<div :ref="'quillContainer' + rnd"></div>
<span
class="form-item-alert"
v-if="InvalidMessages.length > 0 && InvalidMessages !== ''">
{{ InvalidMessages }}
</span>
<span
class="form-item-description"
v-if="description !== undefined && description !== ''">
{{ description }}
</span>
</label>
</slot>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, computed, onMounted, useTemplateRef, watch } from 'vue'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'
declare const window: any
window.Quill = Quill
export interface Props {
label?: string
disabled?: boolean
modelValue: string
half?: boolean
title?: string
invalidText?: string
description?: string
placeholder?: string
required?: boolean
maxlength?: string
minlength?: string
iclass?: string
elclass?: string
modelKey?: string
}
const props = withDefaults(defineProps<Props>(), {
disabled: false,
half: false,
required: false,
placeholder: ''
})
const emit = defineEmits(['update:modelValue', 'change', 'text-change'])
const rnd = ref<number>(Number(Math.random() * 10000000))
const toolbar = ref<any[]>([
[{ font: [] }, { size: [] }],
['bold', 'italic', 'underline', 'strike'],
[{ color: [] }, { background: [] }],
[{ script: 'super' }, { script: 'sub' }],
[{ header: '1' }, { header: '2' }, 'blockquote'],
[{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }],
[{ align: [] }],
['link', 'image', 'video'],
['clean']
])
const options = reactive<Record<string, any>>({
theme: 'snow',
modules: {
toolbar: toolbar.value,
imageResize: {
modules: ['Resize', 'DisplaySize', 'Toolbar']
}
},
placeholder: props.placeholder,
readOnly: false,
debug: false
})
const QuillImageResize = ref<any>()
const editor = useTemplateRef<any>('quillContainer' + rnd.value)
const quill = ref<Quill | null>(null)
const localValue = ref<string>(props.modelValue)
const InvalidMessageText = ref<Record<string, any>>({})
const InvalidMessages = computed(() => {
let text = ''
Object.keys(InvalidMessageText.value).forEach((k: string, i: number) => {
text += InvalidMessageText.value[k] + ', '
})
return text
})
const OnTextChange = (e: any) => {
if (props.minlength !== undefined) {
if (localValue.value.length < Number(props.minlength)) {
InvalidMessageText.value.minlength = `Girdiğiniz bilgi en az ${props.minlength} karakter uzunluğunda olmalı`
} else {
delete InvalidMessageText.value.minlength
}
}
if (quill.value !== null) {
localValue.value = quill.value!.container.querySelector('.ql-editor')!.innerHTML
}
emit('update:modelValue', localValue.value)
emit('change', e)
}
const InitializeEditor = async () => {
await setupQuillEditor()
SetContent()
RegisterEditorEventListeners()
}
const SetContent = () => {
if (props.modelValue) quill.value!.root.innerHTML = props.modelValue
}
const setupQuillEditor = async () => {
//let Parchment = Quill.import('parchment')
window.Quill.imports.parchment.Attributor.Style =
window.Quill.imports.parchment.StyleAttributor
//@ts-ignore
QuillImageResize.value = await import('quill-image-resize-module')
quill.value = new Quill(editor.value, options) as Quill
;(quill.value!.getModule('toolbar') as Record<
string,
any
>)!.container.addEventListener('mousedown', (e: Event) => {
e.preventDefault()
})
;(quill.value!.getModule('toolbar') as Record<
string,
any
>)!.container.addEventListener('click', (e: Event) => {
if ((e.target as HTMLElement).className !== 'ql-image') e.preventDefault()
})
}
const RegisterEditorEventListeners = () => {
quill.value!.on('text-change', OnTextChange)
quill.value!.on('editor-change', OnTextChange)
//image resize imaja tıklandığını anlamıyor.
quill.value!.root.addEventListener('mouseover', OnMouseOver, false)
ListenForEditorEvent('text-change')
}
const ListenForEditorEvent = (type: any) => {
quill.value!.on(type, (...args) => {
emit(type, ...args)
})
}
const OnMouseOver = (e: Event) => {
if (
(e.target as HTMLElement)!.firstChild &&
((e.target as HTMLElement)!.firstChild as HTMLElement)!.tagName &&
((e.target as HTMLElement)!.firstChild as HTMLElement)!.tagName.toUpperCase() ===
'IMG'
) {
;(e.target as HTMLElement)!.classList.add('remove-click-p')
;((e.target as HTMLElement)!.firstChild as HTMLElement)!.classList.add(
'add-click-img'
)
}
}
onMounted(async () => {
InitializeEditor()
})
watch(
() => props.invalidText,
() => {
if (props.invalidText !== undefined && props.invalidText !== '') {
InvalidMessageText.value.invalid = props.invalidText
} else {
delete InvalidMessageText.value.invalid
}
}
)
</script>
<style>
.ql-toolbar {
width: 100%;
}
.ql-container {
width: 100%;
min-height: 120px;
}
.remove-click-p {
pointer-events: none;
}
.add-click-img {
pointer-events: all;
}
</style>

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,76 @@
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
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 filterData = props.tableHeader[filter.hIndex].filter!.data
if (filterData && Array.isArray(filterData)) {
const forText = filterData.find(
(o: Record<string, any>) =>
String(
o[props.tableHeader[filter.hIndex].filter!.listVal]
) === String(filter.values[ind].val)
)
if (forText) {
filter.values[ind].text =
forText[props.tableHeader[filter.hIndex].filter!.listText]
} else {
filter.values[ind].text = filter.values[ind].val
}
} else {
filter.values[ind].text = filter.values[ind].val
}
}
})
} 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 filterData = props.tableHeader[filter.hIndex].filter!.data
if (filterData && Array.isArray(filterData)) {
const forText = filterData.find(
(o: Record<string, any>) =>
String(o[props.tableHeader[filter.hIndex].filter!.listVal]) ===
String(filter.values[0].val)
)
if (forText) {
filter.values[0].text =
forText[props.tableHeader[filter.hIndex].filter!.listText]
} else {
filter.values[0].text = filter.values[0].val
}
} else {
filter.values[0].text = filter.values[0].val
}
}
}
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
}) })
@ -468,9 +550,28 @@
fileName = 'export.xlsx' fileName = 'export.xlsx'
} }
// Export için parametreleri hazırla
let exportParams: Record<string, any> = {}
// Sıralama parametrelerini ekle
if (localSort.value.sortColumn !== undefined) {
exportParams.sortColumn = localSort.value.sortColumn
if (localSort.value.sortOrder !== undefined && localSort.value.sortOrder !== '')
exportParams.sortOrder = localSort.value.sortOrder
}
// Arama parametresini ekle
if (localQuery.value !== '') {
exportParams.searchString = localQuery.value
}
// Filtre parametrelerini ekle
if (haveFilter.value) AddParamsToObject(exportParams)
// Axios ile dosya indirme - interceptor otomatik olarak token ekleyecek // Axios ile dosya indirme - interceptor otomatik olarak token ekleyecek
try { try {
const response = await axios.get(exportUrl, { const response = await axios.get(exportUrl, {
params: exportParams,
responseType: 'blob' responseType: 'blob'
}) })
@ -515,10 +616,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)
@ -564,7 +663,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)
} }
@ -591,41 +690,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)
}) })
@ -655,14 +730,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,13 @@
d: Record<string, any>, d: Record<string, any>,
ext: Record<string, any> ext: Record<string, any>
) => { ) => {
let filterKey = ext.filter.filterId || ext.name if (v !== '' && v !== null) {
if (v !== '' && v !== null && localFilterData[filterKey] !== '') { ext.f.values[0].val = v
localFilterParams[filterKey] = {} ext.f.values[0].text = d[ext.k]
localFilterParams[filterKey].val = localFilterData[filterKey] ext.f.filter = true
localFilterParams[filterKey].op = localFilterData[filterKey + 'op']
localFilterParams[filterKey].title = ext.title
localFilterParams[filterKey].text = d[ext.filter.listText]
} else { } else {
delete localFilterParams[filterKey] 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,7 +5,6 @@ import FormInput from './FormInput.vue'
import FormDate from './FormDate.vue' import FormDate from './FormDate.vue'
import FormFile from './FormFile.vue' import FormFile from './FormFile.vue'
import FormTextarea from './FormTextarea.vue' import FormTextarea from './FormTextarea.vue'
import FormQuill from './FormQuill.vue'
import FormSummer from './FormSummer.vue' import FormSummer from './FormSummer.vue'
import FormSelect from './FormSelect.vue' import FormSelect from './FormSelect.vue'
import FormRadio from './FormRadio.vue' import FormRadio from './FormRadio.vue'
@ -25,7 +24,6 @@ export {
FormDate, FormDate,
FormFile, FormFile,
FormTextarea, FormTextarea,
FormQuill,
FormSummer, FormSummer,
FormSelect, FormSelect,
FormRadio, FormRadio,

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

@ -18,16 +18,27 @@
listVal="islemId" listVal="islemId"
v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId" v-model="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId"
required required
:invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId" /> :invalidText="piyangoOnayValidationStore.invalidTexts.onayDurumuIslemTipiId">
<template v-if="piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4"> <template #option="{ optionData }">
<form-input <span
modelKey="izinSayisi" v-if="optionData && optionData.tipAdi"
v-model="piyangoOnayStore.piyangoOnayForm.izinSayisi" class="islem-status-badge"
required :class="piyangoStore.GetIslemStatusClass(optionData.tipAdi)">
label="İzin Sayı No" {{ optionData.tipAdi }}
placeholder="İzin Sayı No" </span>
:invalidText="piyangoOnayValidationStore.invalidTexts.izinSayisi" <span v-else>{{ optionData?.tipAdi || optionData }}</span>
@keyup="OnKeyup" /> </template>
<template #activator="{ activatorData }">
<span
v-if="activatorData && activatorData.tipAdi"
class="islem-status-badge"
:class="piyangoStore.GetIslemStatusClass(activatorData.tipAdi)">
{{ activatorData.tipAdi }}
</span>
<span v-else>Lütfen Seçim Yapınız</span>
</template>
</form-select>
<template v-if="showIzinFields">
<form-date <form-date
type="date" type="date"
required required
@ -36,12 +47,50 @@
label="İzin Tarihi" label="İzin Tarihi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinTarihi" :invalidText="piyangoOnayValidationStore.invalidTexts.izinTarihi"
@change="OnKeyup" /> @change="OnKeyup" />
<form-input
modelKey="izinSayisi"
v-model="piyangoOnayStore.piyangoOnayForm.izinSayisi"
required
label="İzin Sayısı"
placeholder="İzin Sayısı"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinSayisi"
@keyup="OnKeyup" />
<form-textarea <form-textarea
v-model="piyangoOnayStore.piyangoOnayForm.izinAciklamasi" v-model="piyangoOnayStore.piyangoOnayForm.izinAciklamasi"
:invalidText="piyangoOnayValidationStore.invalidTexts.izinAciklamasi" :invalidText="piyangoOnayValidationStore.invalidTexts.izinAciklamasi"
label="İzin Açıklaması" label="İzin Açıklaması"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
</template> </template>
<template v-if="showIzinVerildiFields">
<form-select
label="Müdürlük"
:listData="mudurlukListesi"
listText="name"
listVal="id"
v-model="piyangoOnayStore.piyangoOnayForm.mudurlukId"
required
:invalidText="piyangoOnayValidationStore.invalidTexts.mudurlukId"
@change="OnKeyup" />
<form-select
label="Çekiliş Görevlisi"
:listData="cekilisGorevlisiListesi"
listText="name"
listVal="id"
v-model="piyangoOnayStore.piyangoOnayForm.cekilisGorevlisiId"
required
:invalidText="piyangoOnayValidationStore.invalidTexts.cekilisGorevlisiId"
@change="OnKeyup" />
</template>
<form-select
v-if="showKapsamDisiSebebi"
label="Kapsam Dışı Sebebi"
:listData="kapsamDisiSebepListesi"
listText="name"
listVal="id"
v-model="piyangoOnayStore.piyangoOnayForm.kapsamDisiSebebi"
required
:invalidText="piyangoOnayValidationStore.invalidTexts.kapsamDisiSebebi"
@change="OnKeyup" />
<form-file <form-file
v-model="piyangoOnayStore.piyangoOnayForm.file" v-model="piyangoOnayStore.piyangoOnayForm.file"
elclass="panel-documents-item" elclass="panel-documents-item"
@ -55,7 +104,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onBeforeMount } from 'vue' import { onBeforeMount, computed, ref } from 'vue'
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore' import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore'
@ -66,6 +115,62 @@
const piyangoDataStore = usePiyangoDataStore() const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoServices } from '../../service/piyangoServices' import { usePiyangoServices } from '../../service/piyangoServices'
const piyangoServices = usePiyangoServices() const piyangoServices = usePiyangoServices()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
const kapsamDisiId = computed<number | null>(() => {
const kapsamDisi = piyangoDataStore.piyangoOnayDurumlari.find(
(item: Record<string, any>) => item.tipAdi === 'Kapsam Dışı'
)
return kapsamDisi ? kapsamDisi.islemId : null
})
const showIzinFields = computed<boolean>(() => {
return (
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4 ||
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
)
})
const showIzinVerildiFields = computed<boolean>(() => {
return (
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4
)
})
const showKapsamDisiSebebi = computed<boolean>(() => {
return piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
})
const kapsamDisiSebepListesi = ref<Record<string, any>[]>([
{ id: '2/a', name: '2/a' },
{ id: '2/b', name: '2/b' },
{ id: '2/c', name: '2/c' },
{ id: '2/ç', name: '2/ç' },
{ id: '2/d', name: '2/d' },
{ id: '2/e', name: '2/e' },
{ id: '2/f', name: '2/f' },
{ id: '2/g', name: '2/g' },
{ id: 'Diğer', name: 'Diğer' }
])
const cekilisGorevlisiListesi = ref<Record<string, any>[]>([
{ id: 1, name: 'Antalya Şube Müdürlüğü' },
{ id: 2, name: 'Gaziantep Şube Müdürlüğü' },
{ id: 3, name: 'Aksaray Şube Müdürlüğü' },
{ id: 4, name: 'Kadıköy Şube Müdürlüğü' },
{ id: 5, name: 'Karşıyaka Şube Müdürlüğü' },
{ id: 6, name: 'Muğla Şube Müdürlüğü' },
{ id: 7, name: 'Trabzon Şube Müdürlüğü' },
{ id: 8, name: 'Noter' },
{ id: 9, name: 'Başkanlık Personeli' }
])
const mudurlukListesi = ref<Record<string, any>[]>([
{ id: 1, name: '1 No\'lu Özel Çekilişler İzin ve Takip Şubesi Müdürlüğü' },
{ id: 2, name: '2 No\'lu Özel Çekilişler İzin ve Takip Şubesi Müdürlüğü' },
{ id: 3, name: '3 No\'lu Özel Çekilişler İzin ve Takip Şubesi Müdürlüğü' }
])
const OnKeyup = () => { const OnKeyup = () => {
piyangoOnayValidationStore.formChanged = true piyangoOnayValidationStore.formChanged = true

View File

@ -8,7 +8,8 @@
:apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery" :apiList="'OnayDurumu/GetSonOnayDurumlariList/' + piyangoStore.selectedLottery"
apiText="Piyango Onay Log Listesi" apiText="Piyango Onay Log Listesi"
page="form" page="form"
:refresh="piyangoOnayStore.refreshList" /> :refresh="piyangoOnayStore.refreshList"
:rowActions="rowActions" />
<panel-wrapper <panel-wrapper
v-if="piyangoOnayStore.onayFormPanel" v-if="piyangoOnayStore.onayFormPanel"
v-model="piyangoOnayStore.onayFormPanel" v-model="piyangoOnayStore.onayFormPanel"
@ -40,6 +41,10 @@
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
import { usePiyangoDataStore } from '../../stores/piyangoDataStore' import { usePiyangoDataStore } from '../../stores/piyangoDataStore'
const piyangoDataStore = usePiyangoDataStore() const piyangoDataStore = usePiyangoDataStore()
import { useDialogStore } from '@/components/global/dialogStore'
const dialogStore = useDialogStore()
import { useDataStore } from '@/stores/dataStore'
const dataStore = useDataStore()
const loaded = ref<boolean>(false) const loaded = ref<boolean>(false)
@ -59,7 +64,7 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
@ -72,6 +77,11 @@
name: 'onayDurumuIslemTipiAdi', name: 'onayDurumuIslemTipiAdi',
title: 'İşlem', title: 'İşlem',
sort: true, sort: true,
computeHtml: (v: Record<string, any>): string => {
const statusName = v.onayDurumuIslemTipiAdi || ''
const statusClass = piyangoStore.GetIslemStatusClass(statusName)
return `<span class='islem-status-badge ${statusClass}'>${statusName}</span>`
},
filter: { filter: {
type: 'select', type: 'select',
data: piyangoOnayDurumlari, data: piyangoOnayDurumlari,
@ -100,19 +110,71 @@
}, },
{ {
name: 'izinTarihi', name: 'izinTarihi',
title: 'İzin Tarihi' title: 'İzin Tarihi',
compute: (v: Record<string, any>): string => {
return v.izinTarihi === null || v.izinTarihi === undefined || v.izinTarihi === ''
? ''
: dateStore.dateFormat({ pattern: 'dd-mm-yy', date: v.izinTarihi })
}
}, },
{ {
name: 'izinAciklamasi', name: 'izinAciklamasi',
title: 'İzin Açıklaması' title: 'İzin Açıklaması'
}, },
{
name: 'kapsamDisiSebebi',
title: 'Kapsam Dışı Sebebi'
},
]) ])
const EditOnay = (d: Record<string, any>) => { const EditOnay = (d: Record<string, any>) => {
Object.assign(piyangoOnayStore.piyangoPanelOnayForm, d) Object.assign(piyangoOnayStore.piyangoPanelOnayForm, {
...piyangoOnayStore.piyangoOnayBaseForm,
...d,
izinAciklamasi: d.izinAciklamasi != null ? d.izinAciklamasi : '',
kapsamDisiSebebi: d.kapsamDisiSebebi != null ? d.kapsamDisiSebebi : null
})
piyangoOnayStore.onayFormPanel = true piyangoOnayStore.onayFormPanel = true
} }
const DeleteRowPop = (data: Record<string, any>, i: number) => {
dialogStore.CreateDialog({
title: 'Onay Durumu Sil',
id: 'deleteonaydurumu',
content: 'Onay durumunu silmek istediğinize emin misiniz?',
closeText: 'Vazgeç',
buttons: [
{
label: 'Sil',
type: 'alert',
function: () => DeleteRow(data.id)
}
]
})
}
const DeleteRow = async (id: number | string) => {
var dt = await dataStore.dataDelete('OnayDurumu/' + id, {
toast: { toast: 'Onay durumu başarıyla silindi', type: 'success' }
})
if (dt !== 'errorfalse') {
dialogStore.CloseDialog('deleteonaydurumu')
piyangoOnayStore.refreshList = false
setTimeout(() => {
piyangoOnayStore.refreshList = true
}, 10)
}
}
const rowActions = ref<Record<string, any>[]>([
{
text: 'Sil',
class: 'alert',
action: DeleteRowPop
}
])
onBeforeMount(async () => { onBeforeMount(async () => {
loaded.value = true loaded.value = true
}) })

View File

@ -32,11 +32,11 @@
sort: true, sort: true,
filter: { filter: {
type: 'date', type: 'date',
range: true between: true
} }
}, },
{ {
name: 'islemYapanKullanici.email', name: 'islemYapanKullanici',
title: 'Kişi', title: 'Kişi',
sort: true, sort: true,
style: { width: '20%' } style: { width: '20%' }

View File

@ -108,6 +108,9 @@
} }
const OnIkramiyeChanged = (e: Event, val: any, item: Record<string, any>) => { const OnIkramiyeChanged = (e: Event, val: any, item: Record<string, any>) => {
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.ikramiyeId = item.id
piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiye = ` piyangoDosyaKapamaStore.dosyaKapamaIkramiyeData.tahhutEdilenIkramiye = `
${item.cinsi}, ${item.marka}, ${item.model}, (${item.asilTalihliAdedi} adet) ${item.cinsi}, ${item.marka}, ${item.model}, (${item.asilTalihliAdedi} adet)
` `

View File

@ -7,16 +7,27 @@
listVal="islemId" listVal="islemId"
v-model="piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId" v-model="piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId"
required required
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.onayDurumuIslemTipiId" /> :invalidText="piyangoOnayValidationStore.invalidTextsPanel.onayDurumuIslemTipiId">
<template v-if="piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4"> <template #option="{ optionData }">
<form-input <span
modelKey="izinSayisi" v-if="optionData && optionData.tipAdi"
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinSayisi" class="islem-status-badge"
required :class="piyangoStore.GetIslemStatusClass(optionData.tipAdi)">
label="İzin Sayı No" {{ optionData.tipAdi }}
placeholder="İzin Sayı No" </span>
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinSayisi" <span v-else>{{ optionData?.tipAdi || optionData }}</span>
@keyup="OnKeyup" /> </template>
<template #activator="{ activatorData }">
<span
v-if="activatorData && activatorData.tipAdi"
class="islem-status-badge"
:class="piyangoStore.GetIslemStatusClass(activatorData.tipAdi)">
{{ activatorData.tipAdi }}
</span>
<span v-else>Lütfen Seçim Yapınız</span>
</template>
</form-select>
<template v-if="showIzinFields">
<form-date <form-date
type="date" type="date"
required required
@ -25,12 +36,30 @@
label="İzin Tarihi" label="İzin Tarihi"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinTarihi" :invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinTarihi"
@change="OnKeyup" /> @change="OnKeyup" />
<form-input
modelKey="izinSayisi"
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinSayisi"
required
label="İzin Sayısı"
placeholder="İzin Sayısı"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinSayisi"
@keyup="OnKeyup" />
<form-textarea <form-textarea
v-model="piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi" v-model="piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi"
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinAciklamasi" :invalidText="piyangoOnayValidationStore.invalidTextsPanel.izinAciklamasi"
label="İzin Açıklaması" label="İzin Açıklaması"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
</template> </template>
<form-select
v-if="showKapsamDisiSebebi"
label="Kapsam Dışı Sebebi"
:listData="kapsamDisiSebepListesi"
listText="name"
listVal="id"
v-model="piyangoOnayStore.piyangoPanelOnayForm.kapsamDisiSebebi"
required
:invalidText="piyangoOnayValidationStore.invalidTextsPanel.kapsamDisiSebebi"
@change="OnKeyup" />
<form-file <form-file
v-model="piyangoOnayStore.piyangoPanelOnayForm.file" v-model="piyangoOnayStore.piyangoPanelOnayForm.file"
elclass="panel-documents-item" elclass="panel-documents-item"
@ -43,7 +72,7 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onBeforeMount } from 'vue' import { onBeforeMount, computed, ref } from 'vue'
import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../../stores/piyangoOnayStore'
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore' import { usePiyangoOnayValidationStore } from '../../validation/piyangoOnayValidationStore'
@ -52,6 +81,38 @@
const piyangoDataStore = usePiyangoDataStore() const piyangoDataStore = usePiyangoDataStore()
import { usePiyangoServices } from '../../service/piyangoServices' import { usePiyangoServices } from '../../service/piyangoServices'
const piyangoServices = usePiyangoServices() const piyangoServices = usePiyangoServices()
import { usePiyangoStore } from '../../stores/piyangoStore'
const piyangoStore = usePiyangoStore()
const kapsamDisiId = computed<number | null>(() => {
const kapsamDisi = piyangoDataStore.piyangoOnayDurumlari.find(
(item: Record<string, any>) => item.tipAdi === 'Kapsam Dışı'
)
return kapsamDisi ? kapsamDisi.islemId : null
})
const showIzinFields = computed<boolean>(() => {
return (
piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4 ||
piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
)
})
const showKapsamDisiSebebi = computed<boolean>(() => {
return piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value
})
const kapsamDisiSebepListesi = ref<Record<string, any>[]>([
{ id: '2/a', name: '2/a' },
{ id: '2/b', name: '2/b' },
{ id: '2/c', name: '2/c' },
{ id: '2/ç', name: '2/ç' },
{ id: '2/d', name: '2/d' },
{ id: '2/e', name: '2/e' },
{ id: '2/f', name: '2/f' },
{ id: '2/g', name: '2/g' },
{ id: 'Diğer', name: 'Diğer' }
])
const OnKeyup = () => { const OnKeyup = () => {
piyangoOnayValidationStore.formChanged = true piyangoOnayValidationStore.formChanged = true

View File

@ -34,14 +34,14 @@
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundCount" /> :invalidText="piyangoTeminatValidationStore.invalidTexts.refundCount" />
<form-file <form-file
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl" v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDocumentUrl"
label='Klasör Arşiv' label='İade Yazısı'
elclass="panel-documents-item" elclass="panel-documents-item"
:invalidText="piyangoTeminatValidationStore.invalidTexts.refundDocumentUrl" :invalidText="piyangoTeminatValidationStore.invalidTexts.refundDocumentUrl"
@change="OnKeyup" /> @change="OnKeyup" />
<form-input <form-input
modelKey="refundDescription" modelKey="refundDescription"
v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDescription" v-model="piyangoTeminatStore.piyangoTeminatFormData.refundDescription"
label="İade Açıklama" label="Klasör Arşiv No"
@keyup="OnKeyup" /> @keyup="OnKeyup" />
</template> </template>

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

@ -4,6 +4,7 @@ import { usePiyangoStore } from '../stores/piyangoStore'
import { usePiyangoOnayStore } from '../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../stores/piyangoOnayStore'
import { usePiyangoOnayValidationStore } from '../validation/piyangoOnayValidationStore' import { usePiyangoOnayValidationStore } from '../validation/piyangoOnayValidationStore'
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
import { usePiyangoDataStore } from '../stores/piyangoDataStore'
export const usePiyangoOnayService = defineStore('piyangoOnayService', () => { export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
const dataStore = useDataStore() const dataStore = useDataStore()
@ -11,6 +12,18 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
const piyangoOnayValidationStore = usePiyangoOnayValidationStore() const piyangoOnayValidationStore = usePiyangoOnayValidationStore()
const usersStore = useUsersStore() const usersStore = useUsersStore()
const piyangoDataStore = usePiyangoDataStore()
const getKapsamDisiId = (): number | null => {
const kapsamDisi = piyangoDataStore.piyangoOnayDurumlari.find(
(item: Record<string, any>) => item.tipAdi === 'Kapsam Dışı'
)
return kapsamDisi ? kapsamDisi.islemId : null
}
const shouldKeepIzinFields = (islemTipiId: number | null): boolean => {
return islemTipiId === 4 || islemTipiId === getKapsamDisiId()
}
const SaveOnayDurum = async () => { const SaveOnayDurum = async () => {
if (piyangoOnayValidationStore.FormCheck()) { if (piyangoOnayValidationStore.FormCheck()) {
@ -18,11 +31,14 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
let form: any let form: any
let dataForm = new FormData() let dataForm = new FormData()
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId !== 4) { if (!shouldKeepIzinFields(piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId)) {
piyangoOnayStore.piyangoOnayForm.izinSayisi = '' piyangoOnayStore.piyangoOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoOnayForm.izinTarihi = '' piyangoOnayStore.piyangoOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoOnayForm.izinAciklamasi = '' piyangoOnayStore.piyangoOnayForm.izinAciklamasi = ''
} }
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId !== getKapsamDisiId()) {
piyangoOnayStore.piyangoOnayForm.kapsamDisiSebebi = null
}
dataForm.append( dataForm.append(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId
@ -30,10 +46,21 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
dataForm.append('onayCekilisId', String(piyangoStore.selectedLottery)) dataForm.append('onayCekilisId', String(piyangoStore.selectedLottery))
dataForm.append('kisiId', String(usersStore.userId)) dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file) dataForm.append('file', piyangoOnayStore.piyangoOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama) dataForm.append('aciklama', piyangoOnayStore.piyangoOnayForm.aciklama || '')
dataForm.append('izinSayisi', piyangoOnayStore.piyangoOnayForm.izinSayisi) dataForm.append('izinSayisi', piyangoOnayStore.piyangoOnayForm.izinSayisi || '')
dataForm.append('izinTarihi', piyangoOnayStore.piyangoOnayForm.izinTarihi) dataForm.append('izinTarihi', piyangoOnayStore.piyangoOnayForm.izinTarihi || '')
dataForm.append('izinAciklamasi', piyangoOnayStore.piyangoOnayForm.izinAciklamasi) dataForm.append(
'izinAciklamasi',
piyangoOnayStore.piyangoOnayForm.izinAciklamasi != null
? String(piyangoOnayStore.piyangoOnayForm.izinAciklamasi)
: ''
)
dataForm.append(
'kapsamDisiSebebi',
piyangoOnayStore.piyangoOnayForm.kapsamDisiSebebi != null
? String(piyangoOnayStore.piyangoOnayForm.kapsamDisiSebebi)
: ''
)
form = await dataStore.dataPost('OnayDurumu/', { form = await dataStore.dataPost('OnayDurumu/', {
data: dataForm, data: dataForm,
@ -61,25 +88,33 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
let form: any let form: any
let dataForm = new FormData() let dataForm = new FormData()
if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId !== 4) { if (!shouldKeepIzinFields(piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId)) {
piyangoOnayStore.piyangoPanelOnayForm.izinSayisi = '' piyangoOnayStore.piyangoPanelOnayForm.izinSayisi = ''
piyangoOnayStore.piyangoPanelOnayForm.izinTarihi = '' piyangoOnayStore.piyangoPanelOnayForm.izinTarihi = ''
piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi = '' piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi = ''
} }
dataForm.append( if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId !== getKapsamDisiId()) {
'onayDurumuIslemTipiId', piyangoOnayStore.piyangoPanelOnayForm.kapsamDisiSebebi = null
piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId }
) dataForm.append('onayDurumuIslemTipiId', piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId)
dataForm.append('id', piyangoOnayStore.piyangoPanelOnayForm.id) dataForm.append('id', piyangoOnayStore.piyangoPanelOnayForm.id)
dataForm.append('onayCekilisId', String(piyangoStore.selectedLottery)) dataForm.append('onayCekilisId', String(piyangoStore.selectedLottery))
dataForm.append('kisiId', String(usersStore.userId)) dataForm.append('kisiId', String(usersStore.userId))
dataForm.append('file', piyangoOnayStore.piyangoPanelOnayForm.file) dataForm.append('file', piyangoOnayStore.piyangoPanelOnayForm.file)
dataForm.append('aciklama', piyangoOnayStore.piyangoPanelOnayForm.aciklama) dataForm.append('aciklama', piyangoOnayStore.piyangoPanelOnayForm.aciklama || '')
dataForm.append('izinSayisi', piyangoOnayStore.piyangoPanelOnayForm.izinSayisi) dataForm.append('izinSayisi', piyangoOnayStore.piyangoPanelOnayForm.izinSayisi || '')
dataForm.append('izinTarihi', piyangoOnayStore.piyangoPanelOnayForm.izinTarihi) dataForm.append('izinTarihi', piyangoOnayStore.piyangoPanelOnayForm.izinTarihi || '')
dataForm.append( dataForm.append(
'izinAciklamasi', 'izinAciklamasi',
piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi != null
? String(piyangoOnayStore.piyangoPanelOnayForm.izinAciklamasi)
: ''
)
dataForm.append(
'kapsamDisiSebebi',
piyangoOnayStore.piyangoPanelOnayForm.kapsamDisiSebebi != null
? String(piyangoOnayStore.piyangoPanelOnayForm.kapsamDisiSebebi)
: ''
) )
form = await dataStore.dataPut( form = await dataStore.dataPut(
@ -92,7 +127,11 @@ export const usePiyangoOnayService = defineStore('piyangoOnayService', () => {
) )
if (form !== 'errorfalse') { if (form !== 'errorfalse') {
piyangoOnayStore.refreshList = true piyangoOnayStore.refreshList = false
setTimeout(() => {
piyangoOnayStore.refreshList = true
}, 10)
piyangoOnayStore.onayFormPanel = false
} }
} else { } else {
piyangoOnayValidationStore.isPanelFormValid = true piyangoOnayValidationStore.isPanelFormValid = true

View File

@ -12,7 +12,7 @@ export const connectToHub = async () => {
connection = new signalR.HubConnectionBuilder() connection = new signalR.HubConnectionBuilder()
.withUrl(import.meta.env.VITE_SOCKET_URL, { .withUrl(import.meta.env.VITE_SOCKET_URL, {
withCredentials: true, withCredentials: false,
skipNegotiation: true, // WebSocket kullanırken negotiation atlanabilir skipNegotiation: true, // WebSocket kullanırken negotiation atlanabilir
transport: signalR.HttpTransportType.WebSockets transport: signalR.HttpTransportType.WebSockets
}) })

View File

@ -2,10 +2,13 @@ import { defineStore } from 'pinia'
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import { useGlobalStore } from '@/stores/globalStore' import { useGlobalStore } from '@/stores/globalStore'
import { usePiyangoStore } from './piyangoStore' import { usePiyangoStore } from './piyangoStore'
import { useUsersStore } from '@/stores/usersStore'
export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => { export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore', () => {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
const usersStore = useUsersStore()
const baseDosyaKapamaData = reactive<Record<string, any>>({ const baseDosyaKapamaData = reactive<Record<string, any>>({
katilimSekli: '', katilimSekli: '',
@ -49,6 +52,8 @@ export const usePiyangoDosyaKapamaStore = defineStore('piyangoDosyaKapamaStore',
teslimEdilenIkramiye: '', teslimEdilenIkramiye: '',
alinmayanIkramiye: '', alinmayanIkramiye: '',
aciklama: '', aciklama: '',
duzenleyenId: usersStore.userId,
ikramiyeId:'',
cekilisId: piyangoStore.selectedLottery cekilisId: piyangoStore.selectedLottery
}) })
const dosyaKapamaData = reactive<Record<string, any>>({}) const dosyaKapamaData = reactive<Record<string, any>>({})

View File

@ -15,7 +15,8 @@ export const usePiyangoOnayStore = defineStore('piyangoOnayStore', () => {
file: '', file: '',
izinSayisi: '', izinSayisi: '',
izinTarihi: '', izinTarihi: '',
izinAciklamasi: '' izinAciklamasi: '',
kapsamDisiSebebi: null
}) })
const piyangoOnayForm = reactive<Record<string, any>>({}) const piyangoOnayForm = reactive<Record<string, any>>({})
const piyangoPanelOnayForm = reactive<Record<string, any>>({}) const piyangoPanelOnayForm = reactive<Record<string, any>>({})

View File

@ -131,13 +131,41 @@ export const usePiyangoStore = defineStore('piyangoStore', () => {
Object.assign(lotteryData, baseLotteryData) Object.assign(lotteryData, baseLotteryData)
} }
const GetIslemStatusClass = (statusName: string | undefined): string => {
if (!statusName) {
return 'islem-status-default'
}
// Her duruma benzersiz canlı renkler atanıyor
const statusMap: Record<string, string> = {
'Bilgi/Belge Eksik/Yanlış': 'islem-status-coral',
'Üzerinde Çalışılıyor': 'islem-status-amber',
'Başvuru İşleme Alındı': 'islem-status-sky',
'Başvuru Uygun Görülmedi': 'islem-status-rose',
'İzin Öncesi İptal': 'islem-status-pink',
'Kapsam Dışı': 'islem-status-slate',
'İzin Verildi': 'islem-status-emerald',
'Ceza Verildi': 'islem-status-red',
'İzin Sonrası İptal': 'islem-status-salmon',
'Kampanya Olumlu Bitti': 'islem-status-mint',
'Mükerrer Başvuru': 'islem-status-peach',
'Bekliyor': 'islem-status-yellow',
'Onaylandı': 'islem-status-teal',
'Katılımcı Listesi Yüklendi': 'islem-status-cyan',
'Düzenleme Bekliyor': 'islem-status-orange',
'Ön Kayıt Kabul Edildi': 'islem-status-blue',
'Yardım Amaçlı Piyango Son Onay': 'islem-status-gold',
'İnceleme Bekleniyor': 'islem-status-lavender',
'Yeni Piyango': 'islem-status-violet',
'Başvuru Reddedildi': 'islem-status-crimson',
'Değişiklik Talep Ediliyor': 'islem-status-indigo'
}
return statusMap[statusName] || 'islem-status-default'
}
const LoterryStatusClass = (d: any): string => { const LoterryStatusClass = (d: any): string => {
let cls = lotteryStatusTypes.value.filter((v) => { // Yeni renk sistemini kullan, ama back-grad sınıfı ekle (geriye dönük uyumluluk için)
return v.name === d const statusClass = GetIslemStatusClass(d)
}) return 'islem-status-badge ' + statusClass
if (cls !== undefined && cls !== null && cls.length !== 0)
return 'back-grad-' + cls[0].class
else return 'back-grad-waiting'
} }
const SetLotteryControlData = (data: Record<string, any>) => { const SetLotteryControlData = (data: Record<string, any>) => {
@ -181,6 +209,7 @@ export const usePiyangoStore = defineStore('piyangoStore', () => {
ResetLotteryData, ResetLotteryData,
ResetLotteryContent, ResetLotteryContent,
LoterryStatusClass, LoterryStatusClass,
GetIslemStatusClass,
SetLotteryControlData SetLotteryControlData
} }
}) })

View File

@ -1,13 +1,15 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { ref, reactive } from 'vue' import { ref, reactive, computed } from 'vue'
import { useValidationStore } from '@/stores/validationStore' import { useValidationStore } from '@/stores/validationStore'
import { usePiyangoOnayStore } from '../stores/piyangoOnayStore' import { usePiyangoOnayStore } from '../stores/piyangoOnayStore'
import { usePiyangoDataStore } from '../stores/piyangoDataStore'
export const usePiyangoOnayValidationStore = defineStore( export const usePiyangoOnayValidationStore = defineStore(
'piyangoOnayValidationStore', 'piyangoOnayValidationStore',
() => { () => {
const validationStore = useValidationStore() const validationStore = useValidationStore()
const piyangoOnayStore = usePiyangoOnayStore() const piyangoOnayStore = usePiyangoOnayStore()
const piyangoDataStore = usePiyangoDataStore()
const formChanged = ref<boolean>(false) const formChanged = ref<boolean>(false)
const isFormValid = ref<boolean>(true) const isFormValid = ref<boolean>(true)
@ -15,6 +17,17 @@ export const usePiyangoOnayValidationStore = defineStore(
const isPanelFormValid = ref<boolean>(true) const isPanelFormValid = ref<boolean>(true)
const invalidTextsPanel = reactive<Record<string, any>>({}) const invalidTextsPanel = reactive<Record<string, any>>({})
const kapsamDisiId = computed<number | null>(() => {
const kapsamDisi = piyangoDataStore.piyangoOnayDurumlari.find(
(item: Record<string, any>) => item.tipAdi === 'Kapsam Dışı'
)
return kapsamDisi ? kapsamDisi.islemId : null
})
const shouldValidateIzinFields = (islemTipiId: number | null): boolean => {
return islemTipiId === 4 || islemTipiId === kapsamDisiId.value
}
const FormCheck = (): boolean => { const FormCheck = (): boolean => {
Object.assign(invalidTexts, {}) Object.assign(invalidTexts, {})
@ -24,12 +37,12 @@ export const usePiyangoOnayValidationStore = defineStore(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.' 'Bir işlem tipi seçmelisinz.'
) )
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === 4) { if (shouldValidateIzinFields(piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId)) {
validationStore.IsFieldEmpty( validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm, piyangoOnayStore.piyangoOnayForm,
invalidTexts, invalidTexts,
'izinSayisi', 'izinSayisi',
'İzin sayı no girmelisiniz.' 'İzin sayısı girmelisiniz.'
) )
validationStore.IsFieldEmpty( validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm, piyangoOnayStore.piyangoOnayForm,
@ -38,6 +51,14 @@ export const usePiyangoOnayValidationStore = defineStore(
'İzin tarihi seçmelisiniz.' 'İzin tarihi seçmelisiniz.'
) )
} }
if (piyangoOnayStore.piyangoOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value) {
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoOnayForm,
invalidTexts,
'kapsamDisiSebebi',
'Kapsam dışı sebebi seçmelisiniz.'
)
}
isFormValid.value = Object.keys(invalidTexts).length === 0 isFormValid.value = Object.keys(invalidTexts).length === 0
return isFormValid.value return isFormValid.value
} }
@ -51,12 +72,12 @@ export const usePiyangoOnayValidationStore = defineStore(
'onayDurumuIslemTipiId', 'onayDurumuIslemTipiId',
'Bir işlem tipi seçmelisinz.' 'Bir işlem tipi seçmelisinz.'
) )
if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === 4) { if (shouldValidateIzinFields(piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId)) {
validationStore.IsFieldEmpty( validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm, piyangoOnayStore.piyangoPanelOnayForm,
invalidTextsPanel, invalidTextsPanel,
'izinSayisi', 'izinSayisi',
'İzin sayı no girmelisiniz.' 'İzin sayısı girmelisiniz.'
) )
validationStore.IsFieldEmpty( validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm, piyangoOnayStore.piyangoPanelOnayForm,
@ -65,6 +86,14 @@ export const usePiyangoOnayValidationStore = defineStore(
'İzin tarihi seçmelisiniz.' 'İzin tarihi seçmelisiniz.'
) )
} }
if (piyangoOnayStore.piyangoPanelOnayForm.onayDurumuIslemTipiId === kapsamDisiId.value) {
validationStore.IsFieldEmpty(
piyangoOnayStore.piyangoPanelOnayForm,
invalidTextsPanel,
'kapsamDisiSebebi',
'Kapsam dışı sebebi seçmelisiniz.'
)
}
isPanelFormValid.value = Object.keys(invalidTextsPanel).length === 0 isPanelFormValid.value = Object.keys(invalidTextsPanel).length === 0
return isPanelFormValid.value return isPanelFormValid.value
} }

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">
@ -17,14 +17,13 @@
listText="Piyango" listText="Piyango"
: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'
@ -32,6 +31,8 @@
const dateStore = useDateStore() const dateStore = useDateStore()
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoStore } from '../stores/piyangoStore' import { usePiyangoStore } from '../stores/piyangoStore'
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
import { usePiyangoDataStore } from '../stores/piyangoDataStore' import { usePiyangoDataStore } from '../stores/piyangoDataStore'
@ -40,7 +41,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>('')
@ -70,129 +70,297 @@
const tableHeader = computed<Record<string, any>[]>(() => { const tableHeader = computed<Record<string, any>[]>(() => {
let header: Record<string, any>[] = [] let header: Record<string, any>[] = []
// 1. PİYANGO ID
header.push({ header.push({
name: 'piyangoId', name: 'piyangoId',
title: 'Piyango Id', title: 'Piyango ID',
sort: true, sort: true,
style: { width: '10%' } style: { width: '10%' }
}) })
// 2. MÜDÜRLÜK
if (usersStore.isAraciFirma || usersStore.isPanelUser) { header.push({
header.push({ name: 'duzenleyen', title: 'Düzenleyen' }) name: 'mudurluk',
} title: 'Müdürlük',
compute: (v: Record<string, any>): string => {
header.push( return v.mudurluk || ''
{
name: 'baslik',
title: 'Başlık',
sort: true,
style: { width: '15%' }
}, },
{ filter: {
name: 'piyangoamac', type: 'text'
title: 'Piyango Amacı',
sort: true,
filter: {
type: 'select',
data: piyangoAmaclari.value,
listVal: 'id',
listText: 'amacAdi',
filterId: 'piyangoAmacId'
}
},
{
name: 'olusturmaTarihi',
title: 'Oluşturulma Tarihi',
compute: (v: Record<string, any>): string => {
return dateStore.dateFormat({ date: v.olusturmaTarihi })
},
sort: true,
filter: {
type: 'date',
range: true
}
} }
) })
if (usersStore.isVakifDernek || usersStore.isPanelUser) { // 3. PİYANGO AMACI
header.push({
name: 'piyangoamac',
title: 'Piyango Amacı',
sort: true,
filter: {
type: 'select',
data: piyangoAmaclari.value,
listVal: 'id',
listText: 'amacAdi',
filterId: 'piyangoAmacId'
}
})
// 4. DÜZENLEYEN (koşullu)
if (usersStore.isAraciFirma || usersStore.isPanelUser) {
header.push({ header.push({
name: 'cekilisTarihi', name: 'duzenleyen',
title: 'Çekiliş Tarihi', title: 'Düzenleyen',
compute: (v: Record<string, any>): string => {
if(v.piyangoAmacId === 3) return ''
else return dateStore.dateFormat({ date: v.cekilisTarihi })
},
sort: true,
filter: { filter: {
type: 'date', type: 'text'
range: true
} }
}) })
} }
if (!usersStore.isVakifDernek || usersStore.isPanelUser) {
header.push(
{
name: 'baslangicTarihi',
title: 'Başlangıç Tarihi',
compute: (v: Record<string, any>): string => {
if (v.baslangicTarihi.includes('0001-')) return ''
else return dateStore.dateFormat({ date: v.baslangicTarihi })
},
sort: true,
filter: {
type: 'date',
range: true
}
},
{
name: 'bitisTarihi',
title: 'Bitis Tarihi',
compute: (v: Record<string, any>): string => {
if (v.bitisTarihi.includes('0001-')) return ''
else return dateStore.dateFormat({ date: v.bitisTarihi })
},
sort: true,
filter: {
type: 'date',
range: true
}
}
)
}
header.push( // 5. ARACI FİRMA
{ header.push({
name: 'cekilisYontemi', name: 'araciFirma',
title: 'Çekiliş Yöntemi', title: 'Araci Firma',
sort: true, compute: (v: Record<string, any>): string => {
filter: { return v.araciFirma || ''
type: 'select',
data: cekilisYontemleri.value,
listVal: 'id',
listText: 'deger',
filterId: 'cekilisYontemiId'
}
}, },
{ name: 'ikramiyeler', title: 'İkramiyeler', style: { width: '15%' } }, filter: {
{ type: 'text'
name: 'durum',
title: 'Durum',
style: { width: '10%' },
computeHtml: (v: Record<string, any>): string => {
return `<span class="back-grad ${piyangoStore.LoterryStatusClass(v.durum)}">
${v.durum}
</span>`
},
filter: {
type: 'select',
data: piyangoOnayDurumlari.value,
listVal: 'id',
listText: 'tipAdi',
filterId: 'durumId'
}
} }
) })
// 6. DURUM
header.push({
name: 'durum',
title: 'Durum',
style: { width: '10%' },
computeHtml: (v: Record<string, any>): string => {
return `<span class="${piyangoStore.LoterryStatusClass(v.durum)}">
${v.durum}
</span>`
},
filter: {
type: 'select',
data: piyangoOnayDurumlari.value,
listVal: 'id',
listText: 'tipAdi',
filterId: 'durumId'
}
})
// 7. İZİN TARİHİ
header.push({
name: 'izinTarihi',
title: 'İzin Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.izinTarihi || v.izinTarihi === null) return ''
return dateStore.dateFormat({ date: v.izinTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 8. İZİN SAYISI
header.push({
name: 'izinSayisi',
title: 'İzin Sayısı',
compute: (v: Record<string, any>): string => {
return v.izinSayisi || ''
},
sort: true,
filter: {
type: 'text',
range: true
}
})
// 9. BAŞLANGIÇ TARİHİ
header.push({
name: 'baslangicTarihi',
title: 'Başlangıç Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.baslangicTarihi || v.baslangicTarihi.includes('0001-')) return ''
return dateStore.dateFormat({ date: v.baslangicTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 10. BİTİŞ TARİHİ
header.push({
name: 'bitisTarihi',
title: 'Bitiş Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.bitisTarihi || v.bitisTarihi.includes('0001-')) return ''
return dateStore.dateFormat({ date: v.bitisTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 11. ÇEKİLİŞ TARİHİ
header.push({
name: 'cekilisTarihi',
title: 'Çekiliş Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.cekilisTarihi || v.cekilisTarihi.includes('0001-')) return ''
if (v.piyangoAmacId === 3) return ''
return dateStore.dateFormat({ date: v.cekilisTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 12. ÇEKİLİŞ GÖREVLİSİ
header.push({
name: 'cekilisGorevlisi',
title: 'Çekiliş Görevlisi',
compute: (v: Record<string, any>): string => {
return v.cekilisGorevlisi || ''
},
filter: {
type: 'text'
}
})
// 13. GAZETE İLAN TARİHİ
header.push({
name: 'gazeteIlanTarihi',
title: 'Gazete İlan Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.gazeteIlanTarihi || v.gazeteIlanTarihi === null) return ''
return dateStore.dateFormat({ date: v.gazeteIlanTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 14. GAZETE ADI
header.push({
name: 'gazeteAdi',
title: 'Gazete Adı',
compute: (v: Record<string, any>): string => {
return v.gazeteAdi || ''
}
})
// 15. İZİN BEDELİ
header.push({
name: 'izinBedeliTutari',
title: 'İzin Bedeli',
compute: (v: Record<string, any>): string => {
if (v.izinBedeliTutari === null || v.izinBedeliTutari === undefined) return ''
return globalStore.toTrLocale(v.izinBedeliTutari)
},
sort: true
})
// 16. İKRAMİYE TUTARI
header.push({
name: 'ikramiyeTutari',
title: 'İkramiye Tutarı',
compute: (v: Record<string, any>): string => {
if (v.ikramiyeTutari === null || v.ikramiyeTutari === undefined) return ''
return globalStore.toTrLocale(v.ikramiyeTutari)
},
sort: true
})
// 17. TEMİNAT TARİHİ
header.push({
name: 'teminatTarihi',
title: 'Teminat Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.teminatTarihi || v.teminatTarihi === null) return ''
return dateStore.dateFormat({ date: v.teminatTarihi })
},
sort: true
})
// 18. TEMİNAT SAYISI
header.push({
name: 'teminatSayisi',
title: 'Teminat Sayısı',
compute: (v: Record<string, any>): string => {
return v.teminatSayisi || ''
},
sort: true
})
// 19. TEMİNAT BANKASI
header.push({
name: 'teminatBankasi',
title: 'Teminat Bankası',
compute: (v: Record<string, any>): string => {
return v.teminatBankasi || ''
}
})
// 20. TEMİNAT TUTARI
header.push({
name: 'teminatTutari',
title: 'Teminat Tutarı',
compute: (v: Record<string, any>): string => {
if (v.teminatTutari === null || v.teminatTutari === undefined) return ''
return globalStore.toTrLocale(v.teminatTutari)
},
sort: true
})
// 21. T. PARA CİNSİ
header.push({
name: 'paraBirimiSembol',
title: 'T. Para Cinsi',
compute: (v: Record<string, any>): string => {
return v.paraBirimiSembol || ''
}
})
// 22. T. İADE TARİHİ
header.push({
name: 'teminatIadeTarihi',
title: 'T. İade Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.teminatIadeTarihi || v.teminatIadeTarihi === null) return ''
return dateStore.dateFormat({ date: v.teminatIadeTarihi })
},
sort: true
})
// 23. T. İADE SAYISI
header.push({
name: 'teminatIadeSayisi',
title: 'T. İade Sayısı',
compute: (v: Record<string, any>): string => {
return v.teminatIadeSayisi || ''
},
sort: true
})
// 24. İKRAMİYELER
header.push({
name: 'ikramiyeler',
title: 'İkramiyeler',
style: { width: '15%' },
compute: (v: Record<string, any>): string => {
return v.ikramiyeler || ''
}
})
// Panel User için ek sütunlar
if (usersStore.isPanelUser) { if (usersStore.isPanelUser) {
header.push({ header.push({
name: 'atanmis', name: 'atanmis',
@ -200,17 +368,15 @@
computeHtml: (v: Record<string, any>): string => { computeHtml: (v: Record<string, any>): string => {
if (v.atanmis) { if (v.atanmis) {
return `<strong class="back-grad back-grad-sevk-ok"> return `<strong class="back-grad back-grad-sevk-ok">
${v.atananlar} ${v.atananlar}
</strong>` </strong>`
} else { } else {
return `<span class="back-grad back-grad-sevk"> return `<span class="back-grad back-grad-sevk">
Sevk Edilmemiş</span>` Sevk Edilmemiş</span>`
} }
} }
}) })
}
if (usersStore.isPanelUser) {
header.push({ header.push({
name: 'basvuruBedelNo', name: 'basvuruBedelNo',
title: 'Muhasebeleştirme Durumu', title: 'Muhasebeleştirme Durumu',
@ -218,22 +384,23 @@
let durum = '' let durum = ''
if (v.basvuruBedelNo !== null) { if (v.basvuruBedelNo !== null) {
durum += `<strong">Başvuru Bedel No: </strong> durum += `<strong">Başvuru Bedel No: </strong>
${v.basvuruBedelNo}<br>` ${v.basvuruBedelNo}<br>`
} }
if (v.izinBedelNo !== null) { if (v.izinBedelNo !== null) {
durum += `<strong">İzin Bedel No: </strong> durum += `<strong">İzin Bedel No: </strong>
${v.izinBedelNo}` ${v.izinBedelNo}`
} }
return durum return durum
} }
}) })
} }
return header return header
}) })
// 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 +410,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
} }
}, },
{ {
@ -134,7 +134,7 @@
name: 'durum', name: 'durum',
title: 'Durum', title: 'Durum',
computeHtml: (v: Record<string, any>): string => { computeHtml: (v: Record<string, any>): string => {
return `<span class='back-grad ${piyangoStore.LoterryStatusClass(v.durum)}'> return `<span class='${piyangoStore.LoterryStatusClass(v.durum)}'>
${v.durum} ${v.durum}
</span>` </span>`
}, },

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

@ -24,6 +24,8 @@
const dateStore = useDateStore() const dateStore = useDateStore()
import { useUsersStore } from '@/stores/usersStore' import { useUsersStore } from '@/stores/usersStore'
const usersStore = useUsersStore() const usersStore = useUsersStore()
import { useGlobalStore } from '@/stores/globalStore'
const globalStore = useGlobalStore()
import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore' import { usePiyangoStore } from '@/module/cekilisler/stores/piyangoStore'
const piyangoStore = usePiyangoStore() const piyangoStore = usePiyangoStore()
import { usePiyangoDataStore } from '@/module/cekilisler/stores/piyangoDataStore' import { usePiyangoDataStore } from '@/module/cekilisler/stores/piyangoDataStore'
@ -50,156 +52,310 @@
const tableHeader = computed<Record<string, any>[]>(() => { const tableHeader = computed<Record<string, any>[]>(() => {
let header: Record<string, any>[] = [] let header: Record<string, any>[] = []
// 1. PİYANGO ID
header.push({
name: 'piyangoId',
title: 'Piyango ID',
sort: true,
style: { width: '10%' }
})
// 2. MÜDÜRLÜK
header.push({
name: 'mudurluk',
title: 'Müdürlük',
compute: (v: Record<string, any>): string => {
return v.mudurluk || ''
}
})
// 3. PİYANGO AMACI
header.push({
name: 'piyangoamac',
title: 'Piyango Amacı',
sort: true,
filter: {
type: 'select',
data: piyangoAmaclari.value,
listVal: 'id',
listText: 'amacAdi',
filterId: 'piyangoAmacId'
}
})
// 4. DÜZENLEYEN (koşullu)
if (usersStore.isAraciFirma || usersStore.isPanelUser) { if (usersStore.isAraciFirma || usersStore.isPanelUser) {
header.push({ name: 'duzenleyen', title: 'Düzenleyen' }) header.push({ name: 'duzenleyen', title: 'Düzenleyen' })
} }
header.push( // 5. ARACI FİRMA
{ header.push({
name: 'piyangoId', name: 'araciFirma',
title: 'Piyango ID', title: 'Araci Firma',
sort: true, compute: (v: Record<string, any>): string => {
style: { width: '10%' } return v.araciFirma || ''
}
})
// 6. DURUM
header.push({
name: 'durum',
title: 'Durum',
style: { width: '10%' },
computeHtml: (v: Record<string, any>): string => {
return `<span class="${piyangoStore.LoterryStatusClass(v.durum)}">
${v.durum}
</span>`
}, },
{ filter: {
name: 'baslik', type: 'select',
title: 'Başlık', data: piyangoOnayDurumlari.value,
sort: true, listVal: 'id',
style: { width: '15%' } listText: 'tipAdi',
filterId: 'durumId'
}
})
// 7. İZİN TARİHİ
header.push({
name: 'izinTarihi',
title: 'İzin Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.izinTarihi || v.izinTarihi === null) return ''
return dateStore.dateFormat({ date: v.izinTarihi })
}, },
{ sort: true,
name: 'piyangoamac', filter: {
title: 'Piyango Amacı', type: 'date',
sort: true, between: true
filter: { }
type: 'select', })
data: piyangoAmaclari.value,
listVal: 'id', // 8. İZİN SAYISI
listText: 'amacAdi', header.push({
filterId: 'piyangoAmacId' name: 'izinSayisi',
} title: 'İzin Sayısı',
compute: (v: Record<string, any>): string => {
return v.izinSayisi || ''
}, },
{ sort: true
name: 'olusturmaTarihi', })
title: 'Oluşturulma Tarihi',
compute: (v: Record<string, any>): string => { // 9. BAŞLANGIÇ TARİHİ
return dateStore.dateFormat({ date: v.olusturmaTarihi }) header.push({
}, name: 'baslangicTarihi',
sort: true, title: 'Başlangıç Tarihi',
filter: { compute: (v: Record<string, any>): string => {
type: 'date', if (!v.baslangicTarihi || v.baslangicTarihi.includes('0001-')) return ''
range: true return dateStore.dateFormat({ date: v.baslangicTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 10. BİTİŞ TARİHİ
header.push({
name: 'bitisTarihi',
title: 'Bitiş Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.bitisTarihi || v.bitisTarihi.includes('0001-')) return ''
return dateStore.dateFormat({ date: v.bitisTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 11. ÇEKİLİŞ TARİHİ
header.push({
name: 'cekilisTarihi',
title: 'Çekiliş Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.cekilisTarihi || v.cekilisTarihi.includes('0001-')) return ''
if (v.piyangoAmacId === 3) return ''
return dateStore.dateFormat({ date: v.cekilisTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 12. ÇEKİLİŞ GÖREVLİSİ
header.push({
name: 'cekilisGorevlisi',
title: 'Çekiliş Görevlisi',
compute: (v: Record<string, any>): string => {
return v.cekilisGorevlisi || ''
}
})
// 13. GAZETE İLAN TARİHİ
header.push({
name: 'gazeteIlanTarihi',
title: 'Gazete İlan Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.gazeteIlanTarihi || v.gazeteIlanTarihi === null) return ''
return dateStore.dateFormat({ date: v.gazeteIlanTarihi })
},
sort: true,
filter: {
type: 'date',
between: true
}
})
// 14. GAZETE ADI
header.push({
name: 'gazeteAdi',
title: 'Gazete Adı',
compute: (v: Record<string, any>): string => {
return v.gazeteAdi || ''
}
})
// 15. İZİN BEDELİ
header.push({
name: 'izinBedeliTutari',
title: 'İzin Bedeli',
compute: (v: Record<string, any>): string => {
if (v.izinBedeliTutari === null || v.izinBedeliTutari === undefined) return ''
return globalStore.toTrLocale(v.izinBedeliTutari)
},
sort: true
})
// 16. İKRAMİYE TUTARI
header.push({
name: 'ikramiyeTutari',
title: 'İkramiye Tutarı',
compute: (v: Record<string, any>): string => {
if (v.ikramiyeTutari === null || v.ikramiyeTutari === undefined) return ''
return globalStore.toTrLocale(v.ikramiyeTutari)
},
sort: true
})
// 17. TEMİNAT TARİHİ
header.push({
name: 'teminatTarihi',
title: 'Teminat Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.teminatTarihi || v.teminatTarihi === null) return ''
return dateStore.dateFormat({ date: v.teminatTarihi })
},
sort: true
})
// 18. TEMİNAT SAYISI
header.push({
name: 'teminatSayisi',
title: 'Teminat Sayısı',
compute: (v: Record<string, any>): string => {
return v.teminatSayisi || ''
},
sort: true
})
// 19. TEMİNAT BANKASI
header.push({
name: 'teminatBankasi',
title: 'Teminat Bankası',
compute: (v: Record<string, any>): string => {
return v.teminatBankasi || ''
}
})
// 20. TEMİNAT TUTARI
header.push({
name: 'teminatTutari',
title: 'Teminat Tutarı',
compute: (v: Record<string, any>): string => {
if (v.teminatTutari === null || v.teminatTutari === undefined) return ''
return globalStore.toTrLocale(v.teminatTutari)
},
sort: true
})
// 21. T. PARA CİNSİ
header.push({
name: 'paraBirimiSembol',
title: 'T. Para Cinsi',
compute: (v: Record<string, any>): string => {
return v.paraBirimiSembol || ''
}
})
// 22. T. İADE TARİHİ
header.push({
name: 'teminatIadeTarihi',
title: 'T. İade Tarihi',
compute: (v: Record<string, any>): string => {
if (!v.teminatIadeTarihi || v.teminatIadeTarihi === null) return ''
return dateStore.dateFormat({ date: v.teminatIadeTarihi })
},
sort: true
})
// 23. T. İADE SAYISI
header.push({
name: 'teminatIadeSayisi',
title: 'T. İade Sayısı',
compute: (v: Record<string, any>): string => {
return v.teminatIadeSayisi || ''
},
sort: true
})
// 24. İKRAMİYELER
header.push({
name: 'ikramiyeler',
title: 'İkramiyeler',
style: { width: '15%' },
compute: (v: Record<string, any>): string => {
return v.ikramiyeler || ''
}
})
// Muhasebe özel sütunlar
header.push({
name: 'atanmis',
title: 'Sevk Durumu',
computeHtml: (v: Record<string, any>): string => {
if (v.atanmis) {
return `<strong class="back-grad back-grad-sevk-ok">
${v.atananlar}
</strong>`
} else {
return `<span class="back-grad back-grad-sevk">
Sevk Edilmemiş</span>`
} }
} }
) })
if (usersStore.isVakifDernek || usersStore.isPanelUser) { header.push({
header.push({ name: 'basvuruBedelNo',
name: 'cekilisTarihi', title: 'Muhasebeleştirme Durumu',
title: 'Çekiliş Tarihi', computeHtml: (v: Record<string, any>): string => {
compute: (v: Record<string, any>): string => { let durum = ''
return dateStore.dateFormat({ date: v.cekilisTarihi }) if (v.basvuruBedelNo !== null) {
}, durum += `<strong">Başvuru Bedel No: </strong>
sort: true, ${v.basvuruBedelNo}<br>`
filter: {
type: 'date',
range: true
} }
}) if (v.izinBedelNo !== null) {
} durum += `<strong">İzin Bedel No: </strong>
if (!usersStore.isVakifDernek || usersStore.isPanelUser) { ${v.izinBedelNo}`
header.push(
{
name: 'baslangicTarihi',
title: 'Başlangıç Tarihi',
compute: (v: Record<string, any>): string => {
if (v.baslangicTarihi.includes('0001-')) return ''
else return dateStore.dateFormat({ date: v.baslangicTarihi })
},
sort: true,
filter: {
type: 'date',
range: true
}
},
{
name: 'bitisTarihi',
title: 'Bitis Tarihi',
compute: (v: Record<string, any>): string => {
if (v.bitisTarihi.includes('0001-')) return ''
else return dateStore.dateFormat({ date: v.bitisTarihi })
},
sort: true,
filter: {
type: 'date',
range: true
}
}
)
}
header.push(
{
name: 'cekilisYontemi',
title: 'Çekiliş Yöntemi',
sort: true,
filter: {
type: 'select',
data: cekilisYontemleri.value,
listVal: 'id',
listText: 'deger',
filterId: 'cekilisYontemiId'
}
},
{ name: 'ikramiyeler', title: 'İkramiyeler', style: { width: '15%' } },
{
name: 'durum',
title: 'Durum',
style: { width: '10%' },
computeHtml: (v: Record<string, any>): string => {
return `<span class="back-grad ${piyangoStore.LoterryStatusClass(v.durum)}">
${v.durum}
</span>`
},
filter: {
type: 'select',
data: piyangoOnayDurumlari.value,
listVal: 'id',
listText: 'tipAdi',
filterId: 'durumId'
}
},
{
name: 'atanmis',
title: 'Sevk Durumu',
computeHtml: (v: Record<string, any>): string => {
if (v.atanmis) {
return `<strong class="back-grad back-grad-sevk-ok">
${v.atananlar}
</strong>`
} else {
return `<span class="back-grad back-grad-sevk">
Sevk Edilmemiş</span>`
}
}
},
{
name: 'basvuruBedelNo',
title: 'Muhasebeleştirme Durumu',
computeHtml: (v: Record<string, any>): string => {
let durum = ''
if (v.basvuruBedelNo !== null) {
durum += `<strong">Başvuru Bedel No: </strong>
${v.basvuruBedelNo}<br>`
}
if (v.izinBedelNo !== null) {
durum += `<strong">İzin Bedel No: </strong>
${v.izinBedelNo}`
}
return durum
} }
return durum
} }
) })
return header return header
}) })

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
} }
}, },
{ {
@ -143,7 +143,7 @@
title: 'Durum', title: 'Durum',
style: { width: '10%' }, style: { width: '10%' },
computeHtml: (v: Record<string, any>): string => { computeHtml: (v: Record<string, any>): string => {
return `<span class='back-grad ${piyangoStore.LoterryStatusClass(v.durum)}'> return `<span class='${piyangoStore.LoterryStatusClass(v.durum)}'>
${v.durum} ${v.durum}
</span>` </span>`
}, },

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

@ -7,6 +7,9 @@
<template #kisi-kurum-bilgileri> <template #kisi-kurum-bilgileri>
<tab-yetkili-uye-bilgileri /> <tab-yetkili-uye-bilgileri />
</template> </template>
<template #piyangolar>
<tab-uye-piyangolar />
</template>
<template #onay-durumu> <template #onay-durumu>
<tab-uye-onay-durumu v-if="usersStore.isPanelUser" /> <tab-uye-onay-durumu v-if="usersStore.isPanelUser" />
<tab-uye-onay-durumu-user v-else /> <tab-uye-onay-durumu-user v-else />
@ -25,6 +28,7 @@
import AdminLayout from '@/layouts/AdminLayout.vue' import AdminLayout from '@/layouts/AdminLayout.vue'
import TabYetkiliUyeBilgileri from '../components/TabYetkiliUyeBilgileri.vue' import TabYetkiliUyeBilgileri from '../components/TabYetkiliUyeBilgileri.vue'
import TabUyePiyangolar from '../components/TabUyePiyangolar.vue'
import TabUyeOnayDurumu from '../components/TabUyeOnayDurumu.vue' import TabUyeOnayDurumu from '../components/TabUyeOnayDurumu.vue'
import TabUyeOnayDurumuUser from '../components/TabUyeOnayDurumuUser.vue' import TabUyeOnayDurumuUser from '../components/TabUyeOnayDurumuUser.vue'
@ -32,6 +36,11 @@
const tabList = ref<Record<string, any>[]>([ const tabList = ref<Record<string, any>[]>([
{ text: 'Kişi/Kurum Bilgileri', id: 'kisi-kurum-bilgileri' } { text: 'Kişi/Kurum Bilgileri', id: 'kisi-kurum-bilgileri' }
]) ])
if (usersStore.isPanelUser || usersStore.isAraciFirma) {
tabList.value.push({ text: 'Piyangolar', id: 'piyangolar' })
}
tabList.value.push({ text: 'Onay Durumu', id: 'onay-durumu' }) tabList.value.push({ text: 'Onay Durumu', id: 'onay-durumu' })
onBeforeMount(async () => { onBeforeMount(async () => {

View File

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

View File

@ -35,13 +35,14 @@ export const useDataStore = defineStore('dataStore', () => {
if (data.data !== undefined) sendData.data = data.data if (data.data !== undefined) sendData.data = data.data
if (data.params !== undefined) sendData.params = data.params if (data.params !== undefined) sendData.params = data.params
if (data.headers !== undefined) sendData.headers = data.headers if (data.headers !== undefined) sendData.headers = data.headers
if (data.toast !== undefined) {
toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout)
}
const response = await axios.get(apiBase.value + api, sendData) const response = await axios.get(apiBase.value + api, sendData)
console.log('response --', api, response) console.log('response --', api, response)
if (data.toast !== undefined) {
toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout)
}
if (data.full !== undefined && data.full) { if (data.full !== undefined && data.full) {
return response return response
} else { } else {
@ -72,12 +73,13 @@ export const useDataStore = defineStore('dataStore', () => {
if (data.options !== undefined) Object.assign(sendData, data.options) if (data.options !== undefined) Object.assign(sendData, data.options)
if (data.params !== undefined) sendData.params = data.params if (data.params !== undefined) sendData.params = data.params
if (data.headers !== undefined) sendData.headers = data.headers if (data.headers !== undefined) sendData.headers = data.headers
const response = await axios.post(apiBase.value + api, postData, sendData)
if (data.toast !== undefined) { if (data.toast !== undefined) {
toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout) toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout)
} }
const response = await axios.post(apiBase.value + api, postData, sendData)
if (data.full !== undefined && data.full) { if (data.full !== undefined && data.full) {
return response return response
} else { } else {
@ -109,11 +111,13 @@ export const useDataStore = defineStore('dataStore', () => {
if (data.options !== undefined) Object.assign(sendData, data.options) if (data.options !== undefined) Object.assign(sendData, data.options)
if (data.params !== undefined) sendData.params = data.params if (data.params !== undefined) sendData.params = data.params
if (data.headers !== undefined) sendData.headers = data.headers if (data.headers !== undefined) sendData.headers = data.headers
const response = await axios.put(apiBase.value + api, postData, sendData)
if (data.toast !== undefined) { if (data.toast !== undefined) {
toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout) toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout)
} }
const response = await axios.put(apiBase.value + api, postData, sendData)
if (data.full !== undefined && data.full) { if (data.full !== undefined && data.full) {
return response return response
} else { } else {
@ -144,11 +148,13 @@ export const useDataStore = defineStore('dataStore', () => {
if (data.options !== undefined) Object.assign(sendData, data.options) if (data.options !== undefined) Object.assign(sendData, data.options)
if (data.params !== undefined) sendData.params = data.params if (data.params !== undefined) sendData.params = data.params
if (data.headers !== undefined) sendData.headers = data.headers if (data.headers !== undefined) sendData.headers = data.headers
const response = await axios.delete(apiBase.value + api, sendData)
if (data.toast !== undefined) { if (data.toast !== undefined) {
toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout) toastStore.AddToast(data.toast.toast, data.toast.type, data.toast.timeout)
} }
const response = await axios.delete(apiBase.value + api, sendData)
if (data.full !== undefined && data.full) { if (data.full !== undefined && data.full) {
return response return response
} else { } else {

View File

@ -1,6 +1,6 @@
{ {
"extends": "@vue/tsconfig/tsconfig.dom.json", "extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue"], "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "Configs.ts"],
"exclude": ["src/**/__tests__/*"], "exclude": ["src/**/__tests__/*"],
"compilerOptions": { "compilerOptions": {
"composite": true, "composite": true,

View File

@ -1,11 +1,12 @@
{ {
"extends": "@tsconfig/node20/tsconfig.json", "extends": "./tsconfig.json",
"include": [ "include": [
"vite.config.*", "vite.config.*",
"vitest.config.*", "vitest.config.*",
"cypress.config.*", "cypress.config.*",
"nightwatch.conf.*", "nightwatch.conf.*",
"playwright.config.*" "playwright.config.*",
"Configs.ts"
], ],
"compilerOptions": { "compilerOptions": {
"composite": true, "composite": true,

View File

@ -3,6 +3,7 @@ import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx' import vueJsx from '@vitejs/plugin-vue-jsx'
import { SetTemplateGroup } from './Configs.js'
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
@ -23,5 +24,46 @@ export default defineConfig({
}, },
esbuild: { esbuild: {
drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : [] drop: process.env.NODE_ENV === 'production' ? ['console', 'debugger'] : []
},
build: {
rollupOptions: {
output: {
manualChunks(id) {
if (id.includes('/src/')) {
const group = SetTemplateGroup(id)
if (group) return `grp_${group}` // group files
}
// jquery files
if (id.includes('node_modules/jquery')) return 'ven_jquery'
if (id.includes('node_modules/summernote')) return 'ven_summer'
if (id.includes('node_modules/pdfmake')) return 'ven_pdfmake'
if (id.includes('node_modules/html-to-pdfmake')) return 'ven_pdfmake'
if (id.includes('node_modules/vue3-pdfmake')) return 'ven_pdfmake'
// other node_modules files
if (id.includes('node_modules')) return 'vendor'
},
assetFileNames: (assetInfo) => {
const name = assetInfo.names?.[0] || assetInfo.name || ''
if (name.endsWith('.css')) {
return 'static/css/[name]-[hash][extname]'
}
if (/\.(png|jpe?g|svg|gif|webp|ico)$/i.test(name)) {
return 'static/images/[name]-[hash][extname]'
}
if (/\.(ttf|woff2?|eot|otf)$/i.test(name)) {
return 'static/fonts/[name]-[hash][extname]'
}
return 'static/[name]-[hash][extname]'
},
chunkFileNames: (chunkInfo) => {
if (chunkInfo.name?.startsWith('grp_')) return 'static/js/[name]-[hash].js'
return 'static/js/[name]-[hash].js'
},
entryFileNames: 'static/js/[name]-[hash].js'
}
}
} }
}) })