From 9c2f02d617d1155527e917b039e7560e55c26b0e Mon Sep 17 00:00:00 2001 From: burakovec Date: Thu, 11 Dec 2025 01:16:38 +0300 Subject: [PATCH] =?UTF-8?q?Add=20PiyangoDetay=20component=20=20"=C3=87ekil?= =?UTF-8?q?i=C5=9F=20Tutana=C4=9F=C4=B1"=20tab.=20Import=20new=20TabPiyang?= =?UTF-8?q?oCekilisTutanagi=20component=20and=20enhance=20tab=20list=20str?= =?UTF-8?q?ucture=20for=20improved=20user=20navigation.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/TabPiyangoCekilisTutanagi.vue | 19 ++++ .../FormPiyangoCekilisTutanagiDisplay.vue | 107 ++++++++++++++++++ .../form/FormPiyangoCekilisTutanagi.vue | 71 ++++++++++++ .../panel/PanelPiyangoCekilisTutanagi.vue | 21 ++++ .../service/piyangoCekilisTutanagiService.ts | 71 ++++++++++++ .../stores/piyangoCekilisTutanagiStore.ts | 37 ++++++ .../piyangoCekilisTutanagiValidationStore.ts | 45 ++++++++ src/module/cekilisler/views/PiyangoDetay.vue | 6 +- 8 files changed, 376 insertions(+), 1 deletion(-) create mode 100644 src/module/cekilisler/components/TabPiyangoCekilisTutanagi.vue create mode 100644 src/module/cekilisler/components/display/FormPiyangoCekilisTutanagiDisplay.vue create mode 100644 src/module/cekilisler/components/form/FormPiyangoCekilisTutanagi.vue create mode 100644 src/module/cekilisler/components/panel/PanelPiyangoCekilisTutanagi.vue create mode 100644 src/module/cekilisler/service/piyangoCekilisTutanagiService.ts create mode 100644 src/module/cekilisler/stores/piyangoCekilisTutanagiStore.ts create mode 100644 src/module/cekilisler/validation/piyangoCekilisTutanagiValidationStore.ts diff --git a/src/module/cekilisler/components/TabPiyangoCekilisTutanagi.vue b/src/module/cekilisler/components/TabPiyangoCekilisTutanagi.vue new file mode 100644 index 0000000..e2c3ad0 --- /dev/null +++ b/src/module/cekilisler/components/TabPiyangoCekilisTutanagi.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/module/cekilisler/components/display/FormPiyangoCekilisTutanagiDisplay.vue b/src/module/cekilisler/components/display/FormPiyangoCekilisTutanagiDisplay.vue new file mode 100644 index 0000000..b0ed337 --- /dev/null +++ b/src/module/cekilisler/components/display/FormPiyangoCekilisTutanagiDisplay.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/module/cekilisler/components/form/FormPiyangoCekilisTutanagi.vue b/src/module/cekilisler/components/form/FormPiyangoCekilisTutanagi.vue new file mode 100644 index 0000000..8b66ea5 --- /dev/null +++ b/src/module/cekilisler/components/form/FormPiyangoCekilisTutanagi.vue @@ -0,0 +1,71 @@ + + + diff --git a/src/module/cekilisler/components/panel/PanelPiyangoCekilisTutanagi.vue b/src/module/cekilisler/components/panel/PanelPiyangoCekilisTutanagi.vue new file mode 100644 index 0000000..51ed7fd --- /dev/null +++ b/src/module/cekilisler/components/panel/PanelPiyangoCekilisTutanagi.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/module/cekilisler/service/piyangoCekilisTutanagiService.ts b/src/module/cekilisler/service/piyangoCekilisTutanagiService.ts new file mode 100644 index 0000000..05890cf --- /dev/null +++ b/src/module/cekilisler/service/piyangoCekilisTutanagiService.ts @@ -0,0 +1,71 @@ +import { defineStore } from 'pinia' +import { useDataStore } from '@/stores/dataStore' +import { usePiyangoStore } from '../stores/piyangoStore' +import { usePiyangoCekilisTutanagiStore } from '../stores/piyangoCekilisTutanagiStore' +import { usePiyangoCekilisTutanagiValidationStore } from '../validation/piyangoCekilisTutanagiValidationStore' + +export const usePiyangoCekilisTutanagiService = defineStore('piyangoCekilisTutanagiService', () => { + const dataStore = useDataStore() + const piyangoStore = usePiyangoStore() + const cekilisTutanagiStore = usePiyangoCekilisTutanagiStore() + const cekilisTutanagiValidationStore = usePiyangoCekilisTutanagiValidationStore() + + const GetDocumentList = async () => { + cekilisTutanagiStore.cekilisTutanagiList.splice( + 0, + cekilisTutanagiStore.cekilisTutanagiList.length + ) + + let dt = await dataStore.dataGet('CekilisTutanak/Cekilis/' + piyangoStore.selectedLottery, { + params: { + pageSize: 50 + } + }) + + if (dt !== 'errorfalse') { + const dataList = Array.isArray(dt) ? dt : (dt.data || []) + cekilisTutanagiStore.cekilisTutanagiList.splice( + 0, + cekilisTutanagiStore.cekilisTutanagiList.length, + ...dataList + ) + } + setTimeout(() => { + cekilisTutanagiStore.loaded = true + }, 30) + } + + const SaveDocument = async () => { + if (cekilisTutanagiValidationStore.FormCheck()) { + const formData = new FormData() + formData.append('dosya', cekilisTutanagiStore.cekilisTutanagiForm.dosya) + formData.append('dokumanAdi', cekilisTutanagiStore.cekilisTutanagiForm.dokumanAdi) + formData.append('cekilisId', String(piyangoStore.selectedLottery)) + let dt: any + + if (!cekilisTutanagiStore.isUpdate) { + dt = await dataStore.dataPost('CekilisTutanak', { + data: formData, + headers: { 'Content-Type': 'multipart/form-data' } + }) + } else { + dt = await dataStore.dataPut( + 'CekilisTutanak/' + cekilisTutanagiStore.cekilisTutanagiForm.id, + { + data: formData, + headers: { 'Content-Type': 'multipart/form-data' } + } + ) + } + if (dt !== 'errorfalse') { + await GetDocumentList() + cekilisTutanagiStore.documentPanel = false + cekilisTutanagiStore.isUpdate = false + } + } else { + cekilisTutanagiValidationStore.isFormValid = true + } + } + return { GetDocumentList, SaveDocument } +}) + diff --git a/src/module/cekilisler/stores/piyangoCekilisTutanagiStore.ts b/src/module/cekilisler/stores/piyangoCekilisTutanagiStore.ts new file mode 100644 index 0000000..7c7d01c --- /dev/null +++ b/src/module/cekilisler/stores/piyangoCekilisTutanagiStore.ts @@ -0,0 +1,37 @@ +import { defineStore } from 'pinia' +import { ref, reactive } from 'vue' +import { usePiyangoStore } from './piyangoStore' + +export const usePiyangoCekilisTutanagiStore = defineStore('piyangoCekilisTutanagiStore', () => { + const piyangoStore = usePiyangoStore() + + const cekilisTutanagiList = ref[]>([]) + const cekilisTutanagiBaseForm = reactive>({ + dosya: null, + cekilisId: piyangoStore.selectedLottery, + dokumanAdi: '' + }) + const cekilisTutanagiForm = reactive>({}) + const cekilisTutanagiSafeForm = reactive>({}) + const isUpdate = ref(false) + const refreshList = ref(false) + const documentPanel = ref(false) + const loaded = ref(false) + + const ResetForm = () => { + Object.assign(cekilisTutanagiForm, cekilisTutanagiBaseForm) + } + + return { + cekilisTutanagiList, + cekilisTutanagiBaseForm, + cekilisTutanagiForm, + cekilisTutanagiSafeForm, + isUpdate, + refreshList, + documentPanel, + loaded, + ResetForm + } +}) + diff --git a/src/module/cekilisler/validation/piyangoCekilisTutanagiValidationStore.ts b/src/module/cekilisler/validation/piyangoCekilisTutanagiValidationStore.ts new file mode 100644 index 0000000..f25f317 --- /dev/null +++ b/src/module/cekilisler/validation/piyangoCekilisTutanagiValidationStore.ts @@ -0,0 +1,45 @@ +import { defineStore } from 'pinia' +import { ref, reactive } from 'vue' +import { useValidationStore } from '@/stores/validationStore' +import { usePiyangoCekilisTutanagiStore } from '../stores/piyangoCekilisTutanagiStore' + +export const usePiyangoCekilisTutanagiValidationStore = defineStore( + 'piyangoCekilisTutanagiValidationStore', + () => { + const cekilisTutanagiStore = usePiyangoCekilisTutanagiStore() + const validationStore = useValidationStore() + + const formChanged = ref(false) + const isFormValid = ref(true) + const invalidTexts = reactive>({}) + + const FormCheck = (): boolean => { + Object.assign(invalidTexts, {}) + + validationStore.IsFieldEmpty( + cekilisTutanagiStore.cekilisTutanagiForm, + invalidTexts, + 'dokumanAdi', + 'Döküman için bir başlık belirtmelisiniz.' + ) + + validationStore.IsFieldEmpty( + cekilisTutanagiStore.cekilisTutanagiForm, + invalidTexts, + 'dosya', + 'Bir döküman eklemelisiniz.' + ) + + isFormValid.value = Object.keys(invalidTexts).length === 0 + return isFormValid.value + } + + return { + formChanged, + isFormValid, + invalidTexts, + FormCheck + } + } +) + diff --git a/src/module/cekilisler/views/PiyangoDetay.vue b/src/module/cekilisler/views/PiyangoDetay.vue index e0c0f92..c6b401e 100644 --- a/src/module/cekilisler/views/PiyangoDetay.vue +++ b/src/module/cekilisler/views/PiyangoDetay.vue @@ -13,7 +13,7 @@ - + @@ -55,6 +55,7 @@ import TabPiyangoLoglari from '@/module/cekilisler/components/TabPiyangoLoglari.vue' import TabPiyangoKatilimciListesi from '@/module/cekilisler/components/TabPiyangoKatilimciListesi.vue' import TabPiyangoTalihliListesi from '@/module/cekilisler/components/TabPiyangoTalihliListesi.vue' + import TabPiyangoCekilisTutanagi from '@/module/cekilisler/components/TabPiyangoCekilisTutanagi.vue' import TabPiyangoBilgileri from '@/module/cekilisler/components/TabPiyangoBilgileri.vue' import TabPiyangoBilgileriDisplay from '../components/TabPiyangoBilgileriDisplay.vue' import TabPiyangoItiraz from '@/module/cekilisler/components/TabPiyangoItiraz.vue' @@ -79,9 +80,12 @@ tabList.value.push( { text: 'Katılım Listesi', id: 'katilim-listesi' }, + { text: 'Çekiliş Tutanağı', id: 'cekilis-tutanagi' }, { text: 'Talihliler', id: 'talihliler' }, { text: 'İtiraz/Şikayet', id: 'itiraz-sikayet' } ) + } else { + tabList.value.push({ text: 'Çekiliş Tutanağı', id: 'cekilis-tutanagi' }) } if (usersStore.isPanelUser) { tabList.value.push(